From b36887c1e3a2ca77ec17b6bd976f504f6c91fcec Mon Sep 17 00:00:00 2001 From: Jan Kulmann Date: Thu, 5 Jul 2012 10:59:25 +0200 Subject: [PATCH] initial --- ajax_dispatcher.php | 269 + classes/AbstractPageDispatcher.class.php | 50 + classes/Auth.class.php | 110 + classes/Comment.class.php | 98 + classes/Content.class.php | 59 + classes/CryptMP.class.php | 67 + classes/Downloader.class.php | 94 + classes/FeedGenerator.class.php | 144 + classes/GUIRenderer.class.php | 396 + classes/Generator.class.php | 99 + classes/History.class.php | 51 + classes/HitlistDispatcher.class.php | 64 + classes/MFile.class.php | 121 + classes/MPDBM.class.php | 745 + classes/MailRenderer.class.php | 123 + classes/Perm.class.php | 128 + classes/Plugin.class.php | 370 + classes/Release.class.php | 267 + classes/Screenshot.class.php | 111 + classes/Search.class.php | 120 + classes/Session.class.php | 65 + classes/StudipAuth.class.php | 85 + classes/User.class.php | 169 + classes/UserManagement.class.php | 139 + classes/XmlExporter.class.php | 68 + css/basis.css | 443 + css/jquery.lightbox-0.5.css | 101 + css/jquery/images/ui-anim_basic_16x16.gif | Bin 0 -> 1553 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_55_999999_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 182 bytes .../images/ui-bg_flat_75_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_45_0078ae_1x400.png | Bin 0 -> 136 bytes .../images/ui-bg_glass_55_f8da4e_1x400.png | Bin 0 -> 168 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_79c9ec_1x400.png | Bin 0 -> 132 bytes .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 162 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 123 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_gloss-wave_45_e14f1c_500x100.png | Bin 0 -> 3649 bytes .../ui-bg_gloss-wave_50_6eac2c_500x100.png | Bin 0 -> 4256 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 3457 bytes .../ui-bg_gloss-wave_75_2191c0_500x100.png | Bin 0 -> 3457 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 104 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 88 bytes css/jquery/images/ui-icons_0078ae_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_056b93_256x240.png | Bin 0 -> 5355 bytes css/jquery/images/ui-icons_217bc0_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_469bdd_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_6da8d5_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_e0fdff_256x240.png | Bin 0 -> 5355 bytes css/jquery/images/ui-icons_f5e175_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_f7a50d_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_f9bd01_256x240.png | Bin 0 -> 4369 bytes css/jquery/images/ui-icons_fcd113_256x240.png | Bin 0 -> 4369 bytes css/jquery/jquery-ui-1.8.custom.css | 480 + css/jquery/jquery.ui.accordion.css | 10 + css/jquery/jquery.ui.all.css | 2 + css/jquery/jquery.ui.autocomplete.css | 35 + css/jquery/jquery.ui.base.css | 10 + css/jquery/jquery.ui.button.css | 35 + css/jquery/jquery.ui.core.css | 37 + css/jquery/jquery.ui.datepicker.css | 61 + css/jquery/jquery.ui.dialog.css | 13 + css/jquery/jquery.ui.progressbar.css | 4 + css/jquery/jquery.ui.resizable.css | 13 + css/jquery/jquery.ui.slider.css | 17 + css/jquery/jquery.ui.tabs.css | 11 + css/jquery/jquery.ui.theme.css | 249 + css/newstyle/style.css | 687 + css/newstyle/style_content.css | 86 + css/star_rating.css | 147 + css/tagcloud.css | 31 + css/tags_autocompleter.css | 23 + images/accordion_down.gif | Bin 0 -> 856 bytes images/accordion_normal.gif | Bin 0 -> 76 bytes images/ausruf_small3.gif | Bin 0 -> 572 bytes images/beliebte-tags.png | Bin 0 -> 1519 bytes images/bigbutton_background.png | Bin 0 -> 868 bytes images/blauerpfeil_links.png | Bin 0 -> 618 bytes images/blauerpfeil_rechts.png | Bin 0 -> 326 bytes images/comment_item_background.png | Bin 0 -> 174 bytes images/download_icon.png | Bin 0 -> 5013 bytes images/edit_transparent.gif | Bin 0 -> 247 bytes images/erweiterte_suche.png | Bin 0 -> 543 bytes images/fuer-entwickler.png | Bin 0 -> 1357 bytes images/hitlisten.png | Bin 0 -> 945 bytes images/icons/16/blue/accept.png | Bin 0 -> 1222 bytes images/icons/16/blue/add/chat.png | Bin 0 -> 1164 bytes images/icons/16/blue/add/crown.png | Bin 0 -> 1119 bytes images/icons/16/blue/add/date.png | Bin 0 -> 1250 bytes images/icons/16/blue/add/file.png | Bin 0 -> 1148 bytes images/icons/16/blue/add/folder-empty.png | Bin 0 -> 1097 bytes images/icons/16/blue/add/forum.png | Bin 0 -> 1170 bytes images/icons/16/blue/add/literature.png | Bin 0 -> 1132 bytes images/icons/16/blue/add/mail.png | Bin 0 -> 1182 bytes images/icons/16/blue/add/person.png | Bin 0 -> 1157 bytes images/icons/16/blue/add/resources.png | Bin 0 -> 1167 bytes images/icons/16/blue/add/rss.png | Bin 0 -> 1277 bytes images/icons/16/blue/add/schedule.png | Bin 0 -> 1277 bytes images/icons/16/blue/add/search.png | Bin 0 -> 1230 bytes images/icons/16/blue/add/seminar.png | Bin 0 -> 1238 bytes images/icons/16/blue/add/test.png | Bin 0 -> 1182 bytes images/icons/16/blue/add/vote.png | Bin 0 -> 1101 bytes images/icons/16/blue/add/wiki.png | Bin 0 -> 1182 bytes images/icons/16/blue/admin.png | Bin 0 -> 1304 bytes images/icons/16/blue/arr_1down.png | Bin 0 -> 1222 bytes images/icons/16/blue/arr_1left.png | Bin 0 -> 1210 bytes images/icons/16/blue/arr_1right.png | Bin 0 -> 1192 bytes images/icons/16/blue/arr_1up.png | Bin 0 -> 1215 bytes images/icons/16/blue/arr_2down.png | Bin 0 -> 1288 bytes images/icons/16/blue/arr_2left.png | Bin 0 -> 1235 bytes images/icons/16/blue/arr_2right.png | Bin 0 -> 1242 bytes images/icons/16/blue/arr_2up.png | Bin 0 -> 1273 bytes images/icons/16/blue/arr_eol-down.png | Bin 0 -> 1236 bytes images/icons/16/blue/arr_eol-left.png | Bin 0 -> 1227 bytes images/icons/16/blue/arr_eol-right.png | Bin 0 -> 1227 bytes images/icons/16/blue/arr_eol-up.png | Bin 0 -> 1224 bytes images/icons/16/blue/breaking-news.png | Bin 0 -> 1187 bytes images/icons/16/blue/chat.png | Bin 0 -> 1138 bytes images/icons/16/blue/checkbox-checked.png | Bin 0 -> 1174 bytes images/icons/16/blue/checkbox-unchecked.png | Bin 0 -> 1098 bytes images/icons/16/blue/comment.png | Bin 0 -> 1255 bytes images/icons/16/blue/community.png | Bin 0 -> 1265 bytes images/icons/16/blue/crown.png | Bin 0 -> 1165 bytes images/icons/16/blue/date.png | Bin 0 -> 1216 bytes images/icons/16/blue/decline.png | Bin 0 -> 1250 bytes images/icons/16/blue/door-enter.png | Bin 0 -> 1077 bytes images/icons/16/blue/door-leave.png | Bin 0 -> 1077 bytes images/icons/16/blue/download.png | Bin 0 -> 1103 bytes images/icons/16/blue/edit.png | Bin 0 -> 1182 bytes images/icons/16/blue/exclaim-circle.png | Bin 0 -> 1267 bytes images/icons/16/blue/exclaim.png | Bin 0 -> 1124 bytes images/icons/16/blue/file-archive.png | Bin 0 -> 1129 bytes images/icons/16/blue/file-audio.png | Bin 0 -> 1111 bytes images/icons/16/blue/file-generic.png | Bin 0 -> 1095 bytes images/icons/16/blue/file-image.png | Bin 0 -> 1203 bytes images/icons/16/blue/file-pdf.png | Bin 0 -> 1172 bytes images/icons/16/blue/file-presentation.png | Bin 0 -> 1137 bytes images/icons/16/blue/file-text.png | Bin 0 -> 1116 bytes images/icons/16/blue/file-video.png | Bin 0 -> 1121 bytes images/icons/16/blue/file-xls.png | Bin 0 -> 1170 bytes images/icons/16/blue/file.png | Bin 0 -> 1101 bytes images/icons/16/blue/files.png | Bin 0 -> 1120 bytes images/icons/16/blue/folder-empty.png | Bin 0 -> 1072 bytes images/icons/16/blue/folder-full.png | Bin 0 -> 1088 bytes images/icons/16/blue/forum-shrink.png | Bin 0 -> 1142 bytes images/icons/16/blue/forum.png | Bin 0 -> 1154 bytes images/icons/16/blue/group.png | Bin 0 -> 1114 bytes images/icons/16/blue/guestbook.png | Bin 0 -> 1202 bytes images/icons/16/blue/home.png | Bin 0 -> 1161 bytes images/icons/16/blue/info-circle.png | Bin 0 -> 1267 bytes images/icons/16/blue/info.png | Bin 0 -> 1172 bytes images/icons/16/blue/infopage.png | Bin 0 -> 1120 bytes images/icons/16/blue/install.png | Bin 0 -> 1227 bytes images/icons/16/blue/institute.png | Bin 0 -> 1226 bytes images/icons/16/blue/learnmodule.png | Bin 0 -> 1327 bytes images/icons/16/blue/link-extern.png | Bin 0 -> 1196 bytes images/icons/16/blue/link-intern.png | Bin 0 -> 1271 bytes images/icons/16/blue/literature.png | Bin 0 -> 1181 bytes images/icons/16/blue/lock-locked.png | Bin 0 -> 1317 bytes images/icons/16/blue/lock-unlocked.png | Bin 0 -> 1312 bytes images/icons/16/blue/log.png | Bin 0 -> 1096 bytes images/icons/16/blue/mail.png | Bin 0 -> 1231 bytes images/icons/16/blue/minus.png | Bin 0 -> 1048 bytes images/icons/16/blue/move_right/file.png | Bin 0 -> 1145 bytes images/icons/16/blue/move_right/files.png | Bin 0 -> 1170 bytes .../icons/16/blue/move_right/folder-empty.png | Bin 0 -> 1125 bytes .../icons/16/blue/move_right/folder-full.png | Bin 0 -> 1144 bytes images/icons/16/blue/move_right/mail.png | Bin 0 -> 1181 bytes images/icons/16/blue/move_right/seminar.png | Bin 0 -> 1248 bytes images/icons/16/blue/new/admin.png | Bin 0 -> 1283 bytes images/icons/16/blue/new/breaking-news.png | Bin 0 -> 1272 bytes images/icons/16/blue/new/chat.png | Bin 0 -> 1241 bytes images/icons/16/blue/new/comment.png | Bin 0 -> 1233 bytes images/icons/16/blue/new/community.png | Bin 0 -> 1265 bytes images/icons/16/blue/new/crown.png | Bin 0 -> 1170 bytes images/icons/16/blue/new/date.png | Bin 0 -> 1306 bytes images/icons/16/blue/new/file.png | Bin 0 -> 1209 bytes images/icons/16/blue/new/files.png | Bin 0 -> 1230 bytes images/icons/16/blue/new/folder-empty.png | Bin 0 -> 1177 bytes images/icons/16/blue/new/folder-full.png | Bin 0 -> 1187 bytes images/icons/16/blue/new/forum.png | Bin 0 -> 1231 bytes images/icons/16/blue/new/home.png | Bin 0 -> 1170 bytes images/icons/16/blue/new/infopage.png | Bin 0 -> 1205 bytes images/icons/16/blue/new/learnmodule.png | Bin 0 -> 1304 bytes images/icons/16/blue/new/literature.png | Bin 0 -> 1207 bytes images/icons/16/blue/new/log.png | Bin 0 -> 1219 bytes images/icons/16/blue/new/mail.png | Bin 0 -> 1236 bytes images/icons/16/blue/new/news.png | Bin 0 -> 1326 bytes images/icons/16/blue/new/person.png | Bin 0 -> 1216 bytes images/icons/16/blue/new/persons.png | Bin 0 -> 1243 bytes images/icons/16/blue/new/plugin.png | Bin 0 -> 1269 bytes images/icons/16/blue/new/resources.png | Bin 0 -> 1218 bytes images/icons/16/blue/new/rss.png | Bin 0 -> 1349 bytes images/icons/16/blue/new/schedule.png | Bin 0 -> 1327 bytes images/icons/16/blue/new/search.png | Bin 0 -> 1297 bytes images/icons/16/blue/new/seminar.png | Bin 0 -> 1297 bytes images/icons/16/blue/new/studygroup.png | Bin 0 -> 1327 bytes images/icons/16/blue/new/test.png | Bin 0 -> 1186 bytes images/icons/16/blue/new/tools.png | Bin 0 -> 1250 bytes images/icons/16/blue/new/vcard.png | Bin 0 -> 1233 bytes images/icons/16/blue/new/video.png | Bin 0 -> 1228 bytes images/icons/16/blue/new/vote.png | Bin 0 -> 1175 bytes images/icons/16/blue/new/wiki.png | Bin 0 -> 1234 bytes images/icons/16/blue/news.png | Bin 0 -> 1296 bytes images/icons/16/blue/pause.png | Bin 0 -> 1025 bytes images/icons/16/blue/person.png | Bin 0 -> 1192 bytes images/icons/16/blue/persons.png | Bin 0 -> 1206 bytes images/icons/16/blue/play.png | Bin 0 -> 1109 bytes images/icons/16/blue/plugin.png | Bin 0 -> 1244 bytes images/icons/16/blue/plus.png | Bin 0 -> 1105 bytes images/icons/16/blue/print.png | Bin 0 -> 1139 bytes images/icons/16/blue/question-circle.png | Bin 0 -> 1272 bytes images/icons/16/blue/question.png | Bin 0 -> 1213 bytes images/icons/16/blue/refresh.png | Bin 0 -> 1321 bytes images/icons/16/blue/remove/person.png | Bin 0 -> 1136 bytes images/icons/16/blue/remove/resources.png | Bin 0 -> 1158 bytes images/icons/16/blue/resources.png | Bin 0 -> 1207 bytes images/icons/16/blue/roles.png | Bin 0 -> 1154 bytes images/icons/16/blue/rss.png | Bin 0 -> 1332 bytes images/icons/16/blue/schedule.png | Bin 0 -> 1331 bytes images/icons/16/blue/search.png | Bin 0 -> 1293 bytes images/icons/16/blue/seminar.png | Bin 0 -> 1235 bytes images/icons/16/blue/smiley.png | Bin 0 -> 1253 bytes images/icons/16/blue/staple.png | Bin 0 -> 1301 bytes images/icons/16/blue/star.png | Bin 0 -> 1167 bytes images/icons/16/blue/stop.png | Bin 0 -> 1024 bytes images/icons/16/blue/studygroup.png | Bin 0 -> 1263 bytes images/icons/16/blue/test.png | Bin 0 -> 1182 bytes images/icons/16/blue/tools.png | Bin 0 -> 1243 bytes images/icons/16/blue/trash.png | Bin 0 -> 1157 bytes images/icons/16/blue/upload.png | Bin 0 -> 1101 bytes images/icons/16/blue/vcard.png | Bin 0 -> 1132 bytes images/icons/16/blue/video.png | Bin 0 -> 1162 bytes images/icons/16/blue/visibility-invisible.png | Bin 0 -> 1256 bytes images/icons/16/blue/visibility-visible.png | Bin 0 -> 1286 bytes images/icons/16/blue/vote-stopped.png | Bin 0 -> 1170 bytes images/icons/16/blue/vote.png | Bin 0 -> 1133 bytes images/icons/16/blue/wiki.png | Bin 0 -> 1232 bytes images/icons/16/white/accept.png | Bin 0 -> 1107 bytes images/icons/16/white/admin.png | Bin 0 -> 1211 bytes images/icons/16/white/arr_1down.png | Bin 0 -> 1136 bytes images/icons/16/white/arr_1left.png | Bin 0 -> 1133 bytes images/icons/16/white/arr_1right.png | Bin 0 -> 1138 bytes images/icons/16/white/arr_1up.png | Bin 0 -> 1148 bytes images/icons/16/white/arr_2down.png | Bin 0 -> 1205 bytes images/icons/16/white/arr_2left.png | Bin 0 -> 1153 bytes images/icons/16/white/arr_2right.png | Bin 0 -> 1162 bytes images/icons/16/white/arr_2up.png | Bin 0 -> 1193 bytes images/icons/16/white/arr_eol-down.png | Bin 0 -> 1229 bytes images/icons/16/white/arr_eol-left.png | Bin 0 -> 1142 bytes images/icons/16/white/arr_eol-right.png | Bin 0 -> 1140 bytes images/icons/16/white/arr_eol-up.png | Bin 0 -> 1155 bytes images/icons/16/white/breaking-news.png | Bin 0 -> 1172 bytes images/icons/16/white/chat.png | Bin 0 -> 1123 bytes images/icons/16/white/checkbox-checked.png | Bin 0 -> 1104 bytes images/icons/16/white/checkbox-unchecked.png | Bin 0 -> 1020 bytes images/icons/16/white/comment.png | Bin 0 -> 1156 bytes images/icons/16/white/community.png | Bin 0 -> 1159 bytes images/icons/16/white/crown.png | Bin 0 -> 1109 bytes images/icons/16/white/date.png | Bin 0 -> 1155 bytes images/icons/16/white/decline.png | Bin 0 -> 1136 bytes images/icons/16/white/door-enter.png | Bin 0 -> 1070 bytes images/icons/16/white/door-leave.png | Bin 0 -> 1073 bytes images/icons/16/white/download.png | Bin 0 -> 1093 bytes images/icons/16/white/edit.png | Bin 0 -> 1163 bytes images/icons/16/white/exclaim-circle.png | Bin 0 -> 1202 bytes images/icons/16/white/exclaim.png | Bin 0 -> 1114 bytes images/icons/16/white/file-audio.png | Bin 0 -> 2896 bytes images/icons/16/white/file-video.png | Bin 0 -> 2902 bytes images/icons/16/white/file.png | Bin 0 -> 1088 bytes images/icons/16/white/files.png | Bin 0 -> 1104 bytes images/icons/16/white/folder-empty.png | Bin 0 -> 1060 bytes images/icons/16/white/folder-full.png | Bin 0 -> 1074 bytes images/icons/16/white/forum-shrink.png | Bin 0 -> 1128 bytes images/icons/16/white/forum.png | Bin 0 -> 1147 bytes images/icons/16/white/group.png | Bin 0 -> 1100 bytes images/icons/16/white/guestbook.png | Bin 0 -> 1121 bytes images/icons/16/white/home.png | Bin 0 -> 1082 bytes images/icons/16/white/info-circle.png | Bin 0 -> 1200 bytes images/icons/16/white/info.png | Bin 0 -> 1155 bytes images/icons/16/white/infopage.png | Bin 0 -> 1102 bytes images/icons/16/white/install.png | Bin 0 -> 1160 bytes images/icons/16/white/institute.png | Bin 0 -> 1126 bytes images/icons/16/white/learnmodule.png | Bin 0 -> 1198 bytes images/icons/16/white/link-extern.png | Bin 0 -> 1152 bytes images/icons/16/white/link-intern.png | Bin 0 -> 1215 bytes images/icons/16/white/literature.png | Bin 0 -> 1073 bytes images/icons/16/white/lock-locked.png | Bin 0 -> 1219 bytes images/icons/16/white/lock-unlocked.png | Bin 0 -> 1226 bytes images/icons/16/white/log.png | Bin 0 -> 1094 bytes images/icons/16/white/mail.png | Bin 0 -> 1144 bytes images/icons/16/white/minus.png | Bin 0 -> 1041 bytes images/icons/16/white/news.png | Bin 0 -> 1216 bytes images/icons/16/white/pause.png | Bin 0 -> 1022 bytes images/icons/16/white/person.png | Bin 0 -> 1108 bytes images/icons/16/white/persons.png | Bin 0 -> 1121 bytes images/icons/16/white/play.png | Bin 0 -> 1099 bytes images/icons/16/white/plugin.png | Bin 0 -> 1141 bytes images/icons/16/white/plus.png | Bin 0 -> 1095 bytes images/icons/16/white/print.png | Bin 0 -> 1133 bytes images/icons/16/white/question-circle.png | Bin 0 -> 1337 bytes images/icons/16/white/question.png | Bin 0 -> 1190 bytes images/icons/16/white/refresh.png | Bin 0 -> 1187 bytes images/icons/16/white/resources.png | Bin 0 -> 1117 bytes images/icons/16/white/roles.png | Bin 0 -> 1134 bytes images/icons/16/white/rss.png | Bin 0 -> 1191 bytes images/icons/16/white/schedule.png | Bin 0 -> 1209 bytes images/icons/16/white/search.png | Bin 0 -> 1155 bytes images/icons/16/white/seminar.png | Bin 0 -> 1201 bytes images/icons/16/white/smiley.png | Bin 0 -> 1238 bytes images/icons/16/white/staple.png | Bin 0 -> 1169 bytes images/icons/16/white/star.png | Bin 0 -> 1167 bytes images/icons/16/white/start.png | Bin 0 -> 1099 bytes images/icons/16/white/stop.png | Bin 0 -> 1018 bytes images/icons/16/white/studygroup.png | Bin 0 -> 1212 bytes images/icons/16/white/test.png | Bin 0 -> 1141 bytes images/icons/16/white/tools.png | Bin 0 -> 1225 bytes images/icons/16/white/trash.png | Bin 0 -> 1074 bytes images/icons/16/white/upload.png | Bin 0 -> 1095 bytes images/icons/16/white/vcard.png | Bin 0 -> 1113 bytes images/icons/16/white/video.png | Bin 0 -> 1137 bytes .../icons/16/white/visibility-invisible.png | Bin 0 -> 1098 bytes images/icons/16/white/visibility-visible.png | Bin 0 -> 1133 bytes images/icons/16/white/vote-stopped.png | Bin 0 -> 1142 bytes images/icons/16/white/vote.png | Bin 0 -> 1045 bytes images/icons/16/white/wiki.png | Bin 0 -> 1141 bytes images/icons/award_star_gold_1.png | Bin 0 -> 753 bytes images/icons/award_star_silver_1.png | Bin 0 -> 714 bytes images/icons/brick_add.png | Bin 0 -> 729 bytes images/icons/bricks.png | Bin 0 -> 825 bytes images/icons/cross.png | Bin 0 -> 655 bytes images/icons/cross_inv.png | Bin 0 -> 1049 bytes images/icons/delete.png | Bin 0 -> 715 bytes images/icons/favicon.ico | Bin 0 -> 5686 bytes images/icons/feed_atom.png | Bin 0 -> 821 bytes images/icons/feed_rss.png | Bin 0 -> 691 bytes images/icons/folder.png | Bin 0 -> 537 bytes images/icons/group.png | Bin 0 -> 753 bytes images/icons/help.png | Bin 0 -> 786 bytes images/icons/icon_attention.png | Bin 0 -> 4567 bytes images/icons/icon_error.png | Bin 0 -> 4319 bytes images/icons/icon_exception.png | Bin 0 -> 4340 bytes images/icons/icon_info.png | Bin 0 -> 4319 bytes images/icons/icon_success.png | Bin 0 -> 4348 bytes images/icons/information.png | Bin 0 -> 778 bytes images/icons/link.png | Bin 0 -> 343 bytes images/icons/lock.png | Bin 0 -> 749 bytes images/icons/maximize_inv.png | Bin 0 -> 253 bytes images/icons/minimize_inv.png | Bin 0 -> 251 bytes images/icons/pencil.png | Bin 0 -> 450 bytes images/icons/star.png | Bin 0 -> 670 bytes images/icons/studip_portal.gif | Bin 0 -> 389 bytes images/icons/user.png | Bin 0 -> 741 bytes images/icons/user_edit.png | Bin 0 -> 833 bytes images/icons/world_link.png | Bin 0 -> 957 bytes images/icons/zoom.png | Bin 0 -> 692 bytes images/kategorien-titel.png | Bin 0 -> 1504 bytes images/languages/lang_de.gif | Bin 0 -> 462 bytes images/languages/lang_de_en.gif | Bin 0 -> 1249 bytes images/languages/lang_en.gif | Bin 0 -> 728 bytes images/lightbox/lightbox-blank.gif | Bin 0 -> 43 bytes images/lightbox/lightbox-btn-close.gif | Bin 0 -> 700 bytes images/lightbox/lightbox-btn-next.gif | Bin 0 -> 812 bytes images/lightbox/lightbox-btn-prev.gif | Bin 0 -> 832 bytes images/lightbox/lightbox-ico-loading.gif | Bin 0 -> 3990 bytes .../locale/de/LC_BUTTONS/abbrechen-button.png | Bin 0 -> 1939 bytes .../de/LC_BUTTONS/abschicken-button.png | Bin 0 -> 2062 bytes .../locale/de/LC_BUTTONS/absenden-button.png | Bin 0 -> 1962 bytes .../de/LC_BUTTONS/bearbeiten-button.png | Bin 0 -> 1366 bytes images/locale/de/LC_BUTTONS/edit-button.png | Bin 0 -> 1065 bytes .../locale/de/LC_BUTTONS/erstellen-button.png | Bin 0 -> 1252 bytes .../de/LC_BUTTONS/fertigstellen-button.png | Bin 0 -> 1946 bytes .../de/LC_BUTTONS/freischalten-button.png | Bin 0 -> 1543 bytes .../locale/de/LC_BUTTONS/loeschen-button.png | Bin 0 -> 1427 bytes images/locale/de/LC_BUTTONS/login-button.png | Bin 0 -> 1814 bytes images/locale/de/LC_BUTTONS/magic-button.png | Bin 0 -> 1319 bytes .../locale/de/LC_BUTTONS/releases-button.png | Bin 0 -> 1356 bytes .../locale/de/LC_BUTTONS/rezension-button.png | Bin 0 -> 1482 bytes .../de/LC_BUTTONS/screenshots-button.png | Bin 0 -> 1653 bytes .../locale/de/LC_BUTTONS/speichern-button.png | Bin 0 -> 1950 bytes .../locale/de/LC_BUTTONS/sperren-button.png | Bin 0 -> 1579 bytes images/locale/de/LC_BUTTONS/suchen-button.png | Bin 0 -> 1306 bytes images/locale/de/LC_BUTTONS/weiter-button.png | Bin 0 -> 1319 bytes .../locale/de/LC_BUTTONS/zurueck-button.png | Bin 0 -> 1326 bytes .../locale/de/LC_BUTTONS/zurueck2-button.png | Bin 0 -> 1199 bytes .../locale/de/LC_BUTTONS/zuweisen-button.png | Bin 0 -> 1449 bytes images/logo_tu_bs.jpg | Bin 0 -> 35885 bytes images/logo_uni_bremen.gif | Bin 0 -> 1814 bytes images/marketplace_header.png | Bin 0 -> 29427 bytes images/marketplace_header.png.ori | Bin 0 -> 14412 bytes images/marketplace_header_small.png | Bin 0 -> 10270 bytes images/mitglieder_ev.png | Bin 0 -> 3195 bytes images/mitglieder_ev.png.old | Bin 0 -> 5382 bytes images/move_left.gif | Bin 0 -> 86 bytes images/move_right.gif | Bin 0 -> 87 bytes images/nachricht1.gif | Bin 0 -> 295 bytes images/newstyle/sip_bg-top.jpg | Bin 0 -> 533 bytes images/newstyle/sip_block-bg.jpg | Bin 0 -> 356 bytes images/newstyle/sip_block-bottom.jpg | Bin 0 -> 1113 bytes images/newstyle/sip_block-mystud-top.jpg | Bin 0 -> 3242 bytes images/newstyle/sip_block-std-top.jpg | Bin 0 -> 4097 bytes images/newstyle/sip_block-top.jpg | Bin 0 -> 1105 bytes images/newstyle/sip_bullet-active.gif | Bin 0 -> 53 bytes images/newstyle/sip_content-bg-right.jpg | Bin 0 -> 321 bytes images/newstyle/sip_content-bg.jpg | Bin 0 -> 7970 bytes images/newstyle/sip_content-bottom-left.jpg | Bin 0 -> 4453 bytes images/newstyle/sip_content-bottom-right.jpg | Bin 0 -> 457 bytes images/newstyle/sip_content-bottom.jpg | Bin 0 -> 1845 bytes images/newstyle/sip_content-top-left.jpg | Bin 0 -> 20919 bytes images/newstyle/sip_content-top-left.jpg.old | Bin 0 -> 17841 bytes images/newstyle/sip_content-top-right.jpg | Bin 0 -> 505 bytes images/newstyle/sip_logo.jpg | Bin 0 -> 10737 bytes images/nobody_medium.png | Bin 0 -> 8344 bytes images/nobody_normal.png | Bin 0 -> 33171 bytes images/nobody_small.png | Bin 0 -> 1128 bytes images/one_pixel.gif | Bin 0 -> 43 bytes images/plugin_item_background.png | Bin 0 -> 213 bytes images/release_item_background.png | Bin 0 -> 202 bytes images/star.gif | Bin 0 -> 1141 bytes images/steel1.jpg | Bin 0 -> 275 bytes images/steelblau.jpg | Bin 0 -> 541 bytes images/steelgraulight.jpg | Bin 0 -> 435 bytes images/suche.png | Bin 0 -> 303 bytes images/suchen.gif | Bin 0 -> 276 bytes images/tagcloud.png | Bin 0 -> 18884 bytes images/thumb_down.png | Bin 0 -> 464 bytes images/thumb_up.png | Bin 0 -> 473 bytes images/trash.gif | Bin 0 -> 604 bytes images/trash2.gif | Bin 0 -> 898 bytes images/unknown-plugin.png | Bin 0 -> 7302 bytes images/wait24trans.gif | Bin 0 -> 5040 bytes include/bootstrap.inc.php | 119 + include/includes.inc.php | 42 + include/language.inc.php | 203 + include/visual.inc.php | 46 + index.php | 704 + js/accordion.js | 201 + js/calendarpopup/AnchorPosition.js | 147 + js/calendarpopup/CalendarPopup.js | 692 + js/calendarpopup/PopupWindow.js | 336 + js/calendarpopup/date.js | 335 + js/jquery/jquery-1.4.2.min.js | 154 + js/jquery/jquery-ui-1.8.custom.min.js | 374 + .../jquery.textarearesizer.compressed.js | 1 + js/jquery/jquery.watermark.js | 141 + js/lightbox/jquery.js | 32 + js/lightbox/jquery.lightbox-0.5.js | 472 + js/lightbox/jquery.lightbox-0.5.min.js | 42 + js/lightbox/jquery.lightbox-0.5.pack.js | 14 + js/marketplace.js | 23 + js/scriptaculous/builder.js | 131 + js/scriptaculous/controls.js | 835 + js/scriptaculous/dragdrop.js | 944 + js/scriptaculous/effects.js | 1130 ++ js/scriptaculous/prototype.js | 4874 +++++ js/scriptaculous/scriptaculous.js | 60 + js/scriptaculous/slider.js | 278 + js/scriptaculous/unittest.js | 564 + lib/Avatar.class.php | 416 + lib/CssClassSwitcher.inc.php | 163 + lib/DBManager.class.php | 182 + lib/MessageBox.class.php | 111 + lib/Request.class.php | 395 + lib/captcha/AHGBold.ttf | Bin 0 -> 144556 bytes lib/captcha/LICENSE.txt | 458 + lib/captcha/README.FONT.txt | 12 + lib/captcha/README.txt | 88 + lib/captcha/audio/0.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/0.wav | Bin 0 -> 22158 bytes lib/captcha/audio/1.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/1.wav | Bin 0 -> 22158 bytes lib/captcha/audio/2.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/2.wav | Bin 0 -> 22158 bytes lib/captcha/audio/3.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/3.wav | Bin 0 -> 22158 bytes lib/captcha/audio/4.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/4.wav | Bin 0 -> 22158 bytes lib/captcha/audio/5.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/5.wav | Bin 0 -> 22158 bytes lib/captcha/audio/6.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/6.wav | Bin 0 -> 22158 bytes lib/captcha/audio/7.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/7.wav | Bin 0 -> 22158 bytes lib/captcha/audio/8.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/8.wav | Bin 0 -> 22158 bytes lib/captcha/audio/9.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/9.wav | Bin 0 -> 22158 bytes lib/captcha/audio/A.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/A.wav | Bin 0 -> 22158 bytes lib/captcha/audio/B.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/B.wav | Bin 0 -> 22158 bytes lib/captcha/audio/C.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/C.wav | Bin 0 -> 22158 bytes lib/captcha/audio/D.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/D.wav | Bin 0 -> 22158 bytes lib/captcha/audio/E.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/E.wav | Bin 0 -> 22158 bytes lib/captcha/audio/F.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/F.wav | Bin 0 -> 22158 bytes lib/captcha/audio/G.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/G.wav | Bin 0 -> 22158 bytes lib/captcha/audio/H.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/H.wav | Bin 0 -> 22158 bytes lib/captcha/audio/I.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/I.wav | Bin 0 -> 22158 bytes lib/captcha/audio/J.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/J.wav | Bin 0 -> 22158 bytes lib/captcha/audio/K.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/K.wav | Bin 0 -> 22158 bytes lib/captcha/audio/L.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/L.wav | Bin 0 -> 22158 bytes lib/captcha/audio/M.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/M.wav | Bin 0 -> 22158 bytes lib/captcha/audio/N.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/N.wav | Bin 0 -> 22158 bytes lib/captcha/audio/O.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/O.wav | Bin 0 -> 22158 bytes lib/captcha/audio/P.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/P.wav | Bin 0 -> 22158 bytes lib/captcha/audio/Q.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/Q.wav | Bin 0 -> 22158 bytes lib/captcha/audio/R.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/R.wav | Bin 0 -> 22158 bytes lib/captcha/audio/S.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/S.wav | Bin 0 -> 22158 bytes lib/captcha/audio/T.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/T.wav | Bin 0 -> 22158 bytes lib/captcha/audio/U.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/U.wav | Bin 0 -> 22158 bytes lib/captcha/audio/V.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/V.wav | Bin 0 -> 22158 bytes lib/captcha/audio/W.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/W.wav | Bin 0 -> 22158 bytes lib/captcha/audio/X.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/X.wav | Bin 0 -> 22158 bytes lib/captcha/audio/Y.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/Y.wav | Bin 0 -> 22158 bytes lib/captcha/audio/Z.mp3 | Bin 0 -> 8928 bytes lib/captcha/audio/Z.wav | Bin 0 -> 22158 bytes lib/captcha/backgrounds/bg3.jpg | Bin 0 -> 15854 bytes lib/captcha/backgrounds/bg4.jpg | Bin 0 -> 16438 bytes lib/captcha/backgrounds/bg5.jpg | Bin 0 -> 48746 bytes lib/captcha/backgrounds/bg6.png | Bin 0 -> 42880 bytes lib/captcha/database/.htaccess | 1 + lib/captcha/database/index.html | 1 + lib/captcha/database/securimage.sqlite | Bin 0 -> 30720 bytes lib/captcha/example_form.php | 71 + lib/captcha/gdfonts/automatic.gdf | Bin 0 -> 61196 bytes lib/captcha/images/audio_icon.gif | Bin 0 -> 621 bytes lib/captcha/images/refresh.gif | Bin 0 -> 865 bytes lib/captcha/securimage.php | 1584 ++ lib/captcha/securimage_play.php | 43 + lib/captcha/securimage_play.swf | Bin 0 -> 3102 bytes lib/captcha/securimage_show.php | 55 + lib/captcha/securimage_show_example.php | 64 + lib/captcha/securimage_show_example2.php | 55 + lib/captcha/words/words.txt | 15621 ++++++++++++++++ lib/feedcreator/feedcreator.class.php | 1778 ++ lib/flexi/flexi.php | 42 + lib/flexi/helper/js_helper.php | 137 + lib/flexi/helper/json.php | 806 + lib/flexi/helper/prototype_helper.php | 768 + lib/flexi/helper/scriptaculous_helper.php | 131 + lib/flexi/helper/tag_helper.php | 162 + lib/flexi/helper/text_helper.php | 184 + lib/flexi/js_template.php | 55 + lib/flexi/php_template.php | 102 + lib/flexi/template.php | 250 + lib/flexi/template_factory.php | 166 + lib/tinymce/changelog.txt | 1084 ++ lib/tinymce/examples/css/content.css | 105 + lib/tinymce/examples/css/word.css | 53 + lib/tinymce/examples/custom_formats.html | 111 + lib/tinymce/examples/full.html | 101 + lib/tinymce/examples/index.html | 10 + lib/tinymce/examples/lists/image_list.js | 9 + lib/tinymce/examples/lists/link_list.js | 10 + lib/tinymce/examples/lists/media_list.js | 10 + lib/tinymce/examples/lists/template_list.js | 9 + lib/tinymce/examples/media/logo.jpg | Bin 0 -> 2729 bytes lib/tinymce/examples/media/logo_over.jpg | Bin 0 -> 6473 bytes lib/tinymce/examples/media/sample.avi | Bin 0 -> 82944 bytes lib/tinymce/examples/media/sample.dcr | Bin 0 -> 6774 bytes lib/tinymce/examples/media/sample.mov | Bin 0 -> 55622 bytes lib/tinymce/examples/media/sample.ram | 1 + lib/tinymce/examples/media/sample.rm | Bin 0 -> 17846 bytes lib/tinymce/examples/media/sample.swf | Bin 0 -> 6118 bytes lib/tinymce/examples/menu.html | 17 + lib/tinymce/examples/simple.html | 47 + lib/tinymce/examples/skins.html | 216 + lib/tinymce/examples/templates/layout1.htm | 15 + lib/tinymce/examples/templates/snippet1.htm | 1 + lib/tinymce/examples/translate.html | 84 + lib/tinymce/examples/word.html | 71 + lib/tinymce/jscripts/tiny_mce/langs/en.js | 170 + lib/tinymce/jscripts/tiny_mce/license.txt | 504 + .../tiny_mce/plugins/advhr/css/advhr.css | 5 + .../tiny_mce/plugins/advhr/editor_plugin.js | 1 + .../plugins/advhr/editor_plugin_src.js | 57 + .../tiny_mce/plugins/advhr/js/rule.js | 43 + .../tiny_mce/plugins/advhr/langs/en_dlg.js | 5 + .../jscripts/tiny_mce/plugins/advhr/rule.htm | 57 + .../plugins/advimage/css/advimage.css | 13 + .../plugins/advimage/editor_plugin.js | 1 + .../plugins/advimage/editor_plugin_src.js | 50 + .../tiny_mce/plugins/advimage/image.htm | 232 + .../tiny_mce/plugins/advimage/img/sample.gif | Bin 0 -> 1624 bytes .../tiny_mce/plugins/advimage/js/image.js | 443 + .../tiny_mce/plugins/advimage/langs/en_dlg.js | 43 + .../tiny_mce/plugins/advlink/css/advlink.css | 8 + .../tiny_mce/plugins/advlink/editor_plugin.js | 1 + .../plugins/advlink/editor_plugin_src.js | 61 + .../tiny_mce/plugins/advlink/js/advlink.js | 528 + .../tiny_mce/plugins/advlink/langs/en_dlg.js | 52 + .../tiny_mce/plugins/advlink/link.htm | 333 + .../tiny_mce/plugins/advlist/editor_plugin.js | 1 + .../plugins/advlist/editor_plugin_src.js | 154 + .../plugins/autoresize/editor_plugin.js | 1 + .../plugins/autoresize/editor_plugin_src.js | 119 + .../plugins/autosave/editor_plugin.js | 1 + .../plugins/autosave/editor_plugin_src.js | 422 + .../tiny_mce/plugins/autosave/langs/en.js | 4 + .../tiny_mce/plugins/bbcode/editor_plugin.js | 1 + .../plugins/bbcode/editor_plugin_src.js | 120 + .../plugins/contextmenu/editor_plugin.js | 1 + .../plugins/contextmenu/editor_plugin_src.js | 147 + .../plugins/directionality/editor_plugin.js | 1 + .../directionality/editor_plugin_src.js | 82 + .../plugins/emotions/editor_plugin.js | 1 + .../plugins/emotions/editor_plugin_src.js | 43 + .../tiny_mce/plugins/emotions/emotions.htm | 40 + .../plugins/emotions/img/smiley-cool.gif | Bin 0 -> 354 bytes .../plugins/emotions/img/smiley-cry.gif | Bin 0 -> 329 bytes .../emotions/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emotions/img/smiley-foot-in-mouth.gif | Bin 0 -> 344 bytes .../plugins/emotions/img/smiley-frown.gif | Bin 0 -> 340 bytes .../plugins/emotions/img/smiley-innocent.gif | Bin 0 -> 336 bytes .../plugins/emotions/img/smiley-kiss.gif | Bin 0 -> 338 bytes .../plugins/emotions/img/smiley-laughing.gif | Bin 0 -> 344 bytes .../emotions/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emotions/img/smiley-sealed.gif | Bin 0 -> 325 bytes .../plugins/emotions/img/smiley-smile.gif | Bin 0 -> 345 bytes .../plugins/emotions/img/smiley-surprised.gif | Bin 0 -> 342 bytes .../emotions/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../plugins/emotions/img/smiley-undecided.gif | Bin 0 -> 337 bytes .../plugins/emotions/img/smiley-wink.gif | Bin 0 -> 351 bytes .../plugins/emotions/img/smiley-yell.gif | Bin 0 -> 336 bytes .../tiny_mce/plugins/emotions/js/emotions.js | 22 + .../tiny_mce/plugins/emotions/langs/en_dlg.js | 20 + .../tiny_mce/plugins/example/dialog.htm | 22 + .../tiny_mce/plugins/example/editor_plugin.js | 1 + .../plugins/example/editor_plugin_src.js | 84 + .../tiny_mce/plugins/example/img/example.gif | Bin 0 -> 87 bytes .../tiny_mce/plugins/example/js/dialog.js | 19 + .../tiny_mce/plugins/example/langs/en.js | 3 + .../tiny_mce/plugins/example/langs/en_dlg.js | 3 + .../plugins/fullpage/css/fullpage.css | 182 + .../plugins/fullpage/editor_plugin.js | 1 + .../plugins/fullpage/editor_plugin_src.js | 153 + .../tiny_mce/plugins/fullpage/fullpage.htm | 571 + .../tiny_mce/plugins/fullpage/js/fullpage.js | 471 + .../tiny_mce/plugins/fullpage/langs/en_dlg.js | 85 + .../plugins/fullscreen/editor_plugin.js | 1 + .../plugins/fullscreen/editor_plugin_src.js | 151 + .../plugins/fullscreen/fullscreen.htm | 109 + .../tiny_mce/plugins/iespell/editor_plugin.js | 1 + .../plugins/iespell/editor_plugin_src.js | 54 + .../plugins/inlinepopups/editor_plugin.js | 1 + .../plugins/inlinepopups/editor_plugin_src.js | 635 + .../skins/clearlooks2/img/alert.gif | Bin 0 -> 818 bytes .../skins/clearlooks2/img/button.gif | Bin 0 -> 280 bytes .../skins/clearlooks2/img/buttons.gif | Bin 0 -> 1195 bytes .../skins/clearlooks2/img/confirm.gif | Bin 0 -> 915 bytes .../skins/clearlooks2/img/corners.gif | Bin 0 -> 911 bytes .../skins/clearlooks2/img/horizontal.gif | Bin 0 -> 769 bytes .../skins/clearlooks2/img/vertical.gif | Bin 0 -> 92 bytes .../inlinepopups/skins/clearlooks2/window.css | 90 + .../plugins/inlinepopups/template.htm | 387 + .../plugins/insertdatetime/editor_plugin.js | 1 + .../insertdatetime/editor_plugin_src.js | 83 + .../tiny_mce/plugins/layer/editor_plugin.js | 1 + .../plugins/layer/editor_plugin_src.js | 212 + .../plugins/legacyoutput/editor_plugin.js | 1 + .../plugins/legacyoutput/editor_plugin_src.js | 136 + .../tiny_mce/plugins/media/css/content.css | 6 + .../tiny_mce/plugins/media/css/media.css | 16 + .../tiny_mce/plugins/media/editor_plugin.js | 1 + .../plugins/media/editor_plugin_src.js | 414 + .../tiny_mce/plugins/media/img/flash.gif | Bin 0 -> 241 bytes .../tiny_mce/plugins/media/img/flv_player.swf | Bin 0 -> 11668 bytes .../tiny_mce/plugins/media/img/quicktime.gif | Bin 0 -> 303 bytes .../tiny_mce/plugins/media/img/realmedia.gif | Bin 0 -> 439 bytes .../tiny_mce/plugins/media/img/shockwave.gif | Bin 0 -> 387 bytes .../tiny_mce/plugins/media/img/trans.gif | Bin 0 -> 43 bytes .../plugins/media/img/windowsmedia.gif | Bin 0 -> 415 bytes .../tiny_mce/plugins/media/js/embed.js | 73 + .../tiny_mce/plugins/media/js/media.js | 630 + .../tiny_mce/plugins/media/langs/en_dlg.js | 103 + .../jscripts/tiny_mce/plugins/media/media.htm | 817 + .../plugins/nonbreaking/editor_plugin.js | 1 + .../plugins/nonbreaking/editor_plugin_src.js | 53 + .../plugins/noneditable/editor_plugin.js | 1 + .../plugins/noneditable/editor_plugin_src.js | 90 + .../plugins/pagebreak/css/content.css | 1 + .../plugins/pagebreak/editor_plugin.js | 1 + .../plugins/pagebreak/editor_plugin_src.js | 77 + .../plugins/pagebreak/img/pagebreak.gif | Bin 0 -> 325 bytes .../tiny_mce/plugins/pagebreak/img/trans.gif | Bin 0 -> 43 bytes .../tiny_mce/plugins/paste/editor_plugin.js | 1 + .../plugins/paste/editor_plugin_src.js | 952 + .../tiny_mce/plugins/paste/js/pastetext.js | 36 + .../tiny_mce/plugins/paste/js/pasteword.js | 51 + .../tiny_mce/plugins/paste/langs/en_dlg.js | 5 + .../tiny_mce/plugins/paste/pastetext.htm | 27 + .../tiny_mce/plugins/paste/pasteword.htm | 21 + .../tiny_mce/plugins/preview/editor_plugin.js | 1 + .../plugins/preview/editor_plugin_src.js | 53 + .../tiny_mce/plugins/preview/example.html | 28 + .../plugins/preview/jscripts/embed.js | 73 + .../tiny_mce/plugins/preview/preview.html | 17 + .../tiny_mce/plugins/print/editor_plugin.js | 1 + .../plugins/print/editor_plugin_src.js | 34 + .../tiny_mce/plugins/save/editor_plugin.js | 1 + .../plugins/save/editor_plugin_src.js | 101 + .../searchreplace/css/searchreplace.css | 6 + .../plugins/searchreplace/editor_plugin.js | 1 + .../searchreplace/editor_plugin_src.js | 57 + .../plugins/searchreplace/js/searchreplace.js | 130 + .../plugins/searchreplace/langs/en_dlg.js | 16 + .../plugins/searchreplace/searchreplace.htm | 99 + .../plugins/spellchecker/css/content.css | 1 + .../plugins/spellchecker/editor_plugin.js | 1 + .../plugins/spellchecker/editor_plugin_src.js | 417 + .../plugins/spellchecker/img/wline.gif | Bin 0 -> 46 bytes .../tiny_mce/plugins/style/css/props.css | 13 + .../tiny_mce/plugins/style/editor_plugin.js | 1 + .../plugins/style/editor_plugin_src.js | 55 + .../tiny_mce/plugins/style/js/props.js | 641 + .../tiny_mce/plugins/style/langs/en_dlg.js | 63 + .../jscripts/tiny_mce/plugins/style/props.htm | 723 + .../plugins/tabfocus/editor_plugin.js | 1 + .../plugins/tabfocus/editor_plugin_src.js | 112 + .../jscripts/tiny_mce/plugins/table/cell.htm | 178 + .../tiny_mce/plugins/table/css/cell.css | 17 + .../tiny_mce/plugins/table/css/row.css | 25 + .../tiny_mce/plugins/table/css/table.css | 13 + .../tiny_mce/plugins/table/editor_plugin.js | 1 + .../plugins/table/editor_plugin_src.js | 1125 ++ .../tiny_mce/plugins/table/js/cell.js | 286 + .../tiny_mce/plugins/table/js/merge_cells.js | 27 + .../jscripts/tiny_mce/plugins/table/js/row.js | 237 + .../tiny_mce/plugins/table/js/table.js | 449 + .../tiny_mce/plugins/table/langs/en_dlg.js | 74 + .../tiny_mce/plugins/table/merge_cells.htm | 32 + .../jscripts/tiny_mce/plugins/table/row.htm | 155 + .../jscripts/tiny_mce/plugins/table/table.htm | 187 + .../tiny_mce/plugins/template/blank.htm | 12 + .../plugins/template/css/template.css | 23 + .../plugins/template/editor_plugin.js | 1 + .../plugins/template/editor_plugin_src.js | 159 + .../tiny_mce/plugins/template/js/template.js | 106 + .../tiny_mce/plugins/template/langs/en_dlg.js | 15 + .../tiny_mce/plugins/template/template.htm | 31 + .../plugins/visualchars/editor_plugin.js | 1 + .../plugins/visualchars/editor_plugin_src.js | 83 + .../plugins/wordcount/editor_plugin.js | 1 + .../plugins/wordcount/editor_plugin_src.js | 98 + .../tiny_mce/plugins/xhtmlxtras/abbr.htm | 141 + .../tiny_mce/plugins/xhtmlxtras/acronym.htm | 141 + .../plugins/xhtmlxtras/attributes.htm | 148 + .../tiny_mce/plugins/xhtmlxtras/cite.htm | 141 + .../plugins/xhtmlxtras/css/attributes.css | 11 + .../tiny_mce/plugins/xhtmlxtras/css/popup.css | 9 + .../tiny_mce/plugins/xhtmlxtras/del.htm | 161 + .../plugins/xhtmlxtras/editor_plugin.js | 1 + .../plugins/xhtmlxtras/editor_plugin_src.js | 132 + .../tiny_mce/plugins/xhtmlxtras/ins.htm | 161 + .../tiny_mce/plugins/xhtmlxtras/js/abbr.js | 28 + .../tiny_mce/plugins/xhtmlxtras/js/acronym.js | 28 + .../plugins/xhtmlxtras/js/attributes.js | 126 + .../tiny_mce/plugins/xhtmlxtras/js/cite.js | 28 + .../tiny_mce/plugins/xhtmlxtras/js/del.js | 63 + .../plugins/xhtmlxtras/js/element_common.js | 231 + .../tiny_mce/plugins/xhtmlxtras/js/ins.js | 62 + .../plugins/xhtmlxtras/langs/en_dlg.js | 32 + .../tiny_mce/themes/advanced/about.htm | 54 + .../tiny_mce/themes/advanced/anchor.htm | 26 + .../tiny_mce/themes/advanced/charmap.htm | 52 + .../tiny_mce/themes/advanced/color_picker.htm | 73 + .../themes/advanced/editor_template.js | 1 + .../themes/advanced/editor_template_src.js | 1217 ++ .../tiny_mce/themes/advanced/image.htm | 80 + .../themes/advanced/img/colorpicker.jpg | Bin 0 -> 3189 bytes .../tiny_mce/themes/advanced/img/icons.gif | Bin 0 -> 11794 bytes .../tiny_mce/themes/advanced/js/about.js | 72 + .../tiny_mce/themes/advanced/js/anchor.js | 37 + .../tiny_mce/themes/advanced/js/charmap.js | 335 + .../themes/advanced/js/color_picker.js | 253 + .../tiny_mce/themes/advanced/js/image.js | 245 + .../tiny_mce/themes/advanced/js/link.js | 156 + .../themes/advanced/js/source_editor.js | 62 + .../tiny_mce/themes/advanced/langs/en.js | 62 + .../tiny_mce/themes/advanced/langs/en_dlg.js | 51 + .../tiny_mce/themes/advanced/link.htm | 58 + .../themes/advanced/skins/default/content.css | 36 + .../themes/advanced/skins/default/dialog.css | 117 + .../advanced/skins/default/img/buttons.png | Bin 0 -> 3274 bytes .../advanced/skins/default/img/items.gif | Bin 0 -> 70 bytes .../advanced/skins/default/img/menu_arrow.gif | Bin 0 -> 68 bytes .../advanced/skins/default/img/menu_check.gif | Bin 0 -> 70 bytes .../advanced/skins/default/img/progress.gif | Bin 0 -> 1787 bytes .../advanced/skins/default/img/tabs.gif | Bin 0 -> 1326 bytes .../themes/advanced/skins/default/ui.css | 213 + .../themes/advanced/skins/o2k7/content.css | 36 + .../themes/advanced/skins/o2k7/dialog.css | 116 + .../advanced/skins/o2k7/img/button_bg.png | Bin 0 -> 5859 bytes .../skins/o2k7/img/button_bg_black.png | Bin 0 -> 3736 bytes .../skins/o2k7/img/button_bg_silver.png | Bin 0 -> 5358 bytes .../themes/advanced/skins/o2k7/ui.css | 215 + .../themes/advanced/skins/o2k7/ui_black.css | 8 + .../themes/advanced/skins/o2k7/ui_silver.css | 5 + .../themes/advanced/source_editor.htm | 25 + .../tiny_mce/themes/simple/editor_template.js | 1 + .../themes/simple/editor_template_src.js | 85 + .../tiny_mce/themes/simple/img/icons.gif | Bin 0 -> 1440 bytes .../tiny_mce/themes/simple/langs/en.js | 11 + .../themes/simple/skins/default/content.css | 25 + .../themes/simple/skins/default/ui.css | 32 + .../themes/simple/skins/o2k7/content.css | 17 + .../simple/skins/o2k7/img/button_bg.png | Bin 0 -> 5102 bytes .../tiny_mce/themes/simple/skins/o2k7/ui.css | 35 + lib/tinymce/jscripts/tiny_mce/tiny_mce.js | 1 + .../jscripts/tiny_mce/tiny_mce_popup.js | 5 + lib/tinymce/jscripts/tiny_mce/tiny_mce_src.js | 14170 ++++++++++++++ .../tiny_mce/utils/editable_selects.js | 70 + .../jscripts/tiny_mce/utils/form_utils.js | 200 + lib/tinymce/jscripts/tiny_mce/utils/mctabs.js | 77 + .../jscripts/tiny_mce/utils/validate.js | 220 + sql/marketplace.sql | 162 + sql/marketplace_data.sql | 23 + templates/category_item.php | 4 + templates/category_item_available.php | 3 + templates/comment_item.php | 15 + templates/comments.php | 38 + templates/confirmation_successful.php | 7 + templates/datenschutz.php | 1 + templates/dep_plugin_item.php | 3 + templates/dep_release_item_available.php | 3 + templates/dep_release_item_current.php | 4 + templates/edit_content.php | 39 + templates/edit_plugin.php | 295 + templates/edit_plugin_assi.php | 265 + templates/edit_release.php | 158 + templates/edit_rezension.php | 50 + templates/edit_screenshot_details.php | 16 + templates/edit_screenshots.php | 61 + templates/edit_user_profle.php | 86 + templates/extended_search.php | 37 + templates/faq.php | 1 + templates/footer.php | 2 + templates/greeting_logged_in.php | 67 + templates/header.php | 16 + templates/header.php.old | 11 + templates/history.php | 6 + templates/impressum.php | 4 + templates/list_unclear_plugins.php | 16 + templates/login.php | 36 + templates/mails/mail_comment.php | 8 + templates/mails/mail_new_plugin.php | 6 + templates/mails/mail_plugin_approvement.php | 12 + templates/mails/mail_plugin_suspend.php | 12 + templates/mails/mail_register.php | 23 + templates/mails/reset_password.php | 10 + templates/message_box.php | 23 + templates/modal_window.php | 99 + templates/modal_window_rezension.php | 99 + templates/not_logged_in.php | 2 + templates/nutzungsbedingungen.php | 1 + templates/page_shift.php | 73 + templates/plugin_detail.php | 135 + templates/plugin_item.php | 75 + templates/plugin_page.php | 46 + templates/plugins/administration.php | 41 + templates/plugins/homepage.php | 50 + templates/plugins/manifest.php | 10 + templates/plugins/portal.php | 54 + templates/plugins/standard.php | 49 + templates/plugins/system.php | 40 + templates/profile.php | 31 + templates/question.php | 58 + templates/rating.php | 11 + templates/rating_js.php | 24 + templates/rating_no_action.php | 11 + templates/register.php | 86 + templates/release_detail.php | 44 + templates/release_item.php | 38 + templates/request_password.php | 45 + templates/search_plugins.php | 2 + templates/show_plugin_generator.php | 64 + templates/show_tag_cloud.php | 8 + templates/start.php | 315 + templates/start.php.old | 189 + templates/user_edit_form.php | 83 + templates/user_management.php | 23 + 917 files changed, 85387 insertions(+) create mode 100644 ajax_dispatcher.php create mode 100644 classes/AbstractPageDispatcher.class.php create mode 100644 classes/Auth.class.php create mode 100644 classes/Comment.class.php create mode 100644 classes/Content.class.php create mode 100644 classes/CryptMP.class.php create mode 100644 classes/Downloader.class.php create mode 100644 classes/FeedGenerator.class.php create mode 100644 classes/GUIRenderer.class.php create mode 100644 classes/Generator.class.php create mode 100644 classes/History.class.php create mode 100644 classes/HitlistDispatcher.class.php create mode 100644 classes/MFile.class.php create mode 100644 classes/MPDBM.class.php create mode 100644 classes/MailRenderer.class.php create mode 100644 classes/Perm.class.php create mode 100644 classes/Plugin.class.php create mode 100644 classes/Release.class.php create mode 100644 classes/Screenshot.class.php create mode 100644 classes/Search.class.php create mode 100644 classes/Session.class.php create mode 100644 classes/StudipAuth.class.php create mode 100644 classes/User.class.php create mode 100644 classes/UserManagement.class.php create mode 100644 classes/XmlExporter.class.php create mode 100644 css/basis.css create mode 100644 css/jquery.lightbox-0.5.css create mode 100644 css/jquery/images/ui-anim_basic_16x16.gif create mode 100644 css/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 css/jquery/images/ui-bg_flat_55_999999_40x100.png create mode 100644 css/jquery/images/ui-bg_flat_55_fbec88_40x100.png create mode 100644 css/jquery/images/ui-bg_flat_75_aaaaaa_40x100.png create mode 100644 css/jquery/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 css/jquery/images/ui-bg_glass_45_0078ae_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_55_f8da4e_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_75_79c9ec_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 css/jquery/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 css/jquery/images/ui-bg_gloss-wave_45_e14f1c_500x100.png create mode 100644 css/jquery/images/ui-bg_gloss-wave_50_6eac2c_500x100.png create mode 100644 css/jquery/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 css/jquery/images/ui-bg_gloss-wave_75_2191c0_500x100.png create mode 100644 css/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 css/jquery/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 css/jquery/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 css/jquery/images/ui-icons_0078ae_256x240.png create mode 100644 css/jquery/images/ui-icons_056b93_256x240.png create mode 100644 css/jquery/images/ui-icons_217bc0_256x240.png create mode 100644 css/jquery/images/ui-icons_222222_256x240.png create mode 100644 css/jquery/images/ui-icons_2e83ff_256x240.png create mode 100644 css/jquery/images/ui-icons_454545_256x240.png create mode 100644 css/jquery/images/ui-icons_469bdd_256x240.png create mode 100644 css/jquery/images/ui-icons_6da8d5_256x240.png create mode 100644 css/jquery/images/ui-icons_888888_256x240.png create mode 100644 css/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 css/jquery/images/ui-icons_d8e7f3_256x240.png create mode 100644 css/jquery/images/ui-icons_e0fdff_256x240.png create mode 100644 css/jquery/images/ui-icons_f5e175_256x240.png create mode 100644 css/jquery/images/ui-icons_f7a50d_256x240.png create mode 100644 css/jquery/images/ui-icons_f9bd01_256x240.png create mode 100644 css/jquery/images/ui-icons_fcd113_256x240.png create mode 100644 css/jquery/jquery-ui-1.8.custom.css create mode 100644 css/jquery/jquery.ui.accordion.css create mode 100644 css/jquery/jquery.ui.all.css create mode 100644 css/jquery/jquery.ui.autocomplete.css create mode 100644 css/jquery/jquery.ui.base.css create mode 100644 css/jquery/jquery.ui.button.css create mode 100644 css/jquery/jquery.ui.core.css create mode 100644 css/jquery/jquery.ui.datepicker.css create mode 100644 css/jquery/jquery.ui.dialog.css create mode 100644 css/jquery/jquery.ui.progressbar.css create mode 100644 css/jquery/jquery.ui.resizable.css create mode 100644 css/jquery/jquery.ui.slider.css create mode 100644 css/jquery/jquery.ui.tabs.css create mode 100644 css/jquery/jquery.ui.theme.css create mode 100644 css/newstyle/style.css create mode 100644 css/newstyle/style_content.css create mode 100644 css/star_rating.css create mode 100644 css/tagcloud.css create mode 100644 css/tags_autocompleter.css create mode 100644 images/accordion_down.gif create mode 100644 images/accordion_normal.gif create mode 100644 images/ausruf_small3.gif create mode 100644 images/beliebte-tags.png create mode 100644 images/bigbutton_background.png create mode 100644 images/blauerpfeil_links.png create mode 100644 images/blauerpfeil_rechts.png create mode 100644 images/comment_item_background.png create mode 100644 images/download_icon.png create mode 100644 images/edit_transparent.gif create mode 100644 images/erweiterte_suche.png create mode 100644 images/fuer-entwickler.png create mode 100644 images/hitlisten.png create mode 100644 images/icons/16/blue/accept.png create mode 100644 images/icons/16/blue/add/chat.png create mode 100644 images/icons/16/blue/add/crown.png create mode 100644 images/icons/16/blue/add/date.png create mode 100644 images/icons/16/blue/add/file.png create mode 100644 images/icons/16/blue/add/folder-empty.png create mode 100644 images/icons/16/blue/add/forum.png create mode 100644 images/icons/16/blue/add/literature.png create mode 100644 images/icons/16/blue/add/mail.png create mode 100644 images/icons/16/blue/add/person.png create mode 100644 images/icons/16/blue/add/resources.png create mode 100644 images/icons/16/blue/add/rss.png create mode 100644 images/icons/16/blue/add/schedule.png create mode 100644 images/icons/16/blue/add/search.png create mode 100644 images/icons/16/blue/add/seminar.png create mode 100644 images/icons/16/blue/add/test.png create mode 100644 images/icons/16/blue/add/vote.png create mode 100644 images/icons/16/blue/add/wiki.png create mode 100644 images/icons/16/blue/admin.png create mode 100644 images/icons/16/blue/arr_1down.png create mode 100644 images/icons/16/blue/arr_1left.png create mode 100644 images/icons/16/blue/arr_1right.png create mode 100644 images/icons/16/blue/arr_1up.png create mode 100644 images/icons/16/blue/arr_2down.png create mode 100644 images/icons/16/blue/arr_2left.png create mode 100644 images/icons/16/blue/arr_2right.png create mode 100644 images/icons/16/blue/arr_2up.png create mode 100644 images/icons/16/blue/arr_eol-down.png create mode 100644 images/icons/16/blue/arr_eol-left.png create mode 100644 images/icons/16/blue/arr_eol-right.png create mode 100644 images/icons/16/blue/arr_eol-up.png create mode 100644 images/icons/16/blue/breaking-news.png create mode 100644 images/icons/16/blue/chat.png create mode 100644 images/icons/16/blue/checkbox-checked.png create mode 100644 images/icons/16/blue/checkbox-unchecked.png create mode 100644 images/icons/16/blue/comment.png create mode 100644 images/icons/16/blue/community.png create mode 100644 images/icons/16/blue/crown.png create mode 100644 images/icons/16/blue/date.png create mode 100644 images/icons/16/blue/decline.png create mode 100644 images/icons/16/blue/door-enter.png create mode 100644 images/icons/16/blue/door-leave.png create mode 100644 images/icons/16/blue/download.png create mode 100644 images/icons/16/blue/edit.png create mode 100644 images/icons/16/blue/exclaim-circle.png create mode 100644 images/icons/16/blue/exclaim.png create mode 100644 images/icons/16/blue/file-archive.png create mode 100644 images/icons/16/blue/file-audio.png create mode 100644 images/icons/16/blue/file-generic.png create mode 100644 images/icons/16/blue/file-image.png create mode 100644 images/icons/16/blue/file-pdf.png create mode 100644 images/icons/16/blue/file-presentation.png create mode 100644 images/icons/16/blue/file-text.png create mode 100644 images/icons/16/blue/file-video.png create mode 100644 images/icons/16/blue/file-xls.png create mode 100644 images/icons/16/blue/file.png create mode 100644 images/icons/16/blue/files.png create mode 100644 images/icons/16/blue/folder-empty.png create mode 100644 images/icons/16/blue/folder-full.png create mode 100644 images/icons/16/blue/forum-shrink.png create mode 100644 images/icons/16/blue/forum.png create mode 100644 images/icons/16/blue/group.png create mode 100644 images/icons/16/blue/guestbook.png create mode 100644 images/icons/16/blue/home.png create mode 100644 images/icons/16/blue/info-circle.png create mode 100644 images/icons/16/blue/info.png create mode 100644 images/icons/16/blue/infopage.png create mode 100644 images/icons/16/blue/install.png create mode 100644 images/icons/16/blue/institute.png create mode 100644 images/icons/16/blue/learnmodule.png create mode 100644 images/icons/16/blue/link-extern.png create mode 100644 images/icons/16/blue/link-intern.png create mode 100644 images/icons/16/blue/literature.png create mode 100644 images/icons/16/blue/lock-locked.png create mode 100644 images/icons/16/blue/lock-unlocked.png create mode 100644 images/icons/16/blue/log.png create mode 100644 images/icons/16/blue/mail.png create mode 100644 images/icons/16/blue/minus.png create mode 100644 images/icons/16/blue/move_right/file.png create mode 100644 images/icons/16/blue/move_right/files.png create mode 100644 images/icons/16/blue/move_right/folder-empty.png create mode 100644 images/icons/16/blue/move_right/folder-full.png create mode 100644 images/icons/16/blue/move_right/mail.png create mode 100644 images/icons/16/blue/move_right/seminar.png create mode 100644 images/icons/16/blue/new/admin.png create mode 100644 images/icons/16/blue/new/breaking-news.png create mode 100644 images/icons/16/blue/new/chat.png create mode 100644 images/icons/16/blue/new/comment.png create mode 100644 images/icons/16/blue/new/community.png create mode 100644 images/icons/16/blue/new/crown.png create mode 100644 images/icons/16/blue/new/date.png create mode 100644 images/icons/16/blue/new/file.png create mode 100644 images/icons/16/blue/new/files.png create mode 100644 images/icons/16/blue/new/folder-empty.png create mode 100644 images/icons/16/blue/new/folder-full.png create mode 100644 images/icons/16/blue/new/forum.png create mode 100644 images/icons/16/blue/new/home.png create mode 100644 images/icons/16/blue/new/infopage.png create mode 100644 images/icons/16/blue/new/learnmodule.png create mode 100644 images/icons/16/blue/new/literature.png create mode 100644 images/icons/16/blue/new/log.png create mode 100644 images/icons/16/blue/new/mail.png create mode 100644 images/icons/16/blue/new/news.png create mode 100644 images/icons/16/blue/new/person.png create mode 100644 images/icons/16/blue/new/persons.png create mode 100644 images/icons/16/blue/new/plugin.png create mode 100644 images/icons/16/blue/new/resources.png create mode 100644 images/icons/16/blue/new/rss.png create mode 100644 images/icons/16/blue/new/schedule.png create mode 100644 images/icons/16/blue/new/search.png create mode 100644 images/icons/16/blue/new/seminar.png create mode 100644 images/icons/16/blue/new/studygroup.png create mode 100644 images/icons/16/blue/new/test.png create mode 100644 images/icons/16/blue/new/tools.png create mode 100644 images/icons/16/blue/new/vcard.png create mode 100644 images/icons/16/blue/new/video.png create mode 100644 images/icons/16/blue/new/vote.png create mode 100644 images/icons/16/blue/new/wiki.png create mode 100644 images/icons/16/blue/news.png create mode 100644 images/icons/16/blue/pause.png create mode 100644 images/icons/16/blue/person.png create mode 100644 images/icons/16/blue/persons.png create mode 100644 images/icons/16/blue/play.png create mode 100644 images/icons/16/blue/plugin.png create mode 100644 images/icons/16/blue/plus.png create mode 100644 images/icons/16/blue/print.png create mode 100644 images/icons/16/blue/question-circle.png create mode 100644 images/icons/16/blue/question.png create mode 100644 images/icons/16/blue/refresh.png create mode 100644 images/icons/16/blue/remove/person.png create mode 100644 images/icons/16/blue/remove/resources.png create mode 100644 images/icons/16/blue/resources.png create mode 100644 images/icons/16/blue/roles.png create mode 100644 images/icons/16/blue/rss.png create mode 100644 images/icons/16/blue/schedule.png create mode 100644 images/icons/16/blue/search.png create mode 100644 images/icons/16/blue/seminar.png create mode 100644 images/icons/16/blue/smiley.png create mode 100644 images/icons/16/blue/staple.png create mode 100644 images/icons/16/blue/star.png create mode 100644 images/icons/16/blue/stop.png create mode 100644 images/icons/16/blue/studygroup.png create mode 100644 images/icons/16/blue/test.png create mode 100644 images/icons/16/blue/tools.png create mode 100644 images/icons/16/blue/trash.png create mode 100644 images/icons/16/blue/upload.png create mode 100644 images/icons/16/blue/vcard.png create mode 100644 images/icons/16/blue/video.png create mode 100644 images/icons/16/blue/visibility-invisible.png create mode 100644 images/icons/16/blue/visibility-visible.png create mode 100644 images/icons/16/blue/vote-stopped.png create mode 100644 images/icons/16/blue/vote.png create mode 100644 images/icons/16/blue/wiki.png create mode 100644 images/icons/16/white/accept.png create mode 100644 images/icons/16/white/admin.png create mode 100644 images/icons/16/white/arr_1down.png create mode 100644 images/icons/16/white/arr_1left.png create mode 100644 images/icons/16/white/arr_1right.png create mode 100644 images/icons/16/white/arr_1up.png create mode 100644 images/icons/16/white/arr_2down.png create mode 100644 images/icons/16/white/arr_2left.png create mode 100644 images/icons/16/white/arr_2right.png create mode 100644 images/icons/16/white/arr_2up.png create mode 100644 images/icons/16/white/arr_eol-down.png create mode 100644 images/icons/16/white/arr_eol-left.png create mode 100644 images/icons/16/white/arr_eol-right.png create mode 100644 images/icons/16/white/arr_eol-up.png create mode 100644 images/icons/16/white/breaking-news.png create mode 100644 images/icons/16/white/chat.png create mode 100644 images/icons/16/white/checkbox-checked.png create mode 100644 images/icons/16/white/checkbox-unchecked.png create mode 100644 images/icons/16/white/comment.png create mode 100644 images/icons/16/white/community.png create mode 100644 images/icons/16/white/crown.png create mode 100644 images/icons/16/white/date.png create mode 100644 images/icons/16/white/decline.png create mode 100644 images/icons/16/white/door-enter.png create mode 100644 images/icons/16/white/door-leave.png create mode 100644 images/icons/16/white/download.png create mode 100644 images/icons/16/white/edit.png create mode 100644 images/icons/16/white/exclaim-circle.png create mode 100644 images/icons/16/white/exclaim.png create mode 100644 images/icons/16/white/file-audio.png create mode 100644 images/icons/16/white/file-video.png create mode 100644 images/icons/16/white/file.png create mode 100644 images/icons/16/white/files.png create mode 100644 images/icons/16/white/folder-empty.png create mode 100644 images/icons/16/white/folder-full.png create mode 100644 images/icons/16/white/forum-shrink.png create mode 100644 images/icons/16/white/forum.png create mode 100644 images/icons/16/white/group.png create mode 100644 images/icons/16/white/guestbook.png create mode 100644 images/icons/16/white/home.png create mode 100644 images/icons/16/white/info-circle.png create mode 100644 images/icons/16/white/info.png create mode 100644 images/icons/16/white/infopage.png create mode 100644 images/icons/16/white/install.png create mode 100644 images/icons/16/white/institute.png create mode 100644 images/icons/16/white/learnmodule.png create mode 100644 images/icons/16/white/link-extern.png create mode 100644 images/icons/16/white/link-intern.png create mode 100644 images/icons/16/white/literature.png create mode 100644 images/icons/16/white/lock-locked.png create mode 100644 images/icons/16/white/lock-unlocked.png create mode 100644 images/icons/16/white/log.png create mode 100644 images/icons/16/white/mail.png create mode 100644 images/icons/16/white/minus.png create mode 100644 images/icons/16/white/news.png create mode 100644 images/icons/16/white/pause.png create mode 100644 images/icons/16/white/person.png create mode 100644 images/icons/16/white/persons.png create mode 100644 images/icons/16/white/play.png create mode 100644 images/icons/16/white/plugin.png create mode 100644 images/icons/16/white/plus.png create mode 100644 images/icons/16/white/print.png create mode 100644 images/icons/16/white/question-circle.png create mode 100644 images/icons/16/white/question.png create mode 100644 images/icons/16/white/refresh.png create mode 100644 images/icons/16/white/resources.png create mode 100644 images/icons/16/white/roles.png create mode 100644 images/icons/16/white/rss.png create mode 100644 images/icons/16/white/schedule.png create mode 100644 images/icons/16/white/search.png create mode 100644 images/icons/16/white/seminar.png create mode 100644 images/icons/16/white/smiley.png create mode 100644 images/icons/16/white/staple.png create mode 100644 images/icons/16/white/star.png create mode 100644 images/icons/16/white/start.png create mode 100644 images/icons/16/white/stop.png create mode 100644 images/icons/16/white/studygroup.png create mode 100644 images/icons/16/white/test.png create mode 100644 images/icons/16/white/tools.png create mode 100644 images/icons/16/white/trash.png create mode 100644 images/icons/16/white/upload.png create mode 100644 images/icons/16/white/vcard.png create mode 100644 images/icons/16/white/video.png create mode 100644 images/icons/16/white/visibility-invisible.png create mode 100644 images/icons/16/white/visibility-visible.png create mode 100644 images/icons/16/white/vote-stopped.png create mode 100644 images/icons/16/white/vote.png create mode 100644 images/icons/16/white/wiki.png create mode 100644 images/icons/award_star_gold_1.png create mode 100644 images/icons/award_star_silver_1.png create mode 100644 images/icons/brick_add.png create mode 100644 images/icons/bricks.png create mode 100644 images/icons/cross.png create mode 100644 images/icons/cross_inv.png create mode 100644 images/icons/delete.png create mode 100644 images/icons/favicon.ico create mode 100644 images/icons/feed_atom.png create mode 100644 images/icons/feed_rss.png create mode 100644 images/icons/folder.png create mode 100644 images/icons/group.png create mode 100644 images/icons/help.png create mode 100644 images/icons/icon_attention.png create mode 100644 images/icons/icon_error.png create mode 100644 images/icons/icon_exception.png create mode 100644 images/icons/icon_info.png create mode 100644 images/icons/icon_success.png create mode 100644 images/icons/information.png create mode 100644 images/icons/link.png create mode 100644 images/icons/lock.png create mode 100644 images/icons/maximize_inv.png create mode 100644 images/icons/minimize_inv.png create mode 100644 images/icons/pencil.png create mode 100644 images/icons/star.png create mode 100644 images/icons/studip_portal.gif create mode 100644 images/icons/user.png create mode 100644 images/icons/user_edit.png create mode 100644 images/icons/world_link.png create mode 100644 images/icons/zoom.png create mode 100644 images/kategorien-titel.png create mode 100644 images/languages/lang_de.gif create mode 100644 images/languages/lang_de_en.gif create mode 100644 images/languages/lang_en.gif create mode 100644 images/lightbox/lightbox-blank.gif create mode 100644 images/lightbox/lightbox-btn-close.gif create mode 100644 images/lightbox/lightbox-btn-next.gif create mode 100644 images/lightbox/lightbox-btn-prev.gif create mode 100644 images/lightbox/lightbox-ico-loading.gif create mode 100644 images/locale/de/LC_BUTTONS/abbrechen-button.png create mode 100644 images/locale/de/LC_BUTTONS/abschicken-button.png create mode 100644 images/locale/de/LC_BUTTONS/absenden-button.png create mode 100644 images/locale/de/LC_BUTTONS/bearbeiten-button.png create mode 100644 images/locale/de/LC_BUTTONS/edit-button.png create mode 100644 images/locale/de/LC_BUTTONS/erstellen-button.png create mode 100644 images/locale/de/LC_BUTTONS/fertigstellen-button.png create mode 100644 images/locale/de/LC_BUTTONS/freischalten-button.png create mode 100644 images/locale/de/LC_BUTTONS/loeschen-button.png create mode 100644 images/locale/de/LC_BUTTONS/login-button.png create mode 100644 images/locale/de/LC_BUTTONS/magic-button.png create mode 100644 images/locale/de/LC_BUTTONS/releases-button.png create mode 100644 images/locale/de/LC_BUTTONS/rezension-button.png create mode 100644 images/locale/de/LC_BUTTONS/screenshots-button.png create mode 100644 images/locale/de/LC_BUTTONS/speichern-button.png create mode 100644 images/locale/de/LC_BUTTONS/sperren-button.png create mode 100644 images/locale/de/LC_BUTTONS/suchen-button.png create mode 100644 images/locale/de/LC_BUTTONS/weiter-button.png create mode 100644 images/locale/de/LC_BUTTONS/zurueck-button.png create mode 100644 images/locale/de/LC_BUTTONS/zurueck2-button.png create mode 100644 images/locale/de/LC_BUTTONS/zuweisen-button.png create mode 100644 images/logo_tu_bs.jpg create mode 100644 images/logo_uni_bremen.gif create mode 100644 images/marketplace_header.png create mode 100644 images/marketplace_header.png.ori create mode 100644 images/marketplace_header_small.png create mode 100644 images/mitglieder_ev.png create mode 100644 images/mitglieder_ev.png.old create mode 100644 images/move_left.gif create mode 100644 images/move_right.gif create mode 100644 images/nachricht1.gif create mode 100644 images/newstyle/sip_bg-top.jpg create mode 100644 images/newstyle/sip_block-bg.jpg create mode 100644 images/newstyle/sip_block-bottom.jpg create mode 100644 images/newstyle/sip_block-mystud-top.jpg create mode 100644 images/newstyle/sip_block-std-top.jpg create mode 100644 images/newstyle/sip_block-top.jpg create mode 100644 images/newstyle/sip_bullet-active.gif create mode 100644 images/newstyle/sip_content-bg-right.jpg create mode 100644 images/newstyle/sip_content-bg.jpg create mode 100644 images/newstyle/sip_content-bottom-left.jpg create mode 100644 images/newstyle/sip_content-bottom-right.jpg create mode 100644 images/newstyle/sip_content-bottom.jpg create mode 100644 images/newstyle/sip_content-top-left.jpg create mode 100644 images/newstyle/sip_content-top-left.jpg.old create mode 100644 images/newstyle/sip_content-top-right.jpg create mode 100644 images/newstyle/sip_logo.jpg create mode 100644 images/nobody_medium.png create mode 100644 images/nobody_normal.png create mode 100644 images/nobody_small.png create mode 100644 images/one_pixel.gif create mode 100644 images/plugin_item_background.png create mode 100644 images/release_item_background.png create mode 100644 images/star.gif create mode 100644 images/steel1.jpg create mode 100644 images/steelblau.jpg create mode 100644 images/steelgraulight.jpg create mode 100644 images/suche.png create mode 100644 images/suchen.gif create mode 100644 images/tagcloud.png create mode 100644 images/thumb_down.png create mode 100644 images/thumb_up.png create mode 100644 images/trash.gif create mode 100644 images/trash2.gif create mode 100644 images/unknown-plugin.png create mode 100644 images/wait24trans.gif create mode 100644 include/bootstrap.inc.php create mode 100644 include/includes.inc.php create mode 100644 include/language.inc.php create mode 100644 include/visual.inc.php create mode 100644 index.php create mode 100644 js/accordion.js create mode 100644 js/calendarpopup/AnchorPosition.js create mode 100644 js/calendarpopup/CalendarPopup.js create mode 100644 js/calendarpopup/PopupWindow.js create mode 100644 js/calendarpopup/date.js create mode 100644 js/jquery/jquery-1.4.2.min.js create mode 100644 js/jquery/jquery-ui-1.8.custom.min.js create mode 100644 js/jquery/jquery.textarearesizer.compressed.js create mode 100644 js/jquery/jquery.watermark.js create mode 100644 js/lightbox/jquery.js create mode 100644 js/lightbox/jquery.lightbox-0.5.js create mode 100644 js/lightbox/jquery.lightbox-0.5.min.js create mode 100644 js/lightbox/jquery.lightbox-0.5.pack.js create mode 100644 js/marketplace.js create mode 100644 js/scriptaculous/builder.js create mode 100644 js/scriptaculous/controls.js create mode 100644 js/scriptaculous/dragdrop.js create mode 100644 js/scriptaculous/effects.js create mode 100644 js/scriptaculous/prototype.js create mode 100644 js/scriptaculous/scriptaculous.js create mode 100644 js/scriptaculous/slider.js create mode 100644 js/scriptaculous/unittest.js create mode 100644 lib/Avatar.class.php create mode 100644 lib/CssClassSwitcher.inc.php create mode 100644 lib/DBManager.class.php create mode 100644 lib/MessageBox.class.php create mode 100644 lib/Request.class.php create mode 100644 lib/captcha/AHGBold.ttf create mode 100644 lib/captcha/LICENSE.txt create mode 100644 lib/captcha/README.FONT.txt create mode 100644 lib/captcha/README.txt create mode 100644 lib/captcha/audio/0.mp3 create mode 100644 lib/captcha/audio/0.wav create mode 100644 lib/captcha/audio/1.mp3 create mode 100644 lib/captcha/audio/1.wav create mode 100644 lib/captcha/audio/2.mp3 create mode 100644 lib/captcha/audio/2.wav create mode 100644 lib/captcha/audio/3.mp3 create mode 100644 lib/captcha/audio/3.wav create mode 100644 lib/captcha/audio/4.mp3 create mode 100644 lib/captcha/audio/4.wav create mode 100644 lib/captcha/audio/5.mp3 create mode 100644 lib/captcha/audio/5.wav create mode 100644 lib/captcha/audio/6.mp3 create mode 100644 lib/captcha/audio/6.wav create mode 100644 lib/captcha/audio/7.mp3 create mode 100644 lib/captcha/audio/7.wav create mode 100644 lib/captcha/audio/8.mp3 create mode 100644 lib/captcha/audio/8.wav create mode 100644 lib/captcha/audio/9.mp3 create mode 100644 lib/captcha/audio/9.wav create mode 100644 lib/captcha/audio/A.mp3 create mode 100644 lib/captcha/audio/A.wav create mode 100644 lib/captcha/audio/B.mp3 create mode 100644 lib/captcha/audio/B.wav create mode 100644 lib/captcha/audio/C.mp3 create mode 100644 lib/captcha/audio/C.wav create mode 100644 lib/captcha/audio/D.mp3 create mode 100644 lib/captcha/audio/D.wav create mode 100644 lib/captcha/audio/E.mp3 create mode 100644 lib/captcha/audio/E.wav create mode 100644 lib/captcha/audio/F.mp3 create mode 100644 lib/captcha/audio/F.wav create mode 100644 lib/captcha/audio/G.mp3 create mode 100644 lib/captcha/audio/G.wav create mode 100644 lib/captcha/audio/H.mp3 create mode 100644 lib/captcha/audio/H.wav create mode 100644 lib/captcha/audio/I.mp3 create mode 100644 lib/captcha/audio/I.wav create mode 100644 lib/captcha/audio/J.mp3 create mode 100644 lib/captcha/audio/J.wav create mode 100644 lib/captcha/audio/K.mp3 create mode 100644 lib/captcha/audio/K.wav create mode 100644 lib/captcha/audio/L.mp3 create mode 100644 lib/captcha/audio/L.wav create mode 100644 lib/captcha/audio/M.mp3 create mode 100644 lib/captcha/audio/M.wav create mode 100644 lib/captcha/audio/N.mp3 create mode 100644 lib/captcha/audio/N.wav create mode 100644 lib/captcha/audio/O.mp3 create mode 100644 lib/captcha/audio/O.wav create mode 100644 lib/captcha/audio/P.mp3 create mode 100644 lib/captcha/audio/P.wav create mode 100644 lib/captcha/audio/Q.mp3 create mode 100644 lib/captcha/audio/Q.wav create mode 100644 lib/captcha/audio/R.mp3 create mode 100644 lib/captcha/audio/R.wav create mode 100644 lib/captcha/audio/S.mp3 create mode 100644 lib/captcha/audio/S.wav create mode 100644 lib/captcha/audio/T.mp3 create mode 100644 lib/captcha/audio/T.wav create mode 100644 lib/captcha/audio/U.mp3 create mode 100644 lib/captcha/audio/U.wav create mode 100644 lib/captcha/audio/V.mp3 create mode 100644 lib/captcha/audio/V.wav create mode 100644 lib/captcha/audio/W.mp3 create mode 100644 lib/captcha/audio/W.wav create mode 100644 lib/captcha/audio/X.mp3 create mode 100644 lib/captcha/audio/X.wav create mode 100644 lib/captcha/audio/Y.mp3 create mode 100644 lib/captcha/audio/Y.wav create mode 100644 lib/captcha/audio/Z.mp3 create mode 100644 lib/captcha/audio/Z.wav create mode 100644 lib/captcha/backgrounds/bg3.jpg create mode 100644 lib/captcha/backgrounds/bg4.jpg create mode 100644 lib/captcha/backgrounds/bg5.jpg create mode 100644 lib/captcha/backgrounds/bg6.png create mode 100644 lib/captcha/database/.htaccess create mode 100644 lib/captcha/database/index.html create mode 100644 lib/captcha/database/securimage.sqlite create mode 100644 lib/captcha/example_form.php create mode 100644 lib/captcha/gdfonts/automatic.gdf create mode 100644 lib/captcha/images/audio_icon.gif create mode 100644 lib/captcha/images/refresh.gif create mode 100644 lib/captcha/securimage.php create mode 100644 lib/captcha/securimage_play.php create mode 100644 lib/captcha/securimage_play.swf create mode 100644 lib/captcha/securimage_show.php create mode 100644 lib/captcha/securimage_show_example.php create mode 100644 lib/captcha/securimage_show_example2.php create mode 100644 lib/captcha/words/words.txt create mode 100644 lib/feedcreator/feedcreator.class.php create mode 100644 lib/flexi/flexi.php create mode 100644 lib/flexi/helper/js_helper.php create mode 100644 lib/flexi/helper/json.php create mode 100644 lib/flexi/helper/prototype_helper.php create mode 100644 lib/flexi/helper/scriptaculous_helper.php create mode 100644 lib/flexi/helper/tag_helper.php create mode 100644 lib/flexi/helper/text_helper.php create mode 100644 lib/flexi/js_template.php create mode 100644 lib/flexi/php_template.php create mode 100644 lib/flexi/template.php create mode 100644 lib/flexi/template_factory.php create mode 100644 lib/tinymce/changelog.txt create mode 100644 lib/tinymce/examples/css/content.css create mode 100644 lib/tinymce/examples/css/word.css create mode 100644 lib/tinymce/examples/custom_formats.html create mode 100644 lib/tinymce/examples/full.html create mode 100644 lib/tinymce/examples/index.html create mode 100644 lib/tinymce/examples/lists/image_list.js create mode 100644 lib/tinymce/examples/lists/link_list.js create mode 100644 lib/tinymce/examples/lists/media_list.js create mode 100644 lib/tinymce/examples/lists/template_list.js create mode 100644 lib/tinymce/examples/media/logo.jpg create mode 100644 lib/tinymce/examples/media/logo_over.jpg create mode 100644 lib/tinymce/examples/media/sample.avi create mode 100644 lib/tinymce/examples/media/sample.dcr create mode 100644 lib/tinymce/examples/media/sample.mov create mode 100644 lib/tinymce/examples/media/sample.ram create mode 100644 lib/tinymce/examples/media/sample.rm create mode 100644 lib/tinymce/examples/media/sample.swf create mode 100644 lib/tinymce/examples/menu.html create mode 100644 lib/tinymce/examples/simple.html create mode 100644 lib/tinymce/examples/skins.html create mode 100644 lib/tinymce/examples/templates/layout1.htm create mode 100644 lib/tinymce/examples/templates/snippet1.htm create mode 100644 lib/tinymce/examples/translate.html create mode 100644 lib/tinymce/examples/word.html create mode 100644 lib/tinymce/jscripts/tiny_mce/langs/en.js create mode 100644 lib/tinymce/jscripts/tiny_mce/license.txt create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/css/content.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/css/media.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/img/shockwave.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/js/media.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/media/media.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/preview/example.html create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/preview/preview.html create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/style/css/props.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/style/js/props.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/style/props.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/cell.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/css/row.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/css/table.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/js/row.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/js/table.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/row.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/table/table.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/template/blank.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/template/css/template.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/template/js/template.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/template/template.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js create mode 100644 lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/about.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/image.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/link.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png create mode 100644 lib/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css create mode 100644 lib/tinymce/jscripts/tiny_mce/tiny_mce.js create mode 100644 lib/tinymce/jscripts/tiny_mce/tiny_mce_popup.js create mode 100644 lib/tinymce/jscripts/tiny_mce/tiny_mce_src.js create mode 100644 lib/tinymce/jscripts/tiny_mce/utils/editable_selects.js create mode 100644 lib/tinymce/jscripts/tiny_mce/utils/form_utils.js create mode 100644 lib/tinymce/jscripts/tiny_mce/utils/mctabs.js create mode 100644 lib/tinymce/jscripts/tiny_mce/utils/validate.js create mode 100644 sql/marketplace.sql create mode 100644 sql/marketplace_data.sql create mode 100644 templates/category_item.php create mode 100644 templates/category_item_available.php create mode 100644 templates/comment_item.php create mode 100644 templates/comments.php create mode 100644 templates/confirmation_successful.php create mode 100644 templates/datenschutz.php create mode 100644 templates/dep_plugin_item.php create mode 100644 templates/dep_release_item_available.php create mode 100644 templates/dep_release_item_current.php create mode 100644 templates/edit_content.php create mode 100644 templates/edit_plugin.php create mode 100644 templates/edit_plugin_assi.php create mode 100644 templates/edit_release.php create mode 100644 templates/edit_rezension.php create mode 100644 templates/edit_screenshot_details.php create mode 100644 templates/edit_screenshots.php create mode 100644 templates/edit_user_profle.php create mode 100644 templates/extended_search.php create mode 100644 templates/faq.php create mode 100644 templates/footer.php create mode 100644 templates/greeting_logged_in.php create mode 100644 templates/header.php create mode 100644 templates/header.php.old create mode 100644 templates/history.php create mode 100644 templates/impressum.php create mode 100644 templates/list_unclear_plugins.php create mode 100644 templates/login.php create mode 100644 templates/mails/mail_comment.php create mode 100644 templates/mails/mail_new_plugin.php create mode 100644 templates/mails/mail_plugin_approvement.php create mode 100644 templates/mails/mail_plugin_suspend.php create mode 100644 templates/mails/mail_register.php create mode 100644 templates/mails/reset_password.php create mode 100644 templates/message_box.php create mode 100644 templates/modal_window.php create mode 100644 templates/modal_window_rezension.php create mode 100644 templates/not_logged_in.php create mode 100644 templates/nutzungsbedingungen.php create mode 100644 templates/page_shift.php create mode 100644 templates/plugin_detail.php create mode 100644 templates/plugin_item.php create mode 100644 templates/plugin_page.php create mode 100644 templates/plugins/administration.php create mode 100644 templates/plugins/homepage.php create mode 100644 templates/plugins/manifest.php create mode 100644 templates/plugins/portal.php create mode 100644 templates/plugins/standard.php create mode 100644 templates/plugins/system.php create mode 100644 templates/profile.php create mode 100644 templates/question.php create mode 100644 templates/rating.php create mode 100644 templates/rating_js.php create mode 100644 templates/rating_no_action.php create mode 100644 templates/register.php create mode 100644 templates/release_detail.php create mode 100644 templates/release_item.php create mode 100644 templates/request_password.php create mode 100644 templates/search_plugins.php create mode 100644 templates/show_plugin_generator.php create mode 100644 templates/show_tag_cloud.php create mode 100644 templates/start.php create mode 100644 templates/start.php.old create mode 100644 templates/user_edit_form.php create mode 100644 templates/user_management.php diff --git a/ajax_dispatcher.php b/ajax_dispatcher.php new file mode 100644 index 0000000..8ecd80c --- /dev/null +++ b/ajax_dispatcher.php @@ -0,0 +1,269 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +require_once "include/bootstrap.inc.php"; + +$cmd = Request::option('ajaxcmd'); + +switch ($cmd) { + case 'get_current_categories': + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + $out = ""; + foreach ($p->getCategoriesFull() as $c) { + $template = $GLOBALS['FACTORY']->open('category_item'); + $template->set_attribute('c', $c); + $out .= $template->render(); + } + echo $out; + break; + case 'get_available_categories': + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + $out = ""; + $cats = $GLOBALS['DBM']->getCategories(); + $current_cats = $p->getCategoriesFull(); + $current_cats_ids = array(); + foreach ($current_cats as $c) + array_push($current_cats_ids,$c['category_id']); + if (!empty($_REQUEST['hidden_cats'])) { + $hidden_cats = json_decode(stripslashes($_REQUEST['hidden_cats'])); + if (is_array($hidden_cats)) + foreach ($hidden_cats as $h) + array_push($current_cats_ids,$h); + } + foreach ($cats as $c) { + $template = $GLOBALS['FACTORY']->open('category_item_available'); + $template->set_attribute('c', $c); + $template->set_attribute('visibility', (in_array($c['category_id'], $current_cats_ids) ? 'none' : 'block')); + $out .= $template->render(); + } + echo $out; + break; + case 'get_category_item': + $cat_id = Request::option('category_id'); + $c = $GLOBALS['DBM']->getCategory($cat_id); + $template = $GLOBALS['FACTORY']->open('category_item'); + $template->set_attribute('c', $c); + echo $template->render(); + break; + case 'tag_completer': + $val = (basename(trim($_REQUEST['value']))); + if ($val == "") return; + echo $GLOBALS['DBM']->searchForTags($val); + break; + case 'set_title_screen': + $plugin_id = Request::option('plugin_id'); + if ($GLOBALS['PERM']->have_plugin_perm('author',$plugin_id)) { + $screenshot_id = Request::option('screenshot_id'); + $GLOBALS['DBM']->disableCurrentTitleScreen($plugin_id); + $s = new Screenshot(); + $s->load($screenshot_id); + $s->setTitleScreen(1) + ->save(); + } + break; + case 'check_username': + $username = trim($_REQUEST['username']); + $ret = UserManagement::userAlreadyExists($username); + echo ($ret ? 'ERROR' : 'OK'); + break; + case 'insert_comment': + if (!$GLOBALS['USER']) die; + $rid = Request::option('rid'); + $comment = trim(utf8_decode($_REQUEST['comment_value'])); + if ($comment && $rid) { + $c = new Comment(); + $c->setRangeId($rid) + ->setUserId($GLOBALS['USER']['user_id']) + ->setCommentText($comment) + ->save(); + $GLOBALS['MAIL']->generateCommentMail($rid,$GLOBALS['USER']['user_id'],$comment); + } + echo "OK"; + break; + case 'get_comments': + $rid = Request::option('rid'); + $comments = $GLOBALS['DBM']->getComments($rid); + $out = ""; + if (count($comments)) { + foreach ($comments as $c) { + $template = $GLOBALS['FACTORY']->open('comment_item'); + $template->set_attribute('c', $c); + $template->set_attribute('rechte', ($c->getUserId() == $GLOBALS['USER']['user_id'] || $GLOBALS['PERM']->have_perm("admin"))); + $out .= $template->render(); + } + } + echo $out; + break; + case 'remove_comment_item': + $range_id = Request::option('rid'); + $comment_id = Request::option('item'); + $c = new Comment(); + $c->load($comment_id); + if ($c->getUserId() == $GLOBALS['USER']['user_id'] || $GLOBALS['PERM']->have_perm("admin")) { + $c->delete(); + } + break; + case 'remove_screenshot': + $GLOBALS['AUTH']->checkPerm('author'); + $screenshot_id = Request::option('screenshot_id'); + $s = new Screenshot(); + $s->load($screenshot_id); + $p = new Plugin(); + $p->load($s->getPluginId()); + if ($screenshot_id && $PERM->have_plugin_perm('author',$p->getPluginId())) { + $s->remove(); + echo "OK"; + } else + echo "ERROR"; + break; + case 'get_screenshot_details': + $GLOBALS['AUTH']->checkPerm('author'); + $screenshot_id = Request::option('screenshot_id'); + $s = new Screenshot(); + $s->load($screenshot_id); + $p = new Plugin(); + $p->load($s->getPluginId()); + $f = new MFile(); + $f->load($s->getFileId()); + if ($screenshot_id && $PERM->have_plugin_perm('author',$p->getPluginId())) { + $template = $GLOBALS['FACTORY']->open('edit_screenshot_details'); + $template->set_attribute('s', $s); + $template->set_attribute('f', $f); + $template->set_attribute('p', $p); + echo $template->render(); + } + break; + case 'set_rating': + $GLOBALS['AUTH']->checkPerm('author'); + $rating = Request::option('val'); + $range_id = Request::option('range_id'); + $GLOBALS['DBM']->setRating($range_id, $GLOBALS['USER']['user_id'], $rating); + $ratings = $GLOBALS['DBM']->getUserRatings($range_id); + $user_rating = $GLOBALS['DBM']->getSpecificUserRating($range_id, $GLOBALS['USER']['user_id']); + $rating_template = $GLOBALS['FACTORY']->open('rating'); + $rating_template->set_attribute('can_rate', true); + $rating_template->set_attribute('current', $user_rating); + $rating_template->set_attribute('range_id', $range_id); + $rating_template->set_attribute('rating_width', ($user_rating == 0 ? 0 : $user_rating * 100 / MAX_RATING_VALUE)); + echo $rating_template->render(); + break; + case 'get_rezension': + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + if ($p->getApproved()) + echo $p->getRezension(); + else + echo ""; + break; + case 'get_available_dependency_plugins': + $plugins = $GLOBALS['DBM']->getAllApprovedPlugins(); + $out = ""; + foreach ($plugins as $p) { + $template = $GLOBALS['FACTORY']->open('dep_plugin_item'); + $template->set_attribute('p', $p); + $out .= $template->render(); + } + echo $out; + break; + case 'get_available_dependency_releases': + $plugin_id = Request::option('plugin_id'); + $release_id = Request::option('release_id'); + $p = new Plugin(); + $p->load($plugin_id); + if ($release_id) { + $release = new Release(); + $release->load($release_id); + $current_release_ids = array(); + foreach ($release->getDependencies() as $d) { + array_push($current_release_ids, $d->getReleaseId()); + } + array_push($current_release_ids, $release_id); + } + $out = ""; + if ($releases = $p->getReleases()) { + foreach ($releases as $r) { + $template = $GLOBALS['FACTORY']->open('dep_release_item_available'); + $template->set_attribute('r', $r); + $template->set_attribute('visibility', (in_array($r->getReleaseId(), $current_release_ids) ? 'none' : 'block')); + $out .= $template->render(); + } + } + echo $out; + break; + case 'get_release_item': + $release_id = Request::option('release_id'); + $r = new Release(); + $r->load($release_id); + $p = new Plugin(); + $p->load($r->getPluginId()); + $template = $GLOBALS['FACTORY']->open('dep_release_item_current'); + $template->set_attribute('r', $r); + $template->set_attribute('p', $p); + echo $template->render(); + break; + case 'get_current_dependencies': + $plugin_id = Request::option('plugin_id'); + $release_id = Request::option('release_id'); + $p = new Plugin(); + $p->load($plugin_id); + $release = new Release(); + $release->load($release_id); + $out = ""; + foreach ($release->getDependencies() as $d) { + $template = $GLOBALS['FACTORY']->open('dep_release_item_current'); + $template->set_attribute('p', $p); + $template->set_attribute('r', $d); + $out .= $template->render(); + } + echo $out; + break; + case 'page_load': + $page_dispatcher = Request::option('page_dispatcher'); + $page_number = Request::option('page_number'); + if(!isset($page_dispatcher)) + break; + $instance = new $page_dispatcher(); + if(!is_subclass_of($instance, 'AbstractPageDispatcher')) + break; + if($page_number < 0 || $page_number >= $instance->getPageCount()) + break; + echo $instance->getPageTitle($page_number) . $instance->getDispatherSign() . $instance->getPageContent($page_number); + break; + case 'remove_participant': + $plugin_id = Request::option('plugin_id'); + $user_id = Request::option('user_id'); + $p = new Plugin(); + $p->load($plugin_id); + if ($GLOBALS['PERM']->have_plugin_perm('author',$p->getPluginId())) { + $p->removeParticipant($user_id); + } + break; + default: ; +} +die(); + +?> diff --git a/classes/AbstractPageDispatcher.class.php b/classes/AbstractPageDispatcher.class.php new file mode 100644 index 0000000..90b9e0a --- /dev/null +++ b/classes/AbstractPageDispatcher.class.php @@ -0,0 +1,50 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + + +abstract class AbstractPageDispatcher +{ + /** + * Should return the maximum number of available pages + */ + public abstract function getPageCount(); + /** + * Should return the appropriate title of given page + * + * @param integer $num + */ + public abstract function getPageTitle($num); + /** + * Should return the appropriate content of given page + * + * @param integer $num + */ + public abstract function getPageContent($num); + /** + * Should return a unique seperator-sign for dispatching ajax-request + */ + public function getDispatherSign() + { + return "+.+"; + } +} +?> diff --git a/classes/Auth.class.php b/classes/Auth.class.php new file mode 100644 index 0000000..bf80d9e --- /dev/null +++ b/classes/Auth.class.php @@ -0,0 +1,110 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +require_once 'StudipAuth.class.php'; + +class Auth { + + public function __construct() { + + } + + public function authenticateFromDev($loginkey, $userinformation) { + Session::get()->startSession(); + $_SESSION['user_id'] = ''; + + $first_name = trim(CryptMP::decryptPrivate(base64_decode($userinformation['first_name']))); + $last_name = trim(CryptMP::decryptPrivate(base64_decode($userinformation['last_name']))); + $username = trim(CryptMP::decryptPrivate(base64_decode($userinformation['user_name']))); + $email = trim(CryptMP::decryptPrivate(base64_decode($userinformation['email']))); + + if (!empty($first_name) && !empty($last_name) && !empty($username) && !empty($email) && $loginkey == $GLOBALS['REMOTE_LOGIN_KEY']) { + $user_id = ''; + if (!$GLOBALS['UM']->userAlreadyExists($username)) { + $GLOBALS['UM']->addNewUser($username, $first_name, $last_name, $email, '', 'Herr', '', 'studip'); + } else { + $GLOBALS['UM']->updateUserInformation($username, array('first_name'=>$first_name, 'last_name'=>$last_name, 'email'=>$email)); + } + $user_id = $GLOBALS['UM']->getUserIdByUsername($username); + $_SESSION['user_id'] = $user_id; + $_SESSION['sid'] = session_id(); + return TRUE; + } + return FALSE; + } + + public function authenticate($username, $passwort) { + Session::get()->startSession(); + $_SESSION['user_id'] = ''; + + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT * FROM users WHERE LOWER(username)=LOWER('%s') AND passwort='%s' AND auth='standard'",$username, md5($passwort)))->fetchAll(); + if (count($r) == 1) { + $_SESSION['user_id'] = $r[0]['user_id']; + $_SESSION['sid'] = session_id(); + return TRUE; + } else { + $studipauth = new StudipAuth(); + $userinformation = $studipauth->authenticate($username, $passwort); + if ($userinformation) { + $user_id = ''; + if (!$GLOBALS['UM']->userAlreadyExists($username)) { + $GLOBALS['UM']->addNewUser($username, $userinformation['first_name'], $userinformation['last_name'], $userinformation['email'], '', 'Herr', '', 'studip'); + } else { + $GLOBALS['UM']->updateUserInformation($username, $userinformation); + } + $user_id = $GLOBALS['UM']->getUserIdByUsername($username); + $_SESSION['user_id'] = $user_id; + $_SESSION['sid'] = session_id(); + return TRUE; + } + + $_SESSION['user_id'] = ''; + return FALSE; + } + } + + public function getAuthenticatedUser() { + Session::get()->startSession(); + if ($_SESSION['user_id'] == '') + return FALSE; + else { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT * FROM users WHERE user_id='%s'",$_SESSION['user_id']))->fetchAll(); + if (count($r) == 1) { + return $r[0]; + } else { + return FALSE; + } + } + } + + public function checkPerm($perm) { + if (!$GLOBALS['PERM']->have_perm($perm)) { + GUIRenderer::showIndex($GLOBALS['FACTORY']->open('not_logged_in')->render()); + die(); + } + } + +} + +?> diff --git a/classes/Comment.class.php b/classes/Comment.class.php new file mode 100644 index 0000000..66fc903 --- /dev/null +++ b/classes/Comment.class.php @@ -0,0 +1,98 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Comment { + + private $comment_text = ''; + private $comment_id = ''; + private $range_id = ''; + private $user_id = ''; + private $mkdate = 0; + + public function __construct() { + + } + + public function getCommentId() { + return $this->comment_id; + } + + public function getRangeId() { + return $this->range_id; + } + + public function getUserId() { + return $this->user_id; + } + + public function getCommentText() { + return stripslashes($this->comment_text); + } + + public function getMkdate() { + return $this->mkdate; + } + + public function setRangeId($s) { + $this->range_id = $s; + return $this; + } + + public function setUserId($s) { + $this->user_id = $s; + return $this; + } + + public function setCommentText($s) { + $this->comment_text = $s; + return $this; + } + + public function load($cid) { + $r = DBManager::get()->query(sprintf("SELECT * FROM comments WHERE comment_id='%s'",$cid))->fetchAll(); + $this->comment_id = $r[0]['comment_id']; + $this->range_id = $r[0]['range_id']; + $this->user_id = $r[0]['user_id']; + $this->comment_text = $r[0]['comment_text']; + $this->mkdate = $r[0]['mkdate']; + return TRUE; + } + + public function save() { + if (!$this->comment_id) { + $this->comment_id = md5(uniqid(time().$this->range_id)); + $this->mkdate = time(); + $stmt = DBManager::get()->prepare("INSERT INTO comments (comment_id, range_id, user_id, comment_text, mkdate) VALUES (?,?,?,?,?)"); + $stmt->execute(array($this->comment_id, $this->range_id, $this->user_id, addslashes($this->comment_text), $this->mkdate)); + } else { + $stmt = DBManager::get()->prepare("UPDATE comments SET comment_text=? WHERE comment_id=?"); + $stmt->execute(array(addslashes($this->comment_text), $this->comment_id)); + } + } + + public function delete() { + DBManager::get()->query(sprintf("DELETE FROM comments WHERE comment_id='%s'",$this->comment_id)); + } + +} + +?> diff --git a/classes/Content.class.php b/classes/Content.class.php new file mode 100644 index 0000000..c8e126f --- /dev/null +++ b/classes/Content.class.php @@ -0,0 +1,59 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Content { + + private $content_id = ''; + private $content_txt = ''; + private $key = ''; + + public function __construct() { + + } + + public function load($key) { + $r = DBManager::get()->query(sprintf("SELECT * FROM mp_content WHERE ckey='%s'",$key))->fetchAll(); + $this->content_id = $r[0]['content_id']; + $this->content_txt = $r[0]['content_txt']; + $this->key = $r[0]['ckey']; + } + + public function setContentTxt($s) { + $this->content_txt = $s; + return $this; + } + + public function getContentTxt() { + return stripslashes($this->content_txt); + } + + public function getKey() { + return $this->key; + } + + public function save() { + DBManager::get()->query(sprintf("UPDATE mp_content SET content_txt='%s' WHERE ckey='%s'",$this->content_txt,$this->key)); + } + +} + +?> diff --git a/classes/CryptMP.class.php b/classes/CryptMP.class.php new file mode 100644 index 0000000..c82ea7f --- /dev/null +++ b/classes/CryptMP.class.php @@ -0,0 +1,67 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class CryptMP { + + public function __construct() { + + } + + public static function decryptPrivate($txt) { + $fp = fopen(dirname(__FILE__)."/../ssl/private.key","r"); + $priv_key = fread($fp,8192); + fclose($fp); + $res = openssl_get_privatekey($priv_key, '1234'); + openssl_private_decrypt($txt,$newsource,$res); + return $newsource; + } + + public static function decryptPublic($txt) { + $fp = fopen (dirname(__FILE__)."/../ssl/cert.crt","r"); + $pub_key = fread($fp,8192); + fclose($fp); + openssl_get_publickey($pub_key); + openssl_public_decrypt($txt,$newsource,$pub_key); + return $newsource; + } + + public static function encryptPrivate($txt) { + $fp = fopen(dirname(__FILE__)."/../ssl/private.key","r"); + $priv_key = fread($fp,8192); + fclose($fp); + $res = openssl_get_privatekey($priv_key, '1234'); + openssl_private_encrypt($txt,$crypttext,$res); + return $crypttext; + } + + public static function encryptPublic($txt) { + $fp = fopen(dirname(__FILE__)."/../ssl/cert.crt","r"); + $pub_key = fread($fp,8192); + fclose($fp); + openssl_get_publickey($pub_key); + openssl_public_encrypt($txt,$crypttext,$pub_key); + return $crypttext; + } + +} + +?> diff --git a/classes/Downloader.class.php b/classes/Downloader.class.php new file mode 100644 index 0000000..191b1c2 --- /dev/null +++ b/classes/Downloader.class.php @@ -0,0 +1,94 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Downloader { + + private $tmp_path; + + public function __construct() { + $this->tmp_path = $GLOBALS['TMP_PATH']; + } + + public function initiateDownload($file_id, $filename="", $export_filename="") { + + $data = ""; + $data_filename = ""; + + if ($filename) { + $data = file_get_contents($filename); + $data_filename = ($export_filename ? prepareFilename(html_entity_decode($export_filename, ENT_QUOTES)) : "export.zip"); + } else { + $r = new Release(); + if ($r->getReleaseFromFileId($file_id)) { + $r->increaseDownloadCounter(); + } + $f = new MFile(); + $f->load($file_id); + $data = file_get_contents($GLOBALS['DYNAMIC_CONTENT_PATH'] . '/' . $f->getFileType() . '/' . $f->getFileId()); + $data_filename = prepareFilename(html_entity_decode($f->getFileName(), ENT_QUOTES)); + } + if ($data) { + ob_start(); + $content_type="application/octet-stream"; + $content_disposition="attachment"; + header("Expires: Mon, 12 Dec 2001 08:00:00 GMT"); + header("Last-Modified: " . gmdate ("D, d M Y H:i:s") . " GMT"); + if ($_SERVER['HTTPS'] == "on"){ + header("Pragma: public"); + header("Cache-Control: private"); + } else { + header("Pragma: no-cache"); + header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1 + } + header("Cache-Control: post-check=0, pre-check=0", false); + header("Content-Type: $content_type; name=\"".$data_filename."\""); + header("Content-Description: File Transfer"); + header("Content-Transfer-Encoding: binary"); + header("Accept-Ranges: bytes"); + header("Content-Length: ".strlen($data)); + header("Content-Disposition: $content_disposition; filename=\"".$data_filename."\""); + ob_end_flush(); + echo $data; + } + } + + public static function create_zip_from_directory($fullpath, $zip_file_name){ + if (strtolower(substr($zip_file_name, -3)) != 'zip' ) $zip_file_name = $zip_file_name . '.zip'; + if ($GLOBALS['ZIP_USE_INTERNAL']){ + $archiv = new PclZip($zip_file_name); + $v_list = $archiv->create($fullpath, PCLZIP_OPT_REMOVE_PATH, $fullpath, PCLZIP_CB_PRE_ADD, 'pclzip_convert_filename_cb'); + return $v_list; + } else /*if (@file_exists($GLOBALS['ZIP_PATH']) || ini_get('safe_mode'))*/ { + //zip stuff + $zippara = (ini_get('safe_mode')) ? ' -R ':' -r '; + if (@chdir($fullpath)) { + exec ($GLOBALS['ZIP_PATH'] . ' -q ' . $GLOBALS['ZIP_OPTIONS'] . ' ' . $zippara . $zip_file_name . ' *',$output, $ret); + @chdir($GLOBALS['BASE_PATH']); + } + return $ret; + } +} + + +} + +?> diff --git a/classes/FeedGenerator.class.php b/classes/FeedGenerator.class.php new file mode 100644 index 0000000..8630511 --- /dev/null +++ b/classes/FeedGenerator.class.php @@ -0,0 +1,144 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +require_once("lib/feedcreator/feedcreator.class.php"); + + +class FeedGenerator +{ + private $rss; + private $type; + + public function __construct($type, $title, $desc, $link) + { + $this->type = $type; + + $this->rss = new UniversalFeedCreator(); + $this->rss->title = $title; + $this->rss->desc = $desc; + $this->rss->link = $link; + } + + /** + * Adds all items according to type to feed + */ + public function addAll() + { + if($this->type == 'plugin') + { + $db = DBManager::get(); + $rr = $db->query("SELECT plugin_id FROM plugins WHERE approved=1 ORDER BY mkdate DESC")->fetchAll(); + foreach($rr as $r) + { + $p = new Plugin(); + $p->load($r['plugin_id']); + $this->addItem($p); + } + } + elseif($this->type == 'release') + { + $db = DBManager::get(); + $rr = $db->query("SELECT r.release_id FROM releases r, plugins p WHERE p.plugin_id=r.plugin_id AND p.approved=1 ORDER BY mkdate DESC")->fetchAll(); + foreach($rr as $r) + { + $p = new Release(); + $p->load($r['release_id']); + $this->addItem($p); + } + } + } + + /** + * Adds a new item to the feed. Item is according to type parsed. + * + * @param Plugin or Release $item + */ + public function addItem($item) + { + if($this->type == 'plugin') + { + if($item instanceof Plugin) + { + $userResult = $item->getAuthor(); + + if($userResult !== false) + { + $user = new User(); + $user->load($userResult['user_id']); + } + + $rssItem = new FeedItem(); + $rssItem->title = $item->getName(); + $rssItem->description = $item->getShortDescription() . $item->getDescription(); + $rssItem->link = $GLOBALS['BASE_URI'].'?dispatch=show_plugin_details&plugin_id='.$item->getPluginId(); + if(isset($user)) + { + $rssItem->author = $user->getVorname() . ' `' . $user->getUsername() . '´ ' . $user->getNachname(); + $rssItem->authorEmail = $user->getEmail(); + } + } + } + elseif($this->type == 'release') + { + if($item instanceof Release) + { + $userResult = $item->getAuthor(); + + if($userResult !== false) + { + $user = new User(); + $user->load($userResult['user_id']); + } + + $plugin = new Plugin(); + $plugin->load($item->getPluginId()); + + $rssItem = new FeedItem(); + $rssItem->title = 'Release ' . $item->getVersion() . ' - ' . $plugin->getName(); + $rssItem->description = ''; + $rssItem->link = $GLOBALS['BASE_URI'].'?dispatch=show_release_detailsrelease_id='.$item->getReleaseId(); + if(isset($user)) + { + $rssItem->author = $user->getVorname() . ' `' . $user->getUsername() . '´ ' . $user->getNachname(); + $rssItem->authorEmail = $user->getEmail(); + } + } + } + if(isset($rssItem)) + { + $this->rss->addItem($rssItem); + } + } + + /** + * Generates and outputs the current feed / items + * + * @param string $format Format to be used, valid options are: + * RSS0.91, RSS1.0, RSS2.0, PIE0.1 (deprecated), MBOX, OPML, + * ATOM, ATOM1.0, ATOM0.3, HTML, JS + */ + public function outputFeed($format) + { + $this->rss->outputFeed($format); + } +} +?> diff --git a/classes/GUIRenderer.class.php b/classes/GUIRenderer.class.php new file mode 100644 index 0000000..4dec540 --- /dev/null +++ b/classes/GUIRenderer.class.php @@ -0,0 +1,396 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class GUIRenderer { + + public function __construct() { + + } + + public static function showIndex($content=FALSE) { + $tags = $GLOBALS['DBM']->getTagCounter(); + $template = $GLOBALS['FACTORY']->open('show_tag_cloud'); + $template->set_attribute('tags', $tags); + $template->set_attribute('css_uri', $GLOBALS['BASE_URI'].'css'); + $cloud = $template->render(); + + $template = $GLOBALS['FACTORY']->open('start'); + $template->set_attribute('cloud', $cloud); + $template->set_attribute('main_content', $content); + echo $template->render(); + } + + public function getContent($item) { + $c = new Content(); + $c->load($item); + if (strpos($c->getContentTxt(),"@@@___SLIDER___@@@") !== FALSE) + return preg_replace("/@@@___SLIDER___@@@/",$this->showPageSlider(),$c->getContentTxt()); + else + return $c->getContentTxt(); + } + + public function showPageSlider() { + $page_dispatcher = "HitlistDispatcher"; + + $page_uid = uniqid(); + + if(!isset($page_dispatcher)) + die("Should contain dispatcher!"); + + $instance = new $page_dispatcher(); + + if(!is_subclass_of($instance, 'AbstractPageDispatcher')) + die("Dispatcher-class should be subclass of AbstractPageDispatcher!"); + + $template = $GLOBALS['FACTORY']->open('page_shift'); + $template->set_attribute('page_dispatcher', $page_dispatcher); + $template->set_attribute('page_uid', $page_uid); + $template->set_attribute('instance', &$instance); + return $template->render(); + } + + public function showEditContent($item) { + $c = new Content(); + $c->load($item); + $template = $GLOBALS['FACTORY']->open('edit_content'); + $template->set_attribute('c', $c); + $this->showIndex($template->render()); + } + + public function showRegister() { + $this->showIndex($GLOBALS['FACTORY']->open('register')->render()); + } + + public function showLogout() { + $this->showIndex($this->getContent('logout')); + } + + public function showRequestNewPassword() { + echo $GLOBALS['FACTORY']->open('request_password')->render(); + } + + public function showConfirmationSuccessful() { + $this->showIndex($GLOBALS['FACTORY']->open('confirmation_successful')->render()); + } + + public function showPluginGenerator() { + $css = new CssClassSwitcher(); + $template = $GLOBALS['FACTORY']->open('show_plugin_generator'); + $template->set_attribute('css', $css); + $this->showIndex($template->render()); + } + + public function showEditProfile() { + $u = new User(); + $u->load($GLOBALS['USER']['user_id']); + $template = $GLOBALS['FACTORY']->open('edit_user_profle'); + $template->set_attribute('u', $u); + $this->showIndex($template->render()); + } + + public function showProfile($user_id, $plugin_id = FALSE) { + $u = new User(); + $u->load($user_id); + + $question = ""; + if ($plugin_id && $GLOBALS['PERM']->have_perm('author')) { + $template = $GLOBALS['FACTORY']->open('question'); + $template->set_attribute('plugin_id', $plugin_id); + $question = $template->render(); + } + + $template = $GLOBALS['FACTORY']->open('profile'); + $template->set_attribute('user_id', $user_id); + $template->set_attribute('u', $u); + $this->showIndex($template->render().$question); + } + + public function showLogin() { + echo $GLOBALS['FACTORY']->open('login')->render(); + } + + + public function showEditPlugin($plugin_id = FALSE) { + $css = new CssClassSwitcher(); + $css->enableHover(); + $plugin = new Plugin(); + if ($plugin_id) $plugin->load($plugin_id); + $template = $GLOBALS['FACTORY']->open('edit_plugin'); + $template->set_attribute('p', $plugin); + $template->set_attribute('css', $css); + $this->showIndex($template->render()); + } + + public function showPluginAssi($part,$titel,$license,$in_use,$url,$language,$categories,$tags,$short_description,$description) { + $template = $GLOBALS['FACTORY']->open('edit_plugin_assi'); + $template->set_attribute('part', $part); + $template->set_attribute('titel', $titel); + $template->set_attribute('license', $license); + $template->set_attribute('language', $language); + $template->set_attribute('in_use', $in_use); + $template->set_attribute('url', $url); + $template->set_attribute('categories', $categories); + $template->set_attribute('tags', $tags); + $template->set_attribute('short_description', $short_description); + $template->set_attribute('description', $description); + $this->showIndex($template->render()); + } + + public function showEditRezension($plugin_id) { + $plugin = new Plugin(); + $plugin->load($plugin_id); + $template = $GLOBALS['FACTORY']->open('edit_rezension'); + $template->set_attribute('p', $plugin); + $this->showIndex($template->render()); + } + + public function showExtendedSearch() { + $this->showIndex($GLOBALS['FACTORY']->open('extended_search')->render()); + } + + public function showEditScreenshots($plugin_id) { + $plugin = new Plugin(); + $plugin->load($plugin_id); + $template = $GLOBALS['FACTORY']->open('edit_screenshots'); + $template->set_attribute('p', $plugin); + $this->showIndex($GLOBALS['FACTORY']->open('modal_window')->render().$template->render()); + } + + public function showOwnPlugins($user_id) { + $plugins = $GLOBALS['DBM']->getPluginsByUserId($user_id); + $plugins_rendered = $this->renderPluginItems($plugins); + $template = $GLOBALS['FACTORY']->open('search_plugins'); + $template->set_attribute('title', count($plugins)." Plugin".(count($plugins) == 1 ? '' : 's')." gefunden."); + $template->set_attribute('plugin_list', $plugins_rendered); + $template->set_attribute('count_plugins', count($plugins)); + + $this->showIndex($template->render()); + } + + public function showExtendedSearchResults($search_items) { + $plugins = $GLOBALS['DBM']->getPluginsByExtendedSearch($search_items); + $plugins_rendered = $this->renderPluginItems($plugins); + $template = $GLOBALS['FACTORY']->open('search_plugins'); + $template->set_attribute('title', count($plugins)." Plugin".(count($plugins) == 1 ? '' : 's')." gefunden."); + $template->set_attribute('plugin_list', $plugins_rendered); + $template->set_attribute('count_plugins', count($plugins)); + + $this->showIndex($template->render()); + } + + + public function showSearchResults($txt, $catagory_id) { + $plugins = $GLOBALS['DBM']->getPluginsByTxt($txt, $catagory_id); + $plugins_rendered = $this->renderPluginItems($plugins); + $template = $GLOBALS['FACTORY']->open('search_plugins'); + $template->set_attribute('title', count($plugins)." Plugin".(count($plugins) == 1 ? '' : 's')." gefunden."); + $template->set_attribute('plugin_list', $plugins_rendered); + $template->set_attribute('count_plugins', count($plugins)); + + $this->showIndex($template->render()); + } + + public function showHitlist($hitlist) { + $plugins = $GLOBALS['DBM']->getPluginsByHitlist($hitlist); + $plugins_rendered = $this->renderPluginItems($plugins); + $template = $GLOBALS['FACTORY']->open('search_plugins'); + $template->set_attribute('title', count($plugins)." Plugin".(count($plugins) == 1 ? '' : 's')." gefunden."); + $template->set_attribute('plugin_list', $plugins_rendered); + $template->set_attribute('count_plugins', count($plugins)); + + $this->showIndex($template->render()); + } + + public function showTagSearch($tag) { + $plugins = $GLOBALS['DBM']->getPluginsByTagName($tag); + $plugins_rendered = $this->renderPluginItems($plugins); + $template = $GLOBALS['FACTORY']->open('search_plugins'); + $template->set_attribute('title', count($plugins)." Plugin".(count($plugins) == 1 ? '' : 's')." gefunden."); + $template->set_attribute('plugin_list', $plugins_rendered); + $template->set_attribute('count_plugins', count($plugins)); + + $this->showIndex($template->render()); + } + + public function showPluginDetails($plugin_id) { + $plugin = new Plugin(); + $plugin->load($plugin_id); + + $comments = $GLOBALS['DBM']->getComments($plugin_id); + $template = $GLOBALS['FACTORY']->open('comments'); + $template->set_attribute('range_id', $plugin_id); + $template->set_attribute('comments', $comments); + $c = $template->render(); + + $releases = $plugin->getReleases(); + $out = ""; + $css = new CssClassSwitcher(); + $css->enableHover(); + if ($releases) { + $release_js = $GLOBALS['FACTORY']->open('rating_js'); + $release_js->set_attribute('can_rate', ($GLOBALS['PERM']->have_perm('author') ? TRUE : FALSE)); + foreach ($releases as $r) { + $css->switchClass(); + $template = $GLOBALS['FACTORY']->open('release_item'); + $template->set_attribute('r', $r); + $template->set_attribute('css', $css); + $template->set_attribute('rating', $this->getCurrentRating($r->getReleaseId(), ($GLOBALS['PERM']->have_perm('author') ? TRUE : FALSE))); + $out .= $template->render(); + } + $out = $release_js->render() . $out; + } + + $template = $GLOBALS['FACTORY']->open('plugin_detail'); + $template->set_attribute('image_uri', $GLOBALS['BASE_URI'].'images'); + $template->set_attribute('css', $css); + $template->set_attribute('rating', $this->getPluginRatings(&$plugin)); + $template->set_attribute('p', $plugin); + if ($GLOBALS['PERM']->have_perm('author') || count($comments)) + $template->set_attribute('comments', $c); + $template->set_attribute('releases', $out); + $this->showIndex($GLOBALS['FACTORY']->open('modal_window_rezension')->render() . $template->render()); + } + + public function showReleaseDetails($release_id) { + $release = new Release(); + $release->load($release_id); + $plugin = new Plugin(); + $plugin->load($release->getPluginId()); + + $comments = $GLOBALS['DBM']->getComments($release_id); + $template = $GLOBALS['FACTORY']->open('comments'); + $template->set_attribute('range_id', $release_id); + $template->set_attribute('comments', $comments); + $c = $template->render(); + + $release_js = $GLOBALS['FACTORY']->open('rating_js'); + $release_js->set_attribute('can_rate', ($GLOBALS['PERM']->have_perm('author') ? TRUE : FALSE)); + + $template = $GLOBALS['FACTORY']->open('release_detail'); + $template->set_attribute('image_uri', $GLOBALS['BASE_URI'].'images'); + $template->set_attribute('rating', $this->getCurrentRating($release_id, ($GLOBALS['PERM']->have_perm('author') ? TRUE : FALSE))); + $template->set_attribute('r', $release); + $template->set_attribute('p', $plugin); + if ($GLOBALS['PERM']->have_perm('author') || count($comments)) + $template->set_attribute('comments', $c); + $this->showIndex($release_js->render().$template->render()); + } + + public function showCategory($category_id) { + $plugins = $GLOBALS['DBM']->getPluginsByCategory($category_id); + $plugins_rendered = $this->renderPluginItems($plugins); + $template = $GLOBALS['FACTORY']->open('search_plugins'); + $template->set_attribute('title', count($plugins)." Plugin".(count($plugins) == 1 ? '' : 's')." gefunden."); + $template->set_attribute('plugin_list', $plugins_rendered); + $template->set_attribute('count_plugins', count($plugins)); + + $this->showIndex($template->render()); + } + + public function showEditRelease($plugin_id, $release_id=FALSE) { + $release = new Release(); + $release->setPluginId($plugin_id); + $f = new MFile(); + if ($release_id) { + $release->load($release_id); + $f->load($release->getFileId()); + } + $template = $GLOBALS['FACTORY']->open('edit_release'); + $template->set_attribute('r', $release); + $template->set_attribute('f', $f); + $this->showIndex($template->render()); + } + + public function showUserManagement() { + $css = new CssClassSwitcher(); + $css->enableHover(); + $users = $GLOBALS['DBM']->getAllUsers(); + $template = $GLOBALS['FACTORY']->open('user_management'); + $template->set_attribute('users', $users); + $template->set_attribute('css', $css); + $this->showIndex($template->render()); + } + + public function showUserEditForm($uid) { + $u = new User(); + if ($uid) + $u->load($uid); + $template = $GLOBALS['FACTORY']->open('user_edit_form'); + $template->set_attribute('u', $u); + $this->showIndex($template->render()); + } + + public function showPluginClearings() { + $css = new CssClassSwitcher(); + $css->enableHover(); + $plugins = $GLOBALS['DBM']->getUnclearPlugins(); + $template = $GLOBALS['FACTORY']->open('list_unclear_plugins'); + $template->set_attribute('css', $css); + $template->set_attribute('plugins', $plugins); + $this->showIndex($template->render()); + } + + public static function getRatingVisual($rating) { + $rating_template = $GLOBALS['FACTORY']->open('rating_no_action'); + $rating_template->set_attribute('current', $rating); + $rating_template->set_attribute('rating_width', ($rating == 0 ? 0 : $rating * 100 / MAX_RATING_VALUE)); + return $rating_template->render(); + } + + public function getCurrentRating($range_id, $action = TRUE) { + $ratings = $GLOBALS['DBM']->getUserRatings($range_id); + $user_rating = $GLOBALS['DBM']->getSpecificUserRating($range_id, $GLOBALS['USER']['user_id']); + $rating_width = ($ratings['schnitt'] == 0 ? 0 : $ratings['schnitt'] * 100 / MAX_RATING_VALUE); + $rating_template = $GLOBALS['FACTORY']->open(($action ? 'rating' : 'rating_no_action')); + $rating_template->set_attribute('can_rate', ($action ? TRUE : FALSE)); + $rating_template->set_attribute('current', $rating_width); + $rating_template->set_attribute('range_id', $range_id); + $rating_template->set_attribute('rating_width', $rating_width); + return $rating_template->render(); + } + + public function getPluginRatings($plugin) { + $ratings = $plugin->getUserRatings(); + $rating_width = ($ratings['schnitt'] == 0 ? 0 : $ratings['schnitt'] * 100 / MAX_RATING_VALUE); + $rating_template = $GLOBALS['FACTORY']->open('rating_no_action'); + $rating_template->set_attribute('can_rate', FALSE); + $rating_template->set_attribute('current', $rating_width); + $rating_template->set_attribute('range_id', $range_id); + $rating_template->set_attribute('rating_width', $rating_width); + return $rating_template->render(); + } + + private function renderPluginItems($plugins) { + $plugins_rendered = ""; + foreach ($plugins as $p) { + $template = $GLOBALS['FACTORY']->open('plugin_item'); + $template->set_attribute('image_uri', $GLOBALS['BASE_URI'].'images'); + $template->set_attribute('p', $p); + $template->set_attribute('rating', $this->getPluginRatings(&$p)); + $plugins_rendered .= $template->render(); + } + return $plugins_rendered; + } + +} + +?> diff --git a/classes/Generator.class.php b/classes/Generator.class.php new file mode 100644 index 0000000..eb3be20 --- /dev/null +++ b/classes/Generator.class.php @@ -0,0 +1,99 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Generator { + + private $values = array(); + private $manifest = ''; + private $plugin_corpus = ''; + + public function __construct() { + + } + + public function setValues($a) { + $this->values = $a; + } + + public function magic() { + $this->plugin_corpus = ""; + switch ($this->values['plugintype']) { + case 'Administration': + $template = $GLOBALS['FACTORY']->open('plugins/administration'); + $template->set_attribute('vals', $this->values); + $this->plugin_corpus = $template->render(); + break; + case 'Homepage': + $template = $GLOBALS['FACTORY']->open('plugins/homepage'); + $template->set_attribute('vals', $this->values); + $this->plugin_corpus = $template->render(); + break; + case 'Portal': + $template = $GLOBALS['FACTORY']->open('plugins/portal'); + $template->set_attribute('vals', $this->values); + $this->plugin_corpus = $template->render(); + break; + case 'Standard': + $template = $GLOBALS['FACTORY']->open('plugins/standard'); + $template->set_attribute('vals', $this->values); + $this->plugin_corpus = $template->render(); + break; + case 'System': + $template = $GLOBALS['FACTORY']->open('plugins/system'); + $template->set_attribute('vals', $this->values); + $this->plugin_corpus = $template->render(); + break; + default: ; + } + + $template = $GLOBALS['FACTORY']->open('plugins/manifest'); + $template->set_attribute('vals', $this->values); + $this->manifest = $template->render(); + $this->createZIPArchiv(); + } + + public function createZIPArchiv() { + $f_id = md5(uniqid(time())); + $working_directory = $GLOBALS['DYNAMIC_CONTENT_PATH']."/tmp/".md5(uniqid(time())); + mkdir ($working_directory, 0700); + foreach (array('images','migrations','sql','stylesheets','templates') as $t) + mkdir ($working_directory.'/'.$t, 0700); + + $ff = fopen($working_directory.'/plugin.manifest', "w"); + fputs($ff, $this->manifest); + fclose($ff); + + $ff = fopen($working_directory.'/'.prepareFilename($this->values['pluginclassname']).'.class.php', "w"); + fputs($ff, "plugin_corpus."\n?>"); + fclose($ff); + + Downloader::create_zip_from_directory($working_directory, $GLOBALS['DYNAMIC_CONTENT_PATH']."/tmp/".$f_id.".zip"); + @$GLOBALS['DBM']->rmdirr($working_directory); + + $d = new Downloader(); + $d->initiateDownload(null, $GLOBALS['DYNAMIC_CONTENT_PATH']."/tmp/".$f_id.".zip",$this->values['pluginclassname'].'-1.0.zip'); + + } + +} + +?> diff --git a/classes/History.class.php b/classes/History.class.php new file mode 100644 index 0000000..6610496 --- /dev/null +++ b/classes/History.class.php @@ -0,0 +1,51 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class History { + + public function __construct() { + + } + + public static function add($content, $level) { + $tmp = $_SESSION['history']; + $_SESSION['history'] = array(); + foreach ($tmp as $i=>$t ) { + if ($i >= $level) continue; + else $_SESSION['history'][] = $tmp[$i]; + } + $_SESSION['history'][] = $content; + } + + public static function clear() { + $_SESSION['history'] = array(); + } + + public static function show() { + if (count($_SESSION['history'])) { + echo $GLOBALS['FACTORY']->open('history')->render(); + } + } + +} + +?> diff --git a/classes/HitlistDispatcher.class.php b/classes/HitlistDispatcher.class.php new file mode 100644 index 0000000..825d858 --- /dev/null +++ b/classes/HitlistDispatcher.class.php @@ -0,0 +1,64 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class HitlistDispatcher extends AbstractPageDispatcher +{ + private $plugins; + + public function __construct() { + $this->plugins = $GLOBALS['DBM']->getPluginsByHitlist('latest'); + } + /** + * Should return the maximum number of available pages + */ + public function getPageCount() { + return count($this->plugins); + } + /** + * Should return the appropriate title of given page + * + * @param integer $num + */ + public function getPageTitle($num) { + $p = $this->plugins[$num]; + return "getPluginId()."\">".htmlReady(mila($p->getName(),38)).""; + } + /** + * Should return the appropriate content of given page + * + * @param integer $num + */ + public function getPageContent($num) { + $template = $GLOBALS['FACTORY']->open('plugin_page'); + $template->set_attribute('image_uri', $GLOBALS['BASE_URI'].'images'); + $template->set_attribute('p', $this->plugins[$num]); + return $template->render(); + } + /** + * Should return a unique seperator-sign for dispatching ajax-request + */ + public function getDispatherSign() + { + return "+.+"; + } +} +?> diff --git a/classes/MFile.class.php b/classes/MFile.class.php new file mode 100644 index 0000000..e0750e6 --- /dev/null +++ b/classes/MFile.class.php @@ -0,0 +1,121 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class MFile { + + private $file_id = ''; + private $user_id = ''; + private $mkdate = 0; + private $file_content = ''; + private $file_name = ''; + private $file_size = 0; + private $file_type = ''; + + public function __construct() { + + } + + public function getFileId() { + return $this->file_id; + } + + public function getUserId() { + return $this->user_id; + } + + public function getMkdate() { + return $this->mkdate; + } + + public function getFileName() { + return stripslashes($this->file_name); + } + + public function getFileSize() { + return $this->file_size; + } + + public function getFileType() { + return $this->file_type; + } + + public function setFileId($s) { + $this->file_id = $s; + return $this; + } + + public function setUserId($s) { + $this->user_id = $s; + return $this; + } + + public function setMkdate($s) { + $this->mkdate = $s; + return $this; + } + + public function setFileType($s) { + $this->file_type = $s; + return $this; + } + + public function setFileName($s) { + $this->file_name = $s; + return $this; + } + + public function setFileSize($s) { + $this->file_size = $s; + return $this; + } + + public function load($fid) { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT file_id, user_id, mkdate, file_name, file_size, file_type FROM file_content WHERE file_id='%s'",$fid))->fetchAll(); + $this->file_id = $r[0]['file_id']; + $this->user_id = $r[0]['user_id']; + $this->mkdate = $r[0]['mkdate']; + $this->file_name = $r[0]['file_name']; + $this->file_size = $r[0]['file_size']; + $this->file_type = $r[0]['file_type']; + return TRUE; + } + + public function save() { + if (!$this->file_id) { + $this->file_id = md5(uniqid(time().$this->user_id)); + $this->mkdate = time(); + $stmt = DBManager::get()->prepare("INSERT INTO file_content (file_id, user_id, mkdate, file_name, file_size, file_type) VALUES (?,?,?,?,?,?)"); + $stmt->execute(array($this->file_id,$this->user_id,$this->mkdate,addslashes($this->file_name),$this->file_size,$this->file_type)); + } else { + $stmt = DBManager::get()->prepare("UPDATE file_content SET file_name=?, file_size=? WHERE file_id=?"); + $stmt->execute(array(addslashes($this->file_name),$this->file_size, $this->file_id)); + } + } + + public function remove() { + DBManager::get()->query(sprintf("DELETE FROM file_content WHERE file_id='%s'",$this->file_id)); + } + +} + +?> diff --git a/classes/MPDBM.class.php b/classes/MPDBM.class.php new file mode 100644 index 0000000..84f7272 --- /dev/null +++ b/classes/MPDBM.class.php @@ -0,0 +1,745 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + + +class MPDBM { + + private $error_str = ''; + private $tmp_path = ''; + private $authenticated = FALSE; + + function __construct() { + $this->tmp_path = $GLOBALS['DYNAMIC_CONTENT_PATH'].'/tmp'; + $this->authenticated = $GLOBALS['AUTH']->getAuthenticatedUser(); + } + + public function getErrorStr() { + return $this->error_str; + } + + public function setErrorStr($s = '') { + $this->error_str = $s; + } + + public function disableCurrentTitleScreen($plugin_id) { + DBManager::get()->query(sprintf("UPDATE screenshots SET title_screen=0 WHERE plugin_id='%s'",$plugin_id)); + } + + function getAllUsers() { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT * FROM users ORDER BY nachname, vorname, username"))->fetchAll(); + foreach ($rr as $r) { + $u = new User(); + $u->load($r['user_id']); + array_push($ret, $u); + } + return $ret; + } + + function getCategories() { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT c.*, COUNT(p.plugin_id) count_cat FROM categories c LEFT JOIN categories_plugins cp USING (category_id) LEFT JOIN plugins p ON (cp.plugin_id=p.plugin_id AND (p.approved=1 OR (p.approved=0 AND 1=%d))) GROUP BY c.category_id ORDER BY c.name", ($this->authenticated ? 1 : 0)))->fetchAll(); + return $r; + } + + function getCategory($category_id) { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT c.* FROM categories c WHERE c.category_id='%s'",$category_id))->fetchAll(); + return $r[0]; + } + + function getAllApprovedPlugins() { + $ret = array(); + $db = DBManager::get(); + $rr = $db->query("SELECT p.* FROM plugins p WHERE p.approved=1 ORDER BY p.name")->fetchAll(); + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + function getPluginsByUserId($user_id) { + $ret = array(); + $db = DBManager::get(); + $rr = $db->query(sprintf("SELECT p.* FROM plugins p, users u WHERE p.user_id='%s' AND u.user_id=p.user_id ORDER BY p.name",$user_id))->fetchAll(); + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + function getPluginsByExtendedSearch($search_items) { + $ret = array(); + if (count($search_items) == 0) return $ret; + $db = DBManager::get(); + $params = array(); + $sql = "SELECT p.* FROM plugins p WHERE 1=1 "; + if ($search_items['category_id'] != 'all') { + $sql .= " AND p.plugin_id IN (SELECT cp.plugin_id FROM categories_plugins cp WHERE cp.category_id=? AND cp.plugin_id=p.plugin_id)"; + array_push($params, $search_items['category_id']); + } + if ($search_items['language'] != 'all') { + $sql .= " AND p.language LIKE ?"; + array_push($params, '%'.$search_items['language'].'%'); + } + if ($search_items['search_txt'] != '') { + $tmp_sql = " LOWER(p.name) LIKE LOWER(?)"; + array_push($params,'%'.addslashes($search_items['search_txt']).'%'); + if ($search_items['fulltext'] == 'yes') { + $tmp_sql .= " OR LOWER(p.short_description) LIKE LOWER(?)"; + array_push($params,'%'.addslashes($search_items['search_txt']).'%'); + $tmp_sql .= " OR LOWER(p.description) LIKE LOWER(?)"; + array_push($params,'%'.addslashes($search_items['search_txt']).'%'); + } + $sql = $sql . ' AND (' . $tmp_sql . ')'; + } + $sql .= " AND (p.approved=1 OR (p.approved=0 AND 1=?)) "; + array_push($params,($this->authenticated ? 1 : 0)); + $stmt = $db->prepare($sql); + $stmt->execute($params); + $rr = $stmt->fetchAll(); + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + function getUnclearPlugins() { + $ret = array(); + $db = DBManager::get(); + $rr = $db->query("SELECT * FROM plugins WHERE approved=0 ORDER BY name")->fetchAll(); + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + + function getPluginsByCategory($category_id) { + $ret = array(); + $db = DBManager::get(); + $rr = $db->query(sprintf("SELECT p.* FROM plugins p, categories_plugins cp WHERE cp.category_id='%s' AND p.plugin_id=cp.plugin_id AND (p.approved=1 OR (p.approved=0 AND 1=%d))",$category_id, ($this->authenticated ? 1 : 0)))->fetchAll(); + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + function getPluginsByHitlist($hitlist) { + $ret = array(); + $db = DBManager::get(); + switch ($hitlist) { + case 'recommended': + $rr = $db->query(sprintf("SELECT p.* FROM plugins p WHERE (p.approved=1 OR (p.approved=0 AND 1=%d)) AND p.classification IN ('firstclass','secondclass') ORDER BY p.classification, p.mkdate DESC, p.name",($this->authenticated ? 1 : 0)))->fetchAll(); + break; + case 'latest': + $rr = $db->query(sprintf("SELECT p.* FROM plugins p WHERE (p.approved=1 OR (p.approved=0 AND 1=%d)) ORDER BY p.mkdate DESC, p.name",($this->authenticated ? 1 : 0)))->fetchAll(); + break; + case 'most_downloaded': + $rr = $db->query(sprintf("SELECT p.plugin_id, p.name, SUM(r.downloads) rel_downloads FROM plugins p, releases r WHERE (p.approved=1 OR (p.approved=0 AND 1=%d)) AND r.plugin_id=p.plugin_id GROUP BY p.plugin_id ORDER BY 3, p.name",($this->authenticated ? 1 : 0)))->fetchAll(); + ; + break; + case 'most_rated': + $rr = $db->query(sprintf("SELECT p.plugin_id, p.name, COUNT(r.rating) count_plugin FROM plugins p, releases re LEFT JOIN ratings r ON (r.range_id=re.release_id) WHERE (p.approved=1 OR (p.approved=0 AND 1=%d)) AND re.plugin_id=p.plugin_id GROUP BY p.plugin_id HAVING count_plugin > 0 ORDER BY p.name",($this->authenticated ? 1 : 0)))->fetchAll(); + break; + default: + $rr = $db->query(sprintf("SELECT p.* FROM plugins p WHERE p.approved=1 ORDER BY p.mkdate DESC, p.name"))->fetchAll(); + + } + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + function getPluginsByTxt($txt, $catagory_id){ + $ret = array(); + $db = DBManager::get(); + if (!$catagory_id) { + $stmt = DBManager::get()->prepare("SELECT p.* FROM plugins p WHERE UPPER(p.name) LIKE UPPER(?) AND (p.approved=1 OR (p.approved=0 AND 1=?)) AND EXISTS (SELECT cp.plugin_id FROM categories_plugins cp WHERE cp.plugin_id=p.plugin_id) ORDER BY p.name"); + $stmt->execute(array('%'.$txt.'%',($this->authenticated ? 1 : 0))); + $rr = $stmt->fetchAll(); + } else { + $stmt = DBManager::get()->prepare("SELECT p.* FROM plugins p, categories_plugins cp WHERE UPPER(p.name) LIKE UPPER(?) AND cp.plugin_id=p.plugin_id AND cp.category_id=? AND (p.approved=1 OR (p.approved=0 AND 1=?)) ORDER BY p.name"); + $stmt->execute(array('%'.$txt.'%',$catagory_id,($this->authenticated ? 1 : 0))); + $rr = $stmt->fetchAll(); + } + + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + public function getPluginsByTagName($tag) { + $ret = array(); + $stmt = DBManager::get()->prepare("SELECT p.plugin_id FROM plugins p, tags_objects tt, tags t WHERE t.tag=? AND tt.tag_id=t.tag_id AND p.plugin_id=tt.object_id AND (p.approved=1 OR (p.approved=0 AND 1=?)) + UNION SELECT p.plugin_id FROM plugins p, tags_objects tt, tags t, releases r WHERE t.tag=? AND tt.tag_id=t.tag_id AND r.release_id=tt.object_id AND p.plugin_id=r.plugin_id AND (p.approved=1 OR (p.approved=0 AND 1=?))"); + $stmt->execute(array(addslashes($tag),($this->authenticated ? 1 : 0), addslashes($tag),($this->authenticated ? 1 : 0))); + $rr = $stmt->fetchAll(); + foreach ($rr as $r) { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + return $ret; + } + + function setFileContent($file_name, $file_size, $user_id, $file_id, $file_type) { + if (!$file_id) { + $f = new MFile(); + $f->setUserId($user_id) + ->setFileName($file_name) + ->setFileSize($file_size) + ->setFileType($file_type) + ->save(); + } else { + $f = new MFile(); + $f->load($file_id); + $f->setUserId($user_id) + ->setFileName($file_name) + ->setFileSize($file_size) + ->save(); + } + return $f->getFileId(); + } + + // Liest ein Verzeichnis ein + function GetDirContents($dir){ + ini_set("max_execution_time",100); + if (!is_dir($dir)) { + $this->error_str = sprintf("Fehler! kein gültiges Verzeichnis: %s!",$dir); + return FALSE; + } + if ($root=@opendir($dir)){ + while ($file=readdir($root)){ + if($file=="." || $file==".."){continue;} + if(is_dir($dir."/".$file)){ + $files=array_merge($files,GetDirContents($dir."/".$file)); + }else{ + $files[]=$dir."/".$file; + } + } + } + return $files; + } + + function add_new_zip($zipfile, $zipfile_size, $zipfile_name, $plugin_id, $user_id, $file_type='screenshots') { + $db = DBManager::get(); + + $zipdir = $this->tmp_path."/".$plugin_id."_".time(); + $zipname = basename($zipfile).".zip"; + + if ($zipfile_size > 50000 * 1024) { + $this->error_str = "Die hochgeladene ZIP-Datei ist zu gross!"; + return FALSE; + } + + if (!@copy($zipfile, $this->tmp_path."/$zipname")) { + $this->error_str = "Fehler beim Kopieren des ZIP-Archivs!"; + return FALSE; + } + + // ZIP-Testing... + exec("unzip -t ".$this->tmp_path."/$zipname 2>&1", $out, $err); + if ($err) { + $this->error_str = "Fehler im ZIP-Archiv!"."unzip -t ".$this->tmp_path."/$zipname 2>&1"; + return FALSE; + } + + unset($out); + unset($err); + + // ZIP-Auspacking... + exec("unzip -jno ".$this->tmp_path."/$zipname -d $zipdir 2>&1", $out, $err); + if ($err) { + $this->error_str = "Fehler beim Entpacken des ZIP-Archivs!"; + return FALSE; + } + + $files = $this->GetDirContents($zipdir); + + if (!is_array($files)) return $files; + + $good = 0; + $not_good = 0; + + if (is_array($files)) + foreach ($files as $key=>$val) { + //Dateiendung bestimmen + $ext = NULL; + $dot = strrpos($val,"."); + if ($dot) { + $l = strlen($val) - $dot; + $ext = strtolower(substr($val,$dot+1,$l)); + } + + if (filesize($val)==0) { + $not_good++; + $this->error_str .= sprintf("Fehler beim hochladen des Fotos: %s Dateigrösse 0 Byte!",basename($val)); + unlink($val); + continue; + } + + $r = $db->query(sprintf("SELECT MAX(sort) maxsort FROM screenshots WHERE plugin_id='%s'",$plugin_id))->fetch(PDO::FETCH_NUM); + $max_sort = ($r[0] ? $r[0] : 1); + + $file_id = $this->setFileContent(basename($val), filesize($val), $user_id, FALSE, $file_type); + if ($this->imaging($file_id, $val, filesize($val), basename($val))) { + $s = new Screenshot(); + $s->setPluginId($plugin_id) + ->setFileId($file_id) + ->setTitleScreen(0); + $s->save(); + + $good++; + } else { + $f = new MFile(); + $f->load($file_id); + $f->remove(); + unset($f); + $not_good++; + $msg .= $msg2; + } + unlink($val); + } + $this->error_str .= sprintf("%d Bild(er) hochgeladen / %d Problem(e)",$good,$not_good); + rmdir($zipdir); + unlink($this->tmp_path."/$zipname"); + return TRUE; + } + + + + function uploader($file_id=FALSE, $user_id, $img, $img_size, $img_name, $file_type) { + if (!$img_name) { + return FALSE; + } + + if(!file_exists($img)) { + @unlink($newfile); + return FALSE; + } else { + $file_id = $this->setFileContent($img_name, $img_size, $user_id, $file_id, $file_type); + if ($file_type == 'screenshots') + $ok = $this->imaging($file_id, $img, $img_size, $img_name); + else if ($file_type == 'releases') { + $uploaddir = $GLOBALS['DYNAMIC_CONTENT_PATH'] . '/releases'; //Uploadverzeichnis + $newfile = $uploaddir . "/".$file_id; + if(!@copy($img,$newfile)) { + @unlink($newfile); + $this->error_str = "Error 4: " . sprintf(_("Es ist ein Fehler beim Kopieren der Datei %s aufgetreten. Die Datei wurde nicht hochgeladen!"),$img); + return FALSE; + } + } + + return $file_id; + } + return FALSE; + } + + function imaging($foto_id, $img, $img_size, $img_name) { + $max_file_size = 8000; //max Größe der Bilddatei in KB + $img_max_h_thumb = 150; // max picture height (thumbnail) + $img_max_h = 800; // max picture height + $img_max_w_thumb = 150; // max picture width (thumbnail) + $img_max_w = 800; // max picture width + $uploaddir = $GLOBALS['DYNAMIC_CONTENT_PATH'] . '/screenshots'; //Uploadverzeichnis für Bilder + + $msg = ""; + if ($img_size > ($max_file_size*1024)) { //Bilddatei ist zu groß + $this->error_str = "Error 1: " . sprintf(_("Die hochgeladene Bilddatei ist %s KB groß.
Die maximale Dateigröße betr&auuml;gt %s KB!"), round($img_size/1024), $max_file_size); + return FALSE; + } + + if (!$img_name) { //keine Datei ausgewählt! + $this->error_str = "Error 2: " . _("Sie haben keine Datei zum Hochladen ausgewählt!"); + return FALSE; + } + + //Dateiendung bestimmen + $dot = strrpos($img_name,"."); + if ($dot) { + $l = strlen($img_name) - $dot; + $ext = strtolower(substr($img_name,$dot+1,$l)); + } + //passende Endung ? + if ($ext != "jpg" && $ext != "gif" && $ext != "png") { + $this->error_str = sprintf(_("Der Dateityp der Bilddatei ist falsch (%s).
Es sind nur die Dateiendungen .gif, .png und .jpg erlaubt!§"), $ext); + return FALSE; + } + + //na dann kopieren wir mal... + $newfile = $uploaddir . "/".$foto_id; + $newfile_thumb = $uploaddir . "/".$foto_id.'_thumb'; + if(!@copy($img,$newfile) || !@copy($img,$newfile_thumb)) { + @unlink($newfile); + @unlink($newfile_thumb); + $this->error_str = "Error 4: " . sprintf(_("Es ist ein Fehler beim Kopieren der Datei %s aufgetreten. Das Bild wurde nicht hochgeladen!"),$img); + return FALSE; + } else { + list($width, $height, $img_type, ) = @getimagesize($img); + // Check picture size + $hscale = $height / $img_max_h; + $wscale = $width / $img_max_w; + $hscale_thumb = $height / $img_max_h_thumb; + $wscale_thumb = $width / $img_max_w_thumb; + // Thumbnails + if (($hscale_thumb > 1) || ($wscale_thumb > 1)) { + $scale = ($hscale_thumb > $wscale_thumb)? $hscale_thumb : $wscale_thumb; + $newwidth = floor($width / $scale); + $newheight= floor($height / $scale); + $ret_val = false; + if (@file_exists($GLOBALS['CONVERT_PATH'])){ + system($GLOBALS['CONVERT_PATH'] . ' -resize ' . $newwidth . 'x' . $newheight . '! ' . $newfile_thumb .' ' . $newfile_thumb, $ret_val); + } else if (extension_loaded('gd') && function_exists('imagecopyresampled')){ + // leeres Bild erzeugen +$img_res = ImageCreateTrueColor($newwidth, $newheight); + switch ($img_type) { //original Bild einlesen + case 1: //GIF + $img_org = ImageCreateFromGIF($img); + break; + case 2: //JPG + $img_org = ImageCreateFromJPEG($img); + break; + case 3: //PNG + $img_org = ImageCreateFromPNG($img); + break; + default: + $img_org = FALSE; + } // end switch + if (!$img_org) { + $this->error_str = "Error 5: " . _("Es ist ein Fehler beim Kopieren der Datei aufgetreten. Das Bild wurde nicht hochgeladen!"); + @unlink($newfile); + @unlink($newfile_thumb); + return FALSE; + } + // resampeln und als jpg speichern + $ret_val = ImageCopyResampled ( $img_res, $img_org, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); + $ret_val = ImageJPEG ( $img_res, $newfile_thumb , 70); + $ret_val = $ret_val ? false : true; + ImageDestroy ( $img_res); + ImageDestroy ( $img_org); + } else { + $ret_val = true; //Fehler!!! + } + if ($ret_val){ + @unlink($newfile); + @unlink($newfile_thumb); + $this->error_str= "Error 6:" . _("Es ist ein Fehler beim Kopieren der Datei aufgetreten. Das Bild wurde nicht hochgeladen!"); + return FALSE; + } + } + // Big-Images + if (($hscale > 1) || ($wscale > 1)) { + $scale = ($hscale > $wscale)? $hscale : $wscale; + $newwidth = floor($width / $scale); + $newheight= floor($height / $scale); + $ret_val = false; + if (@file_exists($GLOBALS['CONVERT_PATH'])){ + system($GLOBALS['CONVERT_PATH'] . ' -resize ' . $newwidth . 'x' . $newheight . '! ' . $newfile .' ' . $newfile, $ret_val); + } else if (extension_loaded('gd') && function_exists('imagecopyresampled')){ + // leeres Bild erzeugen + $img_res = ImageCreateTrueColor($newwidth, $newheight); + switch ($img_type) { //original Bild einlesen + case 1: //GIF + $img_org = ImageCreateFromGIF($img); + break; + case 2: //JPG + $img_org = ImageCreateFromJPEG($img); + break; + case 3: //PNG + $img_org = ImageCreateFromPNG($img); + break; + default: + $img_org = FALSE; + } // end switch + if (!$img_org) { + $this->error_str = "Error 7: " . _("Es ist ein Fehler beim Kopieren der Datei aufgetreten. Das Bild wurde nicht hochgeladen!"); + @unlink($newfile); + @unlink($newfile_thumb); + return FALSE; + } + // resampeln und als jpg speichern + $ret_val = ImageCopyResampled ( $img_res, $img_org, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); + $ret_val = ImageJPEG ( $img_res, $newfile , 70); + $ret_val = $ret_val ? false : true; + ImageDestroy ( $img_res); + ImageDestroy ( $img_org); + } else { + $ret_val = true; //Fehler!!! + } + if ($ret_val){ + @unlink($newfile); + @unlink($newfile_thumb); + $this->error_str = "Error 8: " . _("Es ist ein Fehler beim Kopieren der Datei aufgetreten. Das Bild wurde nicht hochgeladen!"); + return $msg; + } + } + return TRUE; + } + return FALSE; + } + + function getTagCounter($limit=40) { + $ret = array(); + $db = DBManager::get(); + $rr = $db->query(sprintf("SELECT t.tag, COUNT(t.tag_id) anz FROM tags t, tags_objects ta, plugins p, releases r WHERE ta.tag_id=t.tag_id AND ((p.plugin_id=ta.object_id AND (p.approved=1 OR (p.approved=0 AND 1=%d)))) OR (r.release_id=ta.object_id AND p.plugin_id=r.plugin_id AND (p.approved=1 OR (p.approved=0 AND 1=%d))) GROUP BY t.tag ORDER BY 2 DESC %s",($this->authenticated ? 1 : 0), ($this->authenticated ? 1 : 0), ($limit?"LIMIT 0,$limit":"")))->fetchAll(); + foreach ($rr as $r) { + $r['tag_weight'] = $this->calcTagWeight($r['tag']); + array_push($ret, $r); + } + array_multisort($ret, SORT_ASC); + return $ret; + } + + function getMaxTagCount($single='') { + $db = DBManager::get(); + if (!$single) + $r = $db->query("SELECT * FROM tags_objects")->fetchAll(); + else { + $stmt = $db->prepare("SELECT ta.* FROM tags_objects ta, tags t WHERE ta.tag_id=t.tag_id AND t.tag=? AND (EXISTS (SELECT p.plugin_id FROM plugins p WHERE plugin_id=ta.object_id AND (p.approved=1 OR (p.approved=0 AND 1=?)))) OR EXISTS (SELECT r.release_id FROM releases r, plugins p WHERE r.release_id=ta.object_id AND p.plugin_id=r.plugin_id AND (p.approved=1 OR (p.approved=0 AND 1=?)))"); + $stmt->execute(array(addslashes($single), ($this->authenticated ? 1 : 0), ($this->authenticated ? 1 : 0))); + $r = $stmt->fetchAll(); + } + return count($r); + } + + function calcTagWeight($tag) { + $f_max = 10; + $t_i = $this->getMaxTagCount($tag); + + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT MAX(x.anz) anz_max, MIN(x.anz) anz_min FROM (SELECT t.tag, COUNT(t.tag_id) anz FROM tags t, tags_objects ta WHERE t.tag_id=ta.tag_id GROUP BY t.tag ORDER BY t.tag) x LIMIT 1"))->fetchAll(); + $anz_max = $r[0]['anz_max']; + $anz_min = $r[0]['anz_min']; + + $delta = ($anz_max - $anz_min) / $f_max; + $newThresholds = array(); + for ($x=1; $x<=$f_max; $x++) { + $newThresholds[$x] = 100 * log( ($anz_min + $x * $delta) + 2); + } + + $fontSet = false; + foreach ($newThresholds as $k=>$threshold) { + if ( (100 * log($t_i+2) <= $newThresholds[$k]) && !$fontSet) { + $fontSet = true; + return $k; + } + } + } + + public function searchForTags($val) { + $db = DBManager::get(); + $stmt = $db->prepare("SELECT * FROM tags WHERE LOWER(tag) LIKE LOWER(?)"); + $stmt->execute(array(addslashes($val).'%')); + $rr = $stmt->fetchAll(); + $ret = "
    "; + $suche = sprintf("/^(%s)/",$val); + $ersetze = "\$1"; + foreach ($rr as $r) { + $txt = preg_replace($suche,$ersetze,stripslashes($r['tag'])); + $ret .= "
  • ".$txt."
  • "; + } + $ret .= "
"; + return $ret; + } + + public function getComments($range_id) { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT comment_id FROM comments WHERE range_id='%s' ORDER BY mkdate DESC",$range_id))->fetchAll(); + foreach ($rr as $r) { + $c = new Comment(); + $c->load($r['comment_id']); + array_push($ret, $c); + } + return $ret; + } + + public function getPluginManifest($pluginpath) { + $manifest = @file($pluginpath . '/plugin.manifest'); + $result = array(); + + if ($manifest !== false) { + foreach ($manifest as $line) { + list($key, $value) = explode('=', $line); + $key = trim($key); + $value = trim($value); + + if ($key === '' || $key[0] === '#') { + continue; + } + + if ($key === 'pluginclassname' && isset($result[$key])) { + $result['additionalclasses'][] = $value; + } else { + $result[$key] = $value; + } + } + } + + return $result; + } + + + public function rmdirr($dirname){ + // Simple delete for a file + if (is_file($dirname)) { + return @unlink($dirname); + } else if (!is_dir($dirname)){ + return false; + } + + // Loop through the folder + $dir = dir($dirname); + while (false !== ($entry = $dir->read())) { + // Skip pointers + if ($entry == '.' || $entry == '..') { + continue; + } + + // Deep delete directories + if (is_dir("$dirname/$entry")) { + $this->rmdirr("$dirname/$entry"); + } else { + @unlink("$dirname/$entry"); + } + } + // Clean up + $dir->close(); + return @rmdir($dirname); + } + + + public function checkReleaseZip($zipfile, $zipfile_size, $zipfile_name) { + $zipdir = $this->tmp_path."/".time(); + $zipname = basename($zipfile).".zip"; + + if ($zipfile_size > 50000 * 1024) { + $this->error_str = "Die hochgeladene ZIP-Datei ist zu gross!"; + return FALSE; + } + + if (!@copy($zipfile, $this->tmp_path."/$zipname")) { + $this->error_str = "Fehler beim Kopieren des ZIP-Archivs!"; + return FALSE; + } + + // ZIP-Testing... + exec("unzip -t ".$this->tmp_path."/$zipname 2>&1", $out, $err); + if ($err) { + $this->error_str = "Fehler im ZIP-Archiv!"."unzip -t ".$this->tmp_path."/$zipname 2>&1"; + return FALSE; + } + + unset($out); + unset($err); + + // ZIP-Auspacking... + exec("unzip -jno ".$this->tmp_path."/$zipname -d $zipdir 2>&1", $out, $err); + if ($err) { + $this->error_str = "Fehler beim Entpacken des ZIP-Archivs!"; + return FALSE; + } + + $files = $this->GetDirContents($zipdir); + + $manifest = array(); + if (!is_array($files)) { + $this->error_str = "Keine Dateien im ZIP-Archiv gefunden!"; + $this->rmdirr($zipdir); + unlink($this->tmp_path."/$zipname"); + return FALSE; + } else { + $manifest = $this->getPluginManifest($zipdir); + if (count($manifest) == 0) { + $this->error_str = "Kein Manifest gefunden!"; + $this->rmdirr($zipdir); + unlink($this->tmp_path."/$zipname"); + return FALSE; + } else { + $studip_version_check = "/(\d)(\.\d+)*.*/"; + $err = array(); + if (empty($manifest['pluginname'])) $err[] = "pluginname"; + if (empty($manifest['pluginclassname'])) $err[] = "pluginclassname"; + if (empty($manifest['origin'])) $err[] = "origin"; + if (empty($manifest['version'])) $err[] = "version"; + if (empty($manifest['studipMinVersion'])) $err[] = "studipMinVersion"; + if (!empty($manifest['studipMinVersion']) && !preg_match($studip_version_check, $manifest['studipMinVersion'])) $err[] = "studipMinVersion (falsches Format)"; + if (count($err)) { + $this->error_str = "Folgende Angaben fehlen im Manifest: ".join(', ',$err); + $this->rmdirr($zipdir); + unlink($this->tmp_path."/$zipname"); + return FALSE; + } + } + } + $this->rmdirr($zipdir); + return $manifest; + } + + public function setRating($range_id, $user_id, $rating) { + $id = md5(uniqid(time().$user_id.$range_id)); + DBManager::get()->query(sprintf("REPLACE INTO ratings SET range_id='%s', user_id='%s', rating=%d",$range_id, $user_id, $rating)); + } + + public function getUserRatings($range_id) { + $db = DBManager::get(); + $summe = 0; + $rr = $db->query(sprintf("SELECT SQL_CACHE rating FROM ratings WHERE range_id='%s' AND rating IS NOT NULL AND rating!=0",$range_id))->fetchAll(); + foreach ($rr as $r) { + $summe += $r['rating']; + } + if (count($rr) > 0) + return array('summe'=>$summe, 'schnitt'=>($summe / count($rr)), 'anzahl'=>count($rr)); + else + return FALSE; + } + + public function getSpecificUserRating($range_id, $user_id) { + $db = DBManager::get(); + $rr = $db->query(sprintf("SELECT SQL_CACHE rating FROM ratings WHERE range_id='%s' AND user_id='%s' AND rating IS NOT NULL AND rating!=0",$range_id, $user_id))->fetchAll(); + if (count($rr) > 0) + return $rr[0]['rating']; + else + return 0; + } + + + +} + +?> diff --git a/classes/MailRenderer.class.php b/classes/MailRenderer.class.php new file mode 100644 index 0000000..a4985df --- /dev/null +++ b/classes/MailRenderer.class.php @@ -0,0 +1,123 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class MailRenderer { + + private $header; + + public function __construct() { + $this->header = 'From: '. $GLOBALS['SUPPORT_ADDRESS'] . "\r\n" . + 'Reply-To: '. $GLOBALS['SUPPORT_ADDRESS'] . "\r\n" . + 'X-Mailer: Stud.IP Plugin Marketplace'; + } + + public function generateRegistrationMail($username, $vorname,$nachname,$email,$salutation,$mkdate,$confirmation_token) { + $template = $GLOBALS['FACTORY']->open('mails/mail_register'); + $template->set_attribute('username', $username); + $template->set_attribute('vorname', $vorname); + $template->set_attribute('mkdate', $mkdate); + $template->set_attribute('email', $email); + $template->set_attribute('nachname', $nachname); + $template->set_attribute('salutation', $salutation); + $template->set_attribute('link', $GLOBALS['BASE_URI'].'?dispatch=confirm&token='.$confirmation_token); + $mail_content = $template->render(); + mail($email,'Plugin Marktplatz: Bestätigung erforderlich',$mail_content, $this->header); + } + + public function generateAprovementMail($p) { + $u = new User(); + $u->load($p->getUserId()); + $template = $GLOBALS['FACTORY']->open('mails/mail_plugin_approvement'); + $template->set_attribute('p', $p); + $template->set_attribute('u', $u); + $mail_content = $template->render(); + mail($u->getEmail(),'Plugin Marktplatz: Plugin angenommen',$mail_content, $this->header); + } + + public function generateSuspendMail($p) { + $u = new User(); + $u->load($p->getUserId()); + $template = $GLOBALS['FACTORY']->open('mails/mail_plugin_suspend'); + $template->set_attribute('p', $p); + $template->set_attribute('u', $u); + $mail_content = $template->render(); + mail($u->getEmail(),'Plugin Marktplatz: Plugin gesperrt',$mail_content, $this->header); + } + + public function generateResetPasswordMail($u, $new_pw) { + $template = $GLOBALS['FACTORY']->open('mails/reset_password'); + $template->set_attribute('u', $u); + $template->set_attribute('new_pw', $new_pw); + $mail_content = $template->render(); + mail($u->getEmail(),'Plugin Marktplatz: Neues Passwort',$mail_content, $this->header); + } + + public function generateNewPluginMails($user_id, $p) { + $u = new User(); + $u->load($user_id); + $template = $GLOBALS['FACTORY']->open('mails/mail_new_plugin'); + $template->set_attribute('u', $u); + $template->set_attribute('p', $p); + $mail_content = $template->render(); + $admins = UserManagement::getUsersByPerm('admin'); + foreach ($admins as $a) + mail($a->getEmail(),'Plugin Marktplatz: Neues Plugin zur Freischaltung',$mail_content, $this->header); + } + + + public function generateCommentMail($range_id, $comment_user_id, $comment) { + $r = new Release(); + $p = new Plugin(); + if ($r->load($range_id)) { + $rel_version = $r->getVersion(); + $p->load($r->getPluginId()); + } else { + $p->load($range_id); + } + $u = new User(); + $u->load($p->getUserId()); + $cu = new User(); + $cu->load($comment_user_id); + + $template = $GLOBALS['FACTORY']->open('mails/mail_comment'); + $template->set_attribute('u', $u); + $template->set_attribute('cu', $cu); + $template->set_attribute('comment', $comment); + $template->set_attribute('p', $p); + $template->set_attribute('rel_version', $rel_version); + $mail_content = $template->render(); + mail($u->getEmail(),'Plugin Marktplatz: Neuer Kommentar',$mail_content, $this->header); + } + + public function generateQuestionMail($plugin_id, $question, $question_type, $users_name, $email) { + $p = new Plugin(); + $p->load($plugin_id); + $recipient = $p->getAuthor(); + $subject = htmlReady($question_type)." zum Plugin ".htmlReady($p->getName()); + $footer = "\n\n-- \r\nDies ist eine Nachricht aus dem Stud.IP Plugin-Marktplatz (".$GLOBALS['BASE_URI']."). Sie können direkt darauf antworten."; + $header = "From: ". ($users_name ? $users_name : 'Unknown') . " <" . $email . ">\r\n"; //optional headerfields + mail($recipient['email'], $subject, $question.$footer, $header); + } + +} + +?> diff --git a/classes/Perm.class.php b/classes/Perm.class.php new file mode 100644 index 0000000..9691b28 --- /dev/null +++ b/classes/Perm.class.php @@ -0,0 +1,128 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Perm { + + private $permissions = array( + "user" => 1, + "author" => 3, + "admin" => 7 + ); + + + public function __construct() { + + } + + private function permsum($p) { + if (!is_array($p)) { + return array(false, 0); + } + $perms = $this->permissions; + + $r = 0; + reset($p); + while(list($key, $val) = each($p)) { + if (!isset($perms[$val])) { + return array(false, 0); + } + $r |= $perms[$val]; + } + + return array(true, $r); + } + + private function get_perm($user_id = false){ + if (!$user_id) $user_id = $GLOBALS['USER']['user_id']; + if ($user_id && $user_id == $GLOBALS['USER']['user_id']){ + return $GLOBALS['USER']['perm']; + } else if ($user_id) { + $r = DBManager::get()->query(sprintf("SELECT perm FROM users WHERE user_id='%s'",$user_id))->fetch(PDO::FETCH_NUM); + if (!count($r)){ + return false; + } else { + return $r[0]; + } + } + } + + public function have_perm($perm, $user_id = false) { + + $pageperm = split(",", $perm); + $userperm = split(",", $this->get_perm($user_id)); + + list($ok0, $pagebits) = $this->permsum($pageperm); + list($ok1, $userbits) = $this->permsum($userperm); + + $has_all = (($userbits & $pagebits) == $pagebits); + if (!($has_all && $ok0 && $ok1) ) { + return false; + } else { + return true; + } + } + + public function have_plugin_perm($perm, $range_id, $user_id = false) { + if (!$user_id) { + $user_id = $GLOBALS['USER']['user_id']; + } + + $pageperm = split(",", $perm); + $userperm = split(",", $this->get_plugin_perm($range_id, $user_id)); + + list ($ok0, $pagebits) = $this->permsum($pageperm); + list ($ok1, $userbits) = $this->permsum($userperm); + + $has_all = (($userbits & $pagebits) == $pagebits); + + if (!($has_all && $ok0 && $ok1) ) { + return false; + } else { + return true; + } + } + + private function get_plugin_perm($range_id, $user_id) { + $status = FALSE; + if ($user_id && $user_id == $GLOBALS['USER']['user_id']){ + $user_perm = $GLOBALS['USER']["perm"]; + } else { + $user_perm = $this->get_perm($user_id); + if (!$user_perm){ + return FALSE; + } + } + if ($user_perm == "admin") { + return "admin"; + } else { + $r = DBManager::get()->query(sprintf("SELECT user_id FROM plugins WHERE plugin_id='%s'",$range_id))->fetch(PDO::FETCH_NUM); + if ($user_id == $r[0]) + return "author"; + else + return FALSE; + } + return $status; + } + +} + +?> diff --git a/classes/Plugin.class.php b/classes/Plugin.class.php new file mode 100644 index 0000000..dac6d46 --- /dev/null +++ b/classes/Plugin.class.php @@ -0,0 +1,370 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Plugin { + + private $name = ""; + private $short_description = ""; + private $description = ""; + private $license = ""; + private $in_use = ""; + private $plugin_id = ""; + private $mkdate = 0; + private $user_id = ""; + private $categories = array(); + private $approved = 0; + private $classification = 'none'; + private $url = ''; + private $language = 'de'; + private $chdate = 0; + + public function __construct() { + + } + + public function getPluginId() { + return $this->plugin_id; + } + + public function getName() { + return stripslashes($this->name); + } + + public function getShortDescription() { + return stripslashes($this->short_description); + } + + public function getDescription() { + return stripslashes($this->description); + } + + public function getLicense() { + return stripslashes($this->license); + } + + public function getInUse() { + return stripslashes($this->in_use); + } + + public function getUserId() { + return $this->user_id; + } + + public function getCategories() { + return $this->categories; + } + + public function getApproved() { + return $this->approved; + } + + public function getUrl() { + return stripslashes($this->url); + } + + public function getClassification() { + return $this->classification; + } + + public function getLanguage() { + return $this->language; + } + + public function getChdate() { + return $this->chdate; + } + + public function getMkdate() { + return $this->mkdate; + } + + public function getRezension() { + $r = DBManager::get()->query(sprintf("SELECT rezension_txt FROM rezension WHERE plugin_id='%s'",$this->plugin_id))->fetch(PDO::FETCH_NUM); + return stripslashes($r[0]); + } + + public function getParticipants() { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT user_id FROM user_plugins WHERE plugin_id='%s'",$this->plugin_id))->fetchAll(); + foreach ($rr as $r) { + $u = new User(); + $u->load($r['user_id']); + array_push($ret, $u); + } + return $ret; + } + + public function removeParticipant($user_id) { + DBManager::get()->query(sprintf("DELETE FROM user_plugins WHERE plugin_id='%s' AND user_id='%s'",$this->plugin_id,$user_id)); + } + + public function setParticipant($user_id) { + $r = DBManager::get()->query(sprintf("SELECT user_id FROM user_plugins WHERE plugin_id='%s' AND user_id='%s'",$this->plugin_id,$user_id))->fetchAll(); + if (count($r) == 0) { + DBManager::get()->query(sprintf("INSERT INTO user_plugins (user_id, plugin_id) VALUES ('%s','%s')",$user_id,$this->plugin_id)); + } + } + + public function getAuthor() { + if ($this->plugin_id) { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT * FROM users WHERE user_id='%s'",$this->user_id))->fetchAll(); + if (count($r)) return $r[0]; + else return FALSE; + } + return FALSE; + } + + public function setClassification($s) { + DBManager::get()->query(sprintf("UPDATE plugins SET classification='%s' WHERE plugin_id='%s'",$s,$this->plugin_id)); + } + + public function setRezension($s) { + $r = DBManager::get()->query(sprintf("SELECT rezension_txt FROM rezension WHERE plugin_id='%s'",$this->plugin_id))->fetchAll(); + if (count($r)) { + DBManager::get()->query(sprintf("UPDATE rezension SET rezension_txt='%s' WHERE plugin_id='%s'",mysql_escape_string($s),$this->plugin_id)); + } else { + $id = md5(uniqid(time())); + DBManager::get()->query(sprintf("INSERT INTO rezension (rezension_id, user_id, plugin_id, rezension_txt, mkdate) VALUE ('%s','%s','%s','%s',UNIX_TIMESTAMP())",$id,$GLOBALS['USER']['user_id'],$this->plugin_id,mysql_escape_string($s))); + } + } + + public function setPluginId($s) { + $this->plugin_id = $s; + return $this; + } + + public function setName($s) { + $this->name = $s; + return $this; + } + + public function setShortDescription($s) { + $this->short_description = $s; + return $this; + } + + public function setDescription($s) { + $this->description = $s; + return $this; + } + + public function setLicense($s) { + $this->license = $s; + return $this; + } + + public function setInUse($s) { + $this->in_use = $s; + return $this; + } + + public function setUserId($s) { + $this->user_id = $s; + return $this; + } + + public function setCategories($s) { + $this->categories = $s; + return $this; + } + + public function setApproved($s) { + $this->approved = $s; + return $this; + } + + public function setUrl($s) { + $this->url = $s; + return $this; + } + + public function setLanguage($s) { + $this->language = $s; + return $this; + } + + public function save() { + $db = DBManager::get(); + if (!$this->plugin_id) { + $this->plugin_id = md5(uniqid(time().$this->name.$this->user_id)); + $this->mkdate = time(); + $stmt = $db->prepare("INSERT INTO plugins (plugin_id, name, short_description, description, mkdate, license, user_id, in_use, approved, url, language) VALUES (?,?,?,?,?,?,?,?,0,?,?)"); + $stmt->execute(array($this->plugin_id,addslashes($this->name),addslashes($this->short_description),addslashes($this->description),$this->mkdate,addslashes($this->license),$this->user_id,addslashes($this->in_use),addslashes($this->url),$this->language)); + // assign standard tags + $rr = $db->query("SELECT * FROM tags WHERE owner='root'")->fetchAll(); + foreach ($rr as $r) { + $qq = $db->query(sprintf("SELECT p.* FROM plugins p WHERE p.plugin_id='%s' AND LOWER(p.name) LIKE '%s' AND NOT EXISTS (SELECT ta.tag_id FROM tags_objects ta WHERE ta.tag_id='%s' AND ta.object_id=p.plugin_id)",$this->plugin_id,"%".$r['tag']."%", $r['tag_id']))->fetchAll(); + foreach ($qq as $q) + $db->query(sprintf("INSERT INTO tags_objects (tag_id, object_id) VALUES ('%s','%s')",$r['tag_id'],$q['plugin_id'])); + } + } else { + $stmt = $db->prepare("UPDATE plugins SET name=?, short_description=?, description=?, license=?, in_use=?, approved=?, url=?, language=?, chdate=UNIX_TIMESTAMP(), user_id=? WHERE plugin_id=?"); + $stmt->execute(array(addslashes($this->name),addslashes($this->short_description),addslashes($this->description),addslashes($this->license),addslashes($this->in_use),$this->approved,addslashes($this->url),$this->language,$this->user_id,$this->plugin_id)); + } + $db->query(sprintf("DELETE FROM categories_plugins WHERE plugin_id='%s'",$this->plugin_id)); + foreach ($this->categories as $c) { + $db->query(sprintf("INSERT INTO categories_plugins (category_id, plugin_id) VALUES ('%s','%s')",$c, $this->plugin_id)); + } + + + } + + public function load($id) { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT * FROM plugins WHERE plugin_id='%s'",$id))->fetchAll(); + if (count($r)) { + $this->name = $r[0]['name']; + $this->short_description = $r[0]['short_description']; + $this->description = $r[0]['description']; + $this->license = $r[0]['license']; + $this->in_use = $r[0]['in_use']; + $this->plugin_id = $r[0]['plugin_id']; + $this->mkdate = $r[0]['mkdate']; + $this->chdate = $r[0]['chdate']; + $this->user_id = $r[0]['user_id']; + $this->approved = $r[0]['approved']; + $this->classification = $r[0]['classification']; + $this->url = $r[0]['url']; + $this->language = $r[0]['language']; + $rr = $db->query(sprintf("SELECT category_id FROM categories_plugins WHERE plugin_id='%s'",$id))->fetchAll(); + foreach ($rr as $c) + array_push($this->categories, $c['category_id']); + return TRUE; + } else return FALSE; + } + + public function getReleases() { + $ret = array(); + $db = DBManager::get(); + $rr = $db->query(sprintf("SELECT release_id FROM releases WHERE plugin_id='%s'",$this->plugin_id))->fetchAll(); + foreach ($rr as $r) { + $rel = new Release(); + $rel->load($r['release_id']); + array_push($ret, $rel); + } + return (count($ret) ? $ret : FALSE); + } + + public function getCategoriesFull() { + return DBManager::get()->query(sprintf("SELECT c.* FROM categories_plugins cp, categories c WHERE cp.plugin_id='%s' AND c.category_id=cp.category_id",$this->plugin_id))->fetchAll(); + } + + public function setTags($t) { + if (trim($t) == "") return $this; + $tags = explode(',',$t); + $current_tags = $this->getTags(); + foreach ($tags as $t) { + $t = trim(strtolower($t)); + if ($t == "") continue; + if (in_array($t, $current_tags)) continue; + $r = DBManager::get()->query(sprintf("SELECT * FROM tags WHERE tag='%s'",addslashes($t)))->fetchAll(); + if (count($r)) { + DBManager::get()->query(sprintf("INSERT INTO tags_objects (object_id, tag_id) VALUES ('%s','%s')", $this->plugin_id, $r[0]['tag_id'])); + } else { + $id = md5(uniqid(time().$this->plugin_id)); + $stmt = DBManager::get()->prepare("INSERT INTO tags (tag_id, tag, owner) VALUES (?,?,?)"); + $stmt->execute(array($id, addslashes($t), $GLOBALS['USER']['user_id'])); + DBManager::get()->query(sprintf("INSERT INTO tags_objects (object_id, tag_id) VALUES ('%s','%s')", $this->plugin_id, $id)); + } + array_push($current_tags, $t); + } + return $this; + } + + public function getTags() { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT tag FROM tags t, tags_objects ta WHERE ta.object_id='%s' AND t.tag_id=ta.tag_id", $this->plugin_id))->fetchAll(); + foreach ($rr as $r) + array_push($ret, stripslashes($r['tag'])); + return $ret; + } + + public function removeTag($t) { + if (trim($t) != '') { + $r = DBManager::get()->query(sprintf("SELECT t.tag_id FROM tags_objects tob, tags t WHERE t.tag_id = tob.tag_id AND LOWER(t.tag) = LOWER('%s')",addslashes($t)))->fetchAll(); + DBManager::get()->query(sprintf("DELETE FROM tags_objects WHERE tag_id='%s' AND object_id='%s'",$r[0]['tag_id'], $this->plugin_id)); + if (count($r) == 1) + DBManager::get()->query(sprintf("DELETE FROM tags WHERE tag_id='%s' AND owner!='root'",$r[0]['tag_id'])); + } + } + + public function getAllScreenshots() { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT screenshot_id FROM screenshots WHERE plugin_id='%s'",$this->plugin_id))->fetchAll(); + foreach ($rr as $r) { + $s = new Screenshot(); + $s->load($r['screenshot_id']); + array_push($ret, $s); + } + return $ret; + } + + public function getTitleScreen() { + $r = DBManager::get()->query(sprintf("SELECT screenshot_id FROM screenshots WHERE plugin_id='%s' AND title_screen=1",$this->plugin_id))->fetchAll(); + if (count($r) == 1) { + $s = new Screenshot(); + $s->load($r[0]['screenshot_id']); + return $s; + } else return FALSE; + } + + public function remove() { + if ($rel = $this->getReleases()) { + foreach ($rel as $r) + $r->remove(); + } + foreach ($this->getAllScreenshots() as $s) + $s->remove(); + DBManager::get()->query(sprintf("DELETE FROM tags_objects WHERE object_id='%s'", $this->plugin_id)); + DBManager::get()->query(sprintf("DELETE FROM ratings WHERE range_id='%s'", $this->plugin_id)); + DBManager::get()->query(sprintf("DELETE FROM comments WHERE range_id='%s'", $this->plugin_id)); + DBManager::get()->query(sprintf("DELETE FROM categories_plugins WHERE plugin_id='%s'", $this->plugin_id)); + DBManager::get()->query(sprintf("DELETE FROM user_plugins WHERE plugin_id='%s'",$this->plugin_id)); + DBManager::get()->query(sprintf("DELETE FROM plugins WHERE plugin_id='%s'", $this->plugin_id)); + } + + public function getUserRatings() { + $db = DBManager::get(); + $summe = 0; + $rr = $db->query(sprintf("SELECT SQL_CACHE ra.rating FROM ratings ra, plugins p, releases r WHERE p.plugin_id='%s' AND r.plugin_id=p.plugin_id AND ra.range_id=r.release_id AND ra.rating IS NOT NULL AND ra.rating!=0",$this->plugin_id))->fetchAll(); + foreach ($rr as $r) { + $summe += $r['rating']; + } + if (count($rr) > 0) + return array('summe'=>$summe, 'schnitt'=>($summe / count($rr)), 'anzahl'=>count($rr)); + else + return FALSE; + } + + public function getLatestRelease() { + $rr = DBManager::get()->query(sprintf("SELECT release_id FROM releases WHERE plugin_id='%s' ORDER BY mkdate ASC LIMIT 1",$this->plugin_id))->fetchAll(); + if (count($rr) == 1) { + $r = new Release(); + $r->load($rr[0]['release_id']); + return $r; + } else + return FALSE; + } +} + +?> diff --git a/classes/Release.class.php b/classes/Release.class.php new file mode 100644 index 0000000..76d6e91 --- /dev/null +++ b/classes/Release.class.php @@ -0,0 +1,267 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Release { + + private $release_id = ""; + private $plugin_id = ""; + private $version = ""; + private $studip_min_version = ""; + private $studip_max_version = ""; + private $file_id = ""; + private $mkdate = 0; + private $user_id = ""; + private $release_type = ""; + private $origin = ""; + private $dependencies = array(); + private $downloads = 0; + private $chdate = 0; + + public function __construct() { + + } + + public function getPluginId() { + return $this->plugin_id; + } + + public function getReleaseId() { + return $this->release_id; + } + + public function getVersion() { + return stripslashes($this->version); + } + + public function getStudipMinVersion() { + return stripslashes($this->studip_min_version); + } + + public function getStudipMaxVersion() { + return stripslashes($this->studip_max_version); + } + + public function getFileId() { + return $this->file_id; + } + + public function getUserId() { + return $this->user_id; + } + + public function getOrigin() { + return stripslashes($this->origin); + } + + public function getChdate() { + return $this->chdate; + } + + public function getAuthor() { + if ($this->release_id) { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT * FROM users WHERE user_id='%s'",$this->user_id))->fetchAll(); + if (count($r)) return $r[0]; + else return FALSE; + } + return FALSE; + } + + public function getFile() { + if ($this->file_id) { + $f = new MFile(); + $f->load($this->file_id); + return $f; + } else return FALSE; + } + + public function getReleaseType() { + return stripslashes($this->release_type); + } + + public function getDownloads() { + return $this->downloads; + } + + public function setPluginId($s) { + $this->plugin_id = $s; + return $this; + } + + public function setReleaseId($s) { + $this->release_id = $s; + return $this; + } + + public function setVersion($s) { + $this->version = $s; + return $this; + } + + public function setStudipMinVersion($s) { + $this->studip_min_version = $s; + return $this; + } + + public function setStudipMaxVersion($s) { + $this->studip_max_version = $s; + return $this; + } + + public function setFileId($s) { + $this->file_id = $s; + return $this; + } + + public function setUserId($s) { + $this->user_id = $s; + return $this; + } + + public function setReleaseType($s) { + $this->release_type = $s; + return $this; + } + + public function setDependencies($s) { + $this->dependencies = $s; + return $this; + } + + public function setOrigin($s) { + $this->origin = $s; + return $this; + } + + public function save() { + $db = DBManager::get(); + if (!$this->release_id) { + $this->release_id = md5(uniqid(time().$this->plugin_id.$this->user_id)); + $this->mkdate = time(); + $stmt = $db->prepare("INSERT INTO releases (release_id, plugin_id, version, studip_min_version, studip_max_version, mkdate, user_id, file_id, release_type, origin) VALUES (?,?,?,?,?,?,?,?,?,?)"); + $stmt->execute(array($this->release_id,$this->plugin_id,addslashes($this->version),addslashes($this->studip_min_version),addslashes($this->studip_max_version),$this->mkdate,$this->user_id,$this->file_id,addslashes($this->release_type),addslashes($this->origin))); + } else { + $stmt = $db->prepare("UPDATE releases SET version=?, studip_min_version=?, studip_max_version=?, file_id=?, release_type=?, origin=?, chdate=UNIX_TIMESTAMP() WHERE release_id=?"); + $stmt->execute(array(addslashes($this->version),addslashes($this->version),addslashes($this->studip_max_version),$this->file_id,addslashes($this->release_type),addslashes($this->origin),$this->release_id)); + } + $db->query(sprintf("DELETE FROM dependencies WHERE release_id='%s'",$this->release_id)); + foreach ($this->dependencies as $d) { + $db->query(sprintf("INSERT INTO dependencies (dependent_id, release_id) VALUES ('%s','%s')",$d, $this->release_id)); + } + } + + public function getReleaseFromFileId($fid) { + $r = DBManager::get()->query(sprintf("SELECT release_id FROM releases WHERE file_id='%s'",$fid))->fetch(PDO::FETCH_NUM); + return $this->load($r[0]); + } + + public function load($id) { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT * FROM releases WHERE release_id='%s'",$id))->fetchAll(); + if (count($r)) { + $this->release_id = $r[0]['release_id']; + $this->version = $r[0]['version']; + $this->studip_min_version = $r[0]['studip_min_version']; + $this->studip_max_version = $r[0]['studip_max_version']; + $this->file_id = $r[0]['file_id']; + $this->plugin_id = $r[0]['plugin_id']; + $this->mkdate = $r[0]['mkdate']; + $this->chdate = $r[0]['chdate']; + $this->user_id = $r[0]['user_id']; + $this->downloads = $r[0]['downloads']; + $this->release_type = $r[0]['release_type']; + $this->origin = $r[0]['origin']; + $rr = $db->query(sprintf("SELECT dependent_id FROM dependencies WHERE release_id='%s'",$this->release_id))->fetchAll(); + foreach ($rr as $d) + array_push($this->dependencies, $d['dependent_id']); + return TRUE; + } else return FALSE; + } + + public function setTags($t) { + if (trim($t) == "") return $this; + $tags = explode(',',$t); + $current_tags = $this->getTags(); + foreach ($tags as $t) { + $t = trim(strtolower($t)); + if ($t == "") continue; + if (in_array($t, $current_tags)) continue; + $r = DBManager::get()->query(sprintf("SELECT * FROM tags WHERE tag='%s'",addslashes($t)))->fetchAll(); + if (count($r)) { + DBManager::get()->query(sprintf("INSERT INTO tags_objects (object_id, tag_id) VALUES ('%s','%s')", $this->release_id, $r[0]['tag_id'])); + } else { + $id = md5(uniqid(time().$this->plugin_id)); + $stmt = DBManager::get()->prepare("INSERT INTO tags (tag_id, tag, owner) VALUES (?,?,?)"); + $stmt->execute(array($id, addslashes($t), $GLOBALS['USER']['user_id'])); + DBManager::get()->query(sprintf("INSERT INTO tags_objects (object_id, tag_id) VALUES ('%s','%s')", $this->release_id, $id)); + } + array_push($current_tags, $t); + } + + return $this; + } + + public function getTags() { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT tag FROM tags t, tags_objects ta WHERE ta.object_id='%s' AND t.tag_id=ta.tag_id", $this->release_id))->fetchAll(); + foreach ($rr as $r) + array_push($ret, stripslashes($r['tag'])); + return $ret; + } + + public function removeTag($t) { + if (trim($t) != '') { + $r = DBManager::get()->query(sprintf("SELECT tag_id FROM tags WHERE LOWER(tag) = LOWER('%s')",addslashes($t)))->fetchAll(); + DBManager::get()->query(sprintf("DELETE FROM tags_objects WHERE tag_id='%s' AND object_id='%s'",$r[0]['tag_id'], $this->release_id)); + if (count($r) == 1) + DBManager::get()->query(sprintf("DELETE FROM tags WHERE tag_id='%s' AND owner!='root'",$r[0]['tag_id'])); + } + } + + public function getDependencies() { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT * FROM dependencies WHERE release_id='%s'",$this->release_id))->fetchAll(); + foreach ($rr as $r) { + $rel = new Release(); + $rel->load($r['dependent_id']); + array_push($ret, $rel); + } + return $ret; + } + + public function remove() { + DBManager::get()->query(sprintf("DELETE FROM tags_objects WHERE object_id='%s'", $this->release_id)); + DBManager::get()->query(sprintf("DELETE FROM file_content WHERE file_id='%s'", $this->file_id)); + DBManager::get()->query(sprintf("DELETE FROM ratings WHERE range_id='%s'", $this->release_id)); + DBManager::get()->query(sprintf("DELETE FROM comments WHERE range_id='%s'", $this->release_id)); + DBManager::get()->query(sprintf("DELETE FROM dependencies WHERE release_id='%s'", $this->release_id)); + DBManager::get()->query(sprintf("DELETE FROM releases WHERE release_id='%s'", $this->release_id)); + @unlink($GLOBALS['DYNAMIC_CONTENT_PATH'] . '/releases/' . $this->file_id . '.zip'); + } + + public function increaseDownloadCounter() { + DBManager::get()->query(sprintf("UPDATE releases SET downloads=downloads+1 WHERE release_id='%s'",$this->release_id)); + } + +} + +?> diff --git a/classes/Screenshot.class.php b/classes/Screenshot.class.php new file mode 100644 index 0000000..05d8368 --- /dev/null +++ b/classes/Screenshot.class.php @@ -0,0 +1,111 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Screenshot { + + private $screenshot_id = ''; + private $plugin_id = ''; + private $mkdate = 0; + private $title_screen = 0; + private $file_id = ''; + private $titel = ''; + + public function __construct() { + + } + + public function getScreenshotId() { + return $this->screenshot_id; + } + + public function getPluginId() { + return $this->plugin_id; + } + + public function getMkdate() { + return $this->mkdate; + } + + public function getTitleScreen() { + return $this->title_screen; + } + + public function getFileId() { + return $this->file_id; + } + + public function getTitel() { + return stripslashes($this->titel); + } + + public function setPluginId($s) { + $this->plugin_id = $s; + return $this; + } + + public function setTitleScreen($s) { + $this->title_screen = $s; + return $this; + } + + public function setFileId($s) { + $this->file_id = $s; + return $this; + } + + public function setTitel($s) { + $this->titel = $s; + return $this; + } + + public function load($id) { + $r = DBManager::get()->query(sprintf("SELECT * FROM screenshots WHERE screenshot_id='%s'",$id))->fetchAll(); + $this->screenshot_id = $r[0]['screenshot_id']; + $this->plugin_id = $r[0]['plugin_id']; + $this->mkdate = $r[0]['mkdate']; + $this->title_screen = $r[0]['title_screen']; + $this->file_id = $r[0]['file_id']; + $this->titel = $r[0]['titel']; + return TRUE; + } + + public function save() { + if (!$this->screenshot_id) { + $this->screenshot_id = md5(uniqid(time())); + $this->mkdate = time(); + $stmt = DBManager::get()->prepare("INSERT INTO screenshots (screenshot_id, plugin_id, mkdate, title_screen, file_id, titel) VALUES (?,?,?,?,?,?)"); + $stmt->execute(array($this->screenshot_id, $this->plugin_id, $this->mkdate, $this->title_screen, $this->file_id, addslashes($this->titel))); + } else { + $stmt = DBManager::get()->prepare("UPDATE screenshots SET title_screen=?, titel=? WHERE screenshot_id=?"); + $stmt->execute(array($this->title_screen, addslashes($this->titel), $this->screenshot_id)); + } + } + + public function remove() { + DBManager::get()->query(sprintf("DELETE FROM screenshots WHERE screenshot_id='%s'",$this->screenshot_id)); + DBManager::get()->query(sprintf("DELETE FROM file_content WHERE file_id='%s'",$this->file_id)); + @unlink($GLOBALS['DYNAMIC_CONTENT_URL'] . '/screenshots/foto_'.$this->file_id.'.jpg'); + @unlink($GLOBALS['DYNAMIC_CONTENT_URL'] . '/screenshots/foto_thumb_'.$this->file_id.'.jpg'); + } +} + +?> diff --git a/classes/Search.class.php b/classes/Search.class.php new file mode 100644 index 0000000..466cd1f --- /dev/null +++ b/classes/Search.class.php @@ -0,0 +1,120 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Search +{ + const CACHE_TIMEOUT = 600; + + private function __construct() {} + + public static function getCachedSearch($id) + { + if(!isset($_SESSION['search_cache'][$id])) + return false; + if(time() - $_SESSION['search_cache'][$id][0] >= self::CACHE_TIMEOUT) + { + unset($_SESSION['search_cache'][$id]); + return false; + } + return $_SESSION['search_cache'][$id][1]; + } + + public static function searchSimple($text, $category_id = FALSE) + { + $ret = array(); + $db = DBManager::get(); + if($catagory_id == FALSE) + { + $stmt = DBManager::get()->prepare("SELECT * FROM plugins WHERE plugin_id IN (SELECT ta.object_id FROM tags t, tags_objects ta WHERE LOWER(t.tag) LIKE LOWER(?)) AND approved=1 ORDER BY name"); + $stmt->execute(array('%'.$txt.'%')); + $rr = $stmt->fetchAll(); + $stmt = DBManager::get()->prepare("SELECT * FROM plugins WHERE UPPER(name) LIKE UPPER(?) AND approved=1 ORDER BY name"); + $stmt->execute(array('%'.$txt.'%')); + $rr2 = $stmt->fetchAll(); + foreach($rr2 as $r) + if(!in_array($r, $rr)) + array_push($rr, $r); + } + else + { + $rr = $db->query(sprintf("SELECT p.* FROM plugins p, categories_plugins cp WHERE p.plugin_id IN (SELECT ta.object_id FROM tags t, tags_objects ta WHERE LOWER(t.tag) LIKE LOWER('%s')) AND cp.plugin_id=p.plugin_id AND cp.category_id='%s' AND p.approved=1 ORDER BY p.name",'%'..addslashes($txt).'%',$catagory_id))->fetchAll(); + $rr2 = $db->query(sprintf("SELECT p.* FROM plugins p, categories_plugins cp WHERE UPPER(p.name) LIKE UPPER('%s') AND cp.plugin_id=p.plugin_id AND cp.category_id='%s' AND p.approved=1 ORDER BY p.name",'%'.$txt.'%',$catagory_id))->fetchAll(); + foreach($rr2 as $r) + if(!in_array($r, $rr)) + array_push($rr, $r); + } + + foreach($rr as $r) + { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + + $id = uniqid(); + if(!isset($_SESSION['search_cache'])) + $_SESSION['search_cache'] = array(); + $_SESSION['search_cache'][$id] = array(time(), $ret); + + return array($id, $ret); + } + + public static function searchExtended($search_items) + { + $ret = array(); + if(count($search_items) == 0) + return $ret; + + $db = DBManager::get(); + $sql = "SELECT p.* FROM plugins p WHERE 1=1 "; + if($search_items['category_id'] != 'all') + $sql .= sprintf(" AND p.plugin_id IN (SELECT cp.plugin_id FROM categories_plugins cp WHERE cp.category_id='%s' AND cp.plugin_id=p.plugin_id)",$search_items['category_id']); + if($search_items['language'] != 'all') + $sql .= sprintf(" AND p.language LIKE '%s'",'%'.$search_items['language'].'%'); + if($search_items['search_txt'] != '') + { + $tmp_sql = sprintf(" LOWER(p.name) LIKE LOWER('%s')",'%'.mysql_escape_String($search_items['search_txt']).'%'); + if($search_items['fulltext'] == 'yes') + { + $tmp_sql .= sprintf(" OR LOWER(p.short_description) LIKE LOWER('%s')",'%'.mysql_escape_String($search_items['search_txt']).'%'); + $tmp_sql .= sprintf(" OR LOWER(p.description) LIKE LOWER('%s')",'%'.mysql_escape_String($search_items['search_txt']).'%'); + } + $sql = $sql . ' AND (' . $tmp_sql . ')'; + } + $sql .= " AND p.approved=1"; + $rr = $db->query($sql)->fetchAll(); + foreach($rr as $r) + { + $p = new Plugin(); + $p->load($r['plugin_id']); + array_push($ret, $p); + } + + $id = uniqid(); + if(!isset($_SESSION['search_cache'])) + $_SESSION['search_cache'] = array(); + $_SESSION['search_cache'][$id] = array(time(), $ret); + + return array($id, $ret); + } +} +?> diff --git a/classes/Session.class.php b/classes/Session.class.php new file mode 100644 index 0000000..a14fb49 --- /dev/null +++ b/classes/Session.class.php @@ -0,0 +1,65 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class Session { + + static private $instance; + + public function __construct() { + + } + + public function get() { + if (is_null(Session::$instance)) { + Session::$instance = new Session(); + } + return Session::$instance; + } + + public function startSession() { + // Session-Cookie expires after 24 hours + session_set_cookie_params(60 * 60 * 24,'/',$GLOBALS['SERVER_NAME']); + session_start(); + if (!is_array($_SESSION['history'])) $_SESSION['history'] = array(); + } + + public function destroySession() { + ob_end_clean(); + session_start(); + session_destroy(); + $GLOBALS['USER'] = FALSE; + } + + public static function saveSessionParams() { + DBManager::get()->query(sprintf("REPLACE INTO session_data SET sid='%s', user_id='%s', lastlogin=UNIX_TIMESTAMP(), fromhost='%s'",$_SESSION['sid'],$_SESSION['user_id'],$_SERVER["REMOTE_ADDR"])); + } + + public static function getSessionParams($user_id, $sid=FALSE) { + if ($sid) + return DBManager::get()->query(sprintf("SELECT * FROM session_data WHERE sid='%s' AND user_id='%s'",$sid,$user_id))->fetchAll(); + else + return DBManager::get()->query(sprintf("SELECT * FROM session_data WHERE user_id='%s' ORDER BY lastlogin DESC LIMIT 1",$user_id))->fetchAll(); + } + +} + +?> diff --git a/classes/StudipAuth.class.php b/classes/StudipAuth.class.php new file mode 100644 index 0000000..1036d86 --- /dev/null +++ b/classes/StudipAuth.class.php @@ -0,0 +1,85 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +ini_set('soap.wsdl_cache_enabled', '0'); +ini_set('soap.wsdl_cache_ttl', '0'); + +class StudipAuth { + + private $client; + + public function __construct() { + $this->client = new SoapClient($GLOBALS['WSDL_ENDPOINT'], + array("uri" => "urn:studip_wsd", //Ein Namespace + "style" => SOAP_RPC, //Art der Handhabung, hier Methodenaufruf (Remote Procedure Call) + "use" => SOAP_ENCODED //Verschlüsselte Übertragung + ) + ); + } + + public function checkUserCredentials($user_name, $password) { + $user_name = base64_encode(CryptMP::encryptPrivate($user_name)); + $password = base64_encode(CryptMP::encryptPrivate($password)); + $confirmed = FALSE; + try { + $confirmed = $this->client->check_user_credentials($GLOBALS['SOAP_API_KEY'],$user_name, $password); + } catch (Exception $e) { + echo 'Exception: ', $e->getMessage(), "\n"; + } + return $confirmed; + } + + public function getUserInformation($user_name) { + $user_name = base64_encode(CryptMP::encryptPrivate($user_name)); + $userinformation = array(); + try { + $userinformation = $this->client->get_user_by_user_name($GLOBALS['SOAP_API_KEY'],$user_name); + } catch (Exception $e) { + echo 'Exception: ', $e->getMessage(), "\n"; + } + return $userinformation; + } + + public function authenticate($user_name, $password) { + if (!$this->checkUserCredentials($user_name, $password)) return FALSE; + + $cryptinformation = unserialize(base64_decode($this->getUserInformation($user_name))); + + if (!count($cryptinformation)) { + return FALSE; + } + + $first_name = trim(CryptMP::decryptPrivate(base64_decode($cryptinformation['first_name']))); + $last_name = trim(CryptMP::decryptPrivate(base64_decode($cryptinformation['last_name']))); + $email = trim(CryptMP::decryptPrivate(base64_decode($cryptinformation['email']))); + + $userinformation = array('first_name'=>$first_name, 'last_name'=>$last_name, 'email'=>$email); + + if (empty($first_name) || empty($last_name) || empty($email)) { + return FALSE; + } + return $userinformation; + } + +} + +?> diff --git a/classes/User.class.php b/classes/User.class.php new file mode 100644 index 0000000..ab0f82a --- /dev/null +++ b/classes/User.class.php @@ -0,0 +1,169 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class User { + + private $user_id = ''; + private $username = ''; + private $vorname = ''; + private $nachname = ''; + private $email = ''; + private $perm = ''; + private $locked = 0; + private $salutation = 'Herr'; + private $url = ''; + private $workplace = ''; + private $auth = 'standard'; + + public function __construct() { + + } + + public function getUserId() { + return $this->user_id; + } + + public function getUsername() { + return stripslashes($this->username); + } + + public function getVorname() { + return stripslashes($this->vorname); + } + + public function getNachname() { + return stripslashes($this->nachname); + } + + public function getEmail() { + return stripslashes($this->email); + } + + public function getPerm() { + return $this->perm; + } + + public function getLocked() { + return $this->locked; + } + + public function getSalutation() { + return $this->salutation; + } + + public function getUrl() { + return stripslashes($this->url); + } + + public function getWorkplace() { + return stripslashes($this->workplace); + } + + public function getAuth() { + return $this->auth; + } + + public function setUserId($s) { + $this->user_id = $s; + return $this; + } + + public function setUsername($s) { + $this->username = $s; + return $this; + } + + public function setVorname($s) { + $this->vorname = $s; + return $this; + } + + public function setNachname($s) { + $this->nachname = $s; + return $this; + } + + public function setEmail($s) { + $this->email = $s; + return $this; + } + + public function setPerm($s) { + $this->perm = $s; + return $this; + } + + public function setLocked($s) { + $this->locked = $s; + return $this; + } + + public function setSalutation($s) { + $this->salutation = $s; + return $this; + } + + public function setUrl($s) { + $this->url = $s; + return $this; + } + + public function setWorkplace($s) { + $this->workplace = $s; + return $this; + } + + public function load($uid) { + $db = DBManager::get(); + $r = $db->query(sprintf("SELECT user_id, username, vorname, nachname, email, perm, locked, salutation, auth FROM users WHERE user_id='%s'",$uid))->fetchAll(); + $this->user_id = $r[0]['user_id']; + $this->username = $r[0]['username']; + $this->vorname = $r[0]['vorname']; + $this->nachname = $r[0]['nachname']; + $this->email = $r[0]['email']; + $this->perm = $r[0]['perm']; + $this->locked = $r[0]['locked']; + $this->salutation = $r[0]['salutation']; + $r = $db->query(sprintf("SELECT * FROM users_info WHERE user_id='%s'",$uid))->fetchAll(); + $this->url = $r[0]['url']; + $this->workplace = $r[0]['workplace']; + $this->auth = $r[0]['auth']; + } + + public function save() { + if (!$this->user_id) { + $this->user_id = md5(uniqid(time())); + $stmt = DBManager::get()->prepare("INSERT INTO users (user_id, username, vorname, nachname, email, perm, locked, mkdate, salutation) VALUES (?,?,?,?,?,?,?,UNIX_TIMESTAMP(),?)"); + $stmt->execute(array($this->user_id,addslashes($this->username),addslashes($this->vorname),addslashes($this->nachname),addslashes($this->email),$this->perm,$this->locked,$this->salutation)); + $stmt = DBManager::get()->prepare("INSERT INTO users_info (user_id, url, workplace) VALUES (?,?,?)"); + $stmt->execute(array($this->user_id, addslashes($this->url), addslashes($this->workplace))); + } else { + $stmt = DBManager::get()->prepare("UPDATE users SET username=?, vorname=?, nachname=?, email=?, perm=?, locked=?, salutation=? WHERE user_id=?"); + $stmt->execute(array(addslashes($this->username),addslashes($this->vorname),addslashes($this->nachname),addslashes($this->email),$this->perm,$this->locked,$this->salutation, $this->user_id)); + $stmt = DBManager::get()->prepare("REPLACE INTO users_info SET user_id=?, url=?, workplace=?"); + $stmt->execute(array($this->user_id, addslashes($this->url), addslashes($this->workplace))); + } + } + +} + +?> diff --git a/classes/UserManagement.class.php b/classes/UserManagement.class.php new file mode 100644 index 0000000..1a037ae --- /dev/null +++ b/classes/UserManagement.class.php @@ -0,0 +1,139 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class UserManagement { + + private $userdata; + static $db; + + public function __construct($uid = FALSE) { + $this->db = DBManager::get(); + $this->userdata = array(); + if ($uid) { + $r = $this->db->query(sprintf("SELECT * FROM users WHERE user_id='%s'",$uid))->fetchAll(); + if (count($r) == 1) { + $this->userdata = $r[0]; + } + } + } + + public function addNewUser($username, $vorname, $nachname, $email, $passwort, $salutation, $confirmation_token, $authplugin='standard') { + $id = md5(uniqid(time().$username)); + $username = strtolower($username); + $stmt = DBManager::get()->prepare("INSERT INTO users (user_id, username, vorname, nachname, email, passwort, salt, confirmation_token, remember_token, email_confirmed, mkdate, salutation, perm, auth) VALUES (?,?,?,?,?,?,?,?,'',0,UNIX_TIMESTAMP(),?,'author',?)"); + $stmt->execute(array($id,addslashes($username),addslashes($vorname),addslashes($nachname),addslashes($email),md5($passwort),'',$confirmation_token,$salutation,$authplugin)); + } + + public static function userAlreadyExists($username) { + $username = strtolower($username); + $r = DBManager::get()->query(sprintf("SELECT * FROM users WHERE username='%s'",mysql_escape_string($username)))->fetchAll(); + return (count($r) ? TRUE : FALSE); + } + + public static function updateUserInformation($username, $userinformation) { + $username = strtolower($username); + $stmt = DBManager::get()->prepare("UPDATE users SET vorname=?, nachname=?, email=? WHERE username=?"); + $stmt->execute(array($userinformation['first_name'], $userinformation['last_name'], $userinformation['email'], $username)); + } + + public function confirmAccount($confirmation_token) { + $r = $this->db->query(sprintf("SELECT * FROM users WHERE confirmation_token='%s'",$confirmation_token))->fetchAll(); + if (count($r)) { + $this->db->query(sprintf("UPDATE users SET email_confirmed=1 WHERE confirmation_token='%s'", $confirmation_token)); + return TRUE; + } else { + return FALSE; + } + } + + public static function getEmailByUserId($uid) { + $r = DBManager::get()->query(sprintf("SELECT email FROM users WHERE user_id='%s'",$uid))->fetch(PDO::FETCH_NUM); + return $r[0]; + } + + public static function getFullnameByUserId($uid) { + $r = DBManager::get()->query(sprintf("SELECT vorname, nachname FROM users WHERE user_id='%s'",$uid))->fetch(PDO::FETCH_NUM); + return $r[0].' '.$r[1]; + } + + public static function getUsernameByUserId($uid) { + $r = DBManager::get()->query(sprintf("SELECT username FROM users WHERE user_id='%s'",$uid))->fetch(PDO::FETCH_NUM); + return $r[0]; + } + + public static function getUserIdByUsername($uname) { + $uname = strtolower($uname); + $r = DBManager::get()->query(sprintf("SELECT user_id FROM users WHERE username='%s'",mysql_escape_string($uname)))->fetch(PDO::FETCH_NUM); + return $r[0]; + } + + public static function getEmailByUsername($username) { + $username = strtolower($username); + $r = DBManager::get()->query(sprintf("SELECT email FROM users WHERE username='%s'",mysql_escape_string($username)))->fetch(PDO::FETCH_NUM); + return $r[0]; + } + + public static function getUserByUsername($username) { + $username = strtolower($username); + $r = DBManager::get()->query(sprintf("SELECT user_id FROM users WHERE username='%s'",mysql_escape_string($username)))->fetchAll(); + $u = new User(); + $u->load($r[0]['user_id']); + return $u; + } + + /** + * generate a secure password of $length characters [a-z0-9] + * + * @access private + * @param integer $length number of characters + * @return string password + */ + public static function generate_password($length = 8) { + mt_srand((double)microtime()*1000000); + for ($i=1;$i<=$length;$i++) { + $temp = mt_rand() % 36; + if ($temp < 10) + $temp += 48; // 0 = chr(48), 9 = chr(57) + else + $temp += 87; // a = chr(97), z = chr(122) + $pass .= chr($temp); + } + return $pass; + } + + public function setPassword($user_id, $new_password) { + DBManager::get()->query(sprintf("UPDATE users SET passwort='%s' WHERE user_id='%s'",md5($new_password),$user_id)); + } + + public static function getUsersByPerm($perm) { + $ret = array(); + $rr = DBManager::get()->query(sprintf("SELECT user_id FROM users WHERE perm='%s'",$perm))->fetchAll(); + foreach ($rr as $r) { + $u = new User(); + $u->load($r['user_id']); + $ret[] = $u; + } + return $ret; + } +} + +?> diff --git a/classes/XmlExporter.class.php b/classes/XmlExporter.class.php new file mode 100644 index 0000000..d303aa3 --- /dev/null +++ b/classes/XmlExporter.class.php @@ -0,0 +1,68 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +class XmlExporter +{ + private function __construct() + { + + } + + public static function generatePluginsXml() + { + $doc = new DomDocument('1.0'); + $plugins = $doc->appendChild($doc->createElement('plugins')); + + $rr = DBManager::get()->query("SELECT plugin_id FROM plugins WHERE approved=1 ORDER BY mkdate DESC")->fetchAll(); + foreach($rr as $r) + { + $p = new Plugin(); + $p->load($r['plugin_id']); + + $releases = $p->getReleases(); + + if($releases !== false) + { + $s = $p->getTitleScreen(); + $plugin = $plugins->appendChild($doc->createElement('plugin')); + $plugin->setAttribute('name', rawurlencode($p->getName())); + $plugin->setAttribute('homepage', rawurlencode($p->getUrl())); + $plugin->setAttribute('description', $p->getDescription()); + if ($s) + $plugin->setAttribute('image', $GLOBALS['BASE_URI'].'?dispatch=download&file_id='.$s->getFileId()); + $plugin->setAttribute('score', 'TODO'); + + foreach($releases as $rel) + { + $release = $plugin->appendChild($doc->createElement('release')); + $release->setAttribute('version', $rel->getVersion()); + $release->setAttribute('studipMinVersion', $rel->getStudipMinVersion()); + $release->setAttribute('studipMaxVersion', $rel->getStudipMaxVersion()); + $release->setAttribute('url', $GLOBALS['BASE_URI'].'?dispatch=download&file_id='.$rel->getFileId()); + } + } + } + + return $doc->saveXML(); + } +} +?> diff --git a/css/basis.css b/css/basis.css new file mode 100644 index 0000000..8833b2c --- /dev/null +++ b/css/basis.css @@ -0,0 +1,443 @@ +body, input, textarea, td, th, blockquote, p, form, ul { + font-family: Arial, Helvetica, sans-serif; + font-size: 10pt; + color: #000000; +} +a { + color:#184273; + text-decoration:none; +} +img { + border:none; +} + +.button { + border-style:solid; border-width:1px; + border-top-color:#cdd; + border-left-color:#ccf; + border-right-color:#bbF; + border-bottom-color:#99b; + vertical-align:middle; +} + +.button:hover { + border-top-color:#f33; + border-left-color:#f00; + border-right-color:#f55; + border-bottom-color:#f55; + cursor:pointer; +} + + +/* --- MessageBoxes --------------------------------------------------------- */ +div.messagebox { + margin: 0px; + margin-top: 5px; + margin-bottom: 5px; + background-repeat: no-repeat; + background-position: 10px 10px; + padding: 15px 15px 15px 55px; + border: 1px solid; + position: relative; + /*font-size: 12pt;*/ + font-size: 14px; + font-weight: bold; + text-align: left; +} + +div.messagebox_buttons { + position: absolute; + right: 3px; + top: 3px; +} + +div.messagebox_details { + font-weight: normal; +} + +div.messagebox_info { + color: #000000; + background-color: #d8e3fc; + background-image: url("../images/icons/icon_info.png"); +} + +div.messagebox_success { + color: #000000; + background-color: #dcf1da; + background-image: url("../images/icons/icon_success.png"); +} + +div.messagebox_error { + color: #000000; + background-color: #ffdddc; + background-image: url("../images/icons/icon_error.png"); +} + +div.messagebox_exception { + color: #ff0400; + background-color: #ffbaba; + background-image: url("../images/icons/icon_exception.png"); +} + +tr.cycle_odd { + background-color: #F2F2F2; +} + +tr.cycle_even { + background-color: #E2E2E2; +} + +tr.cycle_odd:hover { + background-color: #CED8F2; +} + +tr.cycle_even:hover { + background-color: #B7C2E2; +} + +.topic { + /*background-color:#2d4583;*/ + background-color:#4564b1; + color:white; + padding:3px; + font-size:12px; + font-weight:bold; + margin-bottom:5px; +} + +.category_head { + border-bottom:1px solid black; + font-weight:bold; + font-size:12px; + margin-bottom:10px; + padding:3px; + /*background-color:#bdddef;*/ + background-color:#d9dce3; +} + +.steel { + background-image: url('../images/steelblau.jpg'); +} + +.steel1 { + background-color: #FFFFFF; background-image: url('../images/steel1.jpg'); +} + +.steelgraulight { + background-image: url('../images/steelgraulight.jpg'); +} + +.portal_menu_item { + padding-top:2px; + padding-bottom:2px; + padding-left:2px; + width:200px; + min-width:200px; + max-width:200px; + background-color:#cbe4fb; + font-size:12px; + font-weight:bold; + /*border-bottom:1px solid gray;*/ +} + +.portal_menu_item table:hover { + background-color:#89b7ea; +} + +.portal_menu_item_txt { + font-size:12px; + font-weight:bold; + vertical-align:top; + width:178px; + min-width:178px; + max-width:178px; +} + +.screenshot_frame_thumb_img { + position:absolute; + top:20px; + left:0px; + clip:rect(0px, 100px, 100px, 0px); +} + +.screenshot_frame_thumb_img_public { + position:absolute; + top:0px; + left:0px; + clip:rect(0px, 100px, 100px, 0px); +} + +.screenshot_frame_thumb_link { + clear:both; + position:relative; + text-align:center; + max-height:140px; + max-width:100px; + height:140px; + width:100px; +} + +.screenshot_frame_thumb { + text-align:center; + float:left; + overflow:hidden; + padding:1px; + margin:5px; + border-color:gray; + border-width:1px; + border-style:solid; + max-height:140px; + max-width:100px; + height:140px; + width:100px; +} + +.screenshot_frame_thumb_public { + text-align:center; + float:left; + overflow:hidden; + padding:1px; + margin:5px; + border-color:gray; + border-width:1px; + border-style:solid; + max-height:100px; + max-width:100px; + height:100px; + width:100px; +} + +/* Modal Window Stuff */ +#mpmask { + position:absolute; + left:0; + top:0; + z-index:9000; + background-color:#000; + display:none; +} + +#mpboxes .mpwindow { + position:absolute; + left:0; + top:0; + width:440px; + height:200px; + display:none; + z-index:9999; + padding:20px; +} + +#mpboxes #mpdialog { + width:700px; + height:500px; + padding:10px; + background-color:#ffffff; +} + +.release_body { + /*margin-left:15px; */ + background: url(../images/release_item_background.png) repeat-x; + background-position: bottom; + padding:5 0 5 0; + border-bottom:1px solid gray; +} + +/*.logged_in_big_button { + float:left; + margin:10px; + background-color:#f4f7ff; + background-image:url(../images/bigbutton_background.png); + background-repeat:no-repeat; + cursor:pointer; + width:300px; + min-width:300px; + max-width:300px; + height:150px; + min-height:150px; + max-height:150px; + text-align:center; + font-weight:bold; + font-size: 24px; + font-family:verdana, arial, helvetica, sans-serif; +} + +.logged_in_big_button_label { + padding-top:53px; + color:white; +}*/ + +.accordion_toggle { + background: url(../images/icons/16/blue/arr_1right.png) no-repeat; + background-position: 0px 6px; + /*border-top: 1px solid #bbbab5;*/ + cursor: pointer; + /*line-height: 1.6em;*/ + margin: 0px; + padding: 5px 5px 5px 15px; +} + +.accordion_toggle_active { + background: url(../images/icons/16/blue/arr_1down.png) no-repeat; + background-position: 0px 6px; + /*border-top: 1px solid #bbbab5;*/ +} + +.accordion_content { + /*font-size: 9pt;*/ + color: #444444; + overflow: hidden; + padding: 5px 0px 15px; +} + +.accordion_content h4 { + color: #0099FF; + margin: 15px 0px 5px 10px; +} + +.plugin_item { + -moz-border-radius: 5px 5px 5px 5px; + display:block; + /*background-color:#f8faff;*/ + background: url(../images/plugin_item_background.png) repeat-x; + background-color:#ffffff; + background-position: bottom; + /*border:1px solid #ffae00; */ + border:1px solid gray; + /*width:700px; */ + /*min-width:700px; */ + /*max-width:700px; */ + margin-top:5px; + text-align:left; +} + +.plugin_page { + display:block; + /*background-color:#f8faff;*/ + background: url(../images/plugin_item_background.png) repeat-x; + background-position: bottom; + width:340px; + min-width:340px; + max-width:340px; + height:200px; + max-height:200px; + min-height:200px; +} + +.plugin_detail { + -moz-border-radius: 5px 5px 5px 5px; + display:block; + /*background-color:#f8faff;*/ + background: url(../images/plugin_item_background.png) repeat-x; + background-color:#ffffff; + background-position: bottom; + /*border:1px solid #ffae00;*/ + border:1px solid gray; + /*width:700px; + min-width:700px;*/ + /*max-width:700px;*/ + margin-top:5px; + text-align:left; +} + + +.history_container { + padding-left:2px; + padding-top:5px; + padding-bottom:5px; + margin-bottom:5px; + font-family:Verdana,fantasy; + font-weight:normal; + background-color:#f1f1f1; +} + +.comment_item { + border-bottom:solid 1px gray; + margin-bottom:5px; + width:570px; + min-width:570px; + max-width:570px; + /*background-color:#eaf0ff; */ + background: url(../images/comment_item_background.png) repeat-x; + background-position: bottom; + padding:4px; +} + +.profile { + padding-bottom:20px; + display:block; + width:580px; + min-width:580px; +} + +/* page slider */ +.page_holder { + width: 400px; + height: 200px; + position: relative; + margin-left: auto; + margin-right: auto; + text-align: center; +} + +.sliderbutton { + padding: .5em 1em; + text-decoration: none; +} + +.page { + width: 340px; + height: 235px; + padding: 0.4em; + position: relative; + margin-left: auto; + margin-right: auto; + text-align: justify; +} + +.page h3 { + margin: 0; + padding: 0.4em; + text-align: center; +} + +/* Startbildschirm nach dem Login */ +.click_me div { + float: left; + margin: 0.5em; + background : url('../images/steel1.jpg'); + width: 19em; + height: 10em; + min-width: 19em; + max-width: 19em; + padding: 1em; + border: 1px solid #D0D0D0; + overflow: hidden; +} + +.click_me p { + color: #666; +} + +.click_me div:hover p { + color: #000; +} + +.click_me div:hover { + float: left; + margin: 0.5em; + padding: 1em; + border: 1px solid #A4A4A4; + background : url(); + background-color: #F2F2F2; +} + +.click_head { + font-size: 2em; +} + +.download_label { + font-weight:bold; + font-size:10px; + font-family:Arial, Helvetica, sans-serif; +} diff --git a/css/jquery.lightbox-0.5.css b/css/jquery.lightbox-0.5.css new file mode 100644 index 0000000..fea1a99 --- /dev/null +++ b/css/jquery.lightbox-0.5.css @@ -0,0 +1,101 @@ +/** + * jQuery lightBox plugin + * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) + * and adapted to me for use like a plugin from jQuery. + * @name jquery-lightbox-0.5.css + * @author Leandro Vieira Pinho - http://leandrovieira.com + * @version 0.5 + * @date April 11, 2008 + * @category jQuery plugin + * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com) + * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US + * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin + */ +#jquery-overlay { + position: absolute; + top: 0; + left: 0; + z-index: 90; + width: 100%; + height: 500px; +} +#jquery-lightbox { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 100; + text-align: center; + line-height: 0; +} +#jquery-lightbox a img { border: none; } +#lightbox-container-image-box { + position: relative; + background-color: #fff; + width: 250px; + height: 250px; + margin: 0 auto; +} +#lightbox-container-image { padding: 10px; } +#lightbox-loading { + position: absolute; + top: 40%; + left: 0%; + height: 25%; + width: 100%; + text-align: center; + line-height: 0; +} +#lightbox-nav { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 10; +} +#lightbox-container-image-box > #lightbox-nav { left: 0; } +#lightbox-nav a { outline: none;} +#lightbox-nav-btnPrev, #lightbox-nav-btnNext { + width: 49%; + height: 100%; + zoom: 1; + display: block; +} +#lightbox-nav-btnPrev { + left: 0; + float: left; +} +#lightbox-nav-btnNext { + right: 0; + float: right; +} +#lightbox-container-image-data-box { + font: 10px Verdana, Helvetica, sans-serif; + background-color: #fff; + margin: 0 auto; + line-height: 1.4em; + overflow: auto; + width: 100%; + padding: 0 10px 0; +} +#lightbox-container-image-data { + padding: 0 10px; + color: #666; +} +#lightbox-container-image-data #lightbox-image-details { + width: 70%; + float: left; + text-align: left; +} +#lightbox-image-details-caption { font-weight: bold; } +#lightbox-image-details-currentNumber { + display: block; + clear: left; + padding-bottom: 1.0em; +} +#lightbox-secNav-btnClose { + width: 66px; + float: right; + padding-bottom: 0.7em; +} \ No newline at end of file diff --git a/css/jquery/images/ui-anim_basic_16x16.gif b/css/jquery/images/ui-anim_basic_16x16.gif new file mode 100644 index 0000000000000000000000000000000000000000..085ccaecaf5fa5c34bc14cd2c2ed5cbbd8e25dcb GIT binary patch literal 1553 zcma)+TTl~c6vwlh>nb99Af5rT)t{mCEg5urg=A(g z{C|6SPb~9Xage|wB`SrZk2FOMYM!buln2sX?5Y+T78iB(Zu9cS7|LZyZ++}u$^oi1 z_j@S}bW9OzU2R+RMy&~OT>X-oZ98$jq#ogNfJ!BM-42wHGZk*6s2KD}U*IA%epmxb zm}|6BK9YoIF;*xSL!+z@<64lB7->LTW2Vi4ostCA(z&2XniwNIv}fFo-`MbG;)u4G z^p@F!)|9HhZprHd_vXjDoxs6WkK-6P0@lfxnGT>*p(QHoUV=u1FAqb@b%*W=a3{`LsH5k^AvQNL>6fPpy#oU(&MuH(*aEX4b35*} zn4n7)`I2U%=+Z=?BVZQ?vjQFW4gD@~XSOO6b{qu81`4&LFuU2(ilxW+1|ZkNMnWe79C$gs zWT?Ele|HR{JGPe)5BTW>0Ey?-Ls6S#GoV0tbt6ku7B&*0 z;i9QM$W1Rj*rRIdceL)rAOSl+sDe3LkB87<%){;ZdHp6|SNlopDXRx< zxBDF9-lTo&v`8$humFygUij@qgT=Qzhj8{ym2-{Xciwqq_Xwk%=O3B-MNAL_6e`3U zyxwmXex4`g0^1RYw~Dth3av3Dl^AAlpO3mG!nLr#&ZZ7c_wUboI+deC+&%TFjK2Lm z!Y&f1h|T_On%RCV&=4bx`!>(YezqGVhl&QpED?N6GV)HmzJ9&rh$x*i?*@o9#6QI< z5ZI_MRX;0+pY8$`j)eF#TlUyG(eE%E7S!rj;mj^M5vhUicPm zVWQ2z+imFyg}SRABmOBY_@osR!>7Ov!ioK`NB6_Rv}7Ud?35ed5Sb@?yND?kv~RCa wqs^a3Sh>&&L4)!LKI?D2&k@))k(LESaga|C278ChSzn3NWVkcuNoY&{0f?~U_5c6? literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png b/css/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_flat_55_999999_40x100.png b/css/jquery/images/ui-bg_flat_55_999999_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6de7d5af391fdae847bff6a3c0aea46596dc01 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`T) z7#^)sa^eD?IO|R0&uiqZh6adImlC&OVxF{e)AU@RGZ;Kw{an^LB{Ts5 DOb#zJ literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_flat_55_fbec88_40x100.png b/css/jquery/images/ui-bg_flat_55_fbec88_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..47acaadd737478ddb090f47f618810712163317b GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*Fsaj7L$B>N1x91EQ8x$BA993)+ za~~)OO5|O5sDCi_{N8&XlRv*c;OQ6|AR59NN?mFzWBXJVGojypu|S6~c)I$ztaD0e F0syyrGF|`x literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_flat_75_aaaaaa_40x100.png b/css/jquery/images/ui-bg_flat_75_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_flat_75_ffffff_40x100.png b/css/jquery/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_glass_45_0078ae_1x400.png b/css/jquery/images/ui-bg_glass_45_0078ae_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..3dac65068c84bd0ecfff5188f540c182fd169cad GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour2IWy978O6-<~%VY%maDy|{O; z$__{EHiJg4C=rLrLX14cXJ_ZueT>}xS8Rbs*Zrb7;%o`VYKv9Nn5R#(Fe+GLF>CX# lM%%gFCi@DOX>^&(9ns}DIA!Y189<{MJYD@<);T3K0RS}&EUW+k literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_glass_55_f8da4e_1x400.png b/css/jquery/images/ui-bg_glass_55_f8da4e_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..d10719ceafb65e08d54abf1d1a9e99e6efbf04c5 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAGVZ#9R3S1@b*z978O6-(EE2I^-bI^6>xP z(^5hQ-MFK7$6Pq9b%Wzx;?~MIr%jDFYTlkP*famS$O878c@n$1gU)leUoQXoytU6* ztu*-b?n!SO1N%KJ6`yWs3*+AK@cee~ZPt$(j&$ret|9!WMUYu--NKjiz UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_glass_65_ffffff_1x400.png b/css/jquery/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_glass_75_79c9ec_1x400.png b/css/jquery/images/ui-bg_glass_75_79c9ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..d384e425e87199e85d1ecbb34631199473357f01 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq`W;{978O6-=5#d+h8EVeDSkt z;(yT_TG>mMHLzK+IlM6Uw<=GY|5{{$M%R6#>y2zVoZA|l3ncEGnHw#<`@xCLrOmbp g#_<-xB1fggKfmN$(P5D72{e|$)78&qol`;+01;y>g8%>k literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_glass_75_d0e5f5_1x400.png b/css/jquery/images/ui-bg_glass_75_d0e5f5_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9d149b1c61fdee2de5cb342741c243abb9058bb3 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAGVZ#9R3S1u{Kd978O6pI&z4VlotPxp?2+ z_9ElQf7546?+BK3Q+%u|q&R!~TD`8c>Nm?7lq=+T^Fw3At=o;a{QQ?&v0rW43t78u zKLhT~Z`;~2oo9{ezlW>%eD?g@v!}03FhOcY)5-`I-U~CHGCzC3{y9?4*Y0Z~JJ3=F MPgg&ebxsLQ09`{nxc~qF literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_glass_75_dadada_1x400.png b/css/jquery/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_gloss-wave_45_e14f1c_500x100.png b/css/jquery/images/ui-bg_gloss-wave_45_e14f1c_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..b9851ba5d6c20c710571dfd6a67637ce376d456c GIT binary patch literal 3649 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_gloss-wave_50_6eac2c_500x100.png b/css/jquery/images/ui-bg_gloss-wave_50_6eac2c_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..76dac56d2c5b0c1b6735bcd6117f3d10a95a50d7 GIT binary patch literal 4256 zcmcJSc~Fywy2jJm)>C^p6ct1P(?S6aAcY*Dtf?)6f! zRzS7{2oREh5Ykpi2wOxokrGsge`fZCPI&es5dcSMKhH~#U#;qf-@k4ymIW5gBbi@qsUJJmsPD^E1;UJMLG zmY1r*ZBxg5Fb|3!9xa-zdo`#~`-+$^%NbE+L&CU}0iS?gjC$cOyOV z3bD0gf6Y~2b$X_!cI!Yxx>A{4?S)H??z5*iyHh zq8Cdyt6ieXtiD_T`08CU&zov^#K7zHBC{WxmyerP7h6oMf|P@CK1FjP;lSE|2zq;= zc`)-IhdM95gM0Q40HAe8O%DM0_MO?c&C(NId(^!AdvOZSDJ;7OlF|dYVGvXf!&TDH zhHqv{_S#a+(zP>&Sg2I+u%(2Hm%+CELE?=|mh%{w0|<)wd$eHS@BW zzb)U}3}6qGJ+w^UN;PDeR%qk~mm=T_Or{?d#@ASb_n0>*eM9n!bs1ZT2;6lEW(RrD zBE`<^Vx zoJ{%oKNS9$GnR=88ru~Q5+vq-1jgkmb26B_raJ0+?#ZH;2HEXw+wlZPJrfpsn7;z_rtSwug z^#t=!al8?4E9>7Vb7Z?(dmR{A*UbXqdBd_L8qPu*eidH?ub(<3{J4jE=N&vw=w;7VImdd(bL7#lMQC<@kvlqa4 zR;|g+w~897NcJR1H|{EXcke}98ye3AP1z)!*)TWc43afng7AT zKoe=1|7Uda3f*rT8W~~X7cKU=1*JzH_3c}GmP5hhAFpL5Q6v1_8xl|GxuybJaZ_pD z+;8|k6F!Z#Ah&22?nU$>emyF}y}jMd!=#%@sIx0aY{*A+&(h)kA2Iu4=q`Oafe=vE z2l78I#lFGQQuL;r2WiaYDGMz%$b-l48KQ=dv%8lk=IWg;@l$KNKv|_u;=Q)sfed)8 zNv-R7TS1&2n-~XYi^4_)TWi!3q3jI1Q}#+q-ww2Zawn(nD}wk4p;4|ecC8KPty^P; zUBLcmsyr6h4wsI~P8VeJXt}gJo4ko`uGqY!NPrVf2pgzjuT#P`*kW0Il_bMg-bHd8 z99^*dwFheS1E?~wZOaDFB*BSzXT)IXl{(S+N@vW#8Qexg{RVwpTiBusjMfJtYf80E z_CR?z8$Up>ZLugeeapR_UtCq#alTAjAIMBiA`a@yM|H2wl(d8*HUidzn5XG*Eje23 zXS;5e3;^7Dzqf}-f~W#@=N;HEBRK`qJi7@`SCu=OP}^{r5JnAro*Pt7JLeS$bdYQK zhn9Bj9z@7$%)J(|A91T>Ah**+$_#6DQ~Rk{LY97QAh2}SQdNG{+D5-0R#m(>`jVg& z$EFEt)ELRDj6CnD0#;>Ya9M1Q49*@?q*|EJU=D8C_1X>6VzJ4zBupf07!UWlfKy=; zEwAOk$sewG{5lf-xM4HZA|k3GNt1$zgvTLG*{gnuF4Pxx9eaL!tjGf2I06zF&_>_Y zsm2nEM6Gt_2K{K>RF$h`V0#r`gANs$2tUP#w5l66xdnp@O=54L+~8Th!nUD=y{gd4 z|4G;CRNxzL+&`<_pL--Y@-a&t5MX&=%NR_gE73r+oap-Oe49L+EL`KDKw&0#TLksl zkNRbOR`(!z7+02U4nz;0DiMGEA*bkj-z?wyqP5F01~LsjG40w(9sjGD+4%V4q867j z;C>F$>%gM6g)I9K2;Q!##s{jMuad@AHmHroB$EG(Yf^sVv${Cy-BXcb>&-QsPX?jf z&2jtQYw2?JZZU2n&39W(oS)%}3xn8&5?W6(`HoO_yrxofx~z zESKg@BD%rUM3<1(4VPtY`oi`cE;@oSn#mm0$Iha^Gq8s|0>fcNZAAw0UK3Eb+89gA z(BEosif|sUqntaF-${}m?42AV9YE(POW+6Og(hiVB*UzWG$x+L&*enT&k@Ov7W#lY zyjOFc4h9)o@~jxi!7gzzIqGR2kMfwaz*ChhKiQ#tW*hLM4UaxT?DO)yFwY`JK)&k@ z=8PKyD|Vg}3%EY-Ea|Re5-5u=E0i3pSBx-YvFeCk$LNoz)@IH+PRV)GifHPIyAlr- z!}wT`e1DhLKN)1qD0%M=<@ijtY9n+}?+8G5RzhBQVtfJt8R|;_dJKd(IeoXeSkS9G zM|e{Yt7l^>CDSH8(r|M z6vqB8FZqcv^GOQttZr>WO7F~--|{+D9Ni=Lm%2#uBK7&7@1t-}_*|ezWP8#@0U~vHW+C-`+sTy=nHx|{?S&g0BI^O_aT}EU z`D9t%a{wT0`J>O&6M@f zaXswoWG&Y%C>n*>4zRf7R2w33RTXJtY+I`rH9QFN znewBO?2H)ud#-R@Q?f=i{)RBqB?@A~!Ym-h5HbuIocK$@JX#x+{# zk^&5^?TkFM`rl4H{R{ZN&9L5xatHcXI&BYqn*(@tM*sj*Kuq7;a%%W+XbSi%Q7w&H zy>SW%kP~;PTL9qiGDtimLnmP1tG7dyk-tuR$+P6xb!9agiO>6QRK7#9+S8 z>j+x83d6w*R;AcEf7yfAz6rHIGbKoe^!a%LX1r;#sYZ&1XD5IsCbNf|4s!~#$q6a3 zM|U~pN50Dlo^@U4;H|~rG|fuzw>}V(r;uRvhVo1GU%Z9AK&E^6${SBj65h7E8BuC) zK0zqgOrx~&?!~k3;v7Exb34dsAin?H4A)tS*Cs#IoQEl31Aeyd=5{kQZb79!Vt8}7 zSb8noSFl|->MWjyOv;eV%Z4^EU2>sc1#G)`N8=>0xKON`;*89lVCKUi!p1gl*usrH z4EL8O9~8FTFDKtD@Ck1jpFUTvtkP@%=}0%{9S>Ue93A0GgmU={+#`JP{l?LAC#d*_ zgn>uno3qmlnN~H_h+^0*qT%bP?fI(9y52#=0E|WcNI)D~b=np;gqyr#UU;=5ckAhM zbg_<=s;qZFSQgv9Dj$!9PfsMY5pxgl+*?|C%OriBYG8rkG`8bY!gb}Jr)9|*N6q_F zzmE%l&pqY^0*B+Y8OSc|j7TD}i)G?MM|&7$k^}sfrFLAl->rmq`B6Is)h}C|u!-08 zz8-dQDMc_SmYkY=n`Q$Qx~dslh-kcv5ssk71i#L9DWDtuU%j|@&U%cxof>q%Zic=s z3jg<`AS+02!8ofKh&Zh$!dHbTFngBh;(`3D+araR=&}{$KQR!T+4X&_vvrNdYo^C1 z_Rs(eRS&Txh z+1d0CL?S}1{?AJa1Waoe#Y9^Hk4T8C)(H+u&;F1?*eNP0TA{hiX)7yzHTSYuS*2YW zd)9>;g|VWfw!In{^|@pRh_a~xj=C#{F}f$Q0CsUAL};Su=b>8s{=dwGDEOYn4f8f?ZgQBcNif&Ekm zd$=qep&H>U#IZw7nk%Q}2&#E^H4}Cce=QqnT0SsSKHNBzaCb|$XO1}#Bw)YqR^!p= zk4Hmv(PB}t+cyw;)ZuN~6qyReypsNQT=fF-dM;`xzp)xLAm&|wR>a>>)V5fVt)XuC7JvopV${pbC@&olEr?>nFQTyMtr zt`4e4w2lA(097YPI}ZRrWlMPjVS53Hs9(fjYkM{>RDl)}YR#{PI{UAXZZ)e7~Wr)BPK4TRcVqm-}EA=rOqdBHQ7fG}5`;N!#WGTYp3F`bEb2my*vF(>I zKqcn9+(yT|Zo>xNL6U)j@WJ-m|9JBc{X&|g06KY<5Vn-3g!f3!7zIEeDwx{*>rJf?MGbRV3&=hgpu4$Sz=YF`qNtN`$D^h1QdwMxGr% zZ3amx2KVP-^P=*M9Hjn*h$;!RZn7^TdN8I-D@%_o4G@Cv=J?bBDXND0bn~jt$r97v z`wte$jnvS&pZ6PMetmn99+6T9P7(Oj-P$m%4B#~atw`D|}>FjiMd#aasA=AiC!kx=f!;*(7XLHJ;FfclH-IIS2+{z=mLvYTEdt#Y}|;8MFIF zHGfd?g;afd-z(1Bl5m@6k`^rcueYCndy(aRcp#_C+6}fQTXhe`zQ)K`HhX)OaU9xCZ_0{kd zB3o7D{o6=8lfJK*$+0~T+UBP6<0EMGw``EV;9(wBBe^{RlHOt$hMu!u4W7%_MCLo9s-?$$rb)w; zDo_c$xHPv1A-TWmTka<+F!#-PR(N!bZqy5-kymvzt+}*y(v|n7^ZikoLW-T=oswho zY0G;K`#%Tk23+#XV@=VfkYQ&_SaQLOvYw(8OkM!2&4xv}0<*9|t515=TqrAX^Y^8X zhQ=u666u7SkBaJkr!OsKTT^f$0pe-6B?01p*;z(P3vGEi2RoOfK(5EIvkEQyS5vr) z)`6aVPW*sg$c?E?)_mb&;sJOiYsi6k)R}5QaBM{Yt#g?lD}HfVNJ4yN7eXTX57kzY zA&dN6R3?GaQ~5Bv7jEaC%z4i6@sfp^02e2;SQ=;g?9E(ZSZBTSh3rC**wVV2>$@Wc zmCO|s-InBMs}XWmuUZoW2#Ox9%r*Vtrv6%EPC|p5E}>k6+!^UXUvB>YExTrrIP+d0 z@zP{o$yU`2ae$H7ty|oFUm!vNi_Gr`sQ+Mq=H+d4%qVIkI>8)(1%RmZr zFBTjIZk7Ah`yYc2h^?-N^xFi;(uzm&Fc&-11QBVFN zlDzAlF}Xa!IaN;%tl;Y4bCxxq{2D>+x>Q#S+6xL1Lgxy`er;oR)@h6#1*OO=+^Cxk z<}cRUBMX-&8L>yfue%wld&E%zj}Cd41RtLZqr9XT3KN`_PO_`l7JO}*!Hl$rN)MkR zN^stHb6!J*uZ$FXY3yFM*ZT7z`9i`woFRodIsd4LcfJBWamv*MFk=&V4eJFyvPPlb zxEKy|pGcIS5HK2_xH)`uy0?`;K6fgpl0=`_k7hRJi$_-QuUm0dB!ONw*G5D29#ibZ1R? zsGL((=KR|&B3^!dV4`0avoJ7@qiR1DQ~hin`rb-{UwM)g4=xpjG&1RIt84O6;;y;4 zn~?#9?S)IZJ~|vL0HFK<<4Jpzj?)dFa{-yIm!NMZ?8V1Rzc&tN+Q;Pm;sNY&B58(|A}8 zI!;7h)hD5l#{)^z4=&rzKEqOa9pcLIG?_P!tl4}GGSTL3gW%WP$$3l|hW8)|{!1T{jBfHF3gp50 z!s>p`h;Ph?T9tNEIlfUz{r1BO{N%ls(-ojZW%Js#_@VbhJ@_;A1m>0#A1P~u*Q-C0 zZYKFdKl|n0&G*3oAM~=jK7RDUQ1J)#m*z1}FudlR-%M;0rO3v@KZ}%=TIiqx$eRMLP8buA!H{z0{I$a=Y_&JgXnwdW9(26fjVHP#uYm>|0(Tqv_zQk*@iV*s6box`l# zsWn(Z%0l9D(<{@$D;EDKM1Q*Z%!v=>^3OIj93?rVrTpxqnPFH2+KVgU96SxOor-p5 z1z(S_ehrVo8*jCkX|k6d-eY6g(>1=qHn-avlCyf8z~O00j7qTmY>j#WO?=)`{xv^2AxjfI6 zQtwjz+u;O*wyv^NHzftX*P*ZQU-Z zJ!I~SvPUm)V~iTy*cD{R1uKr?VG(j4SL?)9bGz(3bbknGhpOD*>^`F-7tK$IOhv#Q z5IPW%I(RyG^9}D%Wj7Ffdq?(WDxbZ9a%cUT_;39?olYP2-@q^TiA&OMX&RT01)BWm zm6fr?+1NG3VChXc^I*p6Y17!m;YR9PcbcV%WjQ5c(WbD8xpF6fOEmy?nZjM{*TaoB z_N~rgpNpuc8u1g|1nnTiT6HQtH-lR6_JvH88n4yQy2Jck9DKf_b(RZSFo50p3I{^_9#FH@g zg*dDNvGk3SHk&VTv&!)=AqYe}B&9CWHGltuWdHF8BiQRId=K(;*}E{3d7*E2FkEkesoO^80B{+2{mK9Uw%q*xbG{pRMVXVGj1~HTNr{zXVrG9( zi3G+bLwfejR;ze#@i8PDBc0nuug`He#!XI#uZy-V(KS5f?x?*09CH<>pm_7YIr^=UkTNGV^$Y$n zLfakF#U)J_3tWX($pCQE;PP2R0N8UATMa>ew^=`scN6+nANWnJx3&SmaUkZSb6f)F zIdROrXmZ39TE~NPWpHjqDkemjM0u1uxN?8tuj>clzVN9jtj})`45{XDGbeMn9G(T= zfW$vx_-6M;=ZCQt;YhlDIK#7{e_=_Ce=0lnB7fqR^C5<7m10osXnpH8xgQZoPx4x! z*8QM+(2dTlH|6M#y-aUaF6Ub2>`9Y(?^>CU@KtuFHUPSHz?Y= zN~KBusb5TKuyOYt4)aV$D1Nc~v@mxUGWVSi*v88z1v;a+~W9#0SA9^@c{DZ$aV$*c_X+#RTZNoY@{g5Qf# zh_c_jxVKyoZ>8&V!eaa5Nm6fF#cMsfIJ1uV!>DeY8x>~~+A}RM^T~55u-f>Wd9hvf zB{M_f`qrVK`8fr{(Jhp*j(gtMUa^4asgfdeg*Q-5^0CLes&V4o1))@%{CRjzj9avI zB<_4|4ED;`9vIR+q*JYuVl$r(+2wf@7UAz98}}`L%-J1)s7X_!oFNPB{!BX;Sk6@< zeWk$nxvd-0);_Z#W5BI|Gizc#26EMe1UQ)1?2%%b$?3uCmI>c95rZ@`w~pr5qLU!@ z0)09-)UxAJ{6{kP`lExh4l*N)G3c?iSfOV+ory{BEUOTq(S5WD=p26bTY!p~DG< zPt&6{`A%txh~Jp&i>2aqFS!F-E(^9NnO4l_H~OzL(o?i2e5uANR)sWrGTVu0l`Bgr zoEv4d%^g5R%O?p9VL{>F7Y`#5Rv_3mr&Aat2b8(g9UQmS^HqDoEh2cHPS-lnDwq9n zH5?DV_l@S1_kLF}D2?Uy@2?P6pk=Vx0w6{t)Z?gWeLa3~KFiPX;O<(J9 z3%D#iIOXJI@#Rz8t8wSZ{@}9l+2msKoOkt-%E?5<=}13`HynxpTK%3w-wJ(9T%N&w zuzv%89bKYib2CQorv$5iDBEm+n-HaJT1xr7F#s!HWpx=>B?s;zqf(Q#V@`O7IQ7gS zgOQH#bs=X{uiL~~{H#=%xh+jzoH0!_dPp`+yLNdGu#ZSygo+5JEE?EeOA$0+^BbaK{b;J`%m!1&qg zz|7cOe67MWrRf~!$;^!(PFrzjvx+RvBn5P?xxqS-X~z@zY*=yw|LM7y5L+J`JHd}# zRjBxlSw6o=`4|_0TitySxM@+;A$fh0t%Pl9MW*z8`X6fBc>ALeBwXa4Nj$=+iR_gq zzeE=e5hPP5n3>1Sgn3mAY7234*1R8unpr@B^IqZamZ3TpFIihnxkulxHd779l5qQJ=be7arq(~p^oHD2?+zHJpZQp&*tP>7w6`(YkMZEE!Jaf` zW;Jf2V=jxzGMDsSzz;)K3UGFNmEUXxw}`*3{mg7K(WAo|*H0^a=u^Z_KkAXNL*r&w z;38R^p!HjuM~%W0IpNls%%RG;iWmG99Q_65es!941v5(9=g%vpc9AoSf@0Ji%bMUl zpc0Vgw?*>M)_VAtfj^`0 z@#gt$`+XFRaG)5$IWPp;PD?Ear(SBSzaJll!mqsS`8C(BIz+aI)lM~$@a~=1a$?Q@6xFW+ zT4PVB6Ln(~#q&e5FoylfEmqW?ORNQN48O}04GvD=^YRJ}DR$+V9M=Pky4=ba4J&_X z*cBGNfO+B7YEO&6g#Y~CTFevKGddXV-DmkCA2DjD(lhRWq$i9cz6M5 zmiCB~TgQzX*dgiBFuZ#jTnstja=5J&T9}Qs7D(4QRZSS3XqibOj&w~U)tM@8@d%H?k zc?;{gmAK6EPFL0AT2R8gEMg&|eQ^8a@A+)rir_U(k+3Eren^@${`!OqNAe~@>Lp>R?6;iK{d*xYEG@T)zYOW(bHa}|AyG+b zVgt-HuS@VU^;cbeH)c#A^3xD1IA6f%waG(A@3pH3`#?t0CI|))-Q6zQStnfntFdp aVL*6y?dQ$#a|iS;;O*(>QG4d{-~SJ&h4LT( literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/css/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l#Zv1V~E7m1R+}Z$C%HZkh=d#Wzp$Pz8A{XNT literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_0078ae_256x240.png b/css/jquery/images/ui-icons_0078ae_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..5b36315f4b4130cd899894ee9f3bf955a34e3b5c GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_222222_256x240.png b/css/jquery/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..ee039dc096a38a3753f92519546eee94bcfbeffa GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_2e83ff_256x240.png b/css/jquery/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_454545_256x240.png b/css/jquery/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c GIT binary patch literal 4369 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 k*Kv;w;*%(i9W@fAqs5i2wiq literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_469bdd_256x240.png b/css/jquery/images/ui-icons_469bdd_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2cf079add1ca236adeb509698adabbffb08acb GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_888888_256x240.png b/css/jquery/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba708c39172a69e069136bd1309c4322c61f571 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_e0fdff_256x240.png b/css/jquery/images/ui-icons_e0fdff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..6f12e5f10dc988c84898edf8e89b759310210fe0 GIT binary patch literal 5355 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_f5e175_256x240.png b/css/jquery/images/ui-icons_f5e175_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..eda3b8a0514d7da24d66891245b17f0d2fca3d1b GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@f1xOp*Z=?k literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_f7a50d_256x240.png b/css/jquery/images/ui-icons_f7a50d_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..401cac8370b0b88b255a352c0320f804f647f9c4 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/css/jquery/images/ui-icons_fcd113_256x240.png b/css/jquery/images/ui-icons_fcd113_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..26ab2933c84cb5fc5925b3327388fe32c05310d2 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/css/jquery/jquery-ui-1.8.custom.css b/css/jquery/jquery-ui-1.8.custom.css new file mode 100644 index 0000000..67509f6 --- /dev/null +++ b/css/jquery/jquery-ui-1.8.custom.css @@ -0,0 +1,480 @@ +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +*/ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +*/ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; } +.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; } +.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } +.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } +.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Resizable +----------------------------------*/ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion +----------------------------------*/ +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete +----------------------------------*/ +.ui-autocomplete { position: absolute; cursor: default; } +.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* Menu +----------------------------------*/ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + margin: -1px; +} +/* Button +----------------------------------*/ + +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ + + + + + +/* Dialog +----------------------------------*/ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* Slider +----------------------------------*/ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs +----------------------------------*/ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.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:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* Progressbar +----------------------------------*/ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/css/jquery/jquery.ui.accordion.css b/css/jquery/jquery.ui.accordion.css new file mode 100644 index 0000000..acd7f5e --- /dev/null +++ b/css/jquery/jquery.ui.accordion.css @@ -0,0 +1,10 @@ +/* Accordion +----------------------------------*/ +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } \ No newline at end of file diff --git a/css/jquery/jquery.ui.all.css b/css/jquery/jquery.ui.all.css new file mode 100644 index 0000000..6ee0fdf --- /dev/null +++ b/css/jquery/jquery.ui.all.css @@ -0,0 +1,2 @@ +@import "jquery.ui.base.css"; +@import "jquery.ui.theme.css"; diff --git a/css/jquery/jquery.ui.autocomplete.css b/css/jquery/jquery.ui.autocomplete.css new file mode 100644 index 0000000..bdd41e1 --- /dev/null +++ b/css/jquery/jquery.ui.autocomplete.css @@ -0,0 +1,35 @@ +/* Autocomplete +----------------------------------*/ +.ui-autocomplete { position: absolute; cursor: default; } +.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* Menu +----------------------------------*/ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + margin: -1px; +} diff --git a/css/jquery/jquery.ui.base.css b/css/jquery/jquery.ui.base.css new file mode 100644 index 0000000..4011708 --- /dev/null +++ b/css/jquery/jquery.ui.base.css @@ -0,0 +1,10 @@ +@import url("jquery.ui.core.css"); +@import url("jquery.ui.resizable.css"); +@import url("jquery.ui.accordion.css"); +@import url("jquery.ui.autocomplete.css"); +@import url("jquery.ui.button.css"); +@import url("jquery.ui.dialog.css"); +@import url("jquery.ui.slider.css"); +@import url("jquery.ui.tabs.css"); +@import url("jquery.ui.datepicker.css"); +@import url("jquery.ui.progressbar.css"); \ No newline at end of file diff --git a/css/jquery/jquery.ui.button.css b/css/jquery/jquery.ui.button.css new file mode 100644 index 0000000..47777a4 --- /dev/null +++ b/css/jquery/jquery.ui.button.css @@ -0,0 +1,35 @@ +/* Button +----------------------------------*/ + +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ + + + + + diff --git a/css/jquery/jquery.ui.core.css b/css/jquery/jquery.ui.core.css new file mode 100644 index 0000000..b3e8193 --- /dev/null +++ b/css/jquery/jquery.ui.core.css @@ -0,0 +1,37 @@ +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +*/ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/css/jquery/jquery.ui.datepicker.css b/css/jquery/jquery.ui.datepicker.css new file mode 100644 index 0000000..a1116e6 --- /dev/null +++ b/css/jquery/jquery.ui.datepicker.css @@ -0,0 +1,61 @@ +/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.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:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/css/jquery/jquery.ui.dialog.css b/css/jquery/jquery.ui.dialog.css new file mode 100644 index 0000000..f835464 --- /dev/null +++ b/css/jquery/jquery.ui.dialog.css @@ -0,0 +1,13 @@ +/* Dialog +----------------------------------*/ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/css/jquery/jquery.ui.progressbar.css b/css/jquery/jquery.ui.progressbar.css new file mode 100644 index 0000000..bc0939e --- /dev/null +++ b/css/jquery/jquery.ui.progressbar.css @@ -0,0 +1,4 @@ +/* Progressbar +----------------------------------*/ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/css/jquery/jquery.ui.resizable.css b/css/jquery/jquery.ui.resizable.css new file mode 100644 index 0000000..366643b --- /dev/null +++ b/css/jquery/jquery.ui.resizable.css @@ -0,0 +1,13 @@ +/* Resizable +----------------------------------*/ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} \ No newline at end of file diff --git a/css/jquery/jquery.ui.slider.css b/css/jquery/jquery.ui.slider.css new file mode 100644 index 0000000..07c6f4e --- /dev/null +++ b/css/jquery/jquery.ui.slider.css @@ -0,0 +1,17 @@ +/* Slider +----------------------------------*/ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file diff --git a/css/jquery/jquery.ui.tabs.css b/css/jquery/jquery.ui.tabs.css new file mode 100644 index 0000000..729758f --- /dev/null +++ b/css/jquery/jquery.ui.tabs.css @@ -0,0 +1,11 @@ +/* Tabs +----------------------------------*/ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/css/jquery/jquery.ui.theme.css b/css/jquery/jquery.ui.theme.css new file mode 100644 index 0000000..21b17b5 --- /dev/null +++ b/css/jquery/jquery.ui.theme.css @@ -0,0 +1,249 @@ + + +/* +* jQuery UI CSS Framework +* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +*/ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; } +.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; } +.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } +.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } +.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } \ No newline at end of file diff --git a/css/newstyle/style.css b/css/newstyle/style.css new file mode 100644 index 0000000..3c12874 --- /dev/null +++ b/css/newstyle/style.css @@ -0,0 +1,687 @@ +*{ + margin:0; + padding:0; + /*font-size: 12px;*/ + font-weight: normal; + font-style: normal; +} + +i { + font-style: italic; +} + +em { + font-style: italic; +} + +b { + font-weight: bold; +} + +strong { + font-weight: bold; +} + +body{ + background:#ffffff url(../../images/newstyle/sip_bg-top.jpg) repeat-x top; + font:12px/18px Arial,Helvetica,sans-serif; + color:#000000; +} + +#wrapper{ + /*width:1015px;*/ + margin:0 auto; +} +#header{ + height:115px; + overflow:hidden; +} +#logo{ + width:210px; + padding:0; + margin:0 auto; +} +#logo h1{ + background:url(../../images/newstyle/sip_logo.jpg) no-repeat; +} +#logo h1 a{ + height:79px; + display:block; +} +#logo h1 a span{ + display:none; +} +#claim{ + font-size:16px; + font-weight:bold; + font-style:italic; + color:#ffffff; + margin:-12px 0 0 5px; + float:left; +} +#sitemap_search{ + font-size:16px; + font-weight:bold; + color:#ffffff; + margin:-12px 8px 0 0; + vertical-align:middle; + float:right; +} +#sitemap_search a{ + color:#ffffff; + text-decoration:none; +} + +#container { + padding-left:210px; + padding-right:210px; +} + +#container .column { + position: relative; + float: left; +} + +#middle { + width: 100%; +} + +#left { + width: 210px; + right: 210px; + margin-left: -100%; +} + +#right { + width: 210px; + margin-right: -210px; +} + + +#container-home{ + padding:0; +} +#form_search a, #form_search label { + font-size:16px; + font-weight:bold; + color:#fff; + vertical-align:middle; +} + + +/* ============================================================ */ +/* GENERIC COLUMNS */ + +/* can also be used by other blocks to set upper gap */ +.margintop{ + margin:6px 0 0 0; +} +/* ============================================================ */ + +/* ============================================================ */ +/* LEFT COLUMN */ + +#left-column{ + width:210px; + float:left; + #margin:0 5px 0 0 !important; + #margin:0 3px 0 0; +} + +.sblock1-wrap{ + width:210px; + background:url(../../images/newstyle/sip_block-bg.jpg) repeat-y; +} +.sblock1-wrap.end{ + margin:0 !important; + margin:0; +} +.sblock1{ + background:url(../../images/newstyle/sip_block-mystud-top.jpg) no-repeat top; +} +.sblock2{ + background:url(../../images/newstyle/sip_block-top.jpg) no-repeat top; +} +.sblock3{ + background:url(../../images/newstyle/sip_block-std-top.jpg) no-repeat top; +} +.sblock1-bottom{ + background:url(../../images/newstyle/sip_block-bottom.jpg) no-repeat bottom; + padding:20px 15px 20px 22px; +} +.sblock2-bottom{ + background:url(../../images/newstyle/sip_block-bottom.jpg) no-repeat bottom; + padding:15px 15px 15px 22px; +} +.sblock3-bottom{ + background:url(../../images/newstyle/sip_block-bottom.jpg) no-repeat bottom; + padding:15px 15px 15px 22px; +} +.sblock1-bottom h4{ + font-size:18px; + font-weight:bold; + font-style:italic; + color:#ffffff; + margin-left:0px; + margin-top:-5px; +} +.sblock3-bottom h4{ + font-size:18px; + font-weight:bold; + font-style:italic; + color:#1e549e; + margin-left:80px; + margin-top:0px; +} +.sblock1-bottom p{ + margin:0; +} +/* Menu Styles */ +.rblock1 ul{ + list-style:none; + line-height:22px; +} +.rblock1 ul li a{ + font-size:14px; + color:#1e549e; +} +.rblock1 ul li a:hover { + text-decoration:underline; +} +.rblock1 ul li a.active{ + color:#da0121; + background:url(../../images/newstyle/sip_bullet-active.gif) no-repeat; + padding:0 0 0 11px; + margin: 0 0 0 -11px +} +.rblock1 ul ul{ + margin:0 0 0 3px; +} +.rblock1 ul ul li{ + margin:0 0 0 12px; +} +.rblock1 ul ul li a{ + font-size: 12px; +} +.rblock1 ul ul li a.active{ + color:#da0121; + background:url(../../images/newstyle/sip_bullet-active.gif) no-repeat; + margin:0 0 0 -11px; /* IE8 and others */ + padding:0 0 0 11px; +} +.sblock1 ul{ + list-style:none; + line-height:22px; +} +.sblock1 ul li a{ + font-size:14px; + color:#1e549e; +} +.sblock1 ul li a:hover { + text-decoration:underline; +} +.sblock1 ul li a.active{ + color:#da0121; + background:url(../../images/newstyle/sip_bullet-active.gif) no-repeat; + padding:0 0 0 11px; + margin: 0 0 0 -11px +} +.sblock1 ul ul{ + margin:0 0 0 3px; +} +.sblock1 ul ul li{ + margin:0 0 0 12px; +} +.sblock1 ul ul li a{ + font-size: 12px; +} +.sblock1 ul ul li a.active{ + color:#da0121; + background:url(../../images/newstyle/sip_bullet-active.gif) no-repeat; + margin:0 0 0 -11px; /* IE8 and others */ + padding:0 0 0 11px; +} +.sblock2 ul{ + list-style:none; + line-height:22px; +} +.sblock2 ul li a{ + font-size:14px; + color:#1e549e; +} +.sblock2 ul li a:hover { + text-decoration:underline; +} +.sblock2 ul li a.active{ + color:#da0121; + background:url(../../images/newstyle/sip_bullet-active.gif) no-repeat; + padding:0 0 0 11px; + margin: 0 0 0 -11px +} +.sblock2 ul ul{ + margin:0 0 0 3px; +} +.sblock2 ul ul li{ + margin:0 0 0 12px; +} +.sblock2 ul ul li a{ + font-size: 12px; +} +.sblock2 ul ul li a.active{ + color:#da0121; + background:url(../../images/newstyle/sip_bullet-active.gif) no-repeat; + margin:0 0 0 -11px; /* IE8 and others */ + padding:0 0 0 11px; +} +*+html .sblock2 ul ul li a.active{ + margin:0 0 0 0; /* IE7 */ +} +* html .sblock2 ul li a.active{ + margin:0 0 0 0; /* IE6 */ +} +*+html .sblock2 ul li a.active{ + margin:0; /* IE7 */ +} +* html .sblock2 ul ul li a.active{ + margin:0; /* IE6 */ +} +/* ============================================================ */ + + +/* ============================================================ */ +/* MIDDLE COLUMN */ + +#middle-column{ + margin-left:250px; + margin-right:250px; + float:left; +} + +.mblock1-body { + padding:15px; +} + +.mblock1-wrap{ + background:url(../../images/newstyle/sip_content-bg.jpg) repeat-y left; + width:100%; + float:left; +} +.mblock1-padding { + padding: 0 20px; +} +.mblock1-wrap.end{ + margin:0 !important; + margin:0; +} +.mblock1-bottom{ + background:url(../../images/newstyle/sip_content-bottom-left.jpg) no-repeat bottom left; + padding:2px 0px 15px 0px; + width:100%; + float:left; +} + +.mblock1-bottom-right { + background:url(../../images/newstyle/sip_content-bottom-right.jpg) no-repeat bottom left; + float:right; + right:15px; + bottom:0px; + position:absolute; + width:15px; + height:50px; +} + +.mblock1-headline { + height: 78px; + width:100%; +} +.mblock1-bottom h1{ + font-size:24px; + font-weight:bold; + font-style:italic; + color:#1e549e; + margin-left:225px; + line-height:100%; +} +.mblock1-bottom p{ + margin:0 0 10px 0; +} + +.mblock1-bottom ul { + margin-left: 15px; +} + +.mblock1-bottom ul li { +} + +.mblock1-bottom ul li ul { +} + +.mblock1-bottom ul li ul li { +} + +.mblock1-bottom ol { + margin-left: 20px; +} + +.m { + margin:0 0 0 50px; +} +.counter{ + margin:0 0 0 220px; +} +.mblock1{ + float:left; + background:url(../../images/newstyle/sip_content-top-left.jpg) no-repeat top left; + width:100%; + overflow:hidden; +} + +.mblock1-right { + width:15px; + height:80px; + background:url(../../images/newstyle/sip_content-top-right.jpg) no-repeat top; + float:right; + position:absolute; + right:15px; +} + +.mblock1-wrap-right { + width:15px; + height:100%; + background:url(../../images/newstyle/sip_content-bg-right.jpg) repeat-y; + float:right; + position:absolute; + right:15px; + top:0px; +} + + +/* ============================================================ */ + + +/* ============================================================ */ +/* RIGHT COLUMN */ + +#right-column{ + width:210px; + float:right; + x-margin:0 5px 0 0 !important; + x-margin:0 3px 0 0; +} + +.rblock1-wrap{ + width:210px; + background:url(../../images/newstyle/sip_block-bg.jpg) repeat-y; +} +.rblock1-wrap.end{ + margin:0 !important; + margin:0; +} +.rblock1{ + background:url(../../images/newstyle/sip_block-std-top.jpg) no-repeat top; +} +.rblock1-bottom{ + background:url(../../images/newstyle/sip_block-bottom.jpg) no-repeat bottom; + padding:15px 15px 15px 22px; +} +.rblock2-bottom{ +/* background:url(./images/sip_block-news-bottom.jpg) no-repeat bottom; */ + background:url(../../images/newstyle/sip_block-bottom.jpg) no-repeat bottom; + padding:15px 15px 1px 22px; +} +.rblock1-bottom h4{ + font-size:18px; + font-weight:bold; + font-style:italic; + color:#1e549e; + margin-left:65px; + margin-top:0px; + margin-bottom:18px; +} +.rblock1-bottom p{ + margin:0 0 10px 0; +} +.rblock2-bottom h4{ + font-size:18px; + font-weight:bold; + font-style:italic; + color:#1e549e; + margin-left:80px; + margin-top:0px; + margin-bottom:18px; +} +.rblock2-bottom p{ + margin:0 0 10px 0; +} + + + +/* ============================================================ */ + + +/* Form Styles */ + +fieldset{ + border:none; +} +.input{ + border:1px solid #3d6892; + width:180px; +} +.inputimage{ + vertical-align: middle; +} + + +/* Generic Styles Starts */ + +.clearfix:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} +.clearfix { + display: inline-block; +} +html[xmlns] .clearfix { + display: block; +} +* html .clearfix { + height: 1%; +} +a{ + color:#1e549e; + text-decoration:none; + font-weight:bold; +} +a:hover{ + text-decoration:underline; +} +/* h1{font-size:32px;} */ +h2{font-size:26px;} +h3{font-size:23px;} +h4{font-size:16px;} +h5, h6{font-size:14px;} +h1,h2,h3,h4,h5,h6{margin:0 0 15px 0; color:#231f20;font-family:Arial,Helvetica,sans-serif;font-weight:normal;} +h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{ color:#231f20;font-weight:normal;} +img{border:none;} +.clear{clear:both;} +.floatleft{float:left;} +.floatright{float:right;} +.center{text-align:center;} +.text-left{text-align:left;} +.text-right{text-align:right;} +.normal, .normal a{font-weight:normal;} +.textbold{font-weight:bold;} + +/* Ueberschriften Hauptinhalt */ +.mblock1-bottom h2 { + line-height: normal; + font-size: 20px; +} +.mblock1-bottom h3 { + line-height: normal; + font-size: 18px; +} +.mblock1-bottom h4 { + line-height: normal; + /*font-size: 16px;*/ +} + +.hidden { +height:0; +margin:0; +padding:0; +visibility:hidden; +} + +/* FORUM */ +.tx-mmforum-table { +width: 100%; +} + +.tx-mmforum-th { +} + +.tx-mmforum-pi1-newpost-left { +width: 15%; +} + +.tx_mmforum_pi1-label { +} + +.tx-mmforum-pi1-newpost-middle { +width: 85%; +} +/* textarea */ +.tx-mmforum-post { +width: 100% !important; +} + +.bild1 { +width: 204px; +margin-top: 0px; +float: left; +} +.bild2 { +width: 238px; +margin-top: -4px; +float: left; +} +.bild3 { +height: 68px; +} +.bild4 { +width: 100%; +text-align: center; +margin-bottom: -8px; +} + +/* Standortauswaehler */ +#instselect { + vertical-align: middle; + font-size: 11px; + width: 150px; +} + +/* News-Block */ +.rblock2-bottom dl { + margin:0 0 10px 0; +} + +.rblock2-bottom dt { + margin-top: 18px; +} + +.rblock2-bottom dd { +} + +dl.plugins { +} + +dl.plugins dt { + margin-top: 16px; +} + +dl.plugins dd { +} + +.mblock1-bottom .tx-importstudip-pi1 { + display: inline-block; + width: 100%; +} + +.mblockPadding { + padding-top: 55px; +/* margin-top: 6px; */ +} + +.mblockSub-headline { +/* height: 56px; */ +} +.mblockSub-headline h2 { + font-size: 24px !important; + font-weight:bold; + font-style:italic; + color:#1e549e; + margin: -56px 0px 0px 225px !important; + line-height:100%; + height:56px; +} + +/* indexed_search */ +.tx-indexedsearch-searchbox { +} + +.searchbox-tmpl-css { +} + +form.tx-indexedsearch-form { +} + +div.tx-indexedsearch-form { +} + +div.tx-indexedsearch-form label { +} + +div.tx-indexedsearch-form input { +} + +.tx-indexedsearch-searchbox-sword { +} + +div.tx-indexedsearch-search-for { +} + +.tx-indexedsearch-selectbox-type { +} + +.tx-indexedsearch-selectbox-defop { +} + +.tx-indexedsearch-search-submit { +} + +.tx-indexedsearch-searchbox-button { +} + +.tx-indexedsearch-dq-linkmethod { +} + +dl.news_start { + margin-top: 20px; +} + +dl.news_start dt { + font-weight: bold; + font-size: 18px; + color: #666666; + margin: 20px 0px 10px 0px; +} + +dl.news_start dd { +} diff --git a/css/newstyle/style_content.css b/css/newstyle/style_content.css new file mode 100644 index 0000000..2df4f53 --- /dev/null +++ b/css/newstyle/style_content.css @@ -0,0 +1,86 @@ +strong { + font-weight: bold; +} +em { + font-style: italic; +} + +.align-center { + text-align: center; +} + +.align-left { + text-align: left; +} + +.align-justify { + text-align: justify; +} + +.align-right { + text-align: right; +} + +.mblock1-bottom h1, h2, h3, h4 { + line-height: normal; + color: #1E549E; + font-weight: bold; +} + +.mblock1-bottom h1 { + font-size: 24px; +} + +.mblock1-bottom h2 { + margin: 25px 0px 15px 0px; + font-size: 20px; +} + +.mblock1-bottom h3 { + font-size: 15px; + margin: 20px 0px 12px 0px; +} + +.mblock1-bottom h4 { + /*font-size: 12px;*/ + margin: 15px 0px 10px 0px; +} + +sup { + font-size: 0.9em; + vertical-align: top; +} + +sub { + font-size: 0.9em; + vertical-align: bottom; +} + +.mblock1-bottom p { + margin: 10px 0px 10px 0px; +} + +.mblock1-bottom ul { + margin-left: 2.5em; +} + +.mblock1-bottom li ul { + margin-left: 2em; +} + +.mblock1-bottom ul li { +} + +.mblock1-bottom ul li ul { +} + +.mblock1-bottom ul li ul li { +} + +.mblock1-bottom ol { + margin-left: 2.5em; +} + +.mblock1-bottom li ol { + margin-left: 2em; +} diff --git a/css/star_rating.css b/css/star_rating.css new file mode 100644 index 0000000..114b3b3 --- /dev/null +++ b/css/star_rating.css @@ -0,0 +1,147 @@ +.star-rating, +.star-rating a:hover, +.star-rating a:active, +.star-rating a:focus, +.star-rating .current-rating{ + background: url(../images/star.gif) left -1000px repeat-x; +} +.star-rating{ + position:relative; + width:125px; + height:25px; + overflow:hidden; + list-style:none; + margin:0; + padding:0; + background-position: left top; +} +.star-rating li{ + display: inline; +} +.star-rating a, +.star-rating .current-rating{ + position:absolute; + top:0; + left:0; + text-indent:-1000em; + height:25px; + line-height:25px; + outline:none; + overflow:hidden; + border: none; +} +.star-rating a:hover, +.star-rating a:active, +.star-rating a:focus { + background-position: left bottom; +} +.star-rating a.one-star{ + width:20%; + z-index:6; +} +.star-rating a.two-stars{ + width:40%; + z-index:5; +} +.star-rating a.three-stars{ + width:60%; + z-index:4; +} +.star-rating a.four-stars{ + width:80%; + z-index:3; +} +.star-rating a.five-stars{ + width:100%; + z-index:2; +} +.star-rating .current-rating{ + z-index:1; + background-position: left center; +} + +/* for an inline rater */ +.inline-rating{ + display:-moz-inline-block; + display:-moz-inline-box; + display:inline-block; + vertical-align: middle; +} + +/* smaller star */ +.small-star{ + width:50px; + height:10px; +} +.small-star, +.small-star a:hover, +.small-star a:active, +.small-star a:focus, +.small-star .current-rating{ + background-image: url(../images/star_small.gif); + line-height: 10px; + height: 10px; +} + +.star-rated, +/*.star-rated a:hover, +.star-rated a:active, +.star-rated a:focus,*/ +.star-rated .current-rated{ + background: url(../images/star.gif) left -1000px repeat-x; +} +.star-rated{ + position:relative; + width:125px; + height:25px; + overflow:hidden; + list-style:none; + margin:0; + padding:0; + background-position: left top; +} +.star-rated li{ + display: inline; +} +.star-rated a, +.star-rated .current-rated{ + position:absolute; + top:0; + left:0; + text-indent:-1000em; + height:25px; + line-height:25px; + outline:none; + overflow:hidden; + border: none; +} +/*.star-rated a:hover, +.star-rated a:active, +.star-rated a:focus{ + background-position: left bottom; +}*/ +.star-rated a.one-star{ + width:20%; + z-index:6; +} +.star-rated a.two-stars{ + width:40%; + z-index:5; +} +.star-rated a.three-stars{ + width:60%; + z-index:4; +} +.star-rated a.four-stars{ + width:80%; + z-index:3; +} +.star-rated a.five-stars{ + width:100%; + z-index:2; +} +.star-rated .current-rated{ + z-index:1; + background-position: left center; +} + diff --git a/css/tagcloud.css b/css/tagcloud.css new file mode 100644 index 0000000..a804993 --- /dev/null +++ b/css/tagcloud.css @@ -0,0 +1,31 @@ +#cloud { + padding: 5px; + line-height: 1.5em; + text-align: justify; + #margin-top: 5px; + #margin-bottom: 5px; + overflow:hidden; + display:inline-block; + width:170px; + min-width:170px; + max-width:170px; + /*background-color: #FBFBF5;*/ + /*background-image:url(../images/tagcloud.png);*/ +} +#cloud a { + padding: 0px; + font-family: helvetica, arial, sans-serif; +} +#cloud li { display: inline; } + +#cloud a.tag1 { font-size: 0.8em; font-weight: 100; } +#cloud a.tag2 { font-size: 0.9em; font-weight: 200; } +#cloud a.tag3 { font-size: 1.0em; font-weight: 300; } +#cloud a.tag4 { font-size: 1.1em; font-weight: 400; } +#cloud a.tag5 { font-size: 1.3em; font-weight: 500; } +#cloud a.tag6 { font-size: 1.5em; font-weight: 600; } +#cloud a.tag7 { font-size: 1.7em; font-weight: 700; } +#cloud a.tag8 { font-size: 1.9em; font-weight: 800; } +#cloud a.tag9 { font-size: 2.1em; font-weight: 900; } +#cloud a.tag10 { font-size: 2.3em; font-weight: 900; } + diff --git a/css/tags_autocompleter.css b/css/tags_autocompleter.css new file mode 100644 index 0000000..ff2815e --- /dev/null +++ b/css/tags_autocompleter.css @@ -0,0 +1,23 @@ +div.tagsautocomplete { + position:absolute; + width:250px; + background-color:#c8ebff; + border:1px solid #888; + margin:0px; + padding:0px; +} +div.tagsautocomplete ul { + list-style-type:none; + margin:0px; + padding:0px; +} +div.tagsautocomplete ul li.selected { background-color: #a5daf8;} +div.tagsautocomplete ul li { + list-style-type:none; + display:block; + margin:0; + padding:2px; + height:20px; + cursor:pointer; + font-size:12px; +} diff --git a/images/accordion_down.gif b/images/accordion_down.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ccce28306a42af18d28ae0331e96d3a7409751b GIT binary patch literal 856 zcmZ?wbhEHbmEFVoq#Wc(|Sazvmo}!bJz_xeeodRum?k}BNk%w1VHN-s0OkMy6ciOVH#m`zk`ogUFE1$l{n|i4H~;_LJUlf2|K9)q z-$zG2|Nr0!2nYZF;fIHJLqj{<+{5_z+*DLcN=iaFI5ICUD*5@}@bK8bzpSjRn{91k z?d{f5Qc5>BGB!3bARrw%IW#ypGcGPFEiEbb_Ti9_gkfP>tgN19W?oiSPwDB`|Nre{ zV_a2LPd7I+SXfg3|L>@%oqvCOetvp(c5)vd9zZ}oprD*lQBN%`EJ8v-rKP0*|Ns8} z{{8*^{QUg;`}_L(`uX|!`1ttu_xJYp_VxAk^z`)e^YilZ^6~NU@bK{O@9*yJ?(OaE z?Ck98>+9<3>gnm}=;-L@=jZ0;=H=z(W+}qpR+S=OL z+1c3G*w@$B*4Eb5)z#G0)YH?`($dn<(9qA%&(6-y%*@Qo%gf5j%D=zAySux#wzjpk zwXCeHnVFenWMo!WR!B%lJv}`J1_l5C0RR90000000000000000A^8LW004UcEC2ui z02Tlg000M>fO~?2goTEOh>41ejE#Hybf55HpWt z0}ieiHgb+R6b^cM4kUDqZwNTH4Gt+VjVd4}n3NfgJ|5lDv=f<$*m zsQ4&=6d-{JMO-0Aq@m%fp&+iH0SgJ~bP*sB5)yJ~a+O0tgCG*n1jV8v1&Kg{B7%aC zig0(;A&!$Mu7LTC{Wi11uD$jebWYx1TG_jvoq03+{_ktnxea?y2Ql~(C=`lVtiC#u z`|sRz+Pb4LgLXm+?JxU^lB0HISbPW`W>`)>p6dk~- zMn9HD3qh$k{LS^nKmQJ9W*35Tr5gP6@8^~VoSHagKM$Rnh&^wok0kWba}A>WkCU4 zPemwI{_R-Mw|0#^C;XegHx?>%98f4xD!B)52T1@qPW9$lqf`Tt`{;A(_gXu~!%J|E z;z_@doP*!`>oT+>V;XQj{kS^czQ9POtsMo2T8n;1K{;gI;*6f zR}y8E&=4gn%!MCto_f3ly1YBC>JZb;(;Lm{4wdoWt=x+uEQ zBN>bCT0$Ohr5+-E{Pfu>0^VeuQAF_qVct*=p&(r|Ybs%y-^bGLzl2IhUw&T0wYYM< z+kaLWlK_DrB}NAC4H5Qvp%~-8c=c_b!!_4PKrX!J+}*Kos{x`amRYd@g(;e_g9m-s zSot`M8hVsZwLFT?ETE6?RbuXhjF805(I5ci>Te_W!ehOB{fG5n5DZdrxS_0KnN;nh z5+#a*cX*6P$nc=)17%LLHzi)g4~H66-#Q^<63QlrL-sS5Zbb}>yP3J;ZMA6|)E#{)=Z zPYBKUGmjP;dbO-FHu6Y*z9VZSn15cIpBu&zCJ*PM=kwOn?+M9Yt-nQ*WIz;MTD3zN zc+fm#ETpx_=0R6)4%qO9Yc^jn_mH!o2x<0dYPrEstwe45gQO@H6*a8An_t+mO}q2; z#9j82L>^Z$At3j5LdGNz%2912{FHt<_vbfSpC8{Dk9BkjES{b@bDcHdlld`*R_*?u z;2*Myf1^lx*A4~1^7~;1miD4i05?=YK?!$6Nt?ZECna##`!Gi7(o#iC?m_8X%k76% z$Rn=_Ny$5nj7>>n!ZrWhy0{z(lG}~twY9RicuwZ$ZbUOKIZ*%LnXoV9c4eeL%HbN; zbs>@3g^+-U-|p)}Qo*yHsDbiGyCh4!vA!wm%hCxM8_hjV9%P})=@V9nwQc{eZLNV~ znG#7654;YfaW`$nlR>;J8^Q`D(u#q+p&;)DiU*SoSM@qdBt=RP-cfLniX-Ha!iPeM zq)@DA=wHnhiVhJer^}#FbjBkonG}i)DUuu7DVY?CHb@kgBPp2_iu42u`SMkO0RSW5 VVcoP_n)d(z002ovPDHLkV1oON%QgT2 literal 0 HcmV?d00001 diff --git a/images/bigbutton_background.png b/images/bigbutton_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3ade88418388bd7ea37bb46a932ad21872332087 GIT binary patch literal 868 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!r*SX=$=8-jtw2h$#5JNMI6tkVJh3R1!7(L2 zDOJHUH!(dmC^a#qvhZZ84Fdx+o2QFoNX4x;cfIp&JMge2_}%#}uYP-;BKxN0j=c<< zo+VZb>;0(hRw@gzRr}{0q;=uj&+pm|HudYS&kk+4B5{2 z|L?x!9RGZCeuPfn)~K0wbNu7qWZj8AqnA=Iy1MyTL0)a4Wo<;uzKFNq&ZR4-RnMzS z3wwP(?e=kQ_05sH%IyO`zHz_2{j^11f*Ol?+JRol)eKsSQ}!7?ey8yy?2ul|gc#1P zixybE`ORKC@iAbx1I z7ssu@6|zo1BYl7@2abb295Xl_t-1cxaqJcV`u0pqgBM4u_CkRsfu=GM5AKETA`66^ zzRtX$%oV^1RJ@`kpj=JF=|rx3s1sNq!yTx5MGMfGLRt&UL^f$JbY(DB0d5fE_Fka6k;`h!Dpfo$t0MIKF{FxT%5EI`jhZ|0aFeP{yE%!Oqf zOM!~FECxEniGxEigy&&9PZNl(vTgA%u&)}Al!dSuby&wR-bP0l+XkKx-n&T literal 0 HcmV?d00001 diff --git a/images/blauerpfeil_links.png b/images/blauerpfeil_links.png new file mode 100644 index 0000000000000000000000000000000000000000..d1562b7f080aba7545627a446d3fdf637bcf3711 GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0vp^l0bZdgAGW^c6+@936!`-lmzFem6RtIr7}3CwF zKfm`o?bnZ2YaeVh`aVO8!StiYvS+>}3XvJ%>n7-I(GK?zyERo?h5PL(Q6qN+e#OcA z!zMadCHftkcHCk@-zwENqBGSeSjW6h%2His@2q16$G!1QF{_q>KIM*a%r zTHC6e6;zorS6S5YHcsJK;;EaszC&?>QRAIeJC;c?b#gp$JG#7CaYBcK7E93gUJ0ci zs!Wk;6L#gNv`HKT3x4iBBP5+N6D0q+x8iiNgr=~^R0qCV<+#rh3WALxoGJGD_dhZw zPRwQ!WZIZD;mPys3SrX)Izm6It-o?)zHo=CfZ_zbt=#cKV3t^;ie1#V+aI+VC0Snv zhc7Z_5;XPb-?c1GpksyOEtXHNwew{JI|MwM9e%MqdNswN#X+ahX63KV3GG0}7EYC= zP4)@`tJ!`oY5NG0;%MCC^M}nc<~EBG%O%wbQ@HB-fm)FUHd?iATfVmHHl3g3c5_5p{)D86s9@Yh44OR0~&AB o&RcXPN?}4ZSmu%3eI_0TeYe>EFFe@ffQg5})78&qol`;+0No|?SO5S3 literal 0 HcmV?d00001 diff --git a/images/blauerpfeil_rechts.png b/images/blauerpfeil_rechts.png new file mode 100644 index 0000000000000000000000000000000000000000..ba8e7a5fae4cb534c9dcb1af9be393e1b5433901 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^l0bZdgAGW^c6+@936!`-lmzFem6RtIr7}3CjQF0^vz zGZboq$5~VHl{*nst4r3pogQZ~C_R;+;n xQ{r5mI|Dq44$rjF6*2UngCoidR+hj literal 0 HcmV?d00001 diff --git a/images/comment_item_background.png b/images/comment_item_background.png new file mode 100644 index 0000000000000000000000000000000000000000..142a29e76e193face12afee0234c95e3112def1b GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqT!2~1~E1q8mQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiUK@c978H@oe6T}Vo>1N{NaCm-0>?4vLR1=@09pi*OYt| zEEa7%z43VZpQU}9|1il-sS}(3W9sY8PsKh|towfWf5SqD<)&AwgFffKKmSdhiHG4= WoKYQvV!~UX*$kepelF{r5}E)Jw?XOv literal 0 HcmV?d00001 diff --git a/images/download_icon.png b/images/download_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2f80930fd6da8273418cbbf516af89cf94958989 GIT binary patch literal 5013 zcmds*`#;m~`@nTrY!uPvFteF$(F-l4IcBs%lBi{5lrzcsR8FnrOkt)RmQ_fb)5e@i zL_`ttmb08igx(H`K0cp+;`?}fugBxM?#KPSulu^L$9> z@fk}2fj!V&Jt(wqm%u9a;C2VW0Fw(O!2v-@A@yVO*9PzIBCwA!#a}?+P{4n6k0*xv z&o12WO1wZ65GYF#{&O89Ah1us!t63>mxDk;V6YejB6jegl$e;*p+i!lqEh?zi5(P0 zf`vuJ#85C8N;>q@uVu3J%|ecm#rgMB?Fa0tB*acOCFhC<-d2 zFC(WS0aJxaX-dFwlJJvKvMNVln&MC#R7zD+Mjs}lA}y^5g(}L(7$6YVaJaFotOWvL zfJ9m&k;Zaz7BX5w3$uZ#Y7&*BZ1X=@$(U3#kl0yX}P%Z#Kz+mu7N(3B^fI<<_Xgmhc!KvuT z<22OO4Rmyj@puCj6$2d30EIFj5RB1i3w?bHZEa)alZGd>O;D&vdHE1D+6Rqxz+ggf zxJU(sNR)g88tsNcF;S=#G@60IFwy833?>DKV<;*zvDg?4HUlO90IiUVR!GL->gDAN z6ckFZSUwh8aP(-2k`f<-&Bx)26%|`lR7L@yPf4j$UHvZ}zoe=?r7FDWT`_N;)*<-dAW^1P{~q`SAGf9Pdv z%Te&2!R+{02u+YWjG?L+8@hRD)zRW>3~2E*7<@m^kg-2y!6isiLgTE8rYu@TjzbrN ze5I9|=!)0YKK`^S8tCGh(m&k4;2-Wf9k;cEEx8)e+OgWf?F>8JsoSY8ek?V?X&r>Q zWSCbv-1o3iA1M3$vZ3MKEjrocMblK#=LoV#{TxD8R)iEmB^xT-dwuKWmx{VFU;4Qh zwwhzT5!{lpvaT!GE46|#hF0n$rUA3DwPt?3Cl^;+r8abvE)-KNJx9k1)r>f2Vt%)I zJR#rtL(o^7UA)OY?yl#NC+*3eJ*)j8TIvhC?6XK6U8wevvU;N}m|0vr?%3pz|EKl& zTk?&9At(?gn}iW!7jtwE+#Wr^WhMTitG3kid>*s2y`r~2xbr}{+JHT|5B%axOP@x& zo~%TR=|bAd?_?A^jgULty;CSf&QI=)kaxH%o|F9K&BImB{VmrYrL3&ya{(2}T7#y% z64pCQtZxmxC??0#`HS5?-Nxy6eb*u$xc0VpwtcO+T?+TTz89DYYg~HJ)NabF$ZOF* zDzhV5{D;qFH;t6cxp+%*8Kaec@q4eav#VF2wMnx9eTRIMLbR;G9NQ1-J7s07Me63I zYQ6L2p#~qC>dT+JW;^m&**UeHw?z9luDxd4D`)~~SG_ALA2vIV4skVYv~1@qY@@Uq zIPlCG;d^wYb#kpOlUW?9Eb;gk`D{sfS-OhZ(;chdA_kr$txHSUgJoK^nwFh6EN$X+ zD+d?PO6G4p@z1c)3Ql_Fksh{Tdtg>vA&LIgAfcyT&m>6SoSvx2zJKZmueNMsWAS%~ zIMAgj|3=S*7R=!@4%N2V!$ih+D^bg}qyR-!sdtPW$+>G#BW-DeP^xoZ1s7F`{XF#X=PyM(h zhTMB`tXIXFd}xtht5x^2^16FN*~&Lh4N0Gz{T~B0u1?*NE!b!&UE!a;v~BzR?;eFq zcH~Z+h)Oi)&$ehlPH!H0axp1dB7g|Y@VmmR967Dt`Ykt|S5yaH?rX7m#AiD3#Ir8i z&DihJ8=w;JIG4Y&uvB)Ks+P7abQ-VM|9E3+GN=|VV3c<_*anbi3^PQV7bU)s^QS5N zl_8JC?YrIa<(FpN^XI^-v7aeg4Qo-ukD-x}(c97Q+eFvPw@+o;mdq~5J}nimez5GD z*~4j7nQ7%zQDz>?dSeN}@n71iVedNw-axClDW4%RS>>yo)`N~tE2}&2 z^tR6JL|G%XDE7X4SE?t8Lhzpv{fGx_{5aVZ_w_)Vg#IXCd#EZrVdgtg~jNH^r8RpN9@S}7`W(F ztP{3?YiwahQUv;QNVMZFHSwzY|r3>n}^VGgv z=Aql=g7fJI?MOhmtg=-iIbCfh=97>c_GI`g+q+*^&@B3um?X0Pou_Uj1+AAVL^F<% zC#hJdfYW5UN8i90`1H;la6Cu?v=Q6xz&WxcXEp@rA)_8ZPjE0U-q=hr44eMD>pA@; zMJ&?Z3~0ZI<@hkOk9>`%wwU}urhvUjk=FSXt-2yNtjSYdcMu9M>`79+Bu)-F4Hh3T z4MWmBNJ@J)S7|nJ7k`~canttNQv5IT)hw^_QeEszZcWWTVbL{~m0;j8O3`OB4O;`% z9~5zor*AZ+dAyJrYwjMmeR*GN()u!B(|{&IeH(4M^P6jJVLlgr$kag;8(bQ6L3{Rw23T&S0Rts55ZC2iehs@eSJ z#smH0BTGaQ5Z#r}#TF_>T<6SQxpqR(d1dSG5zZvbb$a}dX_x7BUaz_M=ikSDcaKCd z!T*mmW_lx`^PZZquIMp+9Sv@GABC5S+sv-6!ZjHGaS#~#7eGuFtWcvW)OOB~1HVt6 zHJTUSUIhi8jps{aA|BNM%sC4){SMte)XPVW6USwk3VS!#&k zCk_s4dc3JR%-xA)vWdKr%6Z&a+1~hN714=Xr&N-#>@jaq$dHd)<08z`XAZXz_|IHL zKgPChT~}%7sgAFk(hel&mv#h84>^1)(m7cDL)FHl9Bq2;T+hQL(Us#msP3m*y`Rp& zr+83s+-oPSlg{Y+h+qF=<+$2Thgx}P>MyDqFZt({^${#`aQK?8>gWoL(w?|==tIi$ z(8-s~gEcB_!y$H){Mj#eMz_z8`UlOel-Mdw zCneq)jT6iuBzGiaQt>?rh(H#(p`FA07;L^RtraX9Iu;=p* z=0)prlb8pRR}AMk}nfZe#g}uH?mw z>$l8`b4VGrV=JsDpwL|U=^uA4ZwA5M*0sv-ZrRoe)(VE5Jg&e0q2y8h@rR(KBO#~N zmpWJxsK0d~zFo{ss$)ZNsQ;4kpH(zdIdho_{2B?~$sx5T$ew2`&ulso6}0TIEs(z* ztm$U#(8_pp*2r{3Xtf=-4`Sf@jUid>OjP*a?2K#I%6Q*`dBkJ}C@C`lDgmH!NNb~! zQ56B3zcphSN|}MXENpZq*JTNvPYnL^b{loay(i^;KHrcp$Htq5KJtWVh+PwF;Oz~} z-ETyl%mN*}c{&cyc`H&SV;5{O)y%B)`9wPqHV?fCv>9ePn)P-^QtjlHch7HN`U|GqUL zCc|JDGLgwR)?-VY;S;Hr-|B?YKs}Rxcg$Qth#}G2S3oOh3z*rr9OScd7F)2WJZ-`5 zmzVxg2?GkA^t0IHj5CM?i#nv@@jBcww=N{~uo=vZ`$Lz-qjgjW*xTmT31xt+>Xubm zl{E8(18=msbwUh~)g(ANlboJZYLv^KYGyx^R2|-v0ZKEodO2oI{5F4GP%laEeO;jo z@iQ80K4OaOf&BhP{pqPOO=?xn9Pbqsdj<{g)A{3kfbsg-Omhi}>yWyb1mQw|ee?V& zd941$RP*u-gDA>9_NK)VGxf3#p&Y)&Z3SLOt7?MkW%))MbT(|zz%%e4W;bX?Mtsup8>Ab0C zZ#+D~3q%_H<{4RF+`y-?`hn>diN5T^=?G=)W@Aq(N=0%&|ja_S;Kk3 zNM!=E@g^vI^cJads-;q*>B93;8f*1!LDlBBlG7JQ3}pbfqFx&1ynaZr%nLWvZdCJs zcK_*t@3|}wWDZm#bOs*8ufmTEa058cDrh&BcDm;Hv)ijjmEh;RKzV%;bZL0TirHqxV$_eZ!vI`pepvLkkr+seCsm=CJTf2-XsQ>pTk9LEpDqtUb z@7&XlPa172Jeq}*(d&KrHTP;^$v*CfjsikS)YpxR-(E~yO$?UXAwTrHeVv=Mjjejd zV*1E*Lx3X2w>Isp+@uZr%;To z_mwA*;`_3nUCt7hD=M}D1-&{Hq>+xi{wYe+`cj;1aRBE*=H0oQs`G-I)7IBX*nsEk zThKlMAFqQ~>1y7eQ&JtD4@OL0kMSte3@WT-z%Z{R2L zS|1Wq=x3EHQt=b23=g=Bj&8{6yoOH@5xg^w=etYq^#L? zKEYj${!(+@htPCtoX{JeEG{Fr;QuP!)7z=UZ?4I{vv~WT@Bqaob&&84Y?`rg%i_H8 em>6(q;;);jut@K?%kqC46(%I}GsT7uwEqCfg;jt6 literal 0 HcmV?d00001 diff --git a/images/edit_transparent.gif b/images/edit_transparent.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd57fc7f5783f8df2c297128b584db10297eac95 GIT binary patch literal 247 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 ZG25@h_kJ3_{9E>CsgxJc&EgxE9{|yVhC~1W literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/chat.png b/images/icons/16/blue/add/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c7fb442c7bc5e1447fead408882bd87524986e GIT binary patch literal 1164 zcmbVMO=uKX9G|dtF$rl!!6vETW8$He?9O|W*^ilKjk`OU?ur}ZX2HD_GCT8jci7BF zXI|V%1abYKga#CpLeoPF;!VVZrKJi6@t~L-6zriV>7md|J$SH$!1hg&O+`Wu9hiCV z|K9)i`+v{EGe8^|`N};!%bPRgF@alnW;%%{HTIpcC~?hoTu~bj){Dt$_)s;F@8j*w^g?DtFzQQ`z{ErazByxglAmHXcqO_IjyV==sE|gA z-E^v4m;_nd#UK`i5e>#6h@&VP5fX{SFyJAA9OOB~M^Hi<;Ux&c*27Y3u3nXjva)51 zN-4HZh$C@av)PO`N20b{1($2_D9i2#I_KDli?FMU)nj zO1#6d6E-U=JcKcnj`10UWF;-8vl%{?L@`;Qq+X+8t&LNsNF3r+!ZTjU91w@ zE!p-=rvoPIHnF|B?SSl*01B#RSb-drXERzEyT)0pE3R#Vjr>Z+4)!5R!uR8r`6Lv^ zWkC>m>iZ^E|35k7s54y99Pczs=ZJP-u-$HbDr^rAw&=vTbTmHC|NS8ys|R^GUGjgg zthd`^q0e3|9vLcMditil2$mLFndRK=-s$+w(82!f%Ui#FoHHNc=kB5X!}X<4TK^2k zufVaJUw5tSnO^<*t&q4j7=F_7zwPe>-w*xN=x^PrE)Vt|Uuc8Ht9>7=9$)|A=<_ER zAIHOgtS&p#m%Cq8LM{H+uJb=$xV+XY4zJuT_q;gN{qj;SSO07Iqf<-Fv(T6K1{x>i xo=-{bz@l>P&u~%DzPU1A6t3U+&gr_qgqT|R^toU5tvw3<5Bc#4`A%l~;=eP4cjW*8 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/crown.png b/images/icons/16/blue/add/crown.png new file mode 100644 index 0000000000000000000000000000000000000000..48662a17359bd96fc30d805d7e53f2f2cbd5c788 GIT binary patch literal 1119 zcmbVLO-K|`93NRTkpu}W(}R!klHtz0nO%2x23OtP*~z8WbX{p717~NRI_P{f^K4fy zi9rw*Vz;`8hYk^xVI87Fg-UEew;+P<5mZ0)nm*9yc#12gYq{=eVv|9O3&|8#v_ za~(xd^{GB7L)HfGt*s&7)}Px7Sx(?&4i8ylxS%+QifL9Jfs~<)qYP5CnM)T1JxNb)2@6TV*K-Z%5`OY*<+X*zG_su$J zXtqDA&Q7X=M)!1suA)c?41^U>G^R{fEJo=aUXkp*YnBE(CU`PR?>d!B4}gT_AkfJ` zzY0STggAx^1jFHQ2jC$GS;(^-@8`l|fEOVI<%cF}jy5J{B)P0bPEmRSV_Rg|LZQGE z0*vL1vz#CZ9tY3+iG|;tF|ktgn{Hc$K|-$T=r-0Z6L^eD-kQcyns~Y!f?=oAd&H(& zP83NQTU2b8V<2l7UR*oYF3zAoZtQFAW@l`~W{_)5J1VKiSX%{5a(A$hXGpve&pA3N ziZUfx>a>AOoRXq6`NL?sCd!Gh%yHo$4D&D);W&YhLm9?GlEB4+5jj-h*bgf}zB3Vy z2ZSUa=txRdjWtTgLJSV#S1m6l^(J%bKcmz`%rs zEqB7QL1HKf(u%5^-q|b9ZnP3|^vg(-9m@ba`4#nj^pnYd zC)I0L8m?{LX*yZmv3{znt+dtJvXp#(@7Vh2`tqYHnSH%HH@NYvM(b_6o!6+-zeRRjAR!!p5FY-fJVqKA3oZC uchR>v)jRBKN=T>YIo+$?CfR6OyllOwpq-?xVzGQsN!VyBs)pw z(wRwiH_ZFnOp=Wvp$`ts zob#Xaf8T$f@t*Djfx6vw1VIGSol*v`4c@!MkH35Wyrtk}m)ntdvu2-LQfx%T3uZ3@ zXazQWZ*9?*T{lhsD zXa$ix7?z=IB~el99JNt)v^%Gc4yt^CY~K&s$^s_Pk*k2RK4dsTStQqZ1-$o;X%eid zxPv0O?o?jx0ZG$FAWXra3L_9i7>WsT(P(rZU?Br($kGfOWTHZd6(9r~4~ebWg+3u8 zr8aC~NhFJ|YY8-6DwU{Gh%)Vdn&Elg<6zk!)(AQk!&S;b!)dNENXSub&2lx<03M^# zYYw|2i9KBpLAPXilh|-J5`|Mnmlca3=m+_WT;_=YNI1tFD;rWhv5!6*wOF^1vU1Wdtr zMBmlicK4is~9S(+SRb#4Q%4J zSRrX6#Wn4mX%1C8pr>fMrc*R6kj!#GR#eUKWUoBy(MrhHMo=MTn>tv_ub^#VA2Koc z-?$|<2DuK2<9HVPzK$*YpPbRy8QN=(e>F?>2zQ{j-E4gSuwH(Mn)f%?G(GCyIX~|^$38Lh%*b)yM^BB`oX+z^<0^EO72=)C z;M+ekZ~eCYt1qUezWls$_MR(uzqx$%>+B24^?O@~Vo%B!gFB8nt4p6e{&8s=fB#)~ zvWfaz&HK+TPMp6kW;?H*`2MHL?84F=ub+8)@yLOZWA(2Q12@_G7LJ~tn7(p;Qv7D7 z_Wj232S1x`c;m;p#Sc!d^wz%D#c{=p3omtPbzs0wPpxK}l;xj~x6ai%zf8=GP1klm z*YIoj#ntW7cLxvc8Jl|LL?hMGexc>u@JZfZw{pnW!ZPtknqIvzJBune!NAcUo(=5^ uEbYE_+=(5+9m~K{O}&{uaoZRmflS~J@z*@(xSZp literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/file.png b/images/icons/16/blue/add/file.png new file mode 100644 index 0000000000000000000000000000000000000000..0d45978c931ccb351b240c5fb9a39d6209cbe54e GIT binary patch literal 1148 zcmbVMUuYCZ7+)J3T2UztL?VL2UO)=D-I>ka?cJL5+}!5Om0k>&L(i9xz1>M}o9xcI zJMlKb2czJha(%7RzVxBCg-WqL2r8%u3gU~1RaB7BheDweYkW`;&eCu}#vFI>6C1KY~* z`x8Z2^m4dn56=2{WOk@*&Q6+Xi_h)?eWA(-983)mI#X_-h8cc|S7rO?SmeQy3Z2aG z%T85_!yrd|3=#s2n=lDM5(%hRRurWNNDx60N+OctNKtzw6+*D`@XVTTjjJU+zha9? z8NNoTr;1{|UKi@U0`VtAluoB34oQkLjd(EQQX`DJL9E4~c*bP<^#Zo4Qh9@EcijEV-wWJ-;68_hXHMN8CjEBV%4#>1`vU-fiT40vD z_Zx~7nK$ZQ-)2QIrgUOXJJ_WKJ;Spb!LltipHuP(DKbC_r%&EEl-51t@{nx8UwzVCedzBp!#sI&y>+Zed;-?QA z-EGgidv3IYM;kxqei|Fi?~V27VaE?M9T%;y?{FjEKWm6EdMd6;0E?@J$PzSb`@{pK|JYXyXjyDMFd|5&%1b-$3gwl$5a?Q7)ZWH{=eV<_kXQt7jKLXUmT_= zYBaqd<;Z&0eNTGHcWS>QlVt)Yi#Tsqa9y?$C8}l_(P>>?LOCR>&6OQAOHrPRRw&|P z=BA*Sx?gr}{0-eAXo{MhYgn>ULzph3CC!L2KVNS#w5G-o{PwYlW3fWQMlv?-f@v-fIv`s$vFTJzi%#T& zbVgP*!#%s@=|w9cTU$eF$~JYnn_odY!asl!qWRyrB`yMjNhuhNazuL%tNu^USR#gX zo8zx$8C;PLbhn4CPY#E}gA6h;HW`idwM%!&ST)mEmz#<#xR+u+A0z10n|G?v|cG;_Z6p`DMlhw$X%inzv| z^KRdHd8%^Z#n8y-gZ7#CZ;~rlM>dDv$tCZvDcIVzCbEf-oAUt=bz+2iJHvjj?Kxxa NaHo@t((`!f!EZA0S=j&p literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/forum.png b/images/icons/16/blue/add/forum.png new file mode 100644 index 0000000000000000000000000000000000000000..b25f26a1f20a01e4ee20fd60c72abb2c9a60c0bb GIT binary patch literal 1170 zcmbVMPiPcZ7$1!dVhltPTczN0B1B7e=FRNvpBb`UCObQ3r5nR$)jhQ6?9AKjn4Njk znV0ULi)cjI;=vXaQ4|7F;zf|6AePpO7h44jo;(Fl#Y-z*B8b~JNj5DdcyM6mz3;v6 z`~AMZ)1DaL-@j?+CWc}9b7NY8t^?t_v6p^#z3v!v*+H@;GKnjsZup2%EnG$*=NMC{ zfDEho^&>RGFg+E!SR$qT7mA4;&Ion5hT~Cdh8amWJj0wu1eDQ~?WWkj?)}07+e)!V zVtJVNGN@{gwR|+$8ZVlyX;Ze?^ygrtp-=z^5d$=wnj0vM6uX40(0zE!vtUVuOsCjo zr%L$=kik9zF%Cvd7>6J(a6(i{Bof0wgaYKD$O~dbNGMTJfe@@bEM@bpic-+@6)q~J z*eW5O!t?cdovTMV>`(E6EXyH=C`PD8Bxt(CXhhs#u#2Ff!1Qg8*w_UjqEW^(B*jus zmqT#8e0~+!4OS9GQ^q$8j~6(|J5Ctal6F7}=wCP1)DDVG5Ag*Q;2Gbf^{5PXjcM-Q zPZTOrZSYNH8J7cv28#aTMxMjcc-?N=ZH5 z#aPQ$$|j-`6rmauDTb!2vYHtcV@V;VN%TPM+UDGV7_N!Byf)>HN}{I8y82#QCF3K5 zV84iQt=j<;RZMVD#U98^N+55Twj0V}d6uKqkZ*s3EZxTrSjw+rufY$6B>aEenwW%A zR+A)Iq`oiPS|5@#o;t&a&GDaR=^oJz47aPTPleUtK`xybpN>W|nYu>D>OoFZi;d^y zx1CP9XWzoPJ%gp$N3T2Qz~%PI(fji+zMOrGdtdCVy}WqT`SoRS`<^@71`eJrfB)4& z-@_|^-2;ffCnu_x z<~Fe39&La0XYas)L!WHF|Ikn@34B1aHEPgC`ObF)<-{Fv>v=CioRL)P!)bN&EfueV*t2o$2lAs;z0L z!7!{g*)65fdd7RJtI*fKv!|ft986?kpEUsUiUTlFvvL4W8p3>%>_tgWM9E9x+Scn%EeW|a8$c7?!oElS*IP0=Yk4u}9qQpM0fcD-sMd14;a5zdFIF(KH;&ICXcq>T< zR60cCA%5AjR-J?{Tnf09gdwq6w8kz;qkS3=(ivN4KGFnYhQOyo^nnE>uhvly!BaTf&Bp#R_o;D9~~;mNioDfZibs zTJDf#6w0257&gGS^0?9yp8R?m`>m?>=Je(mjb_?kb> zU2e=yukGy3;ZII9z1U8FJ-HCtTz_A!wsbw}7jx6x6861$q^V_Pe&7E+lJDEox@OZFhGAN>y-IFkz`7w9}kj><{~C(;4%VP zOB+H3q!|-qcTpF^1P0AwiIj35%R06~ny(Y8S`I}sOjmc+(ex2SKp730c7lCz?FI`> zBf;*A=3vfAqhYhR=A!;uUs11(=#s&9?*?5}nG#rtXrOA1+MZlZunW90-TTKJ3l>z! zNP=B-s+7xvGkcS);I9>?yF*z*A5Q6%{Qfsa;C>Ip9 zZi`9@c9;-H=D13w5~_ql*d5|{Ns@dHK?qWfpf_O?ts1nwjs}B*Jl!=NVqzQkj9M9w zlLSjWT@1l;a=9g9+p8yvri`m<4#$TeXIXw+3)&tjpnu$0R@*C1IEX7C50AS#t;b+T z159)GenY+@^+x{0HEB__Q3dPc7P3iJNwD-LWSEAmreiA4$09H$Krznql8}NbOp1!c zCnIrHY;Y`xg}frbh$u=KA6YLFR2c-KWAgAf3?aO|77Nb>=Ykq+Y)x{QA$ggZJV?UGmZ`|>4 z94cuwqAKBJJeiT$I@b6S)RC#wOz-8E0r7lbecQR`g=>M{?6ZeIUfq1Q zWpZT`^JH$S#GI7d_1BNq|FoCAGSZG;nBRPRvl)nA|1vxCW#{d`n!#+-tv@Gc*B*W| z760JmXFX!a+%f&!mcx$&W7|GFe<*cn!>jauZ}pRA_>{Tz$5g!S`SLYK6;toeIIJujvidMY6tx8gmAC{z3t>*tRvY9^Rht$AVe**=~fkOZQ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/person.png b/images/icons/16/blue/add/person.png new file mode 100644 index 0000000000000000000000000000000000000000..60d52362fd0f1eeca884116a218682ba2add0557 GIT binary patch literal 1157 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 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/schedule.png b/images/icons/16/blue/add/schedule.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cb69afabe40358fcac51bc67988d40b561351b GIT binary patch literal 1277 zcmbVMTTC2P7@oF~wh&rkyjx@(EH8F<=FDDZXJm!h9oBBbBHi7D)o8*ndtfIp7iMPJ z0ZUVk@4wGLW5Wxj#ZMGt7*-nHDa6rQ=DeGV(6{1`e?+uAZq=o%gw|^1L<3@cT5ExL zR1w=?9E$1g&PiB}VH;ZIWXej#>N!bM+@ho7wiO+rF|4}A)MM;Jfj_tw?19v_j%rvFdQNaPIZG{-&7QaC~#=xkS89|^0&164FJ1{#e= z-X1-JVe4E`flu1AgNf0G^?cc|Z};AVT}{n!!$1W-{?v|>)4hGcqId7~lY7rTxDb7B zEB<=_REWEDci*2s!5^nfORjDwzhTDis=0Y(KR7Tqe--wh-+1ZrnZ++Azb*4OFU|HQ zpS-b0x?=O$S5AG>JX*WiyHLMyKC%3;dVRu~~d93}JV~O>qJab~Qb7K{K_QLG6b)xF%;+_M~eK;^O zt-PAsa(H5@WTtlRtwUhf2VX6nuB|G$eNLJAo*w#jioJbo>mB0Lz7g~Dzwm9Z)gKz0 c-Szio3R6#|j$iXG9(I06(YglV%TROQzm-+NIRF3v literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/search.png b/images/icons/16/blue/add/search.png new file mode 100644 index 0000000000000000000000000000000000000000..e7430e221452acfeaa8e7dae97bb4f7213edd603 GIT binary patch literal 1230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIh(r~ z8k(CJm>U_GSr{5x8aWxb8917`SQ^ zT#Owp99=Dypn6lt2{V15WAs6Z11YhCZcw)?K8q_l$o#p<=@Ru&1#%g6H?cAhG~-ar|^VUu>)aqk6z#j+0gdKi}T)6 zj_U`4_g7E!Rl8)SD0q`~&+S=VQ&;?L@`y^=(tG#Byy+^8>Eb;N;#+_1PuN}1XVYu5 dU;Mvt0)qpC&9Z?0Uk5=YjHj!g%Q~loCII;3o%8?z literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/add/seminar.png b/images/icons/16/blue/add/seminar.png new file mode 100644 index 0000000000000000000000000000000000000000..2170c93ff43d94c06be418fc6c4ed24505d9b7ed GIT binary patch literal 1238 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

    ~XGHA8E~cRLSv zc1r2ze!hHSuKmXC2RoO+l}i`&udCN)R`TzqzkTK1;o0cv>haF@3^P1`>fW(uKYe&^ z=BJa}cXPi%$PEANU6~!k>e1&H?!W&2ZD<>196xPoOWU{(QFK9eUaMV)$vt;T?#*WFCD-fXyx3lYiy*q|WAT&_{DB6Ad^mfSCr|>98&xwA~KMoevs~q3_(SPT5zJzbxAE!dhp!y{Ga>( ze*gD7KAs&5b?@rNFf5cgAgO5Y3szSLdhfpWkA}88{n5NXX&3#f=0Z#?*i#VCnA$W{ zp;o9r`2`%tu(l74T;9(s4+^?%MzugES~DGl#<1c2HAmBDppQ?%X~Rkqzh3-|z>PwZ zIFwL;;-q28I56wN$=Pg9pPkY90y4co#4Ms3Qj z_(=kJdLsnWQH|-6?`@DoluZ2>S?GdKAq3!u9{LlF<`Mq4- zfussOyW;AoipBm-rnWZ}C^lmd6wRH1sEV>y_Tc&lMG+oC&Ks6imTbLZLd(xcNdiHl z1*0IyX;!8vHV#-CFdRkkbPC8oWF(#v}%pp(sh_SPUE9Rh6E7HB*q2BD7k4}+%5*|Xb1_Mx6EUKREo{nJr4l#}n3R}`i7dzS z5=tGPU>ROcq~d@BtjtLSi98{LM%&bQtt-^c!Es}Zkgzd`&_Z={(U_^_%S&iPuV*AN zSNs0N?s;4r8~jb~M5t9KCQfdF_>WsFSHL zJ$B`X^Uqu=oxj)-d${j`HU8|q1M{6{-Q_)}KI!djTpB&{)yWrEN4~|64c)(U-~95J z^ZC!^{$-+w{rPp@Y*$C6*0cE2nT6FoM|!~N0q(CZ;avNIo-@w9-&vd+|KqvH@%cw@ zS0B0h=~!dOZEwA^^6t)owPmquSW`*iNv7hYcq>#1XZAG}2!T>O%% zCs%qF&!~f|z4YBLz5HhWj^B5Sdv|@;)|j}yL;SHmEU$gk9(v;7^U{!9%@b?g09&}g V=fAn@^h)rr%8X{E_fm)F{sq{Et)l<{ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/arr_1down.png b/images/icons/16/blue/arr_1down.png new file mode 100644 index 0000000000000000000000000000000000000000..fac67432a3c36b2636297a643b2c75e15293da47 GIT binary patch literal 1222 zcmaJ>O=uKX9G^8djYcuG1!G0>I>DPe^X6mci)`cUzKkw7>9Sd9z#g2;yzGvf`EcfK zcavTcMbtt;dTCFktv!?!iWT|+h1P&A2p&8X1nI#;pRu0aU`OdQY+mcrEN7TF%JLC@JW&w`!`X%*R* zPR-j@P>vD|3LMP4P=P=ZI6;zCRXqtrC_o;HyddTU)sRF3LePI$YAx{=jT*B0wy0EO zn}oy$&v!Z16Q@P`150A_%s$Q&PkKIlm)+T3?PaU&CqC zPFz~W#mQ}^b~ltM_G2(?Cuw0?Max-Aaqoj|8}Cr({m@xLk=qV%NGhnvQV8eyo?(?$ zOAu5Usv=Z0LD0n#w4kXVT`*C;qJXZj={~Pci(8gVODv$WCLtsiB({(Bw&kqdrj9F6DVZh7R5e{kGj!P+tzr4E85N3achjIur-J{q;*T^n0?cD{U#mJ^$IfU-A4=0H#et; zPJDWOtpxuazIA7Oo%?>@sr89#$D^nIFRQjt{U~?i(V@FnP8CKUbE_9VJ9Kvsc%^#f zC;9Rp_pd%#`{0X-O8)+hz4F5iSpxs8EpLondpPu6?&G(>x$__XeN!L#>o+uZ`L#Db zsh->W`48h`BR`Hlh@Y<>9OKjsr7#=okg?6bZ2bSF)U~oa&Lt~F0@r!0#Clk{kT%t59qCG5i?P+4Aeqc{X zno~g_!37m@*c&SZ5}XjP1A+q}l>-Na#0jBA;)M2qv>^5bh%(M5r9xFLjc5Mx|9$`4 zuQt}6m_0Lp1^_TyU&T$f&*kf$8TNkoj{}!&7ig_b*W)cZa8m*-Ki(v;9=aXUB(A^n z+&5$ifWk*Xt4-U^Q>GV(yqoLr!!TiJ0G5`AiR<+Ug`1=kL}l*Q=U;Fz@XOpYB?mc4 zm2`vEQA*ZFYb|fo^9-L`z66(sCL;(5b>T4Fjxuvt=El4xJLlH|2gfS3SLW_G)pi=N z8m9!7cvSR|il8d;qO53|wg@F8A^}N)C>2G`lqC}(IC(f`E%mp|CblQGm{jJvlqRMi z3$uD@2=52JX;(E{6g35D z5>jiov=rS|ryR#&Yhq2;QOzPpcjT2a1FG0ukf+&~sYO|PFw3wv9^TfB) zIE3TGo53;m?b`q1R%FYTO1P@a7)vFYn_>IqUbC<0?`sRzhiTKr(yr0SI)+_f~&jycX;Jvuy^IYeK@+bcYWoPyBgpA^}-LJ{^|9Lg{1or z*njQr*)QL{aDL{&-{yC#azO#YMppdn><7Wx{<%N#*QZ4A6KKG<9)F;B`zx?8dh(r% za~62-X5rkm-PzOg(Ms$5&+O=uid9G|$fn5K~^dZ;3OPE;(oGjC>R=ZkEU*?l|hf|D+rMfcd3nV0O4%)IH$ zTX&OF?Lk)bQo(~C7jIHZ4vJ6_R0gz8sBVpV~~)6H}C!5{C~gy z_q^9!J~w;f`4fU5%r?%W7T@Rc_2hB>K7D@=^X(L?ci0MDV||vtAP9vo!*+*tyf+@j4ifBd5C&GsdKg#4d*6O9f-tCvZWqY~pZ*TZkATFK-3j>=IM1)~5h&JQQ9#q5;ug%Z-wJd^>3friNkDcmx zO;DpL0c8mmeW*jAE0R*u48wRGs8E42RAogiDu!KBZ3w~m5xKQAShHKm9oynkMeH(` z*s|R3_oaSGqUpMJo^H7K8*1uqJA$TF>9cT$RSb?2DV!>TtzW7 zXsA#(6~$7k(1nhUEXC1GSD$bkhOH}g(}eZ9r9n+mkZT%HGf~yhkj|IuOt6hOV>tH7 z#BRv#jD`nteKa6uZuQrc~M~g@rzD)u*r4bk< z-VP73@7Dhpw^njowTx(<$K?6DM!R^(DdwYw8S1v#O z>C`pp>*=Lyr-v`nd*OFWA5JxI-T(a8nP%O>Em#9Cs6~jI9*|4WxC48Bf3j#D4yWzt*&M@@f)kE>RkZN`TZC`?c{}f6RVa z+#aTEz@&|FM~DN61Dtl)l>-~{l9&y zx%ArfiJ21&!%R2outoP%`8qyH-{&6fA-bI*iz{R~S|fdwV8-&I4rUtxTE{JnysazW z;8}(#-t*flWW~8;x>3NRT!+tsn4%eGc0P-dyMYPY!Rvll;r{yaD~|QO3in3Y0Zv@Q zUBAAa;N|V5w!6LI8Xh-4$IfOZB?vG zlwh{ZgOUqWz^WoI%8I6Gud)&lfdC{yluDvz%905HJ9;>3E%DaO7PLpUs8r#)gv6#G z^!t6jFY{5dE{KL<(qHaM4K>jdjSqf16DW+;XU6o?V4tbqNV^% z0;(>GhExSMuvBP>mZID0nBy=k)N6`tTUA2=iYP)`*MOqKs-{4dF54Po8(~UN=;EyE#AZj}aC22N8#~ZV4ST@9ec*I-;L7pw-TP?EJI0H(z{VaOK0Z zpFC_`JO_W?{r=#e|m6v_oNDzANYx51)anH>L*Y*e`p(39KRSXrM6Hi!shP8 zn6yI#SJYIC$^=o0%zrB4x<57sio({SV`bWnfw&HnAFKr(G= zC76X;apLe293qI|DI=FhdG$F_x6QET>x3JogV6*rw7cPGdIch~0856Ipl*M0mLiQ} zg4!2Vf$F4S+1NAb!m-IrPM@skLXq123^~*gF@Xt@MmEf<<%x|1)#4TL*}tYKvZaD5 z3F@9xd3BUb*)AlbVGzFGg4q0J8m1*qU1$7qha` zwuPkxRYu4WX}VsohwG8B?Urap5CortWkXma!4J1YlLa8YkMdQ|8ss*elIuS zKspOOyXNY+isL&snA+Nquh@=3R5iB(aTOJ<>cQ3rRTZDd&Ks6im2JIdLJOtk1cf2t zqEQr;6t6H0&jFqVu{gsBY!WCyipc^aad9Qq;n)ltV;CR{EF*A$V;EV9^MH%XNuHBq zcqvi`o3=cpSvu_4HL%?_7Ho+XQ!dny?dEK|+G(iKvW;x7Y&&FXEJ~`HZdktTR~yHK zqm`j+ya8ll?Q;)a~nYQEzjmXwkaiH{3{ zj8i8>`Iw+YlN^WxUWv;TjXk0LM%&PMoh#hU{&9Vbu&_Re(86_d@tD1H^x_;I(VJ;m z$~CS{9b4#I1id4x(}7d>*SCE%5Iom)tGoAHGq7#PD$zAunEGvbVCDGL#ZTV+`{1tq zdw*D)J%4uo{NX2>w|>5I$NjbXn|nC^*N*Qq{eOISW#Hx;X9nN> z3^6usxnig8%>k literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/arr_2left.png b/images/icons/16/blue/arr_2left.png new file mode 100644 index 0000000000000000000000000000000000000000..e82200a9f1c54198b2bed2e85e222f731144fec7 GIT binary patch literal 1235 zcmaJ>O>Em#9Ctr9x{hiUn$QXoxGwAfi~a04{!&BZ(6Gp-Gz<5|?S(X=sPt5Kx}8q*SP?rRVql&;Q@= z|LqHFtEXqCpPHs9YNoObt7M-|*VJM1e)i#xMYcIyuH*HfiF;OrDBTGfh^}~63ssTj zY`%USEmG9P*KVzj>*k7P2OevsI&9*F1Wi$kOG#+i8wk@4)N=hi^Wf_D4DC93=H;9T z%&>&o?($ZI*0)w`_SS~2I?U2b^kSkB0uNz}PP~pEYe}9N@M`3oUULjRP{A8{=8;o% zbB!(q5u$S}$k;#vw8XP~R+MG=6fFQAa6sUAA;ZgBR?q;ThYv%nMNU(zLStx)NO`7> zaj0=zuh(OHSvH7T9IvWs${`3DqLGO=eQYHeKVBFyKor}N8)7%`>6FoG1YMkGh^LQ2 z@WQIwYU6m9+>eLJB5C6iE97_$r|)lw^bF zWf8~%kQAO*g(5J3EO zMkBi}u{*@_2V%8Sge)9HwIJw>8fvW_;2>@XAzfO}(WYg)ek!NcCNYs{A&T5LkYhxF zM-LLOx%=2R%KwX7%<6`agC!*kp^(cmL#(qWXWcGwTmn*2FJ^UFQB_D%r{-iyHF8A} zC_pw8$Z*6HE^V|ujW@a?-JBkG$A}2KgNS@mw}_0{wM(x(Lq_yU1?sirx5i&PJ4+MK z_sciGeDc$8so4jQ-8owL?A?f;wD?;JXnh));ziI3*N&vfpgKE9HOKNiL>Uh01_ zclgg&rrPIk|3kfh?^xmfPw=gKGxfVaZ0puFc%fN8@xkYFljGL* zrrf=?aP_?-zn_68&OOmw`E~sK@zN*Z+wAuI^e_Ft`~K7x-N-s)7vCIv;hoO%{5SQ2 pO>Em#9CsG2YO4)86~@M8o(F|hP5kWmBlengj$chO)m@YZ(c@hEHL+TM)P5mp z4=AfTR3?PDZfBSfLIdrv3y4Xqmrd#<1e0JAh%*-i6GBLn%5#>KYN~4K`Mv-1|M&ZU z`-95tTStdq9i}MiXt@NdWFJY^-~f4_da`4Y?IfO_$8*6VZdnncG$&X%*qq^R_5w>FRG%^B4WysVYzWZPay&=fT})ebFt31NBx)m^{9{PFc&hIX9-^Nwf& zGt^PTEv-dpZf&+^uPxb%!%Us0C)+9^@DR4>wzurZYP-O6c~x>wu33ies^Fyp^USGv zvqI}ZglI7fGB%I^Epb^cC&;oqLGyqEEZ|v=&v3Gu<5d9Y-op@Uk+Y~)q0zHNqyp2x zI8<4-)oNv1xoi;CSx!-ugoEcZL?aWg`q*k`{P;|t0ixKB+z`8gPbZAlLeRtohIslc z1TU<*^#+c2$^E#OERr_1ZG|kC1#HySN#g6HO!Hub=k038xQhOFeqa8$wi+U~isGOd z*`$h#XZDyn*ifR_i$OK5XbF)j8rE`*x*tqay+oXMeQOy8cGE*XF2e#tAX&$CR6~~y zj*|r-^FYdToWd7@0W=9JoF?QAsn4+=R#$ik052&55I7DRc^L?KSd;}Qk!5IoY}t>o z<=d!l*Clp)Sn)utsz=DeK~xKZ<$gm|8UYUCMiA2aoJgCN?fQwFRGY*^qJ=1O-$jlQ z1s>f^yz1^_-!~r#>IJ*Lm-? z^S4hARJK9q(a6}u>}colQ)+Yc`-v^EG4y*K>z9Y+5q@K6ymaUEOlh6g53RhpQ$9_CAoEy6+-20|;>)*5hULJJcKUvwl`SY&f4yJUt6<6)&&<2h=@^#sB~S literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/arr_2up.png b/images/icons/16/blue/arr_2up.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0c4f86656157039e712640a723d6c33940fe3e GIT binary patch literal 1273 zcmaJ>TWB0r7@j0{O_MCGP@*k}lZi-avpZ*IXJ>YXY_pfMV-}q>Y!;h`f}Nc?n;nz6 zICIwBM9^)KExxoq2ukcj&{hh?J_L$4#DJyL2ZcN;2&FzKeNhNhK{1}$?#3V?182_p z&-~x_-{cUX^V*Aw;o5OM)QLB3kDw`Pa;oX+#v;OW1ua-kn)&U^uNm4h z)6AKq1~e~^YS#3MkLFfp%Ero~A)Cz9DSEQ05CR)voo?DoPM|c?Oovw?=kS_k=#C0r zOf!$1n%8FOyz3)683!=~h=3NkIF}G4Nt&Q}zyTKUEXT(EQmWYF*bAGNc?bYkkOd%c98^;h5K=HF2~Z?U z&GxWGC&0R6pq^ce*zIEBzE~yiBOSYb*>#tC4K-VHu^ZG}kIv5}X-zjQCzQi#lbA@f z5c$??$W(pTraOsOtUc_jh5yAZB(f@>g!xngLOz*bx>$2p&gymIxCq2tHkZgsDOrXj zb#hV?Wi^=-Knh4|3NkG5gbf>QSL5}rNH>SaoiQT9&LAR()XgVj_C@2wS7bzgD#C2J z`D5kp?d_=naqU6rBz5&+{_{(p{vo`%@$sc6KIofXjjrXM^p0N8snPF7{v642)aB}x z_C}P>C0@#JMDA@~8NBw(&-_~lPPAUwiadL2eJnDYZcj`?YU4)Xdzbe8Mek{)8}*3(xrt&H$S>(0i3 z&xXC)KU95veD#xi$1grO|9anz>RRma%v0};-HjZ%?=yp$AAW5g`S4=j@u9yqlOG}B i{WHVoUm0!Prus*yO03;q`lg->e@4Z^47`~;ci~?wm6+=Q literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/arr_eol-down.png b/images/icons/16/blue/arr_eol-down.png new file mode 100644 index 0000000000000000000000000000000000000000..2db2bcced2072f1de15596efd2a1925dba3ed295 GIT binary patch literal 1236 zcmaJ>O=uid9G`4xQu?7$tf^l5m>Qvw-FfrZuvkU#RC_3RsRu<7g!pE=8-s)lym{~c=KuTs zzh|>D|I*Pz&mSTP;%IqJx9~oet%D=@ed70R8*k60v$b>~TuR$^j0n{Y>j;#6dl^~C zc2{5j22Byf@O7_ROKavC#R>g_o#_-heuU8kF*V(ZY-a_fppKTkph*69>q`=NZjpSI zH=!A6sNv16#b{w|zUr*4II>Glp9WJM1rzuvwL!;k28q%sl09AppR;R<1U;2>rAR(@ zs%BPz7RCth1(nCEtOlvw$p^{F0fUYbC-$P$3j>fb+V!xN7D?>s z;}HDF@|GKEvO^vu{bb>^Q5`#?=mMnTo=z6u0A-r{BYb~HJ4r3{pYwb2C)L#mQ5H(V zR_x#^E}h(EYJWqSVm}7OwBr?ot7zEG1ob|crg9cL?*(>K51p2eg0!p`Nen5to~sy| zXwbCCL6L!iMAI@;f(BFtU8Yq|GK2xgURa)+)eKrwWe##Qts9aEIY}>xoG##Hr~_;{ zNK!j+(7>*T?e?+qzF0+zk)4KdH4K}BhN?8eG)x*{1hfSnn6~2unVeM{$AqKRQS4nn zt`Ubm=p|n9_ONfv{x5EhRSkyMHHp=AhG)q>*4>q}Rtq~WK%u0TSXGo{S;wi9c~OuJ zzQjQZiiV_<6!wJ58f{nO4X$uEXUCl}!otoVq5#(|#$$H=ud5Y2qMwy@wc7c){?GRI z^zcM?^I~Z$=Ulz{!;8en>)^ueFFyJ^Cwx7_kIcL_JvN^Eak6`hxVCzF>~Qy)nPU&W zKVq>bu8lr=WBr92P<#6BxzT&yc0U4 zc*du}STKI&mp_Ikp1qQLr*c5|?!0N_E-g0heDFkceB%}N<>QN+!cb#tgPW+|d;2Hi teT%#+Tt72(^R4$D+}@JzfBqEMB7VJW{ki_#ql4LhraU{Ze_C4H_!r?0jq(5h literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/arr_eol-left.png b/images/icons/16/blue/arr_eol-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ce2d543117bfd84cc4912bbcfde94e9bf055a0 GIT binary patch literal 1227 zcmaJ>O>Em#9CxYGO>4_~+O#22+p&ck%HI)Mr8W%Ki*a>k!0>l+mp0lJ>sH&ys_x{iS-|zqJ zYqgb2v!~9Vq9|&%QigT1&!y|+6nW48wQrH_99~|-tHB2DSrMWNPS8Yj#j`e19a&EQ zt?$qxMNNL`HrDW(`Ko3I9&4pKY~qCkO;L+WNod(^gy|;QbbX!q{r)!$?K(R1THXX^ zSVAqgycMC=wkUeYLA1&7s;Z_Of{-N|*|_gxE6Mut!k7V~*pA!~yMa%qj8-$~Vx1wLJ`KSO z>+WU?#|PwoJW3Wx8<$ui$FqQohB|3{W0YwgkMO($?HJe5f6gDtA2<3T;_4_4x{*z) zxUq1^)bWN=#Ze5JX+>>Bs%Ti97!5y|rdB1+yS~+df!+0xk1J4T2!wT9M>9&Y!Sk{R zWC2JD&#OWa7@#0Ql`n{jA&ohX!b&_3h#pi$Ao4sk6d8yLEXpF3$TA9JY{ieU<=bd% z*ClpG*wV3BtrQ^(2T>ykI^%|_wE`T(tstaJt9jbAY}ZfawAv&l5-miLdj&a06nOM7 z@tS*tePj85af`WvA>?66$w4UObIb_q9Lia@n>r4pVxgET$cm~$k~%dnORAACia-If zp+JTso^WZS9csMs73t>mcrZppI2c6ale$G@%$zq)49JLnR)K{^^0@i;{{GVBi-XL= zTK8V&Hh#OBTaezr*w4`2=eMWdy?kb8_ty3onY*u33@<;Qn?FpXUK_`{)#_YGZpZ()p5x=r)m0zgzCoY$1@k;H(4{kjA cZDwwr`s%0hbEh9ox6|KCWqAdDT3o;SFOIE;-~a#s literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/arr_eol-right.png b/images/icons/16/blue/arr_eol-right.png new file mode 100644 index 0000000000000000000000000000000000000000..bc5e84697f56bc9c8169ef2bc3e8ecc0e3bde4d0 GIT binary patch literal 1227 zcmaJ>TWH%>7*^)=zJh64+icLDDQin%wvJ?3x5i6tpQtfRX>bhn%f@8sI2N%km5ysC zFy^FtSfAEC?!pMm9>)r04}}%hhm5g7$6iWHp)Z4$F&G8aCucfY)wVVJ$8NmQnLGG05k)Ax}FYbM=B$V8RQ_;u1YL(JrDzlK4{HD_@d zoA&&DybT8YL@S&%~&VhaRZ8Gn6dFrU|MsSfEu24yd3-Ix8JeAv2*O% ztO1Rnh#Su2LWpM;rYhFLoTb|A_#0rXqfr7E6BBgYrWa|Q9NXj7=sCXTSkO};b2;{@ zQ&nRc6#Wo`Y#OF4C_y0cX+9&$viv#_AP+exaJ-P>Wi2CU5Q6^0Qfr}I*UCum+oDpA zZ4eS@9M^8Q)9p;!4`(@ERn?e75K>el70r9Z?4-PCbijacWQ9&Z9Nz;mqgnG?B*#)u zpN8NDWoNcQqIGgF>L-h)jq8{J$EP6|_H^R-1}MYW8sWO@+7T(^XU=cRA64c9%$0HE zw?d0nu|B%N)YgV##eNK$VTN;$W>|^mA=Oh=5sEyIbVY`uf(o*TB)atc09*1R zVtN)H*mbDgK33Ths})0R5$qR}E8I_I&i zhrSDXiPxM>?CTTH#Vuy?x{yUhC4-QV&9Hr}y&-3N9z{SF{{;2endy~atY-tojbLE*Ve`p zN4wiTUirQJDf8u%#oK>9{QUlo+ahzb>kj{vS!x^;Z#-D6G9TPZJbq#IYIoPgyC1Gf z%&-5g9$IR4N0aY?o5`y~r^ep`KP2sg*Izt=W-i=H9wS4`ukPtq*aOA;`!RF))MtAx zeX)O}d+osFFU)d1@y&1VJLiWN{z$x?SpMYEiu%&!IyrdhtC73iLOHu~{I%-ei{iF@ kDk literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/arr_eol-up.png b/images/icons/16/blue/arr_eol-up.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6dd9a497cc9740e88e25d02ab83320cf1d5962 GIT binary patch literal 1224 zcmaJ>O^Do79DlV?%0lT@_OkY1%usr9l9x;-Uu?QNlQ(e#n{}8Sa6pQiP2TRroqRNT z)0x@Rw6xZuNZW&mH&0TLf>uu}xPmQIEJ*Pn;-xncq=A5Ke6+d3Xj2*fgxPe`N zaNz--1K{ZAL9<0#&XVrMA?M~gTt7@G8i2X^e&TwYm@sR2BZv(4$@bSQ6Zi)ETG@e4 zV&ZnNxRv6St>vb-wdrX-JAaOu>+6&t#KdL#VJFJ;zQK-ob$ZUPd6pTekWGVq>Qu|A zGiID(rp&>j2W7~}0w#pwnwXquLDh+>gy6th7@+P{8@95V7`H~xSM*k zitB}arVclhD~@B(9XH*?w2GG7$?)id?Vp zpdvz96$DMJLJL-8qzM&Cwd4uMLD;fXGcCcaX%dtK0a>a7B^6Z_3CVO>l?m34GU7%a zp4bhj-7yv&iq*{&yChDVaom|SRJ|ROIBUlVW3H4L$Mu3Jm-A}Vm}s;Jr@=++TWK6J zqr~gM0rsuhGjU6$iY1njsg@8D%O!S<_4nnh+og`nP_9<0rHZ0z8ltJw%8IO6<*Ec# zs8}judFlzDH`>0&n_SUu&X0RzM1{RU#1XAqO2=%~{^K1wqMzER((M1d_RsF_{LwSR z>zArK&#}$(Z$3!x|86{dcV>Hd^ATMA=FE}5-Ul~6Jozo7PyhPMNwf_<8O%?gUbxDE z&kC~n!P`H45Ac&~-#wPWwe_#wf~RiJe*Dr>{o#}w(f(H%{aftXGP+Y;z5E{v4T*>V literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/breaking-news.png b/images/icons/16/blue/breaking-news.png new file mode 100644 index 0000000000000000000000000000000000000000..542da38779be3711a032f1c08a49968bfff1fb35 GIT binary patch literal 1187 zcmbVMO=uKX9G`Vt(R`E@(NYi1b3#)J-I@1hKPEF|lg#ey)@|K1Y!=-^6=!E&vO_W- zJM-dB0zy)#HIzaNV#QNiEL4!%Ttexmhehz(DijZ*fs$Jl?V)1Z^i8rGJp>O9%)Ix1 z@BjP#zh`ND?5*Ce16>Tm^cD}PWxB?~ch^q(?R&Vc(d8AAuaXI8k~B3BGm7EVFeqBu z6fR@Um}^|eLktt0G%Hn7EghD1$Kte5hYKv1q8VmrBycr-8WT{%Q>L9^@BQ!#3rr)! z9!-^C$<5)qd1&6l6Z2ygeSTV(40dD~33k!a!aKxV%u*gil&SYG?zylpq~6HydL}K3HlsTFtc7h-R5L8S;SAG|3pufXkeGy`0MmmANkSGDppsT4q$CFm z=?=$s*jzT5K%y!rDItfDT2Le45RNLma>ExF9!?0wqm1?NAQOvl*?5J@X_s3Z7$ujr_{yHuhm+5I!BZBBha1 z5Yu8hna@j!6x+rc&yzErI>U#}@l>;Pj%Wvl+pX58!q)I$n@)^JN29N@a*dAFZ$(w9 z1h;DctgnwmUt7rE{OTOLxBB^CZ-bvpr~f-}KJw0DkXX8K>eFN2E}c96_2RF63%~C< z)4LE1e;@h#M@G04iM_s~F%sinSlvDP-st6*Ii>+(S3bP;C-X-))7a4+;lG?dz4!>; zyV~>%3}hcQE)L)Y ZCd%ARao+N=weYXQ6!T;1H`x>K{}0FafDixx literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/chat.png b/images/icons/16/blue/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..4b712ac22a01143dfeeaa75ae2260ea5347d29b8 GIT binary patch literal 1138 zcmbVMO=#0l9FJ6|8wlR~Kr}`@2y63R+9pj{UDKvJ95a!F)&K-sa19|WLU;e+}|2uQ#;X|AI zcJwg}v$-^+Rp`DYdN=jZb@z`&lWyBdu|`I4oixn=F{+Kn5LRi8eo`M z-Ko|{%{Zc1*iD#`PNL=d6wNRLgDu~*CJX9cU?(z(vGlTkfP6Dy=NH#H-MAbj@?@k_wr~a?4KDj51rm0b>*G9^h;KPvzTcp&glh(k$93JL&h=i#Wez^*G5P4C#EQkH8F;wwDgY&H|k zWC91{Jd|ZQ;t+&5)rg1F9x+>SFWlQ@&`@Xvj!zuyu@R#=hNnoDqn<8@;QEHKLhOZ| zMA4M-Ez{>=0`RUI#kHgzk_!6k#+uq;b=pUK1%-GjuxLH%d%IwoyMG&s6sb4L(ZHca zF()-_O}WS;B`wR*FA3YR6}=$o5K1W^2|&z1C<}R@169;ysHQTy*yUIYTae_Xv-40g!Csrv0$Rs$ZVm#UHfN}#995%4e z7Dm#nVOowC$x(Thqt#I0oJ6)BV3%FWui~s>A0#tib=;~fLRFVUNlX=sax%?zu=fAt zjHk}8sf9LRB{_=b6_Q8iAPR&baw_Usma<4ybdOF_Q5PLqiuk8U_XVS3^J1*QmoqUzQ zwoCs4GKbH+y?&yHd-ZdXy?DvEQJd*`Ss%@S$Lsxt+1&O|%wYLuF1Atbe{sLo_j+gV zo7kM*|LxJG+W;^;Yy3C>4jb Jd->5be*i$yY`Fjc literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/checkbox-checked.png b/images/icons/16/blue/checkbox-checked.png new file mode 100644 index 0000000000000000000000000000000000000000..fedefd5613d0db49cb0ede542a1d79471ab9d072 GIT binary patch literal 1174 zcmaJ>%WK?57+11(TH=@lLa5zK205pYl}1{<@!HnzSn)#TEbE0jH*2M_SJ--3n(fNI z)C6K|NbfxalD{CdIph*ZFG)xaArG8D3xytf$f1x!FD*GFqxG(9im_lc^NqgW?|W;v zK7V!e^w*~uh8eBRp$6U0OA`?eQA)oL}=S=&6v^GQ028qFo2o zD8WGHV9|vN1d6~3B}rA)D?o$- zIArR0L%Cu<2E%reRZOdBIcq8IeXwog8godAcVhRQ63aGviOR#mkGL6x8? zLPZk&HgWLsbpHBjH+4*AyF=|eXMsVXPpjpT!Bi(tdvYu({)5sr^~9MTXIE$8dNO} zu{`yJ&l~Mf;|;E8H|NKLF`~l3AmWhLEumxf$oqYdj_76$na%9CR&)K{zb|J_EVb^Q z`w9F!UfcV4=Q0PLYz={_vyV^yImW!1ytp&El}%3-hVDMNwDkH+;j4IC`{Lz=Rm!oF<_{RV|(G&VHZgc|Tw6Y(H9BxU;}<+){lDHrT#g ztXuQ!efQ@d#I{ws*`m8-pAJ!qIVT`(%-18-!3~Up!-H>lo#W;{h0PXid5>+ML?S9| z#5_tEn&Z|t@&x%kO!+qMgmFdqaq>mr!=NHO)jZ%OHQWuiMk(GMZ8!Z<&$j|$;{m^( z+l(N>6!Ce~k25>32xDHGor}+sz>iI6uOgf~)$(@u8c8v)iJ;^I9q_s=%4O9sjQhL- zWFP@Wl9iHd*k#2AfS)`9Q%i$=y8+#a7Q0o1E~SYrNyFh#9F|3rb|l%dtb#*PO3b2^ z9mW*pr8rxgGC-X9X_(NE#C*Ys+GId00`v4dgeYl*oi5F0wcR1;PW73yrc&JvoQ)B?%mxw1 ztZpeAvxAl64{SumI&_-(S-W{~^y~Y>YkTdt%g6l3)%xl0H}}L9ZSVBOSHvxj&fc9Y ba@TKjpI_g&IrnV-eKFnj&24y8-Fx{L6u4D6 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/comment.png b/images/icons/16/blue/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..ace577d050401e2b342fc7c49f1793537792b5ef GIT binary patch literal 1255 zcmaJ>O>Em#9CsH{ptPgoOWi6lHsDmD-NpRpm59uZbqC4!cNeGJgkU&C6Xa^2lriAA#DHW<}>G{3?^Z)nz zfBU_e>GMMaCk6g)uc$fnx!rX z1~B{rs@YR30h(QzE?X;$mQtm1=g9F`#RLwDOfq(s+)$0PREJl^=j589$c{?1n57;% zHD}C_1usCPK!daeL_mrx&1QH>lEz35uz&#^!*Xd>QZt+i0NH&gY%QqHt0ky+ZDA=( z)uPB(8K%)_(2Wf31q%$TC`!V?acQiP4wv1?jMHv-s>c9PXa%+(*`7-#jAq5FM_CGc z`Y;5?FWC#VDBL4=!)~&0+L+k%8I}f2(9uca>!A$eaD?ORX@^k>{pb9F{9$?7M@$KY zUOljI73WXwGj+J3M6nx#YM8+y!d2AGr4V&K7>4=^cHVZ)CFogo2f0xZW+@Dzt9Dh@ z3zE*V5)UK}h%(D6oCb7|7oo!Dd07{G90y@Fev&P)JXClfuq@PN3Gg!1Bp!-*>G>YE z=!TK$TBv8&#&)~d!l78T5Fj)1g0kl=^%`oX=0#pu^L(-}E0Bh1*=`~y)y6U5Xdw#h zH&Im&JcsNgUbPRfuTTCjZa$OOIRO^r41}DJp}N@WzMR$T*l`hvT3*ZKC0S7*PMso1 zqM{2L4`d+eGNc&n36nJ1zQ*fa;ciZjdt-!!y+K4Su3Lb|?Bky`1CQwKBFvZLA1V*p z?Of{I#-F9#qnkTxSB|aU|M920*WMqy^VP)2Zw2Aq)qyWhKi#+c``W!6*-AZo)2E;4 z+Z|n%pI>ht`D}2wsa@D!e`#>zi`;5(aqVW`AMM9C9^Lrs{1m%=;=^YDYub(Z?bPNo z{~WEob+*_)k@;YZfAZ2(J7-2-JT|i4zS?^3H1+APm%lzf2#>51DPr@o^3mwl@Rj7( NQ=FWJ*R|K*`4_(qn+5;? literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/community.png b/images/icons/16/blue/community.png new file mode 100644 index 0000000000000000000000000000000000000000..a28cea3dbba73b79984868a166dafcb6594f817a GIT binary patch literal 1265 zcmaJ>e`wrP9Dmo2?${`sw8Kp%eP#^D*j-+dyZl;jz1*d72d0+m4G$@9Y4X|&ZIWA( z^U{KFoj5uiPGqPQCJv^5_=h+}LHuL=V}t4+IuMb`1exML!bJ2B2Oah0c2|p(243F# zzI;EQ@9$g~AA6>M*Au${0R5$tYMJbNi=K~RHjPpy;t}MTG{a>CK{y6k#2^~6G{dGCLFQN)A=r5+V$HXv<+7@E zY!N9()xxkY({!`hOgFi-=g-iLBuOy`%ch7%DwuaeBTBi!p)P}p1Jk$bq3yXaW;CX} zMwp|Br;kE#>ScST76u#SZqP{d+HdQ`@pVzUzCFTmHnfAVjQ?|fOa7oT zU&nMA2VTQBNfoCLZ8EjJp;)mKgRC3=EGAXdjJW`}Kj^yr9C6-ujXBjb8xD5ElA5Ck zByHK2tQ7@~VT244Sj3AABe4afA%#~ZM#+d8-{sf}%X1=&5XVRa%`mDa3MeD01tFvI zWNAtlTXKWYa82B`YZJR2EZP<;7kzAmo?r32xo$&^*SydRYF-@{C$dmCOxum+xY{Hp z60M4T`z35?zURPp;$?da``YOL;?8i2#%9%`$f+uu<){wU+LW_KBX%6|1*O0#f+$HU zNu87xcuC6^GDt*%CaM%oJfY)8+thg7E7HyJabt{#urY|(C3W-3m|cGDvr}Y5zb~mu zCHiq{ZGC;D_i*dNVj+J$aq;Lk+10fj@b#VdcINLU-&gX9rQfgqt-*J}cPrYO_^1;>h$KU%Wv3zhc_30aL zK6&wFuryS-bG#)EES&~_?y0RX`3F~47n2OK8+U7*4II)GDH=tp^RM4+J-vWOwtT>zeE|?SiRgyI}ETHko!qn@pO_y4xc7 z01tXlk6uMk@E|C7@*si-MHEC7>P;_#7Y|+pg*w^p)*_{W$;?0bzwdwN`o#F?j=lqZ z48!awkHHGvccp9F7WzK)bJ?NWAQ_n=lX#jmoft8Ohiix}2hI$tAjeyne~pG2ruT_o zog!2AY2C#E@1#0>D~KqXVTOyX$Z=;8VQXl{4-4FnXU{p-_X^zEybbKAgzEm-VvHsi z$E)t*tgCrk@gzIk(kVfJh{LvmxiHaN1+LAj({p+)aBN$J%oey6r>5))wuEEE=6R5D zfect#&-VdEQh}}kjLQ;kWjzW0P_jIeISfZ%pfFc1|6-7-l zfdvd1YNC--ExF6FE>bMMK(=fA!qG}qXsnha`tXX+82UMU~D&z#}iI6th zn#Sv1(QZzUt7Alk)j>odty@gT?Bu6yy>vw9%h0H{KG*&%FBf}{T)uwAJoUKe#6$im zTLfQk<5TzEzqoXCQ{VTy0}sBO9_yQ5y7}hn;+-DwZF%&=#I5@SOS|rzv-Xi<&-~EN z{U6;Vv*+No{+F*_^q)UGv}JJXs97_cyN|znaAW(x)?sDS<^ks7vAw^4?SFeC{XvvR K#^EFL{MEloo^MhB literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/date.png b/images/icons/16/blue/date.png new file mode 100644 index 0000000000000000000000000000000000000000..d46fc73a015ea7ab33d834c8afc9e5ffc753106a GIT binary patch literal 1216 zcmbVMZD`zN9FKeHq1-!1WRp$iU7qA}$tB)x_mX5i*X!!_+zKmWY4WrUZSutA z=`L-3*~&zQAgE)X+^B*d24g65P}pP&A}xY!P^|TXIA6X=yD^wWwECp&RfVz-29oFb zKhN*~`@iQ*NBeMD28MdU*|l>l)Qh=3Nk1eX*fNqUy%0S8#Xvm77iBqhl!0MIKBL#+8$uToL< z6_N5y12p8Dq#nIH z>&hf|4>lA5i8sn2-zG&d232GZInc!=HOr8jgk@WbUX*l>lLR2~KumL-%ol(T@}eqp zc_FQfb&j=kHAzdQw4_!jXd1_RfGoX9njH_FbevSM;AKV~I0t)Exh6miiItz-YVL`b1bA9_W&Z@yTesdOtTo z#_CQ<%~!+kE_L3Dje)IOf25SL9g9CTyqu=CH|=g}0AHqa#`@Wl54BmR7q6V&K0P{h zRg8_laLgaR`F(co({qzgTv^!t!AGB+c}dCq@n7VF-FwbnKeZs< zx&2M1i<>?Sa&I!#U2SI`L#FiAix+mH#t+J3VA{Gof% OKc%F#tCtJM$NmPSHU1%dk9G@C3wKj6#!S#G`-71Kf-PujDn_Zf=NhWIpZmns+h%cS&PMfvakM2%P zS|3b(@f18%eCmVr@i_Is!aaF#dPS{p==tQwfe+%Npr|0?N1aWRTBLMgcIH3(|NZ{o z`^w_NyF{Y<>ZM%nv;Uk@a=b?pWGFcT-+8HDo{}vO*`Ij_+|XBX0O@n&+9PhatE@ z)md%Q=!o2l2FYS+6T3JNB>{?IUnh=lh%(L75w3fr9nmWJ&-oMiquNG5#43sWc4)CG zu1p;>b-JNgaS(%U;&6?yDjK*Ik^TqM)SqO|J05N!-)g(WqZO3r8APxhTQ^FoAxUZm zsxnk^lBCH+XuyJkG^vou8Oo63By0{9C8La>mVsGGLPk!78Fr^;kiwQx7-B14M6qX) zpN?zx#WFM`IWw_n&6xo7WuO9jfr{eJ(?<%#jDeLZJ; zD2nPUj_PHy_DAoDZt^||S{1WKL;8}{ge4<{GK zE9SziDO=3Q6*?0tgusE=phKtW21=M^c6k-DkFGg}-ZjCqS!U0vYH5PjkPqn;3*sga z0WI<@pGZoQG)xPC2OJPMUWoIOk`NRC==Q@9HQ%Z$WxdeWBBw0Vz}QnbuGMO>tptnw z8IG4_IpPq6II)Na^DZ{RxEl<07<3qzzU^Tfxpc&6)X*HxGQ`up5FD>m+9!5{cA`ki zxX|!8o&}uaL~-p}2e=IXxpAm)WJtVGuK6}8iqX`O zIp;tZ7xgSd{;-y9DFsa`@Vt}+k^sas&&xs%6o4w~GOs4n1+l|%7*^1ddS1AMO?2DX+>uyC^Pz!}UqPtZ>41p_!YF7UkJctr zbjdJnH#$e<*^5?(zI_K;1s^%|ZhjT}5PgtHgM)FavdF6iNtDE7J})OyOdD(cPtG{v z3>P)WfoADkkq(Tu`>jt7`@;iWGBG|Gjo)7H7cy2PV`?SbuKn5B8HruIcm2cL?$wO? zd1~oZ*Xr8X#&*|@hii{c79YP@pUwqe@A|#d&o=rm4c`B?Iv5++?29$u2rIX!si#}d xpID#1Z*7hi2f)g?rQr+TV!iTd-v`2RdY!slIdyFL_2ObQ$i@7){xUcH;4gFuQ*i(Q literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/door-leave.png b/images/icons/16/blue/door-leave.png new file mode 100644 index 0000000000000000000000000000000000000000..95f63b3a599a85f6c4ad9f2c6ccacd33d9f73214 GIT binary patch literal 1077 zcmbVLO=#0l9M7nZQ5|f@iD<|?4cokzHc1m!N7gj1u+G^Ptmwfsd22(P50lq58wi~T zWj9d}5yXQ#sd(`qIAQ8d4_;-SMZt@L2p&Xz>Dsx&*ug;ZKJx$le*e$4`MJ}>@gs4H zqJ|4IYKg2P(K|FqzQ@1+(aAD~^A)_{F5S*=oD2Zndl;hTn~QQu)p}awlx6A|dos(m+wEjKm2~|Y z3nfX4I5;jrEE2)8gY_`s1mk@M6$OTGdDwCtI%3qTZVP7_;^}q>wpT3f5IaFHQ6yz- zsCz6-0@k*pxVqK>E}?&J>}eg8mp#OmP~f(FgVbYjybmV1+g~U$B;Lqpe2WxCZ>p}* zvXO%eYL+2?lBQ+KT29m;6w^TDfRKSu;--NH6hW1slFn#CpJOj9mrJX8C7)4vPK8j_ z6iLZVb9@H!YMPL8eQd!AuLR5Vc#g>*hIrFf=?HUB4PEOCa7 znqyb9^sh(Z1rOy}2 z@dLkRza89)&%9ONKffOz*zCOaes<*A;n~O33HbC-=h@n^Yrj|P52V=Hv4^qn`p~^Q u8~oj)GGDzp@M2{2%I%Nunm1N2+5>}>@MARoXrl8e8stKLPJJ?c>FQr1+)?NN literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/download.png b/images/icons/16/blue/download.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b157e50fd14cf64a6b746666e254ff59f19832 GIT binary patch literal 1103 zcmbVLO=#0l9M5nL**cxz*JQAmsTbGgy|hW1usXA*afNjsUBO<2Wy$Lrx_p?t*=`qy zAk2Y?c$kQSco28-?C>CpA|3?M!_=FC;6d~tf`~9*wsr0>b}*2!IHI$*K7sN`H>c0NL_HL> zqhu9|xR@J|4cCt8p-rr2djw5UJ-szgH!29z<7mQiQq1>9j~UuBQ_LAY2XbB-m9736 zAC1lo7L1vSA(>3?NxG*d69OAyovzuFP9WD(%qp);_Te?l(5oi6l491JD&~giwCf|9 zkAbKG1V9Tg2IC1)6uW5-K)?cyg)jGg=^v{hgt%Jg}huAy{+$rB6^(b}K!6bLv3x$Tn8+pjL zNKy1j)itJUN?7BvXP1Q0nOBq5ZzKA-_bP$j4&lA2KG*b1AF(n>;1 zathC>5UQFYDd|3rPeNWz5K^v=%{l?r9Rt;MEutG&MGx)^$r*= zyVwoNu1BXwc{-;XmJ^=C@~lOxBHucXOwD&~dNseYwS_*2C&A{p6-j`KCJLgE$Yi8A z&#Yt3|H&CkoMFS}*wifbE7F1CcBA#lVPklZLng*2qw(d&y)5lq4Y#i>?|c_|ve>@R5J^6zDi6WOma)E@ z%Iu}#?!EKcfsP}CiP@z)`{#zP-(T*SJE1q-YW(y{E&smyjX&Ph+|aU^?ObRmnMG%Q i@>J{lrE71#M%u=xqk9h8R(|9~IO5sNp!%S1?BZV+?OR6x literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/edit.png b/images/icons/16/blue/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..68d408be7f20ac9d1f7d97bdc2e87ef46f0257e1 GIT binary patch literal 1182 zcmbVMU1$_X9N!poezXBWNL3JrRSFjGc6M)f?{2;Ga(A0+4s-Fi9Q5!(y0<%*Taw+` z?oPZ-2*{-t6k3q9KJ?88+Xo+%e$jw}k%W>y*cORm3%*zi`Vd3~K@sC@l1oboKDe+u z^PlL4 zmNtyaNHfMi`4uG@rn7EVs-#*RP;_iXv_L1~TMk7tOfu~|nm&REsG(ugPO*=!UT1-6 zq}Y$7A}l&N)G+%eTr@N>SkWg&^n}5tkAS4FPy!1P4fxim?J0hWUEx*eJ~-xBu%bdn zQtYZz)nW<|zj4>>4syb$JNN>orF1ZxjVt+_^BDXaN4 zTU1K14MH4+McX4~^sgHmYI~J&2XSTO;W1aI^{DS} zgK6&GY$#Bq-YCahlNLoARk1#1A)6G`6iaU+hG{7ITrAJ?F%iZDD93p|A!K15W@I(N zXT*43ZgXsemDQ*u3RyWL30a<3^O-~@mldQqFR3CW724Q>?Geq^QQNLb?XF>^H)55X zi!_4W3dW=D4k$G+!CnJ9AU7m}qNba6AP41HjaEgjc@i0U7h7N@zlynmeaOe*|KnDL zI28L-QA`Nb_f@R%HaX*{GhEOd|7n)?5$(WWyWaX#SRWo_(}{8EXe{3MAJMV;t)ONq z{$I71%ggCcFCASv6=H8JrEY${Fxhk9nU;KU`ofR$0An0nfISDkTyh?UJ~+{F@!~mY zuF)fYHgoOPrYLhMG=HU|mhPE+l@n%m_n&3AwZxy9+xY!ET{~OV&OiHlZ~pY4b>{c3 zE#H~HK;~W-=xo)__kO!~x*ERRnEz)=o_siU;hl5Ym!aeF9Va^$d(+@VX#V@n-LvOM zTcNKr-LuTV>03uiKX6|?e;4lp2h}b0KOoq3=9~Cpa_+sO3!%Hy(_d%|m}R6VrN0l) STzMS)F$#Ty>gDXmQ?CJc+ks#J literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/exclaim-circle.png b/images/icons/16/blue/exclaim-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..443d78104ef363d23e7851ab39582529eb66eb41 GIT binary patch literal 1267 zcmbVLeQ4Zd9DaA*t!L@sS}LPu^Rkq|HhPzj%Y7s^UGFY;YjoGu>y4cihq>gvHf!^- zB;BQ*GMQ|4Afo#MVLEglFw2IBGGt(j3~9@-Izgn!oFEE)jb_Xlnof1jQbqfY$Zi8(4?Fp}T)cXlZq_C8yu0I917lAf*^(h>4ms z2n$eB#tzKFP5|mEYO&;$^1C?M&?1s&6LB>Yp#kXJ;hK^>3>~Zt2UVTNf4x41W2(aA zdt-SrZ)V_-+B0s!{_)vTCppg~8%Tx~?RIhV&5c{#NAt_d7lG;xM` zd`VO(--l%k3u3Vd8J5X7iN&c16=f2MLo&LDOMm5w^#4M{>iu-Cko5pe8OT|d5luo z7=VT{x|pl`@<4135hu}nXM|;-93F z58kPJ-L)O?81Q4=Ez@6urXVt?Azm4s5)CZObG$-t_I`fz~I*@_gO; zi^SSppU_?P<&#?*j!g$f8t%4f7ZWK z#W(bX=FV?=Uplcc@u2)j`89L)#Xu=Ld9|guVWt1)e#B8r{ JHU0dNzX4DJp925@ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/exclaim.png b/images/icons/16/blue/exclaim.png new file mode 100644 index 0000000000000000000000000000000000000000..a52906c536d22037fb1902b423a0ef6f97ac7f95 GIT binary patch literal 1124 zcmbVLO=#0l9M3FnDmp(9H^1c?NJPDb9$h|Rc)7|8K$GN>gvW2BA|!{EhoXwK7YXi%S^DR+Osh0rcv4I z9`n$^Sa04K8!}{*?K}oLstP5r5z#@_9(H`CnqZfB6?zV?c@`|Gkf8*->{KD!57O8} zpq+zZ14W$Lp zS+pqnu!@Zl8#yGSCRqBynU<+&>6j)6u_%m*P>KtJET*6alaeY6$!J`Y>Kv@*r&n5f8rLPEK34}Vlv((Yf-j_ zHUB4PJavW-n&Yo#sbA3!42~x9Tod}x|E2tGF4KY8S~8QRtGI6k?5 zTnRdF!=3X2474^MixVMBmqE!Q5xMdeuj%vlG7o36f_Z literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file-archive.png b/images/icons/16/blue/file-archive.png new file mode 100644 index 0000000000000000000000000000000000000000..b34c730dd5f180fa4c6f2f03a8e8ef6cc779d228 GIT binary patch literal 1129 zcmbVLO=#0l98axZj15FoHW7SA4<6R!y(~?eux?A6RSWAZUBQALmL{)T-14#H)pk3` z<|pDo@e{>^A_xkKcoFe1MTUwOZ_18}=N-I?^JQD7$k@R^@;>ta{eJ(?i-o~MZ7sW7 z7=~%f9oC9;-4?!EH`DLlAB#F&I!J$+47pWO*L}>Wrdz=vXX_)lh;?&v;sfqxm}u21 zl}R~2pct;r>7fnRusw=qnC{+&ryFCKfC?V5oD{q8YL*3-nPQK|^Dysa@Thfo%Ev=f zgC%2X%#cmCw+D1L6iQ%YqJxG#?gUCB#V+wGbRS;xELbujV<~posdBymGOmw7oP#j~ zN)SkhLtSDbk>~^hM39F9kAxUXC|!aAAy|1>s^*(jrKn|BwCE|tjuPT2JYTQZxq27p z`XfA&WjW*!gc!Am1(OcZ8!;!?-(=8mVEC3tEY|@cqh4`qB*jusmqW0$vPlK{Kt(ot%K5}hxsB7+?sFDdQ|r}!8CX43x$T%8|8>^(W2<% znrqZ-?2w$6V(A~wv`i(NNn{a9h%g~QDT$CQq+u4Sk|rZnOlGAf$68oTQe`PFt7^Op zA*5whS!`C} zRn0g1>g|_%_8olE#+JP=Coa94zR}mY>Dx0PU$}Q|X4lM(N}S0>q}i|H^>bI!$Ioy7 zzQK%6beyeBzc|D7%o>{p-rs$)g?ljk_-y3)9_iMzE8B;6yqvxlIWYgLb&e@K?E5%y wDkDc}8RwKHxo%w7j=RVy(^dKDmT>qf literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file-audio.png b/images/icons/16/blue/file-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..a30b98367dc8623c9173c3a98d95b20e5b6da80e GIT binary patch literal 1111 zcmbVL&r1|h93K-!B*B7Wt3%Hb!h^f>W}N*ogRAcD%;bV=+q%(4AdNF`b#mv2GjH3~ zLuiO%Kj;ubbSkKzpvbd929<<#uMS=M1BAL11olREtw209F!O%Q=kxjgUdj%iZfiZ> zN>Nl>dQi%dwcUSPn#uR%_brty$FN+$BX$v2R2NYR-5x_AZK~rahg5xf>OJbEsK%m^ zFW^FENYrdIr23dp)pQ7(qI&zQj;c)}493v7Va4gq)mJny^f-M!oPil9g(i%_85fPr z4Cl3(Nlnn{{yxxK6^Vd}unMYX$@0W%oZi+I$=<(aXs`{zlW}^-sX`_TQnrggI0S=W zknN5$tRM)!2FC>nBIr$9Sgi&vud}WoAy0D+2OG8pd_{H4F5@^&JlzSwbTXM;Vaux} zilmIGst&`3AY+<-T-#_5=g=QF_C$O6X$LVmK%}su(9n; z*bYdI@F1gVhUK6A^6W$_A=kKqbj7tzu$^Dg*uy>v7XA}A3k4yr9{5^dF4c>*#vcMi-oqmv5}kE)R4!eSHCh#rt>Wj?OL9C)T9-=9jZehd*?U zf^(f`M+1SzftAG2&34?dvH%YaK7F%(VCliu!M9ZQ@xaE=)fj)TVXEy5rkWnjmliHu i-=HogKLy@3w?OLF&r_@49^PH_M?EbMOV5*+uKflR9$^tYDt){IL$23w?qBMvM9dPVRVjBOzzL2yN zMMww%La6Fc2E@t$Vg?D?sjx93CJ=u>2NnjTa88;6QenW7{qD~1`@Z+yy?3{;aB*nx z%pk)sL%BJnNbPX&9zRCEW8XR&HK$3oOctFgX=xs2WW%Xokh8QJE@I7Cx&9tcG0Z^K zER{()KQHNy#c6>L*S1`WW|*m&wyWvOn1BkdnRbfZef^dNrjcT=#PTrjW^mn{TlMhb z>Ox6hUDic|otXwxZHW?Cm}sDFHEdsMr`Rs9MAyMF&w{QCSx&LNpvw6I$T%JbF%E`x z7>6K^I24H{5{XG5Km>Ux@JI-wgcK1Z2*KXNQZ>)0N<~H8)1tc+TPMVoc)rzYajgjF zcr_l0q8M-pLYR7l{S}*N?Xc}n^cfWF>z?Tn)3HIos8yUMNwGB2UJ90*&+il4{$8PI z$@sSB@`!`HWd(V4y?s)|zrr}s+b^xSm@i`AX?i-nkLpApOl$XVp}>(wBVF=LdMR2% zarCBzZIV+`Ed9e7rXi`Bgo;oi3KIg1ClL~bG*qD+S41R7lWM%raS&FHMZ{Pn9j6u{ zq^PneXVO9}iDF8Wk_vrn&i09B>$tCLQe8QnK-nyU6bt`~l`jtm`@@56Ix!v{jZk>-4IQgiPLWIPPn92?&dh*NXgCc?>t>!JGHh^i7~lDT&FTx8&^lB z;gO};cOSl-Jode@bNI=2=zdaIA3O1&I=hsaubw|^MCKxDXn1q;^JAF-Tg-*qk&#!A RMlT1Woy#sLFVa_U{REg}R8jx{ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file-image.png b/images/icons/16/blue/file-image.png new file mode 100644 index 0000000000000000000000000000000000000000..4b336394a3bff4952a2a40113eb8d012f83526c8 GIT binary patch literal 1203 zcmbVMTWB0r7@o3iOrq;uHi-{Coj$Z;cjlbg*~^UCB(poac4;;Vn}u%lrIVSn*)cm8 zXHMKr8f06l!S=y`C452WI|r z`M>YK&l_VS&xgDFx*3KE7mlhWDjyBr&JOzBe``adqL<_Y21CT3vPY84KH_pr%=R!x^R_=d;N?LP-%O1(--7BncUqhe|?~kRqn? zi8jY>SS22l;<1cEB|=EeE0U7U2=Nq(t0E;8+Sr2a6V29f+pbCNZeykUV&$xdHR5<> z$EmkFV65g4$FDgq$c~GksOhF1?1S=bMXO@Zd<7eM&#}N}er0nP`w*qzf8$n#6clr+ zC`tnLeG6;+pPcd389r!^e>F?{h<0GG+-ZHf*%=;e(~0ruXk2km{z%7at)MF9=FgLN zH#P=C!r06wxu=#w_PSX$mJc*~-W)h^`13GZaaUhDccu0A(2;#>7l8D@r#J5Xd9t_r ziTAZ%LeJ(Bt*(ii->fB7`FJ`XweAm$l87?w%Eq3+yK5~6daI*js2 z)hE7vhct)+CSzPdPN0~CYV*H zipl_;wp~O=SP;@c6wpz~!mtpF#rD%YfPe!$2l)_;Nnu_BfL?nTV$IddQeMuk*&@3H zQ^DAgIIdc)vehtayTcq5MbYQr`4G_vc@q{^Yaz?q-C&TBr@4lM4cnr9Mzv&*;{-!I zT@Ar>6lI;*^41bXQpVL(hl4EOOw*5RMcc!9^udh{wY|cGgSb5M>~U8k^(gOdfJyE) zH{>f4Z=|EHL5iY|$+k9bA`9o_1Ve6E-O#0MI+lenCV&_ZqHzdCJ_WKM8I?tt6yn)v zgJUCXG7=Ue;Z%l52%(%!ipg|}kHld_76>Wdz~(FutCofub`4^84J&VomC`O!vF#RY zd#up`0~H(FUd49k^q@d1s%BXJ-Y?H;v@&vy?~tB#ZIfQfuVidsAHX>HG;W!X10f>| zg2)r!SF!s4$r(qS;r!H^bK zpPsw?{kxO%sdlBU4u+mR2@L&vy0XwVv$!MZ?VD(hA0MgTJ==M9X8z62=_EVVwXpO$ z_@a$^)AP?)|8>k%%+pFu4DD@o~o&*PnNt z-!gk->i0k1Iu#-CqWiCt2S59JdhFcs^N*+#sm0Fw%`Je^{yb#f=&ks_87i0Qm*-ML GXWj!XEPSc} literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file-presentation.png b/images/icons/16/blue/file-presentation.png new file mode 100644 index 0000000000000000000000000000000000000000..66b3b2a307b14173753bae3ebf3ccbb4166b5ca2 GIT binary patch literal 1137 zcmbVMOK8+U7!Fj67Ah)gTSYpipccBxOg8&S=-O^KyLPo(%XYyP6q`+EyRn-`lc}55 zi;DO_#6zuTJqopmC#eV9i=rTS6c0Y}?7?fHPP*MHQal()X8xJ~`~G)sjSL@eZQ0+# zFidN9P|4GEXYg)orr*w=t14YONV-Ty?J}vUE@qOtUBV!1s^d71RegH$HST4Yrm|5e zl45R1)@+kg10Bvc9g1d{-ag+^wFyi>36C3Ag8lLQ1q%#4!JdxfV9rV5iZM9j;?bGm zf;KauNjlqi4D|XkB``5jfp1nVPxce+8m~CyJ(w z_f>~S9OO+ih-*#TBYFJWjZL+^!nA|=JofA~UjvE71gR~sELQn88cRcr^O zMn#ZQHNy(zpgi?x73>-pv7T{l6RhP|Ha4*jQ5^mqw<5%$m{vql5~%NWto}baVj>OXG-kV6fe2eJX4W54PyUxO6nw#p&yGtR7~SWWoPXT3KD~YZ6AL9;Np#HCaE5 zvc7z%)_(Wcp`(vm*`o9Q!tGa==lXlLetQC>8xLl$?7K2oiZHodi{~fzzqxi2-E96c zU%51Y{j10v+;e#G^W2e2|LRJ@|9)oMmiA>hwmds{^Tg25v+Bz>$3NFU|F*q(=S0_@ z-V|c)b-xp4J9peE_n%D-f&06kc9grhrs{UAwI2XW%mOQXI^OmX1V4dndRSQ)7`yrl D9D8P* literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file-text.png b/images/icons/16/blue/file-text.png new file mode 100644 index 0000000000000000000000000000000000000000..576976c887d9a7a2968227830fd1c84c8778d6b3 GIT binary patch literal 1116 zcmbVL%}W$v9G=ibv;`%MH3-M?;=!GH-8B3c+IiwkLmp4#9MKzSn zd;u4-V~XxrtQOd?HOnPvis~P%xtczUFkM8`rk!B6U%h5%(?~Gqqgjx3Q)tEy6|xVmIfmXf!LtcwLol1@1uqN6N` z=pY8@7-XR!N|Mw^^8f-4@EqhLP*Mb50f63r7^3DGB_*e(_qE6=!OURnDjZj>R@th+ zI^Hw~Wmyh5cs@cbBL19>wOYjXd+H1-@^#O2vFX@!z^E0S3QjP@)4dQZH=8{mw*CD? zk(6;Y&E+5qILiv++O_s^4*hZCP-{Ow=OQkLe5c~+q#mW7I+*0{XraK6c%w{sCMk+m zRvo=!Asc7Z1VjF?hG{72l$3^05`n~nSR6u`9|CERjHxnAit%);&T$xaNQjH7EJ(?y z03lSqA2sk_dTrfKRM%w zGhEOde>F?}igaMGJ!pM$I2ayelZo-jXiP|FzLT-KnNgGZ+UMf0ot?o3ezNjpxMRJ+ z-Zo3do9=4(_CR;<^AJ;Tw=S)GSXe#Vcl_H+TE719?&7J%)nb&&9AkHi9n){u+SbDN zZ?%GUy>%dUFWlR>^oc5zzpivV+Z;XjU>z)kzuZ|D!b|NVr62DeZJt=3UEUabe68GM jzVB>m|S19 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file-video.png b/images/icons/16/blue/file-video.png new file mode 100644 index 0000000000000000000000000000000000000000..fecf314e43c31a4f22fb2793d1e0228c7741e4b5 GIT binary patch literal 1121 zcmbVL+iTNM9L_8oA`XW)ygV#BQyI86=cMT+Vcpg?iL2N-x`IV~FilRkxaG3s%yxU~ zM0DbVhzLF^_#&bxzK9BLDBcjnC&d>*{{TT>g?ZAoQ(^dEAUT(O-}k#;7#ls*xoOWP zhG9B$BXWVRUBSDtgMPbztY~!EO_UNDcPgZ+d6-EXP8qW~OPjz2tQm7NukirGgeqpS zL`wN1lI~a$Ex<%-mP^?TGcZ(hHGK*bwu~oCI|aTyehOIANP%OqJj}aUJZX;1dw6_) zw5ZQd>7oIK2HAm{L*an15rNF9FrTiG1bv(?*A~3AO zIAr4}f}%nqk?3c6h#&`f4)I}>kfOWDX+bsFj^rk^go;o?fC(PPlL(1?2C6U}mqnBol4`uAu^v}RD6yC#@R^LF zASA0vQOIWHi~!SWl9z>8i<`53qS-ob*)^%%CKvsaD`h>b5yvY!&UC8-#wH!&_>+#y zX2%6Kuj!^8oP+YLMk`~_JdF+2b1b%zU&&m@J`EQB6*q#S7)KED>7*j60%&rL|H&Cg zo#BG!_@h}`SF{6z?ON;8!`kp*n@)^JM8hquaw@ z9-eq5-+VB$;lN>Gn^3=2#{k^#>Rx=f{cH5>{QHq3^`3=^zK%NIe!TMi*^T#`7pL5F qZCm^H8_~Cg6CEG7zIg%T!}T^MpE~&AbNb!BVCZwosC+kb^2{$-W@69) literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file-xls.png b/images/icons/16/blue/file-xls.png new file mode 100644 index 0000000000000000000000000000000000000000..cf707e629665c77c4c99deb8d894edb0ff272f4b GIT binary patch literal 1170 zcmbVMU1$_X9A62EX*3X|m8gi56(tXMw==tYAG_p?cegn`@Y3UQ(8Km2o87tGCfS{J zch0-y#YDspR1`!g)`!+&OAA$L`&Q6sM5&0SZ&oM>g7~JWFM=3nlUx)DKDe+u^Pls6{QiWQ$2j zzDlX93PQbJkJP0I@kRxtC`!N~ieaV^_9q>xH^Pp;waK7i-|#G#TEqbXqdr1vG|4kh z7elb!e14hO@s|?CQYJKXS3nUc*me-tg0@eK_?;UoYWt;07Yjw~lbUC+dQ`SH!7O(l zHxwu`Z`3b6ixowm(1=m9u|soOl4my&(=yd;CZ0toF2lG8V+n*5F%7dY71I=yk`vij zlVc@pT1v>8BBfJN2_d9qQ%Wk67NZFi)nrC0HnBO!r@CX{rd^BKUBae5id8cn)+zBy zgiJI$pim{0_*LS9%#aN7x?wqi9F%7}e=hX*@sVmvk)=ic1A&c^CSPD_;<4@O?k z&-b^8h1xFzU(B{RPpyi1y{F!NYDZ7+Z=HPEy+3yR_Vn4Eq1H!NfO6#fGc)UF&hndP z4_)GZZNJTBU#x5C4Ge0R(!&Se E0s<0y6aWAK literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/file.png b/images/icons/16/blue/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d7774330cbc263c4d65f81113a5815d92dcabd GIT binary patch literal 1101 zcmbVLO=#0#7>@3TxiMKq#ECyKV~Ajzd})&`Vcp1@#ub)1x{Afq(&XzJxBM*mX1jqP z;zf4yG{qg%i{L@@q%uT>DGc!-p4?%Ar`?8n@i3@gx_0g`b}*29KY5?$d4KPWjb7|* zKhaJQL}zAL$>OyueA`;__ss9Aj+btf&ZBX+h|0PT3E6ZDkj&WnB+NqHoSRvN{RGie zv~qcr*G446wPSi{6RX%BMiWH;V8zpoDTv4doV1)IwYmJ3A}upXUEwrF^HQ*64bS^< ze10@%%ugAjNevE={S^rl*bwPt#h!Kosgk5>yb|7r*EB`eOwd%4+IA|hjgcwWha?wc zq6Wh=BoAUBo)84#0?9Ifp&6D2Y!nDmoRt`ctUnZ1^Ub1^Rn)o`J|(FVLY_p^<#IVz zj>lYok_MtEh8!###TLI6Lv1_cI&Z+Xaa9WrFp3+^mRQrOe&5NuD=c8Hyz zo+z9$x}tkDh%vNnhjG=c1C)jT+}P7P$jy0>&ceW*^$lE)Vow8%bGN@xXo$U$F8LNN ziaxEl#;gq;lu?ot{u47TQ&Llc3V@Jc1eW3Z01(+BMrCAP5rLfOQ~3tRUf8%I2q4YH zWsX$%DN3cSE4(rGcyQFW~O zKRKhZGj!M-yPBnOg*!0Z?zBEW>r(UD^T-3|VMq1R0sv!eYUjJt9UEsi z7go5QRibd@SVx3^N&Gy2Z}H35wvNbpv$cMEY3oq;M7uUq{PT+#XnOkM!%_b8@z-}x a5?vESp6GqGf-!;BCH0zTF2$8d*AVDv!sV0xoMFq7sHPiRg@_O`$B(jM>Lu(I7=N7R+28 z=hb_%?pUlA*svALC1{Eo9ICjQK8-LviKa|D&g_5s%+RJ0XC6dUpt?y^G)Lwfua414$3t|41tA?o z0Ud=b3=5(t4$wS+fCD@S`4AN4FfRi@pF9jv^NfO=RnjL~

    L$7`rmZmCI$e9A+JF zii46Q1spsdA{HTk*2Y>TWc$5!1_k-LXS&#QY&u}nCY>1^XNae@5G+?!Pl;{+BvB+~ zTt#y^$O6u?g1C;YeVj#q+&I(P&&|4s%Oc;I@pMv;LT?>Ra(BK^U`V`??|UXGidIq_ zea1pI&M0w){9z5#kkd&q4WTFikq6Njgc3gt(jXC4B$yCl>1dtfEUXeuNYRLtN<_jC zLM5G$63Jmc5`z&%Af$X9o3VYY**dE0nnd>mtDK9KlOEEro*Jn_ATHU1}O9C3yV zn&Yo#sb7%}47R7OPY$QUgKRP}9vO{|4A>`Q^&+Dra+STw!=t02Mt*GOed@+egS~GS znyLfE^{0!ky088ccRL2&?ycDkt?S0E_RTMEs@I=yRWDTAVwZk?PnSL}vWF|`>(#|! zkZoJ&V@lgQ3w_$|LTB!vFkc<EIi+^ j@@?T!X?yu@xS49|proz-Ya1EdAIy9vHL83Vo>=+~Roi0< literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/folder-empty.png b/images/icons/16/blue/folder-empty.png new file mode 100644 index 0000000000000000000000000000000000000000..a02cc1c4ad946800be00b9356cc3b735ef2dc3df GIT binary patch literal 1072 zcmbVLPiWIn7|-08V>)o^#UU6nyxHcxG;Nx&Y)hNP70n!7VZ8`Tlh-w_`LpEBW)q}( z5avZZc@RD5U3XL1K?OlPcvbMI;&pmJn35x2k+NCls z>*poYbCO1ElZ+gnpebr%D)J3;1!1~^mTgyNcDA1}v~9`EVp<2fpGP%&b|XLw8*?Rd zW5pCLW@?h2h$KSbAZ*Z)Q+Gotl9@KIMDDSgW$3mEUXhtjP-T6d&U*o((@BspK?cwn zn1m@_5QH-{2OwYp$3iXv1u4Zz0MOlsA>IP3Diu|&>x)P-Q^VMoShmq;}XOo5w5$~h!So%-eXWvXa=^AZO^4+Mx)}bVVNP3c2aPBUEd{k!)~ES$=Jy7 zS(pT@fxv-G7DAEB0Szb_RfGzk)iOPfy|7AF5ulI}l{7~13;-z`l$uE$|$=U0=!G!#{vo@NeEKmj(Qc%JU*eV((zB|EU>Ef??y~_-j~t zDl&obb$9fMu)93SB^wiv)%ZBJI7!xOsh}#Q=zZm9t2Nbsy198R2fhq$(P8Q0rQ7{4 zcfQ^K{6^iT^wd!Oz|9{=x#sBcLuLNh!1O!#;L3|z1HbNW-ROf?weN4ixr5c|*671m lhwt>IKRs=(J`cyIn|;(h<>Zsi#~Z9D!_1|G`QC9!} literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/folder-full.png b/images/icons/16/blue/folder-full.png new file mode 100644 index 0000000000000000000000000000000000000000..45c9d73f6f2cfb88d0509b8787510c12861f7fbc GIT binary patch literal 1088 zcmbVLO=#0#7*5&TWH1o)QW2MB?l4@N?@QC4gx1 zFz00h2YU6SJ9rd43pxY^4|)=u-u0@mqmKEdKT~1sU?BN^@;=Y|ynma8{Pgh9*&&Le zhO;wLk*ue@_v8Tij_e&MWbxyvGM=-lxT!dZN@-RF(OE-TKt-fz%Zu+&oTB=wdZ~=d zxhtY-89~Lf3APNIpeZVzY}txhN0_dl1>H17U@384c4FTM4GkE0Vo;%`$Y`1lJQxM^rgipfi?(=x`7OR1g7l z1O{P92^%Q76EtJ#7Zk*x??>C3Aw7H+gP_u+GA8I))G!IL}@1k!_MUniA}egD3UU^ zrPwSC0@g6RxZ2h(E}}m&jf#w3uILlTz?hX90< zoDx!*G#8G+u*4Hmu7}N=tx_5A9@Zx;)X#fljRDcEvKmeuHWK%r(~%dJ^9otfk5 zoTBQcclOHDiB>|6ej91BV;OWizoLGGe*j}d^S^ORTnzA263+`9(cZyo|C2M8h+)0v z_^VlZSEK{I?P2Sa!{P8ClT3_5Mx*}i=W8-nc2-K2T3;%^4i1ui<7=CD)0dz7CU^U< z&EI;s|FwB%cCWfUzxLGMAMw3eUG(p4oZBe#r~B=`AD`C;8 GuKxxYtW~W5 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/forum-shrink.png b/images/icons/16/blue/forum-shrink.png new file mode 100644 index 0000000000000000000000000000000000000000..ed56bba7ebd462fdf9e79d922a8d74cc133c9acd GIT binary patch literal 1142 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 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/info-circle.png b/images/icons/16/blue/info-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..98aac47883d3b7966bf38ec7268d7d92313d3679 GIT binary patch literal 1267 zcmbVMZD<>19KS5VYGGRIU|Om>F7<FzD2=jSa_21qX2`A`DSh*&AbsFSrjAWSdT%%x(Hy+ff8yD-dMP;&ite`+Hy=_)BYI%GvP5E{d})>RBq8iY2UhebsT6F2K0 z6SyLWi9UY{q>MN$DLtbm>>W+#q|rf%lZka}@vaJw2vlf`ctsu3EWQ#Z=6HFucaA9n zpHs01!^FH({izHd*G-7~N#K(}0N??dq&wMQFt`S101YU>P&DJCgM25$1As3)1hQtz z1wJbz7HlCYOq6Wf;3=wHE|cX>Qa6hf&2gN=!7x6g;j>0GTdepr%iCZOpe31#VJo_Z zJB(spAGX5;@^n4~)kvili8X5>Q7C0pMKmay1eB^eam{I4b{78Q#**4rZp4687FznS zDWQ54ybUnQ-NOwzipU%OWm7>#5r+g_8djlZCxtM9Zb(^?`9wUJpy?nBf(!_RXqsbU zAOWHQfuo~rC=qCIEQJjSoqm>yMWcQuM$eE*Jl@OVDN#~1M|R3HAFTjQWfznarmo_1`Q?=* z>;pOk{u{TzgaF$uuq?+Q-{-ON|H&DJoS~fN_*b(uj!*|W+r`#L!s75i4NZ)RM&sPx zf`nl%Z&HZnDpwEpexZJvY1y}_`H+X?r1B?wmK|~rxH1v>-4&73-tQm(W!&nhyT9Zn zt{teq1ZK{!X>0$#Lvsv*lC?a6z0T{pk^=&2h&GGnv%2(S9x+Ul963%hDRc%;q8I!<|*e8=|j-R(Pk(`xIL z!L;%A_FrqCUEI)eeWEq=R@d|A*djhN@%70UPaQbyORgN)apU;KXD3Vhu2&-$g#5Qt zZ9T@F^!vFLeMiTA#`)>7$UB#Uk8ORk_Vewnx1Q+U{M&<#cdl%yx-jsnbpq~LUvPdy M$?mjpGPZNhrI%QZ^-<|% zcCrslSK4laG6ti)6jn$n>`<0NVQh@{U?}StyYw{14!eyFvbO9{2uq(5J8dEKFoE>m z|Goe3_y5)>(^E%x?;P66FwE}Kq+X$GGJXeNqThp$)=j$XC&e0>@n=cP3^AkHejS67 zYtG>cHtoeTKjLwQVP~CcjnvA=6w7ycGuGkTZa~otGd|G{Oluw!P{(tQm*ZByzs&*1 z&T+@b%CH=0xZzALg?MIZs%kCGTe8hfyaUGD3MFtcF+tmHdXdu3aT~k}-N(lQ2R2m5 ze2&|6s#cx`njc~?#>12a(-5Q)k4B|TCi6BBA%X%F1tg|WMi~_q2tn`RsI}0ZRVupC zvqhyG*B~TN1fkVx@vTwb59b6V%W}*iiYcm*iWWU$wo_hosL!C|$O@f+IKBsBMziiO zkQ_%n-3-AE%H=I$FX|%>oI$% z52m?$v7uOzdZWA>IcLIrga&q zQr1ZKIkv-UqncFA%BWB%QV!k7%95t(1qrG~R@9}jKDOjV#PlrOx9d>5JuG}7R?$Li z5z_99=46pcfm$}6=xg!G+6jt+z85Y z8bK(k*`jPnTn}sipPUKQ86j?tXPTvdL_09vZnZuYwuT3LbYem}8h6O08Xc={Nmr}w zU+Zh@>l5tZ&fd!dU-P$)vpo2Sy>;M~E6q1XaGl9_2AE4n(l>wa)C%!`qEwvH JZx&9SeF6>FdlLWv literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/infopage.png b/images/icons/16/blue/infopage.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd0a530ceb25c9120e47095fcdc9dad390743b3 GIT binary patch literal 1120 zcmbVLOK8(z9FJ_4ITb_{wxRALf(~b!d}*6Badk_ZMhkY1u3!%y%#yEb-10E_X1jTi z4Hdn(i6;e*K2bqEhDS~*|RhVD4cJ44d7)ZWH{=eVv|2)^%yKjAS zTQfyb>$CfnJXtpcZ&QeT+vnyrvb5q%5%)VKT+uv4$%Zq4K-SU*Q66c==&{$Ri=rAz zW}%3SxdW2!SP?C-iBv6@ped@WyXtEC5W-*p4Vre6{`KT34NN0RAByMLoSQ~vbN`r! z`p0?;`q+>z8g%zw&{dTPfrYRJs@AaWOVuR3z$=k`aLv$Q!2}N_=|!iCxjv9~JOttq zHmtKe3wRiT(U>3zy8*{SmSH&ta$zV)QBGo6Pi<{2d^uc$RGa!S%=j9rOgDwRs4 z5{)?CAOl5F3^+J0Of16wsExI1*!H*A85HE}p6O!Ku|dG74LBn>NfS>OL$KUjZi(3T zYl$K$W2&0VzzEA&RuI>MwU6`YuNx~``-M>#F?r-WBc4v`QQBSylidAVC@>`6NC!QW z6h#|W9DT$>HqI(Zn*50vrXi_mL4{C=u>!~P2?#|l#j32#D&DuWJY#r5gO`==F!hd3=w1+h8cm>B9u6ICR*};xq zc3hC|kAs}1n|5#x%Ci`)f;{s$GE~p8z(Rf{a|L}inqZg5EsH#qRe=}ySSBMz<8%#c z{7=pp;tUfs$FgRrUy%+Bwo9!~4oky>Y%(z(8I7@9J=0{Yrm~7$sD2puJwM;w&~)SR zbgD&}_;})S>$7!JtHABAhv(W~?KpMe?fuUWR)4>>xo6jwvv z+g@Hhzh<(1XncBa$06!^)Z7^A`PSKRb5AjSrG=q3e>#1%nC*}*wRAMTcu$p6so9+u yeoVBLxijOB-fgWut-Tzbzt|R{R)wg}hbKeNe{TH}%zQS}tK3Z;nfL=VqGX={ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/install.png b/images/icons/16/blue/install.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7d89497223936814220c748089cff955b7e4eb GIT binary patch literal 1227 zcmbVMTWB0r7@nXh?P@~ORy0!Vaf;U3?9Q3l*~<)B2Co&YN`;CKfmV7^F+?A1y+jHXM183e2oxz5(W&rDLY-J(xdcs7UEP7J=~aY51r3>YhF<*eBN~`S zhJGlaLe#2!()a9ODedU zp_iQ+P>UevcnBn7Fsj2O1W7i=#`#n#)d@JrLI!dS%SG9g80SO?!OBAuYo0MEmSknc z7LhXaFvhOPF!g#pR*%OVZ-`+9K?pfGE=n|_{-}+$AZq*D8VoY>bDVA-)GE#h z&d|iu$-tWrcAqY5TZ@{&HhYZNEI~BBq3VXT;MD@bWs$SOR+ z#{U&7<~*cf$16Kdt(iusQzLER7@5f#G(w^@*@LJjf;!;u>^!dJ*pTF?x#O}9S6Y49<&yOD7OHaaFf6rUnYq$Oy2ZuVpWSh?3 zv2&(=bkCNGwvdnfae4E#ug9ks7T$a&dzl<>=3wMb>78@i_dnI~Tr~ZX@j}PUYdfZ< zCwsy4Z6|T@)CbM&h4+8-PHd=w)31MW?~TGYyEj4i;_TC(jn6f`d#X+UzH)!7`c*!! zJ^4#}u>WrN!c^ypa!;%M-p<31?P{Jn#56^!^PkRb^{(BuasK+%gR{3xY+3wb=Hgza aX&rUi-F0O>EOv9CryT6(SPSSQ%XU3%p_Lxc1^@?y)P+c7dZM`nY0(y}7V=uS|_pyF8zxQZ=j z<-#v`oMBQo-P#6YbEl7cl{Kyx{r;_UWB_EO4Cy`$67> zW?04zcWO1lv#ZlJdv(!P9d_aj7;kHoz{A7>ZEwkswRVB+@@n*)Tyrews*uG3``W2F za|V=y2!nhUW^5=yAn{pV%*nER8VHbw927WS$ndfz3L1o<_psDjd+7qG{vWR><*L$VFY9B)&e%H1|e$-nMp3s`x+Wcjb?3Dp8`c`W(AqC0$hVsH~_I&GX1mWSCP>NzNgOE<^8QD}GEY z-^P8rF16dk%6nq9a)d1sM71DT>NnI(BOpQC2trVv%>&c2T|beNYSWl#v z{`%eUmme~R|1LlJym)uuD|YO3eXw|Ur1LO!W8aYC3vI&XHKE$^#&Ddo`Bu~Xokm(1qTtGDleeR1HFf62L1nBsnZW3BjP=>7e( zPlnRU;6`!t`>`u)AD7@q%v*=f4_9w~dh*194Q2SVpTy`ve)HPz%(v@tx>NSQaGZ_Y dyQ%$eGe`d%{p*`s7mg=?m&)Wcx?Vc}$-e~nhYtV% literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/learnmodule.png b/images/icons/16/blue/learnmodule.png new file mode 100644 index 0000000000000000000000000000000000000000..baf1f650cb3ca5f9b65024c85421e0d9b9811e77 GIT binary patch literal 1327 zcmaJ>TTC2P7#?743=t(XHnP?*4yhr^?wr}#om*Ji-5mxtWhq%UcKam5%z+(YF3ik! z7ra7?(WW(swjr7}*tbSw8ZGfwXdf`PFD7E5r97BMZPKPmZQ7<@8u1L>MPdk(oH>{I zzwi5RXWr`WYOksGS7R7flk5=FXs-3f!&}h1;r5D*rh2z6>-L!aZb7yo7E{eWh$nS< z0H&d=jtpOfEf`kysg}vQ*;J>Xn0iq5Y=TAILTC(Y*;%w?We~b}9~{t(C~@=aa|Eub zQDSc-1yWW5=CqDc8}^KLWt7oDg;$B4t$0gOKmM<^6P76E6(aOGmaa2m@DB6Jj6vs}$IaF0>$ zGxKhgK%PDbLATP{K+bj6$PK5IER;5~C|e{I1f;!cL6oZhG?LmmDD9J+(T>X$r344(9njsH~rjpm8;U>i> zfgnLuQw1r(N)*M00UH7gM^Stz4kQp`M4pO;If*HAY=ot0js{_g;=_QUC{f~A5az@< z8x|Qfq*xi7G#pnp6j;{PkZuVJHpL1F8_KR}XH0Xb+)&*)(>0x(Y2k^U2%eG^&G7bK zwNXqcS`pgXeyB>espG4O7qkuZrMCaY9j0SaC?X~}S`dzA|QR?^z%kWYp9tIp>B~Bzr2Wr~*%_IzJ64r+HCtgxy&w`1%i_c}KwjQwSf8#7zaZ@KQTM1?4NBzzVFC|{sVO<#t&V1R6Nr8 zd+o=G%2~Yq)w;vJiQeYvsfo+WO2v+27w(*twd!Gv`O|{KCxtG`)Cj{>$myY*ZkXG@jZdf4Y%BwTUHvpUs$rOOZ+6>JN_@Wuf>l5 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/link-extern.png b/images/icons/16/blue/link-extern.png new file mode 100644 index 0000000000000000000000000000000000000000..040b27462f679185f9fcd02ccfb81694928b9149 GIT binary patch literal 1196 zcmbVMU1%Id9G`eG#%gMPXeEMn+@#Wn-tElZ=I(aM^}hDj9Q0zm9C(k}?9L@?vODYU z#Jhwd*OH(Tdh9%P;8*7`cUy(inOIF1u2LRu@n>qiL=RF>_g~-3%fJ_ zng8$i|K69zMxW^0@$e1+KwoJ@tMGMK`1bbj@7`PM24DJFvBt(}oiz-ffSg4q2`o9r z6sZuynt%3lG7LbZZdYrpRz9Sf)QK6PPORy891Xy5rs)~x3}JAROxbQ)SUY!KfVPzu zo*pWrvR5F}_Q--y#urAb=E97rSVHC?9B!(dz#+_lO=s2()Mi@P;8poPJQfAGp~7a; z!lqNT@)#^opTMCQikc{aU;@W*TuvsF2cU#75|JcgDTlfK|wUZfvU^ROdY+R!BhSe3RFsKF|U4 z+}+twsK~uhpY&~B6k}GS=A1)ZR?^Y}zlmA4rRs&Gj&V{(NeLxV7%Ng9=_r@b6r7V& zdZNRz9TvsoN>Rxb^LZU%tm!F5E)=x9jBF2k~6+HNR^<=Ko@Bfk9{v2>q0a3jB}y`B9;iu-(9+!!fJ z0wW~lQbk3Vg*MjuKRFY*Gh)~rw>3-Wh<9MP-D-UCa_{|vV9(%J|BSqq0XH>x zFnbZ`$1*3r{^^0;=fGz#XICCQ-or$k`}OeP@kdU|Pl0+CyzzGLN7o~lcE2)m_SmWH z;$QvGT_bT;=7wIFLmdRMB`>ElW+vXlN}A#pEgg4RDPn7a=;$gJMX4W|WES~vlu`@rbw2R0o7p3A!-$u#e3_R zrpQ$lvp+PmN8phm>2lGO zHI=jw#jG}HhA8amS_n!p9^U{~jrBy~l+k6eNJBTE6~&5cRogI==pQ#W)i%;YMMNi& zp$+O1u1CJDZj5vH-$a%o_J(~*mvK?V0bY{^6{MOmK1AUgcTUc+0v8Y<4ER961N=b< z8BYWVAnfNE81@APe;s2pTj2FFQ6}t5JOZmvSD9NfNTjg1cmPfk$ zBFYK6rjV=oW#vuyaj@9uJK~0bVf+vPPdFH51Ru3-oBKaGqp>rz)f{&;OZ^CUptap- zeJpGY4^r{O=y)`yLtR%0!uDv452wrDO{C_V4|cbV9d5|j9hZ~#UDv+2@3dXA35Ofb zJaB49rZR4lZ-xq6&5E|r>fO0*{8&%^#L3#vACAVa+|}ufKh0IE-_&ki9J%$=r+!<- zsE*mrHh%IT|4zbQ*;ZxVbNq7XI`l1lG`iTGo<~2}_TEpdd~nM79w~n?|g3m zZ?;!74KCh0FuyYUZRyv!m->D`G_gGLWoz}q(5*>l{`2=MCtmJK@kh^Hu-*9M+{q`m d-kv-{Y$0B~I9Z!Pi)gx7VxWHlC0g3j4fMXFV5`VT`#-wqWc1F9FX`B#K_M9eNHC46r{NDHc{eItn zU!9vhJ2pBo$}r4WaR!#?J|3@QBlP|8-(8Dtr%0hf=J6tFSs`L{2UihW^sE{xAtwlwviD<g;$okT8LcXAk}O9(-3`GD zN^Y%AqCIjy>L-h)jc;24FC+mU_H^R-1}M`!9N~F;+7T(C|C~RNKPs;Th%ccCH$$6N zadC2=slyG$iv1Wg(+V4iR?)DQBGmg}n%a5lyz5&_5Zg@;`J@Q59EBtu*U^l;VhDmF z0YwCIMi5jn2MnOgP!)73W5@%JgRoKo2#TOXRRXdgKqI37DFbtg1ZBDmeSj_c5wUz5 z4eYwqZXcUJ6szS!WDy*eF?(f3Tf)pv?8lUIwye) zP>c-Zc0&8(h(Dj*oj|M1{RUL_V!sNXM+O@ZvNb(M}QS<@O)d_ucOF@F!QU zc5+XS*c)4~-W}OApVhY>-@SF>DYNnCN%r&O&#upXFbvN8^t|z4iy56AGPl=WF8^@u z)?cUYAK$q0?QdvvV*S;%qvY$(FaLb=dZ&A5;?0L&RK_Jn{jM|8`Mo92y^rH=_Cbnz1-!se*v$BedPcE literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/lock-locked.png b/images/icons/16/blue/lock-locked.png new file mode 100644 index 0000000000000000000000000000000000000000..46c96356bbf5de977058999de90edb0fd5250d98 GIT binary patch literal 1317 zcmaJ>ZD`zN9M83@Yu9$|tg}{-K4#q~d&!gBU2+M%wRe|hySp-ss zI*l?&&CQ;$%#B2YUCc(Ce zTa1zSotje8AZghML?{^4AO``*P)sPy^ZX!SAp>d1(hM79crnC^5Q6$cVl_LL7c-Jv z*TTCPS#aHwNYj-{g{p)o%bungK@fZnmJMQypfhW_suwh!V+{rgIhw7PT-`E(&!}dt zvKu3@r}slJN*R5+;5s|xrc+NAP8;p1C7PiiZExH7@ikD2vOmHwcB~yYgZ^`VPkv`| zwuI;ma;&ng;VR~j?ULGG$TzIVAS$X|M7WBwI^&@24~il_g`L+;bw;wZvVlxDCB;Y# zp>ldol#{&7Fnk#DEaajLBd`f5!#F1iOgtQwxdz8xSjcmHA~6~j!jNMaNsjU`9F-D$ zSmN-I;|*-ebX?WcP(xS8x^*nSFIG(2NOdiH(z0e64V5lfuH_W05=c%&fTC);>F@n& z@R|LzHJ_{R13?vkHAE4wrixzcpW z7#TeL#cM0K7Dmpt*RIbm41M`q%W}RAd~~#Sw0fwL-JQSF{w*ZdFLu1WG{4k!`H{ZQUwZzZ zX7|U~bJVXb*gs}G+4reovy05$Me51ZD<>19KR+uYP&!vBFry)cFo+ECHLIrl6$c+xy$uz)ayzbG#`rYk~~drP42S0 z%aXQ3(ur(!V{GC_MTUNmeHi%iK^d$Qq9BUy!^D>%=nzE|WfVq{L47VwYLU`|=bo4Q z|9-#!+jFZk(@zCQ9vdMDBAA_0a(E7T0#6+sy&`S%*1w~Xb%q02uwKWnL za;l)sfQ)4$5Rbx02__&&&`~e9 z+SkInBw2OchDcGZRx8?yMJ>BR(Sjg&91Ih|77=IBboF+`bjAk^3UW%e(QpmR1RkSa zw3=>`#GY=2P;canO4W6?$xWx9ESxr~tv4t-3Msp1>V42O@hEoQF!h>Zm6~;Ax>+Sj zVo0=XltneesWi>8kYiwir)hzap$eshBG3}ctBC=}u2@cz7)ezG7RG5>QF#usydra~ zlE6ci2H33WxVl+F16{+@-NI(}#EKak>8@qxEvq(YsF|weT29q!fXr+hXnM&oy}eg$ z921UKLAG%cl~voSgI?lAV>kWD|HaM5B$bIP89t^cOgu*RvE>~(Yc{dt37C*2IVN$u zASgI>LYzwoYFuU^4>^@rND6yGd5yNC@dih@o4w`sHNur^7#goBs2}^3iocJ@o={{83--)AZbM z_gZIz3BAmQ{dXyF@6a#4!|(pOo_-_n;oXC`etIH(d?fVs_#*-MTcl$IhQRXU7yo&9 zBqK+8U$>b)MVy;Uh1UFMhHhq`OJ86@qvZD^zEo$!ANoN4{q6MaRPo#^W8j{zcyi+E z$HU!&H#=RJ9?h=52(J6OZ>XgquKpa=Yk_!Ss(ARKJcem{Mm=Xrnc4h>vrZaURO z5JYpnPbuQHC43u?;%~>dO${&YC|5?qP6gF84-&HBj6yPRX=AVmHDl`98`wnjq(Mvv zJRo_NX5$G#5TYapSik^|VYwJ9NO4XAfZTZ~tmYXNsi>$sTKJTv#u0KQhN;zRbS+Lh z-WbD*q8M^;Tnt;p{3#o0LCp3$>kJC?b>DXk*sEs;Rl%}w!+aXwPp|DGA`#Xuk zDPsc7Wmp<8mKDaeW$mLP{O88L)_!Tqg-j9pPSw+KJu01bFwWheuWbUI6;wi8vHE_XcmDXg|d%l)744W51b_{G}HiD=WGTaWI%zIZcep8e6RzW;Qj|8{H3 zp^ZcD7NU`nE4}xhuAZKc2CW;HTIZLGXI4%=Y&&=O3k@Rcy?qPq-I1$()rQ{L2IBkD U`ONX9wV80X^SJ@#S!QJJFOCaZssI20 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/mail.png b/images/icons/16/blue/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..e099035c47bec0f1b10c46ccbac9cdb790bfaad8 GIT binary patch literal 1231 zcmaJ>O=uid9G^5M4S~?!N{g83L{Xu;^X6mci>#U1eHpXj#C5ak9y>epk{z=1(V4g1 zNkrL-(6k4wA_ygi_8|07gxE`qE%lH~@g&rPdg;X;ROmr0losNf?QRSbGVtcT|C|5s z_y3*?)x|fbCQnRK6g5>@fHkro&DO*?c~AenW0UPTo^Rl#a2a>)7*U2BHW6L%?G;o* zw!3!b9-5`7(eJ!^12?R{w_m%Zjt$* zU;!&Cqn5X@9;2o8#k#Y;>ZmR=_Xa(iYJ|W?*rrpz9VA*>Wcs`sIcL`_L-$qiYLR*F zRKu#$V)@slk*dkJq zX<-~`EZgmN^Iahy#w#qRs%pl;^EslCOV$Exr@0`R88SeWII$ODFAV66(QbwvTx5u+ z&qMH|nzz!z$u4=243b6C#-?_}a(TeUeVr`6A}&c7ki@Kj-)5PwHzCVrwV~ zJF!EmxIDAR)WL=_#X$_3Wyh41wfb&(+Mb zY;v3|0+|Pr!f`5J0wypdsB(s=n9`7AKdfX3N&%Kdm7qBenu-iW1(swHN@SVF5L*cn zYzGb++VzNCNlQ8Azu)f0oL7-97rXjBp9-ys*t2kEy$8; z7D^&efNUy|VTmVf)@XYgZ+JzzIXmu-5fOF=5e1}fF&VQTuP;0%BYL9(je7cP^V!bM z+~_O43+GDu*2pQk^z%1o4`2F{dH2zc-#)xtY+TtquFpOr908c#?)2u zB(?OE`lV;-o7DDa`fcj-hhx>k6aDtYOXJn*k?qI&ixb<&&fT20l9Ts)|LA{F+h6}Q zb-MS~=J^wc;)fq!yE*gK_`TPUUNpz9nWOakpEgI^m$z%YfW(R@=QJrDst#DP@5Ar&Jn!d0edXTt5J3To0ur-G(ek1OAs9V8Q;Xb=)-bJ+7CY&Dm(oxZgnqxD>*sSM+7OVcswsyk zW|>7c-VLaoWP^Bq%wXc!iM)_{BmgO+-6lP%^UTxJ5d5%KJ0lL_QKDGNgv1U7l!Jor zr*RFfW7@#~+_=y>ZtjLyXyBOiB8SzZGd~8i++8k|8ZvLR)yQK-vA0a(^n4u9s;Tqr zPtNsR%_=JvLP`NDB9w~=sbUFQ(2z|P8HJ)Hk2x;FN~KB>nPT3ML=z#?GE}2n5~U)N z%mO17$JlBRQ#)|*Sl45^BdmBSRx3x?rX*?-vNi62dY4cVcS#7!YZ9p0ju)iov^=NL znmF=yuxmxc2gCeo-Ua$FUxer5HdGlImLe;1p;A%v5XPfnIHH=i6lEx|`zCNs5P@4faX8uG$- zJ$k$vXQy5qO@5kLnEQD+c*yO2yZipo`~dW;&yQ|x&tBtZ*STl=GhfVCUw6`3tyWgd IH>LHxzv3T6t^fc4 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/move_right/file.png b/images/icons/16/blue/move_right/file.png new file mode 100644 index 0000000000000000000000000000000000000000..b22901893188a13475e45088cd3e1c10e7dd0334 GIT binary patch literal 1145 zcmbVMOK8+U7*4g8wp!SODAj{w1o7Y|GuiAbbZxVn#xA(EY!~d&G@0$jHjgH=ZdwGP z6}3J<^isqZdQlHr@Z#g3Cm#n9K`#ZNUc4$4q=K+c+HMso9ttB}zQyW-SPVF2VD4}&-d zqdH7LkU$)YiOFPgKM){-JQR2&L{UG1wS2jQQ6KS>rALuFZ8M{%xp&!~#go}>a}mwo9Jx6) z(V4k87x`Sh^rg^uLd~|!Zm{ZS-acRW*>h_9{r5|U9*fi0r?2gN)5J8jFas}-9ev2p QO@}{&d~d(?#)iy23p-}ZAR%%2n#fyR-Dizl^Nj8dv9vql? z@BiNa_xpd(yQQ%=w)GG80|2%a4(nyMZjau+82j%2tz)uffaa@ooJ`V|8DOB36zx5>GXb1ga`^y6p$E4X*DUT5OV7e&#VRZq*~UE zbz4lz@^wmmRS;UOR-%LBIEM-F5^aYfFg6l?ct!js~jQ??CQ|+)a>tmseLoyRstR9m? zT`TF^kq73|R+`5>7 zQeKxNMP$COVeS8uGl4lHM9uN9X6YWW4ve-Ntwg_RH(l-f=DVK73lk6T zoHwd{Rq)k~ty$&AA}TRnjN!C{(E}!2(3s3u#?TnT!6xnd=>PZo{XcJx3|$Gd zoNJ*dDv%kFb7Vd3zs*hLdw#d7kfj5s#_*_Bz$L{&R9v$r5S=lUNt8p1wlMn|^-xq} zLC=rjvFxCvT1H6mZ9<-56EsEj^m(?TP9scDph?|~F+0y+Fto14m}}uI$l6I%)CU$F zG`cvHR~M&MQDgdg=^jra1O~zi?HMzsD|sd5%7CFV3BF47FvZYcf zRO${{&Lj&(QS>=DE=Vkb?t+OGFKD`*bp{!^s-xRjw@lh+R3@xB9Ak*5wGa$Dn>{2p z-GfAtl(C*-voHi$!|>zUw{~$3{c+<+Yd61OBQ}RzYtB(gJqn$5Fv;EVLcSsKMjCc> zQWRxIw$wQTnK&cI81g5i>6(;IM$!;Qco5-$5QR|W5+DuYf-J%~A59B&j-#+#G$Hay zn2d*`B7|}}F2<7yE*ynnnJ1)N9h)&-te7gQ>*_=oBxFGl!0}iq=^zDLPTsO+>K!mr zw6NtCEt^h`@^n^Fb<;ol<*7w0BS)V{TH3J;dOyFCew03pf`8+dxhUXMGS7<~@x6xC z{wHTFafbDqZ zF5A0lv*TNNJc+|ZFS$q2K?Rer7Gd24Rz;H)+nNiWI-aP7zIeCG-(iKprni*dk8xS z!c$apd6ZB03bLUEBv&WkXeLGzL`SD%O7ajyWC0GUdX)Nj^EO4QN|ZVjN`thSfF-qO z%!1jmzMMQZB=ZW@xsU8{1WceoB$19*)@{LwQcJu7-n+*%MJ}nJp(wTNR6gBLCJYOb zp#bp9fCD7Q1eo?AVPFJCRpw_QCjJ4dA38_V^le-sv) ztxc!Bv!!Iind{dMzy5q>;izw5e!SovA-**{Xq_&SiyOJ|@khI7x(dhlzPLBBEid{A z`|YmjF~#Ep@vYvj?|anugxBYIrtaQpe%D#}I{k*daB}nci*=7DL-bTVQQu4ew%mK` S{)u1izaZ7!C(gu=O#BAS!EcNJ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/move_right/mail.png b/images/icons/16/blue/move_right/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..a306f7e61f76c3ce471c64f6eb5bb6656e74b8a5 GIT binary patch literal 1181 zcmbVMO=uid9G^{^tVs!O^kCCVpVLc=-JSO)v%53HZj;@ej9GBwvRT>)MSU~#HajHq z(V3U*WDgQFNUVZ-Y!0FX#Z%QHUOb3jpa;h36IBvLQH<##A?J3ptoD7b2GLhpmG{+TYA|IP8gaU&s+isEH`}8v&*jACh zn61H@UmBT4**-oNc(AWRSBiY! zsij&SRJ?$IYzC%Hn1djPGH6=L=kw=)2oV&ZC?GM7^6IpxLI@5Xo>>d5mfFzt16xcg z@@-0eRS-IzPNp-R@q%RmDT)$vh+>*)q{9uD;wbHgrw0rg3C+OvsqMKSX2gcKMvFZ2 zv>$@w*J_8vZg`L=mNFs2zJM}NaGW@qd?GYR=&c1Nt4Hhf0L*gt zU_-GY^G1C-uvt;?s^*z%4smH!EAs3nW7(FfSMoYSc?sr4n3EAw#4^-jDW@r@B*}Vi zz;P5-l*@`#5n(ASD+pFNQbz8-Xch@f*|8eA8y*rxv zK4~NhJ5x8ZFI_rz?~4(T+qx+yuD5R4+1I|oAC7H5x_NtY`>~%y?!7U6H)#}8A0+RV z&*;gK_KtvG9Z7=o4}X<>``JIZuV1cz^ylnfr>&J?N^5KFrBY=_s8ZV^?>pp-y|@(mlK38KEiw-q&yJkW`{bu&&*k6$8z zuEoh0B59bmlPITe?RQXne`{9l&#Qt)Hf#p6dQ4aJ}o5g#uLwQpO^b|j2y0s++3Aw7H+n#QjAYfEF ztzIuqVo&EnFzj@Cf!K8C6NOVo`-)976r>F!h-+5c^)l!mHx|`)vwb$AGsv}i9TnH3 ztF{EjxqGysKoNT*ZgX^86s1S9)LsLbUP_9S_=eJSO_Y-{nPFlajIl7vGmOACLK!Ba zlE5T5UXGSH7Q?c9qrfFuE)n4chLPlikVrPN5uS-i942K;*p%sdim9TKT^-w<$A%w? z6_XB9Jj=;iR!^w|+H#g>xjD-Q$#xE;6;(F_IVjIuv=VakT}YE1%K)?a74=2zLxzX{ zjay=Q$TdkEC$QM}Ijr`7azk{Ghzy)QXlPTAfg_;iIv#Z->h5isB}CXL1ui zJ@n%4&(`gftAD+9|IV#nX5Jdij2*J7AN+adCwuj}3zrX$&~Njn2hJDoUAuDB+;Q&M z#N|~DOD|Q`o@}NvH_-5w!>hBuZ=9L9P&>>O53gGP#R&LZl_qYiIZcjFE+1WfWdCk| z`#Z-Vm% ze+^tO-aN5(ioDGnsCoV3d+MG8AAj>cdtzdxHk`Woy!qs|=Z2;aU3}>`a5Cxqb-d-_ t`SPbf-LNvYckrvn=&A3D;$-u_GNMk~b^F@5`fTveNj0@fXB&6E@i)$asAd2F literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/admin.png b/images/icons/16/blue/new/admin.png new file mode 100644 index 0000000000000000000000000000000000000000..6b717c29fcdf047350f9d91f4c7c3fe50be47031 GIT binary patch literal 1283 zcmbVMPiP}m7@s7hwv}xP7R`#b&*=(9n#`X}Gs)02Ni&&lmZn>hfWhwCPBSmf(9BFa znV7T)PFuQdL80JMJ?OG}klh8VD|iqOW^FHviX!TvxR-)AVZoKsMYO(Yld4em;K0m# z-+SNh_x+#s@v)IJ?N7I375*(|TK5(6{Hop@^2VMm%ezwY*Ukb%;eJZ5o1v zBF?}R6s7sOyKoT09Cc6a!!{^hODW; zVic#fiV?z*r^g{ErDXDiSS>dag;GY;#1cVyNkUPqxQ?{TMhgDp#;Mxn%zOzFDOlDj zdJfei-`fPE+&$WmrHH)YF6uHWidf{eTt$JZk>Eo(y75Y~#0fE0peU9hS(@|*C@M$~ zlL8s_^Fb=g1O$JR<1{S8G6PY+5TJcLLdMB}z)*aYrGs(S=cj~$CN`m#4N=X(rd=7? zZD83)V!4t&fD0;ejfe7#)qq zN3HG&472$Xd^A(rozBc{iFL;_W^L%I(z?^LIjKDCzIl1OEnVL+d)(M;Z>);OY!J_b&Daid(C@9rnY;tZVIC8#NkQ+jQ=g zF1=hccmBeD_xU#b!|5kFx+a&uG9%~qoqgBrzf4~FzH(rn3%@jKnxJ#luKc*Xu$y58i@n`!!dm-{}>-!JhyV*JMYyD07>-C=N z2ewUjz3uIdB5Cfv+I=^^wBw#KH|M)HzKkxq9sbClAFN&dEm9m|?oT-}TMIULZ{)+D S3M(ttZz&NU18)%ixyiSn&Z^g3fY~@-e$(^W-pWNu65I}S?d-ec6R1$G9+`^ znTb0IVv>4W+d?h)pyGoTg_4I9pJL~|qw)*l>MGo&h4 z!F}#3=kB{vJMAL2ara<991pB4yfk7CIb&m(U5gZ)>Pmy z3Kea{isQ)BwGb4&P}m?=&Gkf~lo7U|6I75S6vc^aRok?R@E%_YhNam|D#BzaiqEFlR3=SF7%IYt5h>lo=2g=YR1r4q%E<0I zHvK>>mocDVX+}xYhMOJGJE&QjIjHF%(-#H>L6lWTcFMCBEe{R(B`9SLO#!R<<>XE5 zlN3Y#H*TJ0$Z$6w4zo1!eGM!9pPUiM8Nz9fe>F?<2z8*d-DrIzYzz-n(Zm>NH2(Z~ zK8j(kgLytxvVW*7t*msppIW-;nW;;OQ&Wfk7;n8hvGZ#AmCyEjaiyi(q zL#cXtHjQ$X7Jegju`JQN*z}(n5mpy;)&?nzJ O|Dt?%4?mqge&TN~)uqD# literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/chat.png b/images/icons/16/blue/new/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..77f4f6f3e25dd7df6fe28c50a42357b2f7c86554 GIT binary patch literal 1241 zcmbVMZD<>19KR-QwiK(CvPx&!9&QR2mfZ7PFKSDO2V^_Q8Q22=TeLsUl?`Jh*$_ z{=eV<_kVfrTz2NgzTTs~48!!LQ&NtO{qB3%N59AaXe)FWB2xu2Yn4b{u`!d-tRe+qG}mI#kC1Gj4DMl%-DFNs;G0AfFdsIW}JQS*_SNP zwK#h^l!2LQ5?A!pl8tAVX7cLNoEp>E@l#-|AyNVZ69qJkdD9UaadwASq;q$hW5JFI znTxZ#q6(QTNLn@qp&$&XFbqK$1<|Mwi9}8U9wNv=o9MZ{5Fgb?gKEcIqNRkt=L~@c3MNvo+C@J5;rcH+^riwd$b?SEyD?An} zCT*+`%g$TYe5V7l6^mF-#j1kjtN=2Ks+;cGEzfSW61MdPtjV@zfSvq``a%9t6#h4E ziH}lQk|4x*s(lx${hyq1R1D`f$G@7Tvqd}5o$j|jUF=^TY|h_0so=F*3N-f*xi-X#eE6V-E#>xKomd`ZTKYe=TMlp2vjcZ;|^QT|9b@x#_ z1P8uavmWSX>-US7mb1TNaHnTW1g|X*uay1W?}A&etkxf1Ry=OHeDH22awJ;Q@#wP(7r_H1hNdh_|g`{~VTQo3@8@jStx Xhv&)J)}^1^pG|sdM*3v(^|OBi1-O-= literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/comment.png b/images/icons/16/blue/new/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..030432492b2eb2fd177edf0927352c18aa9af4ee GIT binary patch literal 1233 zcmbVMU1%Id9N+Zf83IXD2x5<5$4#g~db=~5y{{#g-0p3zcbbdga?qMf;p|yh$4t!C{ltJ42lKOHw!iRASwz<1!;VcKG{GN^(Cdjb2iCEkN4e9QVdb-jr4GYKns?QM1Yz$gFP6Mgeq2y3gHe1Prf%2-O;N+6bz4zqu?Na{MmLl6Z=YVHfvzR# zGm$*Z+i6_Yvx^R%TAV1Vi?eD%qen-;a9tn-2KE$CH|9)Ns3+-NUV-fWW0nTHD&B08 z-gByyp9E>k!63rGunMCPL=l6A_*g7<3UClX7IG}&!YC#TaRP*3|DlOBN2>@0IkRtz zNJ+ZtdA7i^wOWm-4KbE8!=gkY;d5|Ym}rFE1=CaNVbkqzG050e9o_bH%LG27Qnu#3 zBuzZs3&F7S`2%9p-A@!r8CzFu7BP@D3_q@2ZPzQ{f801!+bu5Gm@Qz}ns-!Ek4k?F zOmcU3L%t&MMtIE8Nl}zJ*;3~XY8va1uj`&j<2SRw6T z#j~8EWzDrZV6tj?mRq%Kke=c}UQu<^m;LhWMJr=Re->*Q$1=cfeg*vy`w+$9f8&<9 zIONA z^&91#W^*(!vbtH==)U|_W98WSx2BET<{vww4~<`1Zoswk?+5hmw(t9929AHNyz%Px z6VxY9K9EheKYg|R^6jNkpGNgG+it#>+F5>SX{#%B^_~mwHn#hEKEM8A^(^TA;?|M1 zt)r_yO{dPRP`4hIDRnIcFLhqDY3BK|yDss6-MhMVI*UFFy>=}) zEv;9m!C#dJ?{rtsJ)8?tku_=R?8xAa4%~a+smAt+O-rP?(6`mM*HZ&j2c$OM8UGF} SfAF*algW)u$XBGNUicf$e3UW( literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/community.png b/images/icons/16/blue/new/community.png new file mode 100644 index 0000000000000000000000000000000000000000..03715e9f0a3413f97608828720e00680a284f484 GIT binary patch literal 1265 zcmbVMZD`zN9DlBrgu6p~RU$b`bNSnLGJLI%>1r5QHB#P|@)LrCsC6t-q6Q+!@b z@7Tgpf~wedji>2)y&kNGf`(b98II#z4wemIjes?)+maK|t=<-ch%DJuYqo0Wq{}Fk zj2SyYVNbV1&}!N2F0pRyBnqdDcBC531R zqB*g+{?N-;p9*|%yPbT+d&isnVc&cHH$qS(u2{*h+D>{epvCy|{TYk!eeErIFQ@J< z7QyM>532_}YH#?(GsNfLlRdtrOW@)vIDg-w(^=SHU%N&e9DATiG>*NKJoWp+^&{c2 z?(UPz)y5~erHh`Q=7qjLh*#r%-}(KGHewYtj?ecc4rbnM^W7DG7L_uyzkiiU{^|EL z4<$Daottl4>!`$?qJkR!=IR3t;QGa~lGjQt3&eI=X zeLMHXo%3fNY^J;Vza8x%iYw}o!wVPI0Mh~5yTPxIEDin`S)<*bP-bLYyf*yI3x5OR CN0m$f literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/crown.png b/images/icons/16/blue/new/crown.png new file mode 100644 index 0000000000000000000000000000000000000000..69e8fca5725c05d1e34105ebb4150c8da4b1eed7 GIT binary patch literal 1170 zcmbVMPi)gx7bZ zlJ){cWnz;iaRVd{MVipKAOYpTI8f0|+JxZ7g%jG2J4_opbkjt6Zj)}4Dh{(`zxTcO z{eItne=#zAx~KbaH^VSJ#UZ0i*Ld{q-bug5-mF2o93q7(8N+qbgaKkS8`lt9bm0Ul zBWTag{D=k^CRTSURZ=aTQ7!E9Fw)^$u20bnGceflp*4jFTSF6$m*akY{Dfm2JI8&} zUlL2cjwYR#8(BO*=+L76pw=m0Vs+RaY#~3Yw^-HBqVlQkbil$6xL0wF(>vIr7ZT`MsAJcmcH7wOd$Fn>AV_df z!FamU0V9)`;BXTAtUi`zOVDz>NRG<05v_p&=QCuR0e0E-{Ho3t_6vpo#x190(a_Db zX{0n+D=1tWYyY2|3Dg-OYL0(3OXrAoV6@$AeJX4Y5Ax{51aveWH1gZ&SUoKoTBY@> z_Sf3lVC=-|()N`m`}vz22Zxx6-b4Du4|c_`t$cS-yB)vv+y1LR#cDI(bX~Z(dLn+I zHrlweSFRmUw-g~*~ zp58XL_y_v<{4VbL)thU_N~v#eT{?B7d+FT1ph56C%AMHFJCO&-r1619DmX*ZLF)wS~qbN_ITR|g(mls%iGbcN$#2@x^y88v?z{U?w%w^o4a^- zF=^cg8;5p6@yjTc3AV6_`?3$)5JYg&72Lp%ZS;cCDiPuFn0P0D!JkQpn=fZN1KR{5^2LDdOd6b8yrg)(U1#)DeiuS{}hv zSuCO~66J|kZlHbu>;)w^YL2Fla*|f|ik6PIUanv?0R02?iYSdC6XsD-Q6t1JpIjxN zB1ec3f0{~HcvMo7lR6rn9LhmJoO*kTZnA?ZrRR5TS@ zjACA^nh^qfx*0;bl1^_EtHxHMaLUNKSRrXIMV8A}TpQYknMMD&v7@$;o2Vc%iwv!* zOSm3|gDo)5-J=azir5?On6BWWh~t7LRm(^>B_4}PUu=0ZseC! zcCb&;A?m+z3rvV&2L+Z5GuZb{to(m+Mq+13t2zGFEUhElf!21r^|7!$JV?b8qvO%A z4a}VZ!1jDfh~?^c^Xtv#fc?4kE4!}MdbhjnToxb28fZ1OujN#Wo?Y@IuzWyz6 zADg;F@;`BIn-7B3;>oCcnxFb;)uu#BbMs4!jw@d}qxX1!!*=ThIP&b*2_N|2Hc0-? zKX|8iU&pQWc~Fq!-E6eeHFwVyeb2f3tiANdXDf@>PT1X_^Iy$mX5fo^KAf=4{yP2E z>eOo@aXl6N@u{d3caJ0+E76xT&YErIG@N;majdg%EEe0ocxmYnntT8I1vY6sbJX>= oEyVQLv!S%$%Ivl$9l+KOMqXc7=)3%IpY^v&4Gswx<0l$_1Bf`QSpWb4 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/file.png b/images/icons/16/blue/new/file.png new file mode 100644 index 0000000000000000000000000000000000000000..5057159e128f1b502e3c6ff1b512025e69521879 GIT binary patch literal 1209 zcmbVMUuYaf7~gWWwoPi%R2~58s_T==X)Yt2$i<$asZJx>Ka7`*nmKB|O3~ktwTOA(g^0*>G)64|TYf?NKztjEuEB-I&1yRPnUsq}kg){LBK& zOtZ)11z7NMxMm$``*^ZFQ8wB$M#^NzM!`r+rUW)7I%wH-Cy-ldc8yo2`|y}&!I}!0 zNwe!tRSHFrbA1fr9E=$-0YL(BXjqga=@1Ygf;<#>B*c&;4+}DcVB=w_HQ$_)ORBbE zi%My>Mu;c#e6!i)n!}vyPxC01N`)MP5ThEgVAdgeE9L~zE`y2#!?!$Qxef>!^{U$- zX_k7r9)j%^3Y)}Eu#qU5GQOpIJmMg4+hJU5+5suy|J>M8J1Eb3m@nbLZTJSQ$5gZn zrn!5vp-_=}BfsWbv?zLAb&ZCN9gQ9jm|ds#0z( zS65b7$09>33)_Ebnxj3DeZ|J5`+szH9ne4e>-Zbl&a=M_Huk+pZ>Vv1}74&uH za!+RQxi>p=J)NuUj1XO7p5Jvg8Tq8{Y`ZyGOzdwDzId=-IWOr)m%s0YPc1*_yYSBG ttHb;LeD5uBbU*j|$y=TImtJPTBD3(1_3`cc{HgF~k{_Q?uVhc2c?cKZhX?=w literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/files.png b/images/icons/16/blue/new/files.png new file mode 100644 index 0000000000000000000000000000000000000000..93f6762afcaa7b7d183722ed0f450a89dbae065c GIT binary patch literal 1230 zcmbVMUuYY39KR-87iv1oN{5@EKdv}7Y;yOzT>c$R+e@xz0=+gQfd*2Wk9W+f6yK5sZ&GevIka(M3@QzY0@ zapzLxwo_#(4>G2WKr~E;6gozO7!1P*8;{3_07FBXq8SP@AsFW(3`f&o=OM8*Tdi^h zLEN#0r4(6nU5lfrMxzmKM8c*$OTlC^>2WYj2y29#1;dq_A;TH$FbK#|Y|U~t(*Pc$ zTrulzio~97hoD=Mv`cI_JBh+6qnffs!7xqfx);}$w&NDiKW^-)?UWWQL=})@)@=pX zqdM3D*nkf(^f;iha27e$^IOr@?P!_5gP65oVXP36Q)T!b*r(s724B_K>PX}#n-F6ij=ivaG{cK&7~`XfG=zf4C;3d8i6&rFU@}uHV4mSE! zESIs7?3#ATH0L`Vkgu7p>C{XMWQr`1WJNPP*(=X>v;wlV(?}Ie5EQ;RBU}VAH=gb@oaBGw=U=8jPGfw(;!R&9O5Fm*rphOGABc zeDu6^=)qTSz4vylni#xZ+ozsP9||5=RC@dUzt8l%b2a$!uVed8bO(H=j?>+LEM0nm zop`Rie5?0Xz;|`*&uVLWAY1P`{-zA~ufjrb$=`ao63pH_+uwR=C~{%r#a`{;n8U_hla+yRS;uh+^wuduDTezkCn|K7%+ZD!U{1416@!9n z&f^j`?WMC1@Ce7n=A3ecR*EN7i@1Ur=?G2NXK0Qa8Eg8cwSXz8;(5o*@-M%;%LB*G z^6w{$u;}M;&6!#b@a*z**;-z(6q_F#1tU$B5xAI|py@7pq1w#yTf8dUN5>)$wp8ds zmfv=&Qk(&K5@3)NV8Vha2vSHu!*V*Eeh)|xK@mzKk`gGb4ofP8VCUhPwZNWJOS-XR zi%D6&MyaogVx!Rz8p8q!=0&6^O2i>a38s+SCA%W zj8vOrFRZR<3QFZAEt$z7q#K%|<#SRpgOa+;NToKm;DyxmEZny1FuOZg^jfT%53or| zP$p!t-2pQ-LP=O7KFH6?plDi-7s*k1wxiW?;GDy@5fB$_R`sMiMr3+I( zetv#qFn;gRO6?TbKY8~2SH}}K!%gp{^Z4?!zSE%ITNr)x?2lIRL`Giu;oWQN;(-tQ zuH4!8#c$)C2lqd`zq;97jeiig7p|ZC^zF5uS5|w6;-7VGJn3C|IJLNTBNh9;`;C2> z@mIqFSMR@{Grk=-+7TmM@aDSq*JRK76Y1LO;6VK9K<#iB*U`m&qRbCneCyEB=x0%w LnAX3}o%#50vpdNx$$q#y z>0Lq}Y9Z1@7jKC&T2Mv3|3FL;tuky-lA07)lSXH6p z3cu!5wKxoNu1`QB2BQW{LXbo;)EiHwQtto}A}BynKw=c7wHA+2M5bE`Mtlk@Q{V@Sak`!`?Vw7n_gDHpVji?jsZ!usJ7{29E%XL7=sE@dl zRNM^>% z1!lQ>xuH;zc_Y8)TdXMh1a^%{n>e(96`tM1Ov{wDTuMVI6^AJiCesK>VisypO=1bD z@wAp~acqXgsw$ymHm@eqS%k2rN@^}ECekQ@Rv<$~m9t z)b%T_JJITZ;hIa`pyqlYSB`_CZdgtzhviv|78Bq4fS8)^+F&)mvbBkQh|=)IxUraq z@jQ;lC6W2QhBaR$X99CZ2%F=%W@#O<4h**&t~V zh4%O74x8ntU-Uv8c^G6m%R3gy@$}vcTWj+>PaLtQxFzAu*_rvi=Ghao9n0Xm-JhJv zT%S8dUmsR(7Qpf^VBzn!8Sv}1!AJ9n%pVW3T{CU`zJ)u-KfCzf=f59(4S)FKL=0b@BWoWqDy+zUS&UUZ#{i-`;+Uy9Z(9(%U=Fb>GHJw@E$tgxw=rL(TElYGg!C84pLCQWiO!|S8byJj{1Zk~Oh;V+bO$4-Qz4M9p0If+8(b zqIRYWpy0`H(CQfXVR5{(WQ-3Pf=RV(Bb!4J6W9>xWM~gNff!2EJgq9b4gM2i{G{Q-s*1R>(!xCFLH1Y-`;!-NwwR2dW)7{28p%XP?zQSWm{ zkwjrn7ecVTLSc#62^JHDQ^th4$FMYDY&(i;-a0@U{Kt)Dt%K5-2N?|p?x=6zdh|C` z!8msh7m5tAH)5A>;iBlniffG8&_Q`cqVONuv`kTzvntDGQy|NM49~Ix*9ugS%P0by zOYv%^%CQ_a$qKx{d5s=t~*@qfbKyTxxt|8k#aFb7IedMqH|Q9g=iJ%TYI3X`mRmR=U23r(FZIK{u{T# z@gUWvq*4NheP6(u|0ib*c7}EJQv=9iT^{?lXH+1ima`!3z7G@y~QTfO>?@gsL@cI}#& zJN@~kNd^Z|E>h=N;`4y-b;Hb-x7)L zTE?qgf6D%4|E8y2pWFD>fjb{f(XS50*G%8o&UNglk+1OT-kGAm!oU39D*oo5v6UaM zJbj?^ox{7+mC|32OKZRSWSIJ`Rf)gRa#YH!A3djCKX>C$Q~vsii$BOGE?z@5)2CwL zmbF*E-Yf3Qt(dJ>r_Q&pe(Zyj_qQCnHnHJ${P)Jmt`}c;`&Q#CbsKJ(-}L@E`TigE Zy~O6pBTboie~eN=#^OZD{85(OcFJl9yhBROgBAv{yQT|&xBUK>j+Z`^8AGFP8P#+j5-HOyK{{*e6R-ev zb7uNE93%*`Y!%1QSZ&>rZfkEXyH>C`PbGB$#oKUXM7z);0rxf#F*ovRsD_8TFD|MM(yG zx)g%#<#Nl!PS8peP8nC%Jx*YG&bGt27PSLZfd9C$qIOW6@gP@#fm`(rT#xeBHW=sb z`-VbA?2WS5w{TJPDc~Aa8#*Wpk_^6KP0Lg?Rni1Oit&=j#}k4ei)mitQ*j^*saQgb zw>ehAMl+Hu0x2$ML`e{UCIb;@!azn$$I|g=N^N7aPJndBfNi@Lw%fuEd>5;zKGc!x z7hQL%-2wTEi`<~%dbBzkqjS1pIiVbuXDM0$ed{1JHQ%-A#r!JP3idOZ|Hhq&CU~G~ zF%3jhiBv{rT3GY{5Luec=_PW?CJIAyhQ%zp5FfX z;qmU%_t#ziJV&0ID^pbGyZnV4jXbyTXw|7r^Cv6%st-r@-=dCl6#vW6hGPpa$lK(z zCb{d|>?|T)1;oCzLR7bjJDa)wUh?SpYoe>GNsz=vg+1`(r>}RzzeF}O0&b?q5C09* C&UT&v literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/infopage.png b/images/icons/16/blue/new/infopage.png new file mode 100644 index 0000000000000000000000000000000000000000..99cc0d6fe9d87c2fb7acc4378e2ff655a631ba79 GIT binary patch literal 1205 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 Cg@;xE literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/mail.png b/images/icons/16/blue/new/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..13483ac9ad6fa445e028f7b767a172c70ba64cf7 GIT binary patch literal 1236 zcmbVMe`p(39KSTR&00Fb){3dho>%|az}&sNUXshvEKTluHezZ_1B-&Am%G>IZ0|1K zU6)J8AWfoBnpHs{ zXDD;1h!m~y(pPAVAcC`csqB{XPYbGLP>QcZc}5MR31Tem)f9CexuAmPbTdWX`{Xkc z=vs+*1OH(CvX2t7b6l+AChUqF^)O1EV3=(owTd%pgWdfg3 zsaT6{io~97hhWt5`CVeu*+~>m8SN=GnxPrj z9wZOZ^#`4#j%>_di! z|BYK>dB{yj9G7IV@7q}I|KyCu&d`2y{Hs|yN4Nw1?QZL1VRv|ti6_R!qmgXpeRsaY50H^pk4V)|yDx7x%a3S8xE;9r z&iG%aAGkdJ_1h2Y(ZqM( z|JjbgAVqxe*qJYT9%^}gXHG?)`lb~+8#v$O11pcVyug03yTuRwIGh4kdj}3qg08iV z1M466Hu><2<@CA!nVIxDx%}MV(~nB5@&#nk7UM%;wZ(A;<@lk!aw93HaQ$PGc56c*))K z{GaFl`~Baqr@n5dz4*Ce1VQZ42p@;*GuHdW&#G-*`OuOjGzM~AZaZC zjVeMbhyy|DI`}Q{A&4z0Cz{NrSS>4R3NBbWcveY6G=li5vS~qV118!6T4mLb&E>CP zs4V%hJ+2rTOLHJ4N4j;;&|Q}hyW2#sgjMZ8eOVR~D8LlZtkSL;Y}Sv>^RjSn9TONj zuVS|Ou?44^V)ZDe=>T=%q(dYtNVI~&DJSE0ySJk>Ns$Ce6BO;B+^mykNfKRrFlbGe zl5Ct0FWQ2VA4{2Lnk9%#CWB|3xTd!fl-KLEIB41dH5^8lY6@A0YHTbp@W2ptIc>_C zidu|9i`HTKG3e<+2ueB@TOwAC#YDlB5m_NkP&i2_iWS$qwqeG>KW;3mZ6vzVfQSP_ z>(E75kL1Pz80PNLhAc(s4ZBO1VNry3UK2YMpqf$MkHH&Uk|j3Gxx*CYW=JD+(OTVQGeU(SeXF;PP-3#fJml02icP9?Hctkd!W9qpD#Fst5{p zWoUO1%RCaxayk%9O;2cAd!YmBQ<|w6DJ_k14GbC+L|L_Dt2_(Q@<5k6ffUv?1)a|? zD=%Z8q&(z*xmg41F^>N=<&h zWos^Q^yb?7=4!3y<+b_9RqVpAeZHOV3|;QO)qDT;^k2TY0Yg=jj;9}t1|yeF*Hv}? zHd}J})I%m|B{K+x<`I?K7TlAHn{oYL3 z^!+tk2K#$w)=hoaKD&k=E-vlgcP3xA(qT>8~31^;iG= zVnk|bD^fQxIcMt5D-A8GuvX70k-@^9{Z+Tii`ij|XRBBSXLJdE=+b-mZzEnV{`K$4PwkM5^RN*OBYaAB{#l3>npJ-Lemo0RK6-2Flt-VynIAb8?~(2e{)+mF47 Y4LMuWsEiW$e(Mhw4b}0Nf(H)&4V(+gq5uE@ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/person.png b/images/icons/16/blue/new/person.png new file mode 100644 index 0000000000000000000000000000000000000000..50f77dc3b8bbd2ca5c9147f40f4067c1c063888e GIT binary patch literal 1216 zcmbVMU1%It6drfmY@0MO{-8-Icsm74Av<&L?Cjr|O?G!CYnHm{x>;yM1!rgOW`|^c zoVjr~vEXh6-NxdBf-j;}v`9b%!3RNT)z%h~YQ&c!5+qdAr&iQb1X=GS*(ehF;K0ni z=iYO^^PRsrRh)XbzjuEx!!Z5%Nu@;BLI2&;L%$FF)=}v)OeSW?v|S~2)x}Ikw<{Rr zO?4KRu&OUU{RJLnm|)c?&ybnIBa&vDoa*av4b!343^O|3a8zv$6HvjkhLvKke|(+= zhMr=NM+>mv$hc-qF1dJmX{xL(&1p%U9UlXu4T%Dnn5dv(&Rd?;NUzRVpdD zEniehu{A;*iRbI}I#-WywmZwCWHRYv2tt@@guO+JsEx4Y9qJ+|*wb9YA%<-MA5pE? z3nax-rkf#{PNA?3Y34=@}}v>wV~~i68?wAj@n*%(ZPHPd-j5>(Rx%5 zb&YB6Ztuufq->;Pu0e~U&MUUIU}B5pl@v>FINi{toE*;~6c=G!fUyKZNg)e!FcVXf zC?h6vu`b3=woryJnvK9rG$A9TE>5K=D-1>0Wg}Of07reW;u=3Z}&AmhF=^u|jo^9THc{qQ`ef6i#Lz&9R zK7~1R>1cZS&i3bTWy5J%X#IZpM2{Hw^)YaB_j(PCy{I2-zqWhbd7?*LTl@C=<`1z5 zV~PQRJGinpw50XlGZ6f$a@XsDv%LI^G}!u*(MBpK(+BpiJo$F$oj=Z~pMA1tx%a>a ztL=1_1T@W#*0i4&34mqM%kpWfFF z-S}uoe)&`@+q}{@kbd{i_2TvP={s&-4fNfg&WElsO(w`Fv(-nRyMTuMe@cF0N_ju~ H)XBdAy^V}2 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/persons.png b/images/icons/16/blue/new/persons.png new file mode 100644 index 0000000000000000000000000000000000000000..08918c1e81a0f30f3602f77579fc383fa77c2cb7 GIT binary patch literal 1243 zcmbVMTWB0r7@oZ}329^FgOZeDPbM0C$j;1}%3f;?GDIQ49Bo5h6z$r9LUOws(Wj%JloMq$WmWK<+NpJU@O0(x|e?# zW&Rtt#740!iQ@zoYv0C}|4+_nEQa=)<6q6v-ohQ|O?O)#FLo~v((#S4@YSgJhu$R! z-~No0EV$p4{%W=20XDaAdE$x0zLkyD>t`?CxpMc@<_GRK z_x+=hm#fX-`+wAnhnI!=?+1J1`|cedK5*Xm#dHjeb*?kNg40hf-+0@sybvtKpVfnZ z_J8jmhyBn}Sfa2Q1m= z{OA1N_uu`(#P|dKeFypg0R7pFoX6{+_wMS&U;l4y1uy&E(V{zPR@}N`BOsQ|5`tM> zsiHhm%5yVcpf~_TMJp8DVs1=OO`TFa9jc*Q7!5#tq+u!Q6mnq+RW&0){_^psB-F|Y z@{v%E$ypMrX_=;tCY$30wK=86%H+r}j5h>Kpd(j-4Sm{hghql~=N0hYJElpvuHsH5 z$PK58xd|wlHi99F38+k%fnkG6946W;4T+08g|rk&vuuQCA{-NrvTTe?F=<8& z%Q05uqv>#mV>>J(F-#~GjEbSC#IkZ)jEPc;3q{$G%wtlngUuR_s~9Tk*wwJzO>E?* zSV6Lp;+l5BG^aZqFi|sI)2W#jlqPwYQ&i3HWUo9M(aOlyoF?z2zQ{j-D-U-Yz+@G@Wj}7G}1HI?gyaj z?yM{p8dpne?e++9&)S8a<$8J8N9B^tqo_H|%=D@Mf#9pxKhfnvdoU$&0-L2^>#C0dRXL8^jG#|b5 z=kBHBpCk|6_T4SXw*Wc}aa}=Y8R8GtVC!^gnl=mI7yq>!GndD}=cC z!An;|%?Wz-?H=-quf1BU$fZ*|KiYNcy)gN{@Aqf|O7zb}c^KI;&l(wuZhr1Md*suEL{Tj~xut z@s@UU;l;JTj(!DpyzZapKfm03s`rO4$5y&qfB+XxEWEp%{}unD0LYGx%O9p5U-%mV Cf|-~A literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/resources.png b/images/icons/16/blue/new/resources.png new file mode 100644 index 0000000000000000000000000000000000000000..4452182dda5b3b4d99b0b85eb83298b7fb434fa0 GIT binary patch literal 1218 zcmbVMTWB0r7@o~#ZPFwxwZ$}|9;W)#?9Q3V>}7^*)5*-PS?#9F?m{Boa(3oycF4}f znUn4$h@>URdU+^5sYS6+!S+EE6d!~Zij@k2jTgi|s_l!Qs95?Su4j^L6bXHBVCJ0v zod5g&`@B$^eRz0qY>;7?;lhkorfV#G_eAOUf!{lbE(b|&o>ZJVX(10Yis95SC|GC_ zmoYL{p7{(m5`pDXG{a0z1uoK;Fab5ZXxdr!mya*8z%;V# zT(Ss@u8JGx%&LbgtFu*obxD^DcIpV23}i}RVS+$lHEmxGvg{_WO!wh2$AV22vXo`F zoSH9|fa-V{Boi>M!xRK5KEY3j>2!J=2#|*y6gXap^J#fPkRb%y4@<3iMqMsz`E6TN z%CZeYT$$rqtyZEnk#M|4j+Z1UF$kuV!u1W1~V{>=J%BqJE zalESIG`k&8YB`C>bB|vPQ7#dY>-+Hrt`eqEA`QhaUb?J#$_S~~3 zKGpN(vq#5A1g70#eyxDN*1zfp_nsBoFGg$TJN4K?r1luFFPqG@0~djMl$<*;e6>H{ zc;xa)^nUc|(Pobs-MHqy+H>I2(Az(?2Rr%HYj?!FcRo^eT_`{`hU_q5GJ=Q3kzKSD#z>?t}2JQpn9}?@lkA`WuRX BhW`Kn literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/rss.png b/images/icons/16/blue/new/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..58f1b1697ffa5cb8cafa81d0ce91e1d72fd592d5 GIT binary patch literal 1349 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 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/seminar.png b/images/icons/16/blue/new/seminar.png new file mode 100644 index 0000000000000000000000000000000000000000..927ac68035c4726392f88917796297ede2fa08a8 GIT binary patch literal 1297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIh(r~ z8k(CJm>U_GSr{5x8aWxb8917`SQs|N%#)f2%rQm4tdV{>sh)v>(b3bz zF{I+wlu3KNm>or0-?!^y0(i^s(BdqjzFpJVCAYS!R+*8NQH zA~oZ<->XCfZv6L*eR}8olLp&Y?)z-C_5NDVD|$;e7w>INe8yhOE@ia(%#&1JBk`ZD uJfF|Ywz!v_c@VU|aE585>HFc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIh(r~ z8k(CJm>U_GSr{5x8aWxb8917`SQs|N%#)f2%rQm4tZ~F!Ex{YT4hM+jda>>Hu(IqhVKrC0V(;;RT}xxB#aHe{lf5T~+*$kJUY=g-GybUk z2QFN?X|bcbyL-X&Q#%W0n^in4cwb%leD3FW)rEZizot&gV3d2!uQ2&hX6g5TGq4Y2H@vD7d9KdO;(+pXy_xx2 zIv2eOzH9!Zqga!(^nuK(M=A;a|7J;i`op|y$MUSGqP<0T7VbUPla)M4$x5Tm;&Gdn)<-Na8umlQXl;G_+nB&ojEM{q4r) zt;_$!+;BJ^exUGSmvQcr(g_!)owqUbOA@lZ{H3>kq0W}imh-<~s4LO_@9t8x@9pFD a49pCf?g?w7zxyr#6=9yPelF{r5}E*BywfTG literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/test.png b/images/icons/16/blue/new/test.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd572379e78fe211b3d7f0ecf787deff389fe8e GIT binary patch literal 1186 zcmbVMO=uid9G_%kt4T{2doYoT&uJ=Dx;t-XXFq1hn4O)s)7`ck!)9v&B6N1?KeB|$H3>7iakJV?QVK@_b0pwvU52Wj=v3L@5n9$L0}5Q}FtJIyHbEvT$7IuUl18MHY&kwfGtAI%%QwtvOh6q^*{;I={?*qk zuq}lhPgh{Y*KorwEd+RMVWeg*Oq-I$4!;V9S~4YYFfl;OnQ=q8rLgO~GTleV91GS} z$h5+4I5klj1)3LNkWRvc2{RC6_#~eav)Sw+AV3~+P~dnW!Dr=^AVUZ?AC_7RtVy|w z^i5k-QrHF|zRYpWW;5ALCB0yZ<0VOoI0PXxON>^+4fl5#5Dv}2_KEGeAYwG? z-W*X_>gh%Zj$f&45xe1LqG-yvmf>@J5^|0c#kH;-k}Cekjcv8V+PsgsDh|E5z@+t< z+}{Dy+&$S)q)5GyUkhwn6k`T?=A46FQbr0(Z<3a6$-0)+c|I$`tN=4Po|l9I)S;R| z60eFmJ=5XX7MspVNG%FdQONK-(j_Dyolh5qf>_9;RIP(8yCE@L6L;*|k=+d}|3s{; z1=t{7Q1iT*P6v!OJmQ57&j;F=2r7nYyOA7~XCqpK1N$v(>4E2f_58~AHuj6f|Hhq5 zNu*=;CN~=%3u`Aw}@48w#>0Vgq cXL|Y>`}?;a+`V-CPW0C(7e~-%g%f8U17d7|IRF3v literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/tools.png b/images/icons/16/blue/new/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..f27a8f3aba5909e01df41cc61d4c105c6ccc1697 GIT binary patch literal 1250 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 Hz5V{*-_Lo9 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/new/wiki.png b/images/icons/16/blue/new/wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..89caa9845e9a2df5561f07649f2bfafaef4c085b GIT binary patch literal 1234 zcmbVMU1%Id9G^>?a0$kow4|*RI&6zt$=%Lu_C9va^=@;UHK)DgxE%C~P`bA}$t}r# zWOviM+*7Lvt@NQj`etiT@S#``K@a`0g`T43Cx@7 zEGZFHUt0Kqi~`U-W0Wg?rEo&jY%`_?I_|9aO{R1!9q&lBqYUCIgDjR5~SQ17f<21%u`aXgUwr>uUZ=E*fpr#HdaucixqP& zQGMGj+xC2?1Bx}F?zh<0GG-D!O)>U7yV{+}=J`w z{fQqxIo~=IS-tgM?G$`*w!Cmn7}O6`Z|nnWkBfh;-8=ct?_IyWJ@Mz25AVe1vg#SI z_UH!xDtOq0XU}a6WJh~muOEEtm-FFQjt)Gz@>M@r$PDf88#C9tZ#I8MDp(2$`v$>7 zWw;kH*QFuh`_zeI0eum<@ay&4{~Z3{r`-BV>xtCMU;TOoOwAwo_|)yNCoz!>sP-^d z%c0MQmhXe%)B7Xp8!v>jt9L{0Fv|8^z$@U>j~*;v8br7lek}pu3V6_0%Rj!qo(}#p N`SD5l+Sr+Qp8|H#j;H_t literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/news.png b/images/icons/16/blue/news.png new file mode 100644 index 0000000000000000000000000000000000000000..01644c4588cc45fa1cabcf0c16c8df5240ec1828 GIT binary patch literal 1296 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIh(r~ z8k(CJm>U_GSr{5x8aWxb8917`SQq$(bUM<(9p%r(bCb` z$;i~g(A32QXs8iPuV-FyNn&1dD$L$YpuJGNrg-&QITxiSmgE_2WDna$8kP~M5K*#8V5(iRZfe8UqAczT1`aljm^Q7hhb4(F1Yb+OFY-C_y zbntX>45_%)GuhDZu!Df>!AA^v6EuVuEO1m=G5LZ7>*RH6e?b;2Zt1IZZeZ*H=EE{vpXBRU~1VexJPG`*=}r;iOJMWd#c`w z{sF;T5d=ZOs|O2;;K3hYe}D%;Jb3XS)X8qQ7AZX#NaiE&^E~h8&hpaD>8VRok|a$x z7ja9h7mN4&r1)O>c|gQ6!y6sG!g_o_QYtwC>r&8+$SQ475^Uc8MCT=Gq8GM1yyM-n zd=@FBuu<|T5ok%8U&s^UuTc)VbTy1^`N!LLG6(}(zEk#~m(*!LT--|O%GOfb-&*s{ zKwh{G=5tFBM3fVdN9%EB<+eQJwZy)-R%I|W;cK=$a;oDkgE~toC@Zk!!wLiyq@X$7 zFpO(Jg9xfnQ;}9ehBc>I5Q4);7HVnGvs&0a)DkCK?sJ}4syY}9l);?B(p43irde=k zT1i-xvdx&2ycB1%V+Kq!KMfNevKSPMq{}wAEelUaAw-Gi9TCUbVWLFJ)SM(LQlJ_| zMO;JcjJN1tH%_$9+M5YgTQp-EsW0l$n;nBi?oJmf423t=?KBicA?uj=8xf6p6Wg-* zqXc1Kxpl)u$k3so!Acb&Q>#H2Iu&dpN3Xh-F~^D68Y)+fM#Cv<4TP}km`=T>m8+KfP&nQ|< z)9?We+>}LNm|rVAK_8+j{5Ni_RiWO%x^8O1_YpSupPZ?}8MSDRW6d(Y5*=7pl3yZ_z({N&dMXM5*i4c^;( jab|b&hBW*9%M93)cAj0h{NDb0t{BQ@V+p^i-F@^2)+az0 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/person.png b/images/icons/16/blue/person.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3af2aa038ae0d69e343cd94a0722b9c0db754c GIT binary patch literal 1192 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 BiV*++ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/plus.png b/images/icons/16/blue/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cbc5b7d7bf3ebb13db69f0ccf3506abc0cc32f GIT binary patch literal 1105 zcmbVLOK8+U7>?9xReXS;)r&(GrJ$S4WOtKI=vvav#xAvqG>X1Lz_%Yrfyn6 zswh5ADx%^+JSlka;8oCzf?ibgA{B}U1@WSwcoOQQ-K{;89t1s%+hoyd7)Uch}E3i!D27sZIyUFl|^N=5&V)VNmw05nRQVGkNkA?&i3* zVYgPN^~xd5CZ1p=HbU$L49#)fJ#k>!W0-;=JmUHV{`-?>JaC-?eQdKqKkfb!TNJo=Cwc@lNrCJOIj_lA4s7rj1Fj_-of);q@=|TuzP^l~u`%yDd zEM;PB1tJol=y^$8^VSiq;(u-|YaP`l11wf?L?%L;)nho-0<+w$ER+~BZ?waq%Zg%+ z8^oUQuuscIfoFdN$8|KbsF(;TS*S=*&LgBsz0icZY^X@j=1sZ9u^cwnTgoFtQuLf; zAY_=jsuz2uTps0&EF+a#*s>o{%eQe$*JZj*th^#tD~8yjB&-oK-s*sXQ9?;HN&-+E z%z=t!yMA&`%CiuyfkXEccFd4?U_QT^yNo`}=JZO79Gw?eF&Rp8Fc~iX( zX0~=fwd?-V?I(nM$MZLDKkvIX{^DDE-1(`mZ|`(1f8%uL*W*vDJDYxdx$qG@ORepE eeco8dbwKXe%iY^#@7L30$jhaE<5BO4bAJJXd0cD& literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/print.png b/images/icons/16/blue/print.png new file mode 100644 index 0000000000000000000000000000000000000000..2daf7feb2d848e250b733ea09a74c24985630daf GIT binary patch literal 1139 zcmbVM&ui0A9M7x{e@rYWlj^}o)Prc7_p-9Y`(1P6d4{2B=3FS`+h#(-?`e~cWC4K zZR{>$TMJh03(e>`4*1viT;*5Ppv z4~+MfjPVgeHu;_dpu3?k0vl5uH0-M5D~&Y2$g8k@a4hg(QH74A`KD9lLO;k74}*9N zMh%#NAc112OG+k_`+x`$6rd;|F^ZB(m#9DpmL8s2^UNWosO6SyF)7VgD0LM{q{nD6=g(CLJsAsTx4DD=zS?>OAC{SeHD91dD z6-BRV#2B@)L-SgiXE!m^GL>95nL{Wk!K4TiDTHKEg*li>Xfn!3sa&GPu@Y8I%BrOH z!c1IL5z=xQIg?ezcnZZeiIIveY~Jyy?ijdb*J5^?Scdr*R>^u;r^G7}Qf+lWe}z!u zSBML;0}?3chUEluP@ZPA8uqMn*vxsv28;PstQG7-l!AZ9t%)fp^=gtNi_G^X*8HEG z3CtNGXpTRcrFFzQFxW1)J`R6fnW>bw%~xO5@%v<%wk!q?W^X?xKQ=NA@k@gZ(i2Y2$+_Vcs5_6!8SfqZYD JHl?1u_zQ{eYB&G@ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/question-circle.png b/images/icons/16/blue/question-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..1c77a46a5e60df298722521719e1022818982e40 GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIh(r~ z8k(CJm>U_GSr{5x8aWxb8917`SQs|N%#)f2%rQm4tWhvUT#bQ&QNz>4 zF{I+wlHh}!ha3b|G55#bt}{7?}=U;nl02f zC+^kY(Btvevo0>KuJ#KQ*;>EoW9G)2bKN|04?Moa?2&&wHR-z5EyfPJOKcx@PBA=P z&c~xLC6vX(j!|y|Lzvjb9kVX_y1TqOb++w^g#Ggqv!djn2I45Ltx}V9^JaA50+*qW0*Xjo=BPT|B z)JZOxki>54p~wF6PwtfOuXt1L=mzZVYK;-xAQv3J&P#4`VbcA!&+m)txC|IB?`t}r Tl>GD;s4Vhy^>bP0l+XkKU}3D% literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/question.png b/images/icons/16/blue/question.png new file mode 100644 index 0000000000000000000000000000000000000000..d25a09438ad79e893f916c3e578f3fb51f67a39f GIT binary patch literal 1213 zcmbVMe`wrP9M4(Sxz4)!Pfs?c2tyQxTfqtH(AAgrt}2xMVIX<$ z``-8S`TkC`FfrEK^KcJEQN6iwxk%Q&;Jvq-d>^~Du9D>;oSnjxb_F+77f~tQE+ddL z)oD~jsy=(@YZRxbu8L8b!c+ODB+WJ%HPB&v(;;YzijVq^s?8t_%4piK67<@c&uL)j z3HsTQJj^>8R5ixuTr@d1QPSpSG*PEV_k*}E5dsro75HY&@+3b&Z}3WF9~`qZ*igYU z33}71seA!sY!`tM28J~lfgr*$+^`UhM)v_8a*%~Q%kg0@Dh=}zgrNP<#G0#Dq@t{} zZ4oI!S21=ZmTfc|Ok>9*w8_V4lD`i}y zV%sg*cCFI^g{qBhuWCCWGbw<)su@-w2j$s}Rz|MzBGMJtHo-=IC1V@=Bv|;LxH%|_ z5e`B=70Zf>K)12_|H&CkoMD6J_*b)Zjz|Xv+pX3o!q)I0i%g75M&rui+uxJ1x{;Gp zCI4#q&-L}uuDuHnyc7C}Ir;cPE42L0FgUT}+Q+AU6OJSgtiJl?K@U{M&Mzh7y^9~d z|D^tfdTt)f@3{be5~&r~cPq3qy3#FE$8YysKYlSe)ID@(&+`KZSYZ6Pv#5+0-)PoD z_kG&6(%*WyfALH+LRDW9-dq}6I#vVw^Q}9Vp-Ff$(U%$=OUO1E;{Az8v zaQTy?{-ey>*M2$Af}1lS+qy9jvm;Yg)Z*A|z z9Yf>IZh7Xd>&Ko+9^Q57vt1WfbC+KKfLfrss3-nNefQUcKbM0aN-jGgpGY5kZD<>19KU8&)?y&C4xCPRT*p*Q?w-rbz0quWxtz^x(kux!h%dcfo+P*S?$W!< zlE#&4Kgh-go3Ia)qBsO`7RD?C2Sw}D4;|u%={{^C(hnOVBApIF$L4%4OKOqQgXf-? z`~QBw|J!p%GwJ8uy^r@|80Jn6idi&!oU!#`^xk#*zKo_FcA{YCjFMfKO^8K{#u&tt znp}oiC>N(DFT(*0+p?hM3w9wjBq)YP%8m`$(5eWHVFUXbRaqH_Ha-T+svag*7ncZJ zEryAaPzt1~aad6YnvggoAPuuj(LB#P9DctKS@^6e-Ig0Z-Rkc!h|p3@wQ8$|jysI< zm{GIC1oHGj2wF9(mMgZkMy^}!WTCWC4Y^9uB%sWejT2u7l}c@n(6lvc%g)08oZpb& z%1>1xm4%j3GZj?DQvW)s&4nDpb__yFHpd~Vq9jjPu=OF85{8lUsxD86hEmg@ZYRYs zfgog2EecYcm1vp`0@e>0j;48k3`ii#h&&w)auUFx zh_W2dizsz`h-G*w6bk|luo5Q{6!L^}8f{(Ub&gOsJIl3egf?pz5$dRJCc0*CF5xzY zb-9ybG~f8)RPK^{Hsa}vca6Aq-9LpLojLD%-=%%=%qQ4yk&m#y=LUQ3-pjb2Tp{22 z{@cXxwW9T-FTgH-`s*WKoju-I0)!cybNM|- zet+d~*X_L*t}454RWoxl9{EJGu-z;Ele_ZQscgRa_v$yWv)W#t+OKJbC$y qd4oHq4jmu)p=Vyhl}Ob`XLJMT>v<<)522nd(8yea_& z$CxH1Vpt1jACeJ{i`DFMg;t8=is?B?BhpDW9G{^%Ze+CK8|Eybph~7~SLJ_s@C^@a zOXWWqF2bU(ks13~GaysViL%+8H8U1J`Y{-3D2%`%)Bp`<&JC4@%C~qGwvUbl9<)^G ztjcdVRVhva%?k(^PQru<3w?_v_o1V|G2TGc358UiBKY;Hy@a+9<_lE znC0&Mh9X7gjdCKeSy7BR?3wcpacKdoJiAF+wx#HrtRo~#P!?e-jZj9+K^{{D$ho=m<0AYV(EeBfL4ALdkgyzrQv_$#$p;u zc`Qj8QRLfL>;L3TV9p3pbNs7WI!CMnqwQwvGhuUhh|4A>V51?E%g5PREf;XM-1xEj z*ZTTs?BL=D*KWQkU3w(x){}SY-z0J^1SS(o1F0?YTELvbgr$N5Ob}ch}r$pHqJL@O-no8edu4Q@PI#+exk5RBLuvE0A?h^zPVBz6ZXn7-VV3LnS=wjpM2jAWE^kGNQANF@Xxm zux5XLfqE$_K5iFFxRg68o1T+2BAsN-@d=uudi!g>VNN1Um(hgnW|+@U78%;MGRz4+ z2XelOD)#VPfJWy=issy;DOpT^AKhD%34w#KLD!rqHII1AlOSON0nh?W!cMR12sK@i6m^i}dmyi+2`SgWX5A1Qu8A6UZDO~MgOAkDUUd^v;Z(<*$dcelG6-j`KE()TM z9vYHTJX6P7|0icGafXeWV?(nvjz|Ya+x6Bb!us$amrP7RMuWTYaG8wNqpYSBYwye7 zS62Gta(?>Gv%SBb`*8Y7`~26VElV-|wyxuy`^q@Zr>@Og-xq&)-q*SObl~#tv5{@B z2iQMnIt0$q)Hhpx8|yxP zyyqn}2KUMmtbm-KZUoJ;~hV0OYc7Jf}+`mv)Z@B;f literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/resources.png b/images/icons/16/blue/resources.png new file mode 100644 index 0000000000000000000000000000000000000000..ccabebae7848a73630e5064880d6a81b7fb510b4 GIT binary patch literal 1207 zcmaJ>O=uid9G{rFjcFF8$t6YVV-h@QcjwLQ?0k`JGP^Hh20LlkY-uinFEcOMF*_g5 zymdDbWG$`OgHR8Gq#)=`4^2{=eV< zdv32RzmXrmFwSvY-d;j=w!f6Eu^fB9^3Ne=+caHVqpQ&d?cjuPrWdUfUDRzUHp*e1Dz8hnAi%_smHvO=|Kl<@!9{65`zg~8r z6W2)7U)o8?>dtb*-Pv+=kDtE`=DG$W2nfZX8??gI=vMeXuffjQwZMbE3f-#k&zxFw zRzNLE2q+g}!G#J0idYm&vZ|_=fCNP-KuHj#f~XoL$$$_H9-diCybYs{tbr{iRrn^Q zu^|YZPN&!@6{BQR5OrP8I3%gSGz#f<+NtpwcDBFP^p^LlBsICj#%pSva0A-xhg{q zs+NX$fq5cijdrZ@hF7ecv*XbiG2v(sNyzG!urd4m-WR{J5xr|8v(bI9{`By0e$-fL ze|>-I=8eDJ-<|&S$(0H89Q|Z=nmd@Fp9yyEmlits>GtgC!tR*=>cd;kO?h%McX#a8 zi!*!8+2?zCF!kv1L)$s~`iGC<#~Em#95-qyC0jLM609j>mb+8c*zY;chpncq6E|&W(?)5elKtNQ zz5nm`|MrK4*~z|8I7CrYUv5e%lJ%wF?d>7oOMkRfvh?GLGM={=ab0y0CF}MAqI0IY zgo;SjSFZ1)5sK;K>`6=dzS0el1m}BT86}+5c zj-4v!3v|YI5glVeL<4a^#~}-&LL!kErg;DX2Y3$h5txvoyaWK_{9}uh-dnl(pR@4vL}}aPWMDXhggf3#)#_@&-E$3i349aIj%pbik-C*fpGD zh^NOPm`*-_LTq{MM3IznzUpw01)OOHaUE%UxQPC9<5X?0wBjJHh&;RIYNQ^EgB>u* z-Lnk^io_df&NWC;)T&}@H4|Alr=%Ei!|H}EWiyE^gb4v8co0uQDDr8L1#(;wp)4e` z@eapn*mOcn3+V|#j`3*-m8>kvnKU0u!k8iuQoe)DSsqp`4R!1q#BLiKeI{1QxJbpe zTe9tHrvnNV8{1yRcIeE!K<8D>umU+K&vCR0a*cP8o^@@LKFY6ToMIoqBzQV*g--%u zLJ|2HTU?C&J0_Ad5_lOGab*_m8&8SbddK@|71wlY5Q;*~FUw|c~|{7SYEer>04v$}J+vN`vyMy-ZlEfz1v oV>5eO($%-iQ&Y9_&s6sX>iajmhuX~WkHKFdH!-Vhr?0*DFPA-XzW@LL literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/rss.png b/images/icons/16/blue/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..9d728be73f5dd40b90e928be5ba484f76a5afd71 GIT binary patch literal 1332 zcmaJ>ZD<>19KS8PmzLIIg|^D(dDDrl$-U=tXJVVn<+^CEt4WwaL3T-=CTDvuySprD z5f?WLPIQcI)_svhoiJZNIMELi?NHI7g2I$qRK}Rnb#sGlAi_kS%aU58^x(PY<^I3l z@BjAP-jU(KwwBvl5CmyUY>|?1?(oLCHSm4s)qhkt^|~tWk|@GdO-DT0u|kYXaouOS1dI*23#}?3YrnYE}!@mL$!Pa zdz4iO#fpKVwq?==smbAVZgMQg=du0=(Qrk81Uhh4w4#q2j!=nUbzT9ky<;3h>n844 z1iRr>Mj1h4rVUUwK=^Y+kU)cEfTS6YvJs|DY(sR_MHDsN<5EE9t;+6H)|& zkU(C`3v!H;Ns?m-jv|5~lH@6okcnte;>jozl7mf-<**dZ(-JQ+JVUS~Daj#@U_z3} zF;Wl?IoiY~498WC9BArlP`81lSHuc28>p^nr%iLb*-#@z(>0xmI*1+bM0=Hh;&= zhCfpezgP`dd;4mw)tkFfL#U%nZx&3^XUy$2S~ws*wV5B@ZDoh@{&`u5OatgA;k_bZoa?|muJb?xrU zoA>>oxAqFjQEh@ucoHZEO=|96!cnlQ1Anl*}1C4;K~IyXSgsuXnD@wzu1=-l$!Jjc?hleYPI$-IcrR z+HDX`5tD@vW?FR-T@1tzM52iw1W^j&zW9P4goJ=dlq`c!j0Ce3Lo%N$?Oe>VOP+gP z?*IG!{%_AsMEZJK)<3cy!?2ccuMkD^W_vWRL+{7#EXrtVwYuY0zdmH;WdmY?q&^7o zuqqG3D3p_*gw`6ON^xxT$1S8iFX!wM4&=T#tUjjGx>s_sPgh?Z68wv zUNy1Oe&W7UaVdg_bOYiZ5;zmU3ve$@(u|vB*$&(VXg~oMMZ26d%QG$>0KE1PNXJ~BPv#j?H-;&i<2akc<#Hkmr#Y%wa>1#Y+v*GgG!urBwG>^$ zZAN)e&slx~d3rwtH5*liQxDp|nv2IZM$bpp2@G9bX+KNvk7Nb;;VaqVPZG zSL8QiqghBrp{eJL1ghfDwq;VQ3)zOX7UgiI<)UJS7!O|x#mx`5Y5)0`^^L=f-_9361`L~osAC9GHUFl>Nzb8g_JX+iX{ z!0i))tXuG+AqMK$ux47amVk9#1?kqX%&J&EWI)-{jhL=y>J1f1>6UJ$^ei6g_u!J8 zP&9jQR~yBIq7|T_jKHL5=qg@KJg=;vFLwVgZZ{JUT^=FiV+6tFVTc+wxh!Y7ob5R9 z1_MDR!1_2&K&j(Atd|o#K{xOLR`dx3g*>6`MqAc+^&`~H_HyYOq0Q1ogc_=wfv#D2 zq3=BmTeBrB1Y(6NrT*{LbI)$>>>=N@{%pE?c;jIE8=p2@cT^5UN)5#JULM?=+_?Sh z;=X9{8DOT4Z#cB6^#1N~cAUNT&1+Apzn}Vb`t=VVI@h@KpUe9%7H>57RMu54PWVqg z-!@g)bcU#$`0S}KFGNxeCwmHS&;K=FZ0eYOboPm3S09}4+`|?R-k33Otqq?yPdj$s zrY~K)x$x>cqqlYyC;xtU@}tX#PHd%1ul!V=E6_7VPbBDj% zH#+n4_}yb$&%ZV8Y%OD|FRp7~|wRQbiP4;=mN$cSSA>)If-jr=gZ!~TthyZeMM If&;~W0U;yG$N&HU literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/search.png b/images/icons/16/blue/search.png new file mode 100644 index 0000000000000000000000000000000000000000..c7187677d89c5f1612edf57f08642a1cc601a783 GIT binary patch literal 1293 zcmaJ>ZD`zN9FNw`Qar5PhqYF>kgDgbmpsYc<;~t^a%t?r(v`boJI6jW%{{$~cX?@& z>s{->t(&t$aC3+{wl9JRq7K%{KDa@x%n$n@Sn$gR*5Q|d17}rK5MQ3$?rM?Jz?0|s zKl%TD|M#368+{?t^=KD{VUf&;l0|!WxH`9@_s(Db(b3iy3>Si&Ga1x%4`Nc$nSgl4 z(n~N4_2SIbbvT4!9Sdf@5EQh%qTyJi9_o+{%SC7m8`{%wb)y0Ud;*qCJ4M{RvPj@& zF-06mYCv<-uxyUZdN4OTnm1-EhEOE-?8b*0A|kM0pyLgzYWrd%MKpOubPlg60&l7W zl@xK$se(3!ryURCNfN{izyh45Njje3IPO`T0W_chL(xo(=EOK70)V$30$KBllVVm; zTegstBFaJFiWF6^*U5UEbi5Kp3xW`GFiZ?-#QYgM&>Jz^A80cu&^J8O4NS+zLq>hV zsRbzld3rAd%gvgla^SC#+kPuqC~Z_jcPW|#l-JY=<7=ZdZF7WWt!eu~7XIh_hWvhh z#)VWC`cBO=P!%T!)|uMeP^j37LDY1w0#OxJz3Ri}2Tc?AA?Hn7uPTmFv!EShloWv= zWYH{&YMN7Nno9tV0W43`0wV(zNUS2zQi506HpfO-R!zn^iA@U$z|yp$@*GI;ip(Vx z7A;k3V>7lN=(Yjdc1>irg_SqOifIq(f#c;Jr`m3)v9c35e%W#HbS{Z&x?$R(99A2} zgrZfTXHLVS>NytPOuT4rU|${nU)+hfq%uh*&BqmmNydp5wzw{5wOZ&nU}Z^;OB^o< z3QC=jp@VGWcNLU+0XrsD$Xw0I{zP)HfS2K!~ zZ`?eeTaL_u?oUqK*DGy%@JIxZNBVDd{(TPL795}M_!eVNN5(t)mMTBLMBaXH>7A>; zW@k@bxl>tq?$AT0dtw)r$EKp}wUws}##i$l7kjR6oqPCjZi_6xUVCE4$w3gE=I_kE z`qcP~-Wz8Itu+&}+$_=Cy} Lk17}B@wtBi^60BY literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/seminar.png b/images/icons/16/blue/seminar.png new file mode 100644 index 0000000000000000000000000000000000000000..55301de0ac6f00ea9896bd79876dad5ef8544062 GIT binary patch literal 1235 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 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/star.png b/images/icons/16/blue/star.png new file mode 100644 index 0000000000000000000000000000000000000000..176c9bcbedd5d5f93a6b72531d5434879b015ce7 GIT binary patch literal 1167 zcmbVMO=uKX9G_%kB5EM52OEX@oOrQzciv29cXq~Iv-6QL3vLXX1@|PGoq3y`Ci9V* zm+mC>uojBiqKF6aP$=F4f?&KTDNQN?>A`~_EeJyJ0~CY`Uc40hCdsCy1P>jUdGG(; z|Nr~_Kj-4u=!xE4`*%?k)mt3V%4F?}-<{p$d+^-{gDm}cxQfTUI&K;PqGZdfAy9OT zNmNFLH8=Ac%28CJZdaQoQwW0^nzY?K{pZp$4Qwk< zpH7!x$yZUs9+?l&`21+aoS!m9iyk@-a*;#;9E1%JIn!<^MR|H1S0elPn4!VC3ZBZ- z8%|YAV?gx+1kx#(G+_pU44YyHc|j1q1RP``138A}lB^&NauS4K^Pve_VAZ9vrf+f) zDNi>r_9cdCHk+yDV9E<78CDd<7=z=IL?ao_x!8!3ZaC0J&`@XwwvTPk1u>#g^Ja0L zCZ2AD;P|D|7O)#`CW@qti431%Q;>0-IIeZ=5SP(EZfvU^R_1)flu_u-1}3RTeV}bj za`$nfSdn-moeFGH6k}TR%vlGyxTxi6a+9)bOVU+AXIX)V0tYi$mK8Y#>QK&TA}jM* zJ=4b6&Q=jbg;z9HPIC&&YPu}Ss=}qSY+B<9DA%?vx*;}P6SaA5!YgMuL5G=-+e&JH z4D1CJ&zo*{z*xh>UfA$_ppNsPWSF)a%W-)&qSa7fe~m0X@Eow7U&-EvAF^5a-?%j{ z3;AJ<=S7bAzF}+qpPVto876Lye>F?{h;(4Q-D-UzYz+@`$;1R?H0n2Qc9OALE^2Zm zdQz**+%i@YU9IZ@<4duLj9rB%Dy`}RTY zv)>^l-Z}WgkBLv0K7Ux~ZoE0XSV$~qw84z_d{#DS1(0B-#&M}`u4%|vpuyvh0BY|!cQ~%FT1S{{t-Ce zv$&kt*}v8r&?gRkpq?Ih)tzg7v3l)0rtor%DzrMNUycksQpJ_S@h_q{JgVJNCcga} D#ocrg literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/stop.png b/images/icons/16/blue/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..1c815daaebfc0bae650dee07e067c4a15326690c GIT binary patch literal 1024 zcmbVLJ#W)M7&eMPsHjo}Q|Z9TRX1YaIZhl~HN}Zz8iY$oBayKe`_fpgea5~Jw=5A7 z1Al>;g@uI?p>9Z>fdzg9Laa#ToYV!Ossonn`|$fb&-?kZvvqHA;pT!M2#f7ayUW+5 z{JnaGe{cOf!F*X}tv=hPLpH$)5iFk$2xy0RmvjmC51t&8bwMZ%gI=HY-3Nw8LkZ_L zQWnM>EePuyS&Y3s!oYy+29YU#e}5!`z&FLmRTsK(lZ=AR!-Q-fZuPvwJx}+=jXPjH zGdMv=7zSCmAEicSiZfn=@AGR}1Tz!1XNq&D`fdj_X+l6%f@KfZAgCb;Ra8yWZUY4( zC__a?N*QTJMKK@*r;o_h5`SoPZRb>rpG>X8o1|V6#4Ml@$Qki~j+rTPPv;?ovFn}@N9k#zc*^7q$1;+j9EN#ZGwYOf z$sae)wN85nF_F6@rQ^io^%$-eV4k~+g>pmgjqxxEcv0}aO}%kQBG$G|k^hnWz&D(x z<{+f0P*Y&7j*zZ2paZR%ts_gVJGFx2TxsrgQs!9tX+p%=3*-)x=RJB!3sub9E zlrkK7q|gm=-8ojj5Nk9Of*DPEl2xi(-Dn9b6W*2_JSxs=jEA4Ym+2+N_;1w zA(-XY2+q-ms1E;)+g9pOZP}`-E8O=v*8iWJ$=n$^Z;rp3rMTi9m~YQopC8VKheUj0 z5EG>V`uzk?fCV#XRnqm^+xH%&gbc)lCwA!ocr%8 bcc+(xFV_}Ueq8^slFwwjwPn9;>^%PsuNFGV literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/studygroup.png b/images/icons/16/blue/studygroup.png new file mode 100644 index 0000000000000000000000000000000000000000..a893cd44cc94401907656cac3d214879988aaaaa GIT binary patch literal 1263 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIh(r~ z8k(CJm>U_GSr{5x8aWxb8917`SQs|N%#)f2%rQm4tTE?YoIe8tqr9h! zV@SoVp2>G}4;%2bq$)F~G@o){%P`+?k#(2jMb0_Va66i1zXv90Zvfbic83yE*u;yyXDXM`VL zEI9ZrrNa0P&-*s6`4djF%H5ITy0Pv-!@8r(y^U{peQ00U72%rw5NYxB0}F@jUD%1sW+lNVCo^}GAv<%& znHzT#1vepJtG)<*G5FAm527GiDO7xrLZoVGeGn0FY@fe!p@)JGJFc&ceb9ml%3;Zu1f5HRX zD)2LD9qL{gFWA);A5X7Lwak@8Q?~et$3ecQFaift1N5AZ8z{X3zs0MtdAKd|V9SIq z7Wi#Zvw8!RiH|{AfC&?3AjlvAB~#gKb{t3$K@mzKk`gGZBqaqxu=DWDn{Tz1rmF4u zVygnbK&hvQVz=8Bx=Dff^CFUEIpmO}1hYs4%Puu~2{#xUGN?E(ecPipaY4vv%#kHp z;F;3x5FAg}cZuC#Cs8bAV$bkIBtX$|!nn4q1KPy@$k@|5Xf1nKY~p|{`6j!M_Sg{2 za(8b>p&?VFJn7r)QjCsD%q0iAw5Aq#b|P4|rD)}>hEO&Ivl7hY5R#=ysKHW3l~E~` z(=tPjy|AUpEUHwXTuLV)LaJ7hOXW!^okM9g#Ym+gw&n)Za7{e)Ycsz)*xWs_O4-K- zC4P&L&aeU+3xtwjfq0-iodUXH+HSZGuV*`275nyc*wTFBfUW#0_8$Hr$}!FVja!v+ zFjY}gDOqCLx3Sj$$(hK+h+%R3t5}9xtOCR7Zt1hdZu4N5b&Sti<3;u7o2;#_*3?p~ zcWv(OU@#GVxPR&){T<=_VD-Z5A+4{^Iv3~uf6YJN0Kc?S#`P=6=62*gB$LPNm z-}iL?k0WuicKa}we(cTl$VM!7<~|Ml7}-3$n%jT!t250tu(kAyZ&{tGctW??edMrOg?fwS$rY#*_V+o#F2CQYrnl8AN}=}Vkfrw{n@*t zbpN=z`Q3>}uT;;kt4~EADBdW3`q57lCy$SO_(L_XMjG{t2XBsjGxF-`_I#g<{9 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/tools.png b/images/icons/16/blue/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..9bcbeb80a9005c3307d78b2b62a8fa6f21375e80 GIT binary patch literal 1243 zcmaJ>&u`mQ9Cy==v2KNk!)PZ^U)^dN(h@)0i5;7SHSw#rAY8iC5=C&RW4|U=Ydf=F zNZJExQH7{bh4wFSK%9Em0Zrnt9Eup_u!$SowoX$SLNK^ajOQ#V6{>3K`MvM+_w)Jw z_U7!&mEocDLkz(iw^1@ZPv(L}(y~I#6rG@oLD{ovxPmQb z<@yge&oF~GU2~qy8}F!g;H9ltC*AfM6wNUC%k73`FJS_zxaRr=_K$CGv%qxnWI9^edm_ra!R3jCw_{3_b{Ai-jfN*4oZiBdi4`N2E8Z=3PrJgVI@&g1i6Tm43u~t={Xr@a;PL{kVKbW>|@J* zL@eLNeY-BT+rw(dVpT1~770Q#2$uT|HCqoz5Y>YQ(B`thux!_l<+$23CK@fmq5Bbb z^f2&1H}R@_gnfPbe{pBTqAp~SmJ<;YvLf5VI)`%BY{rg5sZ=b9MLDM^h^9`-%95gI zOBtAhvYtaMM?K-6n?4j{JSYn&!Fwn!YBU%bgGb3 literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/trash.png b/images/icons/16/blue/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..ef02a62ecae68d48f93498d95a112edd87996f49 GIT binary patch literal 1157 zcmaJ>O>5LZ7)~h`v9y#P6f5G8QcvAvlHE-<+{}f6Vb;5SfWiF5zcUeMFL75UM6LNowci9$OOmrzH}>9 zTD30fcHjv((Ggl+$j}@&G1&^Sy+SBhB+IU!=eOT)@xXQR{N=0#t*}UH?(}*@=GSK` z_WFvgIsD{#FwxQ(fk!9?EwAp!dMnSjd3AP9u0cT-tV0Mo56`Sc&XQh6X2%wj@_dcbP#48!vne#wLJ%#B zlBQ`1hb*U0wc(luaNNh)LNZr5(2_s$%8Z^%{Pj^G`!m_(uqwyZOA9s?) z(k8ZWC`tkpqqa^GUl(Orha)_1Pdlb%^3VAL`Qyr3NW?OUgGOYtDlU!gGj+J3M6nZt zZsBN!uqv9k9+UP5%hG3=^RAEUD6ktI@o5R=c?J<2*U``X>_qAKc?8XN!PB+>~^rlL$P`> zBA5nIB?#)>hMKDdG>B_K2#WJrU}4+!6FI3ii-|>xNaU^($BY6Gv=gtp2iP~K{);=4 zHcUB-in%mGayHF(u+F}mH5$xu1u6xjkT%qurXiL(EvqV;nJr{s4ytAj@gnm?Od4%p z<8`lCHz&uvF=E2rAQGR|En;Ifb8oxOM$|1Kqtg1m_Ugw<=a z=~3nNeJ~%oACEj7D6W1O2XDp-JNUT(PHYbSJh!pA@NvUGJ~+|~e{7DOK4rb?d3xhg w@7Lksvi^4P)8lIG$+w$l2S>L0KlgAwecU^I#d2?7A4z@;rKuV8qOfr5FBF|@$^ZZW literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/upload.png b/images/icons/16/blue/upload.png new file mode 100644 index 0000000000000000000000000000000000000000..e99c2239bf7b73980a584e338607f73a995d945e GIT binary patch literal 1101 zcmbVL&1=(O91c!4H#ZnM2Z~^pp_kd_P1+<)XdPM8xavAfSFnPDY4WxWTRu$Q*=(pA z!^0-Kh#ph~Pr?r3AD{=ti};BL$3Q&oAMh~nB-A%uJ9ij67)aia{GR9eeXisu&-eA5 z=phKAFFURj@Y)}~hdS~1)K){o%W;$`p(&?=>Y4`$*>K8`%vxF%7NBO#-S_~L1kq73 zizQUbO-Q<9MYYf-8dxqy6GU<}a5a4zBC-strk$dGy?#THrjep9b2*T6)39ca&wFrc zezK^~PwS#Vjh-WufrJSxh%_>=W^7*yQdE;y!u#-=rpTrVnod#MPL*`P7P*}|~DpEmFTUz*(qG|}a5>40Z^=Lg7 zb-XIgh@u#BuxtcdMEp4$X+gyHhuaJa^mWg4k?GiE$f%W_S(Ku%r`sV|ZZ5Y&Z2PT5 z;gr#V=F&_Q(3Ta()wK3e0seDiPiwz8=R&#weP`CwaXl)-Z7|N={z9Q4_C~tonYbw0 zjN<6C7PL`TNm2Mu)G!T6O$#c+2yq~=fKM=t$c_OO$h;ylay+5(ZH~RLaWO5&g#<5i ztimvgDvNS@jO7vxr^GQS+s0;XA8ED@+qx#!ZDF~6u~OQD8gjg%AYXHke6c%Y3Z#>1nr@V)yn9;@3~MJ@(E%6}S-(T>xLnf2#` z&yt^!dbQ`#^0(EmXFe`AlzSRSTp1dEveh`s64zqQe7lE Xh^~=A?@syR&v3xAnMvj4*!88qoW5GS literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/vcard.png b/images/icons/16/blue/vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..ead8509ea7dec6340ac2a66d3a96f99aec9ee29b GIT binary patch literal 1132 zcmbVLOK8(z98a8VZZg;qHy@xM8G_2%Jo-ozR%@EHu3%^FDi%RlntWa3mWRnV+YP}v z5Si}aK}5uZ7X?8SuRfSBWWqejE1QmZ3b1}CRj5aj3$V_M9opP5r{wu4jWdS`u%d20)`%^&PK9K){$Yw=$~-m z;KV>dn;6jqok|=7eKipim=LL;W{z5(Sc_AuydvKF*E9uIP0&c3T63zH%>mhVA&3N- zfW|}_5M_gGD9rPGFW?xKp&5>5xd6+HAx>l%P=6?_=IUiJucYf*_!Orq2st86SF6=v zH59bnVVV^L!RO$(0JaEt;}%kD0n6)YFeuQ|T*EWRWBqid=|vq6S7O+T(xYY*k&KQ}hD_6p+;r1Q|T$6O89qukQ~OM)aPxk!wSC}B*>HLw}WL#n00hOU8i>sVn+tSGxsMYdb8?a@XDF>XnSvQnCl^3iZAC4?eW z9jpIO&S>lm?Kj7UW@%jE4)nL{t&b1u!vifmF)khrINQA&kJbH*A{A8r`(&&ghpTzGh=_sZ9AU*_kgQkS>g9w18O;iZ<26*>Q&^x`kbos*BclIO=d`#)b_ z{4j0poL~6SeEH4C=A+iz{muP=yzr;x?yp=f`-JSCj2)OZiME#9Q0Mn+$p`ORD>usI z<3j1RL*862-y%OuyxmvXmALon$m!PBwsUitlQVK6L~h?hJbOrY%`E*q~pi50Ry@SJ=|X z(l{%dQqmVqihJm(&|Xs0Qx17hsG%t-q%C z`Dgy```{$N_|xj>h*fMo=KBnN0X8WK zs)WomJ7Ba%C<$xC2ZgaLD4Uk!#d2Jp^=Ne*ILEMU1jGev`Bj}w?88hSd^K)O$sx^< zb8=297L`nvZ(!~JlQV%iBgD<|O0zVNSO>=2jn-$v#_(W|O-#T>gqu9{o^M;85%sFSln|X3l_F?efjXva`%bebER|K%DZ4++aDiC+u&!Xe=2k* zS6r?2Zp*CPMJ`#~l_x#BF6_AGB_3^=Pi*g49Nf0lnOw=d_x17*UztxKcl*Pw-In%d z=i5KuS^DD73ix~2+k2|E^YZcX=vk@va!cFurSBJ8Kl&@gEtO>Em#9CxT_vx%S_R#m_do;#!tE%CGCZ#A?@UQMITU6e+m2PANu*ThQvQTv6s z1<{28T9ME=?tlamoXUg-2(-b09gu*H3nv7}f)IyEAbR02QJ%A;RH&+@=lA~4|KIQb z?XAkvGpXZ`9;YZORbGTuvZv#f94GH5cK1xOJ%Sfj@UpjxduD*BLc^;gy6l)uR7GZE zeeF9mOHpH=*tHeBVw~43&&isxPBwCUf~Kh1xyU!IHo|lrHElP~{PE>i3~e{^%(J2a z48Me0_Tol>mN%Aa)<)Y>8_e9(^lYRN0taD}j+~AgYEhmU@M`27U$YE7P{HjybKj{I zqe7Rw0MTL=WGo;7TH>-?PLO5!EX@NBuz+VdKEugcj@JO7hYv%n1&vj$3iY8aBITJD z#=gd~yw*YHWVukW6%sUXd_ZZ-Ry*D@WC*&3&eTbH9OF=x(;%28Ri)R$u{hUrk7-$ z<75HIJdhNQQ~4s$K|z8lR}d6k8gU$k6@?a%XVWqt~QB@L<>=1zla)o z;5qal@tS>zeSP77aSOSE&Wo_5x&j%Nc*4ewcA)V_SEQTcCVSf;jOX?PoG5hT9KW~x|{k{wfwdm*iy}iA; zu_rHX^^4%oaj>oYNbh$0(V29+l-e7cY$kR#=U<+@{C@v$UYff0;Lf>9>6OIVO#0K} z+Dz^I)b?uTi^N1GrX&+iySg{Mh8Bn={GniO#JP^yj7ObCubC3KJ|l=GOnGxvVm{f*ITofPdvQ&-l;38dvEAxk|!UizjSr#Za;dw z`p)LWPWtp)rz+gl-@28&pGYV5bBiB-eENeszaQILyA@8)UrbQ1|H66~dS*HP_mmfw K;77$5Ui}x}-IUq@ literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/visibility-visible.png b/images/icons/16/blue/visibility-visible.png new file mode 100644 index 0000000000000000000000000000000000000000..52dedc9dfae2e80b6e70989a28ada5ffbbb48b6d GIT binary patch literal 1286 zcmaJ>Pi)&%825;1p(9l}AQgn*&Fes&8vEI?fP$n3x0-utPZjDw+g20Gfv20EcndCO9CNG!+2{P{o9pkj6BDI7|x9SyC!g)zb5O z-}CqTegA!`Fn=UI^1ui|5b^w+TEzQUwC))K?N;aPKLbx#d#7~ z)eQM0uS4C-qM9|g>Z66#`I5O>H^nMB^EjApOPIh$p#j=0V zwy=~TYhma~G~H^os8*74{biaFMKR)F*#y=|1S?Kxv=dHnaKNCV!1OIIv|I;7j7G(6 zh8YrjdOHN$D_YC7FxVz{f_}1a+UU07(F_G?zo!$$H$dt7-U!>?)(*lV`p@}Y`GeAm zhv*^-+@^2hDlQ$|VQOzfkzzjvNjLmD!d29aMu2)BbX_`%owppLp}J<%MoySlGbDyk zRjVp#SwUkMfrA1IQ)z|~Sp{lPPN^azb7?I#;MfhzbBdbevpJE2Jj1A3T7XrsYI(RBap+ zj#fp!^*pL-zH5VC;w5Vr`&#aQadSyoV|g{3PO2))C&@mxx+7=JCU!gpQ;Mu4Wg#t! zDo&lq3n@|K6%MAMpruuk#-7koqwQ$C!4>Z2=(s&bSlAv!e+ZVwlI95yY|oFu_Lh?s6mzYUs&Hb zdFzg?0$6%^tI&CiDt+_R(8Ou^7clmd`~!GeeD9CRf;9Zf_rwji^DgK-^ui+@^0A5a zE3>~}pM5)i@#o9Gj&H2Kzjn`8%Kr6vKn+($Cz#Pr?w#7PPrQpKrY0|^_=J8tHW zGcWEY^bku921+ejWTBKuK?G3?icpZYD!q8oTc|yxkVBxSR&t66>zgDSJp>O9%)Ix# z_kF+L_jeY?Mo;wi4D?VG)tetti)8H!->y#bJ-F7=$N zq%>W{*ppedUavFt7~}erER-ZE#NhcT(TD~!4%Qn{Cm3uas3f#`XYgc3i@X`CXc5>(@c55!h{+ppnTgl?*v$P4Akbe2(PLNF@e`|@3fV( zKGL!4mt1$M-2r1&7rQ~#^+0w!0SdZdIiVbuXERzA`PO-4YQAfOjr_{i4*Xm!$-N!7 zA_-8@L_rkdxttVB&|9|V`{axz&ah!~ywxo2BhrE4cDwb7usuA;Ars@1(O9{EW-l45 z$9YvLHU2KYYPB*QhvpVay*HWrEu}fs@qPU1`~qBAi(Kx^faTq2@z>vOJiq+WC!n@G zf2-f2?k@gc{XOz$Fn9LKNOwnb^{3-MPG7)#`kv*!dN@44cq#ItboAJ_&8oWeb??Pv z7n)c8!gIIQBYmf-bE&>xK3k%is}GK6_C@~v7<_p6@S&HVuD1rp?)Cg|`^3@j9(8x; z*G^rl>@OCN_(Q2(D<`k%wJvF2=iF6z7kqGF&(M7NXKL{J^M3G<3a*a4xH$gLrSLD2 M&yA{ghR=NS8c-g3N&o-= literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/vote.png b/images/icons/16/blue/vote.png new file mode 100644 index 0000000000000000000000000000000000000000..9b986f9af7d75ae2646e6897eb095743c0e9eeb5 GIT binary patch literal 1133 zcmaJ>&ui0A9M32Yof|0P!KoNB=gB57KbkaQb+mnpD=c-kh3&Z4tz~fP(!*{%pq8Vmtx)UOM1rxT88?K+@e!P6cv96Qj7BUvF!Xj?Evl|hvZj@{G z#)_>w-1H@Os$)?8yj4FoIytV(YtVCYEpTjCg{qA7qG{SiRstdrfFy`gTGR|#G5}zE4@a#<&azQ~X3rLta$J*;&=7=nyUn*{K8PBE zsOx&dAxUYfk&f4Wf;wqGp6D|`9NUo_5;ySKgb~$)7Rhnc)7=ofu;MnFBp#6aaW7dk zZ9)fyg2)3Q>gpu%^--2}Fv9Z&+A*o%f6njAAJ^7HEL3nDv?7~Uad~2ose=tAioF;N z3q>oKR?$SOG46h_EaM7w-u2Nc4D6PNeNuusjzW0HbquqpnWCsEK$C!)6-8Yt02Aa@ zsEc_eYpQ*Y{jiECn>r8`T>+{nLNluYB?}9h0#&-qd>>o#V}g7e_wBmWZVxLTh&754 zMkI)8L9p6ysQG33VpfJw%E(*~>+H!{t3@4Gfm+BHq|x>? zUjK@Ab8;Mv5fui5h<#eOh>qE# +$M6Z@$zSj9#|Fg3*otnJ97M{NQy>j&StJe>< zj^7!-Fg!AJ;)V5#nLRsN{dnl&z293Z0?)^mn91`eziscZ+h<10n{V%@2y^S3X(EG>951=$thEEDhH~#|1Vq=B? literal 0 HcmV?d00001 diff --git a/images/icons/16/blue/wiki.png b/images/icons/16/blue/wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..789939d93c5952de94d905573fed29acee3558d7 GIT binary patch literal 1232 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 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/arr_2down.png b/images/icons/16/white/arr_2down.png new file mode 100644 index 0000000000000000000000000000000000000000..62a96a17847450b575a27894efe226c9a126ce18 GIT binary patch literal 1205 zcmbVMPi)&%7`NzHtFmhC#I(T>d$?s6i0$Vjc5F3Woj9gJOV=ftR&KcVOY1iNgZ)a} zYU4oLjY=!DLPDUS4hgR8Fi{~5twU(4HkhUzCfKHp(Z_7^dJ^0&SI$550F zY5GL6z!khK8nOB&eN>w4FB_9%hGf!*dq8(669OAy9fWq(3FI(MZ}7@wA04wa*igY^ zX?oMC!NLH@x;_F)hKm`TzySd=FrE-a@nyhskYhQXg?tQ(a-5er4%8o-So6(_TvWBX zEh44q5sW>VWoxw>Q;RdMKg>c&k|GYCj}eVnFyUZ5j5$GPgF!`s;aeWITn9vq`j9)0 z(=_pPGX&c!6t;++pq?m_GB(sb7BU=b+fiH_+5s-2f85wsJ19?hh%KVP9rq1Vk4k3) zOmg>lLy;o!Mn39Wq$qk-b&YWwIXJJTX>!AumMLplQG-xSa3aqMDF`J#!)cr%s1j5X zDNSf_Y=?ykOe%sDPeCC8p{k{_l9Wm2;+iV)YA%^=VDnCZb;m#ryB4uq$MTQG%2^-j z*!9b@wct%`i>O=N1mYlDsa%GNgaHSxc3D9`MSm2^UcoN3)P3yol7|L*6NVo`^R!=<^?b)op{ddt~G81xM6EuKS%TFyAH&Ai{$Ha7?5pJ;F}e!o`BuZ;GJ z6Zt=t=I0J1`junVAFSi8yS3{4r!Ve%qVoG%rt9Z>f*gEzcV=d72mR{J%el(+OY=|t z*nVi`#Om}e>BEo2E8l*`++J?ZcJ=n8mgbt;U+8`J+RF3qeDU#}(F0$eZkj)NaqYcp svuBs5Uh3#$R;l$M9faaWur2tJWP1dZXc}ua`+*vRlsg%G)!~~JM;Du_GWw&`%x{r@}7HmVve3spD zYPwtj1soud=7fYLNCJ=`2a_pTmd^lDfC4XwJQNd9R+FMC2w?YNskOjvs8!wAwMC^Y zJ4cAG@_e(|6eZ>m#RNqp!j?zODB*=8Z3Z2MR^a%=!5)Yi%{pErS(bXb z6N2lP%X`FLxSJ@NGCneW9&!Tjx^Z0F=#W&=e{SrH4r?tR@l_P!#lWKVXpFR#Y3|-{ zCcw=Sty}U!VtN*8+jXd2sKK-*DcXB=)k1(w zf`b~y3+)c5%wdAVIqZYNR2q~`%kg44F3(Q1ItrYt$TkA(g6;gO&OY`H`Q5lR8gS8& z@>)g~l(eL=ySn!O$r(?b;p66bt6ADdv;*VqUh7j~Z+MVLCnlhyQNG<;rDOGdN!M!8 z@AWrZTe;5B>(4e{zkK}Q;Poii|1tAaPbr=EJ{s=lXYPOV8*_VTrFYrs`u1+$v6*Wx z|2)AxdbrkqGspbZx_5l=)mr|u#>yXkD+^!Dch%32u_?U99{RPndt~fF>eI}nQ=fD# zpIdFLb_{fk+0Q{oW#HhGl@IT{I6X#kN6o_*R-xH5SnVAi9fmU(d)Ak4J{s-$`b|&e ohrWs6^K}j=Nm%{ztBwP`%r6_It7kX=X5*hisW_>Bm!G-uFEyfVUH||9 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/arr_2right.png b/images/icons/16/white/arr_2right.png new file mode 100644 index 0000000000000000000000000000000000000000..7d92adc229a9d6789e8533828cd72dae1c502c13 GIT binary patch literal 1162 zcmbVMO=#0l9FJ6o8^{#BYzoHs!35j9q)pO<)vawB*I{SriuRyjn!K)IOJ0_|*=`4! zI%R$yJc!{i#l04aHfO@Q3cm@4^l}Jl_8zA^&wb*x;Z}j2zFCc zsA3gMxRg7n7|4$3flj1uy97;9-92?zH-;gm%W%kY63nOBIfk~(1am~lft;I$RjY5p zgM$+TMPp*vkWHp%Kiyqd2!Rc;PS@=b$5-kJW{FoJ`{0;m=p_|AoM4unD&_KY8hMZw zA|Px45zrzR;i54~lJ?O&-~bDFmgB>mq(pfI0J`xo#F}STl!B@?Y!NBJR55lHmaWxl zkytV;=*M3m`6O zX+F-0F^*HUcv_ZILME!IGOuQYbQ7C(e5^YLY}&Pm-3FHXCss*&P{+tCA~e$MfP58U zPz(_J2N}gdhx~D8L@|YtHwg$=={{v;;yq>*LTcMJ+>A)=cnG!^=@k$?VMle z-Elk>9Zg)xw@Bu<0&#p<`E5(PCk;owAE{V~qO4+;oCho4AW@An2F&oT^ZEVIcYb z-sgGV_x;{CuayS2t!v-VPEpjlV!vJ{ttV6m`K+DVu!$cMG)47oO+wq5fS4YEV_uMBu733m zLwjzH*&$lM3JY-D>z|I`(DXpXnVxVIm)ZI#-Iu6@z=znT6Tce7YLa7?cvUh_w>gGh zGQkr$X4$D>t3(%21Zj~483#y!mUx!$>6K-93oQU1a6sUAA;ZgRkDvlTHy(zlMee9t z*3E_%S>>2tRte#_@`xq#S~fAr_ft?o~D0$K7F?B`I4YAO~7K0eufdiYm9?@-JiR3M? zY9WF)Mo|T!YO?}L;|Qa89EEgYNTe;>@q%=nUe9v0I*h#Mp=(CSrmj@kN(2!VOyWeY?UcyYSAnPUGB~KT7&Do8Mrb%U|gFxc=5loi~R*diJxn zpZBgg&{4m9_Qcz5_p~nlvMF=syy!lyd}>_y_TcfS?&^Gf{iR3#>^xfEG!Hf$vhVMB z@$M%#hLevioJx!b{KG#ic5gfOwYXjU{LFo=mtN2^+xNC#oSjF%zgPe9q2IEKa(U+B oZ0*&VqssX`SF$I6T^yWgp*r>*D%E~+=F*=>(HPK=O=uid9G_$x`+=$PU`>nK*QrV?*_}7Dv-3sP?8nP93r-B1l`aU9*_oH@G&>*8 zymdFZnDijFcqkqeiU&bZ@E}dEJs3d{!5&HvLiFHG4@wmeBC*Cd+udyrAp_^nA_8(5n6{w;fg)zatgNc)6p)|@1t3wIk+W=65$^k9 zr##=JG&BUE)9GY7*-Q|v2%@g*35O)5nMFEY^QqNM`|xsEc|+@%R>>pr2lB_YwU7u^ z5(n+bW>s81zt7d-juOLu42Ee%tAte%TdkP%KA5KQ8WZpORtp7o+ao@$pghkY8OL=D zTvo9tsxnk1sA!_7OC^Y5Q9-&`lr^jjI1a)hB+H)}yUm0vP$?Bl*`liHI%28Q zbE=}_TuFu+R9W!6z?29{qwQ@XZe;Sl>ke}1t0_woDZwz-cQ*Pp4Gqt`|jHvcJ1ao_B2ogRJa$0uITo?Sln z{n&%K%htQkgWD%7+0?D)PF?tR;=LbITO%Kw18*!{`{h&p*U^ciS0>-TS?69lwXxGE zfS(FCo*f$-oB8AjU)z52i;W9+ChyK|Pdt97esAPt`Q~MOJT-OqMQ*%){WH|M@#mSs t)Y9e-{_tYql34xt>B*zh>gbV4?&8;Pe*XJz?OyVOsm#u!FH1{T{s+{Xh$8?1 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/arr_eol-left.png b/images/icons/16/white/arr_eol-left.png new file mode 100644 index 0000000000000000000000000000000000000000..45baf6b4a61583e2d3aeccb3e2ddee39599a623a GIT binary patch literal 1142 zcmbVMO-$2J9Pc1O!J)*PnrJB)A#wfMM?b<~Tf4%D8_QVYj&|)EYoH&t4_DAcq7w0> z2TuksMll}z2uD4bcpx!eG~A2_<3W#_5Iu?b3Jf(N9Bk6Q_kZvI`~AOrqgWX3>^Rzi zVOVEwL@uGVD|q*}q3?;c4HYd%V73Cs?HX*TF2K^dT?Kf~R3|_QsQS$L*I)p{T5CqR z0xS75qGp?<8t9O|=^!+Q4Gj5?s!aljSHXl~C5f*uUJ|&WCyBH1Je_wWP&Y_@)Y+OcGm8Rq{n#vR#13Njjp@ z2^vo@BomEs9CsRLX@;g~mSWfl!--K=q-lKnA&@m!uZbmD*|vqGBvFUZ5h<$CXpoI4 zX}c2?BM3sk!Lkvg5%Fd$sQMAh>uEB`z|&mAfrf420i#;Ar(u#no^FL;I{Ew#vE^+i z3Z;zlRfl3onljBGu1#$ZmcSo3cGdREGY+6iz_X`a4b`L8(*&d3?QJMfMBa#Fu7Qf8 zPRX`5Z2}AC8FE>NNEmTh~g*#X764Q;P( zJGe9+$MdRYSb-drXDeD6xW)ybE3R$goB0)u-RyJ!#+^n1XO%=I&2zL6Po#-$to}ba zqmVOH&>Vj?OY;bIV6fe3eI)D*53tb0xM(yUzxi%Dtzxt&#_nX{m<*Eskz<{W4A+m>@rpzzS8z_ z^>kmKA9{)ouBN(|YnRB%&8$Zh*IE|eEwl~ZT0HpHZ2fegUR`^)iWOSt3iI=^=iTcm zDZDT`!iPiq$mMQ-H8dzK6mIb0{@#8n)!BY+<=`k}OLy*uTEZA}s(Ag^(#3r6C&*?51dbsx#bE_T~xyI@aZHks{)HV>1jyDcbH ziw_hL@t_Amuqt}6=+%S0iJ}+Lg9;)ZL=Y6L*n`zNX}eXScrcL6{4@Xe{qLME^z2#J zy0sMmurAjn7s=Y@zb(z=yM202CCe6^?Zl=& zYT=OW4$!P12tEhL1&Kz`8?mrj4_aP(gF!}~<{Az*Yzz8~YS|vf35s~S5Q6FC^Gn2* zx0ooBGPQk2FJ2kSq^8p zj1*^MVV0GZxFiUfXf~|K0w-sqQUjZ_Jgiz8YS=Y=y9?ONKe3|ZA{E5{&uPLiLf+0$RZQtlF?}T_VE@OtBIVPF4bR^XXoaUft_P( zE>Hjb@qK)z?dsUxK;cueMcWLXt(|xuxC`1QSASX6HJnbae+^E}Y|vWntvHvOJzA39 zHn+64?uQTCE~dt}7Ej%1p4`#>p(!P81h?dl6Hj(M2AyN^O)$HQ10%unm&Wz6jaQhb z=Tei0rv^c3`bgyFyBB9aHC>2a+g9khUHLk`^33k@H&W%uanOGK(^b literal 0 HcmV?d00001 diff --git a/images/icons/16/white/arr_eol-up.png b/images/icons/16/white/arr_eol-up.png new file mode 100644 index 0000000000000000000000000000000000000000..0479121dfcf8d28226fbce8746dca1d5df6e5869 GIT binary patch literal 1155 zcmbVMPiPcZ7=LS$k_MwKB2+>0I-wB3-FY*Uo!J?(CbKg;ak0CG%|dfgIy>_=J7(vP zGcVam4s9YulHMyZCp{GPQd)#Uu|?5?R1oygi-#QSq0) z#iqS@=}$ZcKu^P|&5)V$mx|@P88gwz#BM;*0E~^tfoaWQ0_%9z@$$^8yZ0FA*m>rw zY#EgU4L6-LOCg?Ks?@BdIZL*g@zZcDRw#jsi3wx3dA*p`y4aEz5!179*RDhDcChMuv5FRAllWoH z_gmc#m}>gOkD7h}wdpJ@o0j7xa#Eh%XmuPq3)nV7--SE*Rh)h78`8URt2E%EAr{n} zgygKKG99e_Avt5IGi=fvZ#7Hzh<0GI-D`a+>rs z+uP$kUo5Y!6z(5jHt&6V?yAt+*LUpXLTdO&^ZwyClc@?7ZT*_@RxR+?aQ{}}^Nq&jdZYP$&o3u#ga=2KCZ6>_c(wV*S@7b&i557bJ%aMB ijo$Uo{$BpaSOz@+mEzXNk#iyWEtHBC{inj$mtO-N+-_h1 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/breaking-news.png b/images/icons/16/white/breaking-news.png new file mode 100644 index 0000000000000000000000000000000000000000..67ad8c984df896f536029614aedc1ba9adf779c4 GIT binary patch literal 1172 zcmbVM%WD%`9G)~ZTD7(6#@D5X5icSpbIxS)8XKEwCZiEkLmD&-MJF?-&Ct%nnNyRN zyQqRx@8TljLQuHef1v2%s;Ho1ec?huH@XqKaI4}%6t$jdn<`RVI52Zw-}n6<=l7da z#lD^G%hoSr7^XeHOD@r|(|?zS=(p?rj7o=fBv&E*_5i7?E@mX%u40fk)j?dssy=$; zA?{|F;DAxCkV;{XsM%&j^)Zo#=}F>;T;jkqVfYsGwmETb|fRv$MJ)o%`Dy3uYl?D9z3}RVfrf z)^;(7MPOKiaR}llf}%nqk=O=!h#&`f4)I}>5Tm>ZA(($yYR%OL#FDJc+oG#9TO-5~ zIj&x>N9xgt?GAD%l}h;p{grr&O>0Ah= zQz$G5Ti$%4Xv(;T>ToCmIn(sxnnio0gulD7DB3HJI+!bA&mM6#dLILunq->0UmNm) z)EjZHYtTzkhhf;=z9qB26VBBi8kFCR;ym@H6HzRAs79#Jg~H|-kK?mQR$k}GCitPt>_e1KNL%Ii&mgNT_}CJSZE$>(T;IxYuq?fKTF$cDlbdr#*6CbnVFv8 z=J9tuC;q&(qS7{X<>8Y9BK(jE+Cy8m4pyl8}ueaH+mt0zv}#$fW^^vr!9+WHXN&p2?T?L1ruUr_4}{A98KKr`9`q?!mYxr+IW0`?yxhJ)NgQr@cKLZ` zqqOI5{aENhu9j&FTw?S2Rkhta)_r9D3AC(WibEaO&b-__=>I43xjuQa_wey=1K)If literal 0 HcmV?d00001 diff --git a/images/icons/16/white/chat.png b/images/icons/16/white/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..ea75a912c609db8fbd6988cffaed625885f0dcef GIT binary patch literal 1123 zcmbVLOGp%993S#QXd6;NrbN?7bf}&AW_I>9xY@X~tBZ}=x|9(`P+tEXW zU?^6IUOW^)A4RJ8ufv#^#RiaPaN zJ8G9t394n#if==EhKg?A99x9N0F{ zoKpvS)VM~~ogiyH0TUPyDWqrgny%m_s5M>z@BM3rBG*h%Pl8%^s$Fg+la>R?Fb#q# zhyXIe(rk#2Mx)0`4zPd$9K&)!HY$WT0RVF2p|F~xbqZN2y`hCq391_*TVR-cK2PUE zwB>X$Y&;(KIXEteErM>pi4-qrx-|s`3A(DI+eo)e(q~jUtUi>Wu&3)G7`7~L5}WQu zqHxL>Pq7)628?0&ajjXqC=36%v8A<}>$f43g|5}-sJI@TH3cxv-S$GhA@)XSadcc1 zrB|}lJ_DL4BPA&Oht_mWNGGFdmW}ct%7I9XW#e2uNCPn<#aWS$r6UE7t+1k)N``qZ zB8Ec}%Svf6E+*@_aEuL0JSOD|*o^5S#Z+NISI4>=*zmSkA?ZK`Sx(NfdJ7%U+HE1r z?Y3+(*~XKyqUxr9_RF&#tppwY3e?h$Wsqz674$9i0UHDV#w~F%z^5dhk8{}fb*%P3 zIb*OhjNcr8HA~?Ncc8!BY<+y#93E)miE;2~fUdwZJXRAKNz8eRPbWSEu93T>(U&7N zlP^kErUO$CUC>q%e7t9n|9)hD_1gzOTZe|{@9(bq^`msL`q-ly9(cE4Gdu2%j_QZ-Iwu>&-gK0ADrfo7YnYw8~ ztQ7^3s^Gzk^-mB5D?$$^H%=t`2I`h%YN2dW&L!B)pd^u8IukYkhk?=QYN}NasDOg5`@h| zR;9|Sg%g@VZAlMpq`-DLS`fOr16Maj2?K*<*mBb1*ZF56u*|f0I#z%MH%n^P@kx*L zPZlf2d(82*AT2KQYJ4AF%OY4dVWVkr#i?qc1hUj4ASS`6 z0pk$Fk%T(cL?UqnC=fvzDl$@{D4}&K8iZi=5xJUY4ryhaTh-#Hv{+-z)nvI|uS@k# ziF(5_N~KaEhoVHeMbw{gm>xtOKhj{p#5X+4WfpZn$fys}ah4Xjrz;`YZlSP7?D(sR z;wh5@-Ib99W!nzpTDJCCnf!5MU2DHG;S#w_d^+wKydFc52AJn=W1-NHd!wE7EM63S z3{zv=CJxKvw8;NRre$imY$AtHLWKzh#*+x8lpdIanK(|NjGD~F8yxFl<5?8bK&eI<^=s4x z*?tuibi;DOb6B30Xfg4u3&hNM)CSA>)vR^&Axgr3Z0kJVHjXDY#m7k64)rohgt!+~(?Y4J(q z{md);W$qrxU4-xO!u?AUsZC!!v~+v^`P}EWZIPyXk&n&wj(u;pUz>Pzv+ePf()`0O zM@lrkZSTmb+1*>t&fb7`&B(|=VN)M&|1{WA+lzKRS)4gMF!S^Bm1o~x_x(7t^nKy! Y4k%R5MxlN1z?*Q!^Swpuj)wfM;rhm0krERRMbX;hPFx+NpSFbWPusd9^I zwih!mug2Lz$$&}br(wcE8iRt->(gCkiQLmk2vOp?r^InKO%zX=oO_9kBq&Ew5!cu{ zV;%CxjWeyY?p{LV4$0_l>hpRG7D_PB-T6X=A@|07l7_q}-VUbzZbV|%#+JzcNI@8w zPE&Uf(p9J{P-`G$C@au`wuTL4s|`mhInKgrSjAAQJ9fQ>5yFmb*v%EC-avJ%a#E$l zw&RR>u}@0fkn2vdt#h$vGbJ9QX_wNSvIEwKl+kQR6VTjHf$RBUT%3#YOrpgk4PTJJ zNofSe`8C5c^dV}%f8)kV1F9{os)oXSpJ0Rk$(hWZk&EW|t69n`-hsvTwDtMnba+V2 zCnn{iaTIRe=VP_l#&$RV+W&R+;*}f1y~^x`%h%t$#ve}(zaKoEaprE`t$cX3E Zz-QsXx5|8Yc;{s?kL}hPe!ueU;5XYSHqrn9 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/comment.png b/images/icons/16/white/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..a57a2b98197fe2e5414ceebdcee256119d287816 GIT binary patch literal 1156 zcmbVMO=#3u9M3q?Euy=F(o((5Gu4AzCwVWE`3fED%%ss-cWRvuI3Q><$!jOH`DpU$ zq+MC2d(xW+*^3||9z6MlcyVDBbYayV1yR96@my4PsUnUqZKsM94+fI={_p*NzyEj6 z3=bXHvT4UAhGDi856We_MuNAqgMOoLTPj_)lffz(vByY5bup9E?HUF}Qys@;tm-pU z|Kfgz36B|-Dyf!!l{DMr)If*xO^2cxrhmY9RBZwiP{ZSfm1P(2{LKPG&$34oC0KF_ zxNaPrb@9mTP(_=a&@wtZun+Y65+yJ(QGstxTAt)**=1gd?t^2V1&#M39F9kAxUXNpV4f5Uf5dwdU$$Qdw43ZBZ%9)(LSW zo^Lc7TqDle?l_M!nM}YT2r;S=^JXlf`Z3GvZ8ON&(_F(LhHZg>QLWk2B+F7yS3)qI zQfZCY@>UZ?Q^xzM!y^vzrWwSwtnHC9{_MuO+FoVG!F(Be_Oz?fdW`k9!8CW@HWVmQ zZ=}PnL5reJ%CxlFE*7ZPcdkVQ%=w6R6YBdVq0wq1kTUBwFD#7YGhtHgFIwmsSI zfZ@7LY_D!RpfDnWlByY2AP41HiB`t0aT4o_Ynxy>zml$qhh4aGrO6f*+# zeFdw3PtJJi3?DSd7tPW>q8%7)*IJ(nYr}&rIx#LCjSH3C_vl#ND$2Qv|E%`D)fxzg zUi^5!^|5f*Br{4R$D9h+hIZ}iy}4^!X#UOq4?mr5?SI#E`$hy_44qz>Tk4BEVqW)c z?(#oyt!U`?4O5}y^wQ>PE86u}?~~@sddK6P51Jdq`HS^);6d|wz2n6{ugdwkAHvDY zJq}ZP``f8KUB~h_m4$2f&X=8~=%4?;-1@NZY5CI6kwf7r7&)=?+>z_snO_#8&Fa~? j&SqbHeiUqFHuf;x-3!OA{CB(-{1=LYL-N)9=pUZ||Fd(W literal 0 HcmV?d00001 diff --git a/images/icons/16/white/community.png b/images/icons/16/white/community.png new file mode 100644 index 0000000000000000000000000000000000000000..936db26f3081294c222b42a7cf1daf5af287f50f GIT binary patch literal 1159 zcmbVMO>EOv9DgMYP@xNA9TJFjZw7>fNc^7b#EDfeByqAv!XTKN|zdN?E@5iq?23z*g$`~E>CTPnD2q;=!lfar|OcI?K z*8I8qWC(!7gxwgUW7-MX^qjO2>!c&cXJ`P13XyM^(}cn%nY3MndvW^?2W?B?KF?@K z^UGw)9&QI@v^~-=+tX&=;tHR_p-5%~4xt8&oEbNiBZXV#mDxT%<~g{kLZ=mO&8ac1 z4$EFZU?z=HCdwk1#c4b!N|JO83J4<}2|N~3Sds??86mj-aLig@O~|@hUAM&~g`1+( zmwCR`YNcC)X)l=MaXz1qIRqiaG*aQbON}Vyh6lS0DhbWN_Nnc;FlIEG-Yiu(=IL4p zj<0DO#BR8rD3&rlGJGDV5$`y0T&vn4)ye;EY^ohL=6%BJB=lwjlhtG5U>D4C_jW_E zBJ)N*8Q82S#*FHjvkq}-O;tE{leTP2u9l@L#*&C60cCR-=YH~KtX7NpV!0$_ayX-kj8y1iYi>vl*CbuLHnY2qmEMY#%Kh-o|E2TWuMWu%!Q4j=Ec)BP+2_lhe~N{B?>*FY_~4JW{=uGI=b?01|M{od mwqwViT&NuAf3f`n2JkLW1`;R#zBQhVe+{+Dh`Lxh^UZ&f32qVq literal 0 HcmV?d00001 diff --git a/images/icons/16/white/crown.png b/images/icons/16/white/crown.png new file mode 100644 index 0000000000000000000000000000000000000000..52bfa687f269f696478f9cd8ff72955162a3a2ba GIT binary patch literal 1109 zcmbVL+iTNM9L_G5IUU=Bf)m7;=}@rENqS9Kon5nT#dVIZXoWp2O-|RiB_}3lYu2Yt z&^aGu%0R(~fq#Gu9|YNh^G#9EH$eq2dk{oW5nn`|C%sIOu?GXmx#ahK-|sp@y-N1rfk(TOr;UXkqGYnGwQCU`u`RGiADhUhr5ARY7p zuL44V4skxt9|(uTM`<2#fCW6u@m?-0`gsumy819g%~JDXT1r&4$SKMcFg8V&Ef$Nu zqTh$CF_seq!R6q2FR}32(*~9uuVHu87$j&bmS$oN8MMnN=g=gMGQ`tL2)da{Z4euF zHBlsGtRtH&=L4*+yK$ARZJdUG+}PCG&Pvx!YREH6-4MCoPQ> zMV^q5GO0rYC#5Ju{`gc)6%+Arg5$yg5avNB!f^uM0}>z>k_0Xmh$KQaj?J)wp9e7^ z9Et_~630o2m=KHi@WBWdlmdj5uVIshjb%fDHC>J9R6SY zb^)1md^kX-WJNRFvs<1@v=X$mDX1naq|@d6irOanfQx{Cf#8ShqR;YL?m+=|Fe8(fZ`DF+9*96JwFlXr5~PM#kzwQi^4q7rF22>)j29Zp_d2 z9N*pWYwaqU$&FASTiXh&Z~OMFc0T{SG;_;y@SbPn;@X|K|Hj z3oY3%OL)0n*!QZl!*igt@MH2)~se`**hrR?ioG*8{c1GzW@LL literal 0 HcmV?d00001 diff --git a/images/icons/16/white/date.png b/images/icons/16/white/date.png new file mode 100644 index 0000000000000000000000000000000000000000..c177f399f840624d4700f9f57d2da724a1517429 GIT binary patch literal 1155 zcmbVMO=uKX9DnO#6iuw?!5Tz|NoYN|JMYcz&g_g?<78*IE@WfeEEqu{lbN@>Loy%E zyksYPD5(g>50C^)p{E{8D5CZvDIx)F(NYi(D(cCDf~80-;-QuFO_EJTf(Hj?-uu7z z|NZ{obGEIC%$m0T8X2Rq&)1d$v0mV@wDT?AghKC4pkmnE|L!zAEWeAy-ho#m$qav5o{E96q zW!M@auFP@udOcoG#2v57AxV-#4xW!ujhH`S6D^3@en*o*#lG&DE-@XO2^qCvXN+W6 z>gjR_mRl^Y65IYtqG-yvKyx`1hn!`FaV=^4q=f%>V@++pJmF%lgnehs(`h{_9ZfLJ z-Ny}uiqsqVuxHYuXrrp5k6G9z1vSIco48>bay~2O5fYP7}{Rl1x$4O*@ps@+?QIV$U4MM&5HQW+}h2xt4vDh9AbQ@@bgN zsmY|oQ{R`d#;4?rqt0+)bG+9q%_G`@;dZt4sjxac*rpTX(b4#6uD6wr)z1Z0DF=^- z|6N?{j^=;?+Q-4OH;ZV#@#C&@4f4mk{@X9UxejLMBXa&>Gbh~=YIfQ(;JTd zemZv_OudaRG)ng)*LFPbkltmsemS(z{&e%Bbw?tzS0hvFuhf2RpV|_v+xFdGTW)oB p9{>IybLP^WyS*1KRjQL93N}oixl(=b`NQzHP{{SEmwSdz{RfmXbIt$& literal 0 HcmV?d00001 diff --git a/images/icons/16/white/decline.png b/images/icons/16/white/decline.png new file mode 100644 index 0000000000000000000000000000000000000000..54f12d0af879587e315125224fdd450bdd3d6a39 GIT binary patch literal 1136 zcmbVMPe>F|7@sssw9UeTjKFEqI@IpGnf*J1n~XbdZZu}=MoSSm&b-x8XWlsTY)9)5 zfkg)|MaRIbOAtYH2=S1H5fvRW36f6TD=X*}*qhb02=UOs%zNK^-|zSRpX;3+#{$)R zt0{^KWZLB{S$Ftv)fVz?__3^#r5?BCaThA!qUu0O(oqkjGp5=LvryGXhF-#EimEIa zxjfD*CqxaIA=TFjd8SR!6xH0~*{U`GG2H`u4J*lfoqo#DhMr{3L=~XeDcEPUk2c_IJ&_QY5UaFj4qC40C7BYhNcR3Q%g`kiJdk8ooXRVmbP73;j)p)` z12I6yxDXeP#N+WJG!Hny0-ojgAQuq$Jaau`RM}u~-Zh z!y)AKvYa3YJ_pYSiAK;Jv9Rg|E%!i~L58m87&bPLMf;3u4;scvhIqOXf@v$t8nNZB zCW@qt^;DbXLVz_*KdzFti?i^L8|!Mjxe*((S?Ho+MP z+&*N}sjdjEsG4EItz^- z@1o}m;BC+R!LjaZi<@r?-l1JLdbck*%J;e0*xa7_51IWnhi+XRA8L?a(EX3bzr7Ay zJGVY=tkG->RBioSclOh-C8hu7)1MO;>!z2-uH4`M{@~3oX2mvYya@>|Ir>{|98+ LI^>6~-B*4Cf9r25 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/door-enter.png b/images/icons/16/white/door-enter.png new file mode 100644 index 0000000000000000000000000000000000000000..835db452e9fc67e2a49d7c755668cfc95335bfee GIT binary patch literal 1070 zcmbVL&ui0A9M2fYm~0M)LcRD%5fp6mUY0gZST@^cbp<jyXgPsJptKvaCc<|~~m?9qZGGF>*ii{l$B=1MQpU>y}^Y-k_g`vTd zgB-^V6{qzwTSuaI;0XJk`o3qdB}S*JbdJ<$)9^8uwa5YnMaNjgWo%fjl{a{tgVSq!HO9L&sxijvJp0J;PkW6fEFH+tv8pSKBNe4AHg`{-KWLED5bX?(}2YH1eaiH|`l2@@tv zLy$&EG$zTid=7{ZK>>;a5)(*P$3zuE(0zEO=36zjtQWdk?4qbgKI^0( z`Bp3*KmS3zoNm1co1bI% mzH!&J(bbpyt%-+M*88}RCq_<>t~|aQO>l8)Mt_!@-}nv7g-_f7 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/door-leave.png b/images/icons/16/white/door-leave.png new file mode 100644 index 0000000000000000000000000000000000000000..8848309d758f222f863784be76efb6fa9e33c6f2 GIT binary patch literal 1073 zcmbVLO=#0l9M2reoDOyp^|F`^L0FUb(zH#&>P(x}71uhu!YX)Jmb|Xnmb{p}t=T;I zaS%O=Lp-YBX?pOc2L-1v@E{0^f*^?CVcP#BbU8$ZDr5{-N!{=fqgi+ov3bXsLM3Ea3+GqS0K>Fb z?Q(@w3L~nC9o~p+_|WkvnqdY8L(ed05Md|Ll|btZk*a@k9X>yez8O!;3x| zTP&8%#TiqvxWVJ>K&Vmz2N8n}omn?f!!+06Rp~yu7C5$HLT1w3rc;%|D4WGTViP=w znIH++B;;XSN~Kc$tOy_wfG9vQ22*NWQ~_X{4@cE}tE!gtTvLml(p-%YPZflEz0TL; zJocvqs3=OrA&N0-5epVvVuUd_=xs6RC@_87BQ|!~h|!qDb0p1CPd7twyh34%*bSPA zqA3$X!xJD61jmWuYFG!Pg#Ng(t#wdd@Q_eK0iN?sT90aP3rusjvruG6y-`p5HZ6)V zt7CJ{K`zPbX^#HkE!$Fa*;Ed~lmt>DNXif@Vg}@ZmedufNpddP;@A!=%Rq)wCZi?d zI)r*oQ?zVGOvo^yOO#Y>Ve@W44A(?0U7PAQvD%JUHR~gTV84vwB6_&m1i?r9r^Y=vT{Cl*hYR;dmDWKW$us?HmZDV|X{aj^O z?fr3o`Jr~K??vw2qhiNb=FOL%Z3iw)kEm@c6HEI}B=%msx^ek+jn@vIQZCi6eR{d} u_LlEWuN-YJAGx#M|NQLjiCs4z?>@-9`rO^O%zW&LhB!Y|)E{IfuKWgwA5=*I literal 0 HcmV?d00001 diff --git a/images/icons/16/white/download.png b/images/icons/16/white/download.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8b37c3e4d13da6fcec3a4adf70f2bcc590e28b GIT binary patch literal 1093 zcmbVLJ7^PO9KSZUl+r@#AhZa*Ug#j0yYIU^?`W)PE@uO#mNZ}nhu-5$ajs3N6<2Y27&{=eVv|GY9kcVc*O zY>=X;;oPiLAZyTn2l~l({QHhVmQkE7;RU;l>xzr0v~H`2&Y4OD6_BE@u56+yiVBpC zVhNY>Cq>ORS;eU0h6g4&7a1?C`VOm8M!%8uqpTA&eLr*cMV|kEwGN@|IHeIyP zoGWV0B~8$o>0|U%LnH(y!V29mmn~0hq?i`3NcR3U$IvYkyp&?vPL=ZWbjEfO9b-XQ z193pdAqykXL?UsN<^cp8;5o>LVM2`XA^>#fVThWmm&Jl4ceKbU#Z)nNM2@T1>uf#3 z+HQq|f*|-DJRc?&VQO7Q4hLDlnWi6C%i6;Q^v8`ot-a!^gSZ0n?3$~QdXz(5Fv;EiLcSsKMm*&jq$tX= zWNS4OSvV)981jeJ4PBHo2^qpf6eM^MPeLg0Ge8FExFo=IG%3fs9D8A5BodL*5=_S; z5`>bR7Sfp+K9+ARIVaIq)&etct5y%&6PeH)$Wzj;G>cI2&k{yv}v0Cng=d85*Nbj=^^ MTy{=+JhOP=HZi52AP&h=MY`s8(*>tLs8Va+ySXT)`0h}_LJ|9A61zwtvJ(<`^++~$Tp%1rH~gnp6GxUOH{s zh>nIqNC5(%1sH}AJ{F60&>Vn(1sn^x5R8ctP6U8ndKhBOR?A{R$}ZU=Qj!_M*b-T` zQmKS1k+5kGvM`ZIcpMxTA{rrQ%)qi6GMr$YK|+pVYZlf_gZ3EZk~xZ#4DqxUf^OyW z%fyDWlqixi)|D+5h5@VVUR;aX4lbbIZmg*76vr&Y7La3(+6t*hIamji-2K~-r%1dJ z57`cC}mTLRJxms#$il0ylc#uIR#wMfjv~n*(#%d-frHbyy($8wOt06Ga z#Q1{T`Nql9EmQ4nyY64!>3?*6<2<#e(|?aD?dInOrknC#&TLx{rl&XW`ZVR+_(8An{C)Ca(lbPl#t=HcAf>&A=rr7O)i;ezU zf!VWjxV_^}P`TQ6cfxHA%)TsBYp=b2-+Td0p705u*WSLl(LT$rZ`k+v!)I>${6t~f n@f%+*`W{kE^R2^t!>Sf)%d=GidUfid_j|}?dZY*41LuALtMYJ1 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/exclaim-circle.png b/images/icons/16/white/exclaim-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..40bc933448978e06b0c8eefefb409e071670fe62 GIT binary patch literal 1202 zcmbVMe`wrP98Wjxuk~b3QLLhGSvOeml9x1h$%URHm-N;Xb1Qd;o`}OVdDjbV@?!Gp zUAu`=P>>-i44i+g4k!4JY-0UG9jM(O>h{-QqUYG;D8nC&A?m+l^QG-ok+MGw6xs@uZnop=U_Bbon;hJ7R(F`-XuNheOG$LRUO}T!S{r$|BEO4DH z`&7z=W}u_GJ3b$x@_eyk&rjPKhu!xW7;UPQz(d3WO>f4J)Ml1lNQIiFa~q#y0-Fc>JZLpLBU_Cd^OP2yRS zWvQoYA$WmlZV>y?dZK8`_@))`0tb1|i{o0=jz|gpVeRuMX_cKY|nbgCj}$R(l4CjI%-~*^MW8tP!?fY5rmAGgL$Z>jf|j4 zN@IiIR#PY{8F+<=d!Z*QIvXvGQ%PsvaVX z;IM-6Os4}T>X_iDjsu{VC16^%>&J3jp0#KV6uK`UCm&)DtmapBH?a=|1^zc~LsXzN zW=K*-q`t3Vo&S?Fo;t(F&GD~h>0HqcjE@_wPlb))K|YkGvTTYtOta_j8SXD#s6@?vka z_(Acf-tIeIT^Zl4>Bp5l$38k#)-EhJoP|4w2DOPBJAc8$i}N?{yS#Gf{_5^8%7+UN z9&evlzkU1HBTHQUhc{okdim1SC$BuYuxDt0?vL-@`KJ5i$LAhDe^=jI2W#&Yb9<3@ qY#>qoyw#Jq*mv#Si&gJHS2y!)Te|zGv9lfjMG9j@<5cdsg}(tMZH&GE literal 0 HcmV?d00001 diff --git a/images/icons/16/white/exclaim.png b/images/icons/16/white/exclaim.png new file mode 100644 index 0000000000000000000000000000000000000000..6701cac294df9dbeaf350d40e6ae0e3950990597 GIT binary patch literal 1114 zcmbVLO-K|`9G}drG|MCcBWV~f9o(Ha>xr^LBJ@8{$#!D4yO`|Te59MSV5)swxg=AcpGcXBdb?DR_Y$S-y zeOfAw(usCKF?GM}Vf?OcVKzZDHoKOr^g~4U!i;8wsc(;;QKY7ZspIttkg#GftF;Z= zuxq#@r408gyh=4Uk&Ui^1$2mH($xnHM{vW`imrh7-Zf2;D-hHlrdFLwCpyWPX+yH! z4}1y;05ZV%nK~{Q4Azn?U;qtRnqhrRP^e=C0Lc79VQaS9CnQBFZwsHoR2Csipy^yL z=g-yoO*=y~JkNU?EbGGvpEG12+4UJtO+i6~j$&&T(oBQ&6y;uX5QQo1>1qhNl}M}! z8%{n^IAydeTQuVbw61$`t)Ly0gn!&v7wx2mEJ!DzV-DI1u18-@fsAvvu^|tLy%CPu z8ZL@FAezdc4h<9+!xaAGS2b0TVnK;vf*c64AP{00o{a(tL;@nuM7WR?C}^z5$T{nm;y7YoKC&>L4nnu1+jX zRNvg2*?RWf$oqTFmb(|POw9cHo~V3O`(`KCQ&RTx^YZPIO~;NDRb3jP&Q*VM%Y3tQ s4V`D6j=uQtwPky^b^fqj{C1&e2k~l(oSqz8ob{$X-r6DFkM>;n4I`dsKL7v# literal 0 HcmV?d00001 diff --git a/images/icons/16/white/file-audio.png b/images/icons/16/white/file-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..ba89495ec5ac5c3bd3b89019b29ee0730319521f GIT binary patch literal 2896 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 AKL7v# literal 0 HcmV?d00001 diff --git a/images/icons/16/white/files.png b/images/icons/16/white/files.png new file mode 100644 index 0000000000000000000000000000000000000000..bd6f3fdbc75125b3f06c930282488243f54f3618 GIT binary patch literal 1104 zcmbVLO-$2J94`)u5>TQsA{T4tg@m>5b=|sFCXAKB5;m4?iMvVHzOf4ZpnbTFcpxVD zk$6y#dcnjq(RlJBI1k2n(8Qx2O!RIv@v7o0Ff@j6uu1zq`v3iY|Ih3B+(d8pKsQBE zy_rd+K-RwCJVa?mV+(vgssWgTyp zgOVf#96TQ(77@Q`W33Uf{cxK>LB8&pE;b#T4j8qHvxt)n@pLN$%gttYh;4s6Q6yzt zLvuOE0?x96xHheQTtI)^*wxxEHC@CNknb#dI;lrB+y;}}?JX1-5^v;b&m=|B<`qX@ zw2+N6N|GUeSi>}AH7%+TiUJUM5KllT@nb**skkD+l#o#4ZI0crX)z(hh4@%1mXIJ+ z)RdG;kMXetj41*k<=fbd?PJZ>QCrs}y4%>)o>)2UAq_iT$#Le}9gwd%*zs$QOQ(wh zoz-;H4$eV&wxU&#XI?~x>Nys@nP1u5MIXQf_&08aPXJ+D5d?`RzHecT|H&CgoZ*7z z_^VmkSEK`j?M~~H!_M#^n@o&HMx*-d$}$IMGUGQ%+YB+I+I|Crl55W5DmLw^yrdQ-ooF&`rE0n;+#00TB??piM~(t-jZ*m+p07TQgvsu??4^ps~?gaiuDx7%&5o#y;- zmPfKICme#1q86!W$s=Z*@}jXmgN7q3bOPe|9!MC?hQCPiEcLV(f*X{}yTo3!lPH=p zJ~jg$agcZ2B(AP?M5_3Y8+%$uwWR>_RUG+?p+)P_9P5K=?)Dc-45>HD)zG0uG3Pbk zT6D2TN?M+!e>mH*6{9E_2uUK81enbsBnt&-KsBq$NELHNw$HH_R#o+4Mnt-rNoxpc zhAOMYf{@9fj3!c2p^q(j5ivar_jMhrt0KvOIbGcss}w_Q5Z9ou?v z_f|(3ICZbGI=sbhSnpOh>)`x_5%s{)hbyB;o=9&-##<+!b~e9W{P1xg9C>`=#UcId gr{`-6>u(vb&fLGQfBE(3yOGRoNuSnU7H-`64J7DIr2qf` literal 0 HcmV?d00001 diff --git a/images/icons/16/white/folder-full.png b/images/icons/16/white/folder-full.png new file mode 100644 index 0000000000000000000000000000000000000000..f70a7657bf38b9e48ea4ff5c07d528ff1d9d4da9 GIT binary patch literal 1074 zcmbVL&1=(O9L_B2m=>nOhF**ril9y2H%*%+tk$$?T*1!K73@K9Y4UarTRu$Q*=#3u z9vp~H@!-eJ-POCGH<_S#*~yE4fP#n~#KGp9eoT?EgMsAz$nSZc-{;cA___GNkpYUL z;-xXQLe|0P?cYPbN560CWI2qBH9YAya7*_QrI>CV(Is1-Mir!+^H<)YQHqK+tZEI{ z%I9UnwOKu~VME&^Xo?!mg`RHAAWYZMwB=-(uPWdwdj-_A#uj`uxiDTe z7G?~|WO8Td(NHD?Ho`g`+Otj|hgqi0E0cY6%`tS_1kYrdj#IVr1YK}_M5kDgFhCm6 zX~@E)Ad2E?nguQlxmT6+_$sE^ewb)jYb^U1$ zN|F?D@O*+;B!YPd>tVtPMtTe?3Jl-!u;n^*#HiQZIh7^=Ya;4v?@VG$Y|*v$97l+iWsMWOw$}j@O&7aC)Ai`Wq(GN- z!*Zf?RGv<>D)OzX$kcq-rrY_It!?xH%z%I6R{0DNimD(;Jn_AQHUB4P9C3z=n&Yo# z>0OZyjJ8{?PYzqdgB&t3J{gTK%PSjXtm-9IsfHixzcx2>vEvVyuIJAtV;dv-^Z)&R|Ie|G_T3G2 z8|oN_X-MypvUF|q-_Y)tJAeQYVSbwl9m!I{ljUxCd#R(j8HTLqXLY?5Q+;eP=?8f6i3NWOpa7Imc<6;aH{~L z$#76YNRpHBWU567$52=bQBt9TO`9%JOchsjbzirPjjV_jQw~;$<>V}@uhIb>MT=N& z(Xv6RGXyetjUgLfQ9^u`ZD?u#o)hjOF|5WTBT4ZE>PdgSnYpu z##3i_zd8PDmdX|FK!3Z``t-0gJlLcYW^UGT zZ$^IL>K^<2v25FwQ+e;@+m_;^{##W|?1%AHV(-L!;9zlW_oZ2O-CZz!ZjT*ECIKhR@_5p8kGpKJ6WKo>%Wrk6aj=pL}+_*!cNqdZ=Z!;0_*#GV)2;2&)t2s&-?i>^ AHvj+t literal 0 HcmV?d00001 diff --git a/images/icons/16/white/forum.png b/images/icons/16/white/forum.png new file mode 100644 index 0000000000000000000000000000000000000000..1d0d4c82de708152ff4a6ff3eaf10061faea8d8a GIT binary patch literal 1147 zcmbVMO=#0l9M4wWMq6=;;K#v*jEM)^yrkb@b+%38Dt4Bx=orYBCa+sqlb0oLwi_O% zOmM@&c5(+n^q``kcoY>CJtznsh21uE=t)Jq3H4=Nr^xVNAbIcq-v9Uee`hw=cYKHY zfSaPI9hqJ+Pu6zlZEGRlj_);@Ec`6gEx?gs5{8il~Xo~9YshYAf1~FZPBbpIszC3=$(3%=&&V;fcYo_3+);ndv z{;9r#GBu{eRHo-B-CY$3fex`uSM{=C3)MKY&MT0;bIdaIx(XhPGj*p1vN<}1EJ%m^ zz^8yPpu?P>3j`yP$PthX&4wafaOZRZSJ7R7B#qNDxGL5RP(Oj86gyB*J2hO9Z1*xWTa{HXw!4 zJV+)&0g>ZGDG^Jgl6)x2g~T8s+v@9U=I%=g8op78Yc_+Vx}ja_YBZm(x)p}F-I)ghhs zH2Y?XFTC>)yrJhiFTZR47ASvyesyV2+sjXrD?M+T=F~ygAl`Lp@$A>@*Y0d<1JrC^ VrS*jS@H6LkkV*H6_mjgHe*rx@Yaajr literal 0 HcmV?d00001 diff --git a/images/icons/16/white/group.png b/images/icons/16/white/group.png new file mode 100644 index 0000000000000000000000000000000000000000..050e12900a160c660c7e8bc4ebaf554bbf65a92c GIT binary patch literal 1100 zcmbVLO-K|`9G?&>Ohc$h>(FB)uyA+Y%+7udZnC?xqYKWa>q1M1a-4bV4m$J3nP)pL z9n_0TLJ(bpB)oJ8Is`$1x1dfPI&})YbTiOH2V;BVx)vcG8kl(>^Z)&R|IgLY!cb@X zm3D?B9w4OBB!CPR!mneaShz5LX#`YvX#UAiVbRS%EEI2SB(Y^YY?Tm4;<#F^7Oq9Y z*q!3|WHK3W2ttTjguHp1Xnx4{dRq)K@^sg9h>2|wFlv){j-*)XX)^@NQPm@2+dE7Y zO&RBF4#$TfXIVj92i6`bqCajNYweZh9mExphv!_K)}zwf0@K``EEE`0Z=~Ck|T!e7}#u7ZA6f#hO>6o14(_%u2wK$H&MwDnyfJ!g2L{`t)~AP~;XyW?7?+NQnz;0gj@84woG$raC-)nT!M5uQtBV=9*75z! zR%7_>)kk+p^w-4LME_o6nYll@#=O4xbo2bm_PXC&8fky|;qs@Qsr|<*LrS08cW>;= z;(K`N=C^Yj8|!;@P*~Vft1f(Vq5FAZX?}a~$!^c*ABq?SsgAW5H)gxKnXUOnyiym-<1vaM5O>|h{yANl`&zyIgifxezV z^Uh|5VFJ1RN`bDe{<~!}{qFw0sM2Kz=`N8$JVI)!gP4?#%ZSaH>L@B8RiCQ9MhS*# z95IR|Qpz8cHEi;#Z^L`0P0zNalD|<<9iC3n3|61VKB@;59V`Zp@3XG>1ebbBkgrC&E5J!z9IES?sp7Y z6m>$u+N6mrl2ei#{ln{qE@v~bEQGNzh>0K?hfosJAPZ7aMS`htJR7ZZtc8_AB1lOw zF%=0Z5GvV}l***VNE}9#FeMf1*qr4O)zVO1*Pyy9Shy}$&NxUV*ePN>QSX3(3MSaC zV4KYhhS|KT8J2(c%d;GCnfPS^k(581C!6olBg#G(NZC!;!>H z&zH&h^qtvFw`R{I|Y581z(4-F?n0eV&iC*vOeT$yvKP~9| sw)tPjgD>t~>u>nEwX_)ccK9^Y$lQ2#rDNu1NcV?6*WIVwPY<8^4SY3Y&Hw-a literal 0 HcmV?d00001 diff --git a/images/icons/16/white/home.png b/images/icons/16/white/home.png new file mode 100644 index 0000000000000000000000000000000000000000..e5848bae70a136e478f2dc2e1ecfbc2908c85f4a GIT binary patch literal 1082 zcmbVL&1=(O98TSsb8Irf!>Z!43^orodEYesNLU?N(`*$xM^~^%)8y@%t@$u{XS3b( zFjPD_59&b>2O@(1fP$VBPeTtoco9?tPbyx8`lcUKWb9xdc|Y=dp6B;@ePMofXyDiY zMNvcfIi*O};qdM6Bj3@VO^qy3oGar+r-~bzhbY-_Du~Wo+7c=v%~-qi22D{^Pt`1y zak+3#(jAM{LK`-)T!N;ksp-Jg^c95Z3R*Jl4D;>T3x+n0409n-00lRTYUbR!hZfi8 zOZxhXE*i}A8G0&^2!VyLMh8~i_N5@hw0I@553f0fZkgbf4AXY1Tv(v9j)&+33t~D* z0y+s<7#C8h)M=Ur5O9F!ARmJ%Db7m((4B`NYMxP*ii+CNBBu;f!`PKLuF+_)jX3Lg zOB@tMG34O+7_o@?Yc|$`nC*{u85HE}p6O!KvFVUet2nDT!w^r~Ay{squuE+FokWq8 zae?M?kOiD&g>kj4eOyF;+}P9FFRi(VDk8?>UbASa<{)wXh^(~&U+>)idI(~ zebquX&MO&){9z5#kko8Sg)k+66c3VV2t|Gds6b9CB9w)+n(T7yg^kCPye!D7oQUTj zR8(1%vom}m4HJq$Nck={Z~IuYb=1{0iEam*+ZQWkJ)~jBD>+WR+W`wT2RnYvap~-$ zKo>OKw8L{)o_4ef^32P~P(8<@TltmDJ@f%ggMZ^z_%sl5iXezQ@x6^T{wHS~afS<< zPE$0=v6uhteYBr~PPJ+?1lOIbFo;rBH zIU4!$sW^MH`g~*fN%Ya!R_)bt|KodbaBMbyW9;+t#_h($ literal 0 HcmV?d00001 diff --git a/images/icons/16/white/info-circle.png b/images/icons/16/white/info-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..83d7dbba2fc662583854f899cd8b5d1b7efdb79a GIT binary patch literal 1200 zcmbVMO>7iZ9Dij?sf3au5iJmX3>Yl3Gw)4j_G9eQZg;xunr_={H?apKot=4Y$96uP zd3C1^F)Nn}5eqkk1Zea?LIQ~=4F@1D;p0@`Bqt&sOgtDML=UF*P1~);G#s2{=Dq)W z|KIQbJtqeH54UXIxfuY^lFz9{wzh_Ea})c%^?XTVOB?MSrbEsst!N$rX~QWKn76bs zQY4x&{qbGW2|#4jEDh7)LZ6~L7O#amd|e(gF3O(Vs9 zAQw=<&5&_3H{+3^nf{VKGodF9uImu&3=~FS5vsw!nzVf-NO8-&3fqUr0tc5>=tPQJ zaca0Q2s4gHpv zQrtMDt|ADPN`mY1$=1k@(J(r?YyD?yZAa z?p|&vRAk;L1D?r>qD`ufK4lS`=G7F(Zg|5qlx!xR#W*gZxQJp2jFVyy%A#~kP2#ka z$j0g%>tQppEXtCK({e`!V>O#jrZYXFoWQawF;cOP&D%cJY@O8Yn#}Gh7QGa!WIUo# z$16F`WW56h#~teUwLTNphKJZ}Vmvk)#UtCcvax!cSJS27 zQTeZ>rLM@^)s3^?Z)n{QpLT(#P4Ls|{Hwog*mn@rep`Cd^nCuK$1@A^h1mm*ZDmkv z=sp6-k6RASO*VhmfHuC8DXb^i}u|$@liFS9(T{{|)dMfN=l- literal 0 HcmV?d00001 diff --git a/images/icons/16/white/info.png b/images/icons/16/white/info.png new file mode 100644 index 0000000000000000000000000000000000000000..d0585a1d7f0a667ed600035ee1ac6718fa412ad2 GIT binary patch literal 1155 zcmbVM-)j^{9N&0}6oYV&R%$b@N~Pp(XEvL?+a;Il-fq@h@zQWPXdZmX-tHt>ll|fD z#M=aEy&`&AMO*U_N+0@AXh9Hy2uf+Il1huuJ}9Elf4~+W4E{)*P41#X@WF-MneWW^ z^ZEYX)5Ajtwr|_HjbWJW#X+r1*JS*Du$6who~#;l`H&2Zk`Zs5)QkW#ise-?C_2Uj zE@Q)*J@OCkW0=IaT^S{#rGv8RIcX!-Nk@)P(G1g5 zU-p(@$yf2DJvbNOk-4FYIX7iW7Mt$}eUVHF983%lIn!<^M>%$lSEl>;m}9}33Yp5W z>rRc9hJoq@81$xL%7h{WB1)qkA(P2;10EvCL7qc=3T5OTUWO1fAC_7RtZ})l=}lWy z%CVD#_%g@UYPEE&C+!6j9Fim{=HU4h)kuZ2E-|8%8}4Z_XgD+j+b6c?f|${$dNU-) zQcu@IaQsqfgV+t5iJ~dvBE#oU8gh;k$F-&%k}`hn#-`d~W!A@B8He6XVA6Vw?`eT) z?%r)ER;1p@Uj#NSiZQKu=8S_~Qq*!Ry-8cPCF^QNM<^q}3=hRDLK0tqI#fhWLW+>p z#TLhASWQ7Fo0WPC1zki))3cJGs#-ySik{^)p|^!Cx*;)K6SwTz)NT_iyb~*{0XB#i zR6K9G)d9nk9`V9S&j;#=07`~wyRjUXXFXaC2li2H>4E2fwfxHVCiZEt@U6HJlq3;B z$Sc_aNf+2A)_R|uanu1P%tac23@f1QoIdatX#+$j#6 zZNGJ6OXK(YGDtq&eV0jqmG-54eW9cAX!rHT{=~z=|6l)ln+FdMeBMpk7C%Z}YFqp` z`Q+lxbI9b{w)*-hP2Ctv2R`hZWeb# literal 0 HcmV?d00001 diff --git a/images/icons/16/white/infopage.png b/images/icons/16/white/infopage.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa05b1fbb023fcc804ba1dc43b3bb7f37faa39a GIT binary patch literal 1102 zcmbVL&r1|h93K@-`~eCEZ4r%QM4-F#-t6qJ!Og~bySmVttV?;**_o$1>HKi!*^VAU z#DhjcH;>s}f)3GAhg9g$q5gnQ5#2+APR90TbuB_XG%)ji%=h#8e1C3EjE{D;Uv6g@ zrYkpw3Uuub-nLfyz4oJ~(j`PPQ)JSfB^A}hjI7%w%;rpW4i~VhFE4(;Lk!b0YZRx* zRQ`^n*=9ryY$CqtP&C5~4f~F&&11rr@SI_#x$ke^ajc=Ix%;s^$U6!y8)GXjo?IC( zYAf?vO6P`eu|vK@2~12>);AX{Px8}TomZm!;F{;yx(S(2bH`3i1`iV6|{?8(DXHCLaN3MhM`MNet2Oo$`#e5F!}RH6~v zo#SCDl?pfnAxtg8-m*nhKWusZ4F-fg%{3fi*cKZwswI1gq&e#8aR{c9&z}-o-btcp z%6MOOco+e^X$EoCtvyn}f803J+AA(Qm@i<@UUD^BkJ%OBi(fkS`>8w z+1iqcEs{fNj{b@0hAw55L>9t?2oeH_Cm~D;BOnXpI7&fTOlIQ^joWt-Su*>+fE zQe^Y0W>~>FD9>@U2)o8ZtY=-@Wb65rj5G8BOoD&oMnV#Z86=7+f%<-o)&D1FJavW- zn&Yo#X_D)x6U5xYqwtu7)Oh5q)t>1~H%NbH2Ro~_4}FS!e~Ma=522G`vyeS2#I+dUmjb0_oDU%UPB RYV}hv;knE>dNDGy_8X_4TG9Xj literal 0 HcmV?d00001 diff --git a/images/icons/16/white/install.png b/images/icons/16/white/install.png new file mode 100644 index 0000000000000000000000000000000000000000..fdee052766b43d2a440d9cc1650b2b9faaaa449d GIT binary patch literal 1160 zcmbVMO=uHY93R_Scg3I}h_$f$oQhCvGVe_$nPf;-lT4<@H8muGEqGWbGq26i&b--~ zSCe-A08f^B5X6HYAl__2alL3MSg2k^4~xr+A1k7uxTh67xtHBHP19YL;$a77-uu7z z|NZ{oGhG@Q3~k)8k>j{fVZT~t>z3gCqMLoc{`i;9mL8fPrWGQ7mObQ+EXvfr4!ZaV=~6w2c38V@++pI_YAejD0fU8LS>7eQhwy z-RBJjip(43kY}-?=;JCeCT#4`f|};pO~kZJMa#(=Lb3#95yle;CB-b%U?#36QASE= z@ixbrSS^~*W??)Ni)Im0wM;UT%ZjlCim4JK72DW?<5S%+aNDjG*ll5BpT#OU59^e8 zRYJzw9Z;$hO8h!;L9QZ!qHb7DAP41XMXO@ZI*LurBQ{vhuVSrXAEE^OZ``VwfKpzS zq@>7vZ(+^7%*n>XRM)4__X*edNvk zpO#`j{uZAZP%q}6b-wQieFd&n>-?$SYaNc89+D z@Os@`&!>sE+jjri|MTKIXU~h8SGYWV!^%%z>VI5Goj)lbzw)y4+tj&*`|k%HSJG3{ rzju}AyYH$OcJ-FtKK*d%K+twl literal 0 HcmV?d00001 diff --git a/images/icons/16/white/institute.png b/images/icons/16/white/institute.png new file mode 100644 index 0000000000000000000000000000000000000000..1de2c06ae68941c932324f5dd0f081e9cfd612c8 GIT binary patch literal 1126 zcmbVL&1=(O9L^Z)KI(A75Zn+$HpRo5yh+oqu-azLx)toKUBL;$Op|wO*z&RDtxb!< za0Br)9O}t~$KgTnpdbn&iXiOZVc_s0%s)Ve3>gmUn{AyUV+RAt`;p)CJipJoxv`PX zj-C#JAUZRnQXa2e-rMHG-!nhzGG0!h;R!TuPN9lyLqb%|A|x}qJPq?uR;zO#;UGaY zPich-G?Be1D5g%!o(=8l7Df}qV8XRzWd3J$ZZlon%RYKRL(*^tCzQm%o`7!HyR1vYdwthhv<*-<&J5zFCO*fBlh{f?N!-u?E>#*JOg!M)r>WKYGW)bi z!$9LE!3z%vZJNFc$qQIPh~9k)$4O%)GVvd``N zzW;Lm-$%QVXXFc{plp#e+YG8cCRjEd%4V4OhO(n-1DJqbTr{i%`||2F78rVh z-61GYaniWo=&ZQ7r_z;z%4T#*<*leH$k@|d!y$%k0bfz=wTDQ8 zrJl}&U^XB>5g^NZs@#Zuj(73fdrN}n#~ng?67V_e!Ae_vM4(6;(5D<|{i z```35E<6NVYwJ57wdHS&E?x<0>R11|XkASksA>D_{;3m<`-h8s{HpTi_9VJ_LCw4@ z-k3ZxQO6Y)9eaBzaXq&E$i0U6f&ge=zxv6Ux??|vuzq}U)6)kH`FV}p(^YrsAcgZK8558LP?9sug`qAH8#)Xjn z_>cBwN1tsSQ_kMo1@D}^xb{W!frZz{_isC_H-GSY_sC n{PV?e?~8}uqS5nvr#^zr>$=AeYB!y-{69#xqf5S!+I`?3d`pL~ literal 0 HcmV?d00001 diff --git a/images/icons/16/white/link-extern.png b/images/icons/16/white/link-extern.png new file mode 100644 index 0000000000000000000000000000000000000000..753b70b25c2bbd63970c4eced918b014e198c0e6 GIT binary patch literal 1152 zcmbVMO=#3g9FGWUeU?5I#ShSsg2=;7X433t6T9l}rm+j|T6S05i(;D0wxLZXCR2A? z{J^(8JfTm~gDCVM>PdN0tDY46tk{!YL=gnB3JMP%57C1tI%&IAp?ENm%=~Bmzu*5m zM>=v_8yBux$S_P}rd`X^_4n{yFpqxMzWZX(WhH4VkpeE0is2(BY2i-9W*nmn<&k0a z?;S_23^TWE7fYm+-KLt@;f+v-uR0z@GfeB|s%Mxzh_Icg%XSmof7fqvtZgN@ozX1F zdTG>cw-5NJFpw*n13jityPs0IEWZ*)#-HuwVL22c~!a(j|GmMR3SYHZpx`r zwu4P$AF)v$L`)C^Yz*?SMUrKC11kau1Rx4fj6hj!5mf-#>4&4%e58p%0aVzX4|5>j!6Z7ykVm{u457Iqgzv&!1lbHv@h| literal 0 HcmV?d00001 diff --git a/images/icons/16/white/link-intern.png b/images/icons/16/white/link-intern.png new file mode 100644 index 0000000000000000000000000000000000000000..94fc90bc362f6eafb727b18c3ed9cf9d33f1acc8 GIT binary patch literal 1215 zcmbVMTWB0r7#_%_A#JLm4{1}i(R7xM(czLK$T2WtWEqF;OO%rS>1(gsEbsrM4=?+0M zZ|ftl2z7J(&~=z1h=yUSG=K)QrzOL+X+6@RL)*h>f=Km*o^DhiB8T9J<)o>*7cWz! zWu~cTyEUMBSy;Am6F%&pD3pweiXoa*&wer$N|?ZgNGC&k)Cr_8O|9}ucpn`z6uGK` zDrsuXsR6Bz%(^}#yJ-+JKoXEimS*D#p68z+Ilux2a16`ESYC>A5&&fFp|CaI9F~fT zTC;_vG*w2(lNhF2tV>Wb9UP)8j20y(LO zteg%#*bJTX2VjTu3^kH_k6 zUXe@TH#7Z5+NQylEpJV>-#WEp_u`~8zjtx6efwdD*f~=;z~}hfqdyDF_F!5b~lTb20S**hKYOc!p1ZE9s<_f7QSrb9n=biUAYeE+ePD_^%apZxX2()<~70o@LdCTHLN94)Nkas4xAPB4Y;w$@|Fv_xt@n_p8gd=4LO?QWQ0( zE-E#$&WG>JY4W}LW1x{`0T&y1#cAP=<{>I?I88*WmbQ*+NHcb}-k}UdO}ET?12@V` zlI~cn7TU0ZS?2KB3x+n0EVG&@gR(25wz=5#&`Ni?u6H+d z(O_~n=}aII0t;b{4y;Yvmx3%a0=&PxE$0;Bd>5x%tI@>tQ5Kl)TSZ=v|L~Q%xM3Iznf#!0M z1)ODtaSg3~Ttk1{IM&*)@3@GoA>Y~dbW)F2bOI*1J6R|+B;H6B&m=|BHWf$Twvdfg zCCiXMtYI2bNluj@ObH;xgJc>)kuQJ}$R`yM=7n@AIpH`CE6eFZf-lDNiMRrxQp$^Y zxxgpVFrf&9l%HT#+sB%%qlvCbbjMi!M64uxNW+d-cbv^h2UOb*cKo*E((;Nxmo?qA z!*f`kQM3y3%sa>^d5%R7^DCLh=mVGr|HiHGX&@98K@fT3`v`0NPtG{v3>P-XU(GVP zA{`iRk6ND`j)n)>WMVur8kN=HAsH)8Rr2-VQ}fqgkej}?cXt2lxz_`=zt-;^MCKo# z>Qydi->*No-D4k3RnJGBFYfOC%-y^HEz+c-^;oofsd}YnOkK=;P|gfg_<8Vg>t+A# jtG$JO?>&|CmLfBN`f^ZtbNKV{X*k4caanm%SiAchEGbkQ literal 0 HcmV?d00001 diff --git a/images/icons/16/white/lock-locked.png b/images/icons/16/white/lock-locked.png new file mode 100644 index 0000000000000000000000000000000000000000..f34df1e82d2e6560560e079cc8a63760ce68e79b GIT binary patch literal 1219 zcmbVMTWl0n7#^))ZLBmXu}aZ#+N5c8XU>_u%+AnhneObs2DWat8`%(pPG`<;C)>F= zbL!64gb@0o5FzrQF=_~x7+)m8_JtS(sSip3qwzrvAtXxhhFH-^A_mX2-D*t3gOkjh z^Pls7-+!N%3d0-Q+a7MCD5^cTNiCAKBYIm`lJBF}Z|P)t2xrT9#I4}E?juSu-BCp6 zY`uz#NH-hLeS-Qas-X8l`+8#kuRR3V;=|&AKYR^a&S(S8FIs#mMLi&L4#080D%XoG=w5Q1T>(eR1qqP zw3cdeEQeK~pn-HYt|a3sgsP^9N@j>preRV|5K_L0%{c+q9RoG(TEy-mmcK1l%J@jf zu3vK9@n#1U#$43t032yqywYvQtK08X?T!BCdMbDQTpP6<7BL^=TxN> zetqO~SUX+lI5pSva;tVPoBg5Ex3~Dmjt8$e&hIS~^`I{;wyoPewPwZDZ;OYDh3@YM zz0-3aZ|)Osd^qP{yUcRV{+{7ietC13zW&lZwVyt^^R2UI@LjVl1IK37o0rz*r!QW( zaH^}?f4FCRhp~Ix#XIU>eiJ)9Ju}rlbmHf=_h&oxSK-yp$L^c_EO~V95#gQOvAynB zU554Niz|4F9 z_x``%|9h^KM$R8PaOwa>QHKh{YMHFj@O}1a@;&{yqmkt#9;)I|r;Zz%hbYBxY6ui8 zZ5)-6X3Si^jru8yuA7xAt`^^tb;n}0P={?=E>Ee4oI zhPjk1!lIi)6Xx)&hel^dD*EiCE*Z?go1nib69Nli4K%GO+n1XeW{X!Q`|y}!z?KT0 z%rM(dRf{E%b36o+ER5+e1wo2u`FKJU#n*uVdB{P5oTaw*FDq4relMUQL8!A zIKvQ6w?nYpVsV$)_IDCRQpPnkm*ZK;SymX=mbQ<}=pQ%s)b=YgF5=3_ccwj^)T7?l z1(V!8*-)rRypb<>CMk+Gr8@ewg=}0T>LbmEr2(mf&_7;bl4p9s6dgKRP}9vO}3%co|@SgjXS zrPBPlw$bSf(66?xmg%L%(s%mF-)O}N`Kz-A=)winQU z-v6W%bq_E8dNugz!!$A_{GA}gLhwwf%?LYPEY$d z*z66~vv&?2zZ9u`F!pxu!0+ zA|JmXMi&%4|5=sZq}tB87mqEqOTXO!SM; Hz4^ZZ^^B9H literal 0 HcmV?d00001 diff --git a/images/icons/16/white/log.png b/images/icons/16/white/log.png new file mode 100644 index 0000000000000000000000000000000000000000..18b2cf4ef877a21714cb9818f0afe3bb71c24101 GIT binary patch literal 1094 zcmbVLO-K|`93P9!BtfXaB61unFYU~G>?Y|V$>S0!8$M!^79K!s#xVv_4jI8o1wl;DO4@l-)5m&<&) zoyY#502M_EIYco+Eh52$ON>gy4O*)V8VXF`_K1yLHe@sg@EA#O)YFv^950()BX)z; zMA4K96~hxC4+O^v<65>3NDlpRV_oZ@FySE~hXOq2o3tLK)+(6hZeyX)kb0vY^KDub zV?@K|n1fuB(Gnc}!&|nc>Z!O6VO#=n5yWH&6|o!WAQ{sXn3QBaR^?a^E6YHJQn#Lr zwrdb-dQwTIy2YprqnboX#VR)A2E=epRMoYq?kYCDAy!TK$ROA+U_4UofW9G2a4>{D zHkFsytYO-2cn-_660L@OdmLH1j~#Y7zpA~CK7ca#H*QUoft1!HNfD{L0UpZ$4*#raNa6 z^9$a`r*o0o9sK={<0-4uc=KHT&fdGT``eV$y0q`dHpOmhs=0M<%e4cCZ$ut{+BJW1 zx~bv(`-A<9(X#w~y5)It>Y;JvRO8Of+)_*C>*ChprJ1v@p3FY`@I`Ijw4K3MPrSQ) R0r=r$XVSge?e6|FzX5+mU2^~c literal 0 HcmV?d00001 diff --git a/images/icons/16/white/mail.png b/images/icons/16/white/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..39b389cd1bb25b76defe6703dc471f2f81da71e5 GIT binary patch literal 1144 zcmbVMOH9;27#_s{AyM|E!Gny&2Qh9t?RH-cE9`D}b=AeqvPKRb=(YnCwh!CEEf5j) zpe7#Fn0PbB6DK1lH69d=F?!I0@nZBs!p+3^iW(m{1s07V9&FOi{4@Xe{qLSFbnjl< zw6O^Qur{|xF48sNzm4_u+xlT%p-T(N^pYN{pHvkGgQRAaG0Yjt04`!h8$I$EcK}e= zua|mBZ+^d|S_Z55I;>~d6b(Q}r)MkbFeb2!2Xr&RyuEXmfx4Dp4u$h5Z>RB~zGuwA zJ!9P^b!=FTYfR@Z*x^Z(z`#U-o>4Jf$xAQ`yb|5}#~cF}RLF3GS#+v5Uw~=L!7$9C zpo$_0MtGJFiP30uClnBmI3#eq5agp$NRSYMOAkY>Iaa~uj+#XAf~MP6W00|{I=W4C%Y;6oQnp4&f}x%+hG5wF{4%lW zE+vYljPn$m<5|QRh9B30wo8imw;L;JyQNVZb4Bc0BaTYz(ce}B)7<^rkgrI+kq$UI zEs9c+Ep^1eCdtVOhTgE6u1VQ+G|Tf*5k&wv#?j<`aHekZ%a7x;Gvia6Zf#(}^yW+3*7OavPL38f99}(J z57&d)uU_R!^TFrMFHV&~RSD}I2#f^p8SN?dFGl%1j1Lpo!k6A Q_|*RwMFL5u3+)BGKW@!(lO(1ZVgif2Lat~ZY&co^P<`O-F1Wb9xdc|Y>~d_Lcwd#jDBGgIfLIF6gC ztyoRA&Zh6lN%p<4e_*raEM0EXHPWR6JHnjdk`4wn-`>DYY`Z&KAMgUl<+@(0P22VB znnQfSPHlw54;h-{78aAxb~Z5u9lYTMI{)L%dmebM&fhH7VLdc)&s*7z@Y-&p?540Sk%72z*R!kof%|))Ji`@@j0KUW+^!n$S(1A34>ouL6@q7!(DVcVG#E5)x2B zRuttjkRXC0ltd)uk)jnO4MH$}c%~M)U9D+V$6D;9^F2yKO%w-%fiNftB-#*>s;Vi6 zB;}b!KHdqao#cafK4Y+O>_lEjJraPF(e99Ks`Jd#Q3!rmuOAWz@izFq2A2*J)j$1n+7MnOG+mXZS(Vfr0EO*BXrH0HK?MCFWqS$?lINLrBXwA}j z_D66%SF4&z6(L22iUdn#gjA^ltI#M}Dl+79wUlujg@q=nm{Or=6bmLoR@G1qvmzDC zsA$QIRLZcmAf|TU;7r$Jx?`+-ELJlkY*P}o2%@xd^^ns<~wD#L%{wxlwYmn~UVCFc7G>;6y9MCOc`HpgGhl3lS5Ot*)v z&kl#fg9A1(5gUy;zI=_1l~J>dR`R*?>)>E9ck%Aty$Za|<#N+cg2~SL(?91XzTSE| z@oMS&(z6Ni<+lf4mfk+L-U0p8!{?W_X3uc5>sduPf{Ke*^y2 BKxF^` literal 0 HcmV?d00001 diff --git a/images/icons/16/white/news.png b/images/icons/16/white/news.png new file mode 100644 index 0000000000000000000000000000000000000000..6573f9c8da01fa8b435853ff9a006d12d637bc72 GIT binary patch literal 1216 zcmbVMZD`zN9FN^_x6{I4taSr5OTUfY&#rEpH`JIAyf2Iy4gnv}p!$Eopm5f&aL%rnXm{bRexj&u+LHu1BS( zZH#kwXQDt6dn1gv1}=(PlWnbGLJQ^OG=*=Xx}ghMDVb%MBnOf#NTe8sX9qwQhzXfz zL@t$0v@zDQ&7`;(1DK2$kI4)pXGLC=2H1FtiOU=YW!ttn%R{QA!8Wgfc_k?|5N9)q zJK7483sq#hMcb~mJD@ObBikFd9a0+Q$h@ig9dz^*ZoHKGV`1Zt)-MMhIC(VDdUK}W@-!OMf9awzm(V=R`zJ+R{{?lFGJ-20S`u^T<BudYAQFYX$A;o=A9XJ6dhHBD_AVVln$ zx%JgErDNAG&7P~Bet7oFZ_ge)^Al2FCXP4T>|H%K!iX literal 0 HcmV?d00001 diff --git a/images/icons/16/white/pause.png b/images/icons/16/white/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..e76be7d601be78730da2fcb05ab7b06c4f956c00 GIT binary patch literal 1022 zcmbVLJ#W)M7z$p6C61+Uwrk+}PR>1YxtY=k)n{ zt$5cf{Cng31?J0j)*iBbI%YGR62T7Wh=5Ln4@sZk;Pm(-*%pM=aX1*Vp?BZ(X(Zvo zM#`gvqXl7mCr_|{L>L&6!!WkQZ*Sj;APg+=VZ(!7(jt>^?<^(zXWfB+cH|p@xN`?= z=O!nJ2*V(crg3KGmN@4%`M$W8MKCvEN0zv7YUuSqi>3rLBv|ud6M`m^P+iqD?KV&# zf-+QOq|}gR))f;%uzW1XezL>~V~Hutv)N3V)g_u9%E&N`fVJzn^eSKe1*jC7984KT%y)P4s*0`?^e*gQO=%2F+1Yl5NbyR5Oo3N|y^bgJpH{{5#ymFb$(x zHb-*lbE0DEoa|z_vTji}!*q3*Em;}E1mtl+GotL*=Py{GsZn+)kcMe1fs0!2l#K_c z`m)N@m=aOh?$e;FEK&g-6B(5Cal;YIQMRfp(!G1lv!DtgV^Ma)sa$#hBupEF00+Ga z3_=h@9P;@?q0lKHKm>Ux@JR5YkmwUc2tn;(sWn?26*E$@W{aMpY>^O4K!h8lh=7g=#dW?3~$uxJ{8*+iv8?oQkXi?;G z$y6qEY><=`W$7PI)l@N=2qh5;`C&+a!7xG*Ar6x;7L+0=<_{->b&ajK@c;$*0-;#I zCm|#yW06=QE(F3TAo;1NQ0Jx$hscJ4>vlD2x5f=_%M}wgmWgR+O>?~70Ru&om`>5O zKw{7j(z2o%?%6HRMzj*PwF_8H+NKVw`4zP->_ZfW|Hdr|Vd(FX{QihQec#}!|C2MG zI>Woo@mI6duV@Fl+s)Reht1)^2Avq2js|BfEz+^Nnv!DK@~8Z-_4V$CR!) z*worEQ)yfn?)2Q9c{V@2a`e&3fp#Fb7tgd7Ds!)x;f}?&_xn%Gt}zO`YR$%?cb{FUv1` dAGR?&_Ar%im#*9xdhptv^Hfit^fW$l`8VDFUCICe literal 0 HcmV?d00001 diff --git a/images/icons/16/white/persons.png b/images/icons/16/white/persons.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb0c81de265adce9926c65c15a37c80219c6ff5 GIT binary patch literal 1121 zcmbVLOGp%993NX1pCJfg_HY_|Ahk`zV2OU~4qi%ZbShp@gbqNIfW*-(I9vYbW9`pPC{_nNPiHn_Wy=??R zbf%JG2CrT2+tQ4`eLwajyc|bkIW%R=pps-kBB~g9NTxKY05ech7Uw_0A%gJCsM#FK zrN;%?&}hlU(2izeHbD%HIHn}eLPX|aLDeJFw>NJoQdJ_<6@MC}%{VNo$t4R;Elp(Q zrCB+wP$R?SkRxCL4I+tjv^m`toCsCX74Y7@W+<`(L9-F6>QpX0NyZHel71R^We@;l zfTdX<9}ETuNe-}p0UX0}UN$KBH~|2%_E6ZGrOXH!F;TOHPZ6q!kSQ=ssZ^p%KH9Jf z3>yxIT@8-&VuaUT)RE+Pb-TZ=AVOQVR1>L&PP&Rx-dI2p3VT`&K{M0oePP|MB?_mE zaU_#rX~1Zj8&?HwqYV7x#(`)%yJ$it18rl$l5ss|`s-wzyTc8+K~x3Nta>Wu8Qr}xZI&!A#Onl8CKRX=IR|VSu~Jg7Y&n) zPw`}0l2zS3yXC1yD?&@X29<^`;Qf0*It^b44Bf^~4?e)YydhG&X(XH>V3+od5s; literal 0 HcmV?d00001 diff --git a/images/icons/16/white/play.png b/images/icons/16/white/play.png new file mode 100644 index 0000000000000000000000000000000000000000..89121ee1f8e136db2d29f949f8e75e3b143458b1 GIT binary patch literal 1099 zcmbVLO-$2J9IsAc5{OfX3B<^=L{4md?LONuXIVEl!*Cf(+`$7~`^M_%2knCmyog>j z2BSB^K~H)#dNa|43o+5?iIW~QF?#T%i3cwjeBB2cLpa!^eINb*e!u_ct^CyazMi2T zilX|m8L2>4pZj{d$anb1j!c$8oGRgIvx4igjVMty%Lrt3c@`CrtS-&JLgN(Wsc6L# zF6AZ##nc0`YZGYb7C}?gc%os+N)2I9Mzfj`r@uYlpn;~w=}X}p%vniP)iTRAnqHnN zD$6y6SLwuAFy0UdfsU{Y8v2~!2#q-18iF4`I?iaaNo z%7TszoR#7<`4dnzRY)hJX_k$KV3dQA7|Zh91WZFQBJr#kilrkRj=iwqlo&}$yeNi) zDVCMeA}=N|Wt$%fv6 z7`Hk8YL?Cw=|Fe8+xq0NJ3PoB6JwLnNc{S;M#k!DRuYSi_vP)KorLGiwIjFJ27DXc zWslwG>nDUxBu9O&6>CW-pcBhZ}fP%x8i-*1@oT{ z`<_vocRmkMTiYuqJ=T@cm(+{(`N8k&rMENG>(y$h=jKPx(}O4Y-ZvR-vC9jouics9 TQ;!yZy5pTqO-YX@X0HDR8#-02 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/plugin.png b/images/icons/16/white/plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..927a5d586e0bbc7ad4710d2852cf2b13826dbea1 GIT binary patch literal 1141 zcmbVMO=#0l9M3FFtqi9ZbtpblMG@P)Wc`e*v+G;6U}xz%>|qDf^dRmgdYIr4{6G*znTIjNgNQJ6UId}OZ0i&mI~Yjb*YEfHf4u)c*Rp*l z+PocJj^ow zJS9C}poPpSStUk5aWR3aVKFwxb#+%QMIFWz6!DO5#`%Ru(>&0%IDaOTff*}_%lgT2 z8~2a*<<;?FHKy_1$3RzAW&#GL3aA<*rXyG5{F1KB=I*w@gCz(Zj`Pb-6*5_nBsK=2 z0Q9Rc3_(~7h@HVmByt2uP=o@M1X1#f5xG;6Ap|QA&#c*6NzS3viY>N^^JPjcSr96f zN}$piAoh?T#$qv7Lz4Uq;djPNs#N`^<7+A)?5MVGQJt8;RaA;(l*W1H>2e5$mC39M zo6bt2SjvQ|VhLgZ3WnjvwS;zP4*zjuO|+9Av#^lE4jHvob{{2Qlgx6rz9ARLypd1a zI=d8Q1QB)Az$Q(jIL}T3ny$&IWF#euksypnFdP-dnA8JPFcC&EF%gWW!cC2}xJiaa z(Qr5s>O`W5Qi)h1*&~IbVh9D9sMO@9O@}I`iko(IW_N`fT9+#)ZLCmY=Ls2URzS8) zC~?Zf0?Ga$$SA6Ax@-4(mZL@3*3V-tWfKD|mvU7OTyJP1Z3sYmLg4iSMkfCetX9uYM^0YBah%2Wp$^ zgB#i#S3mxY4qO_nd8Qk6@9z6|)Z*>-`(WzArNWMD(=A`x+8=O}dv5>m94ehfUX)AT zxPG{GVtebx+JkM+j_#bQZT)&8cd)kGH}jC2eYZ9He&W-H>`hp^>zSS7-dufATRc9< z%`Cp2S@2DL>j1U=bM+?!(I@jQZ*M_s8~HqMwY;o*%dehVExyUwUEneI?zz#o@8Xua P`y)vA_Mv+{XD|N-D6(?N literal 0 HcmV?d00001 diff --git a/images/icons/16/white/plus.png b/images/icons/16/white/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..eecdd20eeeb26b43ac8a685d8941fdecc7caa9fe GIT binary patch literal 1095 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 gFRZ-rR-)q|(Ul5SG;&!4!sAV?(NRy*4*xF zb|>B?2pUmTP;7-_Y0_f+LJ45?9TjW z{=eV^HET*@S646?R9 zfD2eRM~1H9ZjM`6v5F;H%56{$Vn_5qC(^K8hUU2LwGCG{1~CO?JYYFV{?6qqJh03p zzd4qJIX8`~*7{Ko_mB1!jnP3vG5NJ?KzBoB1U9BRXxKH!R~t!wnpb7};8@_nvz>GK^#R;RFY+R6%ZkU0u%)#hLNmBMHNCY`|!+~XI9jLmYKE1 zq$FRZ)KvwcUav>$(FpMd1f(cRz#)oZrV;i>9I7|Mj^EW}(6DcKmP;+-fPhgilVO_V znWr-$*lsR2N9_2siDD@e8oDc>2o!8Ph-+Hgrv?1Xjd`{G;)sid0`|$UXRvxyx|(2? zyO$dZ6qz^bM$ckJ(Q6tphHdQ7td`{2O~kZJHItSz2+0zZMHo*Yq=-E*15>oyy!U$a`O*tjv# zKh}B`wEfo}+WK0?-J_1xz|z}`Ysbgwo^QsST}!9ZPsT%Uo;|wdm(x!lgm&(2@2agZ zKD@K~{mGA)TmmPi4xayMcRv1O+vC!<&>yvPS35>d@%wg2-)~wFelPT7-Gu6Re|Byh zn*4UQ;;ZG}}gV&D@hBy6na^dR4Z~MPoc5>y}FG9;F zT7Ecxs~lV2sr`M(Kc*^Y#&O}ohU3 zn%6fo4AYWtS4(tV9lpz(=y%hXpE_MyNw$-8xV@yR`Y+}wW_uLPFm1bQo^JGG0(x+t<)qk;_a|9knJM;QT!WgI!4<20 z*vB2ig|ac+Z%8J)dlzV{$&|pxLSTLtT`cv$@Q=M87WLzJE zcoaqqn1CRGq9`VaqPP?A5J3*|9O5HLlw-UMAy{}=YRxx$<&v6PutlX5TOq`gIj&l* zMys)?>-TX;lBAG>=Oa`j5)3&+uSJ|-bDcrOf#F*ov0Mj)jCzkdNK!2IbUp;z)3ilm zCs;@nO&M3yJq|@7XWL<1bJ_tZ;ooj7sU4JuJj|7F;12o*tw-WzHB zw`fuH0o64IZS0V|nquiq)U-@Fml1Oai2@XPm`EZd@oAWYN%C22vww{ zGg&1b%Oa%a6iLaX`FIk=Re_T7b!^@Vi0&A;Zr7rA7qIF-v2w=8I&uB7>kiaApjdH< z8&q5mWI6<(>4xQma#)`EXjSZ6$FQ06T^r2hSGJb2kCO23xK%z0g{&$F5>I`f$D03> zGmbjLh0XCtv(%4h2Zr0l)~CYa@L-2dj88}7j&mSQ$LeBURm!y&6Qu_&C&9{zGuvN{ zO+NnSw?2QSca5)WT=V%^qT9c@ZuatysVA$LMC`_i)@vJ2T^&_6Oz)MK0WtpR^vl=c zC^NOSv1#UP!}seW_qJS`zH;a-*Z5)ExVLup;XA=ezbRB!>^pJ$)+3OZd3vNcb@#_8 qpVQ6_Hr?_H$Imx(zwg=-U)9jWXvO}o(%6OY=fUK&1@(6N@W?M5&SsDR literal 0 HcmV?d00001 diff --git a/images/icons/16/white/roles.png b/images/icons/16/white/roles.png new file mode 100644 index 0000000000000000000000000000000000000000..11bda4a78dc0050566a8fcd2871e3072f5730ad8 GIT binary patch literal 1134 zcmbVMO-K|`93KiYM5Av|sD_E?((b%BJNq$%tIh80=#s0lE+yu{*_o$KIv>qE+toTm zK@c5^K0QPoLJNX!K@il*G6*V21BRN<#XkgxZ|2O~N@Bcl=Tbk-C z%d5*NimFUE$XT+l_TQB&$hzh850z|HIMs$*?JitUT|`N`okw)qRJ&0YsrtbF2dIXk zmUkJsHr$qJ6gArns=iLJXgUNz+jkk-(BsUWa0XT2nlqDTl#gjKp|_F0}-j5Bk*B02llEJM$!;NCbh?^Ii+g-+To zqQgND&_D#x5g3FaJ{pbgpg8~m3pf^X0T>lSoCpBD@G!)ht9OZ6Sy`|}q&U-qu_Ll< zp->1GLP6W@W}zSmJ_pAIh(^F0u&`PTSl-qWgN!`QH5_c%7VR^tdAlFS8RF@D2&R+C zED~GZLZV2@*rMvNFbG)F^y8Y-_HY*ca$`wtFE`*IHj6yF-_=Mxy0(_UBzONdNVyU=ZFyL=G*q%{5WBMMqd1EH+yE)tL zD|J9ikBx1w$9CvsD^F)s&9HpgFVB3mGIEUrNLO6jr04Q08cWy*Fb4jNTjpYbPsuzl zaK!g{to}baV~I1Y-yFX+OX-SqpnqI!eIhIl53rpV>JDD9?&`I3)5~97a~}-D+UHFD!^UIXpKfg6rk_lG9lDtq z*}nJ0%;WO$(eS(K(W5hKFP{PvU%s8MzZe>6ejPsevi;=h3x{q^?kbyVKa-E`+d08M z{rG52S(6upqKd7hQjlaD$=(3Kq_mFPfPfCW57}dgk2xJ{& z02Pp7RSy4zni*zkzg_GhJ-JTB#7@izbz)`5qiBX{ZYg_)IfMx4Lj$&(W?y`Niv_lo zX7@@tnDaC=Xm^bIsC%@lXpRnv^g znw@j1Czl5r_7RX`FlxdC1PMOI$Hinaxg7|Qha40*UWoEZB`zosg87G~)_kj9Dd?Gb zTU1K3gM@er$CXN@SScRE{s70zvK(>JmgNjRxa?}kr)fjXXn7-{18@nK6H2Uxe zNwd_`xey#Lms=oqgZV_!lyPOlY6r!NhqwX?@Q82Hdh~Cq zfobmEZ75Wv-YC0$n-;|w*0DL_AeUtIG)r${mTf5+Et%o@qzID&Or&^T7TRD2stH}@ zRWX%G)HoKyYLX;KqAsgaT;q8?qspq*CP*n>(nU%t)Ua7MAckwAnq8aPoyVr$iB&Wo z83g-9jE8F-kRQYZ2ZPuHTDJ&thH1N@9F}J;S{?cJ5oBe2?10()D)u7wA)kW(k6RZ~ zP;A#lQ5LB0b6D$ra>h|-xUf0?(=4?k+JWJAq4lY-Fg(bm6XVm-cy*=n10Ab-SzRrb zXRcHuktx`Ce4X051$@=Cb; zAN?`${LsWjY4Y-p!q&Uvq~X9@_RH~^>#NsZ!>2a>c<7^-e>aUyHZ04#V^dt~ZvWE# z$xUb|DN!1U2n{sHzG8Dw@pE)+5?vC zd(XY+eBb%?{_@~M(XLn*MN!dWKdg|oJA5}r$oK9me`#d7!_U|JA>8m=nu{paz;#3y zEo~T8kYV}3{t@*XmBeIUIgcj-~0?Q%R6xFvaa5Q}c`E(r(o3_F%e)1VZ zn})(XmMVdglS56jzwM%-_Fz?SkLZ%YYG&qL=@3z? z<1t@hh^H$dSWc<525ft)i6SXu1I=N%1Yj*IjB8oj^DF2dH`dkms^bn~E6BrRu1@OF z=6{0?K!6i?-)$wvIZyCgBCSq^M@o z>NRcUoQpIcyH$)wI~`DNVjp`=?9jO(fi7vfX@_!Ho|R}Ja?M@HD7e_7m-8!|>+y3L z@ZY#0p8-N13WCHF-&bsn|C2M8IKzg`@vmm-9FYzTw`;9Wgtg&8HklZgjK-I<%{&>a zg(6g|!4L1fyeB#dy7QZNQt7E4`Fi`v%}?KXe6siWp23qFzuEL_WLQ)U-IhH z^8-&VO)TIEW&6XYd#v^=;@tBWV&{Lhw?8{R@%65Q%I%-Nso2`BTR+cV z-f+|Tw=QlzbJz63SLNNe{FaSRzy0p1Vy!E>_;JL$|MfYjSOZVN58l}Q$8G6-{A=%b zADdsaukMO{_u_N?zuYH$IMe>|Q1tQ9t;Wftg`-P5o;i1E=B4k?T-iUn@8G@fFz5Dm zZRz>;>Jx$YyRjFZxKTNK;EM~Vj!BoBQ%rqn{!cvBzAi$26d5?M=}_!!_%kWy2jNV1 G$K>A+YnOch literal 0 HcmV?d00001 diff --git a/images/icons/16/white/search.png b/images/icons/16/white/search.png new file mode 100644 index 0000000000000000000000000000000000000000..f3aa99c7e4ec048f1eb979fd139efbc18ed887d4 GIT binary patch literal 1155 zcmbVMTWAzl7#`brX=*fzc&{F36;!f2=geMb$f}c>tgbrSxLGh%1Sc~m$t0OMpYF0bV{t}ee#E3&mdeCNz!-_>v48Ejcbo7-qB>7Zr9$DCr3b`0{4(TR)L zu=@Ak!i^mFVTWC6qiy<5*(6TP2z6o=$75)YYusG%46_GQ(2hH8H_N}eaES-DmF0IQ zb*OtP?y|QH__%eTP%;O4Ov&OmZvu@KnGrac8ld9zx`ABD^5eWR+lR*j55`q!PnMr> zs!eYJD)BK$#$eQhDF{+1hT@5II^6(7h@b#P0f|wRmgAxfA((u4X3e)c z-$kh>3qrYEj+Nsv;&%#2lBAGB6r)Td8uYu=s6^c$Qf1I^VEVR4ZQ_EE(P$@qG|Mwj zCqi&MU7sR$gULj(lnE8X6Hp8ajuXZ;t{u=K{>P1JwS!W>hlL^zNS|-AdUQmpV3xc0 z8wwSfH}a>x&5C05YQ*ewuuJn=mS;CH%eLg4n$97VPQbJXQyGLLu?gm&lF}rkBr>^F zm18?qFl}Ltax#mB%N( zK2moT%&qygFtYym@PegB-23{{HIciz_(7!Q)Rp@;(C|;f#hR}UJ{&sz%l6TsZyugp z_2c*1Yo9dCCTqK|uNqNa|2(h$+_CtU#UBrYM}6D(u6b57{6IZ>XV&8Wy83(99(6x0 z4A#y#w6JIJiy33eA9wE6U;J$OgM8|DW!|otW6#7r8xPp_x^5?O^Q9`yzkT_y>q9TB wr@F07;9=EqMJy1Yg*Wm2?yNL6t#BWYGQ2026N z#RaTrgC9)dHilWyqnFC0oPS4DEhD7(Iw8-nDVky0)_S(0_F)3Laj$MB*@wqZvOw38 zY*!=?^L83n^z}myE)I2+)S*5#p|NY<0&Sj12@FgW;2Hg4G1U&H21mnf!+Yj$;NcNQzX5G$q~ ztPsm7Syq3o13D`fvD}JfgLF{BKm6G~WHp7-m&tzS-7m(*Pxzg!=l z!rPXg=r`9iU97+J#$T5%$C;lt9UhIhA07Uo_~5~xZW1{e4)TkMo8qq{gx7}&X!h=oP^Y#1v z{-37@y1VWRt!`XRQB)|`A?3-~5WMwu}Iz4kt@2M>A`)j^b~;{inHOtpye zNYzIl{Rp*CRPCTq==1uNPC>&as|Fa>H*LbEsFpV0R<$AI(F3SxSZU_x_of-z(9_J$ zm;w|#i%Levn1g!8x(eFZke1S!wpO~u7l?p~JeBs%vgHbXnwi%X$UNBQ7=D$k~JpVIm3=JcuVDOz{~Y12Hb8pcqZc z@v6phTpmW^F@hCikt~FgET+V4hL0s-Oo|dwzRJy6uBTcWs@gS(-9>KfhFl@*Al1W8 z0poJD1G-Dt!)^)Nbhal-E2?H#!8$0E4mRoe{0hc0_5n&r+cR^ozH+kuw)1u8>pQ8Y=JCb@p72 zcx3G0WAEPk^%vi6-@3V_YXI4(HoNY!A(RUsc zoA(G$Zr+VooqT%WrL~vShd-R6ioMq^2}j>rvFgFA5AVFbXY#~NyPLkdW4$o`PTe;$ z`aU$Vru@g*%$45f!3qD*kJmXf)7PH3Ka%V1eVP4HIrD4m^W-VK|N4u&jz2fFVPE6n zH;#Qa*PZ!oFV%GB?8r~!t&{uK%)NbNasU-cjpJx&B320*WM+a&h(G}4fz9{3;+NC literal 0 HcmV?d00001 diff --git a/images/icons/16/white/staple.png b/images/icons/16/white/staple.png new file mode 100644 index 0000000000000000000000000000000000000000..e29bd7eb4f18066db9ea5bc6191cafd421323ca6 GIT binary patch literal 1169 zcmbVMTWAzl7@m@(t+BDCFJ1`dFh)h{&YUwldzopr>1HR}jAUcjtYnoUPG(NBV|M0D zXHL4CKnawVV&X$V!Qg|m>Vqf|q(xd4FHyX_vI&>Yv%S@jHa6jLySM{GC6|9bus z4{R&N55{sZ=Vfro?wRoMz(ilcoES9~i|>37bW~MF;9zQis#A6YwVL7=cvUtJw?!T- zn9$J_UlUc#^@9xYF^CB;V!}8CaU`IqoJb_L0tq50LPZzhwsZ@kYR3QF{h!jN$IV354mYN5VxA4UTL`o-srx+W#%*e{W*Q6vAuV$wYO_y?_4{0)DFHL^e4aHef7@9(cc@sy>R*+ z2!rp;H#Z;Ac3!(JOm)7yw`o%Q=ggtf)pM5*{qV{94{vOir#7{3Eq<~7!t|^wa zcxql>eRf6j1Uz}9HFa-O&yy!_Ul)Ep*Yl0Kue|QTUGFdDQqvml;A=PU$ZfG>;ZH*E L?$b_p?fLX6J*|H_ literal 0 HcmV?d00001 diff --git a/images/icons/16/white/star.png b/images/icons/16/white/star.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e70cdc3fff9efecbef26af629824e5a8f51a60 GIT binary patch literal 1167 zcmbVMU1$_X9G~p9hlHdF#t#%R!-k@QcRRDU_p!@e<7GEjuXr)N9C#q2d%JVFCE1Ve zPP|K=4uwLf(1(`Nhe9isf-fyXpPGW927(}^k5UwZ`mPei2cvN|$)!bt4=(J^{Ad2Z z-~W5($HzYH?LOEI0O&2A)XHq_58qu;_8nYZ*V%G_j#lY}Tc=IkCm?USH3EyaK1s?% zH)p@NO|k$)>Q<#ntEE$l;o5OM)QPujkD&p`4!1nrm?9L`$fV`u_{R%3d1#qA{!Frj zN}fs@*2y`aOw5f{jJYX8Hu>RCV78?&0-I1Bw(MyqP+B>DgI8hu@L1sCh6Pam=g?j7&H;TZv*R6I!|_;5ZU&JB({XJD_FqpBp=B2bEcm2xStuGrqyiQMe zo$hqNc*CV`&~QDdPDrq%8PZMczN#oEa}&Y-vB*2D~wMm0&2 zMdte^)_k9w3CtNGY>xjmOXrAnV7T3GeI{%V4{_MU_-r(Osej$e#_DEK%U4?e*4Eb7 zha-m}SQ>nC>_Tm^Z+H7H_>tSkMVBHsvi;{5uXB$+JXBp7{@~v7wdimAxu1UL_Iz_F z`nuY43tTxd+2*bfe)U6S_sht49+?05ueAqY>GAqN-`|&yM~`&<3_fpv*3Ye8?Yh%; zK+lVZ|LpR0?vJ_YXlCWcx%T&sXUhYLkCwC{|J%LXQ|`|%ugSN;vF8Wi{E-v4R&rO- uQSji^-L>xIldN>bJJ{bA?yJ284B#SI?OHh7R}Xr^Uqo?qO#5}@!lgG#+jI~B literal 0 HcmV?d00001 diff --git a/images/icons/16/white/start.png b/images/icons/16/white/start.png new file mode 100644 index 0000000000000000000000000000000000000000..75d2d37215d6ecbc5d16c6f6685a5601eddade23 GIT binary patch literal 1099 zcmbVLO-$2J9IsAcBE%`g1Y+b_A}6-KSGtcjOdRXxW*9DGi92|pYu{Lfe$YPHz>DZb zV=#I%9Q33|qc;;xxDbs-y>QZlCdP{=O+0uZ!PkwUF@%Fn+V|1l@Av<{nV&e<)zR0% zFiclABNylz@Lqo#{r3OdQs~l4QYA8JRY*;7Fq6=%G6q>gnZ^aIXp3{N@d(5CDtfU* zO1W`KwTzJBVM2Aorfh~88LiujI)e!)<7wTDv)`Yuu|U`2?8R^n=IkV{>X{`6PcBUq z)ukC#)Y#E8V5BZl0Rs~S)QwrwmFjV}p)1k7cg?Y&0U1e{^fY)rND)DI(IiSeXu1O}1sS`lquWHcOyDUhWow?qS?Xys1jEkdc7#oLJ5e-c zTwSp_6oQ;#cyTq*E-BzYZtRM7i;Fhq3fQ&g9hKIjGSDK^-0f}115$6K3yw~UqRh&c zI&WZ;WaT(Z|AaJMlhVm(8lk8Fqdbhn5EA(@n1+dnETV)EOGjE7yKw~(rg)yBg# zIsR&v))nnQZ@bg_^sqBL*rXHV(9t;j>OG-jbtNk&iuI4>&8@9b-|4G|Zr$q%thJYY zPFJA4ybs(z@-Q1Y+jIWti2Q1n5;rDr-_w#sb^Zv^6jb%X)R=f?T%hzk= zyR^u^w|<;rzFcRWKHH{4Ho+MY?2rx!@M1h7U4p}dr=Q50AS?`{UZ3^-2WCKH370lf z5vLq22y5#_ii2Ikz<`XR#1g-MI1xb&+b)P(I?;>@YOzXjSfBS4d2Er1OO8c0HQRoC^qK!FI# zP?3>RL%La4ObEgJ5xH6x4$ZFP&b9c-632|CrYuh;6KPVHXf~3OVHhQcqSUxWEk8&Y zE^0}>S}`~z53(p_5lukJhzE3^St9pz7DAl*{uyzS&lAN{CKouBkp$&9F5{Y7=d4Tq zxN)v^-aAN%+$A~P&jMbL;c5luxw}}XH00ix53`6D1@AdD*pErVJjW9GA1RDN({1Z6 zLb?id1vZ)p8A=Pf&~7*evel;Bs5s8UHj%A$>PWLS)j`N{ZNqN26s?IgN9CkSh4qr0 z;UplHZp3xxSoK1z+0F=NH0x2iS9QSFm@=A=X$sogD)4a-CFQv+&n#MpWYIGcx*3hZ zG{0tajy^<9_;1{f(u8WqQB_0XzR$4X|Kv>O&d6nR{M9Vg74N`ud)E5=a5g+7;S-bb z(YX2fE-+x1V1*_TPH1z|rxG7JTyY&863iJKtP4yDBU}LHc=F TeE;=jtDHu!v+2BR?Hv6E*Pb}Y literal 0 HcmV?d00001 diff --git a/images/icons/16/white/studygroup.png b/images/icons/16/white/studygroup.png new file mode 100644 index 0000000000000000000000000000000000000000..de44911c2c16512dce818887f5c805c7f0ef25c2 GIT binary patch literal 1212 zcmbVMU1%Id9N$>Zn%YWQTd>vA>DE5kyPetl*xMy*xVydWo%GUpchW0LxV_!E%aYrj zb$8<3C4$mGjUb9*3`+DlAlg#JJ_t6k_|ONx9t6>f_@W}#1O-uisIy5fiiAG6uru?Y z{r`Ud?|pV`^yHphhjwusx2IUp%4{DB-#cz+>yh7X8f-gA^EFx_P1-Sh%w;Unz@X?D zEnLQi)qDIJ9_F|mO}kp7wbCiYBu>l-bz)t|V`z>W9_f09If*G~;Fj&G{ObExcwk#9 ze%dFx*ubfrF_5x=z~-l&;FJ^D68dUJE=}SD}+C zzu{D^GzN0S#~>MlQ4^*hNTC>tCnQNa0Yr$P07U_bQ6wpGQGpO_K0LGLTTP{`>6^Bg zr1BG#dWs-)I-OW29wUBBK(Z`{9HJOy8quKVQllGngJXRL4F{%gd(_H9-aqpcBh%E2xzYAVmZ#4OuV^qiz4Bqg9E!c-a|ST7rGKsXF z>T_&|)wE19o)r;WC4@9RBWH41F_}h5Ex|~|KDOuv)NoDQw`()In^<^DtdjGwL5W`_ zq}}g;u?a#+FhM+!t0X|lFl{%K!}4rIt6|@M0$aLI9I&2W#oop~L}~cnxHT~i6L~F> zkVWSE2G;sNITM&OLf9PtYL@;L>%j21)%r}>8XoMjiSgNJoRuEB!N%(6qL!(4zk04R zu=gt1-R>NCdiIgq_9;8(;b39;!~OIwWoMyw_}$89a=o}Zv(UV_^34(X*ZaS_`=@)% z`LnOo>sJOVFMTwy|32gSZzs>ME?>w;7Na2EdU9xd?e#%5{n)k0VlHypIy88`{^I8= zskOX!dFE2P*E=*`!&;mpjww;C(TmzTAx zzrQm&_jM}!MdX>vdp|t&{qmgHBX_=0KW-G3#^>jj;@WZR;d>8`N7fqprP=D6pHhsE u{&=|c0ew06j+Z}qf!o0?L{5Hu9gN%z|0l)#sP=ZYe(rCuH;ttL literal 0 HcmV?d00001 diff --git a/images/icons/16/white/test.png b/images/icons/16/white/test.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4563efe54bd76dc89ac3b721c4dcba8bd36029 GIT binary patch literal 1141 zcmbVM%WKp?9FE;u>#J52d>tGjf`{GBOg8&S=yto^blU~DmhEDTiZo58ZETZ?$<*Bz z#Udi@$>%{7)QcVzeB1=V7dc9Q?};1Lf@BguC~^DysZ@POGi z>f+AP_M$#IsLKYQY6J~sg$Y=gYM^Wl*`88P@^iWhoBP`W59T0rFv-t5)t&DE8RB9P z4a1NQV-Unp7)7LbJRSrhL{NaDfW#1rD-ltF5G*`Av*sFoNX_9B2&WB(*`TU}= z?JXpVrA#Pmj)1~Yuq;2WIkZO$__rHNqP^mXgM|Y2$gr!k`{>(IA+y~5+mH`r-Y9!q zlU<57q!NAD!ZyvRNuHgA4bxDvnRphVxCG-Oj3p3~#b%g=>6j{`w3NukDjG|1GYqXJ zVlC-tL`6u=rsZ^|S&Sx7RF#;hSmEYuk7~A#D|St0cY&+^ldEK0tWn|?2^p$XK*s=~ z#2X+E$aG2|uj!`kul?(pk5Vl0i_mIl4OzjKF>A& zCuah4M(~T{k7B88u?qC3i>1#Ni_L>=)-f(?ja%n}D_C1y&#CER`E~E~>})Eqb8KSw zF|hyg^Ccg_n>%o<(DWUazf6vJqf%+%o z8=tOeI~oB$>n6MIKHGq~#>Q7GC*E8bcWN$e+9i$!XM!E4wqHL8wsF;)xzlgaiE8}u Qh5sYSwY00Zn|n_D0@zS&RR910 literal 0 HcmV?d00001 diff --git a/images/icons/16/white/tools.png b/images/icons/16/white/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..bb05012db34695de0d6f08becd12d748c5d689f6 GIT binary patch literal 1225 zcmaJ>O>Em#9QRmPrb0wD1S<%{!`op~m-yN7Hx0vyV;X5LAq}kJG{=5zOlv=5zbt8m zCP0;@jj3XlV22$*P;uLkIE;N903i^Q5ZVEW5210|E<5b7BB4psc+QfnhpLwB_n!U# z{rP=sKF-JBR7>g**2hx;#V5Gh`ailC~2g#_(_hflA=a zp&D|$#dofv35MDJwO^khGxj0f#X-(VZE~F;qG*PhIM|6CcODVYKy!XrU~gafmIc07 zU=K?+w4)Mg`jbmBnqHc!yG!$~=CKD~1`{2f5(J1ipc5>FiQXx&U0$8;)7Kmex+Y}4 zz&;Q)V^={5#|TI{n028Hfz0Rlyr?M30U$sga!}xSAl@RYeErP(2z}yH$>Hv`y88LWkD*7f^2Dm1bN=HRLhhsOEs;ss6rz@ zz*fS9IH8OBetqhR-48|qcu_N zA4Q%O;{bFMult+$hk{BqKa5*7i$zV;L`yV;Qdt(+9@g8CvsNn=4&|az%o~cTX(mmb zCMmLJNktK=P@%!I996=ljkclj`mbm=r`y38(ZgU6QAq0+(=q$xlC+zS=(&n%)H{Ej zT75tB19*Js$?@&p^2)V0bmPdXw;VEmu6+TwHI^@aeENVQUs&G-)ay?q=UR=YswaNh z(fWMl>b}uCr%sB;K07*0w(VWJGV(Oo_t7sm&+eF1Mi*}-zddq%`SpKxRmb-3KYlnf zvR?oD@|)lM`rdWzrRVP(OT(wv4Qcf;;lodV9?!gW_uiQw{}_Gr(!0N(z46_Rq36CY rk9*OVUl}KNUwaWB8~gY2&=_-ZW&G{6GylDk{#+{MDf4{s$Or!eY=DkD literal 0 HcmV?d00001 diff --git a/images/icons/16/white/trash.png b/images/icons/16/white/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a8b3cad3a33719ff1a5b092edd109bd87c3afb GIT binary patch literal 1074 zcmbVLO=#0l9FGn+olZQd?Li-z1BEqtFHJuZR%hF+uCmVB7A$x%Ol7I~7)ahn{=eVv|9Q7Ke{pOyJj!w0 zSbkP3vGrK+9vo)h(?7d9TS9cEO3S29+q#Fjv`K0hvf(S=_K@mpxowp060o zO+zvH>GNQ!qcQ>;Qyp~dmgB3P6yM`j**>@ydC)VV%@p5vs#++5Eb%ai2{2;7I0SJd zps1WkBqo6b5fq^$A}N9rYE)7o1lteK)I77UmbBcq7CWW*2BoelitTn=Xh#L&Er>`_ zlz>B$BFrMzy7z@TB@@GO^F!~p@LUL%V%#WPR)A=qxAutV(l+lgW+6Fa&q zA_0oF9mLhM_Gts;PUiK_j6uqSpW6{PA z&1)&1{Si#dRCC!x4xxk$6B3Lk5mKZK%)xYAQ&3t?=Hdg6U9nMwVli1t$D&z;v|L(A zXERbPiDH_}NTmTb@Ay=A3_Q@a0^L3q?TJ;h9@Z)GDulEK9Z+l#O8f?KLAES|f^Jw& za1P4Tk5U)9=0AEG4uH*QTzLU~4$Wkq7X_p#>x_U^csX<^bm9HE?u*c! z)|*N2a^mgh^(&8VA0K|LoqQg8yl->u?4>IFUX%}y+_%CqE+jR+v zBC?}I5Mg#P@Kkh&f}ny9)um2eqJ$#oP~pMy5JA1!buB_XG%)i%=KuTs{-0Myh6mbO zI$9WpX-f~HEM41!clR#(J-GHuqsxBMKT2{=fs{25GfBf4$86ftia3ikWBSZX+|4k} z1v5WNMl(aQ?pVAQ*zgt0rD%rf?yb0*K7k24j*F(PaI24=aI9%4+{s7=WLy=O%)zRM zbJgLzUY*br2G`rec2{IdU}2)M6>HM=<%+`9cxAc|t_6;*nUD#Et2;HC8DUk&!)$~H zAss{k8-+X!OR-q&2rB{z1Rx4f48fQj7G(g~jfbOZo>7pqD7B$QPYPEe#FYi1TrTtF zFzV^Ag@xg87$sGd zjD!({D3wek)jly2hY=)EQn7(e+dk239XE7Ms=I+zx5dh;hc)7OdB>S-bihc-A&y^i zTvp9VY(~>fJ2(gBsYi>jXP(7I%5yBXmS5T2LLb05_&07O#(~t2BqJ zXM~_R{%V%S745)ayV?5musJ-~rW51Q(U`e^V}XuUIgOI}%A3WjO)cly*8T_gx=s{7 zGdGuV=<<&?I6D&i{_Oet^;@$qm{RJ)w>f3!(c62P+TV8VczkjG)TP)ux@LU)fH?lUBQBvrOE3Ww&Z2Wo9zb5 z@SqMn>@dWG7Z2_@6ub#Khk{cC4<5vmh#>PKGVmnUmu;OQV+RAt`^f+I`~5!`^0{-J z?I+tAhUv_VY6ZF;4c>zx`t8|l=yW+jMoMH1S4d6w5R)`<8L=5#pFjnqo3qpFXn*@3!332a1kwr)>3zEV$cTf7S02iH8uZkdqD1h?%}DVt|i>>*Z) zfUp6gfQ`Zk>=$FPSRX3@2zVgyPzb}A(l00gusaV&)jYGJ6twh?7Cj}nDj}}I^R-$n zQtOXkZ-R%iEC(Ed5T+Jkf7T&-J?!|sO$H75hG)6N!VViS>Sa7b5*+n(I|SR!W_O7l ze=iMdYIZ=riV60s z*k#o*k0x(xkV7ZNqoeV)dpSeLY9XT~i}erXpN+;)>*@LFx81`l zXK%glxWnAZg#dV zE~m~Ude#qXH=ebKZK1r{{jeI^(6t|_Qw3&iwU5oc_|o>7nO;4ff71Bgx-|SKRK6;1 hW;bpxUUw@84g%&QzITO@`(6jbo*Bt$E2;5ozX3kxU(Emj literal 0 HcmV?d00001 diff --git a/images/icons/16/white/video.png b/images/icons/16/white/video.png new file mode 100644 index 0000000000000000000000000000000000000000..193e9f1125e14a4f54ceb5fdbf0da36a7be7723e GIT binary patch literal 1137 zcmbVMO=#0l9M6o7F&&%A{6rQq#mkz!q)k6U>)Iu&t=Ku*qB~4nn!K%H%g2&8n@z-3 zFDf2I)RTJfD1xAZpu(KuQ4j<@=}j+E^q?@TFY7u*#tsIO_x|twf4~2CE)5SI?r7iB zP7p*#HY4Zp+U37(t@zvXt*+o@HyRv41#28t6bBM1%_>1EYbX;i4;5{8`ZbIb1Uar3 zN6<*_sHj>7qxd?EXV@4`5b=J`R@6y|s1lse%>@1R$upYLwFG@a$bpOSVB9T6d2OMAl&vJZ#i-KpxUa^Ix1YJhR7Fo7ZsW6ow zV>uHn7mLMw4xSHSjet9ABE<`sZf}!8hOX-9HqtGV@)?zqHG>i~_Oua#VdrwI#HPEF zD4a6ZQ*4%F0Bab2T+7-n%ELcytf}o5XKl#lp=-@JDz3+PZxf7jx4t1?5ql#Zb97u3 zWlFZx83URqD<^1t!)UrDrlm-l<02st;XydcaWQ@Xq(Ley$GB7|nhrNP*23~aYA`4Z z!ITh`IZjTeVkv2W7owaXhcGGM#AZzwDW(dWc6Drb1yxC8y|YU^WRb$FnOC&s~}p-f-y#$$CmE2oOy`_fXq-cKHwzf>Ja z3gmI3b}sI1V#r-p#cs>=Z2VO4`gpQ*hI%M%BR@ZYKRR2U)@$VTc;;;IYRBE(b?HuZ z>zB6+$)zo?uYE|4UfADB29l$jcS!t=uGVVz@Vn=W8R7ZPlUIu5uil?Mi^Qo7H*2k* zy2r*wtF613TkS9MzySFy8n1$*$YG~&=*5ek1Q9PgDD|alr^wjBK=R)Az3=Dq{hd3x>GK2q zNBb#?8puq^d9nul_s{|I9r@8x$uf-7MLc7daZPm*mDKGLqBEvChw@0(mln3r1V#0g zjY1I@vlk`JHbbhf6RMjIK~vO3qVA~LJi>Gd%^6ml`Sx~$p$$FGT#jTx)=8m?G1YL< zOk=vBHRd%@XA)=WiMm7xOoUasZdNT%s>hi&uSE9#G0V_x6+9njcAP3^b9Bmf5giGE zpa!CVj=~TO^MW9pra1rs3pf^XK`2OJP6B}LJPfhs>SZY}D;--ziZd0A9f@UYwOXha z4%zM;3q?`%IXEszG=koeh1Gh{@_r@Bh^IRtm`*mkOKf?a zM3I!Sb=6^E2(YH<$JN&Ma31|}V^3|bu;d^%k34(P)krq@)A|LV*VY2cj_uMQ#!(AQ_cKnB-$hw9Byp{T@? zk+2M*tR%%`YLbh@U_|B#Dc8kjEDx)ehPrkQVz+}8_Qgsm7pd5G3$|VDc0jITW816P z4xO6e>8z?5mM{C|*@;$0u5k_Niffy6JHL{#hkXEJ;NQ4qE(Z9t%=02geBZ(9|C2M8 zIK%qQ@mI5Sk4Ojl+uhbD!tU@Oi%g75Mk6@2e1VKrBO@mZ^$(?=tyZFMyt%MBFiQ>E(cCY7i28@j8X7<<3^=pog6n5s5D U^6P79|F1!1($n(u$=Msf0lE5HBLDyZ literal 0 HcmV?d00001 diff --git a/images/icons/16/white/visibility-visible.png b/images/icons/16/white/visibility-visible.png new file mode 100644 index 0000000000000000000000000000000000000000..331810a4a5f7fd1598f52474c829706b3ac11570 GIT binary patch literal 1133 zcmbVMTWHfz7>)`m!@&eEOa+h8J*aDQPI^sP9bMCGg|(Kh;6xF#}j@k07t`{}1bhh~!QB|TP&R22s^NzLlRAY&-~xPTRHXzv}|#xM&? zda;-EX1hhzGJ=Ya33`T2*$mUx?%9eufC=cs{koZ8KU}-P0$oe6+ag(*wNtpPcMUtZ zXE;|>hX+(aW81fYHczAi1||ydjEd=sUV@$073tjH=2$QdAp;4v=2UMs4^ozcK_mzR zDvUx9ML`q_$6~Qoz(WK%$a9DfpqLoqMF_#n!%}OGRuT)6JY$Ql5^R|eTjaQEwHmC3 zf|k?IAwdv)4W18BM8F*~iQ)xJcYR$!!mjG*Hqk8;_=-xOHAoUH^|Tg(VP~_m!lpZu zD4H_PQ)~_eA!itVT+?Wm6!331=0v;2AscfA>{^44O7EkzzD}mO`?nz68H`%!(>zvP%<2sqjinBxRF>#8VM8~ z2}uY^a#Bd9I`~K&MWiqlN4 z%Lb{QFvu#ZZu)EgdTP;1*wOc4O?E5;Oy^hB=dce^9R3}*#K&PcErr7ZPkpa(wg1T( zN1fsP;`pOj>RYq|{poD!)5UD_V3T%?LtA6dx954-g;}Pv#{j&+guJ@z@&YQvUFc$# I9lH-~32kbUqdKPN35 z7w9tz-LyM*RMu=WtooR6*>o72<62tFj;ak33W}uPu#)_@*+)Du^dx^gnu9qfO$Lni zF_(0WbriI*K~2*6)`Os>EHeR$mGQMDYhynR&#Ogzms9BSAW@DNy)5+!5 zge`A1Q7mObS#<;yhJtDOaV?`gnkT>ASQqUTMjayLiD!?v8oQ6aeN{5c-MAxTWZ3{+xRLP{i&iB&b$=Uj3O!Nlo(B*D2^~uvC7R_9#t)kRP7qf?kZRMCs$6pM5VS{u8j(vy{@b9>>n1GQs9EnIG^L>S@ z|4+^Y=8WJM#~;N~-C`B!PuEJHE!LWcSgd1Q)*9y5OXpZy-OFO7Q2tQ-xwO<8*k75f zO)lNN-W2F z>BGj#%U6f*oY6;THoPxB-aZjm=HFFj8YZOSXEpb0rp$xeKRtN7kQ(oq34A(*-&Edk z`ppN$t@u_DrWQ9gT{yY9xZ7QP(g3D6EkxTt->$znJ9q8HiKrAlue~r&GP-zW^vJa%%tp literal 0 HcmV?d00001 diff --git a/images/icons/16/white/vote.png b/images/icons/16/white/vote.png new file mode 100644 index 0000000000000000000000000000000000000000..8a66a35ef82dbe35eddb0a7d35b2d841e1d7c67b GIT binary patch literal 1045 zcmbVLJ#W)M7&a;@Ri&aX48YKnE4IeIbDR&GhLG4Xi9|}3L?R2Kj(usY);@E-Hg2ba zSUMn7egJe~MPf#L2!Rk1zkrz?306=z=c7fa>VPHtz4!b+&-=ZL8uD7mDALCv?{nc9$cy2+wovFimXyBe#-KDs>yV7!YHyq6s zi`T$%taAb%GaJPIW)SIdK^*ex{G43NA{d&mjeaB$#qw7J@92P+HC9 za!Wvg2+B~Ak&;3=J+0^vg7G7AZ`AGT4bvL?;#xuMF&65w-0%0Lep(`QT}GOwB^-*9 z;ufiBCt!A*3ZlgcgNY-DdLi>j01`&KL$+8!^_Q1ZCe( z@)}x4tbvciIMF(4?Sxov;D~HdhxenqI05t8o$e?xdSS zR5__K!PbI^*@1&6em(AYjIErC)eVYmMrezW&B+9;_6Q?UkA%Qzs-SK=UXbWXdq&xs zn0njTwJ7nyu)ex?f`5qe@ZY>mB@fk#sj8a7V;^DN|EZbGgOQWr_-j}uS9}7K6;!Js&GWpDp}`TEN3=W|G ze(&(vxx4E5HxEBl#f6Uor56^z2u1q(UDey3o`J%TJ9FXlt80&vMXgm<%opXg2Y&#- C@*C5s0$UVSV0`(MX0-($!0gZp=;f4Hg?5r%XY=0h^EQ34Q({7W*#!`cr31EzP#mHquE;x`(;6Njfmd*?Jc)VBH+pdLP$w z+>B1E*iPH?YZZgo5k1g}lx>%xIj+8;?CM4jrl13NSx$=oeDyjHEHlNgkL6+B&ERgU zY0$%MgUv-_u*XQ6e8WmmUsf1_jj0aGcCX_r{JS>HeriNDZZOhR}q9# zsT3(iBgE?xP%@beI7BhbG{XLXL-lgl@t0K?RO}m`5^x4>xN{Wq8gXy@ML}@9Z#VZ_BVY3M- zil7)z$D%4is+LZsGmT;_fnut}NW}^^=lE223|z5mF}oAk*gvsK#=|-#UXhUAN(Z!d z6H5GU;(|<@1oFCJIe{FMXFOUJdsaU-HILX}EWe61g?)$;@b9=)F#)BlDoII^`96*{ z|0ibxb4Cc78bV`A~0p`}oAB(LGh9?$E~2@^^E0T^fF~`P+3;lJwrSia W;G8+TA+$aC5#+MX>PX|3?Y{tgsCNbc literal 0 HcmV?d00001 diff --git a/images/icons/award_star_gold_1.png b/images/icons/award_star_gold_1.png new file mode 100644 index 0000000000000000000000000000000000000000..97a22b72eea2e8d65655993c68a9e03f6a40aa9e GIT binary patch literal 753 zcmVPWf;dl@9%f?!cp_eSg3A+l4!Fq^t+ti}&IAe0X@D=QWZj zM%;Z?uCWO_G=wDZ9(j)>jD55+NwV|jvC>tN3^K{^fV>&V*w6!et5~&pa*WZwJy*mn$*RS=E{iBzuX~I|52pZlZsC^BkvS{J~dNA2rd+&Bn zDPttzeo9qHVOn0H7x@0?K2+P{2W3YuKv0gI{t`DZ{% z^)uSl+#vB}3L>aG4!cswJw`5%TN)=W%p(lmIqdQjHn;eWkwjs@obZk>!UG>wB^pj6 zJBPQA@h%5(0Th8rU=r2%$dMnrMsDoxS0p)Oii?!LYWDh=q4NEw(&6(bk$r@sRpbjO zUIP;n<+9A(?2qj-J%=u`3F{W-TmM-l$V z6zWcE#Z*)dyL<*2KpukuZ7vZZD=nXBc*ijUh^IQs>R!T_1d1YTE{iGKO;BD#`7_Tp z-nnR6O6#}%g{8r#E4*kAYY&kBcxtMq4O+!H+m&<9B%$t@BKNE>6je&Y}T$>)>rA=-mfArj&{$f(hg~Pe`ob!G6yckK6Kt94NpER>OV46q( zwTmK1MDR|u>fiw2+jr1@{ldr?4i=8Y^YdUCI46;brn5x|u-6D?{1reDs0=nX;Qa7# z{-z|i5};F>PJvxtr+|jr4WpeM7@ADLx?BL`G4|P6su+9mLZTNX2qk_wz?^5yOziHWLHFBXekkbc}G;BKUEEtks` w1RezffuwAYL?TI_&v!4KPQSq&*j~i^1*0~MIoPHs^#A|>07*qoM6N<$f=#+TMF0Q* literal 0 HcmV?d00001 diff --git a/images/icons/brick_add.png b/images/icons/brick_add.png new file mode 100644 index 0000000000000000000000000000000000000000..fac186bfb79b7237fcc1ebdbd8e052b994d52f9f GIT binary patch literal 729 zcmV;~0w(>5P)$DtCMgZgg9MW%rA`w{qe=RC&!sIosTV%x&Y5$*@4M&R5da8Mgu~%CZnwK` zGMSDDw5Qlvxg&vldQFc=`4&GHz1 zqa4aTal{E2d+%?xN~Hpa!-4hnbq>4T&SMfsJx<_sI*km-<#Jq+5R1j&@p!Pjyv#v+ zijkXszmH5N1FBhET(k&GslU0oiDWW~R4T<4NnN^593>J7ghC+%0s-iBy1u~diQR4& zJ3Bkr-rh#3R02C6wzjrT9nn4#iJ(v@z~}REq|<3=wOUcI*=(F(e}5l)dwZx>tK4op z9zX2?sZtZEFc=JSkXwyLBT@r7fhdaD-Q7j2)k3{q=c;tHXf(7dbQ@Zxg0jAF6KM@h+4sC6jtTy+RLI zIeishH}wCE^>ao^1fxHPUa!B*=4)mnI-uq<2Oz|6c+rSn>=*hio4|XDI#$RoWYMPX?k900000 LNkvXXu0mjfahOHG literal 0 HcmV?d00001 diff --git a/images/icons/bricks.png b/images/icons/bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..0905f933b87ab32f21098d7db8d603209730c753 GIT binary patch literal 825 zcmV-91IGM`P)wd|HNMlZ|>D)M67h? zOIjz3DJbk0=97q(mSBd~-ilc0Oupt^z$#N6O&at_s8u-PL@9M^gQuq(+UH^IB$&*DHP!HzH+vkEzC?S52tN1$mKhziPkOR=y$ zhl#aO1Xly_M?EkN>tM6E5T&Ht4dh{0oQr6Q1b3J=sM^ACOsvD=TSP81#0oTC1v|Df zgpp-GhL(KrE_8t&(jeFR1W%(osQ12tvSpHp_}~HR_8G{VUO;FILQv(P-b)es=)ZlJM#c>{Wx-rgY3D#Ol9rJl39A<60Xo5cneo(9g5a4q>ayzV-7%Ue2}0_ z&TIets{Cl`n(nefrZ+9F8|N&Kp}^StU2b+&pVj;XvgEdBL3Wlp00000NkvXXu0mjf DwZ3{L literal 0 HcmV?d00001 diff --git a/images/icons/cross.png b/images/icons/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a GIT binary patch literal 655 zcmV;A0&x9_P)uEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4{Q&k2kgNVo|1qcff zJ_s=cNG>fZg9jx8g8+jTgC9dB!zzXcjM9uzjPn?uG8r;8FkNESU~Xi-%VNVakCmA< zoAoN26WbJk(nbKDkms+R=!8UN0C?Yg3=V_C>14@ z*Q#698rA(YWHsJu?$es6ovLH4E2R5M?}+|ghuuQb_ zv9_>LwH2{rvHNQO+~Kz41*c=qdtJ7=u6JAMzSLup=R&Uq-V1#e`!4fa<-a~)YvA6X zW5MS`ZiPMz`x3zvDHx>`Z5-nk8x@xq-;yvpadXny#c{8Bv*4S+lbD&|w7H};LTeNub$E6O-CMYHnI*EOxbxzS)#$L0rHt+q|w{$Z!@u2p+D_NMPUen9P!e)1|n}r>^TY4rKi~dU{r?XDE({%upgajN0000WV@Og>004R=004l4 z008;_004mL004C`008P>0026e000+nl3&F}0001ZNklgY&F5K3VpQ93mwtb#JsCe}JN zf`_p5OHj60nvgNYHA?|RW&{Len*q&2=SQZ&yCZX?J*}fxif_yM7Y^{#hu;GL*4vd_ Tez35B00000NkvXXu0mjfY2n-> literal 0 HcmV?d00001 diff --git a/images/icons/delete.png b/images/icons/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..08f249365afd29594b51210c6e21ba253897505d GIT binary patch literal 715 zcmV;+0yO=JP)C4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc literal 0 HcmV?d00001 diff --git a/images/icons/favicon.ico b/images/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..af4a86598dd275b2d4831cab5d06e8664fbd3956 GIT binary patch literal 5686 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 literal 0 HcmV?d00001 diff --git a/images/icons/help.png b/images/icons/help.png new file mode 100644 index 0000000000000000000000000000000000000000..5c870176d4dea68aab9e51166cc3d7a582f326d6 GIT binary patch literal 786 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 By~_Xq literal 0 HcmV?d00001 diff --git a/images/icons/icon_error.png b/images/icons/icon_error.png new file mode 100644 index 0000000000000000000000000000000000000000..3a8be04bba709dc2d8e1facb848965c7af6717b3 GIT binary patch literal 4319 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 N002ovPDHLkV1mfWBL@Hg literal 0 HcmV?d00001 diff --git a/images/icons/icon_exception.png b/images/icons/icon_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..296415e2f6c565b38c2bfa0edd53f0b11ffa5cf3 GIT binary patch literal 4340 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 iOM29*SF`&`{~rK=WQCuj>qPGW0000;(@ literal 0 HcmV?d00001 diff --git a/images/icons/icon_info.png b/images/icons/icon_info.png new file mode 100644 index 0000000000000000000000000000000000000000..14dd1e5eeea0ac64ba29fe2537d89b5e2a1a1015 GIT binary patch literal 4319 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 N002ovPDHLkV1lC`H?#l% literal 0 HcmV?d00001 diff --git a/images/icons/icon_success.png b/images/icons/icon_success.png new file mode 100644 index 0000000000000000000000000000000000000000..04850d7a878bcacfcaeeec77fd2ce8eefa9cbb98 GIT binary patch literal 4348 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 literal 0 HcmV?d00001 diff --git a/images/icons/lock.png b/images/icons/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..2ebc4f6f9663e32cad77d67ef93ab8843dfea3c0 GIT binary patch literal 749 zcmVe|tv9>?g+k#9o0pTxd@;_sq{kwlU;^VvV*?BV8P@}BoaZTQUROpWV6|-M`|^n&)=+8tHo3*<<$NU zU`%V~ZF;?hBSYsjJ6%JzV}E(D{pOLqQklliUf9um_tGl-wty`y*p?eYNW56P>X@1s zZs7KrRZKtmV7Lqj^5Fgr7_`LjhdJK@ltF&O`j7?*NUM$KvmNGz)3WjM?V$vHlPT0AFyF?kLE<#HZabCSW3-oa*6;Z zrXD`Ulwd<^2glP%1Y1Kc1Ij%DU^=ME(jKf6APNlA$Uu;J4bVilQHSWX5uJ$9Zsp4M z0%!@LvyTxz=Z6stxlichODIY+yNGt%RM;m`>H4LOKLFs9Y%b5aUN|2|{0Zw|<_~i} fmXz*V19AKYaFdgVlTlEFMf}2stw}&3$r9Iy66gHf z+|;}h2Ir#G#FEq$h4Rdj3{ z5eG$u6bBxW$+-+i^%SfGF3#=s&*4-Qf6zTq^+;7B=SDVT!OYu2L5CV5-Y1wUw4FE* o-*mb`wZxx2#M{I0i4+6FuUM|oh*=D2Ksy*bUHx3vIVCg!0P`FdgVlTlEFO>Ao8^D>~2WQl7;iF1B# zZfaf$gL6@8Vo7R>LV0FMhJw4NZ$Nk>pEyuan5TVhltIrW&Q1>EK~Y>7GQ;$ZB!-cWF%Rq1}l<=psl5*5Xz9i;M}s*NP=ugs7Q#8Z;Dyx|}!`#}xw_C3!B-yaPC&0j)XcpuX@rNfq|q}N(wJOjA& z>u+z?dfJEuLePrqzy!)73pvLjxk4d6XNZt?hm_iYES{i}J5y3l?}PPNYDBR7oPc~6 zL^d)Bi4Q2L3pnp!nFxN9c2E+=@XAl&+;2m6a~kZj1r3Mz3C=hmUG<{+vWR@t4q?fJ zhFc(ozZD#Mx`^Q~g1v=K6!QnfuqyD4>U4EjF0eamL}Jx| z%&`kR-H+3GBYr*Qx}frLU4`%n9(`uSomzw)t%%NagXkA*R5Mbv9VLDp1wMo$cOMa~ s3Wm%r7^bwK$2$}-<~D8p`#1iScU4^XCLAA~0ssI207*qoM6N<$g3sK(Qvd(} literal 0 HcmV?d00001 diff --git a/images/icons/star.png b/images/icons/star.png new file mode 100644 index 0000000000000000000000000000000000000000..b88c8578956ceec4ff17f81995b8652f6aa2b58d GIT binary patch literal 670 zcmV;P0%84$P)rx?szq&Dw38OK zY!^{rCAFy_2z8TV&4=Ube7+y|oYO*02OOyb5BD7I^ZdAQt`ZS+tMaFrb6^=AxbXHx zH;=|4CCm%L{PZwSS3v3G^sH+#W3JcR_xs(&`Tqt8^J9}d0vU#im5^f#04JL4qMaI^seoYDXwB>7;oyw=|M z1!ayym?6XvqV3ae_f95{py8ukt2TxB^!VIzRRh4#rNu~y^X+P>L{SXo3_|Qqm>9wY zz(9!5s#OBElpmj4DRyjO`0`RiEIkUg%7D)8y}}Ye3}prow;JG>UQOIs{kfZSJ9bYz zskMPbH9)1H6FDf)1=ZKVfe+;jf`a(O{!9meiN~~d0iA$0qX=t0D6Ydx4#RO76h@#R z9_k7Z;$fv6G>QeZ{Yu0n&xL4%!?l}UPj4!j&Vs@?dl=y8#_IQ`5I-5a_T$dJtJ_~5 z4&186>klZh{hfbaA=;QGtWd6EHpMwiz{1}+p>P{x>Jicoy~9CuyDhfeJAha zwQiWX`b5{<{VTR#xU*uzw!_!INy#5PbMJXe=LZJHZ}v`SX3o4nW5I=$TS|MjWHzp? zpR%)g`tIVc&GR>${w%FHedY0WdoL$cEU%rkwc6x=<10~i#4vM@3**fZ!b00GFO3~apz<`-x<01(Y{s5K|!ZYuK!ty)gKnOm% zAzK^C*5t#_FDx$Z)6UV^-Rr~2%IYI3swpq;!^55KtfC?!C^&zi&yr;;ocX3RI!j2X niHSwZ$h4O3+S6Lj$Z&XnxoYYmh69YpSx)X}C_feH$Y2cs^^(S9 literal 0 HcmV?d00001 diff --git a/images/icons/user.png b/images/icons/user.png new file mode 100644 index 0000000000000000000000000000000000000000..79f35ccbdad44489dbf07d1bf688c411aa3b612c GIT binary patch literal 741 zcmVz1iyEv%?$mbQ(# zwJpuiQJP8?X_`#S8b+U_G6=ziYB!xPAcq{)ZJ0bECH@ zYx#`n8^Wzn^J!4>=q^bltNO15ry?0ecSLkjpT@vlid!jk)Fjf7&)q_V5zGs#3N%6* zbW~7Hg=&P0&~Y(|g>$hC9FL?;ttzPDZbpZu9OLb33^e2;FNTGJxScp1&q4M+y2ntQ z?C(=hpU$3~`Thx0eHwi0x`q+!d5k@|0_WHe%sG3e-s^MM`xM-ig!VcIA7H}X1ot~L zg=MLB4w-Q;Bi!!u2|I+Qb;0{{4Q53YX6+4_aXena{nmt*!YG7ua~`qc>o=?@U?rOU znS7%>klzi*muXnbM6i@4FR@s^8vTjDgy&%J?w?`u>NYMDFa_2%0SQ(qJE<3=<8Bzo zfdU60e*y(^$RF%r$kl)p7=7tlCDa$+J7w>}DU(O#~fk>pYuRvHi1E9^msg{tLeV XM&GIRvfA7%00000NkvXXu0mjf&%8>| literal 0 HcmV?d00001 diff --git a/images/icons/user_edit.png b/images/icons/user_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..c1974cda745278a404b9e29fa91e0503a84accb1 GIT binary patch literal 833 zcmV-H1HSx;P)wKwNApj*j?`*x8fjj}+T^cdNV;=~VOf{An4CI`(Q%x}`$a=uBQ`IcOG~+O zhFmpv$jQAVt#pVn<-FwXyxzC#)@;^BTYr4EXV3Qe?Ah}?KRp0?|HEG!QT7K}`6R>T z0?GlfNd&N5h)SxRamGIduGtwfO1+4h$^b)DXu0o8M7BEtF^>B+6kDUTT?1tl0&27( zTPtN#enUj2hcV)v4ROVeu()d=+i@S-%91h3XQQ_&2GLH&h;==J>*q}oafY~7o8YOx zW1up~WKKQv35z{tnCiF(G50p)FLR-gi@=FATO4h+zckVifX~k}G4#+4;u7niZGj@H zRkx!55oQOPpc>+6Y1FM1A`bW&7GI~k7+8?J0DewkUh)LOJkrdTe3;U(*Zgc$Er)&@ zD+5(f%bInl-ZwzNw#9d8%I4~~7EHgs3zhUKHpaRkt%*?UWMg-Zz7eUOc8t^s*~Buq zNnU77^3>6u=K_U{g-umARHHXA*H6dCx-dv81Ap`v`JB`FJi0MFsY3lE z5Gw;{eLz-+019a$Hq}BXzXU@)LB-NA6Y>hD8BxCLDcvPn`&N6q`mxc}yMb~sKo@Ed zDbOI5^9}?Dhz0FQMoKPVwk00IILo!IfS6^eQMBJdKtv5PI+Tbj;^0Fo6JmY=Cj0!M zlv6P`lmJPo4+6tWG2fYveukB1DzkD{lX z41Nw7E`C*@hclIfDYh$GCw<#Tk~h)}QkWS=$Gv&wY2h|l6&7Q)uMmBi&Zxg?1_yGk z;>5+4_M6eEhsL=ygB_>Q-+`#k4z^f-l|x?d%y)UiW7wGPG|s;O<(^b;|pVbz=yzjpaJj$ zhrpuriKefui_0DvN;1Ymq&%nwWg*IrK!Xz^eJWuq3u2H~0ra?EC@ge%+`A>6mV z9{TYo{=G6 zt@5m|4G+Q2zKv;Ch@O;`PfWArmB5n3gvMsxV&Iu>97{a!2kL74wd@!f_AP^O%_&ND zm}1c*+F;TcH^{p$P_|akvD5o7vmT>HCkP;z;;&+8tDBI;koi9eX`W!oH4`pYaHlFZwV;$>vvfQTw zM-`m&R_SPIBa^FUasC0GCCh%{h`$~db`z&-lFX#%(f>H6JD6Z(sIW`RKE+xOL+?+uQ%q z){?+F%=6pqEH{6=NzusC-*<`PZYiLCGyKD}Z8^V8ul-K=AV@SE1t4~D2*b1(9UUc= zN-;Dv#Ngl{rd7e$ZUPXC##BFmV>$26ZQi?6Po#@{4gllsPbku3Vq${Y+FAf~T}OJb zGWEz9{(zcvI&CUaN&p7GcqMG4&7ULx##68M4k(F4l7Q+Xm&>uSv4N&(w6?a=)YOC{ zoYLN-J?7@-9xGBx007$C+kK7w_2Z$(k&l}jo2#`dO;J#Ipsbc$pS#^Dy3Q&nSeE5x fGMT)t>sS8=`naU3reLNz00000NkvXXu0mjf)bGN+ literal 0 HcmV?d00001 diff --git a/images/icons/zoom.png b/images/icons/zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..908612e394525fc2e52a7e9b94689c25ce167381 GIT binary patch literal 692 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 literal 0 HcmV?d00001 diff --git a/images/languages/lang_de_en.gif b/images/languages/lang_de_en.gif new file mode 100644 index 0000000000000000000000000000000000000000..2d636ce73843cb41bd47f4e9fd7cb0d7fa0ff84f GIT binary patch literal 1249 zcmV<71RncGNk%w1VI}|*0Qdg@-Z3iPDkJA(Hrq`~?0z{UH*)4&HQpf^c^n$v7!mZS zLYgHa;z=^?M?MrHT38hm=a!Uwp1lneOZTxw;Yvj_3=6U7-WwJ9;NGwv6Zg5Y>wb9ULO1t~gxT`)`2PLStFGf;TC~K|>v%Zs ziH7p# zw|Q}i@Vu~Uh^p>;acPXOkh02~yUUucyXf!p_>6+>l8gKN`~Lp@o}8xIuBzu^vg54Mp-5L}5yh`SQ zd`Dc1v#F-{v_{}29zkr6ux@L=o}ciRJV9)j;65?xLO$RuB;|H;=aG)&E+gw!OQMvN z`cFIZ%*yG5e~+fU)aUH;v#Rr?K-@ex=xH_%8(Pd{V3@|)&t+uuWmxgDul4Wk-ZU`& z&QSmW0RR90A^8LW00930EC2ui044wv000R80R0IZNU)$mf&UUJT*&aCLx&6_E__Il zpu~$B9CqMPp(BTk1}{pqus|9D1T!q~TgkFzq6G+WJ-{V0V#}L2bMmXnP^V9v4!CIn z)ZqT7TJJMzd|vIthWHNzm~r~xPqvv;~O^_xs0+k_nob_^jTg~a5~ zlR=OGv2TkYHh&I%VyCK5t8E1wNB~W{w(WlH^m&mZ!yOP)Rk+-UFvtm-+sJEIqu>Vs zfCJbL1OQM>S)E$zl53v~z*_)e84hf|*pT2_f)6Ov@Zh=7+=mYd;>-UKAVYuwydXe8 zr;SttZ&t9U5H-+9QbZ4)P!RwH=QJ@7Cj*G#izs(&l1m#Ua3f$sh*(2R8Soh4$S<1M zK?w~WMDvO)Eu29|D280}&4&Lt(?=xt1oOiY$k_A53u9cMP6U(OqJs)PJkp60G^Wx> zGt*qL#|lKaFb*mn%#qJ3Nc6$P7xBap4h}TV!bdD&B+&~#rxdV^2^TbgMJX)Q;|42H LNCL$P0RaFzAc|(Q literal 0 HcmV?d00001 diff --git a/images/languages/lang_en.gif b/images/languages/lang_en.gif new file mode 100644 index 0000000000000000000000000000000000000000..0e7c157eea568f51f12c25e7dc8500934eca57a0 GIT binary patch literal 728 zcmV;}0w?`PNk%w1VHW@m0QMpP0s=pp8Wxs@ir)eP+Db^mf`&d~dc^Yn4qk}rN;=*p z9P7%;?&aeSC}{K!0_t5;-4za|!q(1iV)o+V=7N6sTu<(f}$o)f*Cq- z0ux!@G%fbR!U8sS;~f>@S5p4|{r72JwB+)xmYV7!4&E9P{<^Mgnzkl-p6UVu-saxz z+1lv-{sJ9q-3G?QLW9n3DcpQVteOT8gS3Xq@{O0{-ma_hMJ!O-ANc zN``WNf}+N*T27*}zTT>$szyFedZeDZzP`%FQm)$KVpevFp4xtTHeiA{bfnV${*Ioq z?w*zsa;Em$(x%qx{yHksUQ+s^p1$_}?NveU9u{blu4=Bz4jNbv4mJ)pb-JRKj*_0+ z`u@D+_RjYHvexcOhN?P(p6rZ-^8Wr7UY0ISdh*)J@DDNRXh64jl$UD0l)y0D&hUK!71};6WJ@ z7iI*J<v-40JjJ z({SezI^%Y*|R54p4`8G z|IVE|w{G3Ke*OB@t5+{wx^(*V=@TbT?Ay0*`}XZywrtt7Y18`k>sPE;v3T*~dGqGY zo;`cov}qG3PVDdR@9F7jZ*OmEYHDa`sI9FnD=RB5E-oxA%*)Hm%*;$rPftlnNlHqJ zkB^Uyjg5+m3Jnbn4h{|o2=Mds^Y-@k^z?Ldb7LR`6o0ZXurvH;&;cm~`H6w;ze7WT zhmKVLi6uoRbFAiHSg}QNM$~#2#^;SaIV^5XhYKa-WLTaw7EPSeoxUZ&W*tAf%&o4( zmMs}FnZ=U&t@`p#;`)5z0}*FgxG7?Q+eP>#}Q0kG{s^ou20;n;V<17z*6xlW|Jw?=bOR#PEpA zg=KOFx5Rw`%jtY|_3ZS` zqUjnN13nacHVT_2ml!nlJA2OW%MmP8S=ga0=sH=)An?>j$~+u1KUln%@oJ3-U|ygRY{{;{vyg#@ zVe7)XGmJPB4>%ce-gMSF@xfy;(;UM9kqL%E%RL+UjM8k(gB06(gljgeIR7Z|k07_Y Yz?%8?E)08>7@u6ee}4b|UkVJ?0I^^iLI3~& literal 0 HcmV?d00001 diff --git a/images/lightbox/lightbox-btn-next.gif b/images/lightbox/lightbox-btn-next.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0d4fcf84a784f2cf44c33084145dde5df294ccf GIT binary patch literal 812 zcmZ?wbhEHbv}aIYc*el+|NsBLfB*je{rl(7pWnZK|N8ao=g*%%e*F0U{rk6X-@bnR z`sK@)&!0bk_Uze{Cr=(ddi3DIgM0Vx-MMq;#*G`-u3fuy>C%M@7tWnKck0xs6DLj_ zJ9g~Qp+g4_9N4pG&#qm&wr$(CWy_Y$n>TOVxN-gZ^=sFzUA=ns%9SgZFJHcN>C(lE z7tftLclPYrGiT16IB{Zse}8XpZ+CZhdwY9pYio0Jb7Ny;LqkJdU0qdGRYgTbSy@?0 zNl8ILL0(>7PEJl%R#rwvMp{~0N=iynQc^-fLR?&2OiWBvR8&MnL|9l@NJvOfP*6ZX zfS;eAudlDSx3{OKr@OnmtE;QCvop}+41)kD{$ycfX9#A{0l5VfCk*WW8-jxwT3XxM zJ370%dpeqXCrq3)dCJsj(`U?_HG9t7dGi-6T(o$}(q+q6EMSyU6K`dbQDR_IP*vNm z&M%^|u7yignomt{TLh9X-vlT%qa~3Xe4)wGVP;i|rWZ3pVTZ!3`iIq!%NnqiVmI=~4yG?*UBuy@#qi_9lOv%EOFWqjwm)IFQ?j)3`1T=zfmcO{foI3W6sLtd zS4F+)nC;}rU*j;#AyW5g3x|3eXP|{qRNj;|3pfM literal 0 HcmV?d00001 diff --git a/images/lightbox/lightbox-btn-prev.gif b/images/lightbox/lightbox-btn-prev.gif new file mode 100644 index 0000000000000000000000000000000000000000..040ee5992f7fdb9b51907cb4ba1c5570b1b5482a GIT binary patch literal 832 zcmZ?wbhEHbv}aIYc*el+|NsBLfB*je{rl(7pFe*5`1bAFmoHyFefsp_!-se8-o1MD z>gCIq&!0bk`t<4J$B!RAe0cx<{kwPX-oAbN)~#DNZrr$b?b?+qS1w$*aPHi>GiT16 zK7IP+$&<&AA3u8Z=;6bM4<0Ta{2P*ix)3mxNzb8`Sa(^n>T09oLRGG&6qJ`%9JS+CQRt>@9*vHZEbCBZf^0EX>c(&&|!v&d$!v%uG#9O-@cuN=iydNQjGz zi;0Peii(PehzJV{3keAc4h{|s4D|Q+_x1Jl_V)Jl^mKQ3cXD!aaBu(y1q0oI;!hSv zc7{j>9gxkSIALJ_-@wq++|t_C-qG3B78%*yKVf2j-=wM2rq7r;YxbPE^X4yDxM=Z` zrOTGDSUHZ{$*`cIU*V9G=mkL*$3~&B9F~NQE=O7f+$T8{d|+|! z5LB^I==tcv%)lM$(xcU&+%-wnv&x6z08`gQRsV((28G1VNlI>g4%W9mc+UCN{rKLQV#k0fcFk=e`pVK=5riUkZTAtTQ6isw#WRUmZ3z(a9R-j$e ze3FRFDrSywC%q{a3<^!By0Zf_LL_n(8yB!Rulm4I*~32ZbaR4DVcG)ssl5F2B6c2< z?&fr4Oo*`z)H=|_wuV)6!iF%%R#s*epBZ+t2Ny7lSgg8L*Lk3Uk?9ck4?hLV?=DPC dE8_S6+w=SThsUSq`|tm!>h(?3l#7MI8UW1vMEU># literal 0 HcmV?d00001 diff --git a/images/lightbox/lightbox-ico-loading.gif b/images/lightbox/lightbox-ico-loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f1429c06cb2ffd2910b038d06b01a4b3ee00a21 GIT binary patch literal 3990 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%0AIsZ@y9Z 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 literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/bearbeiten-button.png b/images/locale/de/LC_BUTTONS/bearbeiten-button.png new file mode 100644 index 0000000000000000000000000000000000000000..0c92e52f0e5e2d970558be7ce5776cb78b73e91f GIT binary patch literal 1366 zcmV-c1*!UpP)c>9kc;;c<8bW4Vci(;Y*=Oyw&;IVW_gd@V zuV>C80wToDxyZ%NAtH=iF#`ZI3vDw1GgC7&Q_Fh5EEY9HKtxdiQHKyY7daO@cWD>! zKZ-#>KmjzMk|UMD1`w+VItOTGhKPo!Dun6~B6N{+ksDF;DF~uwRw78i!wOtTH7bo# z1VltcMN|}0bpXzxLmV0V%goF`OK@05A5b$iK!++Cr!29v2oVtt3?YyP0yJ4|<`4k@ z0fsv|gTN6^7YjSaAsCCqDX};gM=lP>FM!KdZvYuUh=>_wV7Q+;R#2t{M|KQ@p@|51 z7AK;fI7xj%%pxpIA}qqHVH2vFhzbj{Fe|aJXi+9KjV)jPhfF{{3}&Lrs^lb&;)aIUp&2LwIs|kWs&Kp@7$Ef9NX##66%ZYHFU+FK>=U0PX_68XDT}fivyzBsp}-?m z5fi;o0HAZr=G!Y17tNh>^5jWT>*?ufTR8W&o5nAhfA23RPKer9N4n?DzGw2p8}6D? zIk>+|)GEzQom)09nmeaX3zg=kN^=tcRGOQ@yo2f-=-PMpv?5S z`u&gJUfS|TofZIKfA=?`4)YGG^W*X3o!fUkyz+?`H>@4_sCf}D!mK1lEZ$4veKkpH zN!3%z!pxkeNi3=WfQlH7TU139pGt*hs98J-v3vwm0|f+5PiRKb$#zidX^Q{)KI!QI7=xDAxcmsLrhW z7GTtH>*T5D&;40w4%kPgxk&iQqnZ4!nOV#t2$1_<%pFkH5y0WXC*^*rJkz=J=i zA!cGO_Y96p5!RWhYL*K?mKTJ6#~d6Gvxulja7HXl!Yo8Wp2;(LBJaIVQ=gOz0KB&8 z`QF~M+qS-bXTzfyB}S?IQ7ZtQ$1tHjk|ixn4R0-27oZ?Us(wH zSB)Co+j};Qx|mL3v)^-;i}$JbM4reqlQ1!HUW)`z6%%n0q?Bn>ZeX9Fu76}V;g-tM zmYLUFd))&oR*~n{w)R&xt~-42fT*;#wUg(z2Uon%v6?)!E^F`Fvx__fK&b1q5cFHy z+LteAd3o!00JxY=VYA%s%NNKam6ax(d6+(=Zse_tMFg-NX5d8p? zAPNd8ENJ|J87d7iiA7I^WF-~iL(aWtueEyE`<#0wC8B!=ncElcW}nSI7xstm{_edF z&tJSmfYvAx~ADBBG6q;ISMGfKwNz&m&G7S=%+`0=1fWS(pa}69RT|Dg=Av~&v zRvA?!6cSSW0+LtnKn6sT*)mw^spGX}8aQ$c!|AGucGRG1rWPYYQG`N(3Iv%>COQD8 z!Se9(TISAmx12fqeQKW`8=an+?d|{9AUZhQ4cSCyR;rb10q$xR%}UWwgn@w|bcYcX zg2L2fB5)APy^&(nFTegaMm=%tNQ~OsKd-Ej0a@JwW**C^W*|e^Zl`&$7&WSeq6h>< zC_-8SK@pJYZquz@F8=zF3fSPZ- zeK<|NXT#bP^XIxlu|ydM+|A9?kxh4xYGo|VOh^euSX^Apdqw~tY7|N#g(NZm#7Jsl z)Fqdf_U?LU)8?s}*H3+Me9zA3UY>nx|Lz@kZ@hQs{^`9hYy;4a5y0H(h5PSXKX-Z| zJ@!hTS->1-X6ELms;bf401D_@1~mgfOIbqFj8w*)Fd&5)Q^lxDF!N_lojiVY&-Mub z1FKe*(H7>vn%K2(aByhbVzP zT66jGr5jeS?wUqNorAeSp;0p-jfS#}Y^=6!n;kB>)ODLLBctQ5P47E-^oW{{jE zxaEnlSEhD7qqS_ew;$MSm)&uT*_mg9p z0FYv}iq_gGOBm%DD^`x$EL8+wi%f`7|1B5kFD~|vTu6XO{vzne_a3sgTxA!}nEW~} zt7~=kQKM37CNEMw-O`vtx0$ramS~zI^;UY_h{i{S>N)qDC1tq!`%}%Ve(C=v5+Q1j j3y}U$X!rU;*&q4~3`84YW`PBu00000NkvXXu0mjfW=#2! literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/erstellen-button.png b/images/locale/de/LC_BUTTONS/erstellen-button.png new file mode 100644 index 0000000000000000000000000000000000000000..01826ab77bc752474559549ab6bcd8af9821893d GIT binary patch literal 1252 zcmVfF_Rfd5ep z5dj4>qEaGNzy_o$Le7EA%!tT{R3(r)LP9QaE^(8JJ{3XK%xVOQcvyu?P)%x4N+2R4 zQX(Y@st$0D9MR<1UuI?ot-)aheV}G!AV(^i<}9hRgoua?Mu?!Yr!HKJ!_YXL;Zdlto#MS%ZjY3Bo~yRYgp6+;Q&Qx&Eb#W_EWzy?EizXU~dS zPuKLF+uwO=(c>pioakHl$jt7}M<1H=?bnBUx~2o@>6+d)3P8MJWwgEXfqh@idvMm= z+4p?(!JdYHHFhYA1mVE!S%L_QiJ14&%JMt}RRzIiS(fK{2%d$ReJjsKTccT?WqF?E zKKC4guqd-Ji)U^g8`r>nBiuzzTHyr_7?%4qBJ)0s0ncYpHi>NT4;zIxgJRu1tZ%o@Z3i}#XwKbmE& zY}ALGg_$|evs6?8kj7j>M5;tWTx1v!IZ9mOoO4uu$Imavj~zX7_~5!1R|DvnG9|DA zcyeifV7-6ty!9_VfBPNXUEMRb?b;KUqHY@%b+ga>CzepsareEm|N8Tf%Kviv$g~uR zKV>&lu9}&pEJ8q8f2k}$#Y6;$Yl+xV6E3Q{^TRKvPMsDnM_VlbMl{-Lb>2B+_1f1? z4S&D?i@hTwBXfEmt{mD%McwQZm;-Zt=8ABs+B!2;EzSZc&INJaF>?@MVHOb;5n&N# z;ULTsf&|aObMPT}?|q*8tYO^R*|qQUk8_{>aD3>wfn~YR0K}yg%NL*i@l?-!vmWT3 zcYNqb?z0=FPP=g7d~;M~H27R%Uv_w(dmn-i!7~Tpz=2CG!XhG)hQL*mQm0MbpfOEd zQIF-d?b!C_<_&9ayy@m=R;~)3`}zk5mMnPdz1~`a(83RlWnUq O0000qG literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/fertigstellen-button.png b/images/locale/de/LC_BUTTONS/fertigstellen-button.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1f72e3152ff7ddfd79c8e3f64d92cc5927656a GIT binary patch literal 1946 zcmV;L2W9w)P)<&;sDe3?bks!*W2(Ltp(o6&t55*7yErC)g zWe}06KoJy_cnBuQHHb%&COMcC4PYX0?|07L>(L+QyWf1l1<@u7*4eY?ch+8Oo$vg< zwb$PJ(7T6^5rGJ?b1rhRb3}xTSIhvIS%%F3Rb>%X6*W^efPh%kh(JW50#QeZoQs@` zo%BIhD^ zQKgRoW~OFpCZZxDDjc}_@aE~ezCEOMRrgQ!2|?nZ8kKk{fryAmiIgO$I>0${L>I^W zGBY!Xs+uV?t9Z{(?w|kI{yE>d`ktFF9~?v?L!7e2&LScrG8iFC8f4TIdNW4^fPf2~ zovgfMGbacKALj1;{@O#o8q;=a@8$zojAAvVI1Mb$#gU7%@(Z}a+Z#|Ih={0=GPuyI zjsYSfEIzPL(+N9o-+gS`&@0FFyyPpQ8kw>f$ef7!z)9+pz%0VTL4-v(%QQ1p6Vc~Z zKGUu9XZqdHJFu|mncBEJM`z%(<)1o>S-mdxwk*!MNBhv`eekJIQlHP)PS|n#?ql1o zyW~qZUph?93?zmi8r0$}saQ2QiK94|iyfIk3FHXmDC=h3JLT7_*R^QTl10xlk$$&% z6SDx=w(CzB_)sajoJq3LbBuP1Sn0ByRa{kO@xec|Z}RRBwzX+^P1WVoLkLz@Mj#e* zFh}Zw_rffy%s%l+k|t^35R^q(jah?8kIo&u_XGO$WYt4|KU6jHwjNzNerwo}cMcp7 zwaSX}C5s;W=54oBR+Iy%tSHZvqIU4$!EX#5bYsuTbuX;RG=JQ?cf^pd_2|-ZP`^H} zyu78<<4ZrPwL(iLfbz8Oa>C8;jSTwMNz&->YLh6GL!3R!L zpU>Am^_KzWSNvndXVdA00n&%Gxd4M~}UG{)4kiUFMz^xfmzw>$L%}|E;%{ta$Fb zlcvm@J1aBu%xMT|@OkfR^U2BD+LN_4Cu(X=)|@g8q{(k$`mtUGWbrOJFSy^BOFmz;9 z1^|?TT{~WzFl}a&CQT>bH)r7W-2>~FZ|Z;l^dEG(wo65qt_znwof&8S&eyhY-EwN= z;^#Z~8ei`$zt-zkKID0G%3k zZx?m-!RK6=g98B|Q}L=6EM^e`>egSXTYw6Rj2tEckWceOq^e7vUDvc}v+VJ;`8)t4 z%0N+*0af)rkjv-uNv7%8x$C4EKYo4BA2z?m;>`EUaAs8 z_|1Wb->%sQVBUcVlUpomL`@bPomi_Un!A?$8jTiVa@qdF8K9yH%F2*q&K4kMDQy2( zgjqNUvxFeQbMOoxc<+7MzGKCP7gnb}*}b!R!q`!%PXMGo$y$@9&5j>GR#bkv)3wW& zEq?#~_ZBalpK0zMJ?zhKyk7amp4a#7zq5L4smtk+i*bsNIQ!F!I7#zKnxsA*b=lO4 z#$NzXt0y=8bH(#V7at7!0rZM*$#DZ!5FCLFq+%>8sw^TRaR^-8q?D#jDaddLOhm)) z829K;XK#IJlc3V6(Ar=6B?+<`usx z8)}X6tF^O&h#W-`oHH{~p=>VDfwv$?Oc1(01IMO1a$=8fyuJUea9 z{Ey`LpNOfluus!`KEM9hvJL*J;?NMD)T-e%jT$y;*tk(ygNAXOiy{Y5$(n94vz#k0 z?j!T^_<{%b?5s|cTx@KAxDFsu>7G?Q@kyUOGs(mehuvBNu@jj8wCu zHU5nkA{1&3Kp;c*WdcM+ySj9-0!?<#KW^lhyGn2M{PJREFpHeKGQ4DP5CLNQu(q$j}9JZZtC$6)}L?$CWL(br-$S zmkfQELX@D8x)4x9zIm_;F?&XV#E*Dee zj7ZIhaLPLpAwHjT{`^Z}HaT)}6cL;m5jhvZIRn(pRO@w&J=Z^Q(TEvLNfDVN7>uCg gU}Q>AJyTiu7p6XVQrCuC(EtDd07*qoM6N<$f-aA=3jhEB literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/freischalten-button.png b/images/locale/de/LC_BUTTONS/freischalten-button.png new file mode 100644 index 0000000000000000000000000000000000000000..6f47b5c8ca3a395b0f96b35243e04de4f5bfeef8 GIT binary patch literal 1543 zcmV+i2Kf1jP)Bpb&om@a~RS{7UMcAPjgaA!oOkl1m`eXzVRm~B^Hm|v=@3X+3E6Z(Ltq5>KemM|s`jRuH_sGta*G~l60w5mY_ z00e04=+py;UtQGC7=xh19LA2=m@qJ*Uw#2h^7IOj0ECE`PzDAK!bn=y-E-P1%zxOeO-Gf z>yL;pJ)o~^4_!8<;n{r5uASQ(p3_T8jRYXcG=PYbBNhQft^N(T?!@WH^-*s2+`Ne1bRZH~#J1ZtmoxXX;o{Gu|OBTFpiRR3D{??Ya zt*_oy7&T_myxBhT*s-Il*H?|5IC<&9d6sDY?3s@ZAGvYcH**)ixnRyLAG3AuL9Z{? z-7iOue6ViQ_@|$J{k6Hdk+Wqc636O@t>wttx+p3}b=JkiL_~2Mg)9O9D1I$LL=i+r zN>&&^G#Hq`7-KN~rX{Ircda)Zi8sm%qr81!-=5t&ws~hslP2EjNP6{sVD<~sN;`CH z-?41@2Om3<+M0cno|}b1Ntf=ux^(a5BL|cZ3&QK}?0L`3X_FnvGc)FVwszH5n>YS? zrZYI5|su~hA0;Kg9(*l$@JUEnF zhz*{_rLI^!fA%7Jr-*#GeoND4&GM0T#bUeL%cjhD<;R1yTdOvoI(4c~zy2Z;#ny!9 zq#_YYlh+lCGp9avPrv>>diO19(q#O|$FppiuD3f!03_!E?>9u` zn2Cv)S(urLnTW|T5j)4ulC$KjbJkiL$2Rf}05bbRPwTd&Tff{8+vwYxJ(I_d$gYkb zHT3774t43#vv+o(;u_UqQH{OhkjcWtj8H*&~%dAxn{#POD`+uYE+`4^w8 z@gA?6HoN}JnbVi(uHKdx-$oTc;l zl6eXhmCF~+-C4awRSFfA-tR0uI&8$sx0WoPGqc6bw~U@J#aSv;R4$wU%4Z*~y78tK z`N(|EigA+`yfoceR~TJcy?H|xQ>b{da`@n-E7xAEy9)=F5hL07XN5a|9#F;Ao3wbE?nf2xF7-`czz+ELbC5c%qW-A zMH86x3O?4qmb3FHcT&o)yx`B%F;h}^@-+z(O61Amt;T+CgxpJo^nYUKkCfqs@1HWv tvYW0oL4=U_pPetR5eaR&5&U2B@;9Y|bw^K`zsUdq002ovPDHLkV1f@P>t+A| literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/loeschen-button.png b/images/locale/de/LC_BUTTONS/loeschen-button.png new file mode 100644 index 0000000000000000000000000000000000000000..f38f6fb0454d60716d0b3c8a1b06a10c790985dd GIT binary patch literal 1427 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 Ef?f%V;s5{u literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/magic-button.png b/images/locale/de/LC_BUTTONS/magic-button.png new file mode 100644 index 0000000000000000000000000000000000000000..87369f51b56cc57bcb0ff86f8f53b8aeb6b33bec GIT binary patch literal 1319 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 literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/screenshots-button.png b/images/locale/de/LC_BUTTONS/screenshots-button.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebb9944b2320e1138b4512e2cadf52e8e661505 GIT binary patch literal 1653 zcmV-*28#KKP)`Z;OE2f7{f|#Vjf*u=3Q(EYh_ENnt}!hMP#VRlwq~DHwxj@E5ujm8qye zCecm6L39Dc3Ra;~u(ecijKvURG!R4T9q}9>pMJ&}59sm@|q#d4h7pTG41yAK6nkQ0qKt{c@e5#*-77!>5F%ni893cf z9nDjw0FLAs21R9NaKwgLoF^MQ>xr0&$uko(iG&~&QD$LcA|?_~Oe|gRyfby;RTU$L zO`ANiJV4K0K#xMpZ?5L;cL2o}S8V830sf%Zj?QD2ouYXYxdj*fSF=vpUB)8^_*@2p|}1 zZ5+qmJ7OYox!CsQ`fO}%9NXB%j=X1LAyOiCL}ARH*Hk}a+C%rPvTz8N zuf-rB8qAoCF~(r}Mg)LkUw*l_yR)@rbM^SzNmHgx9bft4=GL=+@WVV~YsX|aZ|@vD zWC#FE9baj4xu7p8Ep6G^Jy26SCfm~fZb?Z=@NMnf*Y$S$b1RpRy0ju&F?wvxRYCvi zTYE|e4a(b08F$4?+ul0stijgircbO6_i63i2LJ=zArvpEaQH~8ne?ivYDCNkkmlb! zE{P(5LwT6eyaWJIY3VP=*8Jj<%j*@)UM8w9Ncw`HH$));5izqchh#)do{89d_Kv(G@4R=;xj1$F?+L^!&PpM(+p!!VCa)4UKDBD>YgV?Qusr^8YVyE z`mOB=0sw&NE8TxTT+&>Pa2l7qnpV3ZX!-$DfJ{Wh|1B=&%)&)ZiVGqDLf{tyDkOCe zVxDp-T{MA7PvN%yXZbpg3Oc32lNUli9W$i~x*#V(LWx3hgw^TZH$uTfh4g!}E^H~I zfzO}vnB|?mZ-NLB@i(*^-%p7g$*KMg-$nTf9OF186ot$O00000NkvXXu0mjfC|D_% literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/speichern-button.png b/images/locale/de/LC_BUTTONS/speichern-button.png new file mode 100644 index 0000000000000000000000000000000000000000..cef1fd1b1a03c684bc44ae8355cf92a014d201ab GIT binary patch literal 1950 zcmV;P2VwY$P)IRNU?~i6iTfi zQrZTIqHGL>!ioY4h1IgalHyX7Dz1dCZD;^1$i6o-_nwdbG4H)TSeCR@qj2WFJLk>0 zXL9c^zjMyLgCCqYjR=U~8)H1<8-s{&<%%i*sA{aM0*DAPiwKLVhyoyh&!UKch%5{& z2EjANGsZXOGhV@`CkhIxsscdFOf160{INZ==-|V*wI6ZY4I_MEMq>a~RS{7UMcAPj z1P_g8jAyPW`Y3>^imIqG3p2AYIjTKTJ-_auu^lVQzA)4|_MM2A=OqY;h=_tH$WFun z7=s4!%7`yjRRtCiRUsl_Yw7v=r&iVf;s;$Gz3cihj@eW2BVymEhlq#@iV%|qVrVkG zszC$*1i0MMiPK9QIgZI$x8%@|w;X@*!OoA|*7lpkioU3zA30)Ue9!oC`UNnV)hj>- zAVkCrW#DqpItswdOl%$5D4KQPzJsUteCLK~gWHT`5l@9!0o7*~VIczF^L)<$WPw18 zD-$XJC<;jC@g-8`=9|8}|E(kctLYOLW@aKs97W-rH_H#6+4HqFL+-j}f~X=OD=-Tf z$>r&D3qitFb)=QNo_Kw>qZ2E{mQnTSP*Y-qzU3L{6(39*nUkvL`>haxkHFe{6` zb?8v}*wF(^dfhW(=p~wQ<9c0VU;QM>jMyu;}sQ$15g|A6U}sfeB;(cI+67 zmKJws(bzP7%A{NR^&U5B`2N~`ED8YIUfF!-;L;Iy4BEWu56!u+S-tB1@%P61&Kwd}%07lg~ z7FGpBG{%Hs7)6nDmY9fa5QXU=9Y$doMPXzkOU^N|5GfH`qPRWx%x`ASp10-oeUqoo zcL8O-;@f}n3!*_lH0T-67-KN|L)`nP>QyV2_U=@a;qU7q8n=ebv=hr&5jM zhTmSbbMMF@rC|`n>`f$-n|IX??O(jDrVao`4k=w*^;*l8t#WK1+Q0avo%@mn1tK!6 ztk1TZx(m8*++I`EqD4G@bM^j2A`$EHYtIuAVdi&F*R8CdcQkc)cIOq{TivXx{|p)y z9Q|He&h{=WyRXe`W4uH`GMP*ylLdYvVGtEiRefScfNcHE;gWd}gF|_VIIc^*`u3ai z*y6YU^5!46Z8>@JBmh|F(m{|)r;TUQK_DV)Hoe-aRqJ?`=^)7UA`%248ZUntBtlsr znsZmgbasp*azy#oCb+P3Zr!n8A59$wfMv&K&AoPY5w=`@YIa)Awl(cW6isF(H1Yn! zD1fjCV4Q{w5ydPb&TRjPnTW|T5j)4ulC$KjbJkiLMK+9VIAijJBk#OjdduKDhTnal zwgv!xxBQnMee~hR7oY#iSNldb?9r=u$JUo38y-ARJ8SBs$c6wA``*;M&-%(|Q>nAN zt9ML)V0^wQr(eYVB6_ZcQ4mI9WTQ#fJyP6a5CEj5ap%9*zkKT1zq@(>xYfTmK?Nd! zU=UCNg_T%XgqWGxcaCzglTVv`1<%>kAtH?V?xg2_yL{QA$8PMS>Y3pcH+Z2!d@Cr+83Z_04t zqVBmd7u56Ph#WafqgqdWH~4d)sol0JHg$yVU8Ju7A{z8OFh*5b7~{P#fU08UE7chU z006UBcKzqzlC9NEEA{=Ohdr}?OVi1HhN2?GWTPkug6*d(ci6Q#(^#6*p|ERFVNqd= zqGUm#?q&83BZ14a^W`!!=ODF6Tf07*qoM6N<$f`9$KCjbBd literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/sperren-button.png b/images/locale/de/LC_BUTTONS/sperren-button.png new file mode 100644 index 0000000000000000000000000000000000000000..0a904a795c1bd88c44f055cdc5cf7768a9fae180 GIT binary patch literal 1579 zcmV+`2Gse9P)6e%PnCx25tJ6P@b+?z^+@KI`1< z^~*YI?Sp&&djJs-AvDGWCNu^S;ZG)2B@tmE5miuykVO#z5m^{m3_@T`U`%Mt@4egK zLL|Z>EFub^3V^Dr3ZXEgG5#kaDxwHG6oU|;35*HMA25Abltow*9I7Ci5C8=g37tsL z;;({$h=?eNg6u>LfH7zgJLvOuc*W9GpMITs_Xhw~6;%-x0NTFQ)@|!Ne2gaY?g{`b z62`=#(Et$<6%@fI4R|!ktZEPe00BA{oy^Lm2dbu+!mcMTS`+r}2jKGpT;0~j+lFgX zqll!2m8pV{T~%3?MDU}p_lCxVfeC&21vGilV{`gok}_aA4wvkzmm905cpD45c6)BM z>2-mMQr)(uiV@n>=r5gg|C7PBWdI7Qq)IF#f}6MRMgW5l20<7YfMyVwfIvXV2ZS9a zWqufRZZ3ELz{0NS1uIqI@a-d8t*47Rud4$9Vj*TxPypQg)h-cH5i}+Y!c;0Wm?V`! zK!bj2W&#PPjv)T}i$fJ7+n@n}{1r$SrD~RINnhuPm^=q#jB(a75sMJn$VO2d#g3d4 zVj)o?am<$3F*#-uVOEx7jBQ&#pK#OlgG&34x^Bq(n>MoOWf%2XvuefQzYe%{?5I6^ z_OR%_efuhI88@i3|83*TcJJEdeHJfz_SUhZ+Su)SzWvsl*A2d6=v4#PtXlC)+kle3 z1y8T=EWEU-u?-Y>{8iii{3wnh8xdI+VIpU(iJ~ZuW9KX}5!q}UWwMzlj-oh@VjEj> zj){dxiP#by&v@ziXQ$7YS-Wvd#niiN9{aZ?0)YDZ9m{Grl>TMl-0InuXm0iF5u?lA zcz5&YaTEXbK$Z77@Y7FEz3@sKyIs$3ckW#B+S+OVsG9faBS+Z@_2`|dSqAB%cG4+b za|#&H})QOF_yfP(1DEs7vAQc__6(O_T#V~oM(@3HF3HA9D2 z&${=*OG+;)9k5`@GDiXcqsL9cAa%o-31fy`<48XFXv+s1-|_ybPMy3@*~D^h)bwg=PZ3_dYk3AywVo;P#3rKX;oG59Xlju1ZeI+*j!(e z1rLYv3bF4?N9WT2(gBsTANq3ZXB*zEZD?p1GHfIOSm!d?Y!t^PFqv#tM3%n3zMxAN ze@iBt1pr0#M!wyyrz3Ji`76I9vvYf@X4a8A?zFHvI=h6s_wp=M0ibyXFht~-iHVq5 zn3;*0h{-V#JIBtFv*fIE)><3KHag~*RzALd$M(ywylU{U;h%i?L2M%cSU7KPW8;s@ zUtZkr;!9&2^||1}4eQp#Hv07AEq}jbviHgTL%x0do<|O<`z&?OI6QRlNM3ljsie0War+1+oyyV6+#fF331 zm)|_{yxx7M{B4G_G_hjpf+rr?^!9pHnOHH^`}o-_XCJ?38-?HP=rXe$4>#pjv`e8U zl0(yNW<|q&^W8bUatY&e2VYtHZbATj4@SV2_*-$o+=3JM$Un-2h|&Y5B|hw|3byPv96@E`C`Q%J(@-#_P_Q9U(>rlIUkB5uP4m#p593o{8gA=5&ubxH0h$2tIj^rp3^ zEPPN3(*Kz;FD@?071z#t>d$=mE|WR5e^O=Rz#$0_NZuVm0iRpBF6le@03czNpB&9E z1RaSB0Hi;C&z*95RNNCy^Z&2H-~O@h5DM+l d4~u_R{R{(BzKnl!;1U1;002ovPDHLkV1m5u@6!MP literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/suchen-button.png b/images/locale/de/LC_BUTTONS/suchen-button.png new file mode 100644 index 0000000000000000000000000000000000000000..8c265220194e84c0fa0b84b50e24c6bfbd2d34bb GIT binary patch literal 1306 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 d+sgmV+uya9*lvkM9nNE5YNLBE|F@Gx=RT} zL_|uYB#|lu%)~_9V}F^M88n5%V);PL$Usag8s?mYYylAw8I0gX1CJ&i&6o%P0bQL= z863X4nBOr>Feeh`A}7pYz@aa{0LQC0AO=K46iWtOz3NyZnG}w=48zDo1bHW+h^nY_ z2!kLD7$|@s@+T7+03(IQ?rR{Ky9W(8a{QDZDgeZbK=L&aw>$iNr-BPF2K2%U@^CoOx;a;<^dr zD|q~s8CvD9QNst18a_BPv??9)W8?aDk58VEc+%0fwzm2iQ^$-LGO@PiNXzG<2EZrm z{cz8m=jyY$TxV}mRGmm9E^;pKBoc9AB9_lfdp4JgB2@(;%x1Iko?!rR;+Qz#fW1-t z%SuE7LfLKfb?cW+n>U^Q{=3>oCvR-tm3OYxlg|IBjNW5?CZd%ixM;O7^9 zJ^$MJ&3;}KZCJXX|G=t6E7u%8^y%t`Wp8bH-}`reujJW7OruE`~)S#-W zrluky;?xu%2AM>mr~)AMwSlb6B8e)shv>$;6puo z-caf(g7WgR`S*^lzH3D0&-Qizmo8ss=3F)lzSW)3w|535UU~9ZXQrxgFMzl&@cz&_*MXn|P8m|Z@FrPl>p$?0XXY;arS0tQ?M+YB zZCKmbRO(6Rzq(?{@XW|z_hfSUEP&oO-*WiS$G7(ByL)>x0Ppl;+327l!?tbRSUa(< z^^2CK#>a?Fu|FGu8h4WUdD*70TxLDE`6)2>7CU`G3?>$7R)h1(lLRUQ0 z{mn6b`O>8ud-ba9d2Iassds|uGiSfM;SB)OXU=L^FsE_nzPg9UHtyW#qX!S{FN*$l z;r!ZF%fCH&qR(yprp%}xP<3aLfAGNm6UV=L^66(g=Td-!jz*~nj+xQcJ)gt`0AE%M zr8QB?6^!DHE^CHFEQJzWj!fvBTrC&wUR<;y7b1Y*^+g~<{M3TCFgifxi kt+?JS%$Gcg{%-*O0>c(;zy<$+WB>pF07*qoM6N<$g2(`n-v9sr literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/zurueck2-button.png b/images/locale/de/LC_BUTTONS/zurueck2-button.png new file mode 100644 index 0000000000000000000000000000000000000000..e19f7b65ef857d2cc8c0d855a738388db22110db GIT binary patch literal 1199 zcmV;g1W@~lP)Y)lwLi0q~4&wv^9kj=gK?6p=8d!IAMakATp$V}^=yV!TFeeS*c$G6ux z>+q)we~=)Ni%2H92uX}za|ht=aqJGbyScl&d5XY2S9201)f8$%WFnbJE^=cRa2?GN z2^e6JN=YhV19DTP2^voDa^9kSw@f~X{1pL zGXX>>B-DcNY=>fw4|!1RSxtc-%2U zcu>uoMNpAElRTDRK+@_RNPtK(Nd{xR>UbrY8je(k;dE6+D`>82rWOM7EXy+iN)Tkc zGSLAz4VJ>!OEULOzx(vL^U+^r!ZrR%1!4$?yCI3l%nG$aEr+|B1+zjl&+-Wqa-lnn zpb!*Bmx#bYT&IonRsXjkX!QRy=PIc-t&~OrWR(ZZJQP9AKuXbSX$Wc-LaWhgG@6ZO z5sJcsS}+g63e{H7LPMb%%v4>it)pYsw0O*)Gh_ao86C5x)l<I zH}}6E$HTHcue^BIJ<~RA-*xK5mpgm5?ET>57(epq;d5vE*Kh7|O8u1f^%7s^Ff%hZ zH&s;)<_1te*CJOl0JK<3NScw#kSYvFVZu~0YQMgi+18EEKe%Y|+<6ND6v3)g94}wd zRRxD-`_G(SyKxJ%2^|YMI~H`t?1%5Y+kd8S)Al#i5dZmq=i*kHT1m!-F5Iym=RuV~ zdHrR10ZM@gC)5hDuw5=@_WG8M4=m`scW%dDgM$G6ymU!KnvDj47;!QVuFRU*;9!H2 z)xUG#*IzFFcH#T;-%Xx+=P010l~=cQ?q-&H0i?bl#`6%u5P~5%Ban)Px0>~@wtL&= zIUVz6-`~+}H2~av%dMwQd~y4v$wxjp1Rw^ZA2B<9=Ip}<-&wlsvHoxRK05Gr&z^k% zmalyJ=O2IA_3BF-w(XcW@utyn@v1K>Db#u<#Asd=fwk3EzCPe(H+Ai9qm##bPaf~x zwRKbc*tKTeTRUF^(6wf5@3A9AD*%Wdz_KU0hGie`TD@n-*3S+doHS+XidEg!{M+uB z()rNCdw1`AYV|Xt;!?uFP@^;qj=S^V(c_5#5X)*=S}Ubo#wg7gv*xJ8QkLM6$mAht zyIf>^aj~m%Aps)li=ZRj_mGw3O1XH#w7eBYbJsZT?Qc8dA}8P2{1X5G N002ovPDHLkV1hrXN8bPd literal 0 HcmV?d00001 diff --git a/images/locale/de/LC_BUTTONS/zuweisen-button.png b/images/locale/de/LC_BUTTONS/zuweisen-button.png new file mode 100644 index 0000000000000000000000000000000000000000..4760c3eec48af7bbe70ae504ac25e0d72b1611cb GIT binary patch literal 1449 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 literal 0 HcmV?d00001 diff --git a/images/logo_uni_bremen.gif b/images/logo_uni_bremen.gif new file mode 100644 index 0000000000000000000000000000000000000000..069ccf6fb04ee15d2a470d9fd28c295722cc8a02 GIT binary patch literal 1814 zcmV+x2kH1nNk%w1VGjX40L1?Q{m;_=-{JKD6804)_b@;BKuz~hT=`&Y`EYvre~9^i zi2IM1`=6%#ueJQY#P9F#-{0TBz`)PX&%3+3s;a7*nwpA=igtE(W@ctpRaHerMKLik zAt50V5fK0Y00000A^8LW000pHEC2ui01p8@06+!*U?h%YX`X1Ru59bRa4gSsZQppV z?|kq7z@A_zC=rXRBT}R!HG|NobV_v|twikb^kiN~-Kuy@E~~=muTdRIXHgc9+@z6f zL~&2YquIzk7Vp8yXdbavc{I zk{yK_mL41$7bl;C6S)+Qry_Q-oDs3Jn}NQ1vXaOhqkj;Le2yKE5qW!kf5s>YM+hVX zM++nX;7UgdCFMg5S_LW(j(>mCBYA`)e~kAc7=Iik6y(jLCaDvNP0V6-cy{X!KY5i> zVf$lH5hxS41j=(5Azz7j^0ax3B*$R2K_UYGYNU74!@iDlS`bjuphN?8=5h}4mhQ*^ zGeCn19ZDhrPMt`V93aZHsne%Wqe`8M!_5{jY_PuZvb9ZCs$j!PvAV=-SFKmMrZu}( ztlPId$Z9Ezwyaz@BS%Q$$fAM7FZ$2f4nAi;w9 z@$>87&%eL_{{RLk;D7`^wOJT-&81-ffeadW)>kGR2w{U1QX%14YT3mGf)#c+)`lQr z$k~D!rr_6KCWu1I3n%tshF~kI&?0Uq!T_UUie+HIGyYxJR*4A)dBSI*@gV{Px#(tr z1+0yLQNkT3rrL<&~5lA4V1Qt-^$&waenF}OZIua(2B1{0LNl2=O!317TDI5uN zj%g(cTv|{8nrXr*LIq2r3Fw|DP;g}lPb$eIWg)J`;fO*)IwW|wd9TWpM3ot+eI>WS4FB*=VP&_S$T> z?e^Pn$1S&qK6WPQ-Pg`NcHLYws-cK_qn*`+B;rkY;AIaEc;TBNPBz~W`dzr=drKZ^ zq>WR)HRNkpYq{o?doKF_kA{zKH#9}^wE}Qtyeq=Go}rZ2j3^}Mnv45!&iLoCQMy-t z&9%U~oC8CHWqi70&ilW=9rW@pbedX#eJZSd z_J`{78g``hFlhimy{*Y%t{oL%-+`e5;hw)d959KnpqB*RJt}#zQ<%OSVhw8Kp*W*) zh6tv|8VDRB5f`jfDprw;+bALsuG64N904l&IVV=Kx}QG+r5YEJuvW&9!1_iI3qn|M zUb@0z0~t}OzL{=vKnmjBn5V$PFz{Z;x7H<<7Fi38Ohn#$&E{X3mQVPx}K$NH^k$|KW3D`q~szpF( zI2*^;x8{yuUb+IM{>~zK?AaLP8PsZ03j8@M~9G7(2)(Ec@zQGaOSgdoK$M(G+HWMdbX9W zqXajV))5GB&ZU8rr)d+XPpB2gRnD=b0hp;gk%~41m_uwPSb$a~rqvWIpgmM|n@>T? zP8bBWrD1JbcaSoG0wjQHGh09c46w=pFg2}m3#w3$uui=46aWh-fKv;AfU^2^Yasvt EJFn*|g#Z8m literal 0 HcmV?d00001 diff --git a/images/marketplace_header.png b/images/marketplace_header.png new file mode 100644 index 0000000000000000000000000000000000000000..5fb4efcf6704aa970a3b019df3fc104b443775f1 GIT binary patch literal 29427 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 literal 0 HcmV?d00001 diff --git a/images/marketplace_header.png.ori b/images/marketplace_header.png.ori new file mode 100644 index 0000000000000000000000000000000000000000..62f4c2b61fd045ea859d2b151c0759fcc5f00724 GIT binary patch literal 14412 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 literal 0 HcmV?d00001 diff --git a/images/mitglieder_ev.png.old b/images/mitglieder_ev.png.old new file mode 100644 index 0000000000000000000000000000000000000000..1477c36ec4e2c9eadb1b8dbef85d9ff1f581bc56 GIT binary patch literal 5382 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 literal 0 HcmV?d00001 diff --git a/images/move_left.gif b/images/move_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..d12c0d949d9b56e2e6e08ee1ddd752165df022ab GIT binary patch literal 86 zcmZ?wbhEHb;&8hkvF@ekq+{V#g&J|omcMgnWUvMRFH{_n literal 0 HcmV?d00001 diff --git a/images/nachricht1.gif b/images/nachricht1.gif new file mode 100644 index 0000000000000000000000000000000000000000..02e615471e6b0c9e990b59fb642a24fa05214482 GIT binary patch literal 295 zcmV+?0oeXWNk%w1VHf}v0K^{vjg5^vG&HEFsOswK!^6X8WMp)7bmG?5%C)uO;o*ga zh3n(v-qX|5)6?eM+}Fs+Q%OlkLPB0zT5)b}dU|@>+uOdrzS!8v zi;IiQ%*_7)0RR90A^8LW0018VEC2ui02lxj000G~;3tk`X`X1Ru4oWMP$ti`EKM9m zx;N$jKp#h-u6p*xXd+Pw11y~~`dn_T z+oM3?ZI-9ac5H5NeSd&=gN1Tsa)EdvdVGEylO2wOesg`7BM}oA3LB!Mq@n@|0|_J< t3KSa`u(7hR2^|9iBn1-$4Hdq>z`m##xFZD^SelxzUo6hg(9t9z06QvEg{S}k literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_bg-top.jpg b/images/newstyle/sip_bg-top.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57eebaa982933c5e614ebb43202f77a975abde20 GIT binary patch literal 533 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 XBWI_z_KvFbju;C7!+-1|SmXZ!9j-e3 literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_block-top.jpg b/images/newstyle/sip_block-top.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf2a6cbac545384895c289555030155e803c1449 GIT binary patch literal 1105 zcmex=C5UDGKfoZ!!C=I2iJ4K5fk}{&S&;Gn5r$%* zvzZx~n1Swu0cKV4}6#lXYN2y_9nAcH-_?}w|eK3!>aQTdGRnrx}n*>gHS zcsm?BJnx?AHkG4#PApUA_-#~dMm2}{V6)Uq!nR~1! zuD8xNSovas!8^A-Z}%Kpx~SpsPN~n^K66d$V&;32eeU)dttbs1sIrWqp{()w!~CCW zKQ<-=t>U;6S|U~RC*3{7Ti0z{m7kmN)Zhp6LszjrWiL9oTKS>vM%8Bv_9h;mHY0nX zk7LLEckN;#F4;G}{M2Gxz16OM{@c&Y*FN{8rdOW0oF=H`<>`GUG})m%%q=qfKr`d| z{E*^kW0T`r`mVonq67H$IxRM|mps?;^~1z-9~LUzIA(NjuJEFrfmW-&#$Vw2080o6 znq@=svFRN*HYiz%xUF6BZ0-C_%MYH|-=(`^LD}k!LL$d*-I;LfM&R>jViWDZ)O-0@ zD*Cuiub!y0HBo1Yi)-9|?}@q_1$h56{ElD$XP^4RKmQpzB&y2qWX`+2qH3-P*93$` z2$pbOe15Lni}cCs8+TnkaO(2D$3EZgI$v3_Afy4I2*H|N^t(FayR*&Q8s2O3*uv(1 zmrCFEN^Yqu(-MRl1dHYN^xL=HcS$~Z{UC442cs?TcU-pJ9`IF5LsS8w2*Fajv+v$5 w+Y9H_WB1N8~*<{0kEWWQ~&?~ literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_bullet-active.gif b/images/newstyle/sip_bullet-active.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ebc494899d25a64ae869ee6a00fcbbf7ea972a2 GIT binary patch literal 53 zcmZ?wbhEHbWMklFXkcKt#i;oC^Jm4MEDRu^10p~&3`{&d{VS^<2+W%^<(N1ZgEatL CH4T>l literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_content-bg-right.jpg b/images/newstyle/sip_content-bg-right.jpg new file mode 100644 index 0000000000000000000000000000000000000000..791a866e5fcea5a29a402951f94196cb518c3eeb GIT binary patch literal 321 zcmex=iF;o{=v;^GnD0RsUZK7IjyJ|1CV5fNcw z8EI*08F@HhWM^mR<>8eO5Ri}(6%>_%OAyQWe}F-d1L#P8W=25#;ZZb9%L>2{`^8XeC4^S{CI;~CFe zi-!NyvgKIzvQ_aX=2ib$vz)h9Z6b@37{k99@k^1ICdL#UDu}Sox#QOBgsk%o{e2tj zLZeNsX2r(|o{heCKe)XuKe$8fejp~Ez1$?<)Xksw^dVYIH+$CGV@bSN-Xep{r$-VQ z!q@*yhFFi}uTaVQZ^>h1u(!9juXnJoZ*XLwe_&*M=iuPZ@!g}N=@cHJTx>sHZ(LeM#0dSD>CwS6x6>*Mtb4Ky1)epKf(zkT>T}u-Cy6}reS3_ z#|jLlML?o-b^CgH`}zlv4xL1f@Ir$)Ot>yi;Jf(l9$#;_FsOhyB6RKBC3VLi%8mvu zUX^`gPd@Xtnf(XG=U!Y?)as+x6Fmo?n!kPXwVbVe;MuQ#;!yH43;EQw=bZ38H%`A| z{Pl&$zW>wOtFNaIKmGhCzwz0PpZ)HQFMsm~KmYxkXO>nT|J+x;^}}EM;ctNvgja8jD3Q)lI0c*j@M|ZuR1}7g)k} z4mXbX(ys6jfa?$KGP%ADJco!)OnC7K$q|c`i9-wqC&(fxxO|koqcnCjAeoM~zRPz9 z0%*@z%22Kqi+IpY+P7%c%6a?b;`tnUp4?o{k5zQpNC?`(0*=p_JKD!H>s#?Y~f~78g?I7BG|- zTpIjNOvWx49T;D>=qzLl9k`*K0XbvMnYE8CWR5RdR*@>~ZJ;}t`I-3V)Q?yl5De}A|M z%`qv;Px!|HXb{)kC-*YCs5s$w<9yye(Q!s>pXl%XiOw=|A99e8)2PTTs+ z#Bty!r^qte4yw&sIP}QqT{!$CLFS1{6}l_JhbERi>BRu}VN$<29A9>vN-PvA+ml)P z+j}x+l|pOTN=TX%L*#+!wMsU3!EpSG2KL;kz+b-e-GJZBPX*3u88K5y7|Z6d%T;6k z@`;7q3R+8YhM zsetF!>gwv`sxoO+3n59@^^hosWO)J{6ZWODlUi%6_Ubi*wPL z3cyy^iBhGhcFSlr81uO%Ujxh%kiX~OiPlUOh;2{B9#m)T3VZF$|kK`jb=(i zHvd1!y1#?6#doHI&S(rOFnE?OgQOn02pd3+Afs3j^O%YKgw1JN*L0Jz66;TQ*QWRAW zYBH)K0|z}35f!`<+SfowRa8a3Kb}aX)s#AujB09HPN=GqiY62(oJuHiSdT^newwba zQ|6jcJeM>v6*h~7tWkGcw1?Yhh!Z2QT$sn6iDU?Cnxc95PCu1!G^_?yQ4fm@!h?t; zyHI8r7b?JOlFOq8sZ@kPcneQ}0R%>kY9fR16m9qkh{!|~#EnAm1L_n;!3jvmQV>N7 z=_m@KOCe+dnJi+fN-C%n!dgHV6JhNrg*xm6WIVctc0{K52<8D0v!zNpbW%uV^(d7^ zh#90jy3TlXiM6RVooUl`I-<^W>eLb}{BRI68blTZ!@)=}8q|XbjU)vnIVdSXNeyC# z!6Ze3NCz3bND|}-(nmukArX)>NQL{gXfz7_(HSW!rS*7fMv`abNIa#56Ii10G(8X4 z78^Te+SsNpc_+-ganWlPO+VXJW7(X$B64&?Gx7lsZN8(`@2Xr~Hn8qG_qmSE%Vo2z zC1*8THR1&<*0Z?-&}QElt?lq@u;WCf&E{eLVB^T$er`u#I|ADg*p9$< z1hymae-we%=K!OOZvd-!*~gXEA@54-2tF;~er>!<@b$YF2lQiuSJ+jTdy%v?RKJ#i+R4&ONsZtc%H+c;XT)z NmJT-^X9RlJ_8gfJ zj0{Z7Kxe`M&~c1RoIqhTAOI9$2P$S@WoCs)PGp*VnI(i(6lj*=<`Of-#Kw(6O~N8< zf*5-L-(uil2I>`L7G$tz`0`r%r_6tbZS%j{ZE!%dW%zPgKklD+{&(hohTzwrgfc=v z{Ag5_?6<%Faa#SCDFXB2XR804l>hRx{`rTW|1lmI zDFMQqeCgnShO6pF?#G`$v%h4%{kut(_4b|n?Dgk2B>K+%?)mYfx<6n3w#xeDe|P+6 zXg_}b{PFKUe*T>Pp~LD|&0C%o-Ua;ra~DqK%wv4{d5h6P-2=9EWo;pyKt&y zJHwZswDk?W`qqhxzjJj8v!ShN@Amqro(qBt~=2XelvTB92xZqm|^4X%Mje i5d2;L_@ARzLNL<|kps(E4Ky2lxJEf6CJdVY-vj_|*IGgV literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_content-bottom-right.jpg b/images/newstyle/sip_content-bottom-right.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba02684535617c4c84a85a3c942931ed36f4170e GIT binary patch literal 457 zcmex=xKPPRSXo36p#*B? z|62?^%#1)gnFSf_8D8$GIUKs|1E1c4xxp1049d@>)|xjIma@E>eb9kX-r#EH9_H>9 z>LK^I7&v~mt@eE&6YFTT>_Y&<5yy4jDXu$R7JpLS!rYuZ_g+rRAKsMN6?GY2{8t+I zUrkrEchBo9oUpdL^fd2j8;+iDpBa;7ck&!6GOD_;MDpWz(FU#Ta(@M>hW|GK-uYi_ literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_content-bottom.jpg b/images/newstyle/sip_content-bottom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66cede980d22385c99e41f1b8d40848dab801ae4 GIT binary patch literal 1845 zcmex=C5UDGKfoZ!!C=JX!ptbhz$D1XEXer(2ty6T zVGPVbhe81>3o{cNI~OA(OaMj;0M)WHF|l&6@nzy($*Q#4N~aC}gy?Ofm3~ zNQ;@9xnrY}u=0n*!ifiynv9)QOhnlQF^v0vi-Cuk5$F_VK?Zw`h zNry==E6Ji4+%FB=C*S|>T@t%}6AW@kQD+^Q}KN&Wil?=PYyjig%I!)?fV{xAx-G$H!M5UfeD>L1(3<_;25} z*1M&?zHxJYeR)5x;FfEdcW>Umm2H~)F5~K#tjlW~YSQCvx^G=xp6WH{{xj*@I(gIF zKb5_Gd42!FxpSi@{JtnKzkKB$n>A^#OFm{t9m{;vIP0l@l2*II>j!!v-;`Dq@$F+8 z6&MWUnu+9*&AY3$?nb7xpV2*%gcL3cigp-+`D_Zchp&(w7FI$hHD=j+y2(X?$FoR z{b670R$I-DlZ{vBH=o_^AT|5K{o5D6HkxVQtg2u6OZuk?kI@IAK>=-FyfyyAH?6Fy UDuT6l-D&&jf8+yX9sb`00BU`Dc>n+a literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_content-top-left.jpg b/images/newstyle/sip_content-top-left.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed4f285369a6b235d47e1d34e2aca3236f7bd0ef GIT binary patch literal 20919 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 literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_content-top-left.jpg.old b/images/newstyle/sip_content-top-left.jpg.old new file mode 100644 index 0000000000000000000000000000000000000000..190f4fe592747a07c4e9f5bd0330ddd3104757ad GIT binary patch literal 17841 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 oZz32xA?~W&X@St_Z}l#b1w+50iQo~3jhEB literal 0 HcmV?d00001 diff --git a/images/newstyle/sip_logo.jpg b/images/newstyle/sip_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e513a681d3a995aabffb8468041e8e40465a08b5 GIT binary patch literal 10737 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

    ?9cnS&M$M+{q`q~goQVYQJu#= zA)V;EvCJk#75x}}69JZlY*Bt|0=6<&+=5_(Z*UXEvHkdrZPcPfbg^a3TpxTu;7f|DFI>%dYsw}Q>Z!DJrKe<&LPn9sRl`ttMUX%2WZTRMp!swTn2#Yy~ zh|7&eL$;aeP(}lZm_~Dfe>*jPd$YHm5hw$g$QPAISrpBfvNKeM1QgGH(RN^ZIu=LO z&)GL4Ps7B0RqU(B>Sc?$mQvtcvN5Piy}IR^B%Do}dUXYy%K7hbzfH$0`P6knx$2@_ zoC)iER#QY0KQqz8i19?B^(tQ)j9?kZAv`n$!f-FKHtaq+LwrO*HU_l)p&7PMY5?%^ZgxGJZdt236bNLYh5p%(-4 zD+8)U?E-G+T(DbWAMn!TG~O$Oc}U2|pGv>G4+E@nLHc^yBMWAtXvoSNvVn3DTeR$#?~4G8T;6lXmZ~aabYS5`Xk=HRLu(^ z)tnV*M!;WhT=uUFi881pD2!&R5G0OM^~}E^DG{89>gw(|y%kQa7ckZflPRD>iA+TK zo`>zb2J>3}cDTnvbf(MCEHFWTny4btielVu@8=+H54g^@!uxhfs(YwGFkFGaE;{aI zaWqZdB@|^SCnvk|1YpU~2mXm{3dFvgpng1_S9*?wSQsn1h&^8k&d6pcbJ1^eHMDJ2 zmqV6ni#Q>BvfrVR#-0`s#{z|k_Q(A-KXuz1`|kNz+}7HbuQjU6GxPK_ZNJ51I-1B! zeXxz~E1okX@V9PDx?!nPP5lnuq9I>49PSQFTA;gmiPkG^`I96n3=!Gu@*th}fq419 zkj6R0q}agus6+f9Bv4`tYfl9Y{`#ziZ%rL+V`-4x)Vr8X#ns-amA;|elQ4DBk)V`{ z*>nCmH*F$Md{er$O80l*Tuk(o$Sk6D)$-UfCi8W1wY^O<&4=k4uBN6a=qx@#5&x9# z+*muiG59FU?&8~}dW)oaGVVmtYf;C9PK^_4GmvgI=Xk51GAmA%9v>oDVo0PJR`)8y zEzhTkJ)e1Zf##!A-2kd0SEXgaVZ$^eb=X>)R4ikHBO*;E;yD9uKFaxG+L82A6q+a8 zh8|)qi->*#j9zpkT`B}$V)Ed9R?(L3;~^7PZ*1>>#SP=k9xLSEtpcv43{&FnO316N zzuDGu&sAJQ?Ry_+bTn)!stEH0>qhkK=}otbkO4L82KZuK&Vk-MH6&#|k3Aa>VusQVZ@ za7u`fvRye0^DmuX3t&e!3M2t<-bFfcI20|0Lr7(^>{)UD+el%R^;tmNp*%~6C5x+3o? zcl#i)q5Q&94PtOM=Y}>9TNXVL2F3-N;k1}$&+5{P4Smz8mw?@vVCwf=i%tOVt;*|u z&#qySAHB`}CfHxkI~Oh;492GDpSf*TemLSEeQTdz)08V=bDy({lsZGoiz#|<;5k#& zwVm6TqJl&B_xz!ST$T85_htpjVYRq@-wtRZ`vcfjq zD=!mrb)uGYDC#8DqYu$GdV1ANXrqW_f5M}+J*+1{$JW=NEs;w6nVf1{gIuFWU^ z!N;v1yWKvS2?;&@cfV}ix?8-}njYxt*am&mf+pl+#j)=a521WHPv^oCcm?hYI1s?F z$+#rI(y>om7(~l6%oc%>0GD&%S_G_Kh4?FI&QZ_H)CglG;wkwlm1tT{Wx9J_V5P( zMIdnBjm&KnS%AsO5OH3*M8|0hDlYQufoob#5VId_APyJUzsLIajc2+5GJ;Z208lX$ z_lZa5;1aF8bUp<}U)A^19Kvz5I`BNRG~EmLN80Z+_3bhgiGBA^DX;+CA0S;~4qh9nD_Kmj^Wp9sy0f zP1w5!u~^Hkn*{38uUo?ZHsk=Pd<3?M;qZVXt4Y1lZ6|!Nx1oDhiNuG|6z7Tv?u0}m zMoc{oSxikRdN-ZaHhpvg1B-w{Vf@fuTf)q+YxOr0QnnjblrfOO{4X=X1g-U>sJTfOA9o zsrn-Jy%x<)KL352{`t+C?JC^qb3@s#QoV`Is#@#9#Fk@)UsW5jq%>$Sw82g}4^A>a zTz2@K(`Fczbi#Dkv0o^as03*uJxrQXTHc4=wR`1sM_1((c+Aw3K<9VC<1pKeB3!+AO}!6uSvdgAwg; zcMc&Uy@MOeCT)NlGLZ)+m1GAxJvZmcBdh>2?&|KaJ(3Bb)P4fA=sz?(lyDomr?O@G z;J7oKV`7li4Ty%b0mF$%lccldfZ=#5JyVJiC*tL_+>u#`=bS-l8+8&!me-ehCLTI) z=;HP^o}+H22eLqNzrqfPK3*yP=l-4dSGGne9FZ52xr8D2e9M;Qi!T(0Et&b1kVa8_ zR3*aj^XWv3?XXl-;&c&7e4jrv3y#dNiH0W2@l^Bfq`L=hrZk1J z=)2t_ipo_4GUBqA$|VhBKXL6R6G8I?klYE$JObVPa6U|7q2|!Aoxg3cO?8$3XRPgP z2!FCd@8!?1@4heBtYZ9c_dIsX52IsNx|ZIDNI1<`YH5=1M%Qm;jqgFFcu$QS9RU{etw$JY36y>j{cDZ%VMb4X zNkYIU=IN8&4l8CR$ETalOs?A6PJ%I)XegF?L;>4u`qP~i2Mrw;`=bA1iPN@E zZaR1*7Wajg)^jcA$H-Jpin6anmS4&{1-p83^pum?D}; z01vGUGl@!#FDNT86TJ;VTQg`V5+p0La5!=h6tfV6!(b{ip(VvEy0`SP&v^TOeZU`k zKqI)CqR#Y7THTd+@(s$pp`+oJ^?r02xR#PDpR%W>COxK*I(~G*Q^S+6;}Jfrk3-cN z5%Y{7U4<|9JB9H^d9316C=@&Hx$(*Oiu}onhL;x16vj|B2cwIweD5WNuS^i(ej664 zNE8Pnd!tDSf!e;%LU7~Jm$pNJbBp0G%jtMaS%(-J4nR-a(R=^gxtA<|!ozi+QF1E_ z5Y)2hl5vN@iFmH}HXR0p?~n5r!4VU0==>dU2ykCeMsEstX(m*LH@hko=&L} zaEisODGNFY5Nrc@nU(L)NIY0#aW(Uc>k}K>n%d9R8j%#nJH6k}p2a=_mlkLHvE`hc z>EhPlA{nY&RXgaviyNm(27ReT*BfaTax3!0;Kn{sS!s%|wewelfep&&P_zsz2xZMM z1EOLv2(LE_VK$dYJ+5uLvATe`oe#NI7<)YodVfaRh)bIV4+MFn%8HWe7-cI~-Xbdy zi%mzUS!F+iD1Bvl2r7VYhRaIR`$twBfa!OdG_wM+X>>Z=!>neBo@5%j!>ms})JmgP zKg}g?NOO+#C7cLFG=3lzQvthPA`wuvMM596X=dep zXY-qog|?wgnI!u&xpo23lHW5kYCMU}rYX3XBsGhYqlEplev(X)MNbtuEdtyGbe1r| z=t(CmO<9a%4AX$dm=`m~V7yC>TO%-s* zHO8hic0Fe&$MNXgLdnW>QBl+G*Z;BByf);WGF zOMs*_JtD29UT1x{`|&4*PZGI5NE{1SH)xky|d_ta$;r$`rpE1 zf^Un`MEU*zEgT2vG89ii{{B|=LfdmO^(QegIj`bb}To1jmqu%SNl$0k9TRLrGdiO zl1QB3R~b1DcBQPE`dAZ(Afd|psaKt9QNl!eVeH971yuUyD(0j{yawNR!qASz$@;A6 zT)Kn=VxLCG!dWIB@?e|kwsvH?>s)5f*Mz1H*FU?B|Ni|ft0aS?TUtHWo`Maz zCAcx~=I8gRejy<4=IZQdvLYnCBIM+ox3@P=B1wi$#4qct8Ud57sP2laGsW z4FoNE_GwIzvTM<*JMt(#z+8<_e0F!>5A)&1mzv&pn$fiRr;F>k^OA^1QA^kam78?> z!(oWtBKYL>@$s>4se$0WktB63G~rqF!vj+6J}IrO-|6)0O!?qO9aM3bbQn5>+sQ>S z_puE{vYNCeJy~Sd8<-xF6X68Oz1VcwF5=97rcRA~X0tX5aZZ*Gd+rrSaUaPtT9|wA zz<@=sf5TlK0SyS$uJTxEx?bG7O_U3iw{vvdx8*3OLqng+$Xxs)4S8P+uL%C@bP~60G6H-s-vS*WuyKyH3G=2#cH$J^KH;j& ztgliuRea>AOCFIN;c2%Y`u$1@gS|a7X*%^uWRy|MDq$9~Eoz5qxw#1mHSgof$;n-B z<=ygV!TC#H6Bg#;<8nv*Ah9g1E&C#N`^A8$^vy&WPebhlj4hf{DmDKVt!)J703K}| zT-t+0$!|IB7|snc=G*+cyL^SgS~j0ACvEL1`2IGYcl?1KpPwJvp8S^i)Q1;yy)M~s zf;J6Hk);ZnI#poQzt0WKm8pHcc$lFE>sK^+)gTN^r(0~OHA<}td$!Auz9{>Ume?+( zyun8`exc-#G_?OWW4T|QhqSiJ$Chwby!T4{^-Bq;-77;Rv|FHl&QmYNb`={EK}GON z$gS^EPeBO$GmCi=%u@>`F@M2P``qe##W(4#c0v_7uO7m7eI(j%B|*|}DUwDi_;MoR zcVf~#G&CR}z_{t1fG;Na%pWX~y2Ymo~NNN6p08~B5YHOWB#=~0f4 zlmA|rQFbrE*pHwQ%$6DARI7JT#o0p9ea}qS53Y3>Qbmilg+JGqy^mV4g_?C28f=p5_B(=89t;pLgJ zQFZ3Yr@WlW)h90vS~SLnVwNjzw?jRTH^(r%ZIblaUJNqt;xjBm{D}>X4ZMORkEtH3 zGN{+op=xU3+})3=237c`8xS#>LA6HKilj0^z;rPo=8dk z5!3NnOB=+ewxs9lX4T^!gQ8RIc|LFZhgZKI`Qd-W*}rz^GjO&nwVoTeYkjcX&2Q2C ziB8l(*cr`_b9r^OwY6nERc`)vzA-)c>Qr2f%;@-~9eo_87MYNn6t< zJ`FSqf|u~zyLa#JTth0bLzzaF!Rf!h=vY#vprMHj(jCC`{lwm05r*fFq4?zPowI3? zozIk>&eutYMHCb$gM9bp-!4qjo|wEab+%EMbXjG z(`}*HS6A{p93ygP450@!p-Rrq&MN~I$0b4$`X7O=qUaIvU=Vd02S0uK)VL+!B*OeT z+@54g*mrlX1h@0gjN$W+Ew&LJK%dOkyKQvEQmnX6L>f2yiC}JaeJdP2jFb;_fg1## zz71!w0#F-L+|hQs)27`!B((t)GKAhbyDMxD^*)cr_1*9nojix3EO7vF&3w-O?e22E zc)2X)D%Lp7np9gkGzt~Zq^4(P){PG?FuR(VY>04o%WfI4yk`GMby%#kd5m- z_g>kN$IL{mUk!K}q&-)&KuHA!tQMg+Cn&5sd&Q@Efpt|uStEuab4y5{OZ_~mlT=}_ z%6?#TbMw>afMCYJ+nH6-gxFsN4-}@}Mov9(x%d)#$t91y7?EtO%v&Ai$rvDh_;4J9 z!R*&UouQ_tcPIvwQ++3nT3al?c0EyMcd;Ov$>xqpW&J(pl!||}x3uPVu0r*BL(FrKXUDHmM zy#grCtnNjzeysffT*PfbwnQgycM=fA802iQO`vFDjy9+NUvPCFP;uD?{Ct+HZv1cevnW!^k|M>%6oIvek9sDCap@OgpoAc zD{Wv+ZCe5!-t8|MP&B{q!0yqX#*-n3Y5wEM2K3k4nVQ(8r6m!CP>*?k5E1M7Dwjgv zM=CzfV~Gm<8Z^IY-Cx)SvX+>HBn8~}^Pa|kw!~|m4NIRZCW1#S(*l&Duvu0`)pIDL)OYTn;$Yh?TTg&k#gV@^lSS1fMznWGLfW$Yi4%# z;&a=@W8f&{|DwUn0n-}1vF5cB>6O?SO?uSNS0OAbOKkR(TI{hI8Hk30yLc5K4VN@O zc|m^TAMZ0P0%CQ7w_g_J3N`Bc`bshfACJBIVlnw9eRz1759;C7&sE&)mmVUbn0UN*IzrhI5W4Y#`!h#qdL3kV?D5fx` z!E1v&YAK?rJAL%8FLThoQf|K*2=Ir%o-z~1#AAPb*2$&J!ivz z$dLc-+fHN69>j%Q+2ZfL;1UZ%&MkY$O>bp zlVAAE`$fz*F)p)pmA-omkDtB{UUChKJBYG%WMGC`ZkhGg3XiNftc(sXOEOivQ?m$o)+ ziE-Y`x6~t^cWQaJrX{M=qt{gS8q@MPaW=>$xR z;@m^pVgJLG*M{pg?y1%k#g5F(X9>O%CrE9UMK($d^H)tl(Mvb8S9Whw5z;qN`cg=Q zLJB6k(ZHekl6Nu!Do&T9$O>|CajB`PF&mM{i+;ejBzd_OY26!+_dw13@9OM|JyE>K zY6GjL==h-7Qz9X=pUJ9m)MK-=GD}ZqjdfT3*gxmv-Q3(5iA>9h0Ax0pDXLzpI1(HB zE99&R)9#{%IozAh6Mg+K?_%(^ANJ;~)PQ%Ycno0Fv;q6Nx6|X?>{LYw-^@ECENbfO ze~*oY>2FuPatfPL(S?xT4>)FFi?9O5b`Id?=ee>MSro>`m%#qL2s!U$_B{PNjbdZo zzjd>+dJo{qT(T84=s!Ng?~8Zi0)oYv_xD!SagU}!LMB@U1zkga*mR@i&gMG*)nl~X z-1fv@e2v?a2|VR@Yr8oWZ`xB4@!2-G-6zE+H+Zd!O!-elr-gh0vzJ-Uic1zg@W8$Sn!HSMVW;bXT| zfV~B$RcB^q&Ie!1cmAEOt_VoL3=yz`0Db!)bRR#jsAxqZo+nN2N&i|z!4mzmPVxS9 zdd;kqjgnogf%ykkMe6E{p_S%kj6UR!L|-dhO%o1XVg_{~BDN^v+<NsZ9CCTQ6}0P>w_?) z9XxjDqyb0NQ1_6^ko>N#z)2;vN917{vh*rYf`b0Pk)KVe#X zGJPHv?|wuLce`|)pu@>$=FJYTKYT%m_t*bmW0 zAw)Z%^fw*u#cB;OKP;Tn&MDC=eK75Ce22rXxn3=|YTD{+tY$U+&^&jSC_9|~BEIK4wOw^!XJSy5bZGdnR0)ej^vnNBy)w1+~xK}F{ z4yP`Za&?3lc=fms31`!mWzuN9%nLkh3x18ByRd^dLJ%|=eBVd(Hno*ZP5I(7_^r|3 zrvYUi0f>O{*+9>^D@{OO`LCrLai>FQkWvC6bu~5lwGMa63V`J@6bcw5*`xFdk-%ZD z-X~gF_7+`(0d#W3V5P6Ig)#c2Dhxd!y$B+<@1u6wu+@p;M%t>pKoSWhb~`QxZoUjqUffKb5w}Cpq*-g8R6n3fKGgMrKs(1=H29 z??mXG@B*X@r%LX~$@_4crj(Q!;sBk8V|@iM&Ih~E|u5~4O@hYM&!3R5eMyL6TOVB zqZU1aiVRx3kNVt%wUQF%X^x&7WF;Er&G4^qi%*;e7VN?k9Tea2AWsX09k#}cfogVk z+S3+!|1sW>_+D$koBpj|POF&QcRpD1WyuQ;V)l4E+m`s!T8o#RPs2ROU(#3{Px)Er zD))6db3m3A^@&#W5dl=tpe&cvlG+aGV}%B2lTbFhcKwu7HMD)Wbmt>TwVF_+W;%e7xT zcvr>0a=i8XyJ>x*k%fO`d3iZuoH>vO9{gFsrq8Yqa@8l(DZK${?)Ju?d7%Re)H(31 zSz?}Pnu0SawK&r$Q*AU&xt*L~AN2GmBuizy^^vg2GGh>A-QvoGTd21TtVR@nL|+&g zZn7PbXDpFu?7Z88wT26t4rhu6+gfm(49o284~mZLFUJW1Fb5DRF)8Wq+1UXAWK4if z0%X^6ZwfmF8!5|2+g;ZD8^als3`^1z!7kp!2UhQX- z8b-WS%sAVn&vcm^xsfT5qI5N_wYA-k$-5CW+=F1WiGgh9g)cvN=6LuMq4)5?mA*_P; zU)Z6!sg`P%3~WxseV70BmG+CDy^9;BN6u~DohH1U9|%6b9Iwi?^A|8OGI~n$kgQxU z_l-Q!WMj&R;KF>x?2OIKECgY)j%SikniQR5Nf*Li)Sn7wi^0$!+G=+bz>V0;oL(Y~k93O4f z7Aiw8Vp0gjM@BBt>wQgr1+V{`M;qFVBP0%GxrRub=u_O&pkmDKe#w0JsZ z+J#Jo;rs)d<1udpiVgEJ%Q$$P9C{A}Xe1NGUPw>QcB1Mrh7c(NXs?=<*@!`xi`ygu{_56J1SC6cFr2>j0Ie^I#M0R-PjIV7Rl|4~}=1k<$5 zi#ZK)LiHr3rTwMODW8_b6P1GXE8x<4z-TqHnkqcP&I|tlYYN(;*jX{O&x-XgkQ^27 zMWSqb5-Wjl9B`)IuU7x-t)#>`ly&kqZkJ=nBgb;B?n43%3!0ifmzN6yi|TCluX^Lx54;la^6p)LBf*A;p0jl>84J6Y%v8hDFz{W@4A^WS zAiT>Mg<4Lu2$srK!w&S%ewsDB{||s3iG%uh{5ZQ*ckTO-P`%qKzkzDb&W2GTq62Gop@5{lJDnm=0f$k7ty1N(B$`Ny(p; zXqO8P4QhmvCERZ5%XS$2HX|OabX*UZv8ih2n-fjDjC;eKU-#W>1wE=pssGK>ja@yR z>ZJK2TI$`czQ3GCwo8`<)6IDI^SFUcG$_TrU7>U?|F`v4RzELnAPDD75G+#bs%1kb zC)d1UUb<4OtHZ}H*rqS1opQbHawM1c#l{j}LIp3PAn&*Jj5UaDC=Vf;PUkt`?M>4W zi>H=OMXS^aJX41gElMXLM;GXDn*6!T6Gv&Bw62oa}67QvYi<@WZ{3)DG^qPew4&Z@9Ln$Xzb(HY&ixwGjB;ZJ_c4PI&_lG# zp*3vMDvhi|d6B`VV3gsQToY3t*kdgH%5zz@TShQ#5{-OPaG&RLXvx}aV`G6Gr;b=V zT!{L>M>H6bR)Uc4K^N_KMWlOC7_VQse#DEQAPTZd&sf*h*AH!OqOH?;*T5bQe835f zmEY>@OCgcE_ZuWqrv9k0NfGkhMO-q`CNgWb*`*^KG2{V?jObhHJbhtT0$cRlf zmqG95Cc3-3yW_&n4n;~(-vjGt`uw72qX%ugtt|RJc*hT9`LXdU=woWo9~Kw&WzpfC zMNnjvp%xNKYzY^u^ihva*syvA#4j0+mLi3$o24R!;HJ9uohsRb>vdTCe>)*-37-R) z0<5aH(*nO5Vx^0NsXV*lcJJ56MImdkWcd+loe;9>v1E5ZrPG_!fszcN zZYX@naW&@A^>Ml>vqj+#&7A}wqTyFq*5&yA~PQ-SLwIS39*{8)+n z^EA&I(dKOdn5`PO7G_hVHT%?pHT$_!cPo(2QUBLUiP}X(+{zxlAPgbPpX^`C6sJ^E zn7cGf&Ug;KsFRY2CGAV@xJ{!N&~>n1R~2hC(q@a{M>n7wYzDFNN{Zww%%YV{;}z01 zmK4L!4h+b|9Q=l;Q>Qw5Vv|t2{O4~t7n|B~SC-ej+#i@H~F2;O0sZ|=;P5^xuAM3n3=N24SKlBUwHIZ6&IF!tQRiCZ}?ba z{K^EUp9;OgroK9A^`KBK77=YK3uR4hI_U&8<6)7+Y6@L8!Je6qV5rL@uvz07!|a6^ zT~l0qJP0mPmJQvpjC3cc{6Z)p$6vKzx%bPHlfK4Ic{#rvst#mq3j+%a5n?p!ZQs0t zm8}@&-kxp0t`o^d%@!`7)`NH;AZSCkBd#gGWs}A7ckM9HO~U5qzVcY$*T(rT2?Yk_ zBZGE&9gf(8xpz3q#soX!P!AZ!iLgp7iX+sVvK@S%?kVB#Ob8wnFjc+IF4%q0QxU~Q z3B8*JQX&+stc-s#OFJHG{8|%;m+32@)#s{NKZXZAfn?_t1M)x-7!>h zF&|_#OT>@`$60qVT~@~ChlQeuCe}FEI9KLr5Z%WgOV`JRSu_?g&*}0MutzvJKYfRXg4}5xQHtfK6SUfjiyMuDuCt4gs*`RitRnRabbYw46&k z24L|t{9Vmo8;!#}r0c_l>R-gGQ+m^a6)j*(nW{|!MS03;5ytA}B^y~~N{z0XVV6Nc*_U{@jhz}OVpL|XSuVAGKD{=uiX9$(aO<$WiPV$=+E~lM znnELbXHJUwpouzBn@F{cl*POdqf6Psb0n-Eip@nDShU3<3$zG7U35kUXt)T{-&^>R z>-l=opbB3YNQf=WG6unY{-SG^uTzovD=}q?oYs6{QvTerNp-0u@-!2Z2pK;@VX#M^ z6w8lwCK~mPz zWwxv`lrE+3M)5|a8ULRTF3>0sMzK)H+jNa6rV?N1WkYVz*}WW1CWbj+j85lXG?pc| zvJvGAAUNpv4)f`IFfuo@ zYp1R9%{s1cY>a>?RYz0S!IPNqOJ%diBdqS>BaHG0`oYZp^UCwU2^_3Ri@OkdB{Tt> z{DK~J_NxpVrZk+}?3c_4_>6JMYzl4;%9Dz=cc+dS;c;Z3L|Kby*+$kb=3 z#C!^7@fY&(@C~D6s5V^-EZ16g`}3)l>YzyOqS07tHTNH}D zc%l5IjwLaqL3)_1f1&jv6+t2CxAn;Dny1Qto%V!KESO0^1IDLe?WxGQN>VZ16eG%W zManywFA;|54T| ztJ0`qoYR44$UaPhONg@NH0z5)#obes`xmTULO2{^a&&Yd(QEIm5X9v$C)7JEqco!C zS=ZkiXd$aQJJk|cv8-i-Gciqin|`6;!*yk{Atw?y5}9jhmKR7u8o1>u>BF)l+aQdc zRqxnOLm#us_OoXCjzu$jZe*nb{E$BUwvFQ{H~W~kFMcAT81==_0!4`{4uUWXVZC_O z)Z!DT6HgT)Mpa`>jz+KGKdKQatSF5vnlB?Gj4CUkUo=5k1NP^hjgc2*s4+cgUAk=F zSL2CRcpp+M;~W{2;n_^pP0*^t@AZo%HX0+H_c2#0?Q`4kP#kw}t$JQ~C!!a(WZ0NH z!tbiKwVPzoT}!rsiWPTR%; zSCtS>r*AG!qlMEMs>$E;5L?QqoP9}Q*5}j2B^H^-HamxYke92{`yvI$bA-h@q2eO@ zDj4^eP18xQ@?HHHY5n#_VAi})CcyQ_BxYi(Q_pAM_`=NyMPce8?wfIl!*ELd($gPN zBNKXwd{_C9b1qZegVcS!UsUWr5A?$)@)>7+FZS=KJutt^70Y48; z$;eyTeeJC5=HIavys|)S>*yV93r~&reHt(=c|YBMpfstos_6%o3N4YWODxuasoYs@ zovEcW7(LQBNkp+jEThmfXKAz;C&B>G5u5@gY``x-m^jOqerNJ+b#CB_!)ETz1sW!+5`hc_Ho)k{JZ`c}0Ha6X7i6 z6g)d7C>kYVZ{Z7J3tiAMWiO8__bg5@L!+jkg0t>Ggz-O8ACYrTcOqip&Xx+z`-$cQX>5F7 z1h0$k5c#oE9Z%_WkO!M))c$lcOUx%+rghnE+(XQavQ2>Sj;Lh9)O7;eh5nWKZeh(2 z$z@B05K%_Z*-haqn@nSvI?989ti-;&!Bh_|dG!cXdnBvBGm*B?kQCEapGOB`T=|&( zRrtrTLs}I!sfhs}6grNKK7Q|oHQkV+RjgvCp-n-ob;xR0HTE=iczX7T1%fb{GhGOr z)Nn_rnkM6DsFG=dLZT97ES!=Un2seigDToAqLiV9zvELK@?9j2Ds9+;i|!irD2ZJWPq^krtMf$G{wjA}_-9 zY%RCm-bS_VKK>J!D$x6K;3q%%Wv5E4k7o2ouSH0q@>nr6>1?t-r>kEGuRGzv9h3 zxreT2aL~c#TxJGUQG``Ink_0S%F%WgN-8#5y(#Y&o^Nl*xp}y=oPE9W;%`4=mp$re z);M1R$ZV&LjsVFdN=6%T*@sA?(U>AwRp^TrHm7L*4#@Jt6W+FFvja}BAaz{qyQ@$U zn1>!lCb6h~J{SqZa)%a9$Pyu>9N$g5t9yYia?U4|ZRXB_D`!*i9K{i*TAR=i?o zI;IH)#w%YGp@};}RI_|S(gZ@NNGWjmFiL47=CQD`{Xict*r zhIr&wA7;K}oLjP|7H!E{&W70r|260jpmQw80&6&q!<$k*jcCL`SBLO_wXp?HjHwzy z6p3ze(rQT35}g?AL3YGCSyPgoCPP#fVv2+&ks*ebnbl!t803}^ruGFfD35LHg=$cl z94DhZa2*CNW)H6fo>o=P?sukg+U7QfsxZsMY>rLVyMiL%BerV#0->g4=7PvB&=2&+ z=*DqXQB+2tL=BM4KZUedJ}+DPe7}x6B%#JjUcWtb=d-o7{ngPiF)#r2*?!gN+qWO! zA&jf5tJPMH-q}8iH3J&&lD|J}z)(+q`jhc8XN0Df%`3nkN9X5>b9{^w8Z4$R`w&?i zuMbsps&OD8#gI@@3qb|H35r-@Fl~hY{#(^Am9-HiA=hoLC$9)AIEQf<8!!z0U5+A7 z$@}%Y#`ji)EM^<-pA#}D?Yj=<@>C-V==s)+HNj-RIG#T3HMZhOg=Z|cj~uS6U>Ipm zc}Hw!Abw8r@w*I{3o)h~%oz9$@wu^V7H@vqBNLO8jY&c|f9}>qItLOmaq*fxhk(Gup9TxBy<|;1B2N@c6)Z?LZKYD{ z{)!&?-*_|uO5nwa7{UXr8f7e%pWYhgehk>z2wx2_mQ>U74mmC<`kUp+8$jDm3&;!lxZYN4=jmjEITKs zQ_6SzdJ^K;G0X4Bcc06VDHg+GP$7Vv$4Z~9XkDx(Q%t0(*Orjejr$D;vT5$U>~hp;P#NcS2s|!8Ee}Bq|g!SQOncoI;gJm;$&ugoK1u zwKc5nFFIAbjCdp@`&YSd5bL*=Af&Na_G$KelfX?q)a1Ooda1wi1(x_~bA77of3phb zx4)d@;ma9D+X-95yKI)zzka8q9LNJH4t24??D!eM?O?jjQ%fH7Lx+hnAB5vEJ;@NiTnqMbIY+f9E%*_@? zu{&~TSw%?PpeeXqc?hFUm(Tcl_85`Qw|3=p_S9WlSJ%|rJ43hG-syCit46Q2@A}%6 z{!+F(VmgJN>#F{EwW5z#%426P3v;>Sbyv}1Ly~#wX*Cz6qy`o=BqZc@8~;+hnD(vb#UO4- z=jBNQ5)u?OhDf^b-yMpHkL#L|+=o|Wzp6B}Fmamd@<}8ShRoLBAmATNv0Xx4LhqEx zDbZ#ZAPK@t;5;+QQtyPw&^UF{TRa)m&8FF~R9fdc5&KlEMmG?!#xRH^N*4sxmtI?u>YZEm8PPl z%%&{Sm;0C;$7cNT0GT=q5i!8rJTx>E+J3EVa4-_L)%}#9*?!H$**Rfv&)mCnow-)= zGTld?zeZUFi%8f%iyyO@_hG^cfD>I^UB(G88vxah%Lq-HCi>|^#WJn#hcxM#h)%Ur z-y3UAN}u`Ntcd6d#k9pzM@MDa)|g#fT(X1%a+=q@BR_BWCb}Ge*?3q3XPveN`ZzC$ z#y;^nxTcwr&WR@_TtY>H=u5K1S(2(#6?jND{fyAC1%r*Fc~{JEtR1z}WYLMCW0H;l zo3q%j4fgw}n;8bN$yYS?3Vnq1^26`tX-$XjvTfPy#)`dpvNAu)d#bJbT)BIP;O-;| zLwd--L(+8(qX$(W*?d2?M#O3e7d&E6Snoh16DC_pjMZ+%R4}@!?nz{Fa`NWawWUp< z)#$ak(pkkE9a(+V)cmu&T(Ed7F-b>28JS~ITGqkqL=;srxAx7=EqTF{!7A9^BP=_c z*t^rfh@RBQ2&KRsf7jYULFH*(aHN%aqO5V=DG4Qj)XtxbM zBzVgXNtuweQnS!SGBXJoIbJ0&MOBN~R2LyB0V_$1hU%u7R>rONd5-tr@u$PS9!pea zCc}|DEODa0g)`BmN$TzwoOqbO&G$!Txx6uwsg`b|`EBf7_TUDKE69G zo<;$-En2HfeIh^NR%M&DS1JOzQCH83+8)X`Gz@~lIOcyOY#eKL2ODyYJw4NQJ`F!+ zHGnCTD_8T?Ew5*&p?0zmU|N~PX4K(uG<62FG%V0`&0%=gRbf9z@lqGj;jXD}Kl=Dsg7g2X&~tjJjTICQ zlS2i&u5rvL@4ReN%WBkoHWj7N-r`!gx9nM&KB7D}hMozbCXj}Wg>n*A$e%5;x3dEn z>R>j%M~mMRbt;SDeqSi!YMWc+pFeqm-kl_!2B^jJ%%%d}3ol>NO4BQbJXkq6#A+8! zO-zD;qQ9_soygs?F?=GBrBloiNFS0t>B>^cyA0e{)f<$L^!G9Ydm$j2Z&}}lgP=n} z@iG*jlFj#^U6?hjD=eF#b_NGO7|oM?iQVK(IR2WZoXKpX9cn^fDw?hMML=~CN&*xY ztgCdnA1Y!y5hETN;Sq{}U-DCzO_Z$1Gc-DmK1nqg$}S1vUnklmmP1l4j0QR;`ru)u z2|h`r$FJ7b(Y`(ifMv-mC^%hgOW3cr3;_fT6B83S`!xJ{V@k`UF>g*(;dELyf7aK( z0jz9rPyz=R_s`PO2Z&F;TZo36_ZK_u9Xize2R9z^Ve95w4pj9uIAv~NHJ&gg1!)NE zl_GU4#nLv6>d~|h9$J}@yV>KV`J89>4_%%oR-!ycz@5s!NFl`Z(rZqs%`U)CUIlxlj{f%_TGB8 z^0*4nKhtw^YW~>h*sOc*AWKR~VLqoYhO$-(b>cW!*pL5!#>K6ncbu8D28oX{QI{|$ zD@y3XH8RgVjMo=MMHOIa>1Ipq3wU)f_EJ?<;u*G~oLzK%IbI@>CNwdD8al>eq2t6_ zFL(UaSDINTBt8T}w1PAVf%=AynzTfQt*(Lr6-5()0OL!GeuIIE9!>Ee=-Ck)^VyjD zVCl$p>BzROsc8tHK*EnRvG<9>512rEAGo|^2P*L7iiE>gPvS|U(DRHFKtf5kZKCQ+4H-iw#`7M`5AD8d6+%ojQH!CADJ# zLiRmY#lHJ*5cIyOJqr1gCY?H?eEhOySj#fR0K%Uva_y?05i*dS^=3eq&}|;ZCnVf? zyg7b8%6+9>BLM5dXQ{=sfxYi38MOpkVb92}e$*CW+n;{~0r`#~0G z0338!*@P91!M!E;B0|TknbOPt%_Z zWeJSOiEF4|xoB!OHiTm+x#2jAyOefTYjrN<3?DH{m2%gyoi=RbD^2C5RluaD$A?tE z*GrS`&^F+C0~ZM7J7Q`UEcJh!2O_&GL)SunN?Z^zkGxJAPQ{;RH(s+UoslTxoEP$J zQ5XL#k@G>48hLw9O0qmnV%3lAB77~f?ynx4D%~NvhJ-wBEb@Q}d$mi>KgF=(VycuB z+!n7Z>a)%}lCzF06wO)#a~qpTMT^YS)6?%V=ImFa_Uyytn5)^&AJe+QSGmAU5@>O| zW62C3%Hbc5YrDati8O>v=D+nrRR?Kd_jGdqp9Q#iz@()XT`K9QG%~cbQ{&9h8m={2 z%2THr!>ubtd2o9v`Nk*i2$5Eakd#_g2a`%?^b+R<4s>ChR~?cGw!& z3cxfC>4hww?t<%#cIA+kcCM3sjM#;zt5&_%WJun|nwy)`YjF&U#ARXUcFzVHko|hc z=<+fFz{T1H)D&P2H4UAlbED{6h;jac6@Rvk`z+`*H8ptx4A*l%-Qw0fb$7T1$_Dh6 z9$5pP-^MR0<=C>Z5>FY%2F|=Lw1iQ1Of_swp-`FHGU?-r?D5dkwED`hJZhyN{geD4 z=wEns#i2@BK`6bB5kd!w-ATAXxDjWVJ6Zx6PH?dET)yqs=dn!>qyRln$wO7qwE;ykTPj!YSPha%gqxh4yci;MI4@@L3ughqGfTj$ z9;W%$$9H5K!%t|A&s6|@rDc|cpq5cK^u&~Q#|0XHTq_8pDPe?vL7cz63d5zpLB>fS zP?X@Sjk!sjAhm5PJ#xPc*l(T){9P1Z;V|_$E28?wV?*!X<#_RTJtKhB0EKq95s>=^ z%&b{Rea}Dc?0jBYU9E!tc{$2g6jJEhLG_iLpI@$Y&KS@T{2u>|s`pwCa(0&LO#MQQ z68{}sjrC}@EK$~uJ+SB5eK$&QJf3coN225nprT5!X8Bz!ODAi{ChgY!M~GK8bMx!0 zd{Q1ON?S^qVr0}oxt1kRmbhJ%{wEXD^&sp@gJ@i5qxG0 zHZThfwoNojB+UnOi6Q3n^-Ffei@mi7(+iQ#H-u!b3`kbe0i=%K;R(ux`Mc*{0en>!+8x3=v)cC=H}+~jEwDZ&P`7fTEc#mJ_&|-~eozb>Axm#ayAa=2;iv zdDL&v)E|E;+*l{aTr&FLr(ED^K9IIjUoCNMF%F2pP+|fy(SeopX(_)<&!ehpm|b2THM-tj&aVEo zpE(~d@Bq!gYV(XMFl^%DkTz@__%SLvx>$7`SgkWc>$S7i*#_A1{zW!kb_J3!9 z!@>iek|Z$F`h6VJGZlh)fD8$6#@`huvtifB?ylX!;v(HR0>3PS--G@?>{dcZ;@MKA zhl0PZe2gqCF2@T@0J-SZb?6)f7$hDMk*_q8>YaP&oyisv{mGYNEF+bQFWwe(#k4-X zM@6QsO^QR!5VBco+2VA(Kf**7mh*V}Civ3f$dH3m~XbP|qbT6I(%4cdFX z(X0S~3k^j(Xz_hu2l{4;%vYeCmTru)GYi~>Q>_E3j7;@Ze$`Qn5RysZwj?35r8Te4w-MW%YI7uG5L8C9 z*BEUggMQ{5qw8R1Yb1}az9RT*eO@Jjk-c_jeP0(Omi#{ytrf@WS{8#p%_`C2WR+PaqTSWX z!H1>yimR$&Q~q^tXJlq}1{j_Hc?jt_P-IS5`w9R$T8IA#i$AA{H1lt6Y69pi_gU8y z^QTXrEUO<*EQH6WrwrP?Yv-oms;R^#wGc$O}cQ7+Mw)t z4`^*|^Qhcm@29(HoGMS;#ZNS`3EJ?BXX3^Be=wI^8c~s^$*L?yMo#jCrq%CAC#@tOOr^>H(=EHN)`_KZCSY28eT6npL+X~P>J+)BxTw~Ag6&?Tn z!=C!zGo}6_`3Z;^kEzkrMe%tmzkdW|vv_~M6Wa>hvyF|7pDA&e{DoQkgeJh#O-&)s z1Q%=ccb*^qLz<|V80wIhxwMtlk63B7>nC8Drk2HNn6?BQ($#4unx>kjjY z#*-k`{)asc+q)gBbTl}|#+o#-!6pHC)xmw6t}d_WyPWzHHeul@;NmTgTM&SerASqm zAT(~Y8x2r4@DCKNA%F;%zsH19>pYhz&w$SxU6&>#-F;@`!;4fJRg)(v z%o;q0LlJR3@76q8y>I9l7#QgAT0Fda^KU&9%F=a9L5elcKraVp@%C?SZqmfmY-A7k zPj>2W(^d%NL&H=ODXZHXV5{PbowrG66OYf9*zul(spU2wS*?CuF#l^+*Rz)&l+#`t!yo@+Z>_S3d;M4H<+%ihV5Xqps zd)^yV?Yr$B%Lr8DbD`Jiur3uN*MNWx&0imG76q}<}Eos#R*vhq1i)y+>B{?> zPWk@^GVI9EJ1UT9Ap_K4;?CW7H9w8xcSPNk)AF&09XA>13vfSJC z0g0~mvMUe2KMR796<#^lLO4L1i{NI$B-sHH7pzP%f33Qtb3seBYc>>xu_pF$0zs zvq8rQLv2T&h0s+xmcFob1#B&(8g*IfGInyK38eiIcO|F!Yo7N{Q~-wF7!HPfIk-=4i6YE zo-a3xy#CKT!!g7w(BmlEZR)Fj^kMqOX9GQWc2*+uv){Y4BMMlB+FZmS4ULg78z>Ye z`fCL=cxl>_4AoMoj*pM!m6Tj|hPVLy(bm&j)sREc==yEU{CiG}*K{}F?Bs-%pMM_d~Xk0&a4gpBr)0n?)L*8@O8b=+@98V3wRvd(v=2D+N&;_el(vYp24`8i(TpybIT zVYO*hqAkX~@R%G_&IffqOkZd>eM-yD-rF9G)a&qMlYxgPfdAcLuujT8tR~s24%Y8V zP+a*68^=oE=*6)PtCg5}nx-hJN~7H*f8 zmyPW0V*t-EsSm}C=QqpRrivQ4r`4layJ7m;U)_hNLVxPzFEM4r>RH1#cN?{e{cbCS zEdSw-ZtqCg!f%WWXRFMM6rs*?a&iDcDD8su;NS1Z%*oL6;T+aJhWOcDv1N%b*3K%T zy*ceRseDkiI!8v7vO=u9r_02`($LwNO)2SePNJExB;Umr)xm<*L{Yg|xqGxSyVvos zqL;wk9(!PgJ6Y!J&*&69;*jM+m!d3JWBS=vP+Ia&WQCw`ML|V+db+wvHb)}dbm#X8 zn*2^OJ?804JegwX{sW2M%ousOL(_g#X{=-W`_!Ku)^~Seg}*sFvx9=YRP|bXybJ^9 z|JE-ae@wn(y6Y=;Py2Hq{4yu3pn~OlQ)xJ;Gd@!&^)Qwi<(@%XngOVFo@8a`R|+PjnT<|;w$fXJcy zh5O4g`nb;c^RvLacnr9t3Fy1)x)WUYI>>hQo3sgijY{|wD5c;`44lc;R+q5j#aa%a znB-VG8!c?*7nVxV)oq82lE(D9$D}kJRLrlaqx1EUzkLLS+l&6Vxp8|JazIB+%gQn{ zHT{GwLahGbP=xLV5&W;YTx4MU;&#R1szLavq2uLt<#}G|1q(>s$`mx~R72rrBr;BX zoX4YHoS5BGZNqw9oq8cMeEF;S0Q%Pp0`KCx5$mRmyLsWz_gB9F+&M5i-k0W zlW{WuG>)lh2w?F7rnVYhp4AjQvG_n|#*<#6dQP<{p~(@W^delin>uVbRWlnto4n%a zvQ8OBhxd(jHF!s+ka{54$Rmr_*JW}orLH&$dk}k?0`0P`GFbp3 z#~%7x$=YWCj8(9Jw#&iCH^%b1&2owRwr#k(KbiTwe)dB0w%7ffs@_WzEceSlW{Z?- zVvM}%gr&Z&uJ`(yGcq#rUF-nZ{xsS9rE*QDIiq2$Re6pK`?E$u`9^4j=KIV7=%Uor z)T-^N&*Dl5@I#ui7w;Q9>ENH};JZVZ#qWV)l={^Y#h$}d9VfsbgeimejVR-{<5v5r zdnS<0EuDk^$WROr@ppp;*T6HV`^n>tIpBfi&HVK$;C0IPu6@JY#RapBbA4x*X<~TN z#}E;|1&)>%HwrODWUSKs|(CACD6a|s2dQO`;eZyCHx%r)&m^L&UVpSDT&rFg$x)l z80@?=g#3QAY-&4)!ZB&Asaj!A{VF+3e!ngHD4{n>m?wR1E7(R(`3Qw4+oQMQ?VQN z%||!hzy=9$vNIqopSqiTuV;MV4>&kG4`uNU+IU&pFt@W~vZ`t4l|zyB)24)GSyJnQj}7 z0j8rmg5qw{c4G-EkUYG$RLxjnFjzwW_E~jw+f(o%PJ%(c9iIyJu%A%D-8&RU0 z<<3XRe>ysI{hf;eqtTl+{&Ob^<8xrCYM;ky9UrfcuDjy!n(GfAy>dvX_C)E6Er$o% zI)0Z-Of4+n{0HQLBJENU%w&x*-U;zS7yF6uO<9 zRIuOZngkX=)mldAJT`J4%^IWwKx(4~tMV1=%^a48i<2xY+<9V%BdP05oG|Wo2w9 zGDYN&&iGyT+l&4Y;)Bt(%dn7QQmhS0IVm1qS!dS|BsAb5<7HtW!3(N^OA9mt`nw{zxoxgKGtsj1Ob3l1kvPRvRvcuijd zN>+X`$zpNeDMSF{rKPpnB}{e>1)cC1NE5uH;QMIfq+yDkoxSh<@BxKTKX`eau9SJX zq^wxqela_X0RS0YyXHSk6lO%D&ybq6Zl!a7+%6`KNTHNsix`xYlo~oZRu@4G*Dbq{ zdm^2{Xu?DmA)7c56=jgn;ql^W}WzFny{0&fQPN$Ym;|H8a3&+tqEklY3Q zuy>c|oqP%0t-1i=l6PPSU`Z{qQCRjPb#zT>Nl99Iy0N+Wp4#}j9~ym8eWexa4Pi%? zNKR4>WoxrI-5}|6FR3FS#DM{8vyIa~^Vn0+PZ!(@&(2F*$QkKvs>F^8|6v>JlNaW7 zYEvAEUf{NP-2P$#ZI+Rdkrj~2K;f`-KeGdr>CWvrOrgGsvRzYe&Wl=-S%8E~o`o-4 zaRc=>!GE%w6c*2oWi0Xj!~23}8ou2a*8U-RN=Hi9LdP-*7{wbCifoP4>X0>|8M*4| z`7)`nQl!+zx~m7^G+;_5yf3Su;3P13pi#_vuS$TLl9mlS)w=wQOEv(aC=}8t!T;QH zOe`!8Y7Bj`x(>q>TICvO5&W+{2P7IkfehOjh9-@b4cLKWapc|(%qoC@%b_bDFovPt zkM}Lt3k3W!7#JAUlz-FHXn-~|c69u;ALNZ@&HmWa^8uj!I}ZoB7S`4gfQi)r^!10U z18prWX_DHI5;nAbT{Yvh2$q4Gaf9grkK^{az?b)pG2n&LGFC4* za?KT3@z?v|xFdH~OEwGOk&_%H!AtA8> zr+Q>WdXg;J?>S@fSMFfl;@toVJ~8oLD6YXKAn|~ULKS0`DrS3|*>7ZZpz`|V=PnNe zT{i~!z;o6h6!pl}=mZ!q9T^G|F%%O#7) ziNgHee|eszCH-yf_y#x$@b&u}R{ODn2=u^J@2>Ybi`8<(u8NWtxX%>uhVc45x~_;{ zZ#Q07j!2@}-p7-`E&_u`fU(PD03tXfJ3HGf?7b|2b9!>Z2rMHAr_#q9XQUN?#(p0_?$_gPaHd07y1z?z{Bt{-29WRIcaKslRb&H-_-L*)9gs&HxerKy zjd1rl4K*l(KyLQ@%2Pwg09N89OI61PAwGB#^$EK1vII&g0=81yJhk2I?FJx%zQ?*7 zvOyf9Sns|g0HJ{I2t3G^kT(y&Ut(e+V38INS$M7F`m>hiLQSq^b>I1P55M1=|DL9Q zXuzY=8y!$$W$;B|AGu;k1jm4QAFtCk6i^ZQYxXYN1L3ej|N8Sf@&|XMLr>KFn-zm* zv%H<0;s*x@8|iiuMPDHN)_vYh^!JHpYS%SY6q{bBck(+W=jI*)C_Ew}A~4J4;N=}X zIk81n4Zp~}8yK4cX%f*Hp10z>YQFt7ya)@p4|^VRc$RF-36lWG_IuhAU|>JO!e(?z zPp3(^Fyhh(=0neSL?7*$$U=)?%xrC=fJ-#AwA_n}&jfYxO0km<;rX8~`U4gMGLWE1 z%gwa_29ZG2L+JTjOz3_S5>OAs)HF0UJ`CJ6m;TOSkI+3u#=Smgox>{*-Pswe0!UAa zwuAZk7d|>*#;u+^zDdw^0ch_# zQAYj!MMIX2lXC!2Yxux*!y{uMCoo$00oU&4cu_4ZYdBOUV&8wyL#`5-o0!?zAqSbq zCep7)?h<4wi~bc)QtfzqeR_Tnemk&9@9+|9^}nN+bQPxCm_o5yw(}yAS)GRPdYyWE z5Pk-qJ)>+qE;N&jy+p$BI`6^(yS#NcQ|Q{hHY^(QW#mg5P_}=6S6cN?#mC1FQ{WWb z^^N&-f=QJK)~eH8?d7g*&fwd*dJUF~HyqBm4JK{Q*RNRK_PSRO^iN|W3XCi*X(g`7 zm#AYipbYE)>A}S{2#}Jrw6r|@9)I#=YDF)^fuX(SNe3Q&DWb_gi78gUFe=4#4|zdB?dXNhu^$lhs@?Xx2CazJE$e z%D*;=K9P8^hQIIxW1Lvm-1Dh+-L*tYt#ql=Ou>*)lEDso?6J_rg$2N)Fb8H(02FrZB+m6?&H50(<$TRM+4|rX zaxF7Mri8(TJJ64`yXV(rD*#@+iJ% zIV|0&J@u56le4i>%JDTbqy!+0tE)snDO-J7q9(?=`X?8%8!8!=u``#ye;>j6*tnc4 z6a!zf{RN0gZ3CDKSS;}XNVVVk3c00T2EWFbTkMWkYyr zik=fg^<`n(HhAYr1Vt1EZ=Q}0d0V55su8jL4P2c*wV-Jj~N8S zbb4|Eq)J*#Z+R^HeQU9Dz8z$JW4$rfx9H|k_a}a;hlnhA&m#UO>w)?BzLfBzinU?D z=YYrj(&P0c4~*0cXYj>4D(wNm5>(%3Jpx1*Y3*ac6NDsvGfsq(U0hrQ5*yzDbOCN~ z*1p-pocx5Qa!bT=0|}zn@D=Dez=PhvD8|Ul%uJIYbecTmBzFKN9@#&lphsu?bN9n! zSks3jRjaT+KmehLmjo8Zss`JM=-n>d>VpR73gpf{{Y0C$o!+dy?sfWx3NGuzgHIR#_%~{>aVsqg#ak6 zW3V9Nr4r5dUSUfCDFZNfabYEzzu(0qsGT?$m6?H94q~2m=YzzTtuSYK+ z5Gc&~88+X)oJsXn0H|WX!+xLV15GZsLaH)1vYj^KrQIvPYwZFcZ(}H@!<1o-0b|HB zfNp=|b?ChLTEXs%*Vxd|4@|oL7S(`C7LNsS&=B1bHIJCz*%aVewgT@53_{wSA%yLg zaYJ_L)-Qdx2jC4nx1fO;X0|Feid~G7-xr%&&h9;+r)LTSjqoq0hF~< z00sr5A_sxi!slKiLxMXtBMZ!&?d+lf9r1})mWbf$Tf(~$a-t(uPKrqGg zVJ}t9Pvq)zSflXex(h%OURMI19NxQWpU)I}ap~K&DGMXeB#`&+$nyy$a zYk7WxQi6hld^n`LP3VpknTs*%hj#b8 zJ?Fk9p7|c|10D$wEV{GpY}`1W$fllk^Y`=124YD-@0xW}l$RIay1KH8SIv*#^ec`W zgW6p|l|y{7k|16^Y1Ko=fyAP?mT>`2$^P3;xx+m`Sy4PeFD~k_9nj5v|xF| zr>5TN1aOVa%uFN{6kx*IKeztt+2693b&zJ3>_G$;1_p3z%$DOMqRLArGpP`H&Uh$l z&5aN6Tfw{rUVGU8-Nw7KhuD3N*q(*g_eJ%UUZn5a)~vs`DVG{^QTZ)EnE+<@?s)=& z9Vp`We(UU94-=MK((0W?>F8~UG|MR-SzzSqnzU%(6Ai?iH~>+!u&@y1O^A{p?jwz% zKZo+s^X9kaLuSC0!{z7Kp^eQ*!)J=2v}K4X$Y6+GN^+$}3GEaahJ&Ul{~9I#PlVO$ zU4EHB$i#VXEcyBYNY<~}-?3s_lDZm>Mm)rd&ql|@T>h=By?i|WFASQJnyMyyGbf(# z3HnAzYxeMT^7F=S?n^_!(7VaE043AVscc_5x^4TfLKjN{xlb0cpgn#f-0YYc7=i;7 z_MN5y)dw(ZAoj`za95zY{A#~jB!{-%?>dbXc`WxTe)l`Gg#0q50$#7^3}K{Kpaf1D zcLAd-B~F5A;y;UT68ZPZn$%P_g+8v4{^@fGqY#bde-+@+x^S!*R2Lg>~I&BY`Y&zY$-Np`@U^{^Uu-jjr7~=J7;lmF~kSIe^V?l>J5bY)iY-x ziY#n+1y7uPpNs05IZU|d? zpb9b^PVGMc;-v|_TA?zjOY+q=vJR?=)&QEY_;yW1(VOZu4^yCL<26 zvg;#9q-{FeV>@+B#gw6EKW`a5ZH0S0wAtF;i4Hj;YFvI2g;j4r5e&#Mu%jGc4GhIT zV4_6dX=jH}c2n{Btv8V3b57~GULEMdR+&nca7ta@AMP6=w%@P0{Eu97-d62Oe#vQBjg)ww>r)o8c1eVL4>edlk2oTI*^BHs0XA zr2hQC<$1KE@H$286=ot64nH}nNR0Bwt4XTK%T`b(t*=kHdYcLK36N5QS{~SlfLNix zatK&FD}R6g*?I&&N=DTo3Q^2NK5{Bu&TC0*;BWwc_&*DVlCADDFHY-JjCdJkuFG|$ zQWPO(WEKqMU0O0Y(*!~R(B9*(gwuRk2hFYP_3GQ60}Rs!Hki}t)7DBr$V+75qty%oVUOLL7>z1c5>Jx1N_tV-a@Tf&lXoF605?3SikW+O@TYubXJacU|M@x#8z^xlCpI=VdnGP~;@Fzu zT2D#yG$UxK-FKkqH>I*2ep6$g9_2iR$14RZXlz@Z_N9-m5h=D-l z;T{EIlg@_^D}U}U>ZIm_3poABj$h3PWtJN3-&@A}o0kKYov8#CN0{eQPqr!8@`DM7 z5eOi`RZ>x5j7?x7k z>xi=s){RpMb<#!tqe=NPH82D_WjDk#F^gecQs*#kVdyVyWT_NwS2&0XIK&k>`)0_0 zUtP@+=^y(g_t{b{pq9w7=WAMFAseN|-tOgt>!-1ennce!7mI)Y66m=MC*1u&kkRx0_UX&w&7pgTj5;Ui`vU$U za7G3cScY0gr0bIhEnAo;*6e7=9QZBLJbskU-|-7SJs6?flC zLA|B5bwm=As>{R8si6lnkr>r;hevaIIoPvS_Am*o6H{ojcYDPPz){(qGC~|V?`WLa$ zCQzC(h28(_+Y*l>$l(bSN&G#^M6+%5V9LwR7~Rj*NkQn(2D8WK%tpVSKCp0_w_s5kmgBUb8~tez4D86 z%v;`f=TwCxss^n!INLo7;};(a$U_5g%nQiP1ObXr*?tGBS|}+gaq{t{{3FUH`pu-S zaaXAOvmgW(9|460MBA&#I4%?>@$>V#fQPG|0r?5w=2bcphzeArk=w~HgVSo3Z$Jws zkdm=rPd+RM+b*2=;F*ejG8L88H^5XA!wt4B2L{hIn9c~qO`yhd^CkJ{$rm)UeMHoCznJVD+_O?zT78NBB<4oAm@)ah-eR7(`;P$rVt2cN3k!KRM_P=?7G!D`~ zATY_Zue4msHs-i);e79uHQ|_WJ;ul_u!usj!gW3e3x#Yt!WC< z%Kqhz!1MO1am?C||IyAQb`5}eN=B>*7zabp5kTNyT~`-Up9&5WU<=UD|MO$*sqS4x z9th9CQiK&0Is8wfVTFRcygWY#!bQj7D^sWmZaH75hgZ3C-&!Uwt^i^A{nC?hWs>~V zd2b{EtmwJ5wPmRLpDK6cGA%Ub?9lOZhU4e^#TKZ4c2R1_Y=J+)U7bMtuAECw9|_2e zVLCBbk-ksoIXgfv-Wf=sug6Zf)|Y6|PL*>)9Z<1JPZcDXNIgtIS5X4BTp5cx91K_AJjYN=kg|v$N1=>K|U!CgFTh1j#B+7{b3N=b>qm3 zj`Le{`dB#VYS<|y3I(@*{g^cUXmTe1Y8|kD4V>9@<^8~O=@z?6JnKVCNHLiNYfzx z>4+K0Mi^v1ieSN`_#k}}wu2WpgG$TE%Nqi$b3jor^YS7A=~Md)HEVj0twn~h1ymuI zUy|92KON0n&L|1dLp3*}sP*gszA0L-f+Ev>(u@mH$Hz;Su9wYbxo$A+SL zbt`9`lP9SBK+zwsp7}frq`U7H>lc)RRjfwBaCYF}SAR8(f7qI)HQjVv%G}`J=ZPe>f7v1k7s)W&xIAi{9)dygRH@bpRKolrlqIp)2 zV{*{Uy2`FlGaK^smXqDNnK=HV{zlW=F6^c>l>{`ZtZ;wm9So`v0EfLy~Rg!#4^3_rZ9%llwq!el? zLme_Nmvxyp67B$Q#LWYm6r%aBo%w0i4T4ZTbFlV6?AGYMPXv@0wU;Tm$!F@X_y^gW z8HFNsGnS>L#M$D^sP8NZ_z@MDhtGd|X#47Sb{8o?gA8PZ$2u=!+uOxp0|gXmV2DJ9 ziTDpE;o>0KQNFmm)OBLsIHJy+Hj%{b=UVuEGl7VSYtcQqg-C;k357yY>52*KOiU3R zAQNl%wW}QosCE|kjsGAG1?rcK|E<}yMl3| zxHq0Fm{Kc536v=_AAi1+FfF=pm=g&YeV?jCxi*qGQc|jY7FrY ztB&hHfoj2ddv6wSV8rySm1i_utAgc2)D z&(}=DTYA&Bmifjk=J|8O_&{t|gEp zXa+rCSvuWe>o|IvZjiTDhan61%_{w{RYJV8~5`U==N~;4ehm%P$cZu*e-t!62PwImTQ=lkBNn40wS_v zE~ehmiMaamxw=4#vynv|{iQ#Q8XirBKqR%H?C^t{n9bdv% zZ&B0O4ZFcOfVn(Wn`lJtsg8akB^UF70H%POBHHJR_jO? zYMj3QwMe5&kQhpQ4M-!=2f(n?i#^?#q0+{UsP9~FpL@f0!+!B6F8}B2&(vVoyqO>K z4|{$(epU%&M;uv%;Ldo3O2L83!3}^APFgzdTf8oI@s5`K#;RNBKRXKQm}S|Yb)HB# zF}|nhAAiZURyU*e_Z|<5l%O^<|GdWOICq*vV?skAND(O- zq|gA*u0LxWqcHKc(x52_&<>g}Q#89KWKvbGoFl`7h!RO=?butxIg| z{0Zw^uz+D)-_se#GydxBsOL%L^IfHmq2VRAPf^6I3?bbforgCl0fJjA1AJnio89ln zuxj$|;o&*YmXMQ4jO0>7dSFk3LOVTNFqiygX_Rs}x-tvfo|ZJ^B$LOunltH zNfPhz%tSM}5atz%b?*WlBB9YBQ+skn3mLuQdw${cgrWNa8E$7+haDrn{w+g9Kzlo! zL5DxW>f@0o*cF_;ydtzpQ{YLAByQ&Ct<{V7MqNFz=#?QLCks#&e(R6U`7KBe}0xT#*XS;bb5PaL0}4KCHLTwn8S4@SWe@2xK( z-`%4QLLPTobuDHv&4KIZB6xZ6D!FB=4;oug&QH^EuK!B%gR8W92s6{N>yosz1Swqk z;dO2dqD{~^dK9V@z6-XX-W){~cZKtk&5!rYz3s7nGB3}qgNV+3MSfIXTwlWuXaK_B z-vIrvs-`9g$oRuor!3wJ)zBjbMmmMeN=osakaYI_MSb!i! z!89GH>vZCCdwyeO%|FOI?^Tc-P=_dki~+H}l8XtXH6hrRg$trFP70nRAyJ5+z*-^c zSI1OkY&|(CXtma#M+*6?poD6{79bDp$G9hT{JCnz)B( z^V>10xpr*0ThK0pg4*vw{r8yH2U@yK7oiM3WZ&>45Kw5od?E7b0u^XEf`WpLCz6;) za=<l(39wNs8DYo8l~4M{pFpG*nLOtm^3`b$$pI%#i+ z9DxfTA9-v-BY{f<<-bPhgwNp3m7tka!;dhg^i~eZtlk%@X(gfzpdAk7lvlb^jU8RbQ`Phcz^OfW2?gahw z&mB?Z_?ajJyJg#Yr^|ou#fg_mf`NUG`uV=&*=Owm?D1Y3yT`}<;J9(VJ~A90Ug|zM zK~3gT%jSZ^!6g4Z5@PGumE;~J`Ym3ZgV}9ehFW+HO%2{D{=)LBq{xQ(_>dpz=h-BIfiM+b`#9SiWzV6tAXc6lH2Hl(d17$?sXRNpvF{qpkcFTYN z=JM39$bh{`jM~J?3WxABEMv36x54_RSCyIT+`_=%>)$>OmIYY1xL|Jtl^sy@ z{nghOX7ylO4ita2(rLAqloa28=M?SX+17R3W^|m+DkN)~wwF1rfGQ3}czAdtXxjk@ zH#KHLr`t0N7&;D*K&)V&Jv1rL$YBVpQGELJ$ymO77m-5YC`g$Zg=$ubY%|*S9Z@s` z9wT1yc*uIrLn|$L+u4sOa`#-c@$?5PmnTF{PDJu6K4e*32$JNC5f>fTZN838-3D|! zdxl198CQrk&K^D#mFA~6x*1AG}8H_05PXg zO2-=Q$DUPU`lIOOKr7juE{qJnu*Ja(`Hq!blrmRLh>{Xh8#jP6wI{(ciLS11(@Rn0 zPHe17GTQPp;tw1rDw#$TLNjG2uB68L&`oGT(vFuvWIieosoRaWLHK9QpCOh`8`25z zAAf*gB8*$}l7a8_Tkq_cm~y?o2B+X@^_V~DU^_SW^``SHi7usT3Dy+5DS5MKdv%Rv6+{Rd9U0qLnU)0Z4PvDbX6|2R zMhXSjc~^-=c_L56guz=lr|j^Mx1;p7tWvDVO1LUK3M zNQv7K2qc6=nu<(uM8_0lhzT6IM)DWRhMq4u^R$8VNtZKb_W3h0kTT|0R<7bqOii=C zAj1W~xP*hRl%Mg0_AX6^Mu1jz(TvODnkvN;UHL5XrZbB!vybHB8pqV!oUo^deqiUE zi00@uAt$bs6scXh{<+BbT~|{$5egoyq7Ck~0E+~)oKyyJBwY^vx6ohNMfXAql9=iy zoDJbzP6l-n3ALL?n;j{Llc93VJ!!pJs7G1n?m3ffGEzWQOM}Z*UPxek9QKcTzH(kk z0$P^_3Oq?Khr~D+G*8!?rI6vSZmftPa*G&-dn_!hyvj9lZxg_By12T!+rYuZ%+-8(yDxS;UfI^V!C0P*f9p#Hn)&$47UItICTzmL zOs6rCEN9N@KdUDpv_^t@W8;wR)uAKO+<2me^SutB@B%%aRKwRWxA0yzw zsejowD)Q&>n=x{YTS`}#WK66wDCtpv+#8e*+FzcEc&gDNuJ~Oqn;8pYIB^bqrTf54 zSXR5AZ5815Y1KR8@#}@v>8;CmiKBwSRh}KjI(SUN80Qqfbl(p`8FsbDSQ*TXY8`(& z^r=#&sWz1xQyct4u^{m%$oDj1Wlape^|@G2=q6(VOmHk{354wZ-R~;w#m3$#CknbX z^574YoRb6)B2JDfPBz47NJ^5dd7$?nrUbZB6`h?psEC)u4CDRc&8Bv2;> z0$`E!-JP&){X#W1OQrr?0b02Hzj1S4nL%6n70LO`O<%N*D`l&h+lQ~({30STU{+rD zizJQ~{9J4aa@O6WA$5?JZ%2(|U0SGW4>95$z2K^9LL(7;7u8cg*a&Y{7HMH@%pH{) z@`%a*NVg|TEgzeSi~G?}(WD$&lMS(&{AT@i*m?tNS=LRr?X{atxU7k4Qk|qyz!Z@? zJRMhBrmLfZ@eCsvwt+ufNbSMZZiI(UvQ)I1~Mq&1v9B;8v`#!eeOzf<_p1^ ze#E~BFLYgxloe;L|01q|?Fpb;6XJpqzN$F+%*S>@1L<@S(#uVB@&C^PkZcILK@y)D zujbZ-iEzap&=GS3HtxGVu2-AIlAGn0nIPxbyKyMFO!w)FCl0_%z$Xk1>>$!6R`BX{ z2lu4=ASc91HGSm`Lc}Q>VfaQTiySs!wH!HcM`c{4@2X^rK#OV09S_Z2wxr?9%{-Rs zrg8Cpv8QQ$AQhN^K}`Z(n_gQp8AIh$d7n)zQ71Fu~R1s!;$~1{x#JUbLV8f^=6-BY9 zFc7^%JV;9i+O`2FzA#cmEpPR@plrF;8<3GS8C=b3m1wH?u4X_mnFN5x2bQ(LHrUEa zj!Q$EH`s)T^aXs&vCgFbptTMJ9t-J)@{j_&pe~06bNceWxx*!rxoeA~KqQ&`twMUJ zqC!L_S_;AD43s9c-UIq)-4HQN5w$6h$20qvt`1Ui=9HcNU#K@g zZVoy5O?pvAVmAKqr+SIzL$E-eZGE~P;*MdI-N;6WKXtk`;8!~b1|o7GGSG6zTrW8$ z@^ED$1k{;9esjLC3I2Xd3C;y}f0ZK}2gusliv zypV7Rv}sL9%+~TnDBoa+=k9k3L>EM6lZ_sl;5mrw+m=5`Z%4U4|1u14)uQp!>=w4@ zh8mF21x=DEq7skPkb1HR;uYi-x<72prRy)?(m6%T2O3O;4;>ry-ye&1UR^bm(%V2H zmZXGo3@-rh&hT`h`b-GXkTEGznDN-T4!M9D}Euszc&gxXxhz|(pk5Qs56sh13&Ez*#sl@XHth330AVh(Lp)Qhs1fs-DKg;i` z_R*)uOL+QKC7bq*5tHxr9>(Q&hf`VXvqnAaKRdD_{P@|s)cvb*R)|jDp5ogG?x*`Z zr^^Mt;icxtL6B1aN%|=u+b`eZRVnvX;|vxPKYem-GN^&5=oXs{aQnu6QI;;Awq;Hm z0-o2dv$Gl$qiP*rW$nv#x`OXPb~I_Mb4!}490db#vVuiAi0-S5x8jJ#h=c=Tb$nU8 zn5J0TycXX}luV}`QV)qbW)BlXqHIujD3qwG$+BjU;a{4H&@D18%D6QVz zxJfOEz7de0kc2E`V-Pc!r@9+*%lwysZ7t2Q&X3svmler^Ek%YU*rRMhi>#c)`WIRG zTrMdq?;>(Fw>6K`f>!h?)*(4X=glSqz>(>-2kzrYc3!NhE1KBZVLXHUH!;5@MEvpc zTsBYD(V@3sSfeBa*u%=o%Dg6ja3KTMrE(|egG9|>7s#g#np}{yiz-ZvjUj{zW4_a3 ztuKw`8%H#x0>}A1l$jkQO{n2BE!Fe{!y(-OC+R& zlkQ%y(SYFD$mf+?CZJL0@LWA1^B7a8naV`Gc!m}!@aidkFGoEju_h1JImJSfz!&vv zBcUSi2b?&1n`r!*Z>A=HXtKr)pnOqQQ7eGvUC?6X=%po&XTWX-m{t&p!?M(I zd;W<(e}aLj(`gOJey`%8@Rr)@@HtBOsiMw9=BKvTwZ$UPtR3i2W-2w#l^19c0| zWR*J1rAa@|!Vwy9LKGw4nLr$pdH-!phFM-p4E_ucSAm9D;r^Xkt_6g)M?q5%8GDY^ zRXhI$YBjyxuP0ixfrP@ixm7;8yo96>3fc+wUK}`DL#U*n3P$1k0&Xq8zJ&mu+gC_+ zW}yx6dR!tAb-0{TrsfCuAD7#M?PeWeJu;gzDaYJD==G8S;!ft_T>QCKHMvcRi(p5{ zww?@>w*aXS1AgNBbh`rx%Qrwvo0z}@U<|vo4zbe@CBnR)KdA`_(m472D77mL`^N{E zB|bXa?Mv8M)Ca@svUX0BpRUfwtn-b}yD1V?U=1c383~zqJ{v&QA_9Wk(rFV1pUr%B6zzPRf|qd{G>o-hfVno;x5Ff6`js0wRz3CCiaS)0{3G!v6(>RB6;(?tN$I#`W|3XN;^a$FL{wZ~ zb~Ge$jYGj{)>$l)j7;Fj!(jKQOD_HTJ6eO^sH{Ki+OAlts`^jb!%Pg(N&!37Zw)oX3FsmGJ04i zZnrbliVnS;HfbS0GSzsQqQ*u9n`TgX74d%{(X*Sf;Sviaf))X@;Ya4WDXK)-~ex z_&BAv3d@NXWI=v2ZZ&C5!B@A4B1v@YeO?-Gcv8PL#zNz4m;${U=m zYwV3|LPmlGe{(@3-dPd{qR>KmWrOQRTo!f?7Z*5jWohN$xkzylkx{~(_eTxO*j|}h z*pSK zo>dIa@rXgHBnqdPy30c$Qrdr{UE{kJ25tTr+C`StE!xuh^&d)k$l*B*stPsGU>uYG zRc+3i>eHqwO`$Z1eE!tUC9hAKs6ePFC}6U-g#{Am0R;j(L9iNt!vWNg;0)NDAZ2)F zycx>Lzr%}@aVG3%92)f%t71(^7y7np%RH*Gra~WEP#>|{+s$V!d7{3*4=5!CR!Jp& z^!y^cx-m2Ps6P@kX9nUVJqFJ4^1oljg?lZ#LQUl7@azYn3m4?PY$#1Fxs*x`HY>8az%(+ubEyh;Q^%L3HP#s>-3kWOZ>h*qs3kFibJDx37@;TRR{FOzQrWnxi3+NyllUt=gqm_deuvXE} z5>09JMcUB7OUN_2ZT}Q+R}c#){W%GTR3#SS)P(icP1#o9K;@XuFqtdiCZP!%BW}aH zBq;!&;gIG}%a#oUEqYsW2KfaYJfhV~AZqHjd_&9002&f##dxT}!;&-oI}1Y)ZPw>i`6zb$)ipOu7eFaD^)RJH#V*kE!jtRBZqh+eE!3Y$5w z1A`F&U*K{8Wfld9VbHNxN^y_Uh5dMIl_Q70I9({C=^Z1cis)rN|-D^hZ>J6haK!yQ@HMJ&Og z$3=wI9*z!@Ra|aQ+cpjTExz-zBr{5bCb3F3&2Di+y_Dk7ke+{XMTdkL%8S0ZJM;uK z+nJm(KUoQwLGq_HNMT9$KyiF6d)}3F^u$HfE55on-rM6O;%;P2!V zAJuAsQgqh#`A<6Ns>f2Nhm|}OJ~zM6xAw%Ie#xTG#t?#pNKv>f)I*k>zCNYU?U5hg zI@yNo{35dVv(>vOVlKJj?q5fpW)yzr*nXBHl$WF8*laX*P|Fmi-FM{Bw$gO%()fi3Wap#y%9tf3eu8K~|vVh_pQAVb2P=#1R_i-|t-Ybt-sALw|>@;iV4hXLtO#-*1uos*q`VyYmgKU9j6u z>pWkuYW|i3CGDQIF0p^p>8n{rJ0Ho@oz~VZ){ur7)obTP_%q@^TaG0i8<8+z7v~dkESve+S>)q>5_0dR`jDT33coq z(8M1^7Z;e4Em~e55O{PqliCpU4#)G_P6Z~cdYt?sb^P_Ojg+mpN2j6eQ-Qry(*w3otHX{>j zepgo3D()57TRZeDg^s}`rW=YTw{NFtvchycw4*mdzE~*PkHDj(4v>($TDre17^#-` z2`WGfLX5Eg#u#BNFIYN^tv|fu%K1{Z^aXvKgMZ%pO5h_CetOzZNy^-^cM5p^Jb99# zq8F%KJYKX{P{E3To0$h>_XmH?+~8P8nwk zjN=N=$B4O`*BdmVdtMM+86hb#rre0!ff~oyYTF!MW4b+#%>EDa!;Q=9Z!U-U_8)$+ z(&jc9LLsYM-6Xgj*yuq8NIzJ^;B55YNg#JO3KPiJ*}B`?SL8ODF43ZCRFX(+aZ@FwUhhXP;|}#pv|9XB0w) zQ0Rv!ob%sX6)78kmRH35IX-)$@@Y53ica_GMzG@X%^o4)+Ou4f!RSOkA2WZvo)jsi zV9sbH6MtLT{I8b4-ys%4UlJ6@fl@}j86PZ+8e}$mpRcuOvt|C=>^1@6)&?^x?B*R0oG~_R?)Xmq1 zai>!eIbA%b?Qd001U7G>v0M=w{K+4U29~cf7}t($V_sp22?}-s!3oI9KOC22jf`?u zA8Ok5yfW4B3Eo>hW%C6JXS^N52stQm6aHzXFqOfPE8tkN=%7FaSx`?lOXgb|9D(6K>K}neh zj$c1N%B>#!K3Q4yfi20t8k<09x_iFY^!T1?(ed5j`QAz8>pxah8{Q$S1Y2kLO|2nQ zh`#hEnjz8jG-aKYHv*G~0*q>ob=jME8Na$>X2IdY4w#osQ<%-SMI z%y72~q{X7_y$kR;`&1sydHy>Le|6@y!E3xw9m|h5|1qjhu;^XUd)Kcqn>iGt1X48c zX2bP(`25=WC0Mldo342I25PDYWz+0RquK`sT_jsBq(I9D32#aE;Fw}FTz{bRUH+)> z{8%MrHZcX$w@^L1B1r@N5uN{r>G*M13KZ+290rWx=nL%XaFcRO{}rLyV3l_#jDH05 zgYwcm{Z-xGKxc#28dtlNAbDJ_W=x}n-xuPhn~K)-kikYy&p+0@A}l;gG@enYSso8o z;@7Pb!jHGac>GKbRM4GFRtr9b0Y`jfDndPiy3}kB4Sdy)G330g{AJukrr@RoL%_|v(&U&< z2&7X~2K`!9CiL_Joc5TBC2X?3%1qAr%j&`Fz5VQ(>{ib8e$!D48iOLYh!svuSMuMx zFqF(Ww^AB-Q!FeC7ItA$yS^+!1%yLO0-x99Uo#%DqU;*JNtV56=AYS5OF9!WnT9&r z>SCGtjqZNyx6+fpistRl*JWyb#)J^q4vt^g{alRbJ|b7>d+l6+h5OauL?9%~4Ue^# zdySBVfs)g7u?ae(hR&W`is$nZL-nbeY0#rAW*|J!;Z&Wna1t&xji?I1hydF}M@wnd%4c?Y7C+o2b`9t0yTXaMp}QSCL26y(=?*cLdp&F?FJFj@7TTaV z%u0(`pn)6YN30g*s;b#)jpw}D=%(j{)V zb*!R%I+H0p@ktL+oG%A&%h`0gv5}c5@83W9YvKE28`*uIkVu}3oB5zH6>I2g4k6(5 zjjcvvO-Jqfv*g{`;=r(=g)h~MEsySu*&9^aeK5$$#~`bbhpNL_pTV!+-p~-XD)vMH z(1JMwqyDZgF|t_Xy2v~Z39gBsGEz<_o+(?&?sv=WPxG(mWH1{}gr@i1OC^O1Pj8W- zFWiP_l$ah0xYXd)0_Pc0!V)(Xe54?BL~2rS<5b{S3Kw;0t5vVwC$9f;m_^tAbZ6%a zcu#-<$dtJKMV{>EG>jT-QY1-NEDp^jw!CEE`^B0s!H+;3dpKb8Nx$$z3@93{eT!Ot=At^3&V<!@QZD^vhCao(F`0Cj3mXY-D4J^TyFL>6)&R!JI|d~cw|Cc2WY z(ZH={jYXI8U+SMDq4HOZq|hx5G*_ds_1ZD9p5K%3zr(|eHHV64ODm`(BwHfhUnv>! zvP`GcCV_aWtxeSTYTk+^e?25aFlB7VFL~b~zAWjer}Y7`gLyc8L4eXqHVoy@f_pE~ z;6d~_TQrh!eY`Y<{>UFjgh1334buBXa<98Bv*9tZu9YY3f0x3^wyz=ItisS*{(A9r z+eZfnBUFw6S0Xkxwi9Sj4+Bwv;c#Hf1q_>LYGjA?0>jct&uZ!Pzd^FiTMjyXB}WVc zHa^M-X7rCr@Xg?~J)59~@yRVM(I9;Qn2uB<1((nK+oRw6gvh86P_+m7#P%3&TDKA9ycS4u@<53$tLV>t3yt^rS^jlS z&$XT%ICViv4}0(|NS!$QU=L>i_V}y*c4j^3(Dv3&E3)@(k|#W3sSeuYgXUAHcDZ`xY;{M+7o+F9Sx6#b=i%Z{PvzHj9FI)qQ*`$Q+;6aW}lT~!tE_~2 z&D4m={nz;Wn|7=$0#Hhxwt2~7F}&Y2yEJq&EVn8g9UK_@ugG!@ZMoPkUCJ2XRF+8w zY>1&e=L`_Z@MS0inFXNkCjS0ZV7W3auq6v6H*z!(ycTvIX-JA_^fDWHuZ0rBM z>0u*AW1c8wpBfLtOZ)3osOg(cn%ZEfYH9X;s@P7VK4;WoYhYnS?avR*N}4~ugF zi3BWEz%XkN9GX}p=IH3y^2z0pv2cM!-O$PRHFPNMud@5+|6y>T^+P}CIxxPt7!7V8 zBTu|eIGQ!nPzY-Oi>eSN2fIN#fEV`z(=PCNg#!m6Xn_ZdDeLt{-sNlvswn4U(Hj`v zdY}c%*u{d)3CIEfenJE`Dp=dxeCB4S3j$To9W=E(bM@g)a9V&mexIZNIl1rMUJ;BY z0hgm#h#wah=j#%&|4B8m0_SWbO=aoT44sdU4{YGU6AwUVh<_-j2GB^UY)vh}K{;u# zRDdioH#gS_rUf=?z)i3LbW>32kgV6cM9Vwq?kJ{ht!O1R5iihuY2xgRrGMeh4;G;BtR&asRt)MvG8sl}b41G@om%EQ(ISTVpQ0-l)=1c(lB-b<@r$ad1z&pdw#1W!&2G7%7I z{=3O`FN5~Wed{pgAjpxI3~*`^C7M#T^A{QJgfe1?OM7i=T%)#zPs^*1Sy^YqslAq} z?RK*6TkhzUTr3Req40p#hLJnKu({OcLk#*v_5!T!^Yvmg$ zew2GE0P6vZ;MJ%v5Dj6R9UosP=s{;zzF=$EwB)mo({o}R>@2Nh^CCRMK0bNsk+ zEct4)R0;xtd#NBTsfil6wzg&_^I5S(8(E2%#<1z6d;10P(rIp?N6TT0`wB1_fa8!! zg~&^H559oaG1SR~daR9&D0)S84Sl-B^B7Pz1!fwj7KIq`6$V~ttcJH>Z>*}V4F+RH z_ky?i^RpP}5;JP=W&OWbPmE2iAu7=-g#^HwV@(&Iut`oL$!o6^XIdgV|IT~&8FXp_ zK@{jS1khDN85pq-I^fw7UY5#FZM}2fqI)~nqOJH19>en}StB3VLUh;`0;{I~ecRfl zgJdJ7Dnr^w{(8?~3733$V%usxT9&a*aHX1Lu^$qtfVm=6R7^ofwWgxI>?<;OV_`ns z#$w&GgI}%kN!2?nNMfbu!qH~!5h3oci7#7xme2BQ9kS(~#Chx#1RUTy%OK#Nf{coE Jg_Lp7{{b2!EKL9a literal 0 HcmV?d00001 diff --git a/images/nobody_small.png b/images/nobody_small.png new file mode 100644 index 0000000000000000000000000000000000000000..b8febc5642a00724370db79dac0f88288a4d872a GIT binary patch literal 1128 zcmV-u1eg1XP)X1^@s6F&7Tg000CpNklOUYx&d|3 z|Dq;cG-+H&tdmv+XGDusNJkk|-kag^9w5W~e%#XqVd6Lt?Mcq!=AQ55`@Z|#PkFkq zz!i5BtLu3ftx-fm0UUTohpwyeJi^^5!gNb0RV0KW5zv4G`@^Vu5-;om%2I()1ey&M zeioob!V&oVAw*gQ@}3Xxcj#yeX~^gE*epxTFD&8S-8&GhV5{oklflF2?K+G~#e+|- zL044-!V!2%0B%kKbMp%lXOSwQE#W^^ImbGz^3D^YbK0DJ65c0&m=$A{L%yxwK@ly}f$(7d z&CN}u(`f)`&`wND)SZQ*C^&lbXoKMnqR}YMpFfXSEQV^eid(mC)!pB|eH)(V0RU80 z1x(XqGMS{JC=IXJ)zwAM^C+dHZQDF|?i@8uYj~JSr9zT)9G4mZSe8}m!>b4egAhU> z9*<*aXb7fh?pX;*6pCdC00@V}dkWXq)-XFeyQf)eYb%5hAOXjH31l)E777JMqtRWz zSU4P}uIqdLm`j56#(u`Yz(=(#y1Tmp0Q>gsLnIQZ%kZ-=zC^I81;Lj6 zsQR0ss6K=P0vhrzd?5`bC5Y#)icdd}A(6NT02m)1M<^6RJRYwNHn2T!hXw`#EdWE6 zXbP%`1XYv@RcIl@hhlyMlp6>)H)F-NYk|wl%NQLUZRp?D))uUVIedKR0|*6BRRL8M z@G1hLyX!slf7pq4JDM?Z{WskB{nuT`<8?fG^bopVg|2JRGyx%$?H}X1E~S)o9EVL! zO>ezmg%BJY8>{U@k~B?|uq=y-M1m(yoOo-q9k#Tz&~co4!@j;g`u+a@ZMMUakrC!{ ux!QQ)O#zCc)VP=C$dMyVr_-FCp5}kwF#VG=5$X&80000sh(7P5<0sg*i&o1%>0*%@hlL5|nX7ut;TXWY@_cU88$_#rGCmojNbM_}<^T z*|rV+hhMPX-XuIX?vs7~@e{Js=fz$Xnto%G{HD~YQsrt|Ogs!lO!};!)N0QFoxtGf L>gTe~DWM4f<_=O< literal 0 HcmV?d00001 diff --git a/images/release_item_background.png b/images/release_item_background.png new file mode 100644 index 0000000000000000000000000000000000000000..45f4eed05e75b0454f8ff194745a6a819ed1c3c7 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^Aa(@@6OeS-^+f?lNtU=qlmzFem6RtIr7}3ClgXeWE)#Y9v2po;c3&n8W;z@tP%`w53hKzVYBWLpuG&9u6{1-oD!M<8Wv2R literal 0 HcmV?d00001 diff --git a/images/star.gif b/images/star.gif new file mode 100644 index 0000000000000000000000000000000000000000..c79f7e8083b0e97d4cddb853097c40b0541478ef GIT binary patch literal 1141 zcmcK1jWe4E9Ki7hQK40ABBka@1dEZNkQ4#ycLreOR7$5=j0M1z6om?&@A$4hCVQFCrRw7_E3(P67E`W6rnECKC*=#n$Mj32=3YJK)P#osR zuraW;xe5Cpft6|5vVb)McDuly0|)tVP++xM!PW=XO|Z{`Z3~XZ;b;M1*ZKb=9{Z(M zh>IlR8-y=QB_#wFJDZCT-(Xx2M2bWsZ~Zq4@i?xQ%4-z0bxI|_L8VskSxGdWM#GDe zw)0z642GP>>Z;?DJLP1~gKjBU=7jxdz>h>-v#;z9`GT(sY8{Sd;K|@a0A!`zASO(7*DXogO@npTX?) z3+v^`6ZZt^zt1;EvPSgfz2R<3N>tD*3C4CY+I$V<7M5L2K@W_N$#%|^xKg!e|SGC zx!DjH|CyA7^8V^CYqb#5SJ+~p^aed8DyT2YOM07KaJrj;*0XS#als69gH`WYlSbXrkb{6)8yVmbCP zQSO5An03l z4vQev`6{H`OHbkjV6lXfmh6D!8lR7~Pu2sjCcWHoJ-t?#%1{T7&Y2*KOk$xhW(6G|;V{JYI)vHKXu6Hf*J literal 0 HcmV?d00001 diff --git a/images/steel1.jpg b/images/steel1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dcbfebf54186db6604c4fb0c6fb3454bcdb41e38 GIT binary patch literal 275 zcmex=jH%)-h70<3JTV8F)4&d$Nk z&c?~f#l^|Vg9;d#nVDHxSUK6)IC;4_xq12dfPkMLtO!c+KzOM7;Jp6_7z8;Oycq15 z83h@b1R0qH8UG()NCi8S0U5Beb22hAFat3X06LbDRRAc&!j2@$Fp+5zOYr58DXgMm zf{YAIjI79#jDo^}6CW}O{lCS)!wi%aWENzwXL#4Xc;|)NdCN~kKQf)W)9J~Vax3ZF zD?iygu9ZF6X)AlK?RKf1BS=cm-@SO@w!8ilDtgoNyeD70^CEY9@Dn-Z$lH^M)ijO& zUXjG4OJ6>gCZATXJdxz>*}Za_-{%QOrcD+P)|vZUu~Sz~Z&{@EIcK3LpIDzw<#XCp zw#?WyGv&P{k7uS~snJQW{-jr_Q(C)Ta4|J3&;Su-2R7(%Gl2*e2V@VUvsrIwXDYBT OGzc&;IB+okzX<@uM1$D? literal 0 HcmV?d00001 diff --git a/images/steelgraulight.jpg b/images/steelgraulight.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6390ede4580687da1309396433a4d5ae9dfab99e GIT binary patch literal 435 zcmex=|Ciak)AgOQ1Wk(J>zn8}P_GJ=>hjZ#idR`Wrk=0mhFvDq`|L$n~6 TjEq3hvm1MEOOQzP|Gx%nS@O7l(gfVwf=N0V{(8 zkkJ6784hwYFf@rXFtF$|FmS{H>GgsP3FZH?pRjr>K2J{?*r>mdK II;Vst0H)?$N&o-= literal 0 HcmV?d00001 diff --git a/images/suchen.gif b/images/suchen.gif new file mode 100644 index 0000000000000000000000000000000000000000..48de3ef3f582c4b1b8a174e9c9fc3c3a800b9e90 GIT binary patch literal 276 zcmV+v0qg!pNk%w1VHf}v0K@6!ND~(HLtI)xVX4GJ3Hdy;@R2Rv$M0%(9ly;Qq@S}zL?0U8wp01gX6Ljyq`3;}Hz2!$vE4J;j>95k9Ihbv|#2a~5I a0|*I_t0JvIu_O{KwImR*xxKz4ApkpH*K1t> literal 0 HcmV?d00001 diff --git a/images/tagcloud.png b/images/tagcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1574585e8ef459baf134dc2ac4949d5b8db8a1 GIT binary patch literal 18884 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 X(yc`dQ-YA700000NkvXXu0mjfAE^J3 literal 0 HcmV?d00001 diff --git a/images/thumb_down.png b/images/thumb_down.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc008a26f262a759a014c1cafe77f1211e23aba GIT binary patch literal 464 zcmV;>0WbcEP)rpg z;v|JmiVkA&PX|G8%b?aOmDXHa&dVjB(tZbbeD{9ud&dD@QGtq7&P1tzf919Nf;6I- zUE>fw(D){|$k~}n5m>8p!1O6`H9d?F8fc=53a+Rsls+rv^zf=CQBwdP3y?z-77kEEfJ?6IhVcn+Ghtb0xpz*OC)<4Y z0J7}lkFk6k#Pd3Ci zis<=i=`45|C{Rt7P{uB{$?U@MAztzR`^{2HH8zfDo*ERXIR&kykFJnBH7N=h`g`wl z4Z0yMtYs{8;h;)ic$WU@g30000+pEZ>M1292pUiN$o2DaqMjW`ti`N6RN4TA+cb5Um`ssd&Rwe`3C z)31pV%;Ic!l#P!beTAmrKVt*S*N+eX@z{$pa7esjHQIapH%tK|1H&}sU(vkY%u3%l zZMZ?|FEL#G^)2DqiWUE%3MT9`bQEV`XZXYLi{UTGJq#}yZZaG#VBY=f_qy9G3=C}A z;y|gJ3|ARk!OH$J2r{Sx^_{-V{GGuZsNm-9bz<5KrVJK9>7P(DxES;pq;$)m-kj*l zkOLHW19tHrpdye}KN)x#9s~J66BstW{56q{i@^{m%nZaJ_yr&O%^(c6{Vl^$hT#8^468os zB0^N1k<*ajpx8g={|x`5zk8f;Y_>B{XZ2u3ij@D1|C#@@G06XCM2#!}NK%C~PuL~+ P00000NkvXXu0mjf2c*g& literal 0 HcmV?d00001 diff --git a/images/trash.gif b/images/trash.gif new file mode 100644 index 0000000000000000000000000000000000000000..dac1db2e6ca9afccd204e05b13db6ae1dc6aa6cb GIT binary patch literal 604 zcmZ?wbhEHb5J@2?=RyYnwfL_VVS+*REZgnwq*`!GZ}B zCLB0$AUr&L{rdGMPo6w~{(N3uUTkdazJ2>{-@e`7-#>l&^s{HrK79D_#*G^b7cPv5 zh}gV&b6Htgd3pK7i4%_=J(`k|vTN6_d-v{b*s$Tzqell19z1vM+{KF*r%ai$ZQHg@ zn>OX==U={jIXgSMw6ruaF|nhgqo}Cp|Ns9C0}T{^vM@3*gfQrU90H0H2KJo|Ax+IK zts$y`FrN!FD0R0!&_9!kRMP z0!_g|_N)>$(n`D_dHRSot z{nQzoq%X;+35r>YihpDb6y|XkFPX!jpwY!3%Bo_+F(Jj>P%BU%g<&Csr=YSRN6<{g gLvD;*woyka3|uF)Yxr9^7&10AGV+HoF)~;K00ZX1y#N3J literal 0 HcmV?d00001 diff --git a/images/trash2.gif b/images/trash2.gif new file mode 100644 index 0000000000000000000000000000000000000000..282725a9ad9990679dfb3c87c650351507372875 GIT binary patch literal 898 zcmZ?wbhEHbIMm@9%GKZ?CDTDJv_>&(BX!Pmhm}4-XIb^Ye3ecek~*H8L_%QBh$S1*0J_ zq(VUPCkrFU!8#xUlqVcG;u#n@WIR3`WM<S039z&O#lD@ literal 0 HcmV?d00001 diff --git a/images/unknown-plugin.png b/images/unknown-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..6385bc1d715b3c13e5bc0a19a4d5cb326c9cbf4d GIT binary patch literal 7302 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 literal 0 HcmV?d00001 diff --git a/images/wait24trans.gif b/images/wait24trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e06bb98b5c4a25b96e4a49d18acb586f2343a41 GIT binary patch literal 5040 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 literal 0 HcmV?d00001 diff --git a/include/bootstrap.inc.php b/include/bootstrap.inc.php new file mode 100644 index 0000000..4ff2744 --- /dev/null +++ b/include/bootstrap.inc.php @@ -0,0 +1,119 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +$_never_globalize_request_params = array('msg','BASE_URI','BASE_PATH','CONVERT_PATH','DYNAMIC_CONTENT_URL','DYNAMIC_CONTENT_PATH','REFRESH','TMP_PATH','SERVER_NAME'); +foreach($_never_globalize_request_params as $one_param){ + if (isset($_REQUEST[$one_param])){ + unset($GLOBALS[$one_param]); + } +} + +require_once dirname(__FILE__).'/../classes/Session.class.php'; +require_once dirname(__FILE__).'/language.inc.php'; + +$SUPPORT_ADDRESS = 'marketplace@zmml.uni-bremen.de'; +$SERVER_NAME = 'plugins.studip.de'; +$REFRESH = 60; // Minuten +Session::get()->startSession(); +if (!$_SESSION['msg_type']) + $_SESSION['msg_type'] = 'info'; + +$INSTALLED_LANGUAGES["de_DE"] = array ("path"=>"de", "picture"=>"lang_de.gif", "name"=>"Deutsch"); +$INSTALLED_LANGUAGES["en_GB"] = array ("path"=>"en", "picture"=>"lang_en.gif", "name"=>"English"); + +$DEFAULT_LANGUAGE = "de_DE"; // which language should we use if we can gather no information from user? +$_language_path = 'de'; + +$_language_domain = "marketplace"; + +include '/home/splugin/dbpass.inc'; +require_once dirname(__FILE__).'/visual.inc.php'; +require_once dirname(__FILE__).'/../lib/CssClassSwitcher.inc.php'; +require_once dirname(__FILE__).'/../lib/MessageBox.class.php'; +require_once dirname(__FILE__).'/../lib/flexi/flexi.php'; +require_once dirname(__FILE__).'/../lib/DBManager.class.php'; +require_once dirname(__FILE__).'/../lib/Request.class.php'; +require_once dirname(__FILE__).'/../lib/Avatar.class.php'; +require_once dirname(__FILE__).'/../classes/CryptMP.class.php'; +require_once dirname(__FILE__).'/../classes/User.class.php'; +require_once dirname(__FILE__).'/../classes/Perm.class.php'; +require_once dirname(__FILE__).'/../classes/UserManagement.class.php'; +require_once dirname(__FILE__).'/../classes/GUIRenderer.class.php'; +require_once dirname(__FILE__).'/../classes/MailRenderer.class.php'; +require_once dirname(__FILE__).'/../classes/MPDBM.class.php'; +require_once dirname(__FILE__).'/../classes/Auth.class.php'; +require_once dirname(__FILE__).'/../classes/Plugin.class.php'; +require_once dirname(__FILE__).'/../classes/Release.class.php'; +require_once dirname(__FILE__).'/../classes/MFile.class.php'; +require_once dirname(__FILE__).'/../classes/Downloader.class.php'; +require_once dirname(__FILE__).'/../classes/Content.class.php'; +require_once dirname(__FILE__).'/../classes/Screenshot.class.php'; +require_once dirname(__FILE__).'/../classes/Comment.class.php'; +require_once dirname(__FILE__).'/../classes/Generator.class.php'; +require_once dirname(__FILE__).'/../classes/History.class.php'; +require_once dirname(__FILE__).'/../classes/FeedGenerator.class.php'; +require_once dirname(__FILE__).'/../classes/XmlExporter.class.php'; +require_once dirname(__FILE__).'/../classes/AbstractPageDispatcher.class.php'; +require_once dirname(__FILE__).'/../classes/HitlistDispatcher.class.php'; + + +$BASE_URI = 'http://plugins.studip.de/'; +$BASE_PATH = '/home/splugin/wwwroot/marketplace/'; +$TMP_PATH = '/home/splugin/phptmp/'; +$FACTORY = new Flexi_TemplateFactory(dirname(__FILE__).'/../templates'); +$IMAGES_URL = $BASE_URI . 'images'; +$DYNAMIC_CONTENT_URL = $BASE_URI . 'content'; +$DYNAMIC_CONTENT_PATH = $BASE_PATH . 'content'; +$CONVERT_PATH = "/home/splugin/wwwroot/convert"; +$WSDL_ENDPOINT = "http://develop.studip.de/studip/plugins_packages/ZMML/MarketplacePlugin/soap.php?wsdl"; +$SOAP_API_KEY = ""; +$REMOTE_LOGIN_KEY = ""; + +$ZIP_USE_INTERNAL = false; +$ZIP_PATH = "/home/splugin/wwwroot/zip"; +$ZIP_OPTIONS = "-r"; + +DBManager::getInstance() + ->setConnection('splugin', + 'mysql:host='.$GLOBALS['DB_HOST']. + ';dbname='.$GLOBALS['DB_DATABASE'], + $GLOBALS['DB_USER'], + $GLOBALS['DB_PASSWORD']); + +$UM = new UserManagement(); +$GUI = new GUIRenderer(); +$AUTH = new Auth(); +$DBM = new MPDBM(); +$MAIL = new MailRenderer(); + +$USER = $AUTH->getAuthenticatedUser(); + +$PERM = new Perm(); + +function setMessage($type, $msg) { + $_SESSION['msg_type'] = $type; + $_SESSION['msg'] = $msg; +} + +define("MAX_RATING_VALUE",5); + +?> diff --git a/include/includes.inc.php b/include/includes.inc.php new file mode 100644 index 0000000..0c81eb4 --- /dev/null +++ b/include/includes.inc.php @@ -0,0 +1,42 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +?> diff --git a/include/language.inc.php b/include/language.inc.php new file mode 100644 index 0000000..087d8c4 --- /dev/null +++ b/include/language.inc.php @@ -0,0 +1,203 @@ + $temp_language_settings) { + if (substr(trim($temp_accepted_language), 0, 2) == substr($temp_language, 0, 2)) { + $_language = $temp_language; + break 2; + } + } + } + } + return $_language; +} + + +/** +* This function starts output via i18n system in the given language +* +* This function starts output via i18n system in the given language. +* It returns the path to the choosen language. +* +* @access public +* @param string the language to use for output, given in "en_GB"-style +* @return string the path to the language file, given in "en"-style +* +*/ +function init_i18n($_language) { + if (isset($GLOBALS['_language_domain']) && isset($_language)) { + $_language_path = $GLOBALS['INSTALLED_LANGUAGES'][$_language]["path"]; + setLocaleEnv($_language, $GLOBALS['_language_domain']); + } + return $_language_path; +} + + +/** +* create the img tag for graphic buttons +* +* This function creates the html text for a button. +* Decides, which button (folder) +* is used for international buttons. +* +* @access public +* @param string the (german) button name +* @param string if mode = img, the functions return the full tag, if mode = src, it return only the src-part , if mode = input returns full input tag +* @param string tooltip text, if tooltip should be included in tag +* @param string if mode=input this param defines the name attribut +* @return string html output of the button +*/ +function makeButton($name, $mode = "img") { + + $url = localeButtonUrl($name . '-button.png'); + + switch ($mode) { + + case 'img': + $tag = "\n" . sprintf('', + $url, $tooltext); + break; + default: + $tag = sprintf('class="button" src="%s"', $url); + + } + + return $tag; +} + + +/** +* retrieves path to preferred language of user from database +* +* Can be used for sending language specific mails to other users. +* +* @access public +* @param string the user_id of the recipient (function will try to get preferred language from database) +* @return string the path to the language files, given in "en"-style +*/ +function getUserLanguagePath($uid) { + // try to get preferred language from user + /*$db=new DB_Seminar; + $db->query("SELECT preferred_language FROM user_info WHERE user_id='$uid'"); + if ($db->next_record()) { + if ($db->f("preferred_language") != NULL && $db->f("preferred_language") != "") { + // we found a stored setting for preferred language + $temp_language = $db->f("preferred_language"); + } else { + // no preferred language, use system default + $temp_language = $DEFAULT_LANGUAGE; + } + } else { + // no preferred language, use system default + $temp_language = $DEFAULT_LANGUAGE; + } + return $INSTALLED_LANGUAGES[$temp_language]["path"]; + */ + return $INSTALLED_LANGUAGES[$GLOBALS['DEFAULT_LANGUAGE']]["path"]; +} + +/** +* switch i18n to different language +* +* This function switches i18n system to a different language. +* Should be called before writing strings to other users into database. +* Use restoreLanguage() to switch back. +* +* @access public +* @param string the user_id of the recipient (function will try to get preferred language from database) +* @param string explicit temporary language (set $uid to FALSE to switch to this language) +*/ +function setTempLanguage ($uid = FALSE, $temp_language = "") { + /*if ($uid) { + // try to get preferred language from user + $db=new DB_Seminar; + $db->query("SELECT preferred_language FROM user_info WHERE user_id='$uid'"); + if ($db->next_record()) { + if ($db->f("preferred_language") != NULL && $db->f("preferred_language") != "") { + // we found a stored setting for preferred language + $temp_language = $db->f("preferred_language"); + } else { + // no preferred language, use system default + $temp_language = $DEFAULT_LANGUAGE; + } + } else { + // should never be reached, best we can do is to set system default + $temp_language = $DEFAULT_LANGUAGE; + } + } + + if ($temp_language == "") { + // we got no arguments, best we can do is to set system default + $temp_language = $DEFAULT_LANGUAGE; + } + + setLocaleEnv($temp_language, $_language_domain);*/ +} + + +/** +* switch i18n back to original language +* +* This function switches i18n system back to the original language. +* Should be called after writing strings to other users via setTempLanguage(). +* +* @access public +*/ +function restoreLanguage() { + setLocaleEnv($GLOBALS['_language'], $GLOBALS['_language_domain']); +} + +/** +* set locale to a given language and select translation domain +* +* This function tries to set the appropriate environment variables and +* locale settings for the given language and also (optionally) sets the +* translation domain. +* Note: To support non-POSIX compliant systems (SuSE 9.x, OpenSolaris?), +* the environment variables LANG and LC_ALL are also set to $language. +* +* @access public +*/ +function setLocaleEnv($language, $language_domain = ''){ + putenv("LANG=$language"); + putenv("LANGUAGE=$language"); + putenv("LC_ALL=$language"); + $ret = setlocale(LC_ALL, ''); + setlocale(LC_NUMERIC, 'C'); + if($language_domain){ + bindtextdomain($language_domain, $GLOBALS['BASE_PATH'] . "/locale"); + textdomain($language_domain); + } + return $ret; +} + +function localeButtonUrl($filename) { + return localeUrl($filename, 'LC_BUTTONS'); +} + +function localePictureUrl($filename) { + return localeUrl($filename, 'LC_PICTURES'); +} + +function localeUrl($filename, $category) { + return sprintf('%s/locale/%s/%s/%s', + $GLOBALS['IMAGES_URL'], + $GLOBALS['_language_path'], + $category, + $filename); +} + +?> diff --git a/include/visual.inc.php b/include/visual.inc.php new file mode 100644 index 0000000..237fc33 --- /dev/null +++ b/include/visual.inc.php @@ -0,0 +1,46 @@ +", $what); // newline fixen + return $what; +} + +function mila ($titel, $size = 60) { + if (strlen ($titel) >$size) + $titel=substr($titel, 0, $size)."... "; + return $titel; +} + +//kill the forbidden characters, shorten filename to 31 Characters +function prepareFilename($filename, $shorten = FALSE) { + $bad_characters = array (":", chr(92), "/", "\"", ">", "<", "*", "|", "?", " ", "(", ")", "&", "[", "]", "#", chr(36), "'", "*", ";", "^", "`", "{", "}", "|", "~", chr(255)); + $replacements = array ("", "", "", "", "", "", "", "", "", "_", "", "", "+", "", "", "", "", "", "", "-", "", "", "", "", "-", "", ""); + + $filename=str_replace($bad_characters, $replacements, $filename); + + if ($filename{0} == ".") + $filename = substr($filename, 1, strlen($filename)); + + if ($shorten) { + $ext = getFileExtension ($filename); + $filename = substr(substr($filename, 0, strrpos($filename,$ext)-1), 0, (30 - strlen($ext))).".".$ext; + } + return ($filename); +} + +/** + * Splits a string by space characters and returns these words as an array. + * + * @param string the string to split + * + * @return array the words of the string as array + */ +function words($string) { + return preg_split('/ /', $string, -1, PREG_SPLIT_NO_EMPTY); +} + +?> diff --git a/index.php b/index.php new file mode 100644 index 0000000..06d9011 --- /dev/null +++ b/index.php @@ -0,0 +1,704 @@ + +*/ + +// +---------------------------------------------------------------------------+ +// Copyright (C) 2012 Jan Kulmann +// +---------------------------------------------------------------------------+ +// 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 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. +// +---------------------------------------------------------------------------+ + +require_once "include/bootstrap.inc.php"; + +$dispatch = Request::option('dispatch'); + +if ($dispatch == 'download') { + $file_id = Request::option('file_id'); + $d = new Downloader(); + $d->initiateDownload($file_id); + die(); +} +if ($dispatch == 'generate_plugin') { + $p = new Generator(); + $p->setValues(array('pluginname'=>trim($_REQUEST['pluginname']), + 'pluginclassname'=>Request::option('pluginclassname'), + 'pluginauthor'=>trim($_REQUEST['pluginauthor']), + 'studipminversion'=>$_REQUEST['studipminversion'], + 'studipmaxversion'=>$_REQUEST['studipmaxversion'], + 'plugintype'=>Request::option('plugintype'))); + $p->magic(); + die(); +} +if ($dispatch == 'rss') { + $feed = new FeedGenerator('plugin', 'Plugin RSS', 'Enthält Plugins', 'http://www.n-link.com'); + $feed->addAll(); + $feed->outputFeed('RSS2.0'); + die(); +} +if ($dispatch == 'atom') { + $feed = new FeedGenerator('plugin', 'Plugin ATOM', 'Enthält Plugins', 'http://www.n-link.com'); + $feed->addAll(); + $feed->outputFeed('ATOM1.0'); + die(); +} +if ($dispatch == 'xml') { + header('Content-type: text/xml', true); + echo XmlExporter::generatePluginsXml(); + die(); +} + +if ($dispatch == "logout") { + Session::get()->destroySession(); + header('HTTP/1.1 303 See Other'); + header('Location: '.$BASE_URI.'?dispatch=logoutdone'); +} + +if ($dispatch == 'do_login' || $dispatch == 'loginfromdev') { + if (($dispatch == 'do_login' && !$AUTH->authenticate($_REQUEST['username'],$_REQUEST['passwort'])) || + ($dispatch == 'loginfromdev' && !$AUTH->authenticateFromDev(CryptMP::decryptPrivate(base64_decode($_REQUEST['cryptloginkey'])), unserialize(base64_decode($_REQUEST['cryptinformation']))))) { + $USER = FALSE; + setMessage('error',"Fehler bei der Anmeldung! Benutzername oder Passwort ungültig!"); + $dispatch = 'login'; + } else { + Session::saveSessionParams(); + setMessage('info',sprintf('Sie sind nun angemeldet, %s.',$UM->getFullnameByUserId($_SESSION['user_id']))); + ob_end_clean(); + header('HTTP/1.1 303 See Other'); + header('Location: '.$BASE_URI); + } +} + +include_once 'templates/header.php'; +require_once "include/includes.inc.php"; + +if ($dispatch == "logoutdone") { + $GUI->showLogout(); +} +if ($dispatch == 'register') { + $GUI->showRegister(); +} +if ($dispatch == 'new_password') { + $GUI->showRequestNewPassword(); +} +if ($dispatch == 'reset_password') { + include_once 'lib/captcha/securimage.php'; + $securimage = new Securimage(); + if ($securimage->check($_REQUEST['captcha_code']) == false) { + setMessage('error','Der Sicherheitscode war nicht korrekt!.'); + } else { + $email = $UM->getEmailByUsername(Request::option('username')); + if ($email) { + $u = $UM->getUserByUsername(Request::option('username')); + if ($u->getAuth() != 'standard') { + setMessage('error','Sorry, dieser Account wird von einem anderen System authentifiziert, bitte ändern Sie das Passwort dort!'); + } else { + $new_pw = $UM->generate_password(); + $UM->setPassword($u->getUser(),$new_pw); + $GLOBALS['MAIL']->generateResetPasswordMail($u,$new_pw); + setMessage('info',"Sie erhalten in Kürze eine E-Mail mit einem neuen Passwort."); + } + } else { + setMessage('error','Sorry, ein Account mit diesem Usernamen ist unbekannt!'); + } + } + unset($dispatch); +} +if ($dispatch == 'do_register') { + include_once 'lib/captcha/securimage.php'; + $securimage = new Securimage(); + if ($securimage->check($_REQUEST['captcha_code']) == false) { + setMessage('error','Der Sicherheitscode war nicht korrekt!'); + $GUI->showRegister(); + } else { + if (!$UM->userAlreadyExists(trim($_REQUEST['username']))) { + $confirmation_token = md5(uniqid(time().$_REQUEST['username'])); + $UM->addNewUser(trim($_REQUEST['username']), + trim($_REQUEST['vorname']), + trim($_REQUEST['nachname']), + trim($_REQUEST['email']), + trim($_REQUEST['passwort']), + $_REQUEST['salutation'], + $confirmation_token); + $GLOBALS['MAIL']->generateRegistrationMail($_REQUEST['username'],$_REQUEST['vorname'],$_REQUEST['nachname'],$_REQUEST['email'], $_REQUEST['salutation'],time(), $confirmation_token); + setMessage('info',"Vielen Dank für Ihre Anmeldung. Sie erhalten in Kürze eine E-Mail mit einem Bestätigungslink."); + } else { + setMessage('error','Sorry, ein Account mit diesem Usernamen existiert bereits!'); + } + } + unset($dispatch); +} +if ($dispatch == 'confirm') { + if ($UM->confirmAccount(Request::option('token'))) { + $GUI->showConfirmationSuccessful(); + } else { + setMessage('error',"Confirmation failed!"); + unset($dispatch); + } +} +if ($dispatch == 'login') { + $GUI->showLogin(); +} +// Eingeloggter Bereich +if ($USER) { + if ($dispatch == 'assi') { + $AUTH->checkPerm('author'); + $part = Request::option('part'); + if (empty($part)) $part = 1; + $titel = trim($_REQUEST['titel']); + $license = trim($_REQUEST['license']); + $language = trim($_REQUEST['language']); + if (empty($language)) $language = 'de'; + $in_use = trim($_REQUEST['in_use']); + $url = trim($_REQUEST['url']); + $categories = $_REQUEST['c_ids']; + if (!is_array($categories)) $categories = array(); + $tags = trim($_REQUEST['tags']); + $short_description = trim($_REQUEST['short_description']); + $description = trim($_REQUEST['description']); + $p = new Plugin(); + + if ($part == 5) { + $p->setName($titel) + ->setShortDescription($short_description) + ->setDescription($description) + ->setLicense($license) + ->setInUse($in_use) + ->setLanguage($language) + ->setUserId($USER['user_id']) + ->setCategories($categories) + ->setUrl($url) + ->save(); + setMessage('info',"Das Plugin wurde eingetragen, jetzt können Sie ein Release hochladen."); + $MAIL->generateNewPluginMails($USER['user_id'],$p); + $GUI->showEditRelease($p->getPluginId(), FALSE); + } else { + $GUI->showPluginAssi($part,$titel,$license,$in_use,$url,$language,$categories,$tags,$short_description,$description); + } + } + if ($dispatch == 'update_user_profile') { + $AUTH->checkPerm('author'); + include_once 'lib/captcha/securimage.php'; + $securimage = new Securimage(); + if ($securimage->check($_REQUEST['captcha_code']) == false) { + setMessage('error','Der Sicherheitscode war nicht korrekt!'); + } else { + if (is_array($_FILES['userfile'])) { + try { + Avatar::getAvatar($USER['user_id'])->createFromUpload('userfile'); + $msg =_("Die Bilddatei wurde erfolgreich hochgeladen. Eventuell sehen Sie das neue Bild erst, nachdem Sie diese Seite neu geladen haben (in den meisten Browsern F5 drücken). "); + } catch (Exception $e) { + $msg = $e->getMessage().' '; + } + } + $u = new User(); + $u->load($USER['user_id']); + $u->setUsername(trim($_REQUEST['username'])) + ->setVorname(trim($_REQUEST['vorname'])) + ->setNachname(trim($_REQUEST['nachname'])) + ->setEmail(trim($_REQUEST['email'])) + ->setSalutation(trim($_REQUEST['salutation'])) + ->setUrl(trim($_REQUEST['url'])) + ->setWorkplace(trim($_REQUEST['workplace'])) + ->save(); + if (trim($_REQUEST['passwort']) != '' && trim($_REQUEST['passwort2']) != '' && $_REQUEST['passwort'] == $_REQUEST['passwort2']) + $UM->setPassword($u->getUserId(),$_REQUEST['passwort']); + $msg .= "Die Einstellungen wurden übernommen."; + setMessage('info',$msg); + } + $dispatch = 'show_profile'; + } + if ($dispatch == 'save_screenshot') { + $AUTH->checkPerm('author'); + $screenshot_id = Request::option('screenshot_id'); + $plugin_id = Request::option('plugin_id'); + $title_screen = (Request::option('title_screen') == 'yes' ? 1 : 0); + $titel = trim($_REQUEST['titel']); + $file_id = Request::option('file_id'); + if (is_array($_FILES['screenfile']) || (!is_array($_FILES['screenfile']) && $file_id)) { + $file_id = $DBM->uploader($file_id,$USER['user_id'],$_FILES['screenfile']['tmp_name'], $_FILES['screenfile']['size'], $_FILES['screenfile']['name'],'screenshots'); + if (!$DBM->getErrorStr()) { + $s = new Screenshot(); + if ($screenshot_id) + $s->load($screenshot_id); + $s->setPluginId($plugin_id) + ->setTitel($titel) + ->setFileId($file_id) + ->setTitleScreen($title_screen); + $s->save(); + setMessage('info',"Die Datei wurde hochgeladen."); + } else { + $f = new MFile(); + $f->load($file_id); + $f->remove(); + unset($f); + @unlink($GLOBALS['DYNAMIC_CONTENT_URL'] . '/screenshots/foto_'.$file_id.'.jpg'); + @unlink($GLOBALS['DYNAMIC_CONTENT_URL'] . '/screenshots/foto_thumb_'.$file_id.'.jpg'); + setMessage('error',"Die Datei konnte nicht verarbeitet werden. ".$DBM->getErrorStr()); + $DBM->setErrorStr(); + } + } else if (is_array($_FILES['zipfile'])) { + $plugin_id = Request::option('plugin_id'); + if ($DBM->add_new_zip($_FILES['zipfile']['tmp_name'], $_FILES['zipfile']['size'], $_FILES['zipfile']['name'], $plugin_id, $USER['user_id'])) { + setMessage('info',"Die Datei wurde hochgeladen und entpackt."); + } else { + setMessage('error',"Die Datei konnte nicht verarbeitet werden. ".$DBM->getErrorStr()); + $DBM->setErrorStr(); + } + } + $dispatch = 'show_edit_screenshots'; + } + if ($dispatch == 'remove_screenshot') { + $AUTH->checkPerm('author'); + $screenshot_id = Request::option('screenshot_id'); + $s = new Screenshot(); + $s->load($screenshot_id); + $p = new Plugin(); + $p->load($s->getPluginId()); + if ($screenshot_id && $PERM->have_plugin_perm('author',$p->getPluginId())) { + $s->remove(); + setMessage('info',"Der Screenshot wurde gelöscht."); + } else + setMessage('error',"Sie haben keine Berechtigung für dieses Plugin!"); + $dispatch = 'show_edit_screenshots'; + } + if ($dispatch == 'set_plugin_participant') { + $AUTH->checkPerm('author'); + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + if ($PERM->have_plugin_perm('author',$p->getPluginId())) { + $p->setParticipant(Request::option('user_id')); + } + $dispatch = 'edit_plugin'; + } + if ($dispatch == 'show_edit_screenshots') { + $AUTH->checkPerm('author'); + $plugin_id = Request::option('plugin_id'); + $GUI->showEditScreenshots($plugin_id); + } + if ($dispatch == 'remove_release') { + $AUTH->checkPerm('author'); + $release_id = Request::option('release_id'); + $r = new Release(); + $r->load($release_id); + $p = new Plugin(); + $p->load($r->getPluginId()); + if ($release_id && $PERM->have_plugin_perm('author',$p->getPluginId())) { + $r->remove(); + setMessage('info',"Das Release wurde gelöscht."); + } else + setMessage('error',"Sie haben keine Berechtigung für dieses Release!"); + $dispatch = 'edit_plugin'; + } + if ($dispatch == 'remove_plugin') { + $AUTH->checkPerm('author'); + $plugin_id = Request::option('plugin_id'); + if ($plugin_id && $PERM->have_plugin_perm('author',$plugin_id)) { + $p = new Plugin(); + $p->load($plugin_id); + $p->remove(); + setMessage('info',"Das Plugin wurde gelöscht."); + } else + setMessage('error',"Sie haben keine Berechtigung für dieses Plugin!"); + unset($dispatch); + } + if ($dispatch == 'save_plugin') { + $AUTH->checkPerm('author'); + $plugin_id = Request::option('plugin_id'); + if (($plugin_id && $PERM->have_plugin_perm('author',$plugin_id)) || !$plugin_id) { + $name = trim($_REQUEST['titel']); + $short_description = trim($_REQUEST['short_description']); + $description = trim($_REQUEST['description']); + $license = trim($_REQUEST['license']); + $in_use = trim($_REQUEST['in_use']); + $categories = $_REQUEST['c_ids']; + if (!is_array($categories)) $categories = array(); + $language = Request::option('language'); + $url = trim($_REQUEST['url']); + $classification = trim($_REQUEST['classification']); + if (!in_array($classification, array('firstclass', 'secondclass', 'none'))) $classification = 'none'; + $p = new Plugin(); + if ($plugin_id) $p->load($plugin_id); + else $p->setUserId($USER['user_id']); + $p->setName($name) + ->setShortDescription($short_description) + ->setDescription($description) + ->setLicense($license) + ->setInUse($in_use) + ->setLanguage($language) + ->setCategories($categories) + ->setUrl($url) + ->save(); + $p->setTags($_REQUEST['tags']); + if ($PERM->have_perm('admin')) { + $p->setClassification($classification); + } + if ($plugin_id) + setMessage('info',"Das Plugin wurde gespeichert."); + else { + $_REQUEST['plugin_id'] = $p->getPluginId(); + setMessage('info',"Das Plugin wurde eingetragen."); + } + $dispatch = 'edit_plugin'; + } else { + setMessage('error',"Sie haben keine Berechtigung für dieses Plugin!"); + unset($dispatch); + } + } + if ($dispatch == 'remove_ptag') { + $AUTH->checkPerm('author'); + $plugin_id = Request::option('plugin_id'); + if ($plugin_id && $PERM->have_plugin_perm('author',$plugin_id)) { + $tag = trim($_REQUEST['tag']); + $p = new Plugin(); + $p->load($plugin_id); + $p->removeTag($tag); + } + $dispatch = 'edit_plugin'; + } + if ($dispatch == 'remove_rtag') { + $AUTH->checkPerm('author'); + $release_id = Request::option('release_id'); + $r = new Release(); + $r->load($release_id); + if ($r->getPluginId() && $PERM->have_plugin_perm('author',$r->getPluginId())) { + $tag = trim($_REQUEST['tag']); + $r->removeTag($tag); + } + $dispatch = 'edit_release'; + } + if ($dispatch == 'edit_profile') { + $GUI->showEditProfile(); + } + if ($dispatch == 'save_release') { + $AUTH->checkPerm('author'); + $r = new Release(); + $file_id = Request::option('file_id'); + $release_id = Request::option('release_id'); + $plugin_id = Request::option('plugin_id'); + $dependency_ids = $_REQUEST['dep_ids']; + if (!is_array($dependency_ids)) $dependency_ids = array(); + + $err = ""; + $manifest = FALSE; + if (is_array($_FILES['releasefile']) && $_FILES['releasefile']['size']) { + $manifest = $DBM->checkReleaseZip($_FILES['releasefile']['tmp_name'], $_FILES['releasefile']['size'], $_FILES['releasefile']['name']); + if (!$manifest || !count($manifest)) { + $err .= $DBM->getErrorStr(); + $DBM->setErrorStr(); + } else { + $file_id = $DBM->uploader($file_id,$USER['user_id'],$_FILES['releasefile']['tmp_name'], $_FILES['releasefile']['size'], $_FILES['releasefile']['name'],'releases'); + if ($DBM->getErrorStr()) { + $err .= $DBM->getErrorStr(); + $DBM->setErrorStr(); + } + } + } + + // Neues Release + if ($manifest && count($manifest) && !$err) { + if ($release_id) $r->load($release_id); + $r->setPluginId($plugin_id) + ->setVersion(trim($manifest['version'])) + ->setStudipMinVersion(trim($manifest['studipMinVersion'])) + ->setStudipMaxVersion(trim($manifest['studipMaxVersion'])) + ->setOrigin(trim($manifest['origin'])) + ->setUserId($USER['user_id']) + ->setFileId($file_id) + ->setDependencies($dependency_ids) + ->setReleaseType(trim($_REQUEST['release_type'])) + ->save(); + $r->setTags($_REQUEST['tags']); + } else if ($release_id) { + // Update + $r->load($release_id); + if ($manifest && count($manifest)) { + $r->setVersion(trim($manifest['version'])) + ->setStudipMinVersion(trim($manifest['studipMinVersion'])) + ->setStudipMaxVersion(trim($manifest['studipMaxVersion'])) + ->setOrigin(trim($manifest['origin'])); + } + $r->setUserId($USER['user_id']) + ->setDependencies($dependency_ids) + ->setReleaseType(trim($_REQUEST['release_type'])) + ->save(); + $r->setTags($_REQUEST['tags']); + + } else { + // Fehler + $err = "Fehler beim Hochladen des Releases! ".$err; + } + if ($err) + setMessage('error',$err); + else + setMessage('info',"Das Release wurde gespeichert."); + $dispatch = 'edit_plugin'; + } + if ($dispatch == 'edit_plugin') { + $AUTH->checkPerm('author'); + History::add(array('uri'=>'?dispatch=edit_plugin&plugin_id='.Request::option('plugin_id'),'txt'=>'Plugin bearbeiten'),2); + $GUI->showEditPlugin($_REQUEST['plugin_id']); + } + if ($dispatch == 'view_own_plugins') { + $AUTH->checkPerm('author'); + History::add(array('uri'=>'?dispatch=view_own_plugins','txt'=>'Meine Plugins'),0); + $GUI->showOwnPlugins($USER['user_id']); + } + if ($dispatch == 'edit_release') { + $AUTH->checkPerm('author'); + History::add(array('uri'=>'?dispatch=edit_release&release_id='.Request::option('release_id').'&plugin_id='.Request::option('plugin_id'),'txt'=>'Release bearbeiten'),3); + $GUI->showEditRelease(Request::option('plugin_id'), Request::option('release_id')); + } + + // Admin Area + if ($PERM->have_perm('admin')) { + if ($dispatch == 'set_plugin_user') { + $user_id = Request::option('user_id'); + $plugin_id = Request::option('plugin_id'); + if ($user_id && $plugin_id) { + $p = new Plugin(); + $p->load($plugin_id); + $p->setUserId($user_id)->save(); + setMessage('info',"Der Benutzer wurde zugewiesen."); + $GUI->showEditPlugin($plugin_id); + } + } + if ($dispatch == 'edit_user') { + if (Request::option('user_id')) { + History::add(array('uri'=>'?dispatch=edit_user&user_id='.Request::option('user_id'),'txt'=>'Benutzerverwaltung'),1); + $GUI->showUserEditForm(Request::option('user_id')); + } + } + if ($dispatch == 'show_admin_add_user') { + $GUI->showUserEditForm(FALSE); + } + if ($dispatch == 'save_user') { + $user_id = Request::option('user_id'); + $u = new User(); + if ($user_id) + $u->load($user_id); + $u->setUsername(trim($_REQUEST['username'])) + ->setVorname(trim($_REQUEST['vorname'])) + ->setNachname(trim($_REQUEST['nachname'])) + ->setEmail(trim($_REQUEST['email'])) + ->setPerm(trim($_REQUEST['perm'])) + ->setLocked(trim($_REQUEST['locked'])) + ->save(); + if (!$user_id) + $UM->setPassword($u->getUserId(),md5(uniqid(time()))); + if (trim($_REQUEST['passwort']) && trim($_REQUEST['passwort2']) && trim($_REQUEST['passwort']) == trim($_REQUEST['passwort2'])) { + $UM->setPassword($u->getUserId(),trim($_REQUEST['passwort'])); + $GLOBALS['MAIL']->generateResetPasswordMail($u,trim($_REQUEST['passwort'])); + } + setMessage('info',"Die Benutzerdaten wurden verändert / neu eingetragen!"); + $dispatch = 'user_management'; + } + if ($dispatch == 'user_management') { + History::add(array('uri'=>'?dispatch=user_management','txt'=>'Benutzerverwaltung'),0); + $GUI->showUserManagement(); + } + if ($dispatch == 'do_clearing') { + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + $p->setApproved(1) + ->save(); + $GLOBALS['MAIL']->generateAprovementMail($p); + setMessage('info',"Das Plugin wurde freigeschaltet und die Autorin / der Autor benachrichtigt."); + $dispatch = "clearing"; + } + if ($dispatch == 'do_suspend') { + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + $p->setApproved(0) + ->save(); + $GLOBALS['MAIL']->generateSuspendMail($p); + setMessage('info',"Das Plugin wurde gesperrt und die Autorin / der Autor benachrichtigt."); + $dispatch = "clearing"; + } + if ($dispatch == "clearing") { + $GUI->showPluginClearings(); + } + + if ($dispatch == 'save_rezension') { + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + $p->setRezension($_REQUEST['rezension_txt']); + setMessage('info',"Die Rezension wurde gespeichert."); + $dispatch = 'edit_rezension'; + } + if ($dispatch == 'edit_rezension') { + $plugin_id = Request::option('plugin_id'); + $GUI->showEditRezension($plugin_id); + } + if ($dispatch == 'save_content') { + $key = Request::option('key'); + $content_txt = trim($_REQUEST['content_txt']); + $c = new Content(); + $c->load($key); + $c->setContentTxt($content_txt) + ->save(); + setMessage('info',"Inhalt gespeichtert."); + $dispatch = 'edit_content'; + } + if ($dispatch == 'edit_content') { + $key = Request::option('key'); + $GUI->showEditContent($key); + } + } + if ($dispatch == 'send_question') { + include_once 'lib/captcha/securimage.php'; + $securimage = new Securimage(); + if ($securimage->check($_REQUEST['captcha_code']) == false && !($user = $GLOBALS['AUTH']->getAuthenticatedUser())) { + setMessage('error','Der Sicherheitscode war nicht korrekt!'); + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + $GUI->showProfile($p->getUserId(), $plugin_id); + } else { + $plugin_id = Request::option('plugin_id'); + $email = trim($_REQUEST['email']); + $users_name = trim($_REQUEST['users_name']); + $question = trim($_REQUEST['question']); + $question_type = trim($_REQUEST['question_type']); + if ($plugin_id && $email && $question) { + $GLOBALS['MAIL']->generateQuestionMail($plugin_id, $question, $question_type, $users_name, $email); + setMessage('info',"Die Anfage wurde versendet."); + unset($dispatch); + } + } + } +} +// Eingeloggter Bereich + +if ($dispatch == 'show_extended_search') { + $GUI->showExtendedSearch(); +} +if ($dispatch == 'show_plugin_generator') { + $GUI->showPluginGenerator(); +} +if ($dispatch == 'extended_search') { + $search_txt = trim($_REQUEST['search_txt']); + $fulltext = Request::option('fulltext'); + $category_id = Request::option('category_id'); + $language = Request::option('language'); + History::add(array('uri'=>'?dispatch=extended_search&search_txt='.urlencode($search_txt).'&fulltext='.urlencode($fulltext).'&category_id='.$category_id.'&language='.$language,'txt'=>'Erweiterte Suche'),0); + $GUI->showExtendedSearchResults(array('search_txt'=>$search_txt, 'fulltext'=>$fulltext, 'category_id'=>$category_id, 'language'=>$language)); +} +if ($dispatch == 'show_profile') { + $plugin_id = Request::option('plugin_id'); + $username = trim($_REQUEST['username']); + $user_id = $GLOBALS['UM']->getUserIdByUsername($username); + if (!$user_id) + $user_id = $USER['user_id']; + $GUI->showProfile($user_id, ($plugin_id ? $plugin_id : FALSE)); +} +if ($dispatch == 'tagsearch') { + $tag = Request::quoted('tag'); + History::add(array('uri'=>'?dispatch=tagsearch&tag='.urlencode(stripslashes($tag)),'txt'=>'Tag-Suche ('.htmlReady(stripslashes($tag)).')'),0); + $GUI->showTagSearch($tag); +} +if ($dispatch == 'search') { + $txt = trim($_REQUEST['search_txt']); + $category_id = Request::option('category_id'); + History::add(array('uri'=>'?dispatch=search&search_txt='.urlencode($txt).'&category_id='.$category_id,'txt'=>'Suche'),0); + if ($category_id == 'all') $category_id = FALSE; + $GUI->showSearchResults($txt,$category_id); +} +if ($dispatch == "hitlist") { + $hitlist = trim($_REQUEST['part']); + if (in_array($hitlist,array('recommended','latest','most_downloaded','most_rated'))) { + $liste = ""; + switch ($hitlist) { + case 'recommended': + $liste = "Empfohlene Plugins"; + break; + case 'latest': + $liste = "Neueste Releases"; + break; + case 'most_downloaded': + $liste = "Am häufigsten heruntergeladen"; + break; + case 'most_rated': + $liste = "Am meisten bewertet"; + break; + default: ; + } + History::add(array('uri'=>'?dispatch=hitlist&part='.urlencode($hitlist),'txt'=>'Hitliste ('.$liste.')'),0); + $GUI->showHitlist($hitlist); + } else + unset($dispatch); +} +if ($dispatch == 'show_category') { + $category_id = Request::option('category_id'); + if ($category_id) { + $c = $DBM->getCategory($category_id); + History::add(array('uri'=>'?dispatch=show_category&category_id='.$category_id,'txt'=>$c['name']),0); + $GUI->showCategory($category_id); + } else + unset($dispatch); +} +if ($dispatch == 'show_release_details') { + $rid = Request::option('release_id'); + $r = new Release(); + $r->load($rid); + History::add(array('uri'=>'?dispatch=show_release_details&release_id='.$rid,'txt'=>'Release '.htmlReady($r->getVersion())),2); + $GUI->showReleaseDetails($rid); +} +if ($dispatch == 'show_plugin_details') { + $pid = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($pid); + History::add(array('uri'=>'?dispatch=show_plugin_details&plugin_id='.$pid,'txt'=>htmlReady($p->getName())),1); + $GUI->showPluginDetails($pid); +} + +if (in_array($dispatch, array('welcome','marktplatz','links','team','impressum','datenschutz','nutzungsbedingungen','faq','tutorials','devfaq'))) { + History::clear(); + $GUI->showIndex($GUI->getContent($dispatch)); +} +/*if ($dispatch == 'send_question') { + include_once 'lib/captcha/securimage.php'; + $securimage = new Securimage(); + if ($securimage->check($_REQUEST['captcha_code']) == false && !($user = $GLOBALS['AUTH']->getAuthenticatedUser())) { + setMessage('error','Der Sicherheitscode war nicht korrekt!'); + $plugin_id = Request::option('plugin_id'); + $p = new Plugin(); + $p->load($plugin_id); + $GUI->showProfile($p->getUserId(), $plugin_id); + } else { + $plugin_id = Request::option('plugin_id'); + $email = trim($_REQUEST['email']); + $users_name = trim($_REQUEST['users_name']); + $question = trim($_REQUEST['question']); + $question_type = trim($_REQUEST['question_type']); + if ($plugin_id && $email && $question) { + $GLOBALS['MAIL']->generateQuestionMail($plugin_id, $question, $question_type, $users_name, $email); + setMessage('info',"Die Anfage wurde versendet."); + unset($dispatch); + } + } +}*/ + +if (!$dispatch) { + History::clear(); + $GUI->showIndex(($PERM->have_perm('author') ? $GLOBALS['FACTORY']->open('greeting_logged_in')->render() : $GUI->getContent('welcome'))); +} + + +include_once 'templates/footer.php'; +?> diff --git a/js/accordion.js b/js/accordion.js new file mode 100644 index 0000000..961f062 --- /dev/null +++ b/js/accordion.js @@ -0,0 +1,201 @@ +// accordion.js v2.0 +// +// Copyright (c) 2007 stickmanlabs +// Author: Kevin P Miller | http://www.stickmanlabs.com +// +// Accordion is freely distributable under the terms of an MIT-style license. +// +// I don't care what you think about the file size... +// Be a pro: +// http://www.thinkvitamin.com/features/webapps/serving-javascript-fast +// http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compressing_javascript_and_css_files +// + +/*-----------------------------------------------------------------------------------------------*/ + +if (typeof Effect == 'undefined') + throw("accordion.js requires including script.aculo.us' effects.js library!"); + +var accordion = Class.create(); +accordion.prototype = { + + // + // Setup the Variables + // + showAccordion : null, + currentAccordion : null, + duration : null, + effects : [], + animating : false, + + // + // Initialize the accordions + // + initialize: function(container, options) { + if (!$(container)) { + throw(container+" doesn't exist!"); + return false; + } + + this.options = Object.extend({ + resizeSpeed : 8, + classNames : { + toggle : 'accordion_toggle', + toggleActive : 'accordion_toggle_active', + content : 'accordion_content' + }, + defaultSize : { + height : null, + width : null + }, + direction : 'vertical', + onEvent : 'click' + }, options || {}); + + this.duration = ((11-this.options.resizeSpeed)*0.15); + + var accordions = $$('#'+container+' .'+this.options.classNames.toggle); + accordions.each(function(accordion) { + Event.observe(accordion, this.options.onEvent, this.activate.bind(this, accordion), false); + if (this.options.onEvent == 'click') { + accordion.onclick = function() {return false;}; + } + + if (this.options.direction == 'horizontal') { + var options = $H({width: '0px'}); + } else { + var options = $H({height: '0px'}); + } + options.update({display: 'none'}); + + this.currentAccordion = $(accordion.next(0)).setStyle(options.toObject()); + }.bind(this)); + }, + + // + // Activate an accordion + // + activate : function(accordion) { + if (this.animating) { + return false; + } + + this.effects = []; + + this.currentAccordion = $(accordion.next(0)); + this.currentAccordion.setStyle({ + display: 'block' + }); + + this.currentAccordion.previous(0).addClassName(this.options.classNames.toggleActive); + + if (this.options.direction == 'horizontal') { + this.scaling = $H({ + scaleX: true, + scaleY: false + }); + } else { + this.scaling = $H({ + scaleX: false, + scaleY: true + }); + } + + if (this.currentAccordion == this.showAccordion) { + this.deactivate(); + } else { + this._handleAccordion(); + } + }, + // + // Deactivate an active accordion + // + deactivate : function() { + var options = $H({ + duration: this.duration, + scaleContent: false, + transition: Effect.Transitions.sinoidal, + queue: { + position: 'end', + scope: 'accordionAnimation' + }, + scaleMode: { + originalHeight: this.options.defaultSize.height ? this.options.defaultSize.height : this.currentAccordion.scrollHeight, + originalWidth: this.options.defaultSize.width ? this.options.defaultSize.width : this.currentAccordion.scrollWidth + }, + afterFinish: function() { + this.showAccordion.setStyle({ + height: 'auto', + display: 'none' + }); + this.showAccordion = null; + this.animating = false; + }.bind(this) + }); + options.update(this.scaling); + + this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive); + + new Effect.Scale(this.showAccordion, 0, options.toObject()); + }, + + // + // Handle the open/close actions of the accordion + // + _handleAccordion : function() { + var options = $H({ + sync: true, + scaleFrom: 0, + scaleContent: false, + transition: Effect.Transitions.sinoidal, + scaleMode: { + originalHeight: this.options.defaultSize.height ? this.options.defaultSize.height : this.currentAccordion.scrollHeight, + originalWidth: this.options.defaultSize.width ? this.options.defaultSize.width : this.currentAccordion.scrollWidth + } + }); + options.update(this.scaling); + + this.effects.push( + new Effect.Scale(this.currentAccordion, 100, options.toObject()) + ); + + if (this.showAccordion) { + this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive); + + options = $H({ + sync: true, + scaleContent: false, + transition: Effect.Transitions.sinoidal + }); + options.update(this.scaling); + + this.effects.push( + new Effect.Scale(this.showAccordion, 0, options.toObject()) + ); + } + + new Effect.Parallel(this.effects, { + duration: this.duration, + queue: { + position: 'end', + scope: 'accordionAnimation' + }, + beforeStart: function() { + this.animating = true; + }.bind(this), + afterFinish: function() { + if (this.showAccordion) { + this.showAccordion.setStyle({ + display: 'none' + }); + } + $(this.currentAccordion).setStyle({ + height: 'auto' + }); + this.showAccordion = this.currentAccordion; + this.animating = false; + }.bind(this) + }); + } +} + \ No newline at end of file diff --git a/js/calendarpopup/AnchorPosition.js b/js/calendarpopup/AnchorPosition.js new file mode 100644 index 0000000..7db0cc8 --- /dev/null +++ b/js/calendarpopup/AnchorPosition.js @@ -0,0 +1,147 @@ +// =================================================================== +// Author: Matt Kruse +// WWW: http://www.mattkruse.com/ +// +// NOTICE: You may use this code for any purpose, commercial or +// private, without any further permission from the author. You may +// remove this notice from your final code if you wish, however it is +// appreciated by the author if at least my web site address is kept. +// +// You may *NOT* re-distribute this code in any way except through its +// use. That means, you can include it in your product, or your web +// site, or any other form where the code is actually being used. You +// may not put the plain javascript up on your site for download or +// include it in your javascript libraries for download. +// If you wish to share this code with others, please just point them +// to the URL instead. +// Please DO NOT link directly to my .js files from your site. Copy +// the files to your server and use them there. Thank you. +// =================================================================== + +/* +AnchorPosition.js +Author: Matt Kruse +Last modified: 10/11/02 + +DESCRIPTION: These functions find the position of an tag in a document, +so other elements can be positioned relative to it. + +COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small +positioning errors - usually with Window positioning - occur on the +Macintosh platform. + +FUNCTIONS: +getAnchorPosition(anchorname) + Returns an Object() having .x and .y properties of the pixel coordinates + of the upper-left corner of the anchor. Position is relative to the PAGE. + +getAnchorWindowPosition(anchorname) + Returns an Object() having .x and .y properties of the pixel coordinates + of the upper-left corner of the anchor, relative to the WHOLE SCREEN. + +NOTES: + +1) For popping up separate browser windows, use getAnchorWindowPosition. + Otherwise, use getAnchorPosition + +2) Your anchor tag MUST contain both NAME and ID attributes which are the + same. For example: + + +3) There must be at least a space between for IE5.5 to see the + anchor tag correctly. Do not do with no space. +*/ + +// getAnchorPosition(anchorname) +// This function returns an object having .x and .y properties which are the coordinates +// of the named anchor, relative to the page. +function getAnchorPosition(anchorname) { + // This function will return an Object with x and y properties + var useWindow=false; + var coordinates=new Object(); + var x=0,y=0; + // Browser capability sniffing + var use_gebi=false, use_css=false, use_layers=false; + if (document.getElementById) { use_gebi=true; } + else if (document.all) { use_css=true; } + else if (document.layers) { use_layers=true; } + // Logic to find position + if (use_gebi && document.all) { + x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]); + y=AnchorPosition_getPageOffsetTop(document.all[anchorname]); + } + else if (use_gebi) { + var o=document.getElementById(anchorname); + x=AnchorPosition_getPageOffsetLeft(o); + y=AnchorPosition_getPageOffsetTop(o); + } + else if (use_css) { + x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]); + y=AnchorPosition_getPageOffsetTop(document.all[anchorname]); + } + else if (use_layers) { + var found=0; + for (var i=0; i +// WWW: http://www.mattkruse.com/ +// +// NOTICE: You may use this code for any purpose, commercial or +// private, without any further permission from the author. You may +// remove this notice from your final code if you wish, however it is +// appreciated by the author if at least my web site address is kept. +// +// You may *NOT* re-distribute this code in any way except through its +// use. That means, you can include it in your product, or your web +// site, or any other form where the code is actually being used. You +// may not put the plain javascript up on your site for download or +// include it in your javascript libraries for download. +// If you wish to share this code with others, please just point them +// to the URL instead. +// Please DO NOT link directly to my .js files from your site. Copy +// the files to your server and use them there. Thank you. +// =================================================================== + +// HISTORY +// ------------------------------------------------------------------ +// Feb 7, 2005: Fixed a CSS styles to use px unit +// March 29, 2004: Added check in select() method for the form field +// being disabled. If it is, just return and don't do anything. +// March 24, 2004: Fixed bug - when month name and abbreviations were +// changed, date format still used original values. +// January 26, 2004: Added support for drop-down month and year +// navigation (Thanks to Chris Reid for the idea) +// September 22, 2003: Fixed a minor problem in YEAR calendar with +// CSS prefix. +// August 19, 2003: Renamed the function to get styles, and made it +// work correctly without an object reference +// August 18, 2003: Changed showYearNavigation and +// showYearNavigationInput to optionally take an argument of +// true or false +// July 31, 2003: Added text input option for year navigation. +// Added a per-calendar CSS prefix option to optionally use +// different styles for different calendars. +// July 29, 2003: Fixed bug causing the Today link to be clickable +// even though today falls in a disabled date range. +// Changed formatting to use pure CSS, allowing greater control +// over look-and-feel options. +// June 11, 2003: Fixed bug causing the Today link to be unselectable +// under certain cases when some days of week are disabled +// March 14, 2003: Added ability to disable individual dates or date +// ranges, display as light gray and strike-through +// March 14, 2003: Removed dependency on graypixel.gif and instead +/// use table border coloring +// March 12, 2003: Modified showCalendar() function to allow optional +// start-date parameter +// March 11, 2003: Modified select() function to allow optional +// start-date parameter +/* +DESCRIPTION: This object implements a popup calendar to allow the user to +select a date, month, quarter, or year. + +COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small +positioning errors - usually with Window positioning - occur on the +Macintosh platform. +The calendar can be modified to work for any location in the world by +changing which weekday is displayed as the first column, changing the month +names, and changing the column headers for each day. + +USAGE: +// Create a new CalendarPopup object of type WINDOW +var cal = new CalendarPopup(); + +// Create a new CalendarPopup object of type DIV using the DIV named 'mydiv' +var cal = new CalendarPopup('mydiv'); + +// Easy method to link the popup calendar with an input box. +cal.select(inputObject, anchorname, dateFormat); +// Same method, but passing a default date other than the field's current value +cal.select(inputObject, anchorname, dateFormat, '01/02/2000'); +// This is an example call to the popup calendar from a link to populate an +// input box. Note that to use this, date.js must also be included!! +Select + +// Set the type of date select to be used. By default it is 'date'. +cal.setDisplayType(type); + +// When a date, month, quarter, or year is clicked, a function is called and +// passed the details. You must write this function, and tell the calendar +// popup what the function name is. +// Function to be called for 'date' select receives y, m, d +cal.setReturnFunction(functionname); +// Function to be called for 'month' select receives y, m +cal.setReturnMonthFunction(functionname); +// Function to be called for 'quarter' select receives y, q +cal.setReturnQuarterFunction(functionname); +// Function to be called for 'year' select receives y +cal.setReturnYearFunction(functionname); + +// Show the calendar relative to a given anchor +cal.showCalendar(anchorname); + +// Hide the calendar. The calendar is set to autoHide automatically +cal.hideCalendar(); + +// Set the month names to be used. Default are English month names +cal.setMonthNames("January","February","March",...); + +// Set the month abbreviations to be used. Default are English month abbreviations +cal.setMonthAbbreviations("Jan","Feb","Mar",...); + +// Show navigation for changing by the year, not just one month at a time +cal.showYearNavigation(); + +// Show month and year dropdowns, for quicker selection of month of dates +cal.showNavigationDropdowns(); + +// Set the text to be used above each day column. The days start with +// sunday regardless of the value of WeekStartDay +cal.setDayHeaders("S","M","T",...); + +// Set the day for the first column in the calendar grid. By default this +// is Sunday (0) but it may be changed to fit the conventions of other +// countries. +cal.setWeekStartDay(1); // week is Monday - Sunday + +// Set the weekdays which should be disabled in the 'date' select popup. You can +// then allow someone to only select week end dates, or Tuedays, for example +cal.setDisabledWeekDays(0,1); // To disable selecting the 1st or 2nd days of the week + +// Selectively disable individual days or date ranges. Disabled days will not +// be clickable, and show as strike-through text on current browsers. +// Date format is any format recognized by parseDate() in date.js +// Pass a single date to disable: +cal.addDisabledDates("2003-01-01"); +// Pass null as the first parameter to mean "anything up to and including" the +// passed date: +cal.addDisabledDates(null, "01/02/03"); +// Pass null as the second parameter to mean "including the passed date and +// anything after it: +cal.addDisabledDates("Jan 01, 2003", null); +// Pass two dates to disable all dates inbetween and including the two +cal.addDisabledDates("January 01, 2003", "Dec 31, 2003"); + +// When the 'year' select is displayed, set the number of years back from the +// current year to start listing years. Default is 2. +// This is also used for year drop-down, to decide how many years +/- to display +cal.setYearSelectStartOffset(2); + +// Text for the word "Today" appearing on the calendar +cal.setTodayText("Today"); + +// The calendar uses CSS classes for formatting. If you want your calendar to +// have unique styles, you can set the prefix that will be added to all the +// classes in the output. +// For example, normal output may have this: +// Today +// But if you set the prefix like this: +cal.setCssPrefix("Test"); +// The output will then look like: +// Today +// And you can define that style somewhere in your page. + +// When using Year navigation, you can make the year be an input box, so +// the user can manually change it and jump to any year +cal.showYearNavigationInput(); + +// Set the calendar offset to be different than the default. By default it +// will appear just below and to the right of the anchorname. So if you have +// a text box where the date will go and and anchor immediately after the +// text box, the calendar will display immediately under the text box. +cal.offsetX = 20; +cal.offsetY = 20; + +NOTES: +1) Requires the functions in AnchorPosition.js and PopupWindow.js + +2) Your anchor tag MUST contain both NAME and ID attributes which are the + same. For example: + + +3) There must be at least a space between for IE5.5 to see the + anchor tag correctly. Do not do with no space. + +4) When a CalendarPopup object is created, a handler for 'onmouseup' is + attached to any event handler you may have already defined. Do NOT define + an event handler for 'onmouseup' after you define a CalendarPopup object + or the autoHide() will not work correctly. + +5) The calendar popup display uses style sheets to make it look nice. + +*/ + +// CONSTRUCTOR for the CalendarPopup Object +function CalendarPopup() { + var c; + if (arguments.length>0) { + c = new PopupWindow(arguments[0]); + } + else { + c = new PopupWindow(); + c.setSize(150,175); + } + c.offsetX = -152; + c.offsetY = 25; + c.autoHide(); + // Calendar-specific properties + c.monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December"); + c.monthAbbreviations = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); + c.dayHeaders = new Array("S","M","T","W","T","F","S"); + c.returnFunction = "CP_tmpReturnFunction"; + c.returnMonthFunction = "CP_tmpReturnMonthFunction"; + c.returnQuarterFunction = "CP_tmpReturnQuarterFunction"; + c.returnYearFunction = "CP_tmpReturnYearFunction"; + c.weekStartDay = 0; + c.isShowYearNavigation = false; + c.displayType = "date"; + c.disabledWeekDays = new Object(); + c.disabledDatesExpression = ""; + c.yearSelectStartOffset = 2; + c.currentDate = null; + c.todayText="Today"; + c.cssPrefix=""; + c.isShowNavigationDropdowns=false; + c.isShowYearNavigationInput=false; + window.CP_calendarObject = null; + window.CP_targetInput = null; + window.CP_dateFormat = "MM/dd/yyyy"; + // Method mappings + c.copyMonthNamesToWindow = CP_copyMonthNamesToWindow; + c.setReturnFunction = CP_setReturnFunction; + c.setReturnMonthFunction = CP_setReturnMonthFunction; + c.setReturnQuarterFunction = CP_setReturnQuarterFunction; + c.setReturnYearFunction = CP_setReturnYearFunction; + c.setMonthNames = CP_setMonthNames; + c.setMonthAbbreviations = CP_setMonthAbbreviations; + c.setDayHeaders = CP_setDayHeaders; + c.setWeekStartDay = CP_setWeekStartDay; + c.setDisplayType = CP_setDisplayType; + c.setDisabledWeekDays = CP_setDisabledWeekDays; + c.addDisabledDates = CP_addDisabledDates; + c.setYearSelectStartOffset = CP_setYearSelectStartOffset; + c.setTodayText = CP_setTodayText; + c.showYearNavigation = CP_showYearNavigation; + c.showCalendar = CP_showCalendar; + c.hideCalendar = CP_hideCalendar; + c.getStyles = getCalendarStyles; + c.refreshCalendar = CP_refreshCalendar; + c.getCalendar = CP_getCalendar; + c.select = CP_select; + c.setCssPrefix = CP_setCssPrefix; + c.showNavigationDropdowns = CP_showNavigationDropdowns; + c.showYearNavigationInput = CP_showYearNavigationInput; + c.copyMonthNamesToWindow(); + // Return the object + return c; + } +function CP_copyMonthNamesToWindow() { + // Copy these values over to the date.js + if (typeof(window.MONTH_NAMES)!="undefined" && window.MONTH_NAMES!=null) { + window.MONTH_NAMES = new Array(); + for (var i=0; i\n"; + result += '

    \n'; + } + else { + result += '
    \n'; + result += '
    \n'; + result += '
    \n'; + } + // Code for DATE display (default) + // ------------------------------- + if (this.displayType=="date" || this.displayType=="week-end") { + if (this.currentDate==null) { this.currentDate = now; } + if (arguments.length > 0) { var month = arguments[0]; } + else { var month = this.currentDate.getMonth()+1; } + if (arguments.length > 1 && arguments[1]>0 && arguments[1]-0==arguments[1]) { var year = arguments[1]; } + else { var year = this.currentDate.getFullYear(); } + var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31); + if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) ) { + daysinmonth[2] = 29; + } + var current_month = new Date(year,month-1,1); + var display_year = year; + var display_month = month; + var display_date = 1; + var weekday= current_month.getDay(); + var offset = 0; + + offset = (weekday >= this.weekStartDay) ? weekday-this.weekStartDay : 7-this.weekStartDay+weekday ; + if (offset > 0) { + display_month--; + if (display_month < 1) { display_month = 12; display_year--; } + display_date = daysinmonth[display_month]-offset+1; + } + var next_month = month+1; + var next_month_year = year; + if (next_month > 12) { next_month=1; next_month_year++; } + var last_month = month-1; + var last_month_year = year; + if (last_month < 1) { last_month=12; last_month_year--; } + var date_class; + if (this.type!="WINDOW") { + result += ""; + } + result += '\n'; + var refresh = windowref+'CP_refreshCalendar'; + var refreshLink = 'javascript:' + refresh; + if (this.isShowNavigationDropdowns) { + result += ''; + result += ''; + + result += ''; + } + else { + if (this.isShowYearNavigation) { + result += ''; + result += ''; + result += ''; + result += ''; + + result += ''; + if (this.isShowYearNavigationInput) { + result += ''; + } + else { + result += ''; + } + result += ''; + } + else { + result += '\n'; + result += '\n'; + result += '\n'; + } + } + result += '
     <'+this.monthNames[month-1]+'> <'+year+'><<'+this.monthNames[month-1]+' '+year+'>>
    \n'; + result += '\n'; + result += '\n'; + for (var j=0; j<7; j++) { + + result += '\n'; + } + result += '\n'; + for (var row=1; row<=6; row++) { + result += '\n'; + for (var col=1; col<=7; col++) { + var disabled=false; + if (this.disabledDatesExpression!="") { + var ds=""+display_year+LZ(display_month)+LZ(display_date); + eval("disabled=("+this.disabledDatesExpression+")"); + } + var dateClass = ""; + if ((display_month == this.currentDate.getMonth()+1) && (display_date==this.currentDate.getDate()) && (display_year==this.currentDate.getFullYear())) { + dateClass = "cpCurrentDate"; + } + else if (display_month == month) { + dateClass = "cpCurrentMonthDate"; + } + else { + dateClass = "cpOtherMonthDate"; + } + if (disabled || this.disabledWeekDays[col-1]) { + result += ' \n'; + } + else { + var selected_date = display_date; + var selected_month = display_month; + var selected_year = display_year; + if (this.displayType=="week-end") { + var d = new Date(selected_year,selected_month-1,selected_date,0,0,0,0); + d.setDate(d.getDate() + (7-col)); + selected_year = d.getYear(); + if (selected_year < 1000) { selected_year += 1900; } + selected_month = d.getMonth()+1; + selected_date = d.getDate(); + } + result += ' \n'; + } + display_date++; + if (display_date > daysinmonth[display_month]) { + display_date=1; + display_month++; + } + if (display_month > 12) { + display_month=1; + display_year++; + } + } + result += ''; + } + var current_weekday = now.getDay() - this.weekStartDay; + if (current_weekday < 0) { + current_weekday += 7; + } + result += '\n'; + result += '
    '+this.dayHeaders[(this.weekStartDay+j)%7]+'
    '+display_date+''+display_date+'
    \n'; + if (this.disabledDatesExpression!="") { + var ds=""+now.getFullYear()+LZ(now.getMonth()+1)+LZ(now.getDate()); + eval("disabled=("+this.disabledDatesExpression+")"); + } + if (disabled || this.disabledWeekDays[current_weekday+1]) { + result += ' '+this.todayText+'\n'; + } + else { + result += ' '+this.todayText+'\n'; + } + result += '
    \n'; + result += '
    \n'; + } + + // Code common for MONTH, QUARTER, YEAR + // ------------------------------------ + if (this.displayType=="month" || this.displayType=="quarter" || this.displayType=="year") { + if (arguments.length > 0) { var year = arguments[0]; } + else { + if (this.displayType=="year") { var year = now.getFullYear()-this.yearSelectStartOffset; } + else { var year = now.getFullYear(); } + } + if (this.displayType!="year" && this.isShowYearNavigation) { + result += ""; + result += '\n'; + result += ' \n'; + result += ' \n'; + result += ' \n'; + result += '
    <<'+year+'>>
    \n'; + } + } + + // Code for MONTH display + // ---------------------- + if (this.displayType=="month") { + // If POPUP, write entire HTML document + result += '\n'; + for (var i=0; i<4; i++) { + result += ''; + for (var j=0; j<3; j++) { + var monthindex = ((i*3)+j); + result += ''; + } + result += ''; + } + result += '
    '+this.monthAbbreviations[monthindex]+'
    \n'; + } + + // Code for QUARTER display + // ------------------------ + if (this.displayType=="quarter") { + result += '
    \n'; + for (var i=0; i<2; i++) { + result += ''; + for (var j=0; j<2; j++) { + var quarter = ((i*2)+j+1); + result += ''; + } + result += ''; + } + result += '

    Q'+quarter+'

    \n'; + } + + // Code for YEAR display + // --------------------- + if (this.displayType=="year") { + var yearColumnSize = 4; + result += ""; + result += '\n'; + result += ' \n'; + result += ' \n'; + result += '
    <<>>
    \n'; + result += '\n'; + for (var i=0; i'+currentyear+''; + } + result += ''; + } + result += '
    \n'; + } + // Common + if (this.type == "WINDOW") { + result += "\n"; + } + return result; + } diff --git a/js/calendarpopup/PopupWindow.js b/js/calendarpopup/PopupWindow.js new file mode 100644 index 0000000..5a58235 --- /dev/null +++ b/js/calendarpopup/PopupWindow.js @@ -0,0 +1,336 @@ +// =================================================================== +// Author: Matt Kruse +// WWW: http://www.mattkruse.com/ +// +// NOTICE: You may use this code for any purpose, commercial or +// private, without any further permission from the author. You may +// remove this notice from your final code if you wish, however it is +// appreciated by the author if at least my web site address is kept. +// +// You may *NOT* re-distribute this code in any way except through its +// use. That means, you can include it in your product, or your web +// site, or any other form where the code is actually being used. You +// may not put the plain javascript up on your site for download or +// include it in your javascript libraries for download. +// If you wish to share this code with others, please just point them +// to the URL instead. +// Please DO NOT link directly to my .js files from your site. Copy +// the files to your server and use them there. Thank you. +// =================================================================== + +/* +PopupWindow.js +Author: Matt Kruse +Last modified: 02/16/04 + +DESCRIPTION: This object allows you to easily and quickly popup a window +in a certain place. The window can either be a DIV or a separate browser +window. + +COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small +positioning errors - usually with Window positioning - occur on the +Macintosh platform. Due to bugs in Netscape 4.x, populating the popup +window with + + +

    Examples

    +Full featured +Simple theme +Skin support +Word processor +Custom formats + + \ No newline at end of file diff --git a/lib/tinymce/examples/simple.html b/lib/tinymce/examples/simple.html new file mode 100644 index 0000000..70720ca --- /dev/null +++ b/lib/tinymce/examples/simple.html @@ -0,0 +1,47 @@ + + + +Simple theme example + + + + + + + + + +
    +

    Simple theme example

    + +

    + 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 Wiki. +

    + + + + +
    + + +
    + + + diff --git a/lib/tinymce/examples/skins.html b/lib/tinymce/examples/skins.html new file mode 100644 index 0000000..108f16d --- /dev/null +++ b/lib/tinymce/examples/skins.html @@ -0,0 +1,216 @@ + + + +Skin support example + + + + + + + + + +
    +

    Skin support example

    + +

    + This page displays the two skins that TinyMCE comes with. You can make your own by creating a CSS file in themes/advanced/skins//ui.css + There are more examples on how to use TinyMCE in the Wiki. +

    + + + + +
    + + + +
    + + + +
    + + + +
    + + +
    + + + diff --git a/lib/tinymce/examples/templates/layout1.htm b/lib/tinymce/examples/templates/layout1.htm new file mode 100644 index 0000000..a38df3e --- /dev/null +++ b/lib/tinymce/examples/templates/layout1.htm @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + +
    Column 1Column 2
    Username: {$username}Staffid: {$staffid}
    diff --git a/lib/tinymce/examples/templates/snippet1.htm b/lib/tinymce/examples/templates/snippet1.htm new file mode 100644 index 0000000..b2520be --- /dev/null +++ b/lib/tinymce/examples/templates/snippet1.htm @@ -0,0 +1 @@ +This is just some code. diff --git a/lib/tinymce/examples/translate.html b/lib/tinymce/examples/translate.html new file mode 100644 index 0000000..7dcaa5d --- /dev/null +++ b/lib/tinymce/examples/translate.html @@ -0,0 +1,84 @@ + + + +Full featured example + + + + + + + + + + +
    +

    Translation

    + +

    This page enables you to translate TinyMCE by using XML files.

    +

    Steps to translate:

    +
      +
    1. Download one of the language XML files from the TinyMCE site.
    2. +
    3. Place it in /jscripts/tiny_mce/langs directory, for example /jscripts/tiny_mce/langs/sv.xml.
    4. +
    5. Change the language init option in this file to match the XML file code. For example: sv
    6. +
    7. TinyMCE will now use the XML file instead of the .js versions.
    8. +
    9. Modify the XML file until everything is translated
    10. +
    11. Modify the author information, this is optional.
    12. +
    13. Upload the XML file to the TinyMCE site to share it with others.
    14. +
    15. You can now download the .js versions of the language pack from the TinyMCE site.
    16. +
    + + +
    + + + diff --git a/lib/tinymce/examples/word.html b/lib/tinymce/examples/word.html new file mode 100644 index 0000000..64cd1d4 --- /dev/null +++ b/lib/tinymce/examples/word.html @@ -0,0 +1,71 @@ + + + +Word processor example + + + + + + + + + +
    +

    Word processor example

    + +

    + 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 Wiki. +

    + + + + +
    + + +
    + + + diff --git a/lib/tinymce/jscripts/tiny_mce/langs/en.js b/lib/tinymce/jscripts/tiny_mce/langs/en.js new file mode 100644 index 0000000..ea4a1b0 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/langs/en.js @@ -0,0 +1,170 @@ +tinyMCE.addI18n({en:{ +common:{ +edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?", +apply:"Apply", +insert:"Insert", +update:"Update", +cancel:"Cancel", +close:"Close", +browse:"Browse", +class_name:"Class", +not_set:"-- Not set --", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?", +clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.", +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.", +invalid_data:"Error: Invalid values entered, these are marked in red.", +more_colors:"More colors" +}, +contextmenu:{ +align:"Alignment", +left:"Left", +center:"Center", +right:"Right", +full:"Full" +}, +insertdatetime:{ +date_fmt:"%Y-%m-%d", +time_fmt:"%H:%M:%S", +insertdate_desc:"Insert date", +inserttime_desc:"Insert time", +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" +}, +print:{ +print_desc:"Print" +}, +preview:{ +preview_desc:"Preview" +}, +directionality:{ +ltr_desc:"Direction left to right", +rtl_desc:"Direction right to left" +}, +layer:{ +insertlayer_desc:"Insert new layer", +forward_desc:"Move forward", +backward_desc:"Move backward", +absolute_desc:"Toggle absolute positioning", +content:"New layer..." +}, +save:{ +save_desc:"Save", +cancel_desc:"Cancel all changes" +}, +nonbreaking:{ +nonbreaking_desc:"Insert non-breaking space character" +}, +iespell:{ +iespell_desc:"Run spell checking", +download:"ieSpell not detected. Do you want to install it now?" +}, +advhr:{ +advhr_desc:"Horizontal rule" +}, +emotions:{ +emotions_desc:"Emotions" +}, +searchreplace:{ +search_desc:"Find", +replace_desc:"Find/Replace" +}, +advimage:{ +image_desc:"Insert/edit image" +}, +advlink:{ +link_desc:"Insert/edit link" +}, +xhtmlxtras:{ +cite_desc:"Citation", +abbr_desc:"Abbreviation", +acronym_desc:"Acronym", +del_desc:"Deletion", +ins_desc:"Insertion", +attribs_desc:"Insert/Edit Attributes" +}, +style:{ +desc:"Edit CSS Style" +}, +paste:{ +paste_text_desc:"Paste as Plain Text", +paste_word_desc:"Paste from Word", +selectall_desc:"Select All", +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.", +plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode." +}, +paste_dlg:{ +text_title:"Use CTRL+V on your keyboard to paste the text into the window.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V on your keyboard to paste the text into the window." +}, +table:{ +desc:"Inserts a new table", +row_before_desc:"Insert row before", +row_after_desc:"Insert row after", +delete_row_desc:"Delete row", +col_before_desc:"Insert column before", +col_after_desc:"Insert column after", +delete_col_desc:"Remove column", +split_cells_desc:"Split merged table cells", +merge_cells_desc:"Merge table cells", +row_desc:"Table row properties", +cell_desc:"Table cell properties", +props_desc:"Table properties", +paste_row_before_desc:"Paste table row before", +paste_row_after_desc:"Paste table row after", +cut_row_desc:"Cut table row", +copy_row_desc:"Copy table row", +del:"Delete table", +row:"Row", +col:"Column", +cell:"Cell" +}, +autosave:{ +unload_msg:"The changes you made will be lost if you navigate away from this page.", +restore_content:"Restore auto-saved content.", +warning_message:"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?." +}, +fullscreen:{ +desc:"Toggle fullscreen mode" +}, +media:{ +desc:"Insert / edit embedded media", +edit:"Edit embedded media" +}, +fullpage:{ +desc:"Document properties" +}, +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." +}, +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" +}}}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/license.txt b/lib/tinymce/jscripts/tiny_mce/license.txt new file mode 100644 index 0000000..60d6d4c --- /dev/null +++ b/lib/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. + + + Copyright (C) + + 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. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css b/lib/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css new file mode 100644 index 0000000..0e22834 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js new file mode 100644 index 0000000..4d3b062 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js new file mode 100644 index 0000000..0c652d3 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js b/lib/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js new file mode 100644 index 0000000..b6cbd66 --- /dev/null +++ b/lib/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 = ' + + + {#advhr.advhr_desc} + + + + + + + +
    + + +
    +
    + + + + + + + + + + + + + +
    + + +
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css new file mode 100644 index 0000000..0a6251a --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js new file mode 100644 index 0000000..4c7a9c3 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js new file mode 100644 index 0000000..2625dd2 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm new file mode 100644 index 0000000..79cff3f --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm @@ -0,0 +1,232 @@ + + + + {#advimage_dlg.dialog_title} + + + + + + + + + +
    + + +
    +
    +
    + {#advimage_dlg.general} + + + + + + + + + + + + + + + + + + +
    + + + + +
     
    +
    + +
    + {#advimage_dlg.preview} + +
    +
    + +
    +
    + {#advimage_dlg.tab_appearance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + {#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. +
    +
    + x + px +
      + + + + +
    +
    +
    +
    + +
    +
    + {#advimage_dlg.swap_image} + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
     
    + + + + +
     
    +
    + +
    + {#advimage_dlg.misc} + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    + + + + +
     
    +
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif new file mode 100644 index 0000000000000000000000000000000000000000..53bf6890b507741c10910c9e2217ad8247b98e8d GIT binary patch literal 1624 zcmV-e2B-N)Nk%w1VJ!eH0OkMy|NsB}{r&v>{Q3F$`1ttq^YifV@ayaA>FMd_=H}w! z;^5%m-rnBb-QC>W+}qpR+S=OL+1c3G*w@$B*4Eb4)YQ|{)zHw=&d$%x&CScp%gV~i z$;rvc$jHXV#>B+L!^6YE!otD9!N9=4zrVk|y}i7=yt})*y1Kf#xw*Hux3;#nwY9ah zw6wFcv$C?Xv9YnRu&}SMudc4Ht*x!BtgNf6tE#H1si~={sjjD|r>3T+rKP2$q@<&x zqobp!qN1Xqp`oFnrJ$goprE6lpP!zdp`MSWoSd7Ro12@UnwpxLnw^=MnV6WE zmzS58mX?*3mz9;3mX?*2l$4W`lai8@l9G~eg|M^H&l zLpBo?51@vfgB2q_TVh*dNP<;cR$Wg!vYsMHR!qvvOis>GNH`+ zJ3B|tqgANiBSy@x>Q#;x7+DuU7&rwlf#S04)VZvA$XoUy8Y&f7)SqP<}Lw@L# zA(@Cohl`6CZyedUu^BlmK|DG5$Kl2f8z@uCc)^k-3m7$G!njf7$;XhOW>^`rV#UFh zEN#eG;bP?tCs>{+)q)ceg9$aDAaTZ{MGK5rU8ty$qz8){MT#gHGX{#XEJHLonBXFa zj+#9GE&^pq!`qG`K5iiC!gq}sRY|1yD8?j++_^oR0g+)NNtZN`)08!0q=}AA4HhIo zFaa9NYu8%97=oos5f?O`lwre~4VfoIei+FyK|urxj@C(-q(sS(!$5uL3j&jg7&XY% zlr17;3GGL;2K8>CB87G97;W(2VZ((D+3Hz;L;bylfhf(kFNV8at)h;hdM z85WX(#*Hq@@BYePt3t_l{ zCL3|YVWydA0Fz{rTl65n00)c^)^-jJn1c zRVXtA6mkUMEDLU|v7{JK&_IJ2ciiCy7BOT1fdUBh8b=yrbYaCAchCU_7?H`b1`}4q zLB|_mI2!;7W4QCq6F1O+MW||6AwmKafUrReUA&QotxQZI8D$G)AuSVV@X<&A9v;~H zKnWjo&;bljq=29aCeV-t5GBYkL=Q}q(S~FLd2t39MyRmC%_GFHkPc7CfIt8P*emqV z0YK2j9A+kmW^!tn(ZmG+L=6DZR99W}8p9?Utr=#t@rE2=zxf3QQ(JBJ&<{Z2>8EUP zeX1B)2w_3gXV)D-0Tt+=#@cV-0f!PU#MglZ3m6b}0e08zK^x;9(u?Tga{%?&nNTXhcEuM_#J>yL>p*a zuZJ2pliCGSp!Ye8>YFq@)ZOW-uT~OrjFQK!)UyVGFt7ni'); + }, + + init : function(ed) { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(); + + tinyMCEPopup.resizeToInnerSize(); + this.fillClassList('class_list'); + this.fillFileList('src_list', 'tinyMCEImageList'); + this.fillFileList('over_list', 'tinyMCEImageList'); + this.fillFileList('out_list', 'tinyMCEImageList'); + 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, + 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 { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + 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 = 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, st, v, 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') { + dom.setStyle(img, 'border', ''); + + v = f.border.value; + if (v || v == '0') { + if (v == '0') + img.style.border = '0'; + else + img.style.border = v + 'px solid black'; + } + } + + // 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', ''); + else + tinyMCEPopup.dom.setHTML('prev', ''); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js new file mode 100644 index 0000000..f493d19 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js @@ -0,0 +1,43 @@ +tinyMCE.addI18n('en.advimage_dlg',{ +tab_general:"General", +tab_appearance:"Appearance", +tab_advanced:"Advanced", +general:"General", +title:"Title", +preview:"Preview", +constrain_proportions:"Constrain proportions", +langdir:"Language direction", +langcode:"Language code", +long_desc:"Long description link", +style:"Style", +classes:"Classes", +ltr:"Left to right", +rtl:"Right to left", +id:"Id", +map:"Image map", +swap_image:"Swap image", +alt_image:"Alternative image", +mouseover:"for mouse over", +mouseout:"for mouse out", +misc:"Miscellaneous", +example_img:"Appearance preview 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.", +dialog_title:"Insert/edit image", +src:"Image URL", +alt:"Image description", +list:"Image list", +border:"Border", +dimensions:"Dimensions", +vspace:"Vertical space", +hspace:"Horizontal space", +align:"Alignment", +align_baseline:"Baseline", +align_top:"Top", +align_middle:"Middle", +align_bottom:"Bottom", +align_texttop:"Text top", +align_textbottom:"Text bottom", +align_left:"Left", +align_right:"Right", +image_list:"Image list" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css new file mode 100644 index 0000000..1436431 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js new file mode 100644 index 0000000..983fe5a --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js new file mode 100644 index 0000000..14e46a7 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js new file mode 100644 index 0000000..b78e82f --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js @@ -0,0 +1,528 @@ +/* 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(''); +} + +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('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href'); + document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href'); + 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; + + // Resize some elements + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '260px'; + + if (isVisible('popupurlbrowser')) + document.getElementById('popupurl').style.width = '180px'; + + elm = inst.dom.getParent(elm, "A"); + if (elm != null && elm.nodeName == "A") + action = "update"; + + formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); + + setPopupControlsDisabled(true); + + if (action == "update") { + var href = inst.dom.getAttrib(elm, 'href'); + var onclick = inst.dom.getAttrib(elm, 'onclick'); + + // Setup form data + setFormValue('href', href); + setFormValue('title', inst.dom.getAttrib(elm, 'title')); + setFormValue('id', inst.dom.getAttrib(elm, 'id')); + setFormValue('style', inst.dom.getAttrib(elm, "style")); + setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); + setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); + setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); + setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); + setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); + setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); + setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); + setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); + setFormValue('type', inst.dom.getAttrib(elm, 'type')); + setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); + setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); + setFormValue('onclick', onclick); + setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); + setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); + setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); + setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); + setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); + setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); + setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); + setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); + setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); + setFormValue('target', inst.dom.getAttrib(elm, 'target')); + setFormValue('classes', inst.dom.getAttrib(elm, 'class')); + + // Parse onclick data + if (onclick != null && onclick.indexOf('window.open') != -1) + parseWindowOpen(onclick); + else + parseFunction(onclick); + + // Select by the values + selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); + selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); + selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); + selectByValue(formObj, 'linklisthref', href); + + if (href.charAt(0) == '#') + selectByValue(formObj, 'anchorlist', href); + + addClassesToList('classlist', 'advlink_styles'); + + selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); + selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true); + } else + addClassesToList('classlist', 'advlink_styles'); +} + +function checkPrefix(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) + n.value = 'http://' + n.value; +} + +function setFormValue(name, value) { + document.forms[0].elements[name].value = value; +} + +function parseWindowOpen(onclick) { + var formObj = document.forms[0]; + + // Preprocess center code + if (onclick.indexOf('return false;') != -1) { + formObj.popupreturn.checked = true; + onclick = onclick.replace('return false;', ''); + } else + formObj.popupreturn.checked = false; + + var onClickData = parseLink(onclick); + + if (onClickData != null) { + formObj.ispopup.checked = true; + setPopupControlsDisabled(false); + + var onClickWindowOptions = parseOptions(onClickData['options']); + var url = onClickData['url']; + + formObj.popupname.value = onClickData['target']; + formObj.popupurl.value = url; + formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); + formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); + + formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); + formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); + + if (formObj.popupleft.value.indexOf('screen') != -1) + formObj.popupleft.value = "c"; + + if (formObj.popuptop.value.indexOf('screen') != -1) + formObj.popuptop.value = "c"; + + formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; + formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; + formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; + formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; + formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; + formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; + formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; + + buildOnClick(); + } +} + +function parseFunction(onclick) { + var formObj = document.forms[0]; + var onClickData = parseLink(onclick); + + // TODO: Add stuff here +} + +function getOption(opts, name) { + return typeof(opts[name]) == "undefined" ? "" : opts[name]; +} + +function setPopupControlsDisabled(state) { + var formObj = document.forms[0]; + + formObj.popupname.disabled = state; + formObj.popupurl.disabled = state; + formObj.popupwidth.disabled = state; + formObj.popupheight.disabled = state; + formObj.popupleft.disabled = state; + formObj.popuptop.disabled = state; + formObj.popuplocation.disabled = state; + formObj.popupscrollbars.disabled = state; + formObj.popupmenubar.disabled = state; + formObj.popupresizable.disabled = state; + formObj.popuptoolbar.disabled = state; + formObj.popupstatus.disabled = state; + formObj.popupreturn.disabled = state; + formObj.popupdependent.disabled = state; + + setBrowserDisabled('popupurlbrowser', state); +} + +function parseLink(link) { + link = link.replace(new RegExp(''', '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'); + for (var i=0; i'; + html += ''; + + for (i=0; i' + name + ''; + } + + html += ''; + + 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) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + i = inst.selection.getBookmark(); + inst.dom.remove(elm, 1); + inst.selection.moveToBookmark(i); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (elm == null) { + inst.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", 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' + tinyMCELinkList[i][0] + ''; + + html += ''; + + 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 += ''; + + return html; +} + +// While loading +preinit(); +tinyMCEPopup.onInit.add(init); diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js new file mode 100644 index 0000000..c71ffbd --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js @@ -0,0 +1,52 @@ +tinyMCE.addI18n('en.advlink_dlg',{ +title:"Insert/edit link", +url:"Link URL", +target:"Target", +titlefield:"Title", +is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +list:"Link list", +general_tab:"General", +popup_tab:"Popup", +events_tab:"Events", +advanced_tab:"Advanced", +general_props:"General properties", +popup_props:"Popup properties", +event_props:"Events", +advanced_props:"Advanced properties", +popup_opts:"Options", +anchor_names:"Anchors", +target_same:"Open in this window / frame", +target_parent:"Open in parent window / frame", +target_top:"Open in top frame (replaces all frames)", +target_blank:"Open in new window", +popup:"Javascript popup", +popup_url:"Popup URL", +popup_name:"Window name", +popup_return:"Insert 'return false'", +popup_scrollbars:"Show scrollbars", +popup_statusbar:"Show status bar", +popup_toolbar:"Show toolbars", +popup_menubar:"Show menu bar", +popup_location:"Show location bar", +popup_resizable:"Make window resizable", +popup_dependent:"Dependent (Mozilla/Firefox only)", +popup_size:"Size", +popup_position:"Position (X/Y)", +id:"Id", +style:"Style", +classes:"Classes", +target_name:"Target name", +langdir:"Language direction", +target_langcode:"Target language", +langcode:"Language code", +encoding:"Target character encoding", +mime:"Target MIME type", +rel:"Relationship page to target", +rev:"Relationship target to page", +tabindex:"Tabindex", +accesskey:"Accesskey", +ltr:"Left to right", +rtl:"Right to left", +link_list:"Link list" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm new file mode 100644 index 0000000..876669c --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm @@ -0,0 +1,333 @@ + + + + {#advlink_dlg.title} + + + + + + + + +
    + + +
    +
    +
    + {#advlink_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
     
    + +
    +
    +
    + + + +
    +
    + {#advlink_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    + {#advlink_dlg.event_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js new file mode 100644 index 0000000..02d1697 --- /dev/null +++ b/lib/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")},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("_mce_style")}}}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle"}).setDisabled(1);a(f[d],function(k){k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js new file mode 100644 index 0000000..a61887a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js @@ -0,0 +1,154 @@ +/** + * 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"); + }, + + createControl: function(name, cm) { + var t = this, btn, format; + + 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 (t.editor.dom.getStyle(node, name) != value) { + state = false; + return false; + } + }); + + return state; + }; + + function applyListFormat() { + var list, ed = t.editor, dom = ed.dom, sel = ed.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)) + ed.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('_mce_style'); + } + } + }; + + btn = cm.createSplitButton(name, { + title : 'advanced.' + name + '_desc', + 'class' : 'mce_' + name, + onclick : function() { + applyListFormat(); + } + }); + + btn.onRenderMenu.add(function(btn, menu) { + menu.onShowMenu.add(function() { + var dom = t.editor.dom, list = dom.getParent(t.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); + } + }); + + menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + each(t[name], function(item) { + item.id = t.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/lib/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js new file mode 100644 index 0000000..1676b15 --- /dev/null +++ b/lib/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;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js new file mode 100644 index 0000000..c260b7a --- /dev/null +++ b/lib/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; + + if (ed.getParam('fullscreen_is_enabled')) + return; + + /** + * This method gets executed each time the editor needs to resize. + */ + function resize() { + var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight; + + // Get height differently depending on the browser used + myHeight = tinymce.isIE ? b.scrollHeight : de.offsetHeight; + + // Don't make it smaller than the minimum height + if (myHeight > t.autoresize_min_height) + resizeHeight = myHeight; + + // Resize content element + DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); + + // if we're throbbing, we'll re-throb to match the new size + if (t.throbbing) { + ed.setProgressState(false); + ed.setProgressState(true); + } + }; + + t.editor = ed; + + // Define minimum height + t.autoresize_min_height = ed.getElement().offsetHeight; + + // Add appropriate listeners for resizing content area + ed.onChange.add(resize); + ed.onSetContent.add(resize); + ed.onPaste.add(resize); + ed.onKeyUp.add(resize); + ed.onPostRender.add(resize); + + if (ed.getParam('autoresize_on_init', true)) { + // Things to do when the editor is ready + ed.onInit.add(function(ed, l) { + // Show throbber until content area is resized properly + ed.setProgressState(true); + t.throbbing = true; + + // Hide scrollbars + ed.getBody().style.overflowY = "hidden"; + }); + + ed.onLoadContent.add(function(ed, l) { + resize(); + + // Because the content area resizes when its content CSS loads, + // and we can't easily add a listener to its onload event, + // we'll just trigger a resize after a short loading period + setTimeout(function() { + resize(); + + // Disable throbber + ed.setProgressState(false); + t.throbbing = false; + }, 1250); + }); + } + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceAutoResize', resize); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto Resize', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js new file mode 100644 index 0000000..6e48540 --- /dev/null +++ b/lib/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| |<\/?p[^>]*>|]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();m.save("TinyMCE")},getItem:function(l){var m=i.getElement();m.load("TinyMCE");return m.getAttribute(l)},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()]*>|]*>/gi, "").length > 0) { + // Show confirm dialog if the editor isn't empty + ed.windowManager.confirm( + PLUGIN_NAME + ".warning_message", + function(ok) { + if (ok) + self.restoreDraft(); + } + ); + } else + self.restoreDraft(); + } + }); + + // Enable/disable restoredraft button depending on if there is a draft stored or not + ed.onNodeChange.add(function() { + var controlManager = ed.controlManager; + + if (controlManager.get(RESTORE_DRAFT)) + controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft()); + }); + + ed.onInit.add(function() { + // Check if the user added the restore button, then setup auto storage logic + if (ed.controlManager.get(RESTORE_DRAFT)) { + // Setup storage engine + self.setupStorage(ed); + + // Auto save contents each interval time + setInterval(function() { + self.storeDraft(); + ed.nodeChanged(); + }, settings.autosave_interval); + } + }); + + /** + * This event gets fired when a draft is stored to local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onStoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft is restored from local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRestoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft removed/expired. + * + * @event onRemoveDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRemoveDraft = new Dispatcher(self); + + // Add ask before unload dialog only add one unload handler + if (!unloadHandlerAdded) { + window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler; + unloadHandlerAdded = TRUE; + } + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @method getInfo + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + /** + * Returns an expiration date UTC string. + * + * @method getExpDate + * @return {String} Expiration date UTC string. + */ + getExpDate : function() { + return new Date( + new Date().getTime() + this.editor.settings.autosave_retention + ).toUTCString(); + }, + + /** + * This method will setup the storage engine. If the browser has support for it. + * + * @method setupStorage + */ + setupStorage : function(ed) { + var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK"; + + self.key = PLUGIN_NAME + ed.id; + + // Loop though each storage engine type until we find one that works + tinymce.each([ + function() { + // Try HTML5 Local Storage + if (localStorage) { + localStorage.setItem(testKey, testVal); + + if (localStorage.getItem(testKey) === testVal) { + localStorage.removeItem(testKey); + + return localStorage; + } + } + }, + + function() { + // Try HTML5 Session Storage + if (sessionStorage) { + sessionStorage.setItem(testKey, testVal); + + if (sessionStorage.getItem(testKey) === testVal) { + sessionStorage.removeItem(testKey); + + return sessionStorage; + } + } + }, + + function() { + // Try IE userData + if (tinymce.isIE) { + ed.getElement().style.behavior = "url('#default#userData')"; + + // Fake localStorage on old IE + return { + autoExpires : TRUE, + + setItem : function(key, value) { + var userDataElement = ed.getElement(); + + userDataElement.setAttribute(key, value); + userDataElement.expires = self.getExpDate(); + userDataElement.save("TinyMCE"); + }, + + getItem : function(key) { + var userDataElement = ed.getElement(); + + userDataElement.load("TinyMCE"); + + return userDataElement.getAttribute(key); + }, + + 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; + + 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/lib/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js b/lib/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js new file mode 100644 index 0000000..fce6bd3 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js @@ -0,0 +1,4 @@ +tinyMCE.addI18n('en.autosave',{ +restore_content: "Restore auto-saved content", +warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js new file mode 100644 index 0000000..930fdff --- /dev/null +++ b/lib/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>/gi,"[url=$1]$2[/url]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/(.*?)<\/font>/gi,"$1");b(//gi,"[img]$1[/img]");b(/(.*?)<\/span>/gi,"[code]$1[/code]");b(/(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/(.*?)<\/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>/gi,"[u]$1[/u]");b(//gi,"[u]");b(/]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/
    /gi,"\n");b(//gi,"\n");b(/
    /gi,"\n");b(/

    /gi,"");b(/<\/p>/gi,"\n");b(/ /gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"
    ");b(/\[b\]/gi,"");b(/\[\/b\]/gi,"");b(/\[i\]/gi,"");b(/\[\/i\]/gi,"");b(/\[u\]/gi,"");b(/\[\/u\]/gi,"");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2');b(/\[url\](.*?)\[\/url\]/gi,'$1');b(/\[img\](.*?)\[\/img\]/gi,'');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2');b(/\[code\](.*?)\[\/code\]/gi,'$1 ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js new file mode 100644 index 0000000..5586637 --- /dev/null +++ b/lib/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: to [b] + rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); + rep(/(.*?)<\/font>/gi,"$1"); + rep(//gi,"[img]$1[/img]"); + rep(/(.*?)<\/span>/gi,"[code]$1[/code]"); + rep(/(.*?)<\/span>/gi,"[quote]$1[/quote]"); + rep(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"); + rep(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"); + rep(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"); + rep(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"); + rep(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"); + rep(/(.*?)<\/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>/gi,"[u]$1[/u]"); + rep(//gi,"[u]"); + rep(/]*>/gi,"[quote]"); + rep(/<\/blockquote>/gi,"[/quote]"); + rep(/
    /gi,"\n"); + rep(//gi,"\n"); + rep(/
    /gi,"\n"); + rep(/

    /gi,""); + rep(/<\/p>/gi,"\n"); + rep(/ /gi," "); + rep(/"/gi,"\""); + rep(/</gi,"<"); + rep(/>/gi,">"); + rep(/&/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 + rep(/\n/gi,"
    "); + rep(/\[b\]/gi,""); + rep(/\[\/b\]/gi,""); + rep(/\[i\]/gi,""); + rep(/\[\/i\]/gi,""); + rep(/\[u\]/gi,""); + rep(/\[\/u\]/gi,""); + rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); + rep(/\[url\](.*?)\[\/url\]/gi,"$1"); + rep(/\[img\](.*?)\[\/img\]/gi,""); + rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); + rep(/\[code\](.*?)\[\/code\]/gi,"$1 "); + rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"$1 "); + + return s; + } + }); + + // Register plugin + tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js new file mode 100644 index 0000000..9749e51 --- /dev/null +++ b/lib/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(d){var f=this,g;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(h,i){if(!i.ctrlKey){if(g){h.selection.setRng(g)}f._getMenu(h).showMenu(i.clientX,i.clientY);a.add(h.getDoc(),"click",function(j){e(h,j)});a.cancel(i)}});d.onRemove.add(function(){if(f._menu){f._menu.removeAll()}});function e(h,i){g=null;if(i&&i.button==2){g=h.selection.getRng();return}if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(h.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},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(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js new file mode 100644 index 0000000..13813a6 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js @@ -0,0 +1,147 @@ +/** + * 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, lastRng; + + t.editor = ed; + + /** + * 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); + + ed.onContextMenu.add(function(ed, e) { + if (!e.ctrlKey) { + // Restore the last selection since it was removed + if (lastRng) + ed.selection.setRng(lastRng); + + t._getMenu(ed).showMenu(e.clientX, e.clientY); + Event.add(ed.getDoc(), 'click', function(e) { + hide(ed, e); + }); + Event.cancel(e); + } + }); + + ed.onRemove.add(function() { + if (t._menu) + t._menu.removeAll(); + }); + + function hide(ed, e) { + lastRng = null; + + // Since the contextmenu event moves + // the selection we need to store it away + if (e && e.button == 2) { + lastRng = ed.selection.getRng(); + return; + } + + if (t._menu) { + t._menu.removeAll(); + t._menu.destroy(); + Event.remove(ed.getDoc(), 'click', hide); + } + }; + + ed.onMouseDown.add(hide); + ed.onKeyDown.add(hide); + }, + + /** + * 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, p1, p2; + + if (m) { + m.removeAll(); + m.destroy(); + } + + p1 = DOM.getPos(ed.getContentAreaContainer()); + p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('contextmenu', { + offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0), + offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0), + constrain : 1 + }); + + 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); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js new file mode 100644 index 0000000..bce8e73 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js new file mode 100644 index 0000000..4444959 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js @@ -0,0 +1,82 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Directionality', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + ed.addCommand('mceDirectionLTR', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "ltr") + ed.dom.setAttrib(e, "dir", "ltr"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addCommand('mceDirectionRTL', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "rtl") + ed.dom.setAttrib(e, "dir", "rtl"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'}); + ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'}); + + ed.onNodeChange.add(t._nodeChange, t); + }, + + getInfo : function() { + return { + longname : 'Directionality', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var dom = ed.dom, dir; + + n = dom.getParent(n, dom.isBlock); + if (!n) { + cm.setDisabled('ltr', 1); + cm.setDisabled('rtl', 1); + return; + } + + dir = dom.getAttrib(n, 'dir'); + cm.setActive('ltr', dir == "ltr"); + cm.setDisabled('ltr', 0); + cm.setActive('rtl', dir == "rtl"); + cm.setDisabled('rtl', 0); + } + }); + + // Register plugin + tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js new file mode 100644 index 0000000..dbdd8ff --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js new file mode 100644 index 0000000..71d5416 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm new file mode 100644 index 0000000..55a1d72 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm @@ -0,0 +1,40 @@ + + + + {#emotions_dlg.title} + + + + +

    +
    {#emotions_dlg.title}:

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {#emotions_dlg.cool}{#emotions_dlg.cry}{#emotions_dlg.embarassed}{#emotions_dlg.foot_in_mouth}
    {#emotions_dlg.frown}{#emotions_dlg.innocent}{#emotions_dlg.kiss}{#emotions_dlg.laughing}
    {#emotions_dlg.money_mouth}{#emotions_dlg.sealed}{#emotions_dlg.smile}{#emotions_dlg.surprised}
    {#emotions_dlg.tongue-out}{#emotions_dlg.undecided}{#emotions_dlg.wink}{#emotions_dlg.yell}
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba90cc36fb0415d0273d1cd206bff63fd9c91fde GIT binary patch literal 354 zcmV-o0iFIwNk%w1VG;lm0Mr!#3ke00dJfFY%i+lrhK7V(RutUQJhPY;?(XfrsZKgL z7WLQ^zPO&zzav{)SL^9nBOw~z(=orMEH5uC-P_gr`uhCnASMa|$-iRw?m_(dUwU8) zq>Kx}s1_F$4FCWDA^8LW0018VEC2ui01^Na000Hw;3tYzX_jM3Qpv$_M?zI9i5=0S zX-{-uv=l3%&P0s%m9Ox_a(m_c|u z01g3U0`Wll5)poVdma=N8y<3f0Sf~hXmTC}2oxMW4FdxUj+z4<0}lrX2nP=qkDRIt z9Ge*(qzMrj3jrIOjvI{`5eWzt3`G_T8yChG8w(a19SkK12@M(+799Zr9n=~PzBCmA z5)BU-)YKUd4H5!D9|!^o9kWIe9SH(WDHRk92}DZ?3})2$P@$55g90f0N)ZA8JID5J Aw*UYD literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif new file mode 100644 index 0000000000000000000000000000000000000000..74d897a4f6d22e814e2b054e98b8a75fb464b4be GIT binary patch literal 329 zcmV-P0k-}}Nk%w1VG;lm0Mr-&E)xPSit@9T3%;vR+|V+?t0A(pllJjXrMl7n=_A_a za^B+Su$LjvyC3@TIQZNZa##w=!k(SO^P#bO*w(eU#;{U83XFCU_V)J5wrb+;g2vkN z#>U24qVoOvY5)KLA^8LW0018VEC2ui01^Na000HX;3tY$X_jM3QUfCh%s^o(nF++< zc?Th6v=oL>*by8K!mhvwelUXuuW&&U9iGO3hM@>Njw{l^#0q9mWpcefdI;O$;efnY zkd~@r-o$*74FCWI1%d((4+jDz0va0>69^fI6%`W{8w!gU1pyL>prH>E0R<%k6Aq%H z4ij+^9TEwM5P}eh2@)L<~6+>@EpxfA0YrcPNsSu literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif new file mode 100644 index 0000000000000000000000000000000000000000..963a96b8a7593b1d8bcbab073abe5ee4e539dbf6 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VG;lm0MrryDh>j~yq&6%75dW~z^P39(NxsGDE{UkxtkIEq(S-a zRKlwv+S=Lr?>hbYY~sQ?c3T&ZcN_Nh_EU3s(>Io6B&>WW`@bsw**)Ocy1bht z{*G6|uwwqUQ2+n{A^8LW0018VEC2ui01^Na000HZ;3tYwX_jM3YQ!c88=*-m*&&bO zILd=`w3KAC;8hxpif*w9ek6oqV-Z0L77fROK$BSR@5BAv-%C>6y>>#+D4e#&nz^qMDItlpp zTG728+|V&?R13PIEBW(C`uh6d*t-1sZ^XQv;oDD}iYLOV7uVO;{`xl4#4tJ{0;h@! z>)kfFn;iS@Hvj+tA^8LW0018VEC2ui01^Na000Hm;3tYuX_jM3Mo7199TGt*Nf;R= zNmOPKwA8_2Q6MTDP6eT`I1VESVj-zGIG(JdB3U44kcdI@;AAq{Gv^^O%%ltj2GdB) z>vIL;d*~=0a|w1Bf^!cF9R~+vb94;_0}TxWlnMrlj2MuVoSYAreF`3(0|pHS8VLgr zi3bP_qZ;q#>Sw62=mns-On=0wransPVevT^YK{Dy(0YY zH)vE6x0?;Wqb>gZas1^OT0si>`ugD5y87}*#H$s=yq(wA*8cf7{`y+(+9J7|9QfT7 z`ROHiU=Y&6FaQ7mA^8LW0018VEC2ui01^Na000Hi;3tYvX_jM3N`@u~nju9hSuh^r zIEcp-wA7(NL0~2d#RP+(G!CPPA>o*KJjv_CkucCA5=K?AfF#RG2V*8BU@jL304|4P z2;PGRF@bj$et;Jf2pR_mVsIA<85|n}kQ*Bq42Ovqj*yy>6P0=h3X&9Z01yyk~2N4w%7#RW^55W%`0vQ+-6(y_*2pqz~90*;x9}yM}%$UI(7t#$D mK_3Se1{4HKM+6iG7EmeH6$V631{L5n)#CyC0qx-*Apkoyg?w!Q literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif new file mode 100644 index 0000000000000000000000000000000000000000..334d49e0e60f2997c9ba24071764f95d9e08a5cc GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryI4TI-%dP0m5~*+Y`T~ z7Rth){q{I_X%*S48uRZ|(b3V&wIKTX`u+WJzo<^$#wuY;3W|Cf{O29IkTAcaE&lpe z+P*^H)-tknA^-pYA^8LW0018VEC2ui01^Na000He;3tYwX_n)75QgVvNQ`6#5gcMm zEEG~blgXokptKAJgCU?%JT?yos!R6cPtcQWh2siHlNI2L}ifQhgX02^InZ2?-ktkqVRyZJY^Trk|lv zovp437?1~d46O)?2(1i+2NDYk8<+_Kil!K!3njA^!I#dL8x<729}*B65mC=m5gHH@ iDi9P3f*VjB3KS4HDb_qqRul{0DIT=Nk%w1VG;lm0Mrx!QauaC#>Vb6G=_5=^YB^9wrc376Sb5I-qJGf@9vZ# z5WlKU(!eVB+7tfnDXp0zyB`?BZ5IChalob*`uh6d*t+@dKGHcU+L|83yq*5~IoH?L zy`?Gp<{bX|SpWb4A^8LW0018VEC2ui01^Na000Hg;3tYyX_jM3R?Bl7&r(q;SsVx< zNd$5fv{ZsKA$SlL3&KN~a1tZRf*~1Ltkx9~2uL3&z-yb0WJDRY082|tP literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif new file mode 100644 index 0000000000000000000000000000000000000000..1606c119e75678c4031f384e0d50849906e8f533 GIT binary patch literal 344 zcmV-e0jK^)Nk%w1VG;lm0MruzQauf>s;1-69HWK?p_PpF=Pd8~Ygtcnp*fHAL z**;z>w3iC}`fmL6IkKB1N;3zEa}&zKpsu1;_V)HocR5-{J~BcYvE`YXhBnc@CfU=! za(Ec zG>66zv=rqr;2j)}gKqE$ekcSD?}0=WLB?AWp85)qALd+P=4)6X4oXy{bw2>K^d$ z@6ERvva+(4ib~41YUkTEn1&#?rzrOHT>1I=Y*h`+%*@WtPUPg|!@EEI_d5LgZ>^Og z-qyCjsu$J9F8}}lA^8LW0018VEC2ui01^Na000HT;3tYxX_jM37RWXX8&XUv=@{Oj zX@_Sxw3H&!kzgQ?2LvPOL=>Y5VxieY9+_+eqFEql6OKWXd3Ze8Ggf2Zln@U|mI9d9 zGm^(wVUTA5cYs-V1`2#+a})^z6chrF5`~8k5e6@pmkW`GeGw<069yTQaGnH)s0suV zR|pCd0ZtRCsjM9VB^L+~7X%f*zyuc%2p3=#ycf#L%McYo9|{Z&5D^#_78qL%3{WW( X7Xb)FP6z?UH6ODVz!ev-DIowmgll^P literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6a9e60d5ddd1243fbbf2197b4dc6cd9c1b58b93 GIT binary patch literal 345 zcmV-f0jB;(Nk%w1VG;lm0MrlwCJF+^#>SR<4C>Dj%C>6W(lWoQPVevT^YB^Fy&h6M z4YZgH{O~qtR1(Ci8T;lQ`uh6d*t-7xar*K{#Jrulo-Wtd*44u?{`oh#n;gQXGXDEo z_}UVAU=FH^0ssI2A^8LW0018VEC2ui01^Na000Hn;3tYuX_jM3Mn>j&nGr!MNh}v4 zNyxPjwA7*EKx`%q#$Vl9SM>N9ReH-cn1&^4jYXf0KotqjT;UWC94U(4-NtX4#i!%9}pHA2?&dg3>XLr r8Wuqx2Nnhn1xrT-4h9xbDb^GQ8V(K`1{C5o)#U;I0p5-K5CQ-@9%ySnDDC*4*{OcpiwransPVevTQacIr@mkQp zCf(06s)_=>r7UYx48o@u`uh6d*t-7rH~ji<`P&oj;5Wp)o!8ga`SV6TA_BIW5#ZWV z{`*+__>9}pJ}3JDSl85wB_3Jn)Q o9|so(4+|I^92g4^1{Y8%(iR3pP6ig=HPPY$`~mLZA3^{CJDB=?L;wH) literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..2075dc16058f1f17912167675ce5cfb9986fc71d GIT binary patch literal 328 zcmV-O0k{4~Nk%w1VG;lm0Mrx!CJF+^#>SU@3-{U*rx+Q^wrc$ABfqLn@9*x?z8(4X zSW-O=@){bmmI~g|GQXoP);cvj3|f1M8e@{G*!tYaiCEujj1NGxRN#6#tiCETo+{x{Hkzt z5k-kPvcD=V2nbmjCgL6k{uF&2nP-t0s;w<385Nx2oxDb z9T5Pp7qJl?3Kkh9oe2sCr5F$p7zPSlsUH*@54w*83=9Or4;w)r2pcU95(FL|1Th;< aDaRQH4;Tal7#Y$v#?=Au0pHUfApkpvZg^t= literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif new file mode 100644 index 0000000000000000000000000000000000000000..bef7e257303f8243c89787e7a7f9955dd1f112e2 GIT binary patch literal 337 zcmV-X0j~Z>Nk%w1VG;lm0MroxDi#99#>R?y8~4}{%C>6#>?OadPVevTr-=vi@LATn z4rERY-qJF+n+?CCE&B3D{{3Shh?>WT0o%`b%*Voqm`dL;(4F35y zc485^n;g!+Bme*aA^8LW0018VEC2ui01^Na000Hf;3tYvX_jM3N=AnuogqakNi<9X zK?&0kwA8^tNn{?C$|IAYI1ZzT!2>}iuMddFK#NEkRl!7%6brJAnUs;)XcnA}TNBSP zxQ9;SvEfwYeSaGd2^|LqU~(QF1qBxr3Ii7x84ZVt8wCTKoSYAqc?p`G2onnpk`IOl z1`HLGj}riN2p1K12N4z&8IBDc6tEWs859;JtRB6>lf+xO9}yT19toMv8wnl`7(pKg j7zPv!OGgY81{hE&(iR3pP6ig;HPPS!_yOwPA0Yrc)=Yf3 literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..9faf1aff8f4b28e02f4f414975fe1859c43b6b54 GIT binary patch literal 351 zcmV-l0igazNk%w1VG;lm0MrryC=CL}#>Sn03F^-g-qAA3wransPV?|t@9*x%vmQ`7 z4E*pcw3rOOq%3t@4*K#({N^40{c-yG`rz2Q!KfI-yq*61HrBop*VoqW<}&{JS@_x# zwwfH#!YTdnIsgCwA^8LW0018VEC2ui01^Na000Ht;3tYwX_jM3P6j6koH0o%Sun&A zMF+tYv=pL2IcOdp&qH&dG!P?+ArV0)J)O=Yk}%LD6Go&#@MJn3he8=)%%lWOM*#pN zEDD9iq9J$@90v~;83`GC4i0+{2OJ0pVtacF5E}yn8<`pmkCBv_pqZEtoPY-l0}P>= z3WE6cr`19U7DgF9{F}at6R35*Q5~ x2OgBy9tRx_7(pKh7zPvsOGgA01{hE&-4zBzP6id}HMp@0Krnzkbss_i06S`>cdh^c literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif b/lib/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif new file mode 100644 index 0000000000000000000000000000000000000000..648e6e879123fe49beebbc1f3635141864a79a9c GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryG8O{K#>IbS7WCB_mWF$+hzY-{PWkp(?(Xf;zbH~P z3jOdj?W+^YwrakfE8fyG&5jTBz!3WS`fgM_;MltQ+c}4GO8)(E`S3`@yq&d~5!ct& z)v79NObo)O7XSbNA^8LW0018VEC2ui01^Na000He;3tYwX_jM3QifI(nn6h_*=Wyk zUB{y}v=qYOIUF#R3dZPhAVv~H;(|a2yN_5FH&J0|$eJ3kw4gj1Y?v5d#>LMV12^6BYy$1)ZKA zga!|m2?POz0R)f>4+aPl8KD{gz`+G_9vLMFQU?RU!8uyH9}*i52|cC+7S0YEK_3Vk i1|APfM-Ltb8&4_H83sg61{vHn(cc000qNZzApkp + + + {#example_dlg.title} + + + + + +
    +

    Here is a example dialog.

    +

    Selected text:

    +

    Custom arg:

    + +
    + + +
    +
    + + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js new file mode 100644 index 0000000..ec1f81e --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js new file mode 100644 index 0000000..9a0e7da --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif b/lib/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ab5da4461113d2af579898528246fdbe52ecd00 GIT binary patch literal 87 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*pGzw+SQ`#f{}FJ-?!v#V)e mtsGNfpJeCKSAiOz**>0`XR2{OVa>-G_df0vaY/i);if(f&&f[1]){l=f[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(l){for(c=0,e=l.length;c",a);h.head=f.substring(0,a+1);j=f.indexOf("\n'}h.head+=d.getParam("fullpage_default_doctype",'');h.head+="\n\n\n"+d.getParam("fullpage_default_title","Untitled document")+"\n";if(g=d.getParam("fullpage_default_encoding")){h.head+='\n'}if(g=d.getParam("fullpage_default_font_family")){i+="font-family: "+g+";"}if(g=d.getParam("fullpage_default_font_size")){i+="font-size: "+g+";"}if(g=d.getParam("fullpage_default_text_color")){i+="color: "+g+";"}h.head+="\n\n";h.foot="\n\n"}},_getContent:function(a,c){var b=this;if(!c.source_view||!a.getParam("fullpage_hide_in_source_view")){c.content=tinymce.trim(b.head)+"\n"+tinymce.trim(c.content)+"\n"+tinymce.trim(b.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js new file mode 100644 index 0000000..a2c9df8 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js @@ -0,0 +1,153 @@ +/** + * 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.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, + head_html : t.head + }); + }); + + // Register buttons + ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'}); + + ed.onBeforeSetContent.add(t._setContent, t); + ed.onSetContent.add(t._setBodyAttribs, 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 + + _setBodyAttribs : function(ed, o) { + var bdattr, i, len, kv, k, v, t, attr = this.head.match(/body(.*?)>/i); + + if (attr && attr[1]) { + bdattr = attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g); + + if (bdattr) { + for(i = 0, len = bdattr.length; i < len; i++) { + kv = bdattr[i].split('='); + k = kv[0].replace(/\s/,''); + v = kv[1]; + + if (v) { + v = v.replace(/^\s+/,'').replace(/\s+$/,''); + t = v.match(/^["'](.*)["']$/); + + if (t) + v = t[1]; + } else + v = k; + + ed.dom.setAttrib(ed.getBody(), 'style', v); + } + } + } + }, + + _createSerializer : function() { + return new tinymce.dom.Serializer({ + dom : this.editor.dom, + apply_source_formatting : true + }); + }, + + _setContent : function(ed, o) { + var t = this, sp, ep, c = o.content, v, st = ''; + + // 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' && t.head) + return; + + if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) + return; + + // Parse out head, body and footer + c = c.replace(/<(\/?)BODY/gi, '<$1body'); + sp = c.indexOf('', sp); + t.head = c.substring(0, sp + 1); + + ep = c.indexOf('\n'; + + t.head += ed.getParam('fullpage_default_doctype', ''); + t.head += '\n\n\n' + ed.getParam('fullpage_default_title', 'Untitled document') + '\n'; + + if (v = ed.getParam('fullpage_default_encoding')) + t.head += '\n'; + + if (v = ed.getParam('fullpage_default_font_family')) + st += 'font-family: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_font_size')) + st += 'font-size: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_text_color')) + st += 'color: ' + v + ';'; + + t.head += '\n\n'; + t.foot = '\n\n'; + } + }, + + _getContent : function(ed, o) { + var t = this; + + if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) + o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot); + } + }); + + // Register plugin + tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm b/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm new file mode 100644 index 0000000..c32afaf --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm @@ -0,0 +1,571 @@ + + + + {#fullpage_dlg.title} + + + + + + + +
    + + +
    +
    +
    + {#fullpage_dlg.meta_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
     
     
     
     
      + +
    +
    + +
    + {#fullpage_dlg.langprops} + + + + + + + + + + + + + + + + + + + + + + +
    + +
      + +
     
    + +
     
    +
    +
    + +
    +
    + {#fullpage_dlg.appearance_textprops} + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + + +
     
    +
    +
    + +
    + {#fullpage_dlg.appearance_bgprops} + + + + + + + + + + +
    + + + + + +
     
    +
    + + + + + +
     
    +
    +
    + +
    + {#fullpage_dlg.appearance_marginprops} + + + + + + + + + + + + + + +
    +
    + +
    + {#fullpage_dlg.appearance_linkprops} + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    +
    + + + + + +
     
    +
    + + + + + +
     
    +
      
    +
    + +
    + {#fullpage_dlg.appearance_style} + + + + + + + + + + +
    + + + + +
     
    +
    +
    + +
    + + +
    + {#fullpage_dlg.head_elements} + +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + +
    + {#fullpage_dlg.meta_element} + + + + + + + + + + + + + + +
    + + +
    + +
    + {#fullpage_dlg.title_element} + + + + + + +
    + + +
    + +
    + {#fullpage_dlg.script_element} + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    + + + + +
     
    +
    + +
    + +
    +
    + + +
    + +
    + {#fullpage_dlg.style_element} + + + +
    + +
    +
    + + + + + + + + + +
    +
    + +
    + +
    +
    + + +
    + +
    + {#fullpage_dlg.base_element} + + + + + + + + + + +
    + + +
    + + + +
    + {#fullpage_dlg.comment_element} + + + + +
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js b/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js new file mode 100644 index 0000000..a1bb719 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js @@ -0,0 +1,471 @@ +/** + * fullpage.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 doc; + +var defaultDocTypes = + 'XHTML 1.0 Transitional=,' + + 'XHTML 1.0 Frameset=,' + + 'XHTML 1.0 Strict=,' + + 'XHTML 1.1=,' + + 'HTML 4.01 Transitional=,' + + 'HTML 4.01 Strict=,' + + 'HTML 4.01 Frameset='; + +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 defaultMediaTypes = + 'all=all,' + + 'screen=screen,' + + 'print=print,' + + 'tty=tty,' + + 'tv=tv,' + + 'projection=projection,' + + 'handheld=handheld,' + + 'braille=braille,' + + 'aural=aural'; + +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 init() { + var f = document.forms['fullpage'], el = f.elements, e, i, p, doctypes, encodings, mediaTypes, fonts, ed = tinyMCEPopup.editor, dom = tinyMCEPopup.dom, style; + + // Setup doctype select box + doctypes = ed.getParam("fullpage_doctypes", defaultDocTypes).split(','); + for (i=0; i 1) + addSelectValue(f, 'doctypes', p[0], p[1]); + } + + // Setup fonts select box + fonts = ed.getParam("fullpage_fonts", defaultFontNames).split(';'); + for (i=0; i 1) + addSelectValue(f, 'fontface', p[0], p[1]); + } + + // Setup fontsize select box + fonts = ed.getParam("fullpage_fontsizes", defaultFontSizes).split(','); + for (i=0; i 1) { + addSelectValue(f, 'element_style_media', p[0], p[1]); + addSelectValue(f, 'element_link_media', p[0], p[1]); + } + } + + // Setup encodings select box + encodings = ed.getParam("fullpage_encodings", defaultEncodings).split(','); + for (i=0; i 1) { + addSelectValue(f, 'docencoding', p[0], p[1]); + addSelectValue(f, 'element_script_charset', p[0], p[1]); + addSelectValue(f, 'element_link_charset', p[0], p[1]); + } + } + + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color'); + //document.getElementById('hover_color_pickcontainer').innerHTML = getColorPickerHTML('hover_color_pick','hover_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('link_href_pickcontainer').innerHTML = getBrowserHTML('link_href_browser','element_link_href','file','fullpage'); + document.getElementById('script_src_pickcontainer').innerHTML = getBrowserHTML('script_src_browser','element_script_src','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'; + + // Add iframe + dom.add(document.body, 'iframe', {id : 'documentIframe', src : 'javascript:""', style : {display : 'none'}}); + doc = dom.get('documentIframe').contentWindow.document; + h = tinyMCEPopup.getWindowArg('head_html'); + + // Preprocess the HTML disable scripts and urls + h = h.replace(/ + + + +
    + +
    + + + + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js new file mode 100644 index 0000000..e9cba10 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js new file mode 100644 index 0000000..1b2bb98 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js new file mode 100644 index 0000000..07ea477 --- /dev/null +++ b/lib/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(r,j){var y=this,i,k="",q=y.editor,g=0,s=0,h,m,n,o,l,v,x;r=r||{};j=j||{};if(!r.inline){return y.parent(r,j)}if(!r.type){y.bookmark=q.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();r.width=parseInt(r.width||320);r.height=parseInt(r.height||240)+(tinymce.isIE?8:0);r.min_width=parseInt(r.min_width||150);r.min_height=parseInt(r.min_height||100);r.max_width=parseInt(r.max_width||2000);r.max_height=parseInt(r.max_height||2000);r.left=r.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(r.width/2)));r.top=r.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(r.height/2)));r.movable=r.resizable=true;j.mce_width=r.width;j.mce_height=r.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=r.auto_focus;y.features=r;y.params=j;y.onOpen.dispatch(y,r,j);if(r.type){k+=" mceModal";if(r.type){k+=" mce"+r.type.substring(0,1).toUpperCase()+r.type.substring(1)}r.resizable=false}if(r.statusbar){k+=" mceStatusbar"}if(r.resizable){k+=" mceResizable"}if(r.minimizable){k+=" mceMinimizable"}if(r.maximizable){k+=" mceMaximizable"}if(r.movable){k+=" mceMovable"}y._addAll(d.doc.body,["div",{id:i,"class":q.settings.inlinepopups_skin||"clearlooks2",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"},r.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight"}]],["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(!r.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;s+=d.get(i+"_top").clientHeight;s+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:r.top,left:r.left,width:r.width+g,height:r.height+s});x=r.url||r.file;if(x){if(tinymce.relaxedDomain){x+=(x.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}x=tinymce._addVer(x)}if(!r.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:r.width,height:r.height});d.setAttrib(i+"_ifr","src",x)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(r.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",r.content.replace("\n","
    "))}n=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=y.windows[i];y.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return y._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return y._startDrag(i,t,u.className.substring(13))}}}}}});o=a.add(i,"click",function(f){var p=f.target;y.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":y.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":r.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});v=y.windows[i]={id:i,mousedown_func:n,click_func:o,element:new b(i,{blocker:1,container:q.getContainer()}),iframeElement:new b(i+"_ifr"),features:r,deltaWidth:g,deltaHeight:s};v.iframeElement.on("focus",function(){y.focus(i)});if(y.count==0&&y.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(y.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:y.zIndex-1}});d.show("mceModalBlocker")}else{d.setStyle("mceModalBlocker","z-index",y.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})}y.focus(i);y._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}y.count++;return v},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}},_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;gf){i=m;f=m.zIndex}});if(i){h.focus(i.id)}}},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/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js new file mode 100644 index 0000000..e991683 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js @@ -0,0 +1,635 @@ +/** + * 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; + + f = f || {}; + p = p || {}; + + // Run native windows + if (!f.inline) + return t.parent(f, p); + + // 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, 'class' : ed.settings.inlinepopups_skin || 'clearlooks2', 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'}], + ['span', {id : id + '_content'}], + ['div', {id : id + '_right', 'class' : 'mceRight'}] + ], + + ['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', '
    ')); + } + + // 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 == '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); + } + } + }); + + // 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 + } 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}); + + 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; + } + }, + + _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 ix) { + fw = w; + ix = w.zIndex; + } + }); + + if (fw) + t.focus(fw.id); + } + }, + + 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/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif new file mode 100644 index 0000000000000000000000000000000000000000..94abd08763fffdaa0dd5c5afb470a97294f2b94d GIT binary patch literal 818 zcmV-21I_$LNk%w1VITk?0OkMyy?1uhZf>Is3*B5?sT&&Hqoc$;Jkrt6&k+&QHa5gV zL)l77I5;@fLqpYMWV+*+oUyj*ia`4%)P|vrSClaB!?EE7K$--(_XZ zOH0lO2-#9n!;Fik78a-!6wR}-yS%#378ch%J=j4(x@2V5*3{b0&C|=t(mFcQDJi8A z60bTsucxKY8XD3{O5bW~+gDfHP*AZbD54S)*gHGL#>A(co5`c08yg$Yzr7_TCCA9d zs-U0MFfhzxW4%d9s-K?K($LSkxy-Sz(7?Xdn3%wSe#oDmxL#e?qN1My0^C(q&nzt3 zjEvWFbJcly)5*uu)6w93eACp@*{!X#QBc56PRYv1%goBm&CA4*kj9vnyFxN00960|JK*lA^8LV00000EC2ui z03ZM$000O7fPaF6goTEOh>41ejE#5-A-Y zDMkRMg$FSdD>XGe76Lo4g8*}CUeivLI}B6rYIE)9Vh306CXDUKb=Dfx`}wT=u<6# zD$n)U&_b6YEgl901IUC4zyf`27&(S$$E;fb{Wx)wm4^u-0H zv*CdXLINn%=tH`+>C>qDxJcmTfS@*Z45S!AI|Ya#EOHOnP2`2|1;88Ju#tey5e=^) w9O1*fx%21Hn;(HtX3!cMK%gku&b_<$??7lEkM$&p`Sa-0r)T3DnWI1eJD_KQDgXcg literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif new file mode 100644 index 0000000000000000000000000000000000000000..e671094cb0eb210b756117f992cf5ca2caa698fd GIT binary patch literal 280 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 literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2a2ad454db194e428a7b9da40f62d5376a17428 GIT binary patch literal 769 zcmb7?=`WiB0LI^D)(HC`v6*aD4AW#LGRb0Oi$tH~CP=nb%N%8n zy02ceuewTUUDeW|RaMp*TlLV6R$o=rQOY{@AME+?`}QQiCwU%4Jq)?`{5B8=ECT1T z+wH!7{zji$)-UA>D9({)xO1SJGLHK54Mat(}s4_unMiKjB85EHng*~!Ddt+?(c5uHG4ZI zsc>jP#5Y6w6Wj5!Y=0^oK*&D+R;Yh@ze z7vfi;qFW{owiOfGqcB@XkwUZ0j?Km4{qjE- z6c!Z|O1!?5l~+^}tE#*^aCo0?lZ$rLKBwT;dI+nLO(UEMvb-ad9elEWPw8Xg(t zx$y<#6T+{PQ@$ecjAT|iC%dxnP5yoH$I`OLFU5*drPiz>bidcu^@a^2v}rP3-`?4^ z?Cl>M-Z(n8ot*x$0~Z|;ku35!-qAHSQN*GM3tW8AN#VWJNrHQD+6qXfO_zB^6eFVU zOjzupAb0*`W8} zQVeE5Djt<a0+Owme6r2OGio7DoTWqkhGKj0`0*1-*<$#uL5YH*kC8Z>wpCvYO~asp;G r-~A;>$wp)vkltB=c_?k6Zw*FUgrbAm;sB08O9+}m=}H3OFd*zN8L+JA literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif new file mode 100644 index 0000000000000000000000000000000000000000..43a735f22c81d6d7d99c1ba9f034f38bfdd1a92b GIT binary patch literal 92 zcmZ?wbhEHb&D4o4FLHO9PR)B literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css new file mode 100644 index 0000000..5e6fd7d --- /dev/null +++ b/lib/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)} \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm new file mode 100644 index 0000000..f9ec642 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm @@ -0,0 +1,387 @@ + + + +Template for dialogs + + + + +
    +
    +
    +
    +
    +
    +
    + Blured +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Focused +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Statusbar +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Statusbar, Resizable +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Resizable, Maximizable +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Blurred, Maximizable, Statusbar, Resizable +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Maximized, Maximizable, Minimizable +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Blured +
    + +
    +
    + Content +
    +
    + +
    +
    +
    +
    + Statusbar text. +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Alert +
    + +
    +
    + + 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. + +
    +
    +
    + +
    +
    +
    +
    +
    + + + Ok + +
    +
    + +
    +
    +
    +
    +
    +
    + Confirm +
    + +
    +
    + + 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. + +
    +
    +
    + +
    +
    +
    +
    +
    + + + Ok + Cancel + +
    +
    +
    + + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js new file mode 100644 index 0000000..938ce6b --- /dev/null +++ b/lib/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-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;fg[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js new file mode 100644 index 0000000..d5aa865 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js @@ -0,0 +1,212 @@ +/** + * 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.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() { + if (tinymce.isIE) + ed.getDoc().execCommand('2D-Position', false, true); + }); + + 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|static)$/i.test(e.style.position)) { + if (s) + dom.addClass(e, 'mceItemVisualAid'); + else + dom.removeClass(e, 'mceItemVisualAid'); + } + }); + }, + + _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 -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[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, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*')); + + ed.dom.add(ed.getBody(), 'div', { + style : { + position : 'absolute', + left : p.x, + top : (p.y > 20 ? p.y : 20), + width : 100, + height : 100 + }, + 'class' : 'mceItemVisualAid' + }, ed.selection.getContent() || ed.getLang('layer.content')); + }, + + _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'); + } 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.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/lib/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js new file mode 100644 index 0000000..29d43c5 --- /dev/null +++ b/lib/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.serializer;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:"full"}},bold:{inline:"b"},italic:{inline:"i"},underline:{inline:"u"},strikethrough:{inline:"strike"},fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});d._setup();a.each("b,i,u,strike".split(","),function(f){var g=d.rules[f];if(!g){d.addRules(f)}});if(!d.rules.font){d.addRules("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.rules[f],g;if(h){a.each(h.attribs,function(j,i){if(i.name=="align"){g=true;return false}});if(!g){h.attribs.push({name:"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/lib/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js new file mode 100644 index 0000000..e852da1 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js @@ -0,0 +1,136 @@ +/** + * 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), + serializer = editor.serializer; + + // 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 : 'full'}}, + + // Change the basic formatting elements to use deprecated element types + bold : {inline : 'b'}, + italic : {inline : 'i'}, + underline : {inline : 'u'}, + strikethrough : {inline : 'strike'}, + + // Change font size and font family to use the deprecated font element + fontname : {inline : 'font', attributes : {face : '%value'}}, + fontsize : { + inline : 'font', + attributes : { + size : function(vars) { + return tinymce.inArray(fontSizes, vars.value) + 1; + } + } + }, + + // Setup font elements for colors as well + forecolor : {inline : 'font', styles : {color : '%value'}}, + hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} + }); + + // Force parsing of the serializer rules + serializer._setup(); + + // Check that deprecated elements are allowed if not add them + tinymce.each('b,i,u,strike'.split(','), function(name) { + var rule = serializer.rules[name]; + + if (!rule) + serializer.addRules(name); + }); + + // Add font element if it's missing + if (!serializer.rules["font"]) + serializer.addRules("font[face|size|color|style]"); + + // Add the missing and depreacted align attribute for the serialization engine + tinymce.each(alignElements.split(','), function(name) { + var rule = serializer.rules[name], found; + + if (rule) { + tinymce.each(rule.attribs, function(name, attr) { + if (attr.name == 'align') { + found = true; + return false; + } + }); + + if (!found) + rule.attribs.push({name : '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); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/css/content.css b/lib/tinymce/jscripts/tiny_mce/plugins/media/css/content.css new file mode 100644 index 0000000..1bf6a75 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/media/css/content.css @@ -0,0 +1,6 @@ +.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {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);} diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/css/media.css b/lib/tinymce/jscripts/tiny_mce/plugins/media/css/media.css new file mode 100644 index 0000000..2d08794 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/media/css/media.css @@ -0,0 +1,16 @@ +#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 { width: 240px } +#width, #height { width: 40px } +#src, #media_type { width: 250px } +#class { width: 120px } +#prev { margin: 0; border: 1px solid black; width: 380px; height: 230px; overflow: auto } +.panel_wrapper div.current { height: 390px; 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 } diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js new file mode 100644 index 0000000..4bbe367 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.MediaPlugin",{init:function(b,c){var e=this;e.editor=b;e.url=c;function f(g){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(g.className)}b.onPreInit.add(function(){b.serializer.addRules("param[name|value|_mce_value]")});b.addCommand("mceMedia",function(){b.windowManager.open({file:c+"/media.htm",width:430+parseInt(b.getLang("media.delta_width",0)),height:470+parseInt(b.getLang("media.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("media",{title:"media.desc",cmd:"mceMedia"});b.onNodeChange.add(function(h,g,i){g.setActive("media",i.nodeName=="IMG"&&f(i))});b.onInit.add(function(){var g={mceItemFlash:"flash",mceItemShockWave:"shockwave",mceItemWindowsMedia:"windowsmedia",mceItemQuickTime:"quicktime",mceItemRealMedia:"realmedia"};b.selection.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.selection.onBeforeSetContent.add(e._objectsToSpans,e);if(b.settings.content_css!==false){b.dom.loadCSS(c+"/css/content.css")}if(b.theme&&b.theme.onResolveName){b.theme.onResolveName.add(function(h,i){if(i.name=="img"){a(g,function(l,j){if(b.dom.hasClass(i.node,j)){i.name=l;i.title=b.dom.getAttrib(i.node,"title");return false}})}})}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(i,h,j){if(j.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(j.className)){h.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});b.onBeforeSetContent.add(e._objectsToSpans,e);b.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.onPreProcess.add(function(g,i){var h=g.dom;if(i.set){e._spansToImgs(i.node);a(h.select("IMG",i.node),function(k){var j;if(f(k)){j=e._parse(k.title);h.setAttrib(k,"width",h.getAttrib(k,"width",j.width||100));h.setAttrib(k,"height",h.getAttrib(k,"height",j.height||100))}})}if(i.get){a(h.select("IMG",i.node),function(m){var l,j,k;if(g.getParam("media_use_script")){if(f(m)){m.className=m.className.replace(/mceItem/g,"mceTemp")}return}switch(m.className){case"mceItemFlash":l="d27cdb6e-ae6d-11cf-96b8-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="application/x-shockwave-flash";break;case"mceItemShockWave":l="166b1bca-3f9c-11cf-8075-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0";k="application/x-director";break;case"mceItemWindowsMedia":l=g.getParam("media_wmp6_compatible")?"05589fa1-c356-11ce-bf01-00aa0055595a":"6bf52a52-394a-11d3-b153-00c04f79faa6";j="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701";k="application/x-mplayer2";break;case"mceItemQuickTime":l="02bf25d5-8c17-4b23-bc80-d3488abddc6b";j="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0";k="video/quicktime";break;case"mceItemRealMedia":l="cfcdaa03-8be4-11cf-b84b-0020afbbccfa";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="audio/x-pn-realaudio-plugin";break}if(l){h.replace(e._buildObj({classid:l,codebase:j,type:k},m),m)}})}});b.onPostProcess.add(function(g,h){h.content=h.content.replace(/_mce_value=/g,"value=")});function d(g,h){h=new RegExp(h+'="([^"]+)"',"g").exec(g);return h?b.dom.decode(h[1]):""}b.onPostProcess.add(function(g,h){if(g.getParam("media_use_script")){h.content=h.content.replace(/]+>/g,function(j){var i=d(j,"class");if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(i)){at=e._parse(d(j,"title"));at.width=d(j,"width");at.height=d(j,"height");j=''; + } + + return im; + }); + } + }); + }, + + 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 + }; + }, + + // Private methods + _objectsToSpans : function(ed, o) { + var t = this, h = o.content; + + h = h.replace(/]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) { + var o = t._parse(c); + + return '' + }); + + h = h.replace(/]*)>/gi, ''); + h = h.replace(/]*)\/?>/gi, ''); + h = h.replace(/]*)>/gi, ''); + h = h.replace(/<\/(object)([^>]*)>/gi, ''); + h = h.replace(/<\/embed>/gi, ''); + h = h.replace(/]*)>/gi, function(a, b) {return ''}); + h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam">'); + + o.content = h; + }, + + _buildObj : function(o, n) { + var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title), stc; + + stc = ed.getParam('media_strict', true) && o.type == 'application/x-shockwave-flash'; + + p.width = o.width = dom.getAttrib(n, 'width') || 100; + p.height = o.height = dom.getAttrib(n, 'height') || 100; + + if (p.src) + p.src = ed.convertURL(p.src, 'src', n); + + if (stc) { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + type : 'application/x-shockwave-flash', + data : p.src, + style : dom.getAttrib(n, 'style'), + width : o.width, + height : o.height + }); + } else { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + classid : "clsid:" + o.classid, + style : dom.getAttrib(n, 'style'), + codebase : o.codebase, + width : o.width, + height : o.height + }); + } + + each (p, function(v, k) { + if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) { + // Use url instead of src in IE for Windows media + if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url) + k = 'url'; + + if (v) + dom.add(ob, 'span', {_mce_name : 'param', name : k, '_mce_value' : v}); + } + }); + + if (!stc) + dom.add(ob, 'span', tinymce.extend({_mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p)); + + return ob; + }, + + _spansToImgs : function(p) { + var t = this, dom = t.editor.dom, im, ci; + + each(dom.select('span', p), function(n) { + // Convert object into image + if (dom.getAttrib(n, 'class') == 'mceItemObject') { + ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, ''); + + switch (ci) { + case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'clsid:166b1bca-3f9c-11cf-8075-444553540000': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6': + case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95': + case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + + return; + } + + // Convert embed into image + if (dom.getAttrib(n, 'class') == 'mceItemEmbed') { + switch (dom.getAttrib(n, 'type')) { + case 'application/x-shockwave-flash': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'application/x-director': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'application/x-mplayer2': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'video/quicktime': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'audio/x-pn-realaudio-plugin': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + } + }); + }, + + _createImg : function(cl, n) { + var im, dom = this.editor.dom, pa = {}, ti = '', args; + + args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality', 'data']; + + // Create image + im = dom.create('img', { + src : this.url + '/img/trans.gif', + width : dom.getAttrib(n, 'width') || 100, + height : dom.getAttrib(n, 'height') || 100, + style : dom.getAttrib(n, 'style'), + 'class' : cl + }); + + // Setup base parameters + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v) + pa[na] = v; + }); + + // Add optional parameters + each(dom.select('span', n), function(n) { + if (dom.hasClass(n, 'mceItemParam')) + pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_mce_value'); + }); + + // Use src not movie + if (pa.movie) { + pa.src = pa.movie; + delete pa.movie; + } + + // No src try data + if (!pa.src) { + pa.src = pa.data; + delete pa.data; + } + + // Merge with embed args + n = dom.select('.mceItemEmbed', n)[0]; + if (n) { + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v && !pa[na]) + pa[na] = v; + }); + } + + delete pa.width; + delete pa.height; + + im.title = this._serialize(pa); + + return im; + }, + + _parse : function(s) { + return tinymce.util.JSON.parse('{' + s + '}'); + }, + + _serialize : function(o) { + return tinymce.util.JSON.serialize(o).replace(/[{}]/g, ''); + } + }); + + // Register plugin + tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif b/lib/tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb192e6ceda8d19ad8e7d08dd1cfde0aa72ead2a GIT binary patch literal 241 zcmVOzlLa+Za}7>m0&NpCfJ0FQc3~F7DE)S%o1)Qi1n@vxX46qnD4hRS-NE*Pw!4UvE=#^N( literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf b/lib/tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf new file mode 100644 index 0000000000000000000000000000000000000000..042c2ab969e98a6fdbe08848c4a73bd2c41de906 GIT binary patch literal 11668 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 literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif b/lib/tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b0499145b16138249f653a1a3f2c80230fb292c GIT binary patch literal 303 zcmV+~0nq+ONk%w1VGsZi0K^{vH>m7Qv+~s9^fsC5ZpZP=*zu3F=Jxpf8k_5u%JNv6 z=md-84VLU4w)kSE=yI&-yw>b=v+SqE?+kq47pC+YrR?bJ^yu>Zyvpn;hTp*6^mM!O zu+8$^=JX7bb<~J01ZTA{q@86#&8&6~H`Ss{{?p%K!-p%L6P2TpFYz90?pD06UU# BbnE~C literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif b/lib/tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdfe0b9ac05869ae845fdd828eaad97cc0c69dbc GIT binary patch literal 439 zcmV;o0Z9HwNk%w1VI=?(0K^{vQcz8xz}f&njBB06v9GQ`Jv%NdDHCI&z`wqZw$(Lw zuFTBL!Pe#<92tv>h)9OE1Xh}vnVEHSaeb-GByg#tqM_B*)YRkdSdqTuipLaF8n=^^LJP4|1^gGRdo_Rl+a*grZQ1hw@Zo1ikN$oB{QbRq&z?QIckdq1aE3;Fq_(WV>Kc7gjQtQh+9OrtFhn-)LUqD<|MOIl_!(Ed#pPRE;S)g;ew3>pd zn`Wa(lc2DGa)peFw3f88dp-|`@*)AXj;@(8hwDr|7Sxsp;&YxjN*Y{PBB!TIU|!b7Zgv0OaG5)&Kwi literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif b/lib/tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif b/lib/tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab50f2d887a0843b116ef598e5a005e5601d18d0 GIT binary patch literal 415 zcmV;Q0bu?|Nk%w1VGjTg0M$PL`E^qkEu+z?1&N?x_*pRg{rx~kg!#|I<>uyug^O^t z0hZGrt*x!>$1C!zn`W5@`ts6_uMW)2%<0NUEKIo?SIPPE=}U0}7Z(?JcX!y=*;bF< zCWz-=h7+2ao9)(dOHM;+X=xs9)%!~xc&ICMZdRYdUQ2$^@9y(6X3NCIz{cM7f^Z=Q z1_tQ95kgl8b%R%OiYTIo7LSdE^@}A^8LW002J#EC2ui01p5U000KOz@O0K01zUifeIyT9%!RzMDgehG|mwLz+Eh; z7Z~iE zrX?OfJ^>XeDJK)xJuWOB3_l1N0Ra>g4Gk^=ED0V6LI?>4;Q|6OB{LplLMRLg8U5-E J?0y6R06W6!pgRBn literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js b/lib/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/lib/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 += ''; + + h += ''); + +function init() { + var pl = "", f, val; + var type = "flash", fe, i; + + ed = tinyMCEPopup.editor; + + tinyMCEPopup.resizeToInnerSize(); + f = document.forms[0] + + fe = ed.selection.getNode(); + if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + pl = fe.title; + + switch (ed.dom.getAttrib(fe, 'class')) { + case 'mceItemFlash': + type = 'flash'; + break; + + case 'mceItemFlashVideo': + type = 'flv'; + break; + + case 'mceItemShockWave': + type = 'shockwave'; + break; + + case 'mceItemWindowsMedia': + type = 'wmp'; + break; + + case 'mceItemQuickTime': + type = 'qt'; + break; + + case 'mceItemRealMedia': + type = 'rmp'; + break; + } + + document.forms[0].insert.value = ed.getLang('update', 'Insert', true); + } + + document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); + document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var html = getMediaListHTML('medialist','src','media','media'); + if (html == "") + document.getElementById("linklistrow").style.display = 'none'; + else + document.getElementById("linklistcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('filebrowser')) + document.getElementById('src').style.width = '230px'; + + // Setup form + if (pl != "") { + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + switch (type) { + case "flash": + setBool(pl, 'flash', 'play'); + setBool(pl, 'flash', 'loop'); + setBool(pl, 'flash', 'menu'); + setBool(pl, 'flash', 'swliveconnect'); + setStr(pl, 'flash', 'quality'); + setStr(pl, 'flash', 'scale'); + setStr(pl, 'flash', 'salign'); + setStr(pl, 'flash', 'wmode'); + setStr(pl, 'flash', 'base'); + setStr(pl, 'flash', 'flashvars'); + break; + + case "qt": + setBool(pl, 'qt', 'loop'); + setBool(pl, 'qt', 'autoplay'); + setBool(pl, 'qt', 'cache'); + setBool(pl, 'qt', 'controller'); + setBool(pl, 'qt', 'correction'); + setBool(pl, 'qt', 'enablejavascript'); + setBool(pl, 'qt', 'kioskmode'); + setBool(pl, 'qt', 'autohref'); + setBool(pl, 'qt', 'playeveryframe'); + setBool(pl, 'qt', 'tarsetcache'); + setStr(pl, 'qt', 'scale'); + setStr(pl, 'qt', 'starttime'); + setStr(pl, 'qt', 'endtime'); + setStr(pl, 'qt', 'tarset'); + setStr(pl, 'qt', 'qtsrcchokespeed'); + setStr(pl, 'qt', 'volume'); + setStr(pl, 'qt', 'qtsrc'); + break; + + case "shockwave": + setBool(pl, 'shockwave', 'sound'); + setBool(pl, 'shockwave', 'progress'); + setBool(pl, 'shockwave', 'autostart'); + setBool(pl, 'shockwave', 'swliveconnect'); + setStr(pl, 'shockwave', 'swvolume'); + setStr(pl, 'shockwave', 'swstretchstyle'); + setStr(pl, 'shockwave', 'swstretchhalign'); + setStr(pl, 'shockwave', 'swstretchvalign'); + break; + + case "wmp": + setBool(pl, 'wmp', 'autostart'); + setBool(pl, 'wmp', 'enabled'); + setBool(pl, 'wmp', 'enablecontextmenu'); + setBool(pl, 'wmp', 'fullscreen'); + setBool(pl, 'wmp', 'invokeurls'); + setBool(pl, 'wmp', 'mute'); + setBool(pl, 'wmp', 'stretchtofit'); + setBool(pl, 'wmp', 'windowlessvideo'); + setStr(pl, 'wmp', 'balance'); + setStr(pl, 'wmp', 'baseurl'); + setStr(pl, 'wmp', 'captioningid'); + setStr(pl, 'wmp', 'currentmarker'); + setStr(pl, 'wmp', 'currentposition'); + setStr(pl, 'wmp', 'defaultframe'); + setStr(pl, 'wmp', 'playcount'); + setStr(pl, 'wmp', 'rate'); + setStr(pl, 'wmp', 'uimode'); + setStr(pl, 'wmp', 'volume'); + break; + + case "rmp": + setBool(pl, 'rmp', 'autostart'); + setBool(pl, 'rmp', 'loop'); + setBool(pl, 'rmp', 'autogotourl'); + setBool(pl, 'rmp', 'center'); + setBool(pl, 'rmp', 'imagestatus'); + setBool(pl, 'rmp', 'maintainaspect'); + setBool(pl, 'rmp', 'nojava'); + setBool(pl, 'rmp', 'prefetch'); + setBool(pl, 'rmp', 'shuffle'); + setStr(pl, 'rmp', 'console'); + setStr(pl, 'rmp', 'controls'); + setStr(pl, 'rmp', 'numloop'); + setStr(pl, 'rmp', 'scriptcallbacks'); + break; + } + + setStr(pl, null, 'src'); + setStr(pl, null, 'id'); + setStr(pl, null, 'name'); + setStr(pl, null, 'vspace'); + setStr(pl, null, 'hspace'); + setStr(pl, null, 'bgcolor'); + setStr(pl, null, 'align'); + setStr(pl, null, 'width'); + setStr(pl, null, 'height'); + + if ((val = ed.dom.getAttrib(fe, "width")) != "") + pl.width = f.width.value = val; + + if ((val = ed.dom.getAttrib(fe, "height")) != "") + pl.height = f.height.value = val; + + oldWidth = pl.width ? parseInt(pl.width) : 0; + oldHeight = pl.height ? parseInt(pl.height) : 0; + } else + oldWidth = oldHeight = 0; + + selectByValue(f, 'media_type', type); + changedType(type); + updateColor('bgcolor_pick', 'bgcolor'); + + TinyMCE_EditableSelects.init(); + generatePreview(); +} + +function insertMedia() { + var fe, f = document.forms[0], h; + + tinyMCEPopup.restoreSelection(); + + if (!AutoValidator.validate(f)) { + tinyMCEPopup.alert(ed.getLang('invalid_data')); + return false; + } + + f.width.value = f.width.value == "" ? 100 : f.width.value; + f.height.value = f.height.value == "" ? 100 : f.height.value; + + fe = ed.selection.getNode(); + if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + fe.className = "mceItemFlash"; + break; + + case "flv": + fe.className = "mceItemFlashVideo"; + break; + + case "shockwave": + fe.className = "mceItemShockWave"; + break; + + case "qt": + fe.className = "mceItemQuickTime"; + break; + + case "wmp": + fe.className = "mceItemWindowsMedia"; + break; + + case "rmp": + fe.className = "mceItemRealMedia"; + break; + } + + if (fe.width != f.width.value || fe.height != f.height.value) + ed.execCommand('mceRepaint'); + + fe.title = serializeParameters(); + fe.width = f.width.value; + fe.height = f.height.value; + fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : ''); + fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : ''); + fe.align = f.align.options[f.align.selectedIndex].value; + } else { + h = ' 0) { + var html = ""; + + html += ''; + + return html; + } + + return ""; +} + +function getType(v) { + var fo, i, c, el, x, f = document.forms[0]; + + fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';'); + + // YouTube + if (v.match(/watch\?v=(.+)(.*)/)) { + f.width.value = '425'; + f.height.value = '350'; + f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1]; + return 'flash'; + } + + // Google video + if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) { + f.width.value = '425'; + f.height.value = '326'; + f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en'; + return 'flash'; + } + + for (i=0; i 0 ? s.substring(0, s.length - 1) : s; + + return s; +} + +function setBool(pl, p, n) { + if (typeof(pl[n]) == "undefined") + return; + + document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false'; +} + +function setStr(pl, p, n) { + var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n]; + + if (typeof(pl[n]) == "undefined") + return; + + if (e.type == "text") + e.value = pl[n]; + else + selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]); +} + +function getBool(p, n, d, tv, fv) { + var v = document.forms[0].elements[p + "_" + n].checked; + + tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; + fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; + + return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',"); +} + +function getStr(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + if (n == 'src') + v = tinyMCEPopup.editor.convertURL(v, 'src', null); + + return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',"); +} + +function getInt(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ","); +} + +function jsEncode(s) { + s = s.replace(new RegExp('\\\\', 'g'), '\\\\'); + s = s.replace(new RegExp('"', 'g'), '\\"'); + s = s.replace(new RegExp("'", 'g'), "\\'"); + + return s; +} + +function generatePreview(c) { + var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh; + + p.innerHTML = ''; + + nw = parseInt(f.width.value); + nh = parseInt(f.height.value); + + if (f.width.value != "" && f.height.value != "") { + if (f.constrain.checked) { + if (c == 'width' && oldWidth != 0) { + wp = nw / oldWidth; + nh = Math.round(wp * nh); + f.height.value = nh; + } else if (c == 'height' && oldHeight != 0) { + hp = nh / oldHeight; + nw = Math.round(hp * nw); + f.width.value = nw; + } + } + } + + if (f.width.value != "") + oldWidth = nw; + + if (f.height.value != "") + oldHeight = nh; + + // After constrain + pl = serializeParameters(); + + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; + type = 'application/x-shockwave-flash'; + break; + + case "shockwave": + cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; + type = 'application/x-director'; + break; + + case "qt": + cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; + codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; + type = 'video/quicktime'; + break; + + case "wmp": + cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'application/x-mplayer2'; + break; + + case "rmp": + cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'audio/x-pn-realaudio-plugin'; + break; + } + + if (pl == '') { + p.innerHTML = ''; + return; + } + + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + if (!pl.src) { + p.innerHTML = ''; + return; + } + + pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src); + pl.width = !pl.width ? 100 : pl.width; + pl.height = !pl.height ? 100 : pl.height; + pl.id = !pl.id ? 'obj' : pl.id; + pl.name = !pl.name ? 'eobj' : pl.name; + pl.align = !pl.align ? '' : pl.align; + + // Avoid annoying warning about insecure items + if (!tinymce.isIE || document.location.protocol != 'https:') { + h += ''; + + for (n in pl) { + h += ''; + + // Add extra url parameter if it's an absolute URL + if (n == 'src' && pl[n].indexOf('://') != -1) + h += ''; + } + } + + h += ' + + + {#media_dlg.title} + + + + + + + + + +
    + + +
    +
    +
    + {#media_dlg.general} + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + +
     
    +
    + + + + + + +
    x   
    +
    +
    + +
    + {#media_dlg.preview} + +
    +
    + +
    +
    + {#media_dlg.advanced} + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + +
     
    +
    +
    + +
    + {#media_dlg.flash_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + + + + + + + +
    +
    + +
    + {#media_dlg.flv_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    +
    + +
    + {#media_dlg.qt_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    +  
    + + + + + +
     
    +
    +
    + +
    + {#media_dlg.wmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    +
    + +
    + {#media_dlg.rmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    +   +
    +
    + +
    + {#media_dlg.shockwave_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    +
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js new file mode 100644 index 0000000..eb40a6a --- /dev/null +++ b/lib/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)?' ':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js new file mode 100644 index 0000000..ca83ee2 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/nonbreaking/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.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) ? ' ' : ' '); + }); + + // Register buttons + ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'}); + + if (ed.getParam('nonbreaking_force_tab')) { + ed.onKeyDown.add(function(ed, e) { + if (tinymce.isIE && e.keyCode == 9) { + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + tinymce.dom.Event.cancel(e); + } + }); + } + }, + + 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/lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js new file mode 100644 index 0000000..9945cd8 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js new file mode 100644 index 0000000..656c971 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js @@ -0,0 +1,90 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var Event = tinymce.dom.Event; + + tinymce.create('tinymce.plugins.NonEditablePlugin', { + init : function(ed, url) { + var t = this, editClass, nonEditClass; + + t.editor = ed; + editClass = ed.getParam("noneditable_editable_class", "mceEditable"); + nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable"); + + ed.onNodeChange.addToTop(function(ed, cm, n) { + var sc, ec; + + // Block if start or end is inside a non editable element + sc = ed.dom.getParent(ed.selection.getStart(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + ec = ed.dom.getParent(ed.selection.getEnd(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + // Block or unblock + if (sc || ec) { + t._setDisabled(1); + return false; + } else + t._setDisabled(0); + }); + }, + + getInfo : function() { + return { + longname : 'Non editable elements', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + _block : function(ed, e) { + var k = e.keyCode; + + // Don't block arrow keys, pg up/down, and F1-F12 + if ((k > 32 && k < 41) || (k > 111 && k < 124)) + return; + + return Event.cancel(e); + }, + + _setDisabled : function(s) { + var t = this, ed = t.editor; + + tinymce.each(ed.controlManager.controls, function(c) { + c.setDisabled(s); + }); + + if (s !== t.disabled) { + if (s) { + ed.onKeyDown.addToTop(t._block); + ed.onKeyPress.addToTop(t._block); + ed.onKeyUp.addToTop(t._block); + ed.onPaste.addToTop(t._block); + } else { + ed.onKeyDown.remove(t._block); + ed.onKeyPress.remove(t._block); + ed.onKeyUp.remove(t._block); + ed.onPaste.remove(t._block); + } + + t.disabled = s; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css new file mode 100644 index 0000000..c949d58 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css @@ -0,0 +1 @@ +.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/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js new file mode 100644 index 0000000..a212f69 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='',a="mcePageBreak",c=b.getParam("pagebreak_separator",""),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.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}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(/]+>/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/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js new file mode 100644 index 0000000..4e1eb0a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js @@ -0,0 +1,77 @@ +/** + * 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 = '', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', ''), 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.settings.content_css !== false) + ed.dom.loadCSS(url + "/css/content.css"); + + 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(/]+>/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/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif new file mode 100644 index 0000000000000000000000000000000000000000..acdf4085f3068c4c0a1d6855f4b80dae8bac3068 GIT binary patch literal 325 zcmV-L0lNN2Nk%w1VPpUd0J9GO`>v<{=;ru;boX6P{`2zsmyZ3>&HK5t_;hIbi-G;z z+4`cI{KdfcXj}GCLjV8&A^8LW000jFEC2ui0Av6R000E?@X1N5y*TU5yZ>M)j$|1M z4Ouvb$pHu>IW8BZq|n;U0s@T!VM5~w1_+1X!EiVl!&PITYdjT!ffYfpt{jAfv%qvh zA63WUHSlr7LkeyaV4(pM0f50(II?RD4RtMg4-E+tFhdAy5{3c=0}3Bg9Y8`B2To20 zR%SO62L%9}0H+dzoKB$+2TOwzUrwi{XiBM^4V#>63q3!LsU3u93zH8CdwqY%62;1g z0g8ze$k93lWExp`CUe|K4qOWk17ZeJ0|5pDP6+}};{>bI@lOWj=kf}r2sHp7w9-Ie XK%9UG6W(*AX-vY05F<*&5CH%?Gwy&_ literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif b/lib/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js new file mode 100644 index 0000000..3785ab2 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.each,d=null,a={paste_auto_cleanup_on_paste:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(e,f){return e.getParam(f,a[f])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(e,f){var g=this;g.editor=e;g.url=f;g.onPreProcess=new tinymce.util.Dispatcher(g);g.onPostProcess=new tinymce.util.Dispatcher(g);g.onPreProcess.add(g._preProcess);g.onPostProcess.add(g._postProcess);g.onPreProcess.add(function(j,k){e.execCallback("paste_preprocess",j,k)});g.onPostProcess.add(function(j,k){e.execCallback("paste_postprocess",j,k)});e.pasteAsPlainText=false;function i(l,j){var k=e.dom;g.onPreProcess.dispatch(g,l);l.node=k.create("div",0,l.content);g.onPostProcess.dispatch(g,l);l.content=e.serializer.serialize(l.node,{getInner:1});if((!j)&&(e.pasteAsPlainText)){g._insertPlainText(e,k,l.content);if(!b(e,"paste_text_sticky")){e.pasteAsPlainText=false;e.controlManager.setActive("pastetext",false)}}else{if(/<(p|h[1-6]|ul|ol)/.test(l.content)){g._insertBlockContent(e,k,l.content)}else{g._insert(l.content)}}}e.addCommand("mceInsertClipboardContent",function(j,k){i(k,true)});if(!b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(k,j){var l=tinymce.util.Cookie;e.pasteAsPlainText=!e.pasteAsPlainText;e.controlManager.setActive("pastetext",e.pasteAsPlainText);if((e.pasteAsPlainText)&&(!l.get("tinymcePasteText"))){if(b(e,"paste_text_sticky")){e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}else{e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}if(!b(e,"paste_text_notifyalways")){l.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}e.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});e.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function h(s){var m,q,k,l=e.selection,p=e.dom,r=e.getBody(),j;if(e.pasteAsPlainText&&(s.clipboardData||p.doc.dataTransfer)){s.preventDefault();i({content:(s.clipboardData||p.doc.dataTransfer).getData("Text")},true);return}if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},'\uFEFF
    ');if(r!=e.getDoc().body){j=p.getPos(e.selection.getStart(),r).y}else{j=r.scrollTop}p.setStyles(m,{position:"absolute",left:-10000,top:j,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){k=p.doc.body.createTextRange();k.moveToElementText(m);k.execCommand("Paste");p.remove(m);if(m.innerHTML==="\uFEFF"){e.execCommand("mcePasteWord");s.preventDefault();return}i({content:m.innerHTML});return tinymce.dom.Event.cancel(s)}else{function o(n){n.preventDefault()}p.bind(e.getDoc(),"mousedown",o);p.bind(e.getDoc(),"keydown",o);q=e.selection.getRng();m=m.firstChild;k=e.getDoc().createRange();k.setStart(m,0);k.setEnd(m,1);l.setRng(k);window.setTimeout(function(){var t="",n=p.select("div.mcePaste");c(n,function(v){var u=v.firstChild;if(u&&u.nodeName=="DIV"&&u.style.marginTop&&u.style.backgroundColor){p.remove(u,1)}c(p.select("div.mcePaste",v),function(w){p.remove(w,1)});c(p.select("span.Apple-style-span",v),function(w){p.remove(w,1)});c(p.select("br[_mce_bogus]",v),function(w){p.remove(w)});t+=v.innerHTML});c(n,function(u){p.remove(u)});if(q){l.setRng(q)}i({content:t});p.unbind(e.getDoc(),"mousedown",o);p.unbind(e.getDoc(),"keydown",o)},0)}}if(b(e,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){e.onKeyDown.add(function(j,k){if(((tinymce.isMac?k.metaKey:k.ctrlKey)&&k.keyCode==86)||(k.shiftKey&&k.keyCode==45)){h(k)}})}else{e.onPaste.addToTop(function(j,k){return h(k)})}}if(b(e,"paste_block_drop")){e.onInit.add(function(){e.dom.bind(e.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(j){j.preventDefault();j.stopPropagation();return false})})}g._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(i,f){var l=this.editor,k=f.content,q=tinymce.grep,p=tinymce.explode,g=tinymce.trim,m,j;function e(h){c(h,function(o){if(o.constructor==RegExp){k=k.replace(o,"")}else{k=k.replace(o[0],o[1])}})}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(k)||f.wordContent){f.wordContent=true;e([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(l,"paste_convert_headers_to_strong")){k=k.replace(/

    ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

    $1

    ")}if(b(l,"paste_convert_middot_lists")){e([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"]])}e([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{m=k.length;k=k.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(m!=k.length);if(b(l,"paste_retain_style_properties").replace(/^none$/i,"").length==0){k=k.replace(/<\/?span[^>]*>/gi,"")}else{e([[/([\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(u,h,t){var v=[],o=0,r=p(g(t).replace(/"/gi,"'"),";");c(r,function(s){var w,y,z=p(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":v[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":v[o++]="text-align:"+y;return;case"vert-align":v[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":v[o++]="color:"+y;return;case"mso-background":case"mso-highlight":v[o++]="background:"+y;return;case"mso-default-height":v[o++]="min-height:"+x(y);return;case"mso-default-width":v[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":v[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){v[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){v[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}v[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+v.join(";")+'"'}else{return h}}]])}}if(b(l,"paste_convert_headers_to_strong")){e([[/]*>/gi,"

    "],[/<\/h[1-6][^>]*>/gi,"

    "]])}j=b(l,"paste_strip_class_attributes");if(j!=="none"){function n(r,o){if(j==="all"){return""}var h=q(p(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(s){return(/^(?!mso)/i.test(s))});return h.length?' class="'+h.join(" ")+'"':""}k=k.replace(/ class="([^"]+)"/gi,n);k=k.replace(/ class=(\w+)/gi,n)}if(b(l,"paste_remove_spans")){k=k.replace(/<\/?span[^>]*>/gi,"")}f.content=k},_postProcess:function(h,j){var g=this,f=g.editor,i=f.dom,e;if(j.wordContent){c(i.select("a",j.node),function(k){if(!k.href||k.href.indexOf("#_Toc")!=-1){i.remove(k,1)}});if(b(f,"paste_convert_middot_lists")){g._convertLists(h,j)}e=b(f,"paste_retain_style_properties");if((tinymce.is(e,"string"))&&(e!=="all")&&(e!=="*")){e=tinymce.explode(e.replace(/^none$/i,""));c(i.select("*",j.node),function(n){var o={},l=0,m,p,k;if(e){for(m=0;m0){i.setStyles(n,o)}else{if(n.nodeName=="SPAN"&&!n.className){i.remove(n,true)}}})}}if(b(f,"paste_remove_styles")||(b(f,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(i.select("*[style]",j.node),function(k){k.removeAttribute("style");k.removeAttribute("_mce_style")})}else{if(tinymce.isWebKit){c(i.select("*",j.node),function(k){k.removeAttribute("_mce_style")})}}},_convertLists:function(h,f){var j=h.editor.dom,i,m,e=-1,g,n=[],l,k;c(j.select("p",f.node),function(u){var r,v="",t,s,o,q;for(r=u.firstChild;r&&r.nodeType==3;r=r.nextSibling){v+=r.nodeValue}v=u.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(v)){t="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(v)){t="ol"}if(t){g=parseFloat(u.style.marginLeft||0);if(g>e){n.push(g)}if(!i||t!=l){i=j.create(t);j.insertAfter(i,u)}else{if(g>e){i=m.appendChild(j.create(t))}else{if(g]*>/gi,"");if(t=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){j.remove(w)}else{if(/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){j.remove(w)}}});s=u.innerHTML;if(t=="ul"){s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/,"")}else{s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}m=i.appendChild(j.create("li",0,s));j.remove(u);e=g;l=t}else{i=e=0}});k=f.node.innerHTML;if(k.indexOf("__MCE_ITEM__")!=-1){f.node.innerHTML=k.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(l,h,m){var f,j,g=l.selection,q,n,e,o,i,k="mce_marker";function p(t){var s;if(tinymce.isIE){s=l.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(false);s.select()}else{g.select(t,1);g.collapse(false)}}this._insert('',1);j=h.get(k);f=h.getParent(j,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(f&&!/TD|TH/.test(f.nodeName)){j=h.split(f,j);c(h.create("div",0,m).childNodes,function(r){q=j.parentNode.insertBefore(r.cloneNode(true),j)});p(q)}else{h.setOuterHTML(j,m);g.select(l.getBody(),1);g.collapse(0)}while(n=h.get(k)){h.remove(n)}n=g.getStart();e=h.getViewPort(l.getWin());o=l.dom.getPos(n).y;i=n.clientHeight;if(oe.y+e.h){l.getDoc().body.scrollTop=o0)){if(!d){d=("34,quot,38,amp,39,apos,60,lt,62,gt,"+j.serializer.settings.entities).split(",")}if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/&(#\d+|[a-z0-9]{1,10});/gi,function(i,h){if(h.charAt(0)==="#"){return String.fromCharCode(h.slice(1))}else{return((i=y(d,h))>0)?String.fromCharCode(d[i-1]):" "}}],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.encode(v);if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"
    "]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"

    "],[/\n/g,"
    "]])}}if((l=v.indexOf("

    "))!=-1){k=v.lastIndexOf("

    ");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+' ');window.setTimeout(function(){var h=x.get("_plain_text_marker"),B,i,A,w;s.select(h,false);z.execCommand("Delete",false,null);h=null;B=s.getStart();i=x.getViewPort(n);A=x.getPos(B).y;w=B.clientHeight;if((Ai.y+i.h)){z.body.scrollTop=A

    ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

    $1

    "); + } + + if (getParam(ed, "paste_convert_middot_lists")) { + process([ + [//gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker + [/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol spans to item markers + ]); + } + + process([ + // Word comments like conditional comments etc + //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 into for line-though + [/<(\/?)s>/gi, "<$1strike>"], + + // Replace nsbp entites to char since it's easier to handle + [/ /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 ___ to string of alternating breaking/non-breaking spaces of same length + [/([\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(/"/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 + if (getParam(ed, "paste_convert_headers_to_strong")) { + process([ + [/]*>/gi, "

    "], + [/<\/h[1-6][^>]*>/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 (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('_mce_style'); + }); + } else { + if (tinymce.isWebKit) { + // We need to compress the styles on WebKit since if you paste it will become + // 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('_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(/ /g, '\u00a0'); + + // Detect unordered lists look for bullets + if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val)) + type = 'ul'; + + // Detect ordered lists 1., a. or ixv. + if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(val)) + type = 'ol'; + + // Check if node value matches the list pattern: o   + 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' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html)) + dom.remove(span); + else if (/^[\s\S]*\w+\.( |\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]\s*( |\u00a0)+\s*/, ''); + else + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\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, ''); + }, + + /** + * This method will split the current block parent and insert the contents inside the split position. + * This logic can be improved so text nodes at the start/end remain in the start/end block elements + */ + _insertBlockContent : function(ed, dom, content) { + var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker'; + + function select(n) { + var r; + + if (tinymce.isIE) { + r = ed.getDoc().body.createTextRange(); + r.moveToElementText(n); + r.collapse(false); + r.select(); + } else { + sel.select(n, 1); + sel.collapse(false); + } + } + + // Insert a marker for the caret position + this._insert('', 1); + marker = dom.get(markerId); + parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td'); + + // If it's a parent block but not a table cell + if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) { + // Split parent block + marker = dom.split(parentBlock, marker); + + // Insert nodes before the marker + each(dom.create('div', 0, content).childNodes, function(n) { + last = marker.parentNode.insertBefore(n.cloneNode(true), marker); + }); + + // Move caret after marker + select(last); + } else { + dom.setOuterHTML(marker, content); + sel.select(ed.getBody(), 1); + sel.collapse(0); + } + + // Remove marker if it's left + while (elm = dom.get(markerId)) + dom.remove(elm); + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(ed.getWin()); + y = ed.dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if (y < vp.y || y + elmHeight > vp.y + vp.h) + ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25; + }, + + /** + * 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); + + // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents + ed.execCommand(tinymce.isGecko ? 'insertHTML' : '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(ed, dom, h) { + var i, len, pos, rpos, node, breakElms, before, after, + w = ed.getWin(), + d = ed.getDoc(), + sel = ed.selection, + is = tinymce.is, + inArray = tinymce.inArray, + linebr = getParam(ed, "paste_text_linebreaktype"), + rl = getParam(ed, "paste_text_replacements"); + + function process(items) { + each(items, function(v) { + if (v.constructor == RegExp) + h = h.replace(v, ""); + else + h = h.replace(v[0], v[1]); + }); + }; + + if ((typeof(h) === "string") && (h.length > 0)) { + if (!entities) + entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(","); + + // 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(h)) { + 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 + [/]*>|<\/tr>/gi, "\n"], // Single linebreak for
    tags and table rows + [/<\/t[dh]>\s*]*>/gi, "\t"], // Table cells get tabs betweem them + /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags + [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*) + [ + // HTML entity + /&(#\d+|[a-z0-9]{1,10});/gi, + + // Replace with actual character + function(e, s) { + if (s.charAt(0) === "#") { + return String.fromCharCode(s.slice(1)); + } + else { + return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " "; + } + } + ], + [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars. + [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks + /^\s+|\s+$/g // Trim the front & back + ]); + + h = dom.encode(h); + + // Delete any highlighted text before pasting + if (!sel.isCollapsed()) { + d.execCommand("Delete", false, null); + } + + // Perform default or custom replacements + if (is(rl, "array") || (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") { + process([ + [/\n+/g, " "] + ]); + } + else if (linebr == "br") { + process([ + [/\n/g, "
    "] + ]); + } + else { + process([ + /^\s+|\s+$/g, + [/\n\n/g, "

    "], + [/\n/g, "
    "] + ]); + } + + // This next piece of code handles the situation where we're pasting more than one paragraph of plain + // text, and we are pasting the content into the middle of a block node in the editor. The block + // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining). + // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the + // pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between + // "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and + // now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the + // plain text take the same style as the existing paragraph.) + if ((pos = h.indexOf("

    ")) != -1) { + rpos = h.lastIndexOf("

    "); + node = sel.getNode(); + breakElms = []; // Get list of elements to break + + do { + if (node.nodeType == 1) { + // Don't break tables and break at body + if (node.nodeName == "TD" || node.nodeName == "BODY") { + break; + } + + breakElms[breakElms.length] = node; + } + } while (node = node.parentNode); + + // Are we in the middle of a block node? + if (breakElms.length > 0) { + before = h.substring(0, pos); + after = ""; + + for (i=0, len=breakElms.length; i"; + after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">"; + } + + if (pos == rpos) { + h = before + after + h.substring(pos+7); + } + else { + h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7); + } + } + } + + // Insert content at the caret, plus add a marker for repositioning the caret + ed.execCommand("mceInsertRawHTML", false, h + ' '); + + // Reposition the caret to the marker, which was placed immediately after the inserted content. + // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers. + // The second part of the code scrolls the content up if the caret is positioned off-screen. + // This is only necessary for WebKit browsers, but it doesn't hurt to use for all. + window.setTimeout(function() { + var marker = dom.get('_plain_text_marker'), + elm, vp, y, elmHeight; + + sel.select(marker, false); + d.execCommand("Delete", false, null); + marker = null; + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(w); + y = dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) { + d.body.scrollTop = y < vp.y ? y : y - vp.h + 25; + } + }, 0); + } + }, + + /** + * 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/lib/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js b/lib/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js new file mode 100644 index 0000000..c524f9e --- /dev/null +++ b/lib/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 += '

    ' + row + '

    '; + }); + } + } + + 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/lib/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js b/lib/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js new file mode 100644 index 0000000..a52731c --- /dev/null +++ b/lib/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 = ''; + 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 += ''; + }); + + // Write content into iframe + doc.open(); + doc.write('' + cssHTML + ''); + 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/lib/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js b/lib/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js new file mode 100644 index 0000000..eeac778 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js @@ -0,0 +1,5 @@ +tinyMCE.addI18n('en.paste_dlg',{ +text_title:"Use CTRL+V on your keyboard to paste the text into the window.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V on your keyboard to paste the text into the window." +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm b/lib/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm new file mode 100644 index 0000000..b655945 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm @@ -0,0 +1,27 @@ + + + {#paste.paste_text_desc} + + + + +
    +
    {#paste.paste_text_desc}
    + +
    + +
    + +
    + +
    {#paste_dlg.text_title}
    + + + +
    + + +
    +
    + + \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm b/lib/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm new file mode 100644 index 0000000..0f6bb41 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm @@ -0,0 +1,21 @@ + + + {#paste.paste_word_desc} + + + + +
    +
    {#paste.paste_word_desc}
    + +
    {#paste_dlg.word_title}
    + +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js new file mode 100644 index 0000000..507909c --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js new file mode 100644 index 0000000..80f00f0 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/preview/example.html b/lib/tinymce/jscripts/tiny_mce/plugins/preview/example.html new file mode 100644 index 0000000..b2c3d90 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/preview/example.html @@ -0,0 +1,28 @@ + + + + + +Example of a custom preview page + + + +Editor contents:
    +
    + +
    + + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js b/lib/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/lib/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 += ''; + + h += ' + + + + + +{#preview.preview_desc} + + + + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js new file mode 100644 index 0000000..b5b3a55 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js new file mode 100644 index 0000000..3933fe6 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js new file mode 100644 index 0000000..8e93996 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js new file mode 100644 index 0000000..f5a3de8 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css new file mode 100644 index 0000000..ecdf58c --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js new file mode 100644 index 0000000..cd9c985 --- /dev/null +++ b/lib/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){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/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js new file mode 100644 index 0000000..1433a06 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/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.SearchReplacePlugin', { + init : function(ed, url) { + function open(m) { + 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/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js new file mode 100644 index 0000000..c0a6243 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js @@ -0,0 +1,130 @@ +tinyMCEPopup.requireLangPack(); + +var SearchReplaceDialog = { + init : function(ed) { + var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); + + this.switchMode(m); + + f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); + + // Focus input field + f[m + '_panel_searchstring'].focus(); + }, + + 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 (s == '') + return; + + function fix() { + // Correct Firefox graphics glitches + r = se.getRng().cloneRange(); + ed.getDoc().execCommand('SelectAll', false, null); + se.setRng(r); + }; + + function replace() { + if (tinymce.isIE) + ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE + else + ed.getDoc().execCommand('InsertHTML', false, rs); + }; + + // 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) { + 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) { + 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/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js new file mode 100644 index 0000000..370959a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js @@ -0,0 +1,16 @@ +tinyMCE.addI18n('en.searchreplace_dlg',{ +searchnext_desc:"Find again", +notfound:"The search has been completed. The search string could not be found.", +search_title:"Find", +replace_title:"Find/Replace", +allreplaced:"All occurrences of the search string were replaced.", +findwhat:"Find what", +replacewith:"Replace with", +direction:"Direction", +up:"Up", +down:"Down", +mcase:"Match case", +findnext:"Find next", +replace:"Replace", +replaceall:"Replace all" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm new file mode 100644 index 0000000..d0424cf --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm @@ -0,0 +1,99 @@ + + + + {#searchreplace_dlg.replace_title} + + + + + + + +
    + + +
    +
    + + + + + + + + + + + +
    + + + + + + + + +
    +
    + + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + +
    +
    + + + + + +
    +
    +
    + +
    + +
    + + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css b/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css new file mode 100644 index 0000000..24efa02 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js new file mode 100644 index 0000000..a9ec3b9 --- /dev/null +++ b/lib/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()}});e.onInit.add(function(){if(e.settings.content_css!==false){e.dom.loadCSS(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(){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$1$2');q=q.replace(g,'$1$2');j.replace(j.create("span",{"class":"mceItemHidden"},q),r)}}});l.moveToBookmark(m)},_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){l=b.getPos(h.getContentAreaContainer());d=h.controlManager.createDropMenu("spellcheckermenu",{offset_x:l.x,offset_y:l.y,"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});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/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js new file mode 100644 index 0000000..d8680ba --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js @@ -0,0 +1,417 @@ +/** + * 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(); + }); + + ed.onInit.add(function() { + if (ed.settings.content_css !== false) + ed.dom.loadCSS(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() { + 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$1$2'); + v = v.replace(r3, '$1$2'); + + dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n); + } + } + }); + + se.moveToBookmark(b); + }, + + _showMenu : function(ed, e) { + var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target; + + e = 0; // Fixes IE memory leak + + if (!m) { + p1 = DOM.getPos(ed.getContentAreaContainer()); + //p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('spellcheckermenu', { + offset_x : p1.x, + offset_y : p1.y, + '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); + + 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(); + }); + + 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/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif b/lib/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d0a4dbca03cc13177a359a5f175dda819fdf464 GIT binary patch literal 46 ycmZ?wbhEHbWMN=tXkcXcqowu#|9{1wEQ|~cj0`#qKmd|qU}ANVOOs?}um%7FLkRf* literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/style/css/props.css b/lib/tinymce/jscripts/tiny_mce/plugins/style/css/props.css new file mode 100644 index 0000000..eb1f264 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/style/css/props.css @@ -0,0 +1,13 @@ +#text_font {width:250px;} +#text_size {width:70px;} +.mceAddSelectValue {background:#DDD;} +select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;} +#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;} +#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;} +#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;} +.panel_wrapper div.current {padding-top:10px;height:230px;} +.delim {border-left:1px solid gray;} +.tdelim {border-bottom:1px solid gray;} +#block_display {width:145px;} +#list_type {width:115px;} +.disabled {background:#EEE;} diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js new file mode 100644 index 0000000..cab2153 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js new file mode 100644 index 0000000..5f7755f --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js @@ -0,0 +1,55 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.StylePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceStyleProps', function() { + ed.windowManager.open({ + file : url + '/props.htm', + width : 480 + parseInt(ed.getLang('style.delta_width', 0)), + height : 320 + parseInt(ed.getLang('style.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + style_text : ed.selection.getNode().style.cssText + }); + }); + + ed.addCommand('mceSetElementStyle', function(ui, v) { + if (e = ed.selection.getNode()) { + ed.dom.setAttrib(e, 'style', v); + ed.execCommand('mceRepaint'); + } + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setDisabled('styleprops', n.nodeName === 'BODY'); + }); + + // Register buttons + ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'}); + }, + + getInfo : function() { + return { + longname : 'Style', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/style/js/props.js b/lib/tinymce/jscripts/tiny_mce/plugins/style/js/props.js new file mode 100644 index 0000000..a8dd93d --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/style/js/props.js @@ -0,0 +1,641 @@ +tinyMCEPopup.requireLangPack(); + +var defaultFonts = "" + + "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Courier New, Courier, mono=Courier New, Courier, mono;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + + "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + + "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; + +var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; +var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%"; +var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; +var defaultTextStyle = "normal;italic;oblique"; +var defaultVariant = "normal;small-caps"; +var defaultLineHeight = "normal"; +var defaultAttachment = "fixed;scroll"; +var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; +var defaultPosH = "left;center;right"; +var defaultPosV = "top;center;bottom"; +var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; +var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; +var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; +var defaultBorderWidth = "thin;medium;thick"; +var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; + +function init() { + var ce = document.getElementById('container'), h; + + ce.style.cssText = tinyMCEPopup.getWindowArg('style_text'); + + h = getBrowserHTML('background_image_browser','background_image','image','advimage'); + document.getElementById("background_image_browser").innerHTML = h; + + document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); + document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); + document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); + document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); + document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); + document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); + + fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); + fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); + fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); + fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); + fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); + fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); + fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); + fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); + fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); + + fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); + fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); + + fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); + fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); + fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); + fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); + fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); + fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); + fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); + + fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); + fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); + fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); + + fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); + + fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); + fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); + + fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); + fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); + + fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); + + fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); + + TinyMCE_EditableSelects.init(); + setupFormData(); + showDisabledControls(); +} + +function setupFormData() { + var ce = document.getElementById('container'), f = document.forms[0], s, b, i; + + // Setup text fields + + selectByValue(f, 'text_font', ce.style.fontFamily, true, true); + selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); + selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); + selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); + selectByValue(f, 'text_style', ce.style.fontStyle, true, true); + selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); + selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); + selectByValue(f, 'text_case', ce.style.textTransform, true, true); + selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); + f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color); + updateColor('text_color_pick', 'text_color'); + f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); + f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); + f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); + f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); + + // Setup background fields + + f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor); + updateColor('background_color_pick', 'background_color'); + f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); + selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); + selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); + selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); + selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); + selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); + + // Setup block fields + + selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); + selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); + selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); + selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); + selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); + selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); + f.block_text_indent.value = getNum(ce.style.textIndent); + selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); + selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); + selectByValue(f, 'block_display', ce.style.display, true, true); + + // Setup box fields + + f.box_width.value = getNum(ce.style.width); + selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); + + f.box_height.value = getNum(ce.style.height); + selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); + + if (tinymce.isGecko) + selectByValue(f, 'box_float', ce.style.cssFloat, true, true); + else + selectByValue(f, 'box_float', 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 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; + + if (tinymce.isGecko) + 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 1) { + addSelectValue(f, s, p[0], p[1]); + + if (se) + selectByValue(f, s, p[1]); + } else { + addSelectValue(f, s, p[0], p[0]); + + if (se) + selectByValue(f, s, p[0]); + } + } +} + +function toggleSame(ce, pre) { + var el = document.forms[0].elements, i; + + if (ce.checked) { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = true; + el[pre + "_bottom"].disabled = true; + el[pre + "_left"].disabled = true; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = true; + el[pre + "_bottom_measurement"].disabled = true; + el[pre + "_left_measurement"].disabled = true; + } + } else { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = false; + el[pre + "_bottom"].disabled = false; + el[pre + "_left"].disabled = false; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = false; + el[pre + "_bottom_measurement"].disabled = false; + el[pre + "_left_measurement"].disabled = false; + } + } + + showDisabledControls(); +} + +function synch(fr, to) { + var f = document.forms[0]; + + f.elements[to].value = f.elements[fr].value; + + if (f.elements[fr + "_measurement"]) + selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); +} + +tinyMCEPopup.onInit.add(init); diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js b/lib/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js new file mode 100644 index 0000000..5026313 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js @@ -0,0 +1,63 @@ +tinyMCE.addI18n('en.style_dlg',{ +title:"Edit CSS Style", +apply:"Apply", +text_tab:"Text", +background_tab:"Background", +block_tab:"Block", +box_tab:"Box", +border_tab:"Border", +list_tab:"List", +positioning_tab:"Positioning", +text_props:"Text", +text_font:"Font", +text_size:"Size", +text_weight:"Weight", +text_style:"Style", +text_variant:"Variant", +text_lineheight:"Line height", +text_case:"Case", +text_color:"Color", +text_decoration:"Decoration", +text_overline:"overline", +text_underline:"underline", +text_striketrough:"strikethrough", +text_blink:"blink", +text_none:"none", +background_color:"Background color", +background_image:"Background image", +background_repeat:"Repeat", +background_attachment:"Attachment", +background_hpos:"Horizontal position", +background_vpos:"Vertical position", +block_wordspacing:"Word spacing", +block_letterspacing:"Letter spacing", +block_vertical_alignment:"Vertical alignment", +block_text_align:"Text align", +block_text_indent:"Text indent", +block_whitespace:"Whitespace", +block_display:"Display", +box_width:"Width", +box_height:"Height", +box_float:"Float", +box_clear:"Clear", +padding:"Padding", +same:"Same for all", +top:"Top", +right:"Right", +bottom:"Bottom", +left:"Left", +margin:"Margin", +style:"Style", +width:"Width", +height:"Height", +color:"Color", +list_type:"Type", +bullet_image:"Bullet image", +position:"Position", +positioning_type:"Type", +visibility:"Visibility", +zindex:"Z-index", +overflow:"Overflow", +placement:"Placement", +clip:"Clip" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/style/props.htm b/lib/tinymce/jscripts/tiny_mce/plugins/style/props.htm new file mode 100644 index 0000000..549ed04 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/style/props.htm @@ -0,0 +1,723 @@ + + + + {#style_dlg.title} + + + + + + + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + +
     
    +
    + +
    + + + +
    + + + + + + +
    + +  
    +
    + +
    + + + + + +
     
    +
    {#style_dlg.text_decoration} + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
     
    +
    + + + + +
     
    +
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    +
    + +
    + + + + + + + + + + + + + + +
    + + + + + + +
     
    +
       
    + + + + + + +
     
    +
       
    +
    +
    + {#style_dlg.padding} + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    +
    +
    + +
    +
    + {#style_dlg.margin} + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    + + + + + + +
     
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {#style_dlg.style} {#style_dlg.width} {#style_dlg.color}
          
    {#style_dlg.top}   + + + + + + +
     
    +
      + + + + + +
     
    +
    {#style_dlg.right}   + + + + + + +
     
    +
      + + + + + +
     
    +
    {#style_dlg.bottom}   + + + + + + +
     
    +
      + + + + + +
     
    +
    {#style_dlg.left}   + + + + + + +
     
    +
      + + + + + +
     
    +
    +
    + +
    + + + + + + + + + + + + + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
       
    + + + + + + +
     
    +
       
    + + + + + + +
     
    +
       
    + +
    +
    + {#style_dlg.placement} + + + + + + + + + + + + + + + + + + + + + + +
     
    {#style_dlg.top} + + + + + + +
     
    +
    {#style_dlg.right} + + + + + + +
     
    +
    {#style_dlg.bottom} + + + + + + +
     
    +
    {#style_dlg.left} + + + + + + +
     
    +
    +
    +
    + +
    +
    + {#style_dlg.clip} + + + + + + + + + + + + + + + + + + + + + + +
     
    {#style_dlg.top} + + + + + + +
     
    +
    {#style_dlg.right} + + + + + + +
     
    +
    {#style_dlg.bottom} + + + + + + +
     
    +
    {#style_dlg.left} + + + + + + +
     
    +
    +
    +
    +
    +
    +
    + +
    + + + +
    +
    + +
    +
    +
    + + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js new file mode 100644 index 0000000..27d2440 --- /dev/null +++ b/lib/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(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m=0;m--){if(n[m].type!="hidden"){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(l=tinymce.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){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)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},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/lib/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js new file mode 100644 index 0000000..c2be2f4 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js @@ -0,0 +1,112 @@ +/** + * 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) { + f = DOM.getParent(ed.id, 'form'); + el = f.elements; + + if (f) { + 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 (el[i].type != 'hidden') + return el[i]; + } + } else { + for (i = x - 1; i >= 0; i--) { + if (el[i].type != 'hidden') + 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 (ed = tinymce.get(el.id || el.name)) + ed.focus(); + else + window.setTimeout(function() {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); + + ed.onInit.add(function() { + each(DOM.select('a:first,a:last', ed.getContainer()), function(n) { + Event.add(n, 'focus', function() {ed.focus();}); + }); + }); + }, + + 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); +})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/table/cell.htm b/lib/tinymce/jscripts/tiny_mce/plugins/table/cell.htm new file mode 100644 index 0000000..d243e1d --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/cell.htm @@ -0,0 +1,178 @@ + + + + {#table_dlg.cell_title} + + + + + + + + +
    + + +
    +
    +
    + {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + +
    + +
    +
    +
    + +
    +
    + {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + + +
     
    +
    + + + + + +
     
    +
    + + + + + +
     
    +
    +
    +
    +
    + +
    +
    + +
    + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css b/lib/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css new file mode 100644 index 0000000..a067ecd --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/table/css/row.css b/lib/tinymce/jscripts/tiny_mce/plugins/table/css/row.css new file mode 100644 index 0000000..1f7755d --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/table/css/table.css b/lib/tinymce/jscripts/tiny_mce/plugins/table/css/table.css new file mode 100644 index 0000000..d11c3f6 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js new file mode 100644 index 0000000..266d7d5 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js @@ -0,0 +1 @@ +(function(b){var c=b.each;function a(F,E,I){var e,J,B,n;r();n=E.getParent(I.getStart(),"th,td");if(n){J=D(n);B=G();n=v(J.x,J.y)}function w(L,K){L=L.cloneNode(K);L.removeAttribute("id");return L}function r(){var K=0;e=[];c(["thead","tbody","tfoot"],function(L){var M=E.select(L+" tr",F);c(M,function(N,O){O+=K;c(E.select("td,th",N),function(U,P){var Q,R,S,T;if(e[O]){while(e[O][P]){P++}}S=g(U,"rowspan");T=g(U,"colspan");for(R=O;R'}return false}},"childNodes");K=w(K,false);K.rowSpan=K.colSpan=1;if(L){K.appendChild(L)}else{if(!b.isIE){K.innerHTML='
    '}}return K}function p(){var K=E.createRng();c(E.select("tr",F),function(L){if(L.cells.length==0){E.remove(L)}});if(E.select("tr",F).length==0){K.setStartAfter(F);K.setEndAfter(F);I.setRng(K);E.remove(F);return}c(E.select("thead,tbody,tfoot",F),function(L){if(L.rows.length==0){E.remove(L)}});r();row=e[Math.min(e.length-1,J.y)];if(row){I.select(row[Math.min(row.length-1,J.x)].elm,true);I.collapse(true)}}function s(Q,O,S,P){var N,L,K,M,R;N=e[O][Q].elm.parentNode;for(K=1;K<=S;K++){N=E.getNext(N,"tr");if(N){for(L=Q;L>=0;L--){R=e[O+K][L].elm;if(R.parentNode==N){for(M=1;M<=P;M++){E.insertAfter(d(R),R)}break}}if(L==-1){for(M=1;M<=P;M++){N.insertBefore(d(N.cells[0]),N.cells[0])}}}}}function A(){c(e,function(K,L){c(K,function(N,M){var Q,P,R,O;if(h(N)){N=N.elm;Q=g(N,"colspan");P=g(N,"rowspan");if(Q>1||P>1){N.colSpan=N.rowSpan=1;for(O=0;O1){P.rowSpan=rowSpan+1;continue}}else{if(K>0&&e[K-1][O]){S=e[K-1][O].elm;rowSpan=g(S,"rowspan");if(rowSpan>1){S.rowSpan=rowSpan+1;continue}}}L=d(P);L.colSpan=P.colSpan;R.appendChild(L);M=P}}if(R.hasChildNodes()){if(!N){E.insertAfter(R,Q)}else{Q.parentNode.insertBefore(R,Q)}}}function f(L){var M,K;c(e,function(N,O){c(N,function(Q,P){if(h(Q)){M=P;if(L){return false}}});if(L){return !M}});c(e,function(Q,R){var N=Q[M].elm,O,P;if(N!=K){P=g(N,"colspan");O=g(N,"rowspan");if(P==1){if(!L){E.insertAfter(d(N),N);s(M,R,O-1,P)}else{N.parentNode.insertBefore(d(N),N);s(M,R,O-1,P)}}else{N.colSpan++}K=N}})}function m(){var K=[];c(e,function(L,M){c(L,function(O,N){if(h(O)&&b.inArray(K,N)===-1){c(e,function(R){var P=R[N].elm,Q;Q=g(P,"colspan");if(Q>1){P.colSpan=Q-1}else{E.remove(P)}});K.push(N)}})});p()}function l(){var L;function K(O){var N,P,M;N=E.getNext(O,"tr");c(O.cells,function(Q){var R=g(Q,"rowspan");if(R>1){Q.rowSpan=R-1;P=D(Q);s(P.x,P.y,1,1)}});P=D(O.cells[0]);c(e[P.y],function(Q){var R;Q=Q.elm;if(Q!=M){R=g(Q,"rowspan");if(R<=1){E.remove(Q)}else{Q.rowSpan=R-1}M=Q}})}L=j();c(L.reverse(),function(M){K(M)});p()}function C(){var K=j();E.remove(K);p();return K}function H(){var K=j();c(K,function(M,L){K[L]=w(M,true)});return K}function z(M,L){var N=j(),K=N[L?0:N.length-1],O=K.cells.length;c(e,function(Q){var P;O=0;c(Q,function(S,R){if(S.real){O+=S.colspan}if(S.elm.parentNode==K){P=1}});if(P){return false}});if(!L){M.reverse()}c(M,function(R){var Q=R.cells.length,P;for(i=0;iL){L=P}if(O>K){K=O}if(Q.real){S=Q.colspan-1;R=Q.rowspan-1;if(S){if(P+S>L){L=P+S}}if(R){if(O+R>K){K=O+R}}}}})});return{x:L,y:K}}function t(Q){var N,M,S,R,L,K,O,P;B=D(Q);if(J&&B){N=Math.min(J.x,B.x);M=Math.min(J.y,B.y);S=Math.max(J.x,B.x);R=Math.max(J.y,B.y);L=S;K=R;for(y=M;y<=K;y++){Q=e[y][N];if(!Q.real){if(N-(Q.colspan-1)L){L=x+O}}if(P){if(y+P>K){K=y+P}}}}}E.removeClass(E.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=M;y<=K;y++){for(x=N;x<=L;x++){E.addClass(e[y][x].elm,"mceSelected")}}}}b.extend(this,{deleteTable:q,split:A,merge:o,insertRow:k,insertCol:f,deleteCols:m,deleteRows:l,cutRows:C,copyRows:H,pasteRows:z,getPos:D,setStartCell:u,setEndCell:t})}b.create("tinymce.plugins.TablePlugin",{init:function(e,f){var d,j;function h(m){var l=e.selection,k=e.dom.getParent(m||l.getNode(),"table");if(k){return new a(k,e.dom,l)}}function g(){e.getBody().style.webkitUserSelect="";e.dom.removeClass(e.dom.select("td.mceSelected,th.mceSelected"),"mceSelected")}c([["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(k){e.addButton(k[0],{title:k[1],cmd:k[2],ui:k[3]})});if(!b.isIE){e.onClick.add(function(k,l){l=l.target;if(l.nodeName==="TABLE"){k.selection.select(l)}})}e.onNodeChange.add(function(l,k,o){var m;o=l.selection.getStart();m=l.dom.getParent(o,"td,th,caption");k.setActive("table",o.nodeName==="TABLE"||!!m);if(m&&m.nodeName==="CAPTION"){m=0}k.setDisabled("delete_table",!m);k.setDisabled("delete_col",!m);k.setDisabled("delete_table",!m);k.setDisabled("delete_row",!m);k.setDisabled("col_after",!m);k.setDisabled("col_before",!m);k.setDisabled("row_after",!m);k.setDisabled("row_before",!m);k.setDisabled("row_props",!m);k.setDisabled("cell_props",!m);k.setDisabled("split_cells",!m);k.setDisabled("merge_cells",!m)});e.onInit.add(function(l){var k,o,p=l.dom,m;d=l.windowManager;l.onMouseDown.add(function(q,r){if(r.button!=2){g();o=p.getParent(r.target,"td,th");k=p.getParent(o,"table")}});p.bind(l.getDoc(),"mouseover",function(t){var r,q,s=t.target;if(o&&(m||s!=o)&&(s.nodeName=="TD"||s.nodeName=="TH")){q=p.getParent(s,"table");if(q==k){if(!m){m=h(q);m.setStartCell(o);l.getBody().style.webkitUserSelect="none"}m.setEndCell(s)}r=l.selection.getSel();if(r.removeAllRanges){r.removeAllRanges()}else{r.empty()}t.preventDefault()}});l.onMouseUp.add(function(z,A){var r,t=z.selection,B,C=t.getSel(),q,u,s,w;if(o){if(m){z.getBody().style.webkitUserSelect=""}function v(D,F){var E=new b.dom.TreeWalker(D,D);do{if(D.nodeType==3&&b.trim(D.nodeValue).length!=0){if(F){r.setStart(D,0)}else{r.setEnd(D,D.nodeValue.length)}return}if(D.nodeName=="BR"){if(F){r.setStartBefore(D)}else{r.setEndBefore(D)}return}}while(D=(F?E.next():E.prev()))}B=p.select("td.mceSelected,th.mceSelected");if(B.length>0){r=p.createRng();u=B[0];w=B[B.length-1];v(u,1);q=new b.dom.TreeWalker(u,p.getParent(B[0],"table"));do{if(u.nodeName=="TD"||u.nodeName=="TH"){if(!p.hasClass(u,"mceSelected")){break}s=u}}while(u=q.next());v(s);t.setRng(r)}z.nodeChanged();o=m=k=null}});l.onKeyUp.add(function(q,r){g()});if(l&&l.plugins.contextmenu){l.plugins.contextmenu.onContextMenu.add(function(s,q,u){var v,t=l.selection,r=t.getNode()||l.getBody();if(l.dom.getParent(u,"td")||l.dom.getParent(u,"th")||l.dom.select("td.mceSelected,th.mceSelected").length){q.removeAll();if(r.nodeName=="A"&&!l.dom.getAttrib(r,"name")){q.add({title:"advanced.link_desc",icon:"link",cmd:l.plugins.advlink?"mceAdvLink":"mceLink",ui:true});q.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});q.addSeparator()}if(r.nodeName=="IMG"&&r.className.indexOf("mceItem")==-1){q.add({title:"advanced.image_desc",icon:"image",cmd:l.plugins.advimage?"mceAdvImage":"mceImage",ui:true});q.addSeparator()}q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});q.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});q.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});q.addSeparator();v=q.addMenu({title:"table.cell"});v.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});v.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});v.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});v=q.addMenu({title:"table.row"});v.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});v.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});v.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});v.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});v.addSeparator();v.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});v.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});v.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!j);v.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!j);v=q.addMenu({title:"table.col"});v.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});v.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});v.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!b.isIE){function n(){var q;for(q=l.getBody().lastChild;q&&q.nodeType==3&&!q.nodeValue.length;q=q.previousSibling){}if(q&&q.nodeName=="TABLE"){l.dom.add(l.getBody(),"p",null,'
    ')}}if(b.isGecko){l.onKeyDown.add(function(r,t){var q,s,u=r.dom;if(t.keyCode==37||t.keyCode==38){q=r.selection.getRng();s=u.getParent(q.startContainer,"table");if(s&&r.getBody().firstChild==s){if(isAtStart(q,s)){q=u.createRng();q.setStartBefore(s);q.setEndBefore(s);r.selection.setRng(q);t.preventDefault()}}}})}l.onKeyUp.add(n);l.onSetContent.add(n);l.onVisualAid.add(n);l.onPreProcess.add(function(q,s){var r=s.node.lastChild;if(r&&r.childNodes.length==1&&r.firstChild.nodeName=="BR"){q.dom.remove(r)}});n()}});c({mceTableSplitCells:function(k){k.split()},mceTableMergeCells:function(l){var m,n,k;k=e.dom.getParent(e.selection.getNode(),"th,td");if(k){m=k.rowSpan;n=k.colSpan}if(!e.dom.select("td.mceSelected,th.mceSelected").length){d.open({url:f+"/merge_cells.htm",width:240+parseInt(e.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(e.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:m,cols:n,onaction:function(o){l.merge(k,o.cols,o.rows)},plugin_url:f})}else{l.merge()}},mceTableInsertRowBefore:function(k){k.insertRow(true)},mceTableInsertRowAfter:function(k){k.insertRow()},mceTableInsertColBefore:function(k){k.insertCol(true)},mceTableInsertColAfter:function(k){k.insertCol()},mceTableDeleteCol:function(k){k.deleteCols()},mceTableDeleteRow:function(k){k.deleteRows()},mceTableCutRow:function(k){j=k.cutRows()},mceTableCopyRow:function(k){j=k.copyRows()},mceTablePasteRowBefore:function(k){k.pasteRows(j,true)},mceTablePasteRowAfter:function(k){k.pasteRows(j)},mceTableDelete:function(k){k.deleteTable()}},function(l,k){e.addCommand(k,function(){var m=h();if(m){l(m);e.execCommand("mceRepaint");g()}})});c({mceInsertTable:function(k){d.open({url:f+"/table.htm",width:400+parseInt(e.getLang("table.table_delta_width",0)),height:320+parseInt(e.getLang("table.table_delta_height",0)),inline:1},{plugin_url:f,action:k?k.action:0})},mceTableRowProps:function(){d.open({url:f+"/row.htm",width:400+parseInt(e.getLang("table.rowprops_delta_width",0)),height:295+parseInt(e.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:f})},mceTableCellProps:function(){d.open({url:f+"/cell.htm",width:400+parseInt(e.getLang("table.cellprops_delta_width",0)),height:295+parseInt(e.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:f})}},function(l,k){e.addCommand(k,function(m,n){l(n)})})}});b.PluginManager.add("table",b.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js new file mode 100644 index 0000000..c2f307f --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js @@ -0,0 +1,1125 @@ +/** + * 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; + + /** + * 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 getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1); + }; + + function isCellSelected(cell) { + return 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 ? ' ' : '
    '; + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + cell.rowSpan = cell.colSpan = 1; + + if (formatNode) { + cell.appendChild(formatNode); + } else { + if (!tinymce.isIE) + cell.innerHTML = '
    '; + } + + 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) { + cell.colSpan = cell.rowSpan = 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; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + // Use selection + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + startCell.colSpan = (endX - startX) + 1; + 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++) { + cell = grid[y][x].elm; + + if (cell != startCell) { + // Move children to startCell + children = tinymce.grep(cell.childNodes); + each(children, function(node, i) { + // Jump over last BR element + if (node.nodeName != 'BR' || i != children.length - 1) + startCell.appendChild(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; + + // 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 = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + 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) { + otherCell.rowSpan = rowSpan + 1; + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell) + 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 = row[posX].elm, rowSpan, colSpan; + + 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 + cell.colSpan++; + + 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) + 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) { + 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 + cell.rowSpan = rowSpan - 1; + + lastCell = cell; + } + }); + }; + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + }; + + function cutRows() { + var rows = getSelectedRows(); + + dom.remove(rows); + cleanup(); + + return rows; + }; + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + }; + + function pasteRows(rows, before) { + var selectedRows = getSelectedRows(), + targetRow = selectedRows[before ? 0 : selectedRows.length - 1], + targetCellCount = targetRow.cells.length; + + // Calc target cell count + each(grid, function(row) { + var match; + + targetCellCount = 0; + each(row, function(cell, x) { + if (cell.real) + targetCellCount += cell.colspan; + + if (cell.elm.parentNode == targetRow) + match = 1; + }); + + if (match) + return false; + }); + + if (!before) + rows.reverse(); + + each(rows, function(row) { + var cellCount = row.cells.length, cell; + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + cell.colSpan = cell.rowSpan = 1; + } + + // Needs more cells + for (i = cellCount; i < targetCellCount; i++) + row.appendChild(cloneCell(row.cells[cellCount - 1])); + + // Needs less cells + for (i = targetCellCount; i < cellCount; i++) + dom.remove(row.cells[i]); + + // Add before/after + if (before) + targetRow.parentNode.insertBefore(row, targetRow); + else + dom.insertAfter(row, targetRow); + }); + }; + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x : x, y : y}; + return false; + } + }); + + return !pos; + }); + + return pos; + }; + + function setStartCell(cell) { + startPos = getPos(cell); + }; + + function findEndPos() { + var pos, maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) + maxX = x; + + if (y > maxY) + maxY = y; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + }); + }); + + return {x : maxX, y : maxY}; + }; + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end positon to include spans + maxX = endX; + maxY = endY; + + // Expand startX + for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + if (startX - (cell.colspan - 1) < startX) + startX -= cell.colspan - 1; + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + if (startY - (cell.rowspan - 1) < startY) + startY -= cell.rowspan - 1; + } + } + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + } + + // Remove current selection + dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) + 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; + + 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 = ''; + ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + }; + + // 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); + }); + } + + // 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); + } + + // Remove current selection + sel = ed.selection.getSel(); + + if (sel.removeAllRanges) + sel.removeAllRanges(); + else + sel.empty(); + + 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]; + + 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(); + }); + + // 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'}); + }); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + if (!tinymce.isIE) { + function fixTableCaretPos() { + var last; + + // Skip empty text nodes form the end + for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; + + if (last && last.nodeName == 'TABLE') + ed.dom.add(ed.getBody(), 'p', null, '
    '); + }; + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + if (tinymce.isGecko) { + ed.onKeyDown.add(function(ed, e) { + var rng, table, dom = ed.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = ed.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && ed.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + ed.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + ed.onKeyUp.add(fixTableCaretPos); + ed.onSetContent.add(fixTableCaretPos); + ed.onVisualAid.add(fixTableCaretPos); + + ed.onPreProcess.add(function(ed, o) { + var last = o.node.lastChild; + + if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR') + ed.dom.remove(last); + }); + + fixTableCaretPos(); + } + }); + + // 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); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js b/lib/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js new file mode 100644 index 0000000..b5fc1fd --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js @@ -0,0 +1,286 @@ +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]; + + 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; + } + + ed.execCommand('mceBeginUndoLevel'); + + 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 "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i 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; + } + + inst.execCommand('mceBeginUndoLevel'); + + switch (action) { + case "row": + updateRow(trElm); + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i 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") { + inst.execCommand('mceBeginUndoLevel'); + + dom.setAttrib(elm, 'cellPadding', cellpadding, true); + dom.setAttrib(elm, 'cellSpacing', cellspacing, true); + dom.setAttrib(elm, 'border', 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 = '
    '; + + 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 = border == "" ? "1px" : border; + } else + elm.style.borderColor = ''; + + elm.style.backgroundColor = bgcolor; + elm.style.height = getCSSSize(height); + + inst.addVisual(); + + // Fix for stange MSIE align bug + //elm.outerHTML = elm.outerHTML; + + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + + // Repaint if dimensions changed + if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) + inst.execCommand('mceRepaint'); + + tinyMCEPopup.close(); + return true; + } + + // Create new table + html += ''); + + 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[_mce_new]'), function(node) { + var td = dom.select('td', node); + + inst.selection.select(td[0], true); + inst.selection.collapse(); + + dom.setAttrib(node, '_mce_new', ''); + }); + + inst.addVisual(); + inst.execCommand('mceEndUndoLevel'); + + tinyMCEPopup.close(); +} + +function makeAttrib(attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib]; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + if (value == "") + return ""; + + // XML encode it + value = value.replace(/&/g, '&'); + value = value.replace(/\"/g, '"'); + value = value.replace(//g, '>'); + + return ' ' + attrib + '="' + value + '"'; +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); + var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; + var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame; + var inst = tinyMCEPopup.editor, dom = inst.dom; + var formObj = document.forms[0]; + var elm = dom.getParent(inst.selection.getNode(), "table"); + + action = tinyMCEPopup.getWindowArg('action'); + + if (!action) + action = elm ? "update" : "insert"; + + if (elm && action != "insert") { + var rowsAr = elm.rows; + var cols = 0; + for (var i=0; i 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 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 != "" && formObj.bordercolor.value != "") + st['border-width'] = formObj.border.value + "px"; + + 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'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px"; + } + + 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/lib/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js b/lib/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js new file mode 100644 index 0000000..000332a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js @@ -0,0 +1,74 @@ +tinyMCE.addI18n('en.table_dlg',{ +general_tab:"General", +advanced_tab:"Advanced", +general_props:"General properties", +advanced_props:"Advanced properties", +rowtype:"Row in table part", +title:"Insert/Modify table", +width:"Width", +height:"Height", +cols:"Cols", +rows:"Rows", +cellspacing:"Cellspacing", +cellpadding:"Cellpadding", +border:"Border", +align:"Alignment", +align_default:"Default", +align_left:"Left", +align_right:"Right", +align_middle:"Center", +row_title:"Table row properties", +cell_title:"Table cell properties", +cell_type:"Cell type", +valign:"Vertical alignment", +align_top:"Top", +align_bottom:"Bottom", +bordercolor:"Border color", +bgcolor:"Background color", +merge_cells_title:"Merge table cells", +id:"Id", +style:"Style", +langdir:"Language direction", +langcode:"Language code", +mime:"Target MIME type", +ltr:"Left to right", +rtl:"Right to left", +bgimage:"Background image", +summary:"Summary", +td:"Data", +th:"Header", +cell_cell:"Update current cell", +cell_row:"Update all cells in row", +cell_all:"Update all cells in table", +row_row:"Update current row", +row_odd:"Update odd rows in table", +row_even:"Update even rows in table", +row_all:"Update all rows in table", +thead:"Table Head", +tbody:"Table Body", +tfoot:"Table Foot", +scope:"Scope", +rowgroup:"Row Group", +colgroup:"Col Group", +col_limit:"You've exceeded the maximum number of columns of {$cols}.", +row_limit:"You've exceeded the maximum number of rows of {$rows}.", +cell_limit:"You've exceeded the maximum number of cells of {$cells}.", +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.", +caption:"Table caption", +frame:"Frame", +frame_none:"none", +frame_groups:"groups", +frame_rows:"rows", +frame_cols:"cols", +frame_all:"all", +rules:"Rules", +rules_void:"void", +rules_above:"above", +rules_below:"below", +rules_hsides:"hsides", +rules_lhs:"lhs", +rules_rhs:"rhs", +rules_vsides:"vsides", +rules_box:"box", +rules_border:"border" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm b/lib/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm new file mode 100644 index 0000000..9736ed8 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm @@ -0,0 +1,32 @@ + + + + {#table_dlg.merge_cells_title} + + + + + + +
    +
    + {#table_dlg.merge_cells_title} + + + + + + + + + +
    {#table_dlg.cols}:
    {#table_dlg.rows}:
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/table/row.htm b/lib/tinymce/jscripts/tiny_mce/plugins/table/row.htm new file mode 100644 index 0000000..092e6c8 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/row.htm @@ -0,0 +1,155 @@ + + + + {#table_dlg.row_title} + + + + + + + + +
    + + +
    +
    +
    + {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    + +
    +
    +
    + +
    +
    + {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + + +
     
    +
    + + + + + +
     
    +
    +
    +
    +
    + +
    +
    + +
    + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/table/table.htm b/lib/tinymce/jscripts/tiny_mce/plugins/table/table.htm new file mode 100644 index 0000000..f269039 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/table/table.htm @@ -0,0 +1,187 @@ + + + + {#table_dlg.title} + + + + + + + + + +
    + + +
    +
    +
    + {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    + {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + +
     
    +
    + +
    + +
    + +
    + + + + + +
     
    +
    + + + + + +
     
    +
    +
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/template/blank.htm b/lib/tinymce/jscripts/tiny_mce/plugins/template/blank.htm new file mode 100644 index 0000000..ecde53f --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/template/blank.htm @@ -0,0 +1,12 @@ + + + blank_page + + + + + + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/template/css/template.css b/lib/tinymce/jscripts/tiny_mce/plugins/template/css/template.css new file mode 100644 index 0000000..2d23a49 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js new file mode 100644 index 0000000..ebe3c27 --- /dev/null +++ b/lib/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 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/lib/tinymce/jscripts/tiny_mce/plugins/template/js/template.js b/lib/tinymce/jscripts/tiny_mce/plugins/template/js/template.js new file mode 100644 index 0000000..24045d7 --- /dev/null +++ b/lib/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(''); + }, + + 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'); + }); + }, + + 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 + + {#template_dlg.title} + + + + + +
    +
    +
    {#template_dlg.desc}
    +
    + +
    +
    +
    +
    + {#template_dlg.preview} + +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js new file mode 100644 index 0000000..94719f9 --- /dev/null +++ b/lib/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$1');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/lib/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js new file mode 100644 index 0000000..35856e2 --- /dev/null +++ b/lib/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, '$1'); + + 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/lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js new file mode 100644 index 0000000..a099e6a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/\S\s+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(h,"span",{},'0')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_count:function(b){var c=this,a=0;if(c.block){return}c.block=1;setTimeout(function(){var d=b.getContent({format:"raw"});if(d){d=d.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");d=d.replace(c.cleanre,"");d.replace(c.countre,function(){a++})}tinymce.DOM.setHTML(c.id,a.toString());setTimeout(function(){c.block=0},2000)},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js new file mode 100644 index 0000000..5cb92fa --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js @@ -0,0 +1,98 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.WordCount', { + block : 0, + id : null, + countre : null, + cleanre : null, + + init : function(ed, url) { + var t = this, last = 0; + + t.countre = ed.getParam('wordcount_countregex', /\S\s+/g); + t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g); + t.id = ed.id + '-word-count'; + + ed.onPostRender.add(function(ed, cm) { + var row, id; + + // Add it to the specified id or the theme advanced path + id = ed.getParam('wordcount_target_id'); + if (!id) { + row = tinymce.DOM.get(ed.id + '_path_row'); + + if (row) + tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '0'); + } else + tinymce.DOM.add(id, 'span', {}, '0'); + }); + + ed.onInit.add(function(ed) { + ed.selection.onSetContent.add(function() { + t._count(ed); + }); + + t._count(ed); + }); + + ed.onSetContent.add(function(ed) { + t._count(ed); + }); + + ed.onKeyUp.add(function(ed, e) { + if (e.keyCode == last) + return; + + if (13 == e.keyCode || 8 == last || 46 == last) + t._count(ed); + + last = e.keyCode; + }); + }, + + _count : function(ed) { + var t = this, tc = 0; + + // Keep multiple calls from happening at the same time + if (t.block) + return; + + t.block = 1; + + setTimeout(function() { + var tx = ed.getContent({format : 'raw'}); + + if (tx) { + tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars + tx = tx.replace(t.cleanre, ''); // remove numbers and punctuation + tx.replace(t.countre, function() {tc++;}); // count the words + } + + tinymce.DOM.setHTML(t.id, tc.toString()); + + setTimeout(function() {t.block = 0;}, 2000); + }, 1); + }, + + getInfo: function() { + return { + longname : 'Word Count plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount); +})(); diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm new file mode 100644 index 0000000..3aeac0d --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_abbr_element} + + + + + + + + + +
    + + +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    : + +
    :
    : + +
    : + +
    +
    +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    +
    +
    +
    +
    + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm new file mode 100644 index 0000000..31ee7b7 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_acronym_element} + + + + + + + + + +
    + + +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    : + +
    :
    : + +
    : + +
    +
    +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    +
    +
    +
    +
    + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm new file mode 100644 index 0000000..17054da --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm @@ -0,0 +1,148 @@ + + + + {#xhtmlxtras_dlg.attribs_title} + + + + + + + + +
    + + +
    +
    +
    + {#xhtmlxtras_dlg.attribute_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    + +
    :
    : + +
    : + +
    +
    +
    +
    +
    + {#xhtmlxtras_dlg.attribute_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    +
    +
    +
    +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm new file mode 100644 index 0000000..d0a3e3a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_cite_element} + + + + + + + + + +
    + + +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    : + +
    :
    : + +
    : + +
    +
    +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    +
    +
    +
    +
    + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css new file mode 100644 index 0000000..9a6a235 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css new file mode 100644 index 0000000..e67114d --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm new file mode 100644 index 0000000..8b07fa8 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_del_element} + + + + + + + + + +
    + + +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
    : + + + + + +
    +
    :
    +
    +
    + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    : + +
    :
    : + +
    : + +
    +
    +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    +
    +
    +
    +
    + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js new file mode 100644 index 0000000..a9393ad --- /dev/null +++ b/lib/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_width",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_width",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_width",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_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380,height:370,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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js new file mode 100644 index 0000000..5f9d9bd --- /dev/null +++ b/lib/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_width', 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_width', 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_width', 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_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAttributes', function() { + ed.windowManager.open({ + file : url + '/attributes.htm', + width : 380, + height : 370, + 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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm new file mode 100644 index 0000000..6c5470c --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_ins_element} + + + + + + + + + +
    + + +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
    : + + + + + +
    +
    :
    +
    +
    + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    : + +
    :
    : + +
    : + +
    +
    +
    +
    +
    + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    :
    +
    +
    +
    +
    + + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js new file mode 100644 index 0000000..4b51a25 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js new file mode 100644 index 0000000..6ec2f88 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js new file mode 100644 index 0000000..d62a219 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js @@ -0,0 +1,126 @@ +/** + * 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(); + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + 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; + } + + if (value != "") { + dom.setAttrib(elm, attrib.toLowerCase(), value); + + if (attrib == "style") + attrib = "style.cssText"; + + if (attrib.substring(0, 2) == 'on') + value = 'return true;' + value; + + if (attrib == "class") + attrib = "className"; + + elm[attrib]=value; + } else + elm.removeAttribute(attrib); +} + +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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js new file mode 100644 index 0000000..009b715 --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js new file mode 100644 index 0000000..9e5d8c5 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js @@ -0,0 +1,63 @@ +/** + * 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'); +} + +function insertDel() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL'); + + tinyMCEPopup.execCommand('mceBeginUndoLevel'); + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('del'); + var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';}); + for (var i=0; i 0) { + tagName = element_name; + + insertInlineElement(element_name); + var elementArray = tinymce.grep(SXE.inst.dom.select(element_name)); + for (var i=0; i -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, {_mce_new : 1}), n, 1); + }); +} diff --git a/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js new file mode 100644 index 0000000..3774f0a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js @@ -0,0 +1,62 @@ +/** + * 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'); +} + +function insertIns() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); + tinyMCEPopup.execCommand('mceBeginUndoLevel'); + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('INS'); + var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';}); + for (var i=0; i + + + {#advanced_dlg.about_title} + + + + + + + +
    +
    +

    {#advanced_dlg.about_title}

    +

    Version: ()

    +

    TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL + by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

    +

    Copyright © 2003-2008, Moxiecode Systems AB, All rights reserved.

    +

    For more information about this software visit the TinyMCE website.

    + +
    + Got Moxie? + Hosted By Sourceforge + Also on freshmeat +
    +
    + +
    +
    +

    {#advanced_dlg.about_loaded}

    + +
    +
    + +

     

    +
    +
    + +
    +
    +
    +
    + +
    + +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm b/lib/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm new file mode 100644 index 0000000..2bc63fc --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm @@ -0,0 +1,26 @@ + + + + {#advanced_dlg.anchor_title} + + + + +
    + + + + + + + + +
    {#advanced_dlg.anchor_title}
    {#advanced_dlg.anchor_name}:
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm b/lib/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm new file mode 100644 index 0000000..3991b81 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm @@ -0,0 +1,52 @@ + + + + {#advanced_dlg.charmap_title} + + + + + + + + + + + + + + + +
    {#advanced_dlg.charmap_title}
    + + + + + + + + + +
     
     
    +
    + + + + + + + + + + + + + + + + +
    HTML-Code
     
     
    NUM-Code
     
    +
    + + + diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm b/lib/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm new file mode 100644 index 0000000..096e755 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm @@ -0,0 +1,73 @@ + + + + {#advanced_dlg.colorpicker_title} + + + + + +
    + + +
    +
    +
    + {#advanced_dlg.colorpicker_picker_title} +
    + + +
    + +
    + +
    +
    +
    +
    + +
    +
    + {#advanced_dlg.colorpicker_palette_title} +
    + +
    + +
    +
    +
    + +
    +
    + {#advanced_dlg.colorpicker_named_title} +
    + +
    + +
    + +
    + {#advanced_dlg.colorpicker_name} +
    +
    +
    +
    + +
    + + +
    + +
    + +
    +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js new file mode 100644 index 0000000..4c43312 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js @@ -0,0 +1 @@ +(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l)}if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute("themes/advanced/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){i.formatter.remove(p[0])}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},""),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,l){var j=this.editor,k=this.settings,m=d.get(j.id+"_tbl"),n=d.get(j.id+"_ifr");i=Math.max(k.theme_advanced_resizing_min_width||100,i);l=Math.max(k.theme_advanced_resizing_min_height||100,l);i=Math.min(k.theme_advanced_resizing_max_width||65535,i);l=Math.min(k.theme_advanced_resizing_max_height||65535,l);d.setStyle(m,"height","");d.setStyle(n,"height",l);if(k.theme_advanced_resize_horizontal){d.setStyle(m,"width","");d.setStyle(n,"width",i);if(i"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},""));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},""));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":" ");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);if(w.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+p.id+"_size",{cw:n,ch:E})}}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(r,z,l,x,j){var C=this,i,y=0,B,u,D=C.settings,A,k,w,m,q;e.each(C.stateControls,function(n){z.setActive(n,r.queryCommandState(C.controls[n][1]))});function o(p){var s,n=j.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s= 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; + + // Init editor + ed.onInit.add(function() { + if (!ed.settings.readonly) + ed.onNodeChange.add(t._nodeChanged, t); + + if (ed.settings.content_css !== false) + ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css")); + }); + + 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"); + }, + + createControl : function(n, cf) { + var cd, c; + + if (c = cf.createControl(n)) + return c; + + switch (n) { + case "styleselect": + return this._createStyleSelect(); + + case "formatselect": + return this._createBlockFormats(); + + case "fontselect": + return this._createFontSelect(); + + case "fontsizeselect": + return this._createFontSizeSelect(); + + case "forecolor": + return this._createForeColorMenu(); + + case "backcolor": + return this._createBackColorMenu(); + } + + if ((cd = this.controls[n])) + return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); + }, + + execCommand : function(cmd, ui, val) { + var f = this['_' + cmd]; + + if (f) { + f.call(this, ui, val); + return true; + } + + return false; + }, + + _importClasses : function(e) { + var ed = this.editor, ctrl = ed.controlManager.get('styleselect'); + + if (ctrl.getLength() == 0) { + each(ed.dom.getClasses(), function(o, idx) { + var name = 'style_' + idx; + + ed.formatter.register(name, { + inline : 'span', + attributes : {'class' : o['class']}, + selector : '*' + }); + + ctrl.add(o['class'], name); + }); + } + }, + + _createStyleSelect : function(n) { + var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl; + + // Setup style select box + ctrl = ctrlMan.createListBox('styleselect', { + title : 'advanced.style_select', + onselect : function(name) { + var matches, formatNames = []; + + each(ctrl.items, function(item) { + formatNames.push(item.value); + }); + + ed.focus(); + ed.undoManager.add(); + + // Toggle off the current format + matches = ed.formatter.matchAll(formatNames); + if (!name || matches[0] == name) + ed.formatter.remove(matches[0]); + else + ed.formatter.apply(name); + + ed.undoManager.add(); + ed.nodeChanged(); + + return false; // No auto select + } + }); + + // Handle specified format + ed.onInit.add(function() { + var counter = 0, formats = ed.getParam('style_formats'); + + if (formats) { + each(formats, function(fmt) { + var name, keys = 0; + + each(fmt, function() {keys++;}); + + if (keys > 1) { + name = fmt.name = fmt.name || 'style_' + (counter++); + ed.formatter.register(name, fmt); + ctrl.add(fmt.title, name); + } else + ctrl.add(fmt.title); + }); + } else { + each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) { + var name; + + if (val) { + name = 'style_' + (counter++); + + ed.formatter.register(name, { + inline : 'span', + classes : val, + selector : '*' + }); + + ctrl.add(t.editor.translate(key), name); + } + }); + } + }); + + // Auto import classes if the ctrl box is empty + if (ctrl.getLength() == 0) { + ctrl.onPostRender.add(function(ed, n) { + if (!ctrl.NativeListBox) { + Event.add(n.id + '_text', 'focus', t._importClasses, t); + Event.add(n.id + '_text', 'mousedown', t._importClasses, t); + Event.add(n.id + '_open', 'focus', t._importClasses, t); + Event.add(n.id + '_open', 'mousedown', t._importClasses, t); + } else + Event.add(n.id, 'focus', t._importClasses, t); + }); + } + + return ctrl; + }, + + _createFontSelect : function() { + var c, t = this, ed = t.editor; + + c = ed.controlManager.createListBox('fontselect', { + title : 'advanced.fontdefault', + onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + ed.execCommand('FontName', false, cur.value); + return; + } + + ed.execCommand('FontName', false, v); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + 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; + }); + + 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', cmd : 'FormatBlock'}); + if (c) { + each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { + c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v}); + }); + } + + return c; + }, + + _createForeColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_text_colors) + o.colors = v; + + if (s.theme_advanced_default_foreground_color) + o.default_color = s.theme_advanced_default_foreground_color; + + o.title = 'advanced.forecolor_desc'; + o.cmd = 'ForeColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('forecolor', o); + + return c; + }, + + _createBackColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_background_colors) + o.colors = v; + + if (s.theme_advanced_default_background_color) + o.default_color = s.theme_advanced_default_background_color; + + o.title = 'advanced.backcolor_desc'; + o.cmd = 'HiliteColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('backcolor', o); + + return c; + }, + + renderUI : function(o) { + var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; + + n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')}); + + if (!DOM.boxModel) + n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); + + n = sc = DOM.add(n, 'table', {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 = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8 + DOM.addClass(nl[0], 'mceFirst'); + DOM.addClass(nl[nl.length - 1], 'mceLast'); + + // Add classes to first and last TDs + each(DOM.select('tr', tb), function(n) { + DOM.addClass(n.firstChild, 'mceFirst'); + DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); + }); + + if (DOM.get(s.theme_advanced_toolbar_container)) + DOM.get(s.theme_advanced_toolbar_container).appendChild(p); + else + DOM.insertAfter(p, n); + + Event.add(ed.id + '_path_row', 'click', function(e) { + e = e.target; + + if (e.nodeName == 'A') { + t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); + + return Event.cancel(e); + } + }); +/* + if (DOM.get(ed.id + '_path_row')) { + Event.add(ed.id + '_tbl', 'mouseover', function(e) { + var re; + + e = e.target; + + if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) { + re = DOM.get(ed.id + '_path_row'); + t.lastPath = re.innerHTML; + DOM.setHTML(re, e.parentNode.title); + } + }); + + Event.add(ed.id + '_tbl', 'mouseout', function(e) { + if (t.lastPath) { + DOM.setHTML(ed.id + '_path_row', t.lastPath); + t.lastPath = 0; + } + }); + } +*/ + + if (!ed.getParam('accessibility_focus')) + Event.add(DOM.add(p, 'a', {href : '#'}, ''), 'focus', function() {tinyMCE.get(ed.id).focus();}); + + if (s.theme_advanced_toolbar_location == 'external') + o.deltaHeight = 0; + + t.deltaHeight = o.deltaHeight; + o.targetNode = null; + + 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 + '_tbl'); + + this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); + }, + + resizeTo : function(w, h) { + 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) + DOM.setStyle(ifr, 'width', e.clientWidth); + } + }, + + destroy : function() { + var id = this.editor.id; + + Event.clear(id + '_resize'); + Event.clear(id + '_path_row'); + Event.clear(id + '_external_close'); + }, + + // Internal functions + + _simpleLayout : function(s, tb, o, p) { + var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; + + if (s.readonly) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + return ic; + } + + // Create toolbar container at top + if (lo == 'top') + t._addToolbars(tb, o); + + // Create external toolbar + if (lo == 'external') { + n = c = DOM.create('div', {style : 'position:relative'}); + n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); + DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); + n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); + etb = DOM.add(n, 'tbody'); + + if (p.firstChild.className == 'mceOldBoxModel') + p.firstChild.appendChild(c); + else + p.insertBefore(c, p.firstChild); + + t._addToolbars(etb, o); + + ed.onMouseUp.add(function() { + var e = DOM.get(ed.id + '_external'); + DOM.show(e); + + DOM.hide(lastExtID); + + var f = Event.add(ed.id + '_external_close', 'click', function() { + DOM.hide(ed.id + '_external'); + Event.remove(ed.id + '_external_close', 'click', f); + }); + + DOM.show(e); + DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); + + // Fixes IE rendering bug + DOM.hide(e); + DOM.show(e); + e.style.filter = ''; + + lastExtID = ed.id + '_external'; + + e = null; + }); + } + + if (sl == 'top') + t._addStatusBar(tb, o); + + // Create iframe container + if (!s.theme_advanced_toolbar_container) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + } + + // Create toolbar container at bottom + if (lo == 'bottom') + t._addToolbars(tb, o); + + if (sl == 'bottom') + t._addStatusBar(tb, o); + + return ic; + }, + + _rowLayout : function(s, tb, o) { + var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; + + dc = s.theme_advanced_containers_default_class || ''; + da = s.theme_advanced_containers_default_align || 'center'; + + each(explode(s.theme_advanced_containers || ''), function(c, i) { + var v = s['theme_advanced_container_' + c] || ''; + + switch (v.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; + + a = s.theme_advanced_toolbar_align.toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a}); + + if (!ed.getParam('accessibility_focus')) + h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '')); + + h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '')); + + // Create toolbar and add the controls + for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { + tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i}); + + if (s['theme_advanced_buttons' + i + '_add']) + v += ',' + s['theme_advanced_buttons' + i + '_add']; + + if (s['theme_advanced_buttons' + i + '_add_before']) + v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v; + + t._addControls(v, tb); + + //n.appendChild(n = tb.render()); + h.push(tb.renderHTML()); + + o.deltaHeight -= s.theme_advanced_row_height; + } + + h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '')); + 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'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' '); + DOM.add(n, 'a', {href : '#', accesskey : 'x'}); + + if (s.theme_advanced_resizing) { + DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'}); + + 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', 'mousedown', function(e) { + var mouseMoveHandler1, mouseMoveHandler2, + mouseUpHandler1, mouseUpHandler2, + startX, startY, startWidth, startHeight, width, height, ifrElm; + + function resizeOnMove(e) { + 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); + + // Store away the size + if (s.theme_advanced_resizing_use_cookie) { + Cookie.setHash("TinyMCE_" + ed.id + "_size", { + cw : width, + ch : height + }); + } + }; + + 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; + }, + + _nodeChanged : function(ed, cm, n, co, ob) { + var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, 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); + cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing); + cm.setDisabled('redo', !ed.undoManager.hasRedo()); + cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); + + p = getParent('A'); + if (c = cm.get('link')) { + if (!p || !p.name) { + c.setDisabled(!p && co); + c.setActive(!!p); + } + } + + if (c = cm.get('unlink')) { + c.setDisabled(!p && co); + c.setActive(!!p && !p.name); + } + + if (c = cm.get('anchor')) { + c.setActive(!!p && p.name); + } + + p = getParent('IMG'); + if (c = cm.get('image')) + c.setActive(!!p && n.className.indexOf('mceItem') == -1); + + if (c = cm.get('styleselect')) { + t._importClasses(); + + formatNames = []; + each(c.items, function(item) { + formatNames.push(item.value); + }); + + matches = ed.formatter.matchAll(formatNames); + c.select(matches[0]); + } + + if (c = cm.get('formatselect')) { + p = getParent(DOM.isBlock); + + if (p) + c.select(p.nodeName.toLowerCase()); + } + + // Find out current fontSize, fontFamily and fontClass + getParent(function(n) { + if (n.nodeName === 'SPAN') { + if (!cl && n.className) + cl = n.className; + + if (!fz && n.style.fontSize) + fz = n.style.fontSize; + + if (!fn && n.style.fontFamily) + fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); + } + + 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_path && s.theme_advanced_statusbar_location) { + p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); + DOM.setHTML(p, ''); + + getParent(function(n) { + var na = n.nodeName.toLowerCase(), u, pi, ti = ''; + + /*if (n.getAttribute('_mce_bogus')) + return; +*/ + // Ignore non element and hidden elements + if (n.nodeType != 1 || n.nodeName === 'BR' || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))) + return; + + // Fake name + if (v = DOM.getAttrib(n, 'mce_name')) + na = v; + + // Handle prefix + if (tinymce.isIE && n.scopeName !== 'HTML') + na = n.scopeName + ':' + na; + + // Remove internal prefix + na = na.replace(/mce\:/g, ''); + + // Handle node name + switch (na) { + case 'b': + na = 'strong'; + break; + + case 'i': + na = 'em'; + break; + + case 'img': + if (v = DOM.getAttrib(n, 'src')) + ti += 'src: ' + v + ' '; + + break; + + case 'a': + if (v = DOM.getAttrib(n, 'name')) { + ti += 'name: ' + v + ' '; + na += '#' + v; + } + + if (v = DOM.getAttrib(n, 'href')) + ti += 'href: ' + v + ' '; + + break; + + case 'font': + if (v = DOM.getAttrib(n, 'face')) + ti += 'font: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'size')) + ti += 'size: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'color')) + ti += 'color: ' + v + ' '; + + break; + + case 'span': + if (v = DOM.getAttrib(n, 'style')) + ti += 'style: ' + v + ' '; + + break; + } + + if (v = DOM.getAttrib(n, 'id')) + ti += 'id: ' + v + ' '; + + if (v = n.className) { + v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '') + + if (v) { + ti += 'class: ' + v + ' '; + + if (DOM.isBlock(n) || na == 'img' || na == 'span') + na += '.' + v; + } + } + + na = na.replace(/(html:)/g, ''); + na = {name : na, node : n, title : ti}; + t.onResolveName.dispatch(t, na); + ti = na.title; + na = na.name; + + //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');"; + pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); + + if (p.hasChildNodes()) { + p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild); + p.insertBefore(pi, p.firstChild); + } else + p.appendChild(pi); + }, ed.getBody()); + } + }, + + // 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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/charmap.htm', + width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceHelp : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/about.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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/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)); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/image.htm b/lib/tinymce/jscripts/tiny_mce/themes/advanced/image.htm new file mode 100644 index 0000000..f30d670 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/image.htm @@ -0,0 +1,80 @@ + + + + {#advanced_dlg.image_title} + + + + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
     
    + x +
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg b/lib/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4c542d107b25f68a9d4f9d7a109d0565d1f1437 GIT binary patch literal 3189 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 literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif b/lib/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..e46de5333082869b9bdab2576a554a2f9d01a966 GIT binary patch literal 11794 zcmWk!i9gei8~^OH(+nR+?qiNn!bm7$?mKheng~fXL_(QujvSd%A?0R7CgiL}a+f(O zN;OjH`ZiMOvR}XFKX_ix^M0Q9`~5r)PWGmI!&c$uzz+b}8$Q_3J`4cB+Lzu9odL-SKwq4;O-1r8)E~_ottI`aGXoKC%Au zn^#xDp}vVP`bSneE^UKdg?XnvE=UgehDKkkY9AdP{jI0_{bSMZpThwmk!wGX_1zudul>Eom7>$LI-A@t$)|4>D~MG&C1_zCR1#W^XEVDR=-wEvF0W^qAtIs z)-CkjpLXBFAX75e+9f86jDNd1jBg175*w=9#^cLYOG~p~zTtm;=-E(mwEEr#kH?=` z-Wu+Rd-7l>t*GMu*vscGE`ur7p5fH>_4Ul$YaH&E-1_Ck_kU=tbynl;glkiYS2iwJ z-)y_;S#nxV+^x;tu`DgtJ<_87V@KPMpId}(oB5Gw>!@21XPSy`tQFNgx|oyWnc8>M zkLZ#x(AGCiB$sv!%xqejT1GWCcTPOk(|a`k%iP?O1A_Nz47LvW@HcrMzkKIDUObf1 z)zCO~sEF^Cv(6I;!t!~vmMv!MTq|dpGdMJN5pl6)`RRWnqpR%I)gK8i_viq?$m)lw{^5u3pND@{D+11X1P+Xj4tqBz2fmV`K<2l!6#eJx03j`!`bbftj>{VZ?~#@ zU#JBxOKgFCqr7M5*o1vF7MI9$@=SWN!_Gq&7LIl$wy|dC{;UObM|R^SnJ;&^Wp==L+_>& z9HFf(-Mr8qJuAIf=hE^#Z)d6TH`q7&i@xNqXXld=2f)y?FoB5cX3Nt39Pt#l#og4K zA&A6+zw_sUcj~5eFu!VdwMX>`BMEvvH%=aDgW)ZuM2ZSN4)r=>Vt*GRKA&I8XFgV1 zKi5zQr=hdAr%|WSI}_T{_!nC5iz(e)PhsO_mIml8g%%3dH5b_zkz!3&vk4t4W>xyMM?Rgim)VJ3NYxbJ4@Sjn7klMA@JUN%=;H zWlkO&nbi|9mgRux$Q5}7q9fi)r~s&1w$YFcvjv4XXzy4-$6*EQ`ZwLeG3I9-e9yq0 zvbZ9Tq~w6TD^4pydn{tS7l9$6A5+rmocRc+IDpsZHqgiz<<v1V88S53UnpB&;jp(#rxs?7)FN!A}!Hx4c61 z#F}q>>Wg`cXtsv&)jrs2Fx2C(ow6p`M32bZf`Ff4#{?`DtW>E2*T$yX<1}p<#B7lF z6?x7+@}phbnN6nhHmKGPc~!0>@2sjOFJVG5Zl2fhOHV^O<6_F(Iq9BSaa(yDjqM9m!(@@Nm@ z+DX@KB#wUkPf>HP_E%>-AN4#EnlWCAogFY%&LGXN&cIcbmaJZ{ixIC&FOgCMSFVG~M0=r(q6P`J zaUS!vbQfk&IX;d~TExp(;V;0A)_0OQpXuBjpBLC_6*;RL{t9L}ZJzdbr2@Y&5UN%{ zFk`RW3^V5R?DLnV!wRxnuTL%u1)7oPrvjej4)xJ*5heUff@g_n}PjrtHiE2w)A{bkYhPFp2LdbjUQh%`f5MNZFsh1ef(*WrjeE0(&mG&X_a~M7*Ew+(shSk zElBN;D`~mUr{ZO?j&Bn`tvdKsW!kVp>F0d>Iy^v9Dc-WqU|Dfrc&PxuIGJ1;b9?r6 z!Say}Q}KYFmx$qEIPw-z_KdAq58fK`tOK{X5~Q{PR=Z6dRmEsbWarMD(|TmY!Y0Ya zPyE3{9XB1pO>V zTeY%3Aa&+RSF&M_{q53*Q%?pf`?sIJ{&^o&w(&j8{U`n;DozuwC+h~ddZh>`#P`PC zMcR$W0n2Cx!qfweM#Sqd7_wi^4tUoavKsFP9nr9(nLA%NTnh~h>XhMO@?4^v^8B!z z48^Q?Z!zOjF=q1k{magEw=!=^75oY3(s7+7;(kvGFu5-hC5W@CZkr`9$5?aVC+o#k!`Ff-pjNh;Xzx=)4EidJCw_a}637gMQ9RoVSP zS4a0ao+AVvv6mrC=f(?F6W$+}&v2=c&-9QP-hM>yf*nYCAz5caYP8mS2QQ&a-U{S` zkqK?t3bE3v3&}L1a~FZ}r%@I58`#Cdv&Di33e`<_9{BW~S-bCwrg#uh<%~m{h)m`E zXQdz9Xqk|))l4RQfM(b~en_al`fe|WqGxYcy&Z9-i;d9Rr(FH{|V z_)+x?Kg>}^3f$iR+20nf{-vuw_8m~NoOR@pkY!u4qc39Ve=o7nO z1raO6;``q%>aRVpIo?<7!aN{55XC=dWOdyPh_L<9i_3|#ZV58Zio6m7u5oM|KL+2+ zF;Ttv)*DR-SqOIgk!Nte&HJd7XrSPJFP;ntd9DH9OS9$n-!#yu-+v6lx8|Vg-m4hb~vvbIqwo#nlcg8dqF>StYcwZ4^j&u$*LLn7UUmOw|944evOFdj95PEc_13$ zo+*$>h!~lS-(6^Mm9{S07qR+wlwUof^wD5IJs!5zRH^s|Z>@LPYJ(CkfbYp*R6kH36@v4yDb9>>z zr^)jn#KB&kWah`4VlH)&*4_Wsbs=p}A@}2xXch1DQ$@xpJ z_UmmS`#tVCN%7s)G>U7Yn#WYZ&d1Fc_Qcx-gs9J$UJ=%~BGGmwU-)Glh6rE<@^As- zgX}rP)(@4w%~w|5p}Q|%39yWMWS8oqe$wj2p0E7%61`2SsJ-r9YNBlWH>8t+#FOb% zjUV>n@i3ei3CQ*Z;%DW0N7N$bLN}Jw($RXWiBM!0DY`+NNQyyS0+dIkZyTR>p2N2e z8@zY}OX+e2@TZZgN8@gtIuMRX*E)48Ou_qP#vSRsbw$AL&SVX|_Mtgk+IO@)lks{e zW8J~7kCdK5@mnD!fL0F0L@0+U0-A`|Ynes^!o#N|n*GFEP3TIMxVQ^hh1FsAIAN}9 zSxCH$s&R(KK{y3RLHr(%Sv_M0^LjUgoVpYmfyXChA}xRe6HKQ92RycH6x;ekd7a5aoCYh(bmTdj51#3tC*c66d43 zt@&r!5!2MTd2cDWkJM~t{Ar0^u4ek>YylUcN4!YQxhxw8ySR2B`dhlin$hrS=z^@c zrlV#*a2cA86!zQg^HUsPhngQk1isJhYD*6g(8aIufEYM<*v5URk?O2v0%0;f@6F$P zv1Hso|C>Vevy92U{kZD`1Sekbqcya;CzA7%R@a}>=PK~j) zO`(y9kj9px#YMYU3;%6ar|u%ubb`ZrL7?0TR%w}7n9O3G43sFNJ021q&wM&yLM^&# z6?S6V+6g`KMSNA#YE`++Km~Q?K<>03Ov*k^S}#lWQdm;8iIw{T;n)HvPigI+b_ohB zs|&^k#ht79>r~SqE78lVPRfurI;1}LP4&>udUTucLgiU-8aD~-6IrTFr?~c%R+FDK zXbjZgr~Tu9mY>De4<@s!JXn3%HD3j$$qW{2??A&rY-4d?V^MDH<+8@I-p2CY1`DDL zYoW1vUsG*hQ+-MkYhOmiFR`?;rklT-*zz}S?Yq$tc;j};jqb7=y}dX3pWSHt1=oR^ zb@=eRfz2@z!lPx)ZG6NDa=oI5xouof&^i1 zu!YPZVHZg3BU|K#qy-h&nF}aV4ABN+iqG2=h0zp}&?PqXY9}Zj=41m&w6XQv*}%hR zkSrT%Xx46c1L_d)LDQ@49ZYDL+dfPXndOT55ITIQ2>Vn>kpk5`5HI2aK^(N)a{xww zDN=;4REpt>u$x}u++5LBDmYh$YM`|oQoxG-!niYUOA=tRZMTo}P$66-xd^PUL}Dpj z$*Em|By1f|`X%<}vh&TiP116Ne=`YCprE|j7(dF*;36R@3V6W`>4opnBEm|k&^Zzj zMFxh5*jgegf{m`kTZB`3Syy{md63g@F~v#*e61Iwio5o_2h{0B2}{5Oq3t^0T^;Z+ z2{nHay7Rklz^osg!Imb&!kM=*S8rDd!Nq@zjZgGHasjv>ff=(l(4+ruYCl%6bcdtU zFPs6GQri@ncRzfD$p=A-zeTghrAo-qt9^*=@oE_WB9Gd?@w??;&?F#37DBe&8Xs)dn}B4gu<=94Vmw-w3U%P&BNSX2G+0IyHcN%}2O;k;2X~ea zKCMKsgCJ85%(Sv&XC;)&1e&&sn&v}=95jZ5CjAzx7>DiSi|wHT!eOug3MOR~Rmkr| zlAw*i)@0HH-`EGDRWNeO`0XquUj*s2Wfng}eK^R&dn9j}>`+D@ztQts_#GGZrLLm&WU$_1p$dSV+KuG%t z2va_TZJxpLIUjGq)9ypX9K4~xMW~nxi<=lw#-R+kvxayf_25Bd+@MbL;50=9!5>5z zJVbij-&0Ox@WO?l$L48a1%2mJ|$sbyJ&S~lSFAU~R?#`g9MNv>5T$B_K>^~!31MM>-!F^JNeo%za z1ER7=JADOa& z;REs{Av#{hlL~lJ#XL#V@aZMP05FP+F5sbAyy=ajYD7+UV?HY2JXR|N(rMvbW)4n6 zBDiMGlOKp4w#Z`&@;w{g!$-Lj7O-tdU&?@7Y!PyL0N)HV*M*abt7HLj5M>}TOdYgS z5@`mIj%1zyy8puHK2&voig!jpxqtP)bEs*6O%V%hd4VB!UJQZ9lVJDSEGl`Jrai(f z6zJ+l-@KUk!e_OvVqHjti8`!+EqNhac4x5s&fxX^t+~ykgQ5SuyE!<;e1@n3Btfgq z^IvXtb|T}(e7;Fe99)Du9quJoH{F zFnvs1m+%6de({3}XH(y=d37Gr&I02^Yj_y6$AlKKCrP0Cbv2~tZY<;uz>imo{o(^F zL{VuHHkS`Eh6nUR-_ zA>k0hqt@CA%=FUk%GYY4P|VbKY|&Ijn24c;S^O8dlT*v>U%zX<{Eis-Vf^0@L|B{R zK@27Yp<~5EcnG-~U{u*FVjNKrf_qY7H#vQwq6h+B`Kl#&k_(6cV#p_VG-*Y8WHjpp z`qXn!mxnk&f`li5J4{%GyvQBiTTxeta$VGqgm}dlN#ntebAjhfNR}|`OPUR$&c*|9 z0vXb$;Ibe6lU*oWH7sij%sY;A6!2G@@rVlt-Xpf=K&vew1CT)xRp)80ri|*65d#x2*#s0C1~n3o>_sfSy65iLtr(F^n6@z&7dg4Q`#wp<-(B7?ZEhmG zA@oa%-Mp`%^{oOiNxO)1QC#5?ePiW~N*5WJn0&61I{E8c*MnAPGF6+7zV)aTXu48n zD<_8Q+$uC*baOuVGzG{d^~7{8m58fLsT%vW1pSPCB)9_>4uck>jDkiQ> zkJPfI;wPFRKD9$*{A9y*d5FhjIe(ZyU$jytJ5X^1^2nuvm|`MLgv>N7i*7bWUeC&! z-|c|?lq@(p9lA9iE#@LSUn8RkC7-8<%64-kRE<-X3r=9i)bdUyk*P3?MPiJw^X<_$ zkAs`pG>N^7m5KE-Mny23f7m64G$G;{ODUY`ZzS)_;G(b^8nLTZD7W8H2>0tA!V>Nh z?8`Do1k=^XAVt%0kmT#~5w8M4iS|Kae}Ts<06SXMJlSfj|%(CK`E+G!nHx(#P# zpR0yVliaoB>T!6MLef0_xSU~f{W-1Fl_IU{t=?(ZTe<4Szw{QO+Y8zklRkbn$ubZ4q|&IK zC0Hryz&C#S(0noXvy#m1Hq|V9!=FGlGGUb6~vt+v}dh2qxwEPZViQ+OTDZ7Pgq^P)v<=w0BD9>>v0Um zDkmtJCIdNg6kd~H)E%(V zQu~RKFkBH5{PNQ!w_y}H;320Y_6AATKoi0aej~VUN1nlWx>SLkQ_|Vp;qMdcP>9-&>YYZCFX|*= zYx9XX0fibkRJSeDaIVVn^q}FD1&qX;>M^u9+GY{oWyGsGehQ9Mo}tjgHZQ1VYdfO1 zrZbcn5^;`U4yLjVN?N91{O*8^m3s2tN#rG=vZId5PckN^8f#GBmWDOG4b1;Giy|5V zZG4_WeR~LBv^(3CzWgJASUalN9v19`;dc#_#apP;{`5sghI5l?p~4~=siPbwTw5H5 z+GibRQcKM^FocK8QIFbej6da{`*$1K{^{q8L&di>qQG|s4-;}Nx<{WByY;Q6`LIDM z^S&szm3lZf%%%G&%-*W4ZhvK+DL-)jEETRoo`q{_14-V@14)Ayx11?iQZq0Tn3DxG zxUe`Ns6#tGAN_8 ze_UOD9iyAS42fMkCoMZLl5V;TwMRb??U|Y89dbmg@pBwfKIj%NqNtTA%-q1a zYQiJu9feiwTDGUw%|C5=ME}we#qDF41U+xgJvr(UY{(mPg4N5qzTF2N_PS`xi@$Qm zm7ySjm*ikv!0*dfIuKb=VibmSInV9DP^n}j^v+bo!KjIn7lfLYC$9CDq$t}?;WEmJ z0)sv7OP%vo)YwuH^BOlOC1cpM9#z7!x^{>gl$FEldbI60 zkgrDtIK=lIx=Y+UL>O|z8g_tyH2wq#sghrN6oFD`2rBq55bVE<57oQQ6fr6P;e+E2 zOLoseChS}Zcg8ZMUe+#J**32~z7-creMOMJFFVV!UMiv_YXsW}!LLu!h_GDSSX=RD zp2GSRD~F?2oORUR+8r}ww6G-&6G5SgGr>FA=QG5!wbv{U#I}0=0AYKm4~!37`;aah zHmnPSFoS~rvH2^{zO(NBuuQ{6)Z$KSSw`OVm^@MzIP4kdVX-a#mh~Bwf5pz;FPWE| zvJS(UgD({f2CqC+iTqE!IwA*x4DdwUp?vbg1C-t6?t9*$d5M>2+_Cz91cfJmWhcgH z*-CcoJ%l+O(;yVkA!z_V!lFx&m0jR0Aw`zUSBA^g){=Rm=pyl8$vFV1HM);}ZZkH2sidfpK@a@hHraOxqDn zSBb_bl>pVeY%@06;K)uN)?loc(s3K{8;6uAk|yBu98jl=JP(eLy2$(t7cx@9agRj~ zQgGwKRRsuTUvjGykMrf3sPau}0h&l9X!!@USOta$VTy#k78^D@H$l7Lj4XBAi(e&! znEOA3tyM{{nL$<*~_EHZ@SsAa2vaj^fVEldc?R%fA zHF&WecySnkqbbx%=cV zNI94GM0YckaPnnK{Zpx z(-I-OP4!3N2uFOaWa^z#Q>#M90nZ?-#oaWQ>e~F%pgJIa=@as@qR^FHcO%*7rpkmi zgq*AXjAfCr4gS;)v+;3)^G!$Rn=I_>O5AI0i!1`z&Nk$$BR%o-wWFAld;}XeQCjN+ z8Gv__QHN4cn+cY&){LLCbd%li1KpPUX76>USk%fISx9oyH`~)O9qF3nB1zmsm7T@wvrO*6*FGCp>n7bvpIB`c|#(K%j3AYdMy$Q(TT zZ(Fklef*KKT;nZS=)?p~dj1h5RRWzMjUK~VtU|toF5P+10s<^b#)(=-@Bhae@SpbN@Fo@9z(Gp;I98lx~Hh-poGc7NuNVpv-r$$0^soNwO9>pHQ z_*@Wr$im*?9`Gi?wsQwkxCkT(cC96q!iDeYNq4*`??|&w?olIiYcLt;&CFv&05|V} zVJ*2AIqS>*yJf^Gt-sOoL6P^s0p;YhNrOGiEX8(}&Ds{RpLAgh~!d z1>2g%qlYe_Orq~=MFXNlxWLGNgie9uDEd0xu!L2ZG?N}t=@1A=6S%;i6qpmkvPeX@lfji0|_j_%Y1r=4YYOmyWSlsBJfZTc#+eOf!7?EanC=?{R(6WztT z|FpXV4o=i?T^=cLY<^GtWA?xwv^KXao!nq^wTPGs+JysX*9<9q_J}R^Uv0DMCL0?k z3n~$qN`@edhyXdrrb_?3!x#e&vLLhj_+MY|KKL;%%KwtvrGgTb4Yvr4h-D?P>^)dY zMk7XN%(VMELueIUD^mK(h@t5q4bgXI_v* z$@AVj&--6IZ;lS?$b3Gq|9RKpX?YIpmG(sq(~Dw!YD5IawFJHcvn$9v69<5P6qqU! z)F&dRk5QxX!y_y^+2|QAv-iE`=NhiNFe|(od??vGEm8?1hYJ1yk@879ij$++FQ9&Y==2&n! zs>*xRg^?DGalKT-TJX+`#W<4@+W#m50BEnyk8Lu1OET%34C{Sh(KpPAJNqx%Ei5eE z4NYdeOr-@P#bsp!;1&zT1y7qdA6H`N)}Vn7{*Xxg>}|OG~KnbQOOjk5{#ASh6P%RhMo^HqqmXq|M_j@@wST@MAfz5oZmKTys+Iey?nSxsnuqHWf6z{95x#?!oQ3 z1j=2tH6(Nvtkqi@BYmh1{jjW1R_Ga~hRKw+kI|xs6;i2k*Oz2Gs0tPsb&4ii(WU&+ z`^D!UI@2sS)v0PI@xjef^#Io2Jd1tTacFji8HI@Pp7(Y{?yAQ*V}fQ~UQ&EtuOtFz zv_GX+A|9^5HG6%cn%?IN1y$ZTI{745rIKnUS|}L}$NF2hXw&V*{7z=gwIKt#_ zwr)xFj&ZNwkGx`DU;O=~zs3>3 z5VW5kaC@5OHZSE?sd;bi{P^YTu_9fcL>sn`jOH%>C)7fUsSTw%bk{+VaSD_;S+Nhx zp-WA-W3o6F@9lES{!pM+XZ#4ZRdN01JSLtCHZEy;9sl<~O22UX*p8_?suk)kMPguUV$i+B;HkurSBart5)TRz z$zn-iDoKa*lfo^NBHWV>A54lokrb7l6kV8fq#`M%HR4H;KvE&Su z&A`@-(3~H?w0~qd((JoI9UkleK11NnKS*m$&bybKKb2h2nvCEh84Y47Q5YF*h7Kp& z@3gvgGQDsy`SOX=SJF?H6#fhqJH^oYQR+z3;ZdVG*(S~s&W==*ocL0elxqEy8q1X0 zFVZsC_SYZ$Rd?^F4uDd?Gc=Ym{HfW!)tj}iQf_`pX%(bYyVHo;jFUVdx*MUuW4LpE znXzg9L0~&a2;d-=*HQ%+c@%W$!S2crXbn`aw2Ym5Ls2 zPaQ2x8>>hgANghtWQqA_Hl`rXR3PnJ;6Izvrd7_&=%1O5%Bgoh(@=4zrkfE0AyI7F zok(vNHp89pVRq`wi&tm9yfjIn`$h5mHt9^4g(z?P{Q<|IUoQ`yeS6~UyC0_zob1AM zD%1U?Kga!RCh?zE*VIRuY7Q56 z9a+~HFW%{QtHZzMDZRunYP`9Pa#>F=_@rC(`>$HuO6zP1-IxvSnOf&7hQ~fgse=cN z8isB88#|vg2X@7O{_ss_o_%QKg6`4pyPkE#JiT@7<9FS~?)Y~zEk}Roz3flXMS F{{gR&nqvR} literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js new file mode 100644 index 0000000..5cee9ed --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js @@ -0,0 +1,72 @@ +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 += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + + tinymce.each(ed.plugins, function(p, n) { + var info; + + if (!p.getInfo) + return; + + html += ''; + + info = p.getInfo(); + + if (info.infourl != null && info.infourl != '') + html += ''; + else + html += ''; + + if (info.authorurl != null && info.authorurl != '') + html += ''; + else + html += ''; + + html += ''; + html += ''; + + document.getElementById('plugins_tab').style.display = ''; + + }); + + html += ''; + html += '
    ' + ed.getLang('advanced_dlg.about_plugin') + '' + ed.getLang('advanced_dlg.about_author') + '' + ed.getLang('advanced_dlg.about_version') + '
    ' + info.longname + '' + info.longname + '' + info.author + '' + info.author + '' + info.version + '
    '; + + 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 = ''; + document.getElementById('iframecontainer').innerHTML = html; + document.getElementById('help_tab').style.display = 'block'; + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js new file mode 100644 index 0000000..7fe7810 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js @@ -0,0 +1,37 @@ +tinyMCEPopup.requireLangPack(); + +var AnchorDialog = { + init : function(ed) { + var action, elm, f = document.forms[0]; + + this.editor = ed; + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + v = ed.dom.getAttrib(elm, 'name'); + + if (v) { + this.action = 'update'; + f.anchorName.value = v; + } + + f.insert.value = ed.getLang(elm ? 'update' : 'insert'); + }, + + update : function() { + var ed = this.editor, elm, name = document.forms[0].anchorName.value; + + tinyMCEPopup.restoreSelection(); + + if (this.action != 'update') + ed.selection.collapse(1); + + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + if (elm) + elm.name = name; + else + ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, '')); + + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog); diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js new file mode 100644 index 0000000..8c5aea1 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js @@ -0,0 +1,335 @@ +/** + * 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 = [ + [' ', ' ', true, 'no-break space'], + ['&', '&', true, 'ampersand'], + ['"', '"', true, 'quotation mark'], +// finance + ['¢', '¢', true, 'cent sign'], + ['€', '€', true, 'euro sign'], + ['£', '£', true, 'pound sign'], + ['¥', '¥', true, 'yen sign'], +// signs + ['©', '©', true, 'copyright sign'], + ['®', '®', true, 'registered sign'], + ['™', '™', true, 'trade mark sign'], + ['‰', '‰', true, 'per mille sign'], + ['µ', 'µ', true, 'micro sign'], + ['·', '·', true, 'middle dot'], + ['•', '•', true, 'bullet'], + ['…', '…', true, 'three dot leader'], + ['′', '′', true, 'minutes / feet'], + ['″', '″', true, 'seconds / inches'], + ['§', '§', true, 'section sign'], + ['¶', '¶', true, 'paragraph sign'], + ['ß', 'ß', true, 'sharp s / ess-zed'], +// quotations + ['‹', '‹', true, 'single left-pointing angle quotation mark'], + ['›', '›', true, 'single right-pointing angle quotation mark'], + ['«', '«', true, 'left pointing guillemet'], + ['»', '»', true, 'right pointing guillemet'], + ['‘', '‘', true, 'left single quotation mark'], + ['’', '’', true, 'right single quotation mark'], + ['“', '“', true, 'left double quotation mark'], + ['”', '”', true, 'right double quotation mark'], + ['‚', '‚', true, 'single low-9 quotation mark'], + ['„', '„', true, 'double low-9 quotation mark'], + ['<', '<', true, 'less-than sign'], + ['>', '>', true, 'greater-than sign'], + ['≤', '≤', true, 'less-than or equal to'], + ['≥', '≥', true, 'greater-than or equal to'], + ['–', '–', true, 'en dash'], + ['—', '—', true, 'em dash'], + ['¯', '¯', true, 'macron'], + ['‾', '‾', true, 'overline'], + ['¤', '¤', true, 'currency sign'], + ['¦', '¦', true, 'broken bar'], + ['¨', '¨', true, 'diaeresis'], + ['¡', '¡', true, 'inverted exclamation mark'], + ['¿', '¿', true, 'turned question mark'], + ['ˆ', 'ˆ', true, 'circumflex accent'], + ['˜', '˜', true, 'small tilde'], + ['°', '°', true, 'degree sign'], + ['−', '−', true, 'minus sign'], + ['±', '±', true, 'plus-minus sign'], + ['÷', '÷', true, 'division sign'], + ['⁄', '⁄', true, 'fraction slash'], + ['×', '×', true, 'multiplication sign'], + ['¹', '¹', true, 'superscript one'], + ['²', '²', true, 'superscript two'], + ['³', '³', true, 'superscript three'], + ['¼', '¼', true, 'fraction one quarter'], + ['½', '½', true, 'fraction one half'], + ['¾', '¾', true, 'fraction three quarters'], +// math / logical + ['ƒ', 'ƒ', true, 'function / florin'], + ['∫', '∫', true, 'integral'], + ['∑', '∑', true, 'n-ary sumation'], + ['∞', '∞', true, 'infinity'], + ['√', '√', true, 'square root'], + ['∼', '∼', false,'similar to'], + ['≅', '≅', false,'approximately equal to'], + ['≈', '≈', true, 'almost equal to'], + ['≠', '≠', true, 'not equal to'], + ['≡', '≡', true, 'identical to'], + ['∈', '∈', false,'element of'], + ['∉', '∉', false,'not an element of'], + ['∋', '∋', false,'contains as member'], + ['∏', '∏', true, 'n-ary product'], + ['∧', '∧', false,'logical and'], + ['∨', '∨', false,'logical or'], + ['¬', '¬', true, 'not sign'], + ['∩', '∩', true, 'intersection'], + ['∪', '∪', false,'union'], + ['∂', '∂', true, 'partial differential'], + ['∀', '∀', false,'for all'], + ['∃', '∃', false,'there exists'], + ['∅', '∅', false,'diameter'], + ['∇', '∇', false,'backward difference'], + ['∗', '∗', false,'asterisk operator'], + ['∝', '∝', false,'proportional to'], + ['∠', '∠', false,'angle'], +// undefined + ['´', '´', true, 'acute accent'], + ['¸', '¸', true, 'cedilla'], + ['ª', 'ª', true, 'feminine ordinal indicator'], + ['º', 'º', true, 'masculine ordinal indicator'], + ['†', '†', true, 'dagger'], + ['‡', '‡', true, 'double dagger'], +// alphabetical special chars + ['À', 'À', true, 'A - grave'], + ['Á', 'Á', true, 'A - acute'], + ['Â', 'Â', true, 'A - circumflex'], + ['Ã', 'Ã', true, 'A - tilde'], + ['Ä', 'Ä', true, 'A - diaeresis'], + ['Å', 'Å', true, 'A - ring above'], + ['Æ', 'Æ', true, 'ligature AE'], + ['Ç', 'Ç', true, 'C - cedilla'], + ['È', 'È', true, 'E - grave'], + ['É', 'É', true, 'E - acute'], + ['Ê', 'Ê', true, 'E - circumflex'], + ['Ë', 'Ë', true, 'E - diaeresis'], + ['Ì', 'Ì', true, 'I - grave'], + ['Í', 'Í', true, 'I - acute'], + ['Î', 'Î', true, 'I - circumflex'], + ['Ï', 'Ï', true, 'I - diaeresis'], + ['Ð', 'Ð', true, 'ETH'], + ['Ñ', 'Ñ', true, 'N - tilde'], + ['Ò', 'Ò', true, 'O - grave'], + ['Ó', 'Ó', true, 'O - acute'], + ['Ô', 'Ô', true, 'O - circumflex'], + ['Õ', 'Õ', true, 'O - tilde'], + ['Ö', 'Ö', true, 'O - diaeresis'], + ['Ø', 'Ø', true, 'O - slash'], + ['Œ', 'Œ', true, 'ligature OE'], + ['Š', 'Š', true, 'S - caron'], + ['Ù', 'Ù', true, 'U - grave'], + ['Ú', 'Ú', true, 'U - acute'], + ['Û', 'Û', true, 'U - circumflex'], + ['Ü', 'Ü', true, 'U - diaeresis'], + ['Ý', 'Ý', true, 'Y - acute'], + ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], + ['Þ', 'Þ', true, 'THORN'], + ['à', 'à', true, 'a - grave'], + ['á', 'á', true, 'a - acute'], + ['â', 'â', true, 'a - circumflex'], + ['ã', 'ã', true, 'a - tilde'], + ['ä', 'ä', true, 'a - diaeresis'], + ['å', 'å', true, 'a - ring above'], + ['æ', 'æ', true, 'ligature ae'], + ['ç', 'ç', true, 'c - cedilla'], + ['è', 'è', true, 'e - grave'], + ['é', 'é', true, 'e - acute'], + ['ê', 'ê', true, 'e - circumflex'], + ['ë', 'ë', true, 'e - diaeresis'], + ['ì', 'ì', true, 'i - grave'], + ['í', 'í', true, 'i - acute'], + ['î', 'î', true, 'i - circumflex'], + ['ï', 'ï', true, 'i - diaeresis'], + ['ð', 'ð', true, 'eth'], + ['ñ', 'ñ', true, 'n - tilde'], + ['ò', 'ò', true, 'o - grave'], + ['ó', 'ó', true, 'o - acute'], + ['ô', 'ô', true, 'o - circumflex'], + ['õ', 'õ', true, 'o - tilde'], + ['ö', 'ö', true, 'o - diaeresis'], + ['ø', 'ø', true, 'o slash'], + ['œ', 'œ', true, 'ligature oe'], + ['š', 'š', true, 's - caron'], + ['ù', 'ù', true, 'u - grave'], + ['ú', 'ú', true, 'u - acute'], + ['û', 'û', true, 'u - circumflex'], + ['ü', 'ü', true, 'u - diaeresis'], + ['ý', 'ý', true, 'y - acute'], + ['þ', 'þ', true, 'thorn'], + ['ÿ', 'ÿ', true, 'y - diaeresis'], + ['Α', 'Α', true, 'Alpha'], + ['Β', 'Β', true, 'Beta'], + ['Γ', 'Γ', true, 'Gamma'], + ['Δ', 'Δ', true, 'Delta'], + ['Ε', 'Ε', true, 'Epsilon'], + ['Ζ', 'Ζ', true, 'Zeta'], + ['Η', 'Η', true, 'Eta'], + ['Θ', 'Θ', true, 'Theta'], + ['Ι', 'Ι', true, 'Iota'], + ['Κ', 'Κ', true, 'Kappa'], + ['Λ', 'Λ', true, 'Lambda'], + ['Μ', 'Μ', true, 'Mu'], + ['Ν', 'Ν', true, 'Nu'], + ['Ξ', 'Ξ', true, 'Xi'], + ['Ο', 'Ο', true, 'Omicron'], + ['Π', 'Π', true, 'Pi'], + ['Ρ', 'Ρ', true, 'Rho'], + ['Σ', 'Σ', true, 'Sigma'], + ['Τ', 'Τ', true, 'Tau'], + ['Υ', 'Υ', true, 'Upsilon'], + ['Φ', 'Φ', true, 'Phi'], + ['Χ', 'Χ', true, 'Chi'], + ['Ψ', 'Ψ', true, 'Psi'], + ['Ω', 'Ω', true, 'Omega'], + ['α', 'α', true, 'alpha'], + ['β', 'β', true, 'beta'], + ['γ', 'γ', true, 'gamma'], + ['δ', 'δ', true, 'delta'], + ['ε', 'ε', true, 'epsilon'], + ['ζ', 'ζ', true, 'zeta'], + ['η', 'η', true, 'eta'], + ['θ', 'θ', true, 'theta'], + ['ι', 'ι', true, 'iota'], + ['κ', 'κ', true, 'kappa'], + ['λ', 'λ', true, 'lambda'], + ['μ', 'μ', true, 'mu'], + ['ν', 'ν', true, 'nu'], + ['ξ', 'ξ', true, 'xi'], + ['ο', 'ο', true, 'omicron'], + ['π', 'π', true, 'pi'], + ['ρ', 'ρ', true, 'rho'], + ['ς', 'ς', true, 'final sigma'], + ['σ', 'σ', true, 'sigma'], + ['τ', 'τ', true, 'tau'], + ['υ', 'υ', true, 'upsilon'], + ['φ', 'φ', true, 'phi'], + ['χ', 'χ', true, 'chi'], + ['ψ', 'ψ', true, 'psi'], + ['ω', 'ω', true, 'omega'], +// symbols + ['ℵ', 'ℵ', false,'alef symbol'], + ['ϖ', 'ϖ', false,'pi symbol'], + ['ℜ', 'ℜ', false,'real part symbol'], + ['ϑ','ϑ', false,'theta symbol'], + ['ϒ', 'ϒ', false,'upsilon - hook symbol'], + ['℘', '℘', false,'Weierstrass p'], + ['ℑ', 'ℑ', false,'imaginary part'], +// arrows + ['←', '←', true, 'leftwards arrow'], + ['↑', '↑', true, 'upwards arrow'], + ['→', '→', true, 'rightwards arrow'], + ['↓', '↓', true, 'downwards arrow'], + ['↔', '↔', true, 'left right arrow'], + ['↵', '↵', false,'carriage return'], + ['⇐', '⇐', false,'leftwards double arrow'], + ['⇑', '⇑', false,'upwards double arrow'], + ['⇒', '⇒', false,'rightwards double arrow'], + ['⇓', '⇓', false,'downwards double arrow'], + ['⇔', '⇔', false,'left right double arrow'], + ['∴', '∴', false,'therefore'], + ['⊂', '⊂', false,'subset of'], + ['⊃', '⊃', false,'superset of'], + ['⊄', '⊄', false,'not a subset of'], + ['⊆', '⊆', false,'subset of or equal to'], + ['⊇', '⊇', false,'superset of or equal to'], + ['⊕', '⊕', false,'circled plus'], + ['⊗', '⊗', false,'circled times'], + ['⊥', '⊥', false,'perpendicular'], + ['⋅', '⋅', false,'dot operator'], + ['⌈', '⌈', false,'left ceiling'], + ['⌉', '⌉', false,'right ceiling'], + ['⌊', '⌊', false,'left floor'], + ['⌋', '⌋', false,'right floor'], + ['⟨', '〈', false,'left-pointing angle bracket'], + ['⟩', '〉', false,'right-pointing angle bracket'], + ['◊', '◊', true,'lozenge'], + ['♠', '♠', false,'black spade suit'], + ['♣', '♣', true, 'black club suit'], + ['♥', '♥', true, 'black heart suit'], + ['♦', '♦', true, 'black diamond suit'], + [' ', ' ', false,'en space'], + [' ', ' ', false,'em space'], + [' ', ' ', false,'thin space'], + ['‌', '‌', false,'zero width non-joiner'], + ['‍', '‍', false,'zero width joiner'], + ['‎', '‎', false,'left-to-right mark'], + ['‏', '‏', false,'right-to-left mark'], + ['­', '­', false,'soft hyphen'] +]; + +tinyMCEPopup.onInit.add(function() { + tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML()); +}); + +function renderCharMapHTML() { + var charsPerRow = 20, tdWidth=20, tdHeight=20, i; + var html = ''; + var cols=-1; + + for (i=0; i' + + '' + + charmap[i][1] + + ''; + if ((cols+1) % charsPerRow == 0) + html += ''; + } + } + + if (cols % charsPerRow > 0) { + var padd = charsPerRow - (cols % charsPerRow); + for (var i=0; i '; + } + + html += '
    '; + + 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 = '&' + codeA; + elmA.innerHTML = '&' + codeB; + elmN.innerHTML = codeN; +} diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js new file mode 100644 index 0000000..fd9700f --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js @@ -0,0 +1,253 @@ +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':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', + '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown', + '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue', + '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod', + '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen', + '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue', + '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue', + '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen', + '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey', + '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory', + '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue', + '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen', + '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey', + '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', + '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue', + '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin', + '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid', + '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff', + '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue', + '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver', + '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen', + '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', + '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen' +}; + +function init() { + var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')); + + tinyMCEPopup.resizeToInnerSize(); + + generatePicker(); + + if (inputColor) { + changeFinalColor(inputColor); + + col = convertHexToRGB(inputColor); + + if (col) + updateLight(col.r, col.g, col.b); + } +} + +function insertAction() { + var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); + + tinyMCEPopup.restoreSelection(); + + if (f) + f(color); + + tinyMCEPopup.close(); +} + +function showColor(color, name) { + if (name) + document.getElementById("colorname").innerHTML = name; + + document.getElementById("preview").style.backgroundColor = color; + document.getElementById("color").value = color.toLowerCase(); +} + +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 += '
    '; + } + + el.innerHTML = h; +} + +function generateWebColors() { + var el = document.getElementById('webcolors'), h = '', i; + + if (el.className == 'generated') + return; + + h += '' + + ''; + + for (i=0; i' + + '' + + ''; + if ((i+1) % 18 == 0) + h += ''; + } + + h += '
    '; + + el.innerHTML = h; + el.className = 'generated'; +} + +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 += '' + } + + el.innerHTML = h; + el.className = 'generated'; +} + +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; + + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.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=0) && (i'); + }, + + 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', '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 = 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, + 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); + } else { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + updateStyle : function() { + var dom = tinyMCEPopup.dom, st, v, f = document.forms[0]; + + if (tinyMCEPopup.editor.settings.inline_styles) { + st = tinyMCEPopup.dom.parseStyle(this.styleVal); + + // Handle align + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') { + st['float'] = v; + delete st['vertical-align']; + } else { + st['vertical-align'] = v; + delete st['float']; + } + } else { + delete st['float']; + delete st['vertical-align']; + } + + // Handle border + v = f.border.value; + if (v || v == '0') { + if (v == '0') + st['border'] = '0'; + else + st['border'] = v + 'px solid black'; + } else + delete st['border']; + + // Handle hspace + v = f.hspace.value; + if (v) { + delete st['margin']; + st['margin-left'] = v + 'px'; + st['margin-right'] = v + 'px'; + } else { + delete st['margin-left']; + delete st['margin-right']; + } + + // Handle vspace + v = f.vspace.value; + if (v) { + delete st['margin']; + st['margin-top'] = v + 'px'; + st['margin-bottom'] = v + 'px'; + } else { + delete st['margin-top']; + delete st['margin-bottom']; + } + + // Merge + st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img'); + this.styleVal = dom.serializeStyle(st, 'img'); + } + }, + + getAttrib : function(e, at) { + var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; + + if (ed.settings.inline_styles) { + switch (at) { + case 'align': + if (v = dom.getStyle(e, 'float')) + return v; + + if (v = dom.getStyle(e, 'vertical-align')) + return v; + + break; + + case 'hspace': + v = dom.getStyle(e, 'margin-left') + v2 = dom.getStyle(e, 'margin-right'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'vspace': + v = dom.getStyle(e, 'margin-top') + v2 = dom.getStyle(e, 'margin-bottom'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'border': + v = 0; + + tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { + sv = dom.getStyle(e, 'border-' + sv + '-width'); + + // False or not the same as prev + if (!sv || (sv != v && v !== 0)) { + v = 0; + return false; + } + + if (sv) + v = sv; + }); + + if (v) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + } + } + + if (v = dom.getAttrib(e, at)) + return v; + + return ''; + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.width.value = f.height.value = ""; + }, + + updateImageData : function() { + var f = document.forms[0], t = ImageDialog; + + if (f.width.value == "") + f.width.value = t.preloadImg.width; + + if (f.height.value == "") + f.height.value = t.preloadImg.height; + }, + + getImageData : function() { + var f = document.forms[0]; + + this.preloadImg = new Image(); + this.preloadImg.onload = this.updateImageData; + this.preloadImg.onerror = this.resetImageData; + this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js new file mode 100644 index 0000000..f67a5bc --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js @@ -0,0 +1,156 @@ +tinyMCEPopup.requireLangPack(); + +var LinkDialog = { + preInit : function() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); + }, + + 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; + + tinyMCEPopup.restoreSelection(); + e = ed.dom.getParent(ed.selection.getNode(), 'A'); + + // Remove element if there is no href + if (!f.href.value) { + if (e) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + b = ed.selection.getBookmark(); + ed.dom.remove(e, 1); + ed.selection.moveToBookmark(b); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (e == null) { + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", 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 : f.href.value, + 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 : f.href.value, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + + // Don't move caret if selection was image + if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') { + ed.focus(); + ed.selection.select(e); + ed.selection.collapse(0); + tinyMCEPopup.storeSelection(); + } + + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + }, + + checkPrefix : function(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external'))) + n.value = 'http://' + n.value; + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillClassList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { + cl = []; + + tinymce.each(v.split(';'), function(v) { + var p = v.split('='); + + cl.push({'title' : p[0], 'class' : p[1]}); + }); + } else + cl = tinyMCEPopup.editor.dom.getClasses(); + + if (cl.length > 0) { + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + + tinymce.each(cl, function(o) { + lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillTargetList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v; + + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self'); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank'); + + if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) { + tinymce.each(v.split(','), function(v) { + v = v.split('='); + lst.options[lst.options.length] = new Option(v[0], v[1]); + }); + } + } +}; + +LinkDialog.preInit(); +tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog); diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js new file mode 100644 index 0000000..2793286 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js @@ -0,0 +1,62 @@ +tinyMCEPopup.requireLangPack(); +tinyMCEPopup.onInit.add(onLoadInit); + +function saveContent() { + tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true}); + tinyMCEPopup.close(); +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + // Remove Gecko spellchecking + if (tinymce.isGecko) + document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck"); + + document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true}); + + if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) { + setWrap('soft'); + document.getElementById('wraped').checked = true; + } + + resizeInputs(); +} + +function setWrap(val) { + var v, n, s = document.getElementById('htmlSource'); + + s.wrap = val; + + if (!tinymce.isIE) { + v = s.value; + n = s.cloneNode(false); + n.setAttribute("wrap", val); + s.parentNode.replaceChild(n, s); + n.value = v; + } +} + +function toggleWordWrap(elm) { + if (elm.checked) + setWrap('soft'); + else + setWrap('off'); +} + +var wHeight=0, wWidth=0, owHeight=0, owWidth=0; + +function resizeInputs() { + var el = document.getElementById('htmlSource'); + + if (!tinymce.isIE) { + wHeight = self.innerHeight - 65; + wWidth = self.innerWidth - 16; + } else { + wHeight = document.body.clientHeight - 70; + wWidth = document.body.clientWidth - 16; + } + + el.style.height = Math.abs(wHeight) + 'px'; + el.style.width = Math.abs(wWidth) + 'px'; +} diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js new file mode 100644 index 0000000..69694b1 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js @@ -0,0 +1,62 @@ +tinyMCE.addI18n('en.advanced',{ +style_select:"Styles", +font_size:"Font size", +fontdefault:"Font family", +block:"Format", +paragraph:"Paragraph", +div:"Div", +address:"Address", +pre:"Preformatted", +h1:"Heading 1", +h2:"Heading 2", +h3:"Heading 3", +h4:"Heading 4", +h5:"Heading 5", +h6:"Heading 6", +blockquote:"Blockquote", +code:"Code", +samp:"Code sample", +dt:"Definition term ", +dd:"Definition description", +bold_desc:"Bold (Ctrl+B)", +italic_desc:"Italic (Ctrl+I)", +underline_desc:"Underline (Ctrl+U)", +striketrough_desc:"Strikethrough", +justifyleft_desc:"Align left", +justifycenter_desc:"Align center", +justifyright_desc:"Align right", +justifyfull_desc:"Align full", +bullist_desc:"Unordered list", +numlist_desc:"Ordered list", +outdent_desc:"Outdent", +indent_desc:"Indent", +undo_desc:"Undo (Ctrl+Z)", +redo_desc:"Redo (Ctrl+Y)", +link_desc:"Insert/edit link", +unlink_desc:"Unlink", +image_desc:"Insert/edit image", +cleanup_desc:"Cleanup messy code", +code_desc:"Edit HTML Source", +sub_desc:"Subscript", +sup_desc:"Superscript", +hr_desc:"Insert horizontal ruler", +removeformat_desc:"Remove formatting", +custom1_desc:"Your custom description here", +forecolor_desc:"Select text color", +backcolor_desc:"Select background color", +charmap_desc:"Insert custom character", +visualaid_desc:"Toggle guidelines/invisible elements", +anchor_desc:"Insert/edit anchor", +cut_desc:"Cut", +copy_desc:"Copy", +paste_desc:"Paste", +image_props_desc:"Image properties", +newdocument_desc:"New document", +help_desc:"Help", +blockquote_desc:"Blockquote", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?", +path:"Path", +newdocument:"Are you sure you want clear all contents?", +toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X", +more_colors:"More colors" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js b/lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js new file mode 100644 index 0000000..9d124d7 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js @@ -0,0 +1,51 @@ +tinyMCE.addI18n('en.advanced_dlg',{ +about_title:"About TinyMCE", +about_general:"About", +about_help:"Help", +about_license:"License", +about_plugins:"Plugins", +about_plugin:"Plugin", +about_author:"Author", +about_version:"Version", +about_loaded:"Loaded plugins", +anchor_title:"Insert/edit anchor", +anchor_name:"Anchor name", +code_title:"HTML Source Editor", +code_wordwrap:"Word wrap", +colorpicker_title:"Select a color", +colorpicker_picker_tab:"Picker", +colorpicker_picker_title:"Color picker", +colorpicker_palette_tab:"Palette", +colorpicker_palette_title:"Palette colors", +colorpicker_named_tab:"Named", +colorpicker_named_title:"Named colors", +colorpicker_color:"Color:", +colorpicker_name:"Name:", +charmap_title:"Select custom character", +image_title:"Insert/edit image", +image_src:"Image URL", +image_alt:"Image description", +image_list:"Image list", +image_border:"Border", +image_dimensions:"Dimensions", +image_vspace:"Vertical space", +image_hspace:"Horizontal space", +image_align:"Alignment", +image_align_baseline:"Baseline", +image_align_top:"Top", +image_align_middle:"Middle", +image_align_bottom:"Bottom", +image_align_texttop:"Text top", +image_align_textbottom:"Text bottom", +image_align_left:"Left", +image_align_right:"Right", +link_title:"Insert/edit link", +link_url:"Link URL", +link_target:"Target", +link_target_same:"Open link in the same window", +link_target_blank:"Open link in a new window", +link_titlefield:"Title", +link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +link_list:"Link list" +}); \ No newline at end of file diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/link.htm b/lib/tinymce/jscripts/tiny_mce/themes/advanced/link.htm new file mode 100644 index 0000000..7565b9a --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/link.htm @@ -0,0 +1,58 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
     
    +
    +
    + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css new file mode 100644 index 0000000..9fba043 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css @@ -0,0 +1,36 @@ +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(img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table {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} diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css new file mode 100644 index 0000000..f012226 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css @@ -0,0 +1,117 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDDDDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #CCC;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +border:0; margin:0; padding:0; +font-weight:bold; +width:94px; height:26px; +background:url(img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(img/buttons.png) 0 -52px} +#cancel {background:url(img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker #previewblock {float:right; padding-left:10px; height:20px;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd58418ba7cfe58ae7efdf174e0b223fe3aa6a0 GIT binary patch literal 3274 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 SLTQbO*E^TJI;F+RU=09Vu@yA{ literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif new file mode 100644 index 0000000000000000000000000000000000000000..adfdddccd7cac62a17d68873fa53c248bff8351a GIT binary patch literal 70 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 R!Sp}^Mt9BhYjvGt{|88cricIl literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png new file mode 100644 index 0000000000000000000000000000000000000000..8996c7493e8a58c9c40845cbe8abdc3e6730716d GIT binary patch literal 3736 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 M07*qoM6N<$f@g#ZbN~PV literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css new file mode 100644 index 0000000..a625397 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css @@ -0,0 +1,215 @@ +/* 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:#E5EFFD} +.o2k7Skin iframe {display:block; background:#FFF} +.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 .mceStatusbar {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 {margin-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} +.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} +.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)} +.o2k7Skin .mceSplitButton a.mceAction {width:22px} +.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)} +.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0} +.o2k7Skin .mceSplitButton span.mceOpen {display:none} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px} +.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceSplitButtonActive {background-position:0 -44px} + +/* ColorSplitButton */ +.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.o2k7Skin .mceColorSplitMenu td {padding:2px} +.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A} +.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden} +.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden} + +/* Menu */ +.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD} +.o2k7Skin .mceNoIcons span.mceIcon {width:0;} +.o2k7Skin .mceNoIcons a .mceText {padding-left:10px} +.o2k7Skin .mceMenu table {background:#FFF} +.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block} +.o2k7Skin .mceMenu td {height:20px} +.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0} +.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block} +.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px} +.o2k7Skin .mceMenu pre.mceText {font-family:Monospace} +.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px} +.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD} +.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.o2k7Skin .mceMenuItemDisabled .mceText {color:#888} +.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)} +.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center} +.o2k7Skin .mceMenu span.mceMenuLine {display:none} +.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;} + +/* Progress,Resize */ +.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Formats */ +.o2k7Skin .mce_formatPreview a {font-size:10px} +.o2k7Skin .mce_p span.mceText {} +.o2k7Skin .mce_address span.mceText {font-style:italic} +.o2k7Skin .mce_pre span.mceText {font-family:monospace} +.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.o2k7Skin span.mce_bold {background-position:0 0} +.o2k7Skin span.mce_italic {background-position:-60px 0} +.o2k7Skin span.mce_underline {background-position:-140px 0} +.o2k7Skin span.mce_strikethrough {background-position:-120px 0} +.o2k7Skin span.mce_undo {background-position:-160px 0} +.o2k7Skin span.mce_redo {background-position:-100px 0} +.o2k7Skin span.mce_cleanup {background-position:-40px 0} +.o2k7Skin span.mce_bullist {background-position:-20px 0} +.o2k7Skin span.mce_numlist {background-position:-80px 0} +.o2k7Skin span.mce_justifyleft {background-position:-460px 0} +.o2k7Skin span.mce_justifyright {background-position:-480px 0} +.o2k7Skin span.mce_justifycenter {background-position:-420px 0} +.o2k7Skin span.mce_justifyfull {background-position:-440px 0} +.o2k7Skin span.mce_anchor {background-position:-200px 0} +.o2k7Skin span.mce_indent {background-position:-400px 0} +.o2k7Skin span.mce_outdent {background-position:-540px 0} +.o2k7Skin span.mce_link {background-position:-500px 0} +.o2k7Skin span.mce_unlink {background-position:-640px 0} +.o2k7Skin span.mce_sub {background-position:-600px 0} +.o2k7Skin span.mce_sup {background-position:-620px 0} +.o2k7Skin span.mce_removeformat {background-position:-580px 0} +.o2k7Skin span.mce_newdocument {background-position:-520px 0} +.o2k7Skin span.mce_image {background-position:-380px 0} +.o2k7Skin span.mce_help {background-position:-340px 0} +.o2k7Skin span.mce_code {background-position:-260px 0} +.o2k7Skin span.mce_hr {background-position:-360px 0} +.o2k7Skin span.mce_visualaid {background-position:-660px 0} +.o2k7Skin span.mce_charmap {background-position:-240px 0} +.o2k7Skin span.mce_paste {background-position:-560px 0} +.o2k7Skin span.mce_copy {background-position:-700px 0} +.o2k7Skin span.mce_cut {background-position:-680px 0} +.o2k7Skin span.mce_blockquote {background-position:-220px 0} +.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0} +.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0} +.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0} +.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.o2k7Skin span.mce_advhr {background-position:-0px -20px} +.o2k7Skin span.mce_ltr {background-position:-20px -20px} +.o2k7Skin span.mce_rtl {background-position:-40px -20px} +.o2k7Skin span.mce_emotions {background-position:-60px -20px} +.o2k7Skin span.mce_fullpage {background-position:-80px -20px} +.o2k7Skin span.mce_fullscreen {background-position:-100px -20px} +.o2k7Skin span.mce_iespell {background-position:-120px -20px} +.o2k7Skin span.mce_insertdate {background-position:-140px -20px} +.o2k7Skin span.mce_inserttime {background-position:-160px -20px} +.o2k7Skin span.mce_absolute {background-position:-180px -20px} +.o2k7Skin span.mce_backward {background-position:-200px -20px} +.o2k7Skin span.mce_forward {background-position:-220px -20px} +.o2k7Skin span.mce_insert_layer {background-position:-240px -20px} +.o2k7Skin span.mce_insertlayer {background-position:-260px -20px} +.o2k7Skin span.mce_movebackward {background-position:-280px -20px} +.o2k7Skin span.mce_moveforward {background-position:-300px -20px} +.o2k7Skin span.mce_media {background-position:-320px -20px} +.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px} +.o2k7Skin span.mce_pastetext {background-position:-360px -20px} +.o2k7Skin span.mce_pasteword {background-position:-380px -20px} +.o2k7Skin span.mce_selectall {background-position:-400px -20px} +.o2k7Skin span.mce_preview {background-position:-420px -20px} +.o2k7Skin span.mce_print {background-position:-440px -20px} +.o2k7Skin span.mce_cancel {background-position:-460px -20px} +.o2k7Skin span.mce_save {background-position:-480px -20px} +.o2k7Skin span.mce_replace {background-position:-500px -20px} +.o2k7Skin span.mce_search {background-position:-520px -20px} +.o2k7Skin span.mce_styleprops {background-position:-560px -20px} +.o2k7Skin span.mce_table {background-position:-580px -20px} +.o2k7Skin span.mce_cell_props {background-position:-600px -20px} +.o2k7Skin span.mce_delete_table {background-position:-620px -20px} +.o2k7Skin span.mce_delete_col {background-position:-640px -20px} +.o2k7Skin span.mce_delete_row {background-position:-660px -20px} +.o2k7Skin span.mce_col_after {background-position:-680px -20px} +.o2k7Skin span.mce_col_before {background-position:-700px -20px} +.o2k7Skin span.mce_row_after {background-position:-720px -20px} +.o2k7Skin span.mce_row_before {background-position:-740px -20px} +.o2k7Skin span.mce_merge_cells {background-position:-760px -20px} +.o2k7Skin span.mce_table_props {background-position:-980px -20px} +.o2k7Skin span.mce_row_props {background-position:-780px -20px} +.o2k7Skin span.mce_split_cells {background-position:-800px -20px} +.o2k7Skin span.mce_template {background-position:-820px -20px} +.o2k7Skin span.mce_visualchars {background-position:-840px -20px} +.o2k7Skin span.mce_abbr {background-position:-860px -20px} +.o2k7Skin span.mce_acronym {background-position:-880px -20px} +.o2k7Skin span.mce_attribs {background-position:-900px -20px} +.o2k7Skin span.mce_cite {background-position:-920px -20px} +.o2k7Skin span.mce_del {background-position:-940px -20px} +.o2k7Skin span.mce_ins {background-position:-960px -20px} +.o2k7Skin span.mce_pagebreak {background-position:0 -40px} +.o2k7Skin span.mce_restoredraft {background-position:-20px -40px} +.o2k7Skin span.mce_spellchecker {background-position:-540px -20px} diff --git a/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css new file mode 100644 index 0000000..153f0c3 --- /dev/null +++ b/lib/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 table, .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/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css b/lib/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css new file mode 100644 index 0000000..7fe3b45 --- /dev/null +++ b/lib/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 table, .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/lib/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm b/lib/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm new file mode 100644 index 0000000..5957bbd --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm @@ -0,0 +1,25 @@ + + + {#advanced_dlg.code_title} + + + + +
    +
    {#advanced_dlg.code_title}
    + +
    + +
    + +
    + + + +
    + + +
    +
    + + diff --git a/lib/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js b/lib/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js new file mode 100644 index 0000000..ed89abc --- /dev/null +++ b/lib/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.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})});c.dom.loadCSS(d+"/skins/"+f.skin+"/content.css")});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/lib/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js b/lib/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js new file mode 100644 index 0000000..4b862d4 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js @@ -0,0 +1,85 @@ +/** + * 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.onInit.add(function() { + ed.onNodeChange.add(function(ed, cm) { + tinymce.each(states, function(c) { + cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c)); + }); + }); + + ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css"); + }); + + 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/lib/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif b/lib/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..16af141ff0eea376a889b1e8d28e9c1cacaaab16 GIT binary patch literal 1440 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 VmjT$ODWe$zObpERYjs_s{s;8{A&me4 literal 0 HcmV?d00001 diff --git a/lib/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css b/lib/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css new file mode 100644 index 0000000..cf6c35d --- /dev/null +++ b/lib/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/lib/tinymce/jscripts/tiny_mce/tiny_mce.js b/lib/tinymce/jscripts/tiny_mce/tiny_mce.js new file mode 100644 index 0000000..14d3570 --- /dev/null +++ b/lib/tinymce/jscripts/tiny_mce/tiny_mce.js @@ -0,0 +1 @@ +(function(c){var a=/^\s*|\s*$/g,d;var b={majorVersion:"3",minorVersion:"3.8",releaseDate:"2010-06-30",_init:function(){var r=this,o=document,m=navigator,f=m.userAgent,l,e,k,j,h,q;r.isOpera=c.opera&&opera.buildNumber;r.isWebKit=/WebKit/.test(f);r.isIE=!r.isWebKit&&!r.isOpera&&(/MSIE/gi).test(f)&&(/Explorer/gi).test(m.appName);r.isIE6=r.isIE&&/MSIE [56]/.test(f);r.isGecko=!r.isWebKit&&/Gecko/.test(f);r.isMac=f.indexOf("Mac")!=-1;r.isAir=/adobeair/i.test(f);r.isIDevice=/(iPad|iPhone)/.test(f);if(c.tinyMCEPreInit){r.suffix=tinyMCEPreInit.suffix;r.baseURL=tinyMCEPreInit.base;r.query=tinyMCEPreInit.query;return}r.suffix="";e=o.getElementsByTagName("base");for(l=0;l=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},parse:function(s){try{return eval("("+s+")")}catch(ex){}}});tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){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(m){var k=m.each,j=m.is,i=m.isWebKit,d=m.isIE,a=/^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,e=g("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),f=g("src,href,style,coords,shape"),c={"&":"&",'"':""","<":"<",">":">"},n=/[<>&\"]/g,b=/^([a-z0-9],?)+$/i,h=/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,l=/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;function g(q){var p={},o;q=q.split(",");for(o=q.length;o>=0;o--){p[q[o]]=1}return p}m.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(u,q){var p=this,o;p.doc=u;p.win=window;p.files={};p.cssFlicker=false;p.counter=0;p.boxModel=!m.isIE||u.compatMode=="CSS1Compat";p.stdMode=u.documentMode===8;p.settings=q=m.extend({keep_values:false,hex_colors:1,process_html:1},q);if(m.isIE6){try{u.execCommand("BackgroundImageCache",false,true)}catch(r){p.cssFlicker=true}}if(q.valid_styles){p._styles={};k(q.valid_styles,function(t,s){p._styles[s]=m.explode(t)})}m.addUnload(p.destroy,p)},getRoot:function(){var o=this,p=o.settings;return(p&&o.get(p.root_element))||o.doc.body},getViewPort:function(p){var q,o;p=!p?this.win:p;q=p.document;o=this.boxModel?q.documentElement:q.body;return{x:p.pageXOffset||o.scrollLeft,y:p.pageYOffset||o.scrollTop,w:p.innerWidth||o.clientWidth,h:p.innerHeight||o.clientHeight}},getRect:function(s){var r,o=this,q;s=o.get(s);r=o.getPos(s);q=o.getSize(s);return{x:r.x,y:r.y,w:q.w,h:q.h}},getSize:function(r){var p=this,o,q;r=p.get(r);o=p.getStyle(r,"width");q=p.getStyle(r,"height");if(o.indexOf("px")===-1){o=0}if(q.indexOf("px")===-1){q=0}return{w:parseInt(o)||r.offsetWidth||r.clientWidth,h:parseInt(q)||r.offsetHeight||r.clientHeight}},getParent:function(q,p,o){return this.getParents(q,p,o,false)},getParents:function(z,v,s,y){var q=this,p,u=q.settings,x=[];z=q.get(z);y=y===undefined;if(u.strict_root){s=s||q.getRoot()}if(j(v,"string")){p=v;if(v==="*"){v=function(o){return o.nodeType==1}}else{v=function(o){return q.is(o,p)}}}while(z){if(z==s||!z.nodeType||z.nodeType===9){break}if(!v||v(z)){if(y){x.push(z)}else{return z}}z=z.parentNode}return y?x:null},get:function(o){var p;if(o&&this.doc&&typeof(o)=="string"){p=o;o=this.doc.getElementById(o);if(o&&o.id!==p){return this.doc.getElementsByName(p)[1]}}return o},getNext:function(p,o){return this._findSib(p,o,"nextSibling")},getPrev:function(p,o){return this._findSib(p,o,"previousSibling")},select:function(q,p){var o=this;return m.dom.Sizzle(q,o.get(p)||o.get(o.settings.root_element)||o.doc,[])},is:function(q,o){var p;if(q.length===undefined){if(o==="*"){return q.nodeType==1}if(b.test(o)){o=o.toLowerCase().split(/,/);q=q.nodeName.toLowerCase();for(p=o.length-1;p>=0;p--){if(o[p]==q){return true}}return false}}return m.dom.Sizzle.matches(o,q.nodeType?[q]:q).length>0},add:function(s,v,o,r,u){var q=this;return this.run(s,function(y){var x,t;x=j(v,"string")?q.doc.createElement(v):v;q.setAttribs(x,o);if(r){if(r.nodeType){x.appendChild(r)}else{q.setHTML(x,r)}}return !u?y.appendChild(x):x})},create:function(q,o,p){return this.add(this.doc.createElement(q),q,o,p,1)},createHTML:function(v,p,s){var u="",r=this,q;u+="<"+v;for(q in p){if(p.hasOwnProperty(q)){u+=" "+q+'="'+r.encode(p[q])+'"'}}if(m.is(s)){return u+">"+s+""}return u+" />"},remove:function(o,p){return this.run(o,function(r){var q,s;q=r.parentNode;if(!q){return null}if(p){while(s=r.firstChild){if(!m.isIE||s.nodeType!==3||s.nodeValue){q.insertBefore(s,r)}else{r.removeChild(s)}}}return q.removeChild(r)})},setStyle:function(r,o,p){var q=this;return q.run(r,function(v){var u,t;u=v.style;o=o.replace(/-(\D)/g,function(x,s){return s.toUpperCase()});if(q.pixelStyles.test(o)&&(m.is(p,"number")||/^[\-0-9\.]+$/.test(p))){p+="px"}switch(o){case"opacity":if(d){u.filter=p===""?"":"alpha(opacity="+(p*100)+")";if(!r.currentStyle||!r.currentStyle.hasLayout){u.display="inline-block"}}u[o]=u["-moz-opacity"]=u["-khtml-opacity"]=p||"";break;case"float":d?u.styleFloat=p:u.cssFloat=p;break;default:u[o]=p||""}if(q.settings.update_styles){q.setAttrib(v,"_mce_style")}})},getStyle:function(r,o,q){r=this.get(r);if(!r){return false}if(this.doc.defaultView&&q){o=o.replace(/[A-Z]/g,function(s){return"-"+s});try{return this.doc.defaultView.getComputedStyle(r,null).getPropertyValue(o)}catch(p){return null}}o=o.replace(/-(\D)/g,function(t,s){return s.toUpperCase()});if(o=="float"){o=d?"styleFloat":"cssFloat"}if(r.currentStyle&&q){return r.currentStyle[o]}return r.style[o]},setStyles:function(u,v){var q=this,r=q.settings,p;p=r.update_styles;r.update_styles=0;k(v,function(o,s){q.setStyle(u,s,o)});r.update_styles=p;if(r.update_styles){q.setAttrib(u,r.cssText)}},setAttrib:function(q,r,o){var p=this;if(!q||!r){return}if(p.settings.strict){r=r.toLowerCase()}return this.run(q,function(u){var t=p.settings;switch(r){case"style":if(!j(o,"string")){k(o,function(s,x){p.setStyle(u,x,s)});return}if(t.keep_values){if(o&&!p._isRes(o)){u.setAttribute("_mce_style",o,2)}else{u.removeAttribute("_mce_style",2)}}u.style.cssText=o;break;case"class":u.className=o||"";break;case"src":case"href":if(t.keep_values){if(t.url_converter){o=t.url_converter.call(t.url_converter_scope||p,o,r,u)}p.setAttrib(u,"_mce_"+r,o,2)}break;case"shape":u.setAttribute("_mce_style",o);break}if(j(o)&&o!==null&&o.length!==0){u.setAttribute(r,""+o,2)}else{u.removeAttribute(r,2)}})},setAttribs:function(q,r){var p=this;return this.run(q,function(o){k(r,function(s,t){p.setAttrib(o,t,s)})})},getAttrib:function(r,s,q){var o,p=this;r=p.get(r);if(!r||r.nodeType!==1){return false}if(!j(q)){q=""}if(/^(src|href|style|coords|shape)$/.test(s)){o=r.getAttribute("_mce_"+s);if(o){return o}}if(d&&p.props[s]){o=r[p.props[s]];o=o&&o.nodeValue?o.nodeValue:o}if(!o){o=r.getAttribute(s,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(s)){if(r[p.props[s]]===true&&o===""){return s}return o?s:""}if(r.nodeName==="FORM"&&r.getAttributeNode(s)){return r.getAttributeNode(s).nodeValue}if(s==="style"){o=o||r.style.cssText;if(o){o=p.serializeStyle(p.parseStyle(o),r.nodeName);if(p.settings.keep_values&&!p._isRes(o)){r.setAttribute("_mce_style",o)}}}if(i&&s==="class"&&o){o=o.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(d){switch(s){case"rowspan":case"colspan":if(o===1){o=""}break;case"size":if(o==="+0"||o===20||o===0){o=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(o===0){o=""}break;case"hspace":if(o===-1){o=""}break;case"maxlength":case"tabindex":if(o===32768||o===2147483647||o==="32768"){o=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(o===65535){return s}return q;case"shape":o=o.toLowerCase();break;default:if(s.indexOf("on")===0&&o){o=(""+o).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1")}}}return(o!==undefined&&o!==null&&o!=="")?""+o:q},getPos:function(A,s){var p=this,o=0,z=0,u,v=p.doc,q;A=p.get(A);s=s||v.body;if(A){if(d&&!p.stdMode){A=A.getBoundingClientRect();u=p.boxModel?v.documentElement:v.body;o=p.getStyle(p.select("html")[0],"borderWidth");o=(o=="medium"||p.boxModel&&!p.isIE6)&&2||o;return{x:A.left+u.scrollLeft-o,y:A.top+u.scrollTop-o}}q=A;while(q&&q!=s&&q.nodeType){o+=q.offsetLeft||0;z+=q.offsetTop||0;q=q.offsetParent}q=A.parentNode;while(q&&q!=s&&q.nodeType){o-=q.scrollLeft||0;z-=q.scrollTop||0;q=q.parentNode}}return{x:o,y:z}},parseStyle:function(r){var u=this,v=u.settings,x={};if(!r){return x}function p(D,A,C){var z,B,o,y;z=x[D+"-top"+A];if(!z){return}B=x[D+"-right"+A];if(z!=B){return}o=x[D+"-bottom"+A];if(B!=o){return}y=x[D+"-left"+A];if(o!=y){return}x[C]=y;delete x[D+"-top"+A];delete x[D+"-right"+A];delete x[D+"-bottom"+A];delete x[D+"-left"+A]}function q(y,s,o,A){var z;z=x[s];if(!z){return}z=x[o];if(!z){return}z=x[A];if(!z){return}x[y]=x[s]+" "+x[o]+" "+x[A];delete x[s];delete x[o];delete x[A]}r=r.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");k(r.split(";"),function(s){var o,t=[];if(s){s=s.replace(/_MCE_SEMI_/g,";");s=s.replace(/url\([^\)]+\)/g,function(y){t.push(y);return"url("+t.length+")"});s=s.split(":");o=m.trim(s[1]);o=o.replace(/url\(([^\)]+)\)/g,function(z,y){return t[parseInt(y)-1]});o=o.replace(/rgb\([^\)]+\)/g,function(y){return u.toHex(y)});if(v.url_converter){o=o.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(y,z){return"url("+v.url_converter.call(v.url_converter_scope||u,u.decode(z),"style",null)+")"})}x[m.trim(s[0]).toLowerCase()]=o}});p("border","","border");p("border","-width","border-width");p("border","-color","border-color");p("border","-style","border-style");p("padding","","padding");p("margin","","margin");q("border","border-width","border-style","border-color");if(d){if(x.border=="medium none"){x.border=""}}return x},serializeStyle:function(v,p){var q=this,r="";function u(s,o){if(o&&s){if(o.indexOf("-")===0){return}switch(o){case"font-weight":if(s==700){s="bold"}break;case"color":case"background-color":s=s.toLowerCase();break}r+=(r?" ":"")+o+": "+s+";"}}if(p&&q._styles){k(q._styles["*"],function(o){u(v[o],o)});k(q._styles[p.toLowerCase()],function(o){u(v[o],o)})}else{k(v,u)}return r},loadCSS:function(o){var q=this,r=q.doc,p;if(!o){o=""}p=q.select("head")[0];k(o.split(","),function(s){var t;if(q.files[s]){return}q.files[s]=true;t=q.create("link",{rel:"stylesheet",href:m._addVer(s)});if(d&&r.documentMode){t.onload=function(){r.recalc();t.onload=null}}p.appendChild(t)})},addClass:function(o,p){return this.run(o,function(q){var r;if(!p){return 0}if(this.hasClass(q,p)){return q.className}r=this.removeClass(q,p);return q.className=(r!=""?(r+" "):"")+p})},removeClass:function(q,r){var o=this,p;return o.run(q,function(t){var s;if(o.hasClass(t,r)){if(!p){p=new RegExp("(^|\\s+)"+r+"(\\s+|$)","g")}s=t.className.replace(p," ");s=m.trim(s!=" "?s:"");t.className=s;if(!s){t.removeAttribute("class");t.removeAttribute("className")}return s}return t.className})},hasClass:function(p,o){p=this.get(p);if(!p||!o){return false}return(" "+p.className+" ").indexOf(" "+o+" ")!==-1},show:function(o){return this.setStyle(o,"display","block")},hide:function(o){return this.setStyle(o,"display","none")},isHidden:function(o){o=this.get(o);return !o||o.style.display=="none"||this.getStyle(o,"display")=="none"},uniqueId:function(o){return(!o?"mce_":o)+(this.counter++)},setHTML:function(q,p){var o=this;return this.run(q,function(v){var r,t,s,z,u,r;p=o.processHTML(p);if(d){function y(){while(v.firstChild){v.firstChild.removeNode()}try{v.innerHTML="
    "+p;v.removeChild(v.firstChild)}catch(x){r=o.create("div");r.innerHTML="
    "+p;k(r.childNodes,function(B,A){if(A){v.appendChild(B)}})}}if(o.settings.fix_ie_paragraphs){p=p.replace(/

    <\/p>|]+)><\/p>|/gi,' 

    ')}y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("p");for(t=s.length-1,r=0;t>=0;t--){z=s[t];if(!z.hasChildNodes()){if(!z._mce_keep){r=1;break}z.removeAttribute("_mce_keep")}}}if(r){p=p.replace(/

    ]+)>|

    /ig,'

    ');p=p.replace(/<\/p>/gi,"
    ");y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("DIV");for(t=s.length-1;t>=0;t--){z=s[t];if(z._mce_tmp){u=o.doc.createElement("p");z.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(A,x){var B;if(x!=="_mce_tmp"){B=z.getAttribute(x);if(!B&&x==="class"){B=z.className}u.setAttribute(x,B)}});for(r=0;r]+)\/>|/gi,"");if(q.keep_values){if(/)/g,"\n");t=t.replace(/^[\r\n]*|[\r\n]*$/g,"");t=t.replace(/^\s*(\/\/\s*|\]\]>|-->|\]\]-->)\s*$/g,"");return t}r=r.replace(/]+|)>([\s\S]*?)<\/script>/gi,function(s,x,t){if(!x){x=' type="text/javascript"'}x=x.replace(/src=\"([^\"]+)\"?/i,function(y,z){if(q.url_converter){z=p.encode(q.url_converter.call(q.url_converter_scope||p,p.decode(z),"src","script"))}return'_mce_src="'+z+'"'});if(m.trim(t)){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/style>/gi,function(s,x,t){if(t){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(s,x,t){return""})}r=r.replace(//g,"");function u(s){return s.replace(h,function(y,z,x,t){return"<"+z+x.replace(l,function(B,A,E,D,C){var F;A=A.toLowerCase();E=E||D||C||"";if(e[A]){if(E==="false"||E==="0"){return}return A+'="'+A+'"'}if(f[A]&&x.indexOf("_mce_"+A)==-1){F=p.decode(E);if(q.url_converter&&(A=="src"||A=="href")){F=q.url_converter.call(q.url_converter_scope||p,F,A,z)}if(A=="style"){F=p.serializeStyle(p.parseStyle(F),A)}return A+'="'+E+'" _mce_'+A+'="'+p.encode(F)+'"'}return B})+t+">"})}r=u(r);r=r.replace(/MCE_SCRIPT:([0-9]+)/g,function(t,s){return v[s]})}return r},getOuterHTML:function(o){var p;o=this.get(o);if(!o){return null}if(o.outerHTML!==undefined){return o.outerHTML}p=(o.ownerDocument||this.doc).createElement("body");p.appendChild(o.cloneNode(true));return p.innerHTML},setOuterHTML:function(r,p,s){var o=this;function q(u,t,x){var y,v;v=x.createElement("body");v.innerHTML=t;y=v.lastChild;while(y){o.insertAfter(y.cloneNode(true),u);y=y.previousSibling}o.remove(u)}return this.run(r,function(u){u=o.get(u);if(u.nodeType==1){s=s||u.ownerDocument||o.doc;if(d){try{if(d&&u.nodeType==1){u.outerHTML=p}else{q(u,p,s)}}catch(t){q(u,p,s)}}else{q(u,p,s)}}})},decode:function(p){var q,r,o;if(/&[\w#]+;/.test(p)){q=this.doc.createElement("div");q.innerHTML=p;r=q.firstChild;o="";if(r){do{o+=r.nodeValue}while(r=r.nextSibling)}return o||p}return p},encode:function(o){return(""+o).replace(n,function(p){return c[p]})},insertAfter:function(o,p){p=this.get(p);return this.run(o,function(r){var q,s;q=p.parentNode;s=p.nextSibling;if(s){q.insertBefore(r,s)}else{q.appendChild(r)}return r})},isBlock:function(o){if(o.nodeType&&o.nodeType!==1){return false}o=o.nodeName||o;return a.test(o)},replace:function(s,r,p){var q=this;if(j(r,"array")){s=s.cloneNode(true)}return q.run(r,function(t){if(p){k(m.grep(t.childNodes),function(o){s.appendChild(o)})}return t.parentNode.replaceChild(s,t)})},rename:function(r,o){var q=this,p;if(r.nodeName!=o.toUpperCase()){p=q.create(o);k(q.getAttribs(r),function(s){q.setAttrib(p,s.nodeName,q.getAttrib(r,s.nodeName))});q.replace(p,r,1)}return p||r},findCommonAncestor:function(q,o){var r=q,p;while(r){p=o;while(p&&r!=p){p=p.parentNode}if(r==p){break}r=r.parentNode}if(!r&&q.ownerDocument){return q.ownerDocument.documentElement}return r},toHex:function(o){var q=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(o);function p(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}if(q){o="#"+p(q[1])+p(q[2])+p(q[3]);return o}return o},getClasses:function(){var s=this,o=[],r,u={},v=s.settings.class_filter,q;if(s.classes){return s.classes}function x(t){k(t.imports,function(y){x(y)});k(t.cssRules||t.rules,function(y){switch(y.type||1){case 1:if(y.selectorText){k(y.selectorText.split(","),function(z){z=z.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(z)||!/\.[\w\-]+$/.test(z)){return}q=z;z=z.replace(/.*\.([a-z0-9_\-]+).*/i,"$1");if(v&&!(z=v(z,q))){return}if(!u[z]){o.push({"class":z});u[z]=1}})}break;case 3:x(y.styleSheet);break}})}try{k(s.doc.styleSheets,x)}catch(p){}if(o.length>0){s.classes=o}return o},run:function(u,r,q){var p=this,v;if(p.doc&&typeof(u)==="string"){u=p.get(u)}if(!u){return false}q=q||this;if(!u.nodeType&&(u.length||u.length===0)){v=[];k(u,function(s,o){if(s){if(typeof(s)=="string"){s=p.doc.getElementById(s)}v.push(r.call(q,s,o))}});return v}return r.call(q,u)},getAttribs:function(q){var p;q=this.get(q);if(!q){return[]}if(d){p=[];if(q.nodeName=="OBJECT"){return q.attributes}if(q.nodeName==="OPTION"&&this.getAttrib(q,"selected")){p.push({specified:1,nodeName:"selected"})}q.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(o){p.push({specified:1,nodeName:o})});return p}return q.attributes},destroy:function(p){var o=this;if(o.events){o.events.destroy()}o.win=o.doc=o.root=o.events=null;if(!p){m.removeUnload(o.destroy)}},createRng:function(){var o=this.doc;return o.createRange?o.createRange():new m.dom.Range(this)},nodeIndex:function(s,t){var o=0,q,r,p;if(s){for(q=s.nodeType,s=s.previousSibling,r=s;s;s=s.previousSibling){p=s.nodeType;if(t&&p==3){if(p==q||!s.nodeValue.length){continue}}o++;q=p}}return o},split:function(u,s,y){var z=this,o=z.createRng(),v,q,x;function p(A){var t,r=A.childNodes;if(A.nodeType==1&&A.getAttribute("_mce_type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){p(r[t])}if(A.nodeType!=9){if(A.nodeType==3&&A.nodeValue.length>0){return}if(A.nodeType==1){r=A.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("_mce_type")=="bookmark"){A.parentNode.insertBefore(r[0],A)}if(r.length||/^(br|hr|input|img)$/i.test(A.nodeName)){return}}z.remove(A)}return A}if(u&&s){o.setStart(u.parentNode,z.nodeIndex(u));o.setEnd(s.parentNode,z.nodeIndex(s));v=o.extractContents();o=z.createRng();o.setStart(s.parentNode,z.nodeIndex(s)+1);o.setEnd(u.parentNode,z.nodeIndex(u)+1);q=o.extractContents();x=u.parentNode;x.insertBefore(p(v),u);if(y){x.replaceChild(y,s)}else{x.insertBefore(s,u)}x.insertBefore(p(q),u);z.remove(u);return y||s}},bind:function(s,o,r,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.add(s,o,r,q||this)},unbind:function(r,o,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.remove(r,o,q)},_findSib:function(r,o,p){var q=this,s=o;if(r){if(j(s,"string")){s=function(t){return q.is(t,o)}}for(r=r[p];r;r=r[p]){if(s(r)){return r}}}return null},_isRes:function(o){return/^(top|left|bottom|right|width|height)/i.test(o)||/;\s*(top|left|bottom|right|width|height)/i.test(o)}});m.DOM=new m.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(W,X){var Z=N[h],Y=N[U],V=N[P],t=N[z];if(W===0){return G(Z,Y,Z,Y)}if(W===1){return G(Z,Y,V,t)}if(W===2){return G(V,t,V,t)}if(W===3){return G(V,t,Z,Y)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(g){var i=this,j="\uFEFF",e,h,d=g.dom,c=true,f=false;function b(){var n=g.getRng(),k=d.createRng(),m,o;m=n.item?n.item(0):n.parentElement();if(m.ownerDocument!=d.doc){return k}if(n.item||!m.hasChildNodes()){k.setStart(m.parentNode,d.nodeIndex(m));k.setEnd(k.startContainer,k.startOffset+1);return k}o=g.isCollapsed();function l(s){var u,q,t,p,A=0,x,y,z,r,v;r=n.duplicate();r.collapse(s);u=d.create("a");z=r.parentElement();if(!z.hasChildNodes()){k[s?"setStart":"setEnd"](z,0);return}z.appendChild(u);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){k[s?"setStartAfter":"setEndAfter"](z);d.remove(u);return}p=tinymce.grep(z.childNodes);x=p.length-1;while(A<=x){y=Math.floor((A+x)/2);z.insertBefore(u,p[y]);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){A=y+1}else{if(v<0){x=y-1}else{found=true;break}}}q=v>0||y==0?u.nextSibling:u.previousSibling;if(q.nodeType==1){d.remove(u);t=d.nodeIndex(q);q=q.parentNode;if(!s||y>0){t++}}else{if(v>0||y==0){r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=r.text.length}else{r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=q.nodeValue.length-r.text.length}d.remove(u)}k[s?"setStart":"setEnd"](q,t)}l(true);if(!o){l()}return k}this.addRange=function(k){var p,n,m,r,u,s,t=g.dom.doc,o=t.body;function l(B){var x,A,v,z,y;v=d.create("a");x=B?m:u;A=B?r:s;z=p.duplicate();if(x==t){x=o;A=0}if(x.nodeType==3){x.parentNode.insertBefore(v,x);z.moveToElementText(v);z.moveStart("character",A);d.remove(v);p.setEndPoint(B?"StartToStart":"EndToEnd",z)}else{y=x.childNodes;if(y.length){if(A>=y.length){d.insertAfter(v,y[y.length-1])}else{x.insertBefore(v,y[A])}z.moveToElementText(v)}else{v=t.createTextNode(j);x.appendChild(v);z.moveToElementText(v.parentNode);z.collapse(c)}p.setEndPoint(B?"StartToStart":"EndToEnd",z);d.remove(v)}}this.destroy();m=k.startContainer;r=k.startOffset;u=k.endContainer;s=k.endOffset;p=o.createTextRange();if(m==u&&m.nodeType==1&&r==s-1){if(r==s-1){try{n=o.createControlRange();n.addElement(m.childNodes[r]);n.select();n.scrollIntoView();return}catch(q){}}}l(true);l();p.select();p.scrollIntoView()};this.getRangeAt=function(){if(!e||!tinymce.dom.RangeUtils.compareRanges(h,g.getRng())){e=b();h=g.getRng()}try{e.startContainer.nextSibling}catch(k){e=b();h=null}return e};this.destroy=function(){h=e=null};if(g.dom.boxModel){(function(){var q=d.doc,l=q.body,n,o;q.documentElement.unselectable=c;function p(r,u){var s=l.createTextRange();try{s.moveToPoint(r,u)}catch(t){s=null}return s}function m(s){var r;if(s.button){r=p(s.x,s.y);if(r){if(r.compareEndPoints("StartToStart",o)>0){r.setEndPoint("StartToStart",o)}else{r.setEndPoint("EndToEnd",o)}r.select()}}else{k()}}function k(){d.unbind(q,"mouseup",k);d.unbind(q,"mousemove",m);n=0}d.bind(q,"mousedown",function(r){if(r.target.nodeName==="HTML"){if(n){k()}n=1;o=p(r.x,r.y);if(o){d.bind(q,"mouseup",k);d.bind(q,"mousemove",m);o.select()}}})})()}}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return re[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="

    ";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="
    ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j_';if(j.startContainer==k&&j.endContainer==k){k.body.innerHTML=i}else{j.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=i}else{j.insertNode(j.createContextualFragment(i))}}l=f.dom.get("__caret");j=k.createRange();j.setStartBefore(l);j.setEndBefore(l);f.setRng(j);f.dom.remove("__caret")}else{if(j.item){k.execCommand("Delete",false,null);j=f.getRng()}j.pasteHTML(i)}f.onSetContent.dispatch(f,g)},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}if(h&&h.nodeName=="BODY"){return h.firstChild||h}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(q,r){var u=this,m=u.dom,g,j,i,n,h,o,p,l="\uFEFF",s;function f(v,x){var t=0;d(m.select(v),function(z,y){if(z==x){t=y}});return t}if(q==2){function k(){var v=u.getRng(true),t=m.getRoot(),x={};function y(B,G){var A=B[G?"startContainer":"endContainer"],F=B[G?"startOffset":"endOffset"],z=[],C,E,D=0;if(A.nodeType==3){if(r){for(C=A.previousSibling;C&&C.nodeType==3;C=C.previousSibling){F+=C.nodeValue.length}}z.push(F)}else{E=A.childNodes;if(F>=E.length&&E.length){D=1;F=Math.max(0,E.length-1)}z.push(u.dom.nodeIndex(E[F],r)+D)}for(;A&&A!=t;A=A.parentNode){z.push(u.dom.nodeIndex(A,r))}return z}x.start=y(v,true);if(!u.isCollapsed()){x.end=y(v)}return x}return k()}if(q){return{rng:u.getRng()}}g=u.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();s="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();g.collapse();g.pasteHTML(''+l+"");if(!n){j.collapse(false);j.pasteHTML(''+l+"")}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=u.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_end",style:s},l))}g.collapse(true);g.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_start",style:s},l))}u.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(r.tridentSel){r.tridentSel.destroy()}if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(u.length){x=u[t[v]]}}if(z){f.setStart(x,t[0])}else{f.setEnd(x,t[0])}}}g(true);g();r.setRng(f)}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(!a&&l.isBlock(t)&&!t.innerHTML){t.innerHTML='
    '}return t}k("start");k("end");f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g);return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(j){var g=this,h,i;if(j&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():g.win.document.createRange())}}catch(f){}if(!i){i=g.win.document.createRange?g.win.document.createRange():g.win.document.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;h.removeAllRanges();h.addRange(i);g.selectedRange=h.getRangeAt(0)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var g=this,f=g.getRng(),h=g.getSel(),i;if(f.setStart){if(!f){return g.dom.getRoot()}i=f.commonAncestorContainer;if(!f.collapsed){if(f.startContainer==f.endContainer){if(f.startOffset-f.endOffset<2){if(f.startContainer.hasChildNodes()){i=f.startContainer.childNodes[f.startOffset]}}}if(c.isWebKit&&h.anchorNode&&h.anchorNode.nodeType==1){return h.anchorNode.childNodes[h.anchorOffset]}}if(i&&i.nodeType==3){return i.parentNode}return i}return f.item?f.item(0):f.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATASection(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>||<\/html>||]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,">")}return b}})})(tinymce);(function(a){a.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(b){this.settings=a.extend({indent_char:" ",indentation:0},b);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(b){this._writeAttributesEnd();this.writeRaw("<"+b);this.tags.push(b);this.inAttr=true;this.count++;this.elementCount=this.count},writeAttribute:function(d,b){var c=this;c.writeRaw(" "+c.encode(d)+'="'+c.encode(b)+'"')},writeEndElement:function(){var b;if(this.tags.length>0){b=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("")}if(this.settings.indentation>0){this.writeRaw("\n")}}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw("");if(this.settings.indentation>0){this.writeRaw("\n")}}},writeText:function(b){this._writeAttributesEnd();this.writeRaw(this.encode(b));this.count++},writeCDATA:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeComment:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeRaw:function(b){this.str+=b},encode:function(b){return b.replace(/[<>&"]/g,function(c){switch(c){case"<":return"<";case">":return">";case"&":return"&";case'"':return"""}return c})},getContent:function(){return this.str},_writeAttributesEnd:function(b){if(!this.inAttr){return}this.inAttr=false;if(b&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(_mce_|_moz_|sizset|sizcache)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,entity_encoding:"named",entities:"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",valid_elements:"*[*]",extended_valid_elements:0,invalid_elements:0,fix_table_elements:1,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,apply_source_formatting:0,indent_mode:"simple",indent_char:"\t",indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;i.schema=j.schema;if(j.entity_encoding=="named"&&!j.entities){j.entity_encoding="raw"}if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(
    \s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^
    \s*<\//.test(n)){return""}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,z,y=["ol","ul"],u,t,q,k=/^(OL|UL)$/,A;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p=1767){f(i.dom.select("p table",l.node).reverse(),function(p){var o=i.dom.getParent(p.parentNode,"table,p");if(o.nodeName!="TABLE"){try{i.dom.split(o,p)}catch(m){}}})}})}},setEntities:function(o){var n=this,j,m,h={},k;if(n.entityLookup){return}j=o.split(",");for(m=0;m1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t=1767)){p=j.createHTMLDocument("");f(r.nodeName=="BODY"?r.childNodes:[r],function(h){p.body.appendChild(p.importNode(h,true))});if(r.nodeName!="BODY"){r=p.body.firstChild}else{r=p.body}i=k.dom.doc;k.dom.doc=p}k.key=""+(parseInt(k.key)+1);if(!q.no_events){q.node=r;k.onPreProcess.dispatch(k,q)}k.writer.reset();k._info=q;k._serializeNode(r,q.getInner);q.content=k.writer.getContent();if(i){k.dom.doc=i}if(!q.no_events){k.onPostProcess.dispatch(k,q)}k._postProcess(q);q.node=null;return e.trim(q.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(]*>)(.*?)(<\/script>)/g},{pattern:/(]*>)(.*?)(<\/noscript>)/g},{pattern:/(]*>)(.*?)(<\/style>)/g},{pattern:/(]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/()/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=j.replace(/

    \s+<\/p>|]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?" 

    ":" 

    ");if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=j.replace(/(<[^>]+>)\s+/g,"$1 ");j=j.replace(/\s+(<\/[^>]+>)/g," $1");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,"<$1 $2>");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,"<$1>");j=j.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,"")}if(k.apply_source_formatting&&k.indent_mode=="simple"){j=j.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n");j=j.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>");j=j.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"\n");j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=j.replace(//g,"");if(k.entity_encoding=="raw"){j=j.replace(/

     <\/p>|]+)> <\/p>/g,"\u00a0

    ")}j=j.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(h,p,o){return""+i.dom.decode(o.replace(//g,""))+""})}n.content=j},_serializeNode:function(E,J){var A=this,B=A.settings,y=A.writer,q,j,u,G,F,I,C,h,z,k,r,D,p,m,H,o,x;if(!B.node_filter||B.node_filter(E)){switch(E.nodeType){case 1:if(E.hasAttribute?E.hasAttribute("_mce_bogus"):E.getAttribute("_mce_bogus")){return}p=H=false;q=E.hasChildNodes();k=E.getAttribute("_mce_name")||E.nodeName.toLowerCase();o=E.getAttribute("_mce_type");if(o){if(!A._info.cleanup){p=true;return}else{H=1}}if(d){x=E.scopeName;if(x&&x!=="HTML"&&x!=="html"){k=x+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!H){if(!A.validElementsRE||!A.validElementsRE.test(k)||(A.invalidElementsRE&&A.invalidElementsRE.test(k))||J){p=true;break}}if(d){if(B.fix_content_duplication){if(E._mce_serialized==A.key){return}E._mce_serialized=A.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(E.nodeName==="BR"&&E.getAttribute("type")=="_moz"){return}}}if(B.validate_children){if(A.elementName&&!A.schema.isValid(A.elementName,k)){p=true;break}A.elementName=k}r=A.findRule(k);if(!r){p=true;break}k=r.name||k;m=B.closed.test(k);if((!q&&r.noEmpty)||(d&&!k)){p=true;break}if(r.requiredAttribs){I=r.requiredAttribs;for(G=I.length-1;G>=0;G--){if(this.dom.getAttrib(E,I[G])!==""){break}}if(G==-1){p=true;break}}y.writeStartElement(k);if(r.attribs){for(G=0,C=r.attribs,F=C.length;G-1;G--){h=C[G];if(h.specified){I=h.nodeName.toLowerCase();if(B.invalid_attrs.test(I)||!r.validAttribsRE.test(I)){continue}D=A.findAttribRule(r,I);z=A._getAttrib(E,D,I);if(z!==null){y.writeAttribute(I,z)}}}}if(o&&H){y.writeAttribute("_mce_type",o)}if(k==="script"&&e.trim(E.innerHTML)){y.writeText("// ");y.writeCDATA(E.innerHTML.replace(/|<\[CDATA\[|\]\]>/g,""));q=false;break}if(r.padd){if(q&&(u=E.firstChild)&&u.nodeType===1&&E.childNodes.length===1){if(u.hasAttribute?u.hasAttribute("_mce_bogus"):u.getAttribute("_mce_bogus")){y.writeText("\u00a0")}}else{if(!q){y.writeText("\u00a0")}}}break;case 3:if(B.validate_children&&A.elementName&&!A.schema.isValid(A.elementName,"#text")){return}return y.writeText(E.nodeValue);case 4:return y.writeCDATA(E.nodeValue);case 8:return y.writeComment(E.nodeValue)}}else{if(E.nodeType==1){q=E.hasChildNodes()}}if(q&&!m){u=E.firstChild;while(u){A._serializeNode(u);A.elementName=k;u=u.nextSibling}}if(!p){if(!m){y.writeFullEndElement()}else{y.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+""+p}))});return j},_unprotect:function(i,j){i=i.replace(/\"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,""))}}if(b.stdMode){e+=''+j.renderHTML()+""}else{e+=""+j.renderHTML()+""}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,""))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,""));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},""+e+"")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{items:[],urls:{},lookup:{},onAdd:new a(this),get:function(d){return this.lookup[d]},requireLangPack:function(e){var d=b.settings;if(d&&d.language){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));b.ScriptLoader.add(e,d,g)}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",valid_elements:"@[id|class|style|title|dir';if(F.document_base_url!=m.documentBaseURL){E.iframeHTML+=''}E.iframeHTML+='';if(m.relaxedDomain){E.iframeHTML+=''; + + 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 += ''; + + // Domain relaxing enabled, then set document domain + if (tinymce.relaxedDomain) { + // We need to write the contents here in IE since multiple writes messes up refresh button and back button + if (isIE || (tinymce.isOpera && parseFloat(opera.version()) >= 9.5)) + u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'; + else if (tinymce.isOpera) + u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();ed.setupIframe();})()'; + } + + // Create iframe + n = DOM.add(o.iframeContainer, 'iframe', { + id : t.id + "_ifr", + src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7 + frameBorder : '0', + style : { + width : '100%', + height : h + } + }); + + t.contentAreaContainer = o.iframeContainer; + DOM.get(o.editorContainer).style.display = t.orgDisplay; + DOM.get(t.id).style.display = 'none'; + + if (!isIE || !tinymce.relaxedDomain) + t.setupIframe(); + + e = n = o = null; // Cleanup + }, + + setupIframe : function() { + var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b; + + // Setup iframe body + if (!isIE || !tinymce.relaxedDomain) { + d.open(); + d.write(t.iframeHTML); + d.close(); + } + + // Design mode needs to be added here Ctrl+A will fail otherwise + if (!isIE) { + try { + if (!s.readonly) + d.designMode = 'On'; + } catch (ex) { + // Will fail on Gecko if the editor is placed in an hidden container element + // The design mode will be set ones the editor is focused + } + } + + // IE needs to use contentEditable or it will display non secure items for HTTPS + if (isIE) { + // It will not steal focus if we hide it while setting contentEditable + b = t.getBody(); + DOM.hide(b); + + if (!s.readonly) + b.contentEditable = true; + + DOM.show(b); + } + + t.dom = new tinymce.dom.DOMUtils(t.getDoc(), { + keep_values : true, + url_converter : t.convertURL, + url_converter_scope : t, + hex_colors : s.force_hex_style_colors, + class_filter : s.class_filter, + update_styles : 1, + fix_ie_paragraphs : 1, + valid_styles : s.valid_styles + }); + + t.schema = new tinymce.dom.Schema(); + + t.serializer = new tinymce.dom.Serializer(extend(s, { + valid_elements : s.verify_html === false ? '*[*]' : s.valid_elements, + dom : t.dom, + schema : t.schema + })); + + t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer); + + t.formatter = new tinymce.Formatter(this); + + // Register default formats + t.formatter.register({ + alignleft : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}}, + {selector : 'img,table', styles : {'float' : 'left'}} + ], + + aligncenter : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}}, + {selector : 'img', styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}}, + {selector : 'table', styles : {marginLeft : 'auto', marginRight : 'auto'}} + ], + + alignright : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}}, + {selector : 'img,table', styles : {'float' : 'right'}} + ], + + alignfull : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}} + ], + + bold : [ + {inline : 'strong'}, + {inline : 'span', styles : {fontWeight : 'bold'}}, + {inline : 'b'} + ], + + italic : [ + {inline : 'em'}, + {inline : 'span', styles : {fontStyle : 'italic'}}, + {inline : 'i'} + ], + + underline : [ + {inline : 'span', styles : {textDecoration : 'underline'}, exact : true}, + {inline : 'u'} + ], + + strikethrough : [ + {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true}, + {inline : 'u'} + ], + + forecolor : {inline : 'span', styles : {color : '%value'}}, + hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}}, + 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'}, + + removeformat : [ + {selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true}, + {selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true}, + {selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true} + ] + }); + + // Register default block formats + each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) { + t.formatter.register(name, {block : name, remove : 'all'}); + }); + + // Register user defined formats + t.formatter.register(t.settings.formats); + + t.undoManager = new tinymce.UndoManager(t); + + // Pass through + t.undoManager.onAdd.add(function(um, l) { + if (!l.initial) + return t.onChange.dispatch(t, l, um); + }); + + t.undoManager.onUndo.add(function(um, l) { + return t.onUndo.dispatch(t, l, um); + }); + + t.undoManager.onRedo.add(function(um, l) { + return t.onRedo.dispatch(t, l, um); + }); + + t.forceBlocks = new tinymce.ForceBlocks(t, { + forced_root_block : s.forced_root_block + }); + + t.editorCommands = new tinymce.EditorCommands(t); + + // Pass through + t.serializer.onPreProcess.add(function(se, o) { + return t.onPreProcess.dispatch(t, o, se); + }); + + t.serializer.onPostProcess.add(function(se, o) { + return t.onPostProcess.dispatch(t, o, se); + }); + + t.onPreInit.dispatch(t); + + if (!s.gecko_spellcheck) + t.getBody().spellcheck = 0; + + if (!s.readonly) + t._addEvents(); + + t.controlManager.onPostRender.dispatch(t, t.controlManager); + t.onPostRender.dispatch(t); + + if (s.directionality) + t.getBody().dir = s.directionality; + + if (s.nowrap) + t.getBody().style.whiteSpace = "nowrap"; + + if (s.custom_elements) { + function handleCustom(ed, o) { + each(explode(s.custom_elements), function(v) { + var n; + + if (v.indexOf('~') === 0) { + v = v.substring(1); + n = 'span'; + } else + n = 'div'; + + o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' _mce_name="$1"$2>'); + o.content = o.content.replace(new RegExp('', 'g'), ''); + }); + }; + + t.onBeforeSetContent.add(handleCustom); + t.onPostProcess.add(function(ed, o) { + if (o.set) + handleCustom(ed, o); + }); + } + + if (s.handle_node_change_callback) { + t.onNodeChange.add(function(ed, cm, n) { + t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed()); + }); + } + + if (s.save_callback) { + t.onSaveContent.add(function(ed, o) { + var h = t.execCallback('save_callback', t.id, o.content, t.getBody()); + + if (h) + o.content = h; + }); + } + + if (s.onchange_callback) { + t.onChange.add(function(ed, l) { + t.execCallback('onchange_callback', t, l); + }); + } + + if (s.convert_newlines_to_brs) { + t.onBeforeSetContent.add(function(ed, o) { + if (o.initial) + o.content = o.content.replace(/\r?\n/g, '
    '); + }); + } + + if (s.fix_nesting && isIE) { + t.onBeforeSetContent.add(function(ed, o) { + o.content = t._fixNesting(o.content); + }); + } + + if (s.preformatted) { + t.onPostProcess.add(function(ed, o) { + o.content = o.content.replace(/^\s*/, ''); + o.content = o.content.replace(/<\/pre>\s*$/, ''); + + if (o.set) + o.content = '
    ' + o.content + '
    '; + }); + } + + if (s.verify_css_classes) { + t.serializer.attribValueFilter = function(n, v) { + var s, cl; + + if (n == 'class') { + // Build regexp for classes + if (!t.classesRE) { + cl = t.dom.getClasses(); + + if (cl.length > 0) { + s = ''; + + each (cl, function(o) { + s += (s ? '|' : '') + o['class']; + }); + + t.classesRE = new RegExp('(' + s + ')', 'gi'); + } + } + + return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : ''; + } + + return v; + }; + } + + if (s.cleanup_callback) { + t.onBeforeSetContent.add(function(ed, o) { + o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); + }); + + t.onPreProcess.add(function(ed, o) { + if (o.set) + t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o); + + if (o.get) + t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o); + }); + + t.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); + + if (o.get) + o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o); + }); + } + + if (s.save_callback) { + t.onGetContent.add(function(ed, o) { + if (o.save) + o.content = t.execCallback('save_callback', t.id, o.content, t.getBody()); + }); + } + + if (s.handle_event_callback) { + t.onEvent.add(function(ed, e, o) { + if (t.execCallback('handle_event_callback', e, ed, o) === false) + Event.cancel(e); + }); + } + + // Add visual aids when new contents is added + t.onSetContent.add(function() { + t.addVisual(t.getBody()); + }); + + // Remove empty contents + if (s.padd_empty_editor) { + t.onPostProcess.add(function(ed, o) { + o.content = o.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/, ''); + }); + } + + if (isGecko) { + // Fix gecko link bug, when a link is placed at the end of block elements there is + // no way to move the caret behind the link. This fix adds a bogus br element after the link + function fixLinks(ed, o) { + each(ed.dom.select('a'), function(n) { + var pn = n.parentNode; + + if (ed.dom.isBlock(pn) && pn.lastChild === n) + ed.dom.add(pn, 'br', {'_mce_bogus' : 1}); + }); + }; + + t.onExecCommand.add(function(ed, cmd) { + if (cmd === 'CreateLink') + fixLinks(ed); + }); + + t.onSetContent.add(t.selection.onSetContent.add(fixLinks)); + + if (!s.readonly) { + try { + // Design mode must be set here once again to fix a bug where + // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again + d.designMode = 'Off'; + d.designMode = 'On'; + } catch (ex) { + // Will fail on Gecko if the editor is placed in an hidden container element + // The design mode will be set ones the editor is focused + } + } + } + + // A small timeout was needed since firefox will remove. Bug: #1838304 + setTimeout(function () { + if (t.removed) + return; + + t.load({initial : true, format : (s.cleanup_on_startup ? 'html' : 'raw')}); + t.startContent = t.getContent({format : 'raw'}); + t.initialized = true; + + t.onInit.dispatch(t); + t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc()); + t.execCallback('init_instance_callback', t); + t.focus(true); + t.nodeChanged({initial : 1}); + + // Load specified content CSS last + if (s.content_css) { + tinymce.each(explode(s.content_css), function(u) { + t.dom.loadCSS(t.documentBaseURI.toAbsolute(u)); + }); + } + + // Handle auto focus + if (s.auto_focus) { + setTimeout(function () { + var ed = tinymce.get(s.auto_focus); + + ed.selection.select(ed.getBody(), 1); + ed.selection.collapse(1); + ed.getWin().focus(); + }, 100); + } + }, 1); + + e = null; + }, + + + focus : function(sf) { + var oed, t = this, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc(); + + if (!sf) { + // Get selected control element + ieRng = t.selection.getRng(); + if (ieRng.item) { + controlElm = ieRng.item(0); + } + + // Is not content editable + if (!ce) + t.getWin().focus(); + + // Restore selected control element + // This is needed when for example an image is selected within a + // layer a call to focus will then remove the control selection + if (controlElm && controlElm.ownerDocument == doc) { + ieRng = doc.body.createControlRange(); + ieRng.addElement(controlElm); + ieRng.select(); + } + + } + + if (tinymce.activeEditor != t) { + if ((oed = tinymce.activeEditor) != null) + oed.onDeactivate.dispatch(oed, t); + + t.onActivate.dispatch(t, oed); + } + + tinymce._setActive(t); + }, + + execCallback : function(n) { + var t = this, f = t.settings[n], s; + + if (!f) + return; + + // Look through lookup + if (t.callbackLookup && (s = t.callbackLookup[n])) { + f = s.func; + s = s.scope; + } + + if (is(f, 'string')) { + s = f.replace(/\.\w+$/, ''); + s = s ? tinymce.resolve(s) : 0; + f = tinymce.resolve(f); + t.callbackLookup = t.callbackLookup || {}; + t.callbackLookup[n] = {func : f, scope : s}; + } + + return f.apply(s || t, Array.prototype.slice.call(arguments, 1)); + }, + + translate : function(s) { + var c = this.settings.language || 'en', i18n = tinymce.i18n; + + if (!s) + return ''; + + return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) { + return i18n[c + '.' + b] || '{#' + b + '}'; + }); + }, + + getLang : function(n, dv) { + return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}'); + }, + + getParam : function(n, dv, ty) { + var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o; + + if (ty === 'hash') { + o = {}; + + if (is(v, 'string')) { + each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) { + v = v.split('='); + + if (v.length > 1) + o[tr(v[0])] = tr(v[1]); + else + o[tr(v[0])] = tr(v); + }); + } else + o = v; + + return o; + } + + return v; + }, + + nodeChanged : function(o) { + var t = this, s = t.selection, n = (isIE ? s.getNode() : s.getStart()) || t.getBody(); + + // Fix for bug #1896577 it seems that this can not be fired while the editor is loading + if (t.initialized) { + o = o || {}; + n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state + + // Get parents and add them to object + o.parents = []; + t.dom.getParent(n, function(node) { + if (node.nodeName == 'BODY') + return true; + + o.parents.push(node); + }); + + t.onNodeChange.dispatch( + t, + o ? o.controlManager || t.controlManager : t.controlManager, + n, + s.isCollapsed(), + o + ); + } + }, + + addButton : function(n, s) { + var t = this; + + t.buttons = t.buttons || {}; + t.buttons[n] = s; + }, + + addCommand : function(n, f, s) { + this.execCommands[n] = {func : f, scope : s || this}; + }, + + addQueryStateHandler : function(n, f, s) { + this.queryStateCommands[n] = {func : f, scope : s || this}; + }, + + addQueryValueHandler : function(n, f, s) { + this.queryValueCommands[n] = {func : f, scope : s || this}; + }, + + addShortcut : function(pa, desc, cmd_func, sc) { + var t = this, c; + + if (!t.settings.custom_shortcuts) + return false; + + t.shortcuts = t.shortcuts || {}; + + if (is(cmd_func, 'string')) { + c = cmd_func; + + cmd_func = function() { + t.execCommand(c, false, null); + }; + } + + if (is(cmd_func, 'object')) { + c = cmd_func; + + cmd_func = function() { + t.execCommand(c[0], c[1], c[2]); + }; + } + + each(explode(pa), function(pa) { + var o = { + func : cmd_func, + scope : sc || this, + desc : desc, + alt : false, + ctrl : false, + shift : false + }; + + each(explode(pa, '+'), function(v) { + switch (v) { + case 'alt': + case 'ctrl': + case 'shift': + o[v] = true; + break; + + default: + o.charCode = v.charCodeAt(0); + o.keyCode = v.toUpperCase().charCodeAt(0); + } + }); + + t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o; + }); + + return true; + }, + + execCommand : function(cmd, ui, val, a) { + var t = this, s = 0, o, st; + + if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus)) + t.focus(); + + o = {}; + t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o); + if (o.terminate) + return false; + + // Command callback + if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) { + t.onExecCommand.dispatch(t, cmd, ui, val, a); + return true; + } + + // Registred commands + if (o = t.execCommands[cmd]) { + st = o.func.call(o.scope, ui, val); + + // Fall through on true + if (st !== true) { + t.onExecCommand.dispatch(t, cmd, ui, val, a); + return st; + } + } + + // Plugin commands + each(t.plugins, function(p) { + if (p.execCommand && p.execCommand(cmd, ui, val)) { + t.onExecCommand.dispatch(t, cmd, ui, val, a); + s = 1; + return false; + } + }); + + if (s) + return true; + + // Theme commands + if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) { + t.onExecCommand.dispatch(t, cmd, ui, val, a); + return true; + } + + // Execute global commands + if (tinymce.GlobalCommands.execCommand(t, cmd, ui, val)) { + t.onExecCommand.dispatch(t, cmd, ui, val, a); + return true; + } + + // Editor commands + if (t.editorCommands.execCommand(cmd, ui, val)) { + t.onExecCommand.dispatch(t, cmd, ui, val, a); + return true; + } + + // Browser commands + t.getDoc().execCommand(cmd, ui, val); + t.onExecCommand.dispatch(t, cmd, ui, val, a); + }, + + queryCommandState : function(cmd) { + var t = this, o, s; + + // Is hidden then return undefined + if (t._isHidden()) + return; + + // Registred commands + if (o = t.queryStateCommands[cmd]) { + s = o.func.call(o.scope); + + // Fall though on true + if (s !== true) + return s; + } + + // Registred commands + o = t.editorCommands.queryCommandState(cmd); + if (o !== -1) + return o; + + // Browser commands + try { + return this.getDoc().queryCommandState(cmd); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + queryCommandValue : function(c) { + var t = this, o, s; + + // Is hidden then return undefined + if (t._isHidden()) + return; + + // Registred commands + if (o = t.queryValueCommands[c]) { + s = o.func.call(o.scope); + + // Fall though on true + if (s !== true) + return s; + } + + // Registred commands + o = t.editorCommands.queryCommandValue(c); + if (is(o)) + return o; + + // Browser commands + try { + return this.getDoc().queryCommandValue(c); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + show : function() { + var t = this; + + DOM.show(t.getContainer()); + DOM.hide(t.id); + t.load(); + }, + + hide : function() { + var t = this, d = t.getDoc(); + + // Fixed bug where IE has a blinking cursor left from the editor + if (isIE && d) + d.execCommand('SelectAll'); + + // We must save before we hide so Safari doesn't crash + t.save(); + DOM.hide(t.getContainer()); + DOM.setStyle(t.id, 'display', t.orgDisplay); + }, + + isHidden : function() { + return !DOM.isHidden(this.id); + }, + + setProgressState : function(b, ti, o) { + this.onSetProgressState.dispatch(this, b, ti, o); + + return b; + }, + + load : function(o) { + var t = this, e = t.getElement(), h; + + if (e) { + o = o || {}; + o.load = true; + + // Double encode existing entities in the value + h = t.setContent(is(e.value) ? e.value : e.innerHTML, o); + o.element = e; + + if (!o.no_events) + t.onLoadContent.dispatch(t, o); + + o.element = e = null; + + return h; + } + }, + + save : function(o) { + var t = this, e = t.getElement(), h, f; + + if (!e || !t.initialized) + return; + + o = o || {}; + o.save = true; + + // Add undo level will trigger onchange event + if (!o.no_events) { + t.undoManager.typing = 0; + t.undoManager.add(); + } + + o.element = e; + h = o.content = t.getContent(o); + + if (!o.no_events) + t.onSaveContent.dispatch(t, o); + + h = o.content; + + if (!/TEXTAREA|INPUT/i.test(e.nodeName)) { + e.innerHTML = h; + + // Update hidden form element + if (f = DOM.getParent(t.id, 'form')) { + each(f.elements, function(e) { + if (e.name == t.id) { + e.value = h; + return false; + } + }); + } + } else + e.value = h; + + o.element = e = null; + + return h; + }, + + setContent : function(h, o) { + var t = this; + + o = o || {}; + o.format = o.format || 'html'; + o.set = true; + o.content = h; + + if (!o.no_events) + t.onBeforeSetContent.dispatch(t, o); + + // 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 && (h.length === 0 || /^\s+$/.test(h))) { + o.content = t.dom.setHTML(t.getBody(), '
    '); + o.format = 'raw'; + } + + o.content = t.dom.setHTML(t.getBody(), tinymce.trim(o.content)); + + if (o.format != 'raw' && t.settings.cleanup) { + o.getInner = true; + o.content = t.dom.setHTML(t.getBody(), t.serializer.serialize(t.getBody(), o)); + } + + if (!o.no_events) + t.onSetContent.dispatch(t, o); + + return o.content; + }, + + getContent : function(o) { + var t = this, h; + + o = o || {}; + o.format = o.format || 'html'; + o.get = true; + + if (!o.no_events) + t.onBeforeGetContent.dispatch(t, o); + + if (o.format != 'raw' && t.settings.cleanup) { + o.getInner = true; + h = t.serializer.serialize(t.getBody(), o); + } else + h = t.getBody().innerHTML; + + h = h.replace(/^\s*|\s*$/g, ''); + o.content = h; + + if (!o.no_events) + t.onGetContent.dispatch(t, o); + + return o.content; + }, + + isDirty : function() { + var t = this; + + return tinymce.trim(t.startContent) != tinymce.trim(t.getContent({format : 'raw', no_events : 1})) && !t.isNotDirty; + }, + + getContainer : function() { + var t = this; + + if (!t.container) + t.container = DOM.get(t.editorContainer || t.id + '_parent'); + + return t.container; + }, + + getContentAreaContainer : function() { + return this.contentAreaContainer; + }, + + getElement : function() { + return DOM.get(this.settings.content_element || this.id); + }, + + getWin : function() { + var t = this, e; + + if (!t.contentWindow) { + e = DOM.get(t.id + "_ifr"); + + if (e) + t.contentWindow = e.contentWindow; + } + + return t.contentWindow; + }, + + getDoc : function() { + var t = this, w; + + if (!t.contentDocument) { + w = t.getWin(); + + if (w) + t.contentDocument = w.document; + } + + return t.contentDocument; + }, + + getBody : function() { + return this.bodyElement || this.getDoc().body; + }, + + convertURL : function(u, n, e) { + var t = this, s = t.settings; + + // Use callback instead + if (s.urlconverter_callback) + return t.execCallback('urlconverter_callback', u, e, true, n); + + // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs + if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0) + return u; + + // Convert to relative + if (s.relative_urls) + return t.documentBaseURI.toRelative(u); + + // Convert to absolute + u = t.documentBaseURI.toAbsolute(u, s.remove_script_host); + + return u; + }, + + addVisual : function(e) { + var t = this, s = t.settings; + + e = e || t.getBody(); + + if (!is(t.hasVisual)) + t.hasVisual = s.visual; + + each(t.dom.select('table,a', e), function(e) { + var v; + + switch (e.nodeName) { + case 'TABLE': + v = t.dom.getAttrib(e, 'border'); + + if (!v || v == '0') { + if (t.hasVisual) + t.dom.addClass(e, s.visual_table_class); + else + t.dom.removeClass(e, s.visual_table_class); + } + + return; + + case 'A': + v = t.dom.getAttrib(e, 'name'); + + if (v) { + if (t.hasVisual) + t.dom.addClass(e, 'mceItemAnchor'); + else + t.dom.removeClass(e, 'mceItemAnchor'); + } + + return; + } + }); + + t.onVisualAid.dispatch(t, e, t.hasVisual); + }, + + remove : function() { + var t = this, e = t.getContainer(); + + t.removed = 1; // Cancels post remove event execution + t.hide(); + + t.execCallback('remove_instance_callback', t); + t.onRemove.dispatch(t); + + // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command + t.onExecCommand.listeners = []; + + tinymce.remove(t); + DOM.remove(e); + }, + + destroy : function(s) { + var t = this; + + // One time is enough + if (t.destroyed) + return; + + if (!s) { + tinymce.removeUnload(t.destroy); + tinyMCE.onBeforeUnload.remove(t._beforeUnload); + + // Manual destroy + if (t.theme && t.theme.destroy) + t.theme.destroy(); + + // Destroy controls, selection and dom + t.controlManager.destroy(); + t.selection.destroy(); + t.dom.destroy(); + + // Remove all events + + // Don't clear the window or document if content editable + // is enabled since other instances might still be present + if (!t.settings.content_editable) { + Event.clear(t.getWin()); + Event.clear(t.getDoc()); + } + + Event.clear(t.getBody()); + Event.clear(t.formElement); + } + + if (t.formElement) { + t.formElement.submit = t.formElement._mceOldSubmit; + t.formElement._mceOldSubmit = null; + } + + t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null; + + if (t.selection) + t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null; + + t.destroyed = 1; + }, + + // Internal functions + + _addEvents : function() { + // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset + var t = this, i, s = t.settings, lo = { + mouseup : 'onMouseUp', + mousedown : 'onMouseDown', + click : 'onClick', + keyup : 'onKeyUp', + keydown : 'onKeyDown', + keypress : 'onKeyPress', + submit : 'onSubmit', + reset : 'onReset', + contextmenu : 'onContextMenu', + dblclick : 'onDblClick', + paste : 'onPaste' // Doesn't work in all browsers yet + }; + + function eventHandler(e, o) { + var ty = e.type; + + // Don't fire events when it's removed + if (t.removed) + return; + + // Generic event handler + if (t.onEvent.dispatch(t, e, o) !== false) { + // Specific event handler + t[lo[e.fakeType || e.type]].dispatch(t, e, o); + } + }; + + // Add DOM events + each(lo, function(v, k) { + switch (k) { + case 'contextmenu': + if (tinymce.isOpera) { + // Fake contextmenu on Opera + t.dom.bind(t.getBody(), 'mousedown', function(e) { + if (e.ctrlKey) { + e.fakeType = 'contextmenu'; + eventHandler(e); + } + }); + } else + t.dom.bind(t.getBody(), k, eventHandler); + break; + + case 'paste': + t.dom.bind(t.getBody(), k, function(e) { + eventHandler(e); + }); + break; + + case 'submit': + case 'reset': + t.dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler); + break; + + default: + t.dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler); + } + }); + + t.dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) { + t.focus(true); + }); + + + // Fixes bug where a specified document_base_uri could result in broken images + // This will also fix drag drop of images in Gecko + if (tinymce.isGecko) { + // Convert all images to absolute URLs +/* t.onSetContent.add(function(ed, o) { + each(ed.dom.select('img'), function(e) { + var v; + + if (v = e.getAttribute('_mce_src')) + e.src = t.documentBaseURI.toAbsolute(v); + }) + });*/ + + t.dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) { + var v; + + e = e.target; + + if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('_mce_src'))) + e.src = t.documentBaseURI.toAbsolute(v); + }); + } + + // Set various midas options in Gecko + if (isGecko) { + function setOpts() { + var t = this, d = t.getDoc(), s = t.settings; + + if (isGecko && !s.readonly) { + if (t._isHidden()) { + try { + if (!s.content_editable) + d.designMode = 'On'; + } catch (ex) { + // Fails if it's hidden + } + } + + try { + // Try new Gecko method + d.execCommand("styleWithCSS", 0, false); + } catch (ex) { + // Use old method + if (!t._isHidden()) + try {d.execCommand("useCSS", 0, true);} catch (ex) {} + } + + if (!s.table_inline_editing) + try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {} + + if (!s.object_resizing) + try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {} + } + }; + + t.onBeforeExecCommand.add(setOpts); + t.onMouseDown.add(setOpts); + } + + // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 + // WebKit can't even do simple things like selecting an image + // This also fixes so it's possible to select mceItemAnchors + if (tinymce.isWebKit) { + t.onClick.add(function(ed, e) { + e = e.target; + + // Needs tobe the setBaseAndExtend or it will fail to select floated images + if (e.nodeName == 'IMG' || (e.nodeName == 'A' && t.dom.hasClass(e, 'mceItemAnchor'))) + t.selection.getSel().setBaseAndExtent(e, 0, e, 1); + }); + } + + // Add node change handlers + t.onMouseUp.add(t.nodeChanged); + //t.onClick.add(t.nodeChanged); + t.onKeyUp.add(function(ed, e) { + var c = e.keyCode; + + if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey) + t.nodeChanged(); + }); + + // Add reset handler + t.onReset.add(function() { + t.setContent(t.startContent, {format : 'raw'}); + }); + + // Add shortcuts + if (s.custom_shortcuts) { + if (s.custom_undo_redo_keyboard_shortcuts) { + t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo'); + t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo'); + } + + // Add default shortcuts for gecko + t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold'); + t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic'); + t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline'); + + // BlockFormat shortcuts keys + for (i=1; i<=6; i++) + t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]); + + t.addShortcut('ctrl+7', '', ['FormatBlock', false, '

    ']); + t.addShortcut('ctrl+8', '', ['FormatBlock', false, '

    ']); + t.addShortcut('ctrl+9', '', ['FormatBlock', false, '
    ']); + + function find(e) { + var v = null; + + if (!e.altKey && !e.ctrlKey && !e.metaKey) + return v; + + each(t.shortcuts, function(o) { + if (tinymce.isMac && o.ctrl != e.metaKey) + return; + else if (!tinymce.isMac && o.ctrl != e.ctrlKey) + return; + + if (o.alt != e.altKey) + return; + + if (o.shift != e.shiftKey) + return; + + if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) { + v = o; + return false; + } + }); + + return v; + }; + + t.onKeyUp.add(function(ed, e) { + var o = find(e); + + if (o) + return Event.cancel(e); + }); + + t.onKeyPress.add(function(ed, e) { + var o = find(e); + + if (o) + return Event.cancel(e); + }); + + t.onKeyDown.add(function(ed, e) { + var o = find(e); + + if (o) { + o.func.call(o.scope); + return Event.cancel(e); + } + }); + } + + if (tinymce.isIE) { + // Fix so resize will only update the width and height attributes not the styles of an image + // It will also block mceItemNoResize items + t.dom.bind(t.getDoc(), 'controlselect', function(e) { + var re = t.resizeInfo, cb; + + e = e.target; + + // Don't do this action for non image elements + if (e.nodeName !== 'IMG') + return; + + if (re) + t.dom.unbind(re.node, re.ev, re.cb); + + if (!t.dom.hasClass(e, 'mceItemNoResize')) { + ev = 'resizeend'; + cb = t.dom.bind(e, ev, function(e) { + var v; + + e = e.target; + + if (v = t.dom.getStyle(e, 'width')) { + t.dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, '')); + t.dom.setStyle(e, 'width', ''); + } + + if (v = t.dom.getStyle(e, 'height')) { + t.dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, '')); + t.dom.setStyle(e, 'height', ''); + } + }); + } else { + ev = 'resizestart'; + cb = t.dom.bind(e, 'resizestart', Event.cancel, Event); + } + + re = t.resizeInfo = { + node : e, + ev : ev, + cb : cb + }; + }); + + t.onKeyDown.add(function(ed, e) { + switch (e.keyCode) { + case 8: + // Fix IE control + backspace browser bug + if (t.selection.getRng().item) { + ed.dom.remove(t.selection.getRng().item(0)); + return Event.cancel(e); + } + } + }); + + /*if (t.dom.boxModel) { + t.getBody().style.height = '100%'; + + Event.add(t.getWin(), 'resize', function(e) { + var docElm = t.getDoc().documentElement; + + docElm.style.height = (docElm.offsetHeight - 10) + 'px'; + }); + }*/ + } + + if (tinymce.isOpera) { + t.onClick.add(function(ed, e) { + Event.prevent(e); + }); + } + + // Add custom undo/redo handlers + if (s.custom_undo_redo) { + function addUndo() { + t.undoManager.typing = 0; + t.undoManager.add(); + }; + + t.dom.bind(t.getDoc(), 'focusout', function(e) { + if (!t.removed && t.undoManager.typing) + addUndo(); + }); + + t.onKeyUp.add(function(ed, e) { + if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey) + addUndo(); + }); + + t.onKeyDown.add(function(ed, e) { + var rng, parent, bookmark; + + // IE has a really odd bug where the DOM might include an node that doesn't have + // a proper structure. If you try to access nodeValue it would throw an illegal value exception. + // This seems to only happen when you delete contents and it seems to be avoidable if you refresh the element + // after you delete contents from it. See: #3008923 + if (isIE && e.keyCode == 46) { + rng = t.selection.getRng(); + + if (rng.parentElement) { + parent = rng.parentElement(); + + // Select next word when ctrl key is used in combo with delete + if (e.ctrlKey) { + rng.moveEnd('word', 1); + rng.select(); + } + + // Delete contents + t.selection.getSel().clear(); + + // Check if we are within the same parent + if (rng.parentElement() == parent) { + bookmark = t.selection.getBookmark(); + + try { + // Update the HTML and hopefully it will remove the artifacts + parent.innerHTML = parent.innerHTML; + } catch (ex) { + // And since it's IE it can sometimes produce an unknown runtime error + } + + // Restore the caret position + t.selection.moveToBookmark(bookmark); + } + + // Block the default delete behavior since it might be broken + e.preventDefault(); + return; + } + } + + // Is caracter positon keys + if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45) { + if (t.undoManager.typing) + addUndo(); + + return; + } + + if (!t.undoManager.typing) { + t.undoManager.add(); + t.undoManager.typing = 1; + } + }); + + t.onMouseDown.add(function() { + if (t.undoManager.typing) + addUndo(); + }); + } + }, + + _isHidden : function() { + var s; + + if (!isGecko) + return 0; + + // Weird, wheres that cursor selection? + s = this.selection.getSel(); + return (!s || !s.rangeCount || s.rangeCount == 0); + }, + + // Fix for bug #1867292 + _fixNesting : function(s) { + var d = [], i; + + s = s.replace(/<(\/)?([^\s>]+)[^>]*?>/g, function(a, b, c) { + var e; + + // Handle end element + if (b === '/') { + if (!d.length) + return ''; + + if (c !== d[d.length - 1].tag) { + for (i=d.length - 1; i>=0; i--) { + if (d[i].tag === c) { + d[i].close = 1; + break; + } + } + + return ''; + } else { + d.pop(); + + if (d.length && d[d.length - 1].close) { + a = a + ''; + d.pop(); + } + } + } else { + // Ignore these + if (/^(br|hr|input|meta|img|link|param)$/i.test(c)) + return a; + + // Ignore closed ones + if (/\/>$/.test(a)) + return a; + + d.push({tag : c}); // Push start element + } + + return a; + }); + + // End all open tags + for (i=d.length - 1; i>=0; i--) + s += ''; + + return s; + } + }); +})(tinymce); + +(function(tinymce) { + // Added for compression purposes + var each = tinymce.each, undefined, TRUE = true, FALSE = false; + + tinymce.EditorCommands = function(editor) { + var dom = editor.dom, + selection = editor.selection, + commands = {state: {}, exec : {}, value : {}}, + settings = editor.settings, + bookmark; + + function execCommand(command, ui, value) { + var func; + + command = command.toLowerCase(); + if (func = commands.exec[command]) { + func(command, ui, value); + return TRUE; + } + + return FALSE; + }; + + function queryCommandState(command) { + var func; + + command = command.toLowerCase(); + if (func = commands.state[command]) + return func(command); + + return -1; + }; + + function queryCommandValue(command) { + var func; + + command = command.toLowerCase(); + if (func = commands.value[command]) + return func(command); + + return FALSE; + }; + + function addCommands(command_list, type) { + type = type || 'exec'; + + each(command_list, function(callback, command) { + each(command.toLowerCase().split(','), function(command) { + commands[type][command] = callback; + }); + }); + }; + + // Expose public methods + tinymce.extend(this, { + execCommand : execCommand, + queryCommandState : queryCommandState, + queryCommandValue : queryCommandValue, + addCommands : addCommands + }); + + // Private methods + + function execNativeCommand(command, ui, value) { + if (ui === undefined) + ui = FALSE; + + if (value === undefined) + value = null; + + return editor.getDoc().execCommand(command, ui, value); + }; + + function isFormatMatch(name) { + return editor.formatter.match(name); + }; + + function toggleFormat(name, value) { + editor.formatter.toggle(name, value ? {value : value} : undefined); + }; + + function storeSelection(type) { + bookmark = selection.getBookmark(type); + }; + + function restoreSelection() { + selection.moveToBookmark(bookmark); + }; + + // Add execCommand overrides + addCommands({ + // Ignore these, added for compatibility + 'mceResetDesignMode,mceBeginUndoLevel' : function() {}, + + // Add undo manager logic + 'mceEndUndoLevel,mceAddUndoLevel' : function() { + editor.undoManager.add(); + }, + + 'Cut,Copy,Paste' : function(command) { + var doc = editor.getDoc(), failed; + + // Try executing the native command + try { + execNativeCommand(command); + } catch (ex) { + // Command failed + failed = TRUE; + } + + // Present alert message about clipboard access not being available + if (failed || !doc.queryCommandSupported(command)) { + if (tinymce.isGecko) { + editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) { + if (state) + open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank'); + }); + } else + editor.windowManager.alert(editor.getLang('clipboard_no_support')); + } + }, + + // Override unlink command + unlink : function(command) { + if (selection.isCollapsed()) + selection.select(selection.getNode()); + + execNativeCommand(command); + selection.collapse(FALSE); + }, + + // Override justify commands to use the text formatter engine + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) { + var align = command.substring(7); + + // Remove all other alignments first + each('left,center,right,full'.split(','), function(name) { + if (align != name) + editor.formatter.remove('align' + name); + }); + + toggleFormat('align' + align); + }, + + // 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' : 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) { + editor.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) { + selection.setContent(value); + }, + + mceInsertRawHTML : function(command, ui, value) { + selection.setContent('tiny_mce_marker'); + editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, value)); + }, + + mceSetContent : function(command, ui, value) { + editor.setContent(value); + }, + + 'Indent,Outdent' : function(command) { + var intentValue, indentUnit, value; + + // Setup indent level + intentValue = settings.indentation; + indentUnit = /[a-z%]+$/i.exec(intentValue); + intentValue = parseInt(intentValue); + + if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) { + each(selection.getSelectedBlocks(), function(element) { + if (command == 'outdent') { + value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue); + dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : ''); + } else + dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit); + }); + } else + execNativeCommand(command); + }, + + mceRepaint : function() { + var bookmark; + + if (tinymce.isGecko) { + try { + storeSelection(TRUE); + + if (selection.getSel()) + selection.getSel().selectAllChildren(editor.getBody()); + + selection.collapse(TRUE); + restoreSelection(); + } catch (ex) { + // Ignore + } + } + }, + + mceToggleFormat : function(command, ui, value) { + editor.formatter.toggle(value); + }, + + InsertHorizontalRule : function() { + selection.setContent('
    '); + }, + + mceToggleVisualAid : function() { + editor.hasVisual = !editor.hasVisual; + editor.addVisual(); + }, + + mceReplaceContent : function(command, ui, value) { + selection.setContent(value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'}))); + }, + + mceInsertLink : function(command, ui, value) { + var link = dom.getParent(selection.getNode(), 'a'); + + if (tinymce.is(value, 'string')) + value = {href : value}; + + if (!link) { + execNativeCommand('CreateLink', FALSE, 'javascript:mctmp(0);'); + each(dom.select('a[href=javascript:mctmp(0);]'), function(link) { + dom.setAttribs(link, value); + }); + } else { + if (value.href) + dom.setAttribs(link, value); + else + editor.dom.remove(link, TRUE); + } + }, + + selectAll : function() { + var root = dom.getRoot(), rng = dom.createRng(); + + rng.setStart(root, 0); + rng.setEnd(root, root.childNodes.length); + + editor.selection.setRng(rng); + } + }); + + // Add queryCommandState overrides + addCommands({ + // Override justify commands + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) { + return isFormatMatch('align' + command.substring(7)); + }, + + 'Bold,Italic,Underline,Strikethrough' : function(command) { + return isFormatMatch(command); + }, + + mceBlockQuote : function() { + return isFormatMatch('blockquote'); + }, + + Outdent : function() { + var node; + + if (settings.inline_styles) { + if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0) + return TRUE; + + if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0) + return TRUE; + } + + return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE')); + }, + + 'InsertUnorderedList,InsertOrderedList' : function(command) { + return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : 'OL'); + } + }, 'state'); + + // Add queryCommandValue overrides + addCommands({ + 'FontSize,FontName' : function(command) { + var value = 0, parent; + + if (parent = dom.getParent(selection.getNode(), 'span')) { + if (command == 'fontsize') + value = parent.style.fontSize; + else + value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase(); + } + + return value; + } + }, 'value'); + + // Add undo manager logic + if (settings.custom_undo_redo) { + addCommands({ + Undo : function() { + editor.undoManager.undo(); + }, + + Redo : function() { + editor.undoManager.redo(); + } + }); + } + }; +})(tinymce); +(function(tinymce) { + var Dispatcher = tinymce.util.Dispatcher; + + tinymce.UndoManager = function(editor) { + var self, index = 0, data = []; + + function getContent() { + return tinymce.trim(editor.getContent({format : 'raw', no_events : 1})); + }; + + return self = { + typing : 0, + + onAdd : new Dispatcher(self), + onUndo : new Dispatcher(self), + onRedo : new Dispatcher(self), + + add : function(level) { + var i, settings = editor.settings, lastLevel; + + level = level || {}; + level.content = getContent(); + + // Add undo level if needed + lastLevel = data[index]; + if (lastLevel && lastLevel.content == level.content) { + if (index > 0 || data.length == 1) + return null; + } + + // 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) { + // Treat first level as initial + if (index == 0) + data = []; + else + 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 = 0; + } + + if (index > 0) { + level = data[--index]; + + editor.setContent(level.content, {format : 'raw'}); + editor.selection.moveToBookmark(level.bookmark); + + 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 = self.typing = 0; + }, + + hasUndo : function() { + return index > 0 || self.typing; + }, + + hasRedo : function() { + return index < data.length - 1; + } + }; + }; +})(tinymce); + +(function(tinymce) { + // Shorten names + var Event = tinymce.dom.Event, + isIE = tinymce.isIE, + isGecko = tinymce.isGecko, + isOpera = tinymce.isOpera, + each = tinymce.each, + extend = tinymce.extend, + TRUE = true, + FALSE = false; + + function cloneFormats(node) { + var clone, temp, inner; + + do { + if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) { + if (clone) { + temp = node.cloneNode(false); + temp.appendChild(clone); + clone = temp; + } else { + clone = inner = node.cloneNode(false); + } + + clone.removeAttribute('id'); + } + } while (node = node.parentNode); + + if (clone) + return {wrapper : clone, inner : inner}; + }; + + // Checks if the selection/caret is at the end of the specified block element + function isAtEnd(rng, par) { + var rng2 = par.ownerDocument.createRange(); + + rng2.setStart(rng.endContainer, rng.endOffset); + rng2.setEndAfter(par); + + // Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element + return rng2.cloneContents().textContent.length == 0; + }; + + function isEmpty(n) { + n = n.innerHTML; + + n = n.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi, '-'); // Keep these convert them to - chars + n = n.replace(/<[^>]+>/g, ''); // Remove all tags + + return n.replace(/[ \u00a0\t\r\n]+/g, '') == ''; + }; + + function splitList(selection, dom, li) { + var listBlock, block; + + if (isEmpty(li)) { + listBlock = dom.getParent(li, 'ul,ol'); + + if (!dom.getParent(listBlock.parentNode, 'ul,ol')) { + dom.split(listBlock, li); + block = dom.create('p', 0, '
    '); + dom.replace(block, li); + selection.select(block, 1); + } + + return FALSE; + } + + return TRUE; + }; + + tinymce.create('tinymce.ForceBlocks', { + ForceBlocks : function(ed) { + var t = this, s = ed.settings, elm; + + t.editor = ed; + t.dom = ed.dom; + elm = (s.forced_root_block || 'p').toLowerCase(); + s.element = elm.toUpperCase(); + + ed.onPreInit.add(t.setup, t); + + t.reOpera = new RegExp('(\\u00a0| | )<\/' + elm + '>', 'gi'); + t.rePadd = new RegExp(']+)><\\\/p>|]+)\\\/>|]+)>\\s+<\\\/p>|

    <\\\/p>||

    \\s+<\\\/p>'.replace(/p/g, elm), 'gi'); + t.reNbsp2BR1 = new RegExp(']+)>[\\s\\u00a0]+<\\\/p>|

    [\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi'); + t.reNbsp2BR2 = new RegExp('<%p()([^>]+)>( | )<\\\/%p>|<%p>( | )<\\\/%p>'.replace(/%p/g, elm), 'gi'); + t.reBR2Nbsp = new RegExp(']+)>\\s*
    \\s*<\\\/p>|

    \\s*
    \\s*<\\\/p>'.replace(/p/g, elm), 'gi'); + + function padd(ed, o) { + if (isOpera) + o.content = o.content.replace(t.reOpera, ''); + + o.content = o.content.replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0'); + + if (!isIE && !isOpera && o.set) { + // Use   instead of BR in padded paragraphs + o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2>
    '); + o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2>
    '); + } else + o.content = o.content.replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0'); + }; + + ed.onBeforeSetContent.add(padd); + ed.onPostProcess.add(padd); + + if (s.forced_root_block) { + ed.onInit.add(t.forceRoots, t); + ed.onSetContent.add(t.forceRoots, t); + ed.onBeforeGetContent.add(t.forceRoots, t); + } + }, + + setup : function() { + var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection; + + // Force root blocks when typing and when getting output + if (s.forced_root_block) { + ed.onBeforeExecCommand.add(t.forceRoots, t); + ed.onKeyUp.add(t.forceRoots, t); + ed.onPreProcess.add(t.forceRoots, t); + } + + if (s.force_br_newlines) { + // Force IE to produce BRs on enter + if (isIE) { + ed.onKeyPress.add(function(ed, e) { + var n; + + if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') { + selection.setContent('
    ', {format : 'raw'}); + n = dom.get('__'); + n.removeAttribute('id'); + selection.select(n); + selection.collapse(); + return Event.cancel(e); + } + }); + } + } + + if (s.force_p_newlines) { + if (!isIE) { + ed.onKeyPress.add(function(ed, e) { + if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e)) + Event.cancel(e); + }); + } else { + // Ungly hack to for IE to preserve the formatting when you press + // enter at the end of a block element with formatted contents + // This logic overrides the browsers default logic with + // custom logic that enables us to control the output + tinymce.addUnload(function() { + t._previousFormats = 0; // Fix IE leak + }); + + ed.onKeyPress.add(function(ed, e) { + t._previousFormats = 0; + + // Clone the current formats, this will later be applied to the new block contents + if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles) + t._previousFormats = cloneFormats(ed.selection.getStart()); + }); + + ed.onKeyUp.add(function(ed, e) { + // Let IE break the element and the wrap the new caret location in the previous formats + if (e.keyCode == 13 && !e.shiftKey) { + var parent = ed.selection.getStart(), fmt = t._previousFormats; + + // Parent is an empty block + if (!parent.hasChildNodes()) { + parent = dom.getParent(parent, dom.isBlock); + + if (parent) { + parent.innerHTML = ''; + + if (t._previousFormats) { + parent.appendChild(fmt.wrapper); + fmt.inner.innerHTML = '\uFEFF'; + } else + parent.innerHTML = '\uFEFF'; + + selection.select(parent, 1); + ed.getDoc().execCommand('Delete', false, null); + } + } + } + }); + } + + if (isGecko) { + ed.onKeyDown.add(function(ed, e) { + if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) + t.backspaceDelete(e, e.keyCode == 8); + }); + } + } + + // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973 + if (tinymce.isWebKit) { + function insertBr(ed) { + var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h; + + // Insert BR element + rng.insertNode(br = dom.create('br')); + + // Place caret after BR + rng.setStartAfter(br); + rng.setEndAfter(br); + selection.setRng(rng); + + // Could not place caret after BR then insert an nbsp entity and move the caret + if (selection.getSel().focusNode == br.previousSibling) { + selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br)); + selection.collapse(TRUE); + } + + // Create a temporary DIV after the BR and get the position as it + // seems like getPos() returns 0 for text nodes and BR elements. + dom.insertAfter(div, br); + divYPos = dom.getPos(div).y; + dom.remove(div); + + // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117 + if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port. + ed.getWin().scrollTo(0, divYPos); + }; + + ed.onKeyPress.add(function(ed, e) { + if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) { + insertBr(ed); + Event.cancel(e); + } + }); + } + + // Padd empty inline elements within block elements + // For example:

    becomes

     

    + ed.onPreProcess.add(function(ed, o) { + each(dom.select('p,h1,h2,h3,h4,h5,h6,div', o.node), function(p) { + if (isEmpty(p)) { + each(dom.select('span,em,strong,b,i', o.node), function(n) { + if (!n.hasChildNodes()) { + n.appendChild(ed.getDoc().createTextNode('\u00a0')); + return FALSE; // Break the loop one padding is enough + } + }); + } + }); + }); + + // IE specific fixes + if (isIE) { + // Replaces IE:s auto generated paragraphs with the specified element name + if (s.element != 'P') { + ed.onKeyPress.add(function(ed, e) { + t.lastElm = selection.getNode().nodeName; + }); + + ed.onKeyUp.add(function(ed, e) { + var bl, n = selection.getNode(), b = ed.getBody(); + + if (b.childNodes.length === 1 && n.nodeName == 'P') { + n = dom.rename(n, s.element); + selection.select(n); + selection.collapse(); + ed.nodeChanged(); + } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') { + bl = dom.getParent(n, 'p'); + + if (bl) { + dom.rename(bl, s.element); + ed.nodeChanged(); + } + } + }); + } + } + }, + + find : function(n, t, s) { + var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, FALSE), c = -1; + + while (n = w.nextNode()) { + c++; + + // Index by node + if (t == 0 && n == s) + return c; + + // Node by index + if (t == 1 && c == s) + return n; + } + + return -1; + }, + + forceRoots : function(ed, e) { + var t = this, ed = t.editor, b = ed.getBody(), d = ed.getDoc(), se = ed.selection, s = se.getSel(), r = se.getRng(), si = -2, ei, so, eo, tr, c = -0xFFFFFF; + var nx, bl, bp, sp, le, nl = b.childNodes, i, n, eid; + + // Fix for bug #1863847 + //if (e && e.keyCode == 13) + // return TRUE; + + // Wrap non blocks into blocks + for (i = nl.length - 1; i >= 0; i--) { + nx = nl[i]; + + // Ignore internal elements + if (nx.nodeType === 1 && nx.getAttribute('_mce_type')) { + bl = null; + continue; + } + + // Is text or non block element + if (nx.nodeType === 3 || (!t.dom.isBlock(nx) && nx.nodeType !== 8 && !/^(script|mce:script|style|mce:style)$/i.test(nx.nodeName))) { + if (!bl) { + // Create new block but ignore whitespace + if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) { + // Store selection + if (si == -2 && r) { + if (!isIE) { + // If selection is element then mark it + if (r.startContainer.nodeType == 1 && (n = r.startContainer.childNodes[r.startOffset]) && n.nodeType == 1) { + // Save the id of the selected element + eid = n.getAttribute("id"); + n.setAttribute("id", "__mce"); + } else { + // If element is inside body, might not be the case in contentEdiable mode + if (ed.dom.getParent(r.startContainer, function(e) {return e === b;})) { + so = r.startOffset; + eo = r.endOffset; + si = t.find(b, 0, r.startContainer); + ei = t.find(b, 0, r.endContainer); + } + } + } else { + // Force control range into text range + if (r.item) { + tr = d.body.createTextRange(); + tr.moveToElementText(r.item(0)); + r = tr; + } + + tr = d.body.createTextRange(); + tr.moveToElementText(b); + tr.collapse(1); + bp = tr.move('character', c) * -1; + + tr = r.duplicate(); + tr.collapse(1); + sp = tr.move('character', c) * -1; + + tr = r.duplicate(); + tr.collapse(0); + le = (tr.move('character', c) * -1) - sp; + + si = sp - bp; + ei = le; + } + } + + // Uses replaceChild instead of cloneNode since it removes selected attribute from option elements on IE + // See: http://support.microsoft.com/kb/829907 + bl = ed.dom.create(ed.settings.forced_root_block); + nx.parentNode.replaceChild(bl, nx); + bl.appendChild(nx); + } + } else { + if (bl.hasChildNodes()) + bl.insertBefore(nx, bl.firstChild); + else + bl.appendChild(nx); + } + } else + bl = null; // Time to create new block + } + + // Restore selection + if (si != -2) { + if (!isIE) { + bl = b.getElementsByTagName(ed.settings.element)[0]; + r = d.createRange(); + + // Select last location or generated block + if (si != -1) + r.setStart(t.find(b, 1, si), so); + else + r.setStart(bl, 0); + + // Select last location or generated block + if (ei != -1) + r.setEnd(t.find(b, 1, ei), eo); + else + r.setEnd(bl, 0); + + if (s) { + s.removeAllRanges(); + s.addRange(r); + } + } else { + try { + r = s.createRange(); + r.moveToElementText(b); + r.collapse(1); + r.moveStart('character', si); + r.moveEnd('character', ei); + r.select(); + } catch (ex) { + // Ignore + } + } + } else if (!isIE && (n = ed.dom.get('__mce'))) { + // Restore the id of the selected element + if (eid) + n.setAttribute('id', eid); + else + n.removeAttribute('id'); + + // Move caret before selected element + r = d.createRange(); + r.setStartBefore(n); + r.setEndBefore(n); + se.setRng(r); + } + }, + + getParentBlock : function(n) { + var d = this.dom; + + return d.getParent(n, d.isBlock); + }, + + insertPara : function(e) { + var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body; + var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car; + + // If root blocks are forced then use Operas default behavior since it's really good +// Removed due to bug: #1853816 +// if (se.forced_root_block && isOpera) +// return TRUE; + + // Setup before range + rb = d.createRange(); + + // If is before the first block element and in body, then move it into first block element + rb.setStart(s.anchorNode, s.anchorOffset); + rb.collapse(TRUE); + + // Setup after range + ra = d.createRange(); + + // If is before the first block element and in body, then move it into first block element + ra.setStart(s.focusNode, s.focusOffset); + ra.collapse(TRUE); + + // Setup start/end points + dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0; + sn = dir ? s.anchorNode : s.focusNode; + so = dir ? s.anchorOffset : s.focusOffset; + en = dir ? s.focusNode : s.anchorNode; + eo = dir ? s.focusOffset : s.anchorOffset; + + // If selection is in empty table cell + if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) { + if (sn.firstChild.nodeName == 'BR') + dom.remove(sn.firstChild); // Remove BR + + // Create two new block elements + if (sn.childNodes.length == 0) { + ed.dom.add(sn, se.element, null, '
    '); + aft = ed.dom.add(sn, se.element, null, '
    '); + } else { + n = sn.innerHTML; + sn.innerHTML = ''; + ed.dom.add(sn, se.element, null, n); + aft = ed.dom.add(sn, se.element, null, '
    '); + } + + // Move caret into the last one + r = d.createRange(); + r.selectNodeContents(aft); + r.collapse(1); + ed.selection.setRng(r); + + return FALSE; + } + + // If the caret is in an invalid location in FF we need to move it into the first block + if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) { + sn = en = sn.firstChild; + so = eo = 0; + rb = d.createRange(); + rb.setStart(sn, 0); + ra = d.createRange(); + ra.setStart(en, 0); + } + + // Never use body as start or end node + sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes + sn = sn.nodeName == "BODY" ? sn.firstChild : sn; + en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes + en = en.nodeName == "BODY" ? en.firstChild : en; + + // Get start and end blocks + sb = t.getParentBlock(sn); + eb = t.getParentBlock(en); + bn = sb ? sb.nodeName : se.element; // Get block name to create + + // Return inside list use default browser behavior + if (n = t.dom.getParent(sb, 'li,pre')) { + if (n.nodeName == 'LI') + return splitList(ed.selection, t.dom, n); + + return TRUE; + } + + // If caption or absolute layers then always generate new blocks within + if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) { + bn = se.element; + sb = null; + } + + // If caption or absolute layers then always generate new blocks within + if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) { + bn = se.element; + eb = null; + } + + // Use P instead + if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) { + bn = se.element; + sb = eb = null; + } + + // Setup new before and after blocks + bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn); + aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn); + + // Remove id from after clone + aft.removeAttribute('id'); + + // Is header and cursor is at the end, then force paragraph under + if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb)) + aft = ed.dom.create(se.element); + + // Find start chop node + n = sc = sn; + do { + if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName)) + break; + + sc = n; + } while ((n = n.previousSibling ? n.previousSibling : n.parentNode)); + + // Find end chop node + n = ec = en; + do { + if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName)) + break; + + ec = n; + } while ((n = n.nextSibling ? n.nextSibling : n.parentNode)); + + // Place first chop part into before block element + if (sc.nodeName == bn) + rb.setStart(sc, 0); + else + rb.setStartBefore(sc); + + rb.setEnd(sn, so); + bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari + + // Place secnd chop part within new block element + try { + ra.setEndAfter(ec); + } catch(ex) { + //console.debug(s.focusNode, s.focusOffset); + } + + ra.setStart(en, eo); + aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari + + // Create range around everything + r = d.createRange(); + if (!sc.previousSibling && sc.parentNode.nodeName == bn) { + r.setStartBefore(sc.parentNode); + } else { + if (rb.startContainer.nodeName == bn && rb.startOffset == 0) + r.setStartBefore(rb.startContainer); + else + r.setStart(rb.startContainer, rb.startOffset); + } + + if (!ec.nextSibling && ec.parentNode.nodeName == bn) + r.setEndAfter(ec.parentNode); + else + r.setEnd(ra.endContainer, ra.endOffset); + + // Delete and replace it with new block elements + r.deleteContents(); + + if (isOpera) + ed.getWin().scrollTo(0, vp.y); + + // Never wrap blocks in blocks + if (bef.firstChild && bef.firstChild.nodeName == bn) + bef.innerHTML = bef.firstChild.innerHTML; + + if (aft.firstChild && aft.firstChild.nodeName == bn) + aft.innerHTML = aft.firstChild.innerHTML; + + // Padd empty blocks + if (isEmpty(bef)) + bef.innerHTML = '
    '; + + function appendStyles(e, en) { + var nl = [], nn, n, i; + + e.innerHTML = ''; + + // Make clones of style elements + if (se.keep_styles) { + n = en; + do { + // We only want style specific elements + if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) { + nn = n.cloneNode(FALSE); + dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique + nl.push(nn); + } + } while (n = n.parentNode); + } + + // Append style elements to aft + if (nl.length > 0) { + for (i = nl.length - 1, nn = e; i >= 0; i--) + nn = nn.appendChild(nl[i]); + + // Padd most inner style element + nl[0].innerHTML = isOpera ? ' ' : '
    '; // Extra space for Opera so that the caret can move there + return nl[0]; // Move caret to most inner element + } else + e.innerHTML = isOpera ? ' ' : '
    '; // Extra space for Opera so that the caret can move there + }; + + // Fill empty afterblook with current style + if (isEmpty(aft)) + car = appendStyles(aft, en); + + // Opera needs this one backwards for older versions + if (isOpera && parseFloat(opera.version()) < 9.5) { + r.insertNode(bef); + r.insertNode(aft); + } else { + r.insertNode(aft); + r.insertNode(bef); + } + + // Normalize + aft.normalize(); + bef.normalize(); + + function first(n) { + return d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE).nextNode() || n; + }; + + // Move cursor and scroll into view + r = d.createRange(); + r.selectNodeContents(isGecko ? first(car || aft) : car || aft); + r.collapse(1); + s.removeAllRanges(); + s.addRange(r); + + // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs + y = ed.dom.getPos(aft).y; + ch = aft.clientHeight; + + // Is element within viewport + if (y < vp.y || y + ch > vp.y + vp.h) { + ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks + //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight)); + } + + return FALSE; + }, + + backspaceDelete : function(e, bs) { + var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn, walker; + + // Delete when caret is behind a element doesn't work correctly on Gecko see #3011651 + if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) { + walker = new tinymce.dom.TreeWalker(sc.lastChild, sc); + + // Walk the dom backwards until we find a text node + for (n = sc.lastChild; n; n = walker.prev()) { + if (n.nodeType == 3) { + r.setStart(n, n.nodeValue.length); + r.collapse(true); + se.setRng(r); + return; + } + } + } + + // The caret sometimes gets stuck in Gecko if you delete empty paragraphs + // This workaround removes the element by hand and moves the caret to the previous element + if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) { + if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) { + // Find previous block element + n = sc; + while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ; + + if (n) { + if (sc != b.firstChild) { + // Find last text node + w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE); + while (tn = w.nextNode()) + n = tn; + + // Place caret at the end of last text node + r = ed.getDoc().createRange(); + r.setStart(n, n.nodeValue ? n.nodeValue.length : 0); + r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0); + se.setRng(r); + + // Remove the target container + ed.dom.remove(sc); + } + + return Event.cancel(e); + } + } + } + } + }); +})(tinymce); + +(function(tinymce) { + // Shorten names + var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend; + + tinymce.create('tinymce.ControlManager', { + ControlManager : function(ed, s) { + var t = this, i; + + s = s || {}; + t.editor = ed; + t.controls = {}; + t.onAdd = new tinymce.util.Dispatcher(t); + t.onPostRender = new tinymce.util.Dispatcher(t); + t.prefix = s.prefix || ed.id + '_'; + t._cls = {}; + + t.onPostRender.add(function() { + each(t.controls, function(c) { + c.postRender(); + }); + }); + }, + + get : function(id) { + return this.controls[this.prefix + id] || this.controls[id]; + }, + + setActive : function(id, s) { + var c = null; + + if (c = this.get(id)) + c.setActive(s); + + return c; + }, + + setDisabled : function(id, s) { + var c = null; + + if (c = this.get(id)) + c.setDisabled(s); + + return c; + }, + + add : function(c) { + var t = this; + + if (c) { + t.controls[c.id] = c; + t.onAdd.dispatch(c, t); + } + + return c; + }, + + createControl : function(n) { + var c, t = this, ed = t.editor; + + each(ed.plugins, function(p) { + if (p.createControl) { + c = p.createControl(n, t); + + if (c) + return false; + } + }); + + switch (n) { + case "|": + case "separator": + return t.createSeparator(); + } + + if (!c && ed.buttons && (c = ed.buttons[n])) + return t.createButton(n, c); + + return t.add(c); + }, + + createDropMenu : function(id, s, cc) { + var t = this, ed = t.editor, c, bm, v, cls; + + s = extend({ + 'class' : 'mceDropDown', + constrain : ed.settings.constrain_menus + }, s); + + s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin'; + if (v = ed.getParam('skin_variant')) + s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1); + + id = t.prefix + id; + cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu; + c = t.controls[id] = new cls(id, s); + c.onAddItem.add(function(c, o) { + var s = o.settings; + + s.title = ed.getLang(s.title, s.title); + + if (!s.onclick) { + s.onclick = function(v) { + if (s.cmd) + ed.execCommand(s.cmd, s.ui || false, s.value); + }; + } + }); + + ed.onRemove.add(function() { + c.destroy(); + }); + + // Fix for bug #1897785, #1898007 + if (tinymce.isIE) { + c.onShowMenu.add(function() { + // IE 8 needs focus in order to store away a range with the current collapsed caret location + ed.focus(); + + bm = ed.selection.getBookmark(1); + }); + + c.onHideMenu.add(function() { + if (bm) { + ed.selection.moveToBookmark(bm); + bm = 0; + } + }); + } + + return t.add(c); + }, + + createListBox : function(id, s, cc) { + var t = this, ed = t.editor, cmd, c, cls; + + if (t.get(id)) + return null; + + s.title = ed.translate(s.title); + s.scope = s.scope || ed; + + if (!s.onselect) { + s.onselect = function(v) { + ed.execCommand(s.cmd, s.ui || false, v || s.value); + }; + } + + s = extend({ + title : s.title, + 'class' : 'mce_' + id, + scope : s.scope, + control_manager : t + }, s); + + id = t.prefix + id; + + if (ed.settings.use_native_selects) + c = new tinymce.ui.NativeListBox(id, s); + else { + cls = cc || t._cls.listbox || tinymce.ui.ListBox; + c = new cls(id, s); + } + + 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.onMouseDown.add(c.hideMenu, c); + } else { + cls = t._cls.button || tinymce.ui.Button; + c = new cls(id, s); + } + + 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.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.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); + + 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) { + function CommandManager() { + var execCommands = {}, queryStateCommands = {}, queryValueCommands = {}; + + function add(collection, cmd, func, scope) { + if (typeof(cmd) == 'string') + cmd = [cmd]; + + tinymce.each(cmd, function(cmd) { + collection[cmd.toLowerCase()] = {func : func, scope : scope}; + }); + }; + + tinymce.extend(this, { + add : function(cmd, func, scope) { + add(execCommands, cmd, func, scope); + }, + + addQueryStateHandler : function(cmd, func, scope) { + add(queryStateCommands, cmd, func, scope); + }, + + addQueryValueHandler : function(cmd, func, scope) { + add(queryValueCommands, cmd, func, scope); + }, + + execCommand : function(scope, cmd, ui, value, args) { + if (cmd = execCommands[cmd.toLowerCase()]) { + if (cmd.func.call(scope || cmd.scope, ui, value, args) !== false) + return true; + } + }, + + queryCommandValue : function() { + if (cmd = queryValueCommands[cmd.toLowerCase()]) + return cmd.func.call(scope || cmd.scope, ui, value, args); + }, + + queryCommandState : function() { + if (cmd = queryStateCommands[cmd.toLowerCase()]) + return cmd.func.call(scope || cmd.scope, ui, value, args); + } + }); + }; + + tinymce.GlobalCommands = new CommandManager(); +})(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.isValid, + isBlock = dom.isBlock, + forcedRootBlock = ed.settings.forced_root_block, + nodeIndex = dom.nodeIndex, + INVISIBLE_CHAR = '\uFEFF', + MCE_ATTR_RE = /^(src|href|style)$/, + FALSE = false, + TRUE = true, + undefined, + pendingFormats = {apply : [], remove : []}; + + function isArray(obj) { + return obj instanceof Array; + }; + + function getParents(node, selector) { + return dom.getParents(node, selector, dom.getRoot()); + }; + + function isCaretNode(node) { + return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline'); + }; + + // Public functions + + function get(name) { + return name ? formats[name] : formats; + }; + + function register(name, format) { + if (name) { + if (typeof(name) !== 'string') { + each(name, function(format, name) { + register(name, format); + }); + } else { + // Force format into array and add it to internal collection + format = format.length ? format : [format]; + + each(format, function(format) { + // Set deep to false by default on selector formats this to avoid removing + // alignment on images inside paragraphs when alignment is changed on paragraphs + if (format.deep === undefined) + format.deep = !format.selector; + + // Default to true + if (format.split === undefined) + format.split = !format.selector || format.inline; + + // Default to true + if (format.remove === undefined && format.selector && !format.inline) + format.remove = 'none'; + + // Mark format as a mixed format inline + block level + if (format.selector && format.inline) { + format.mixed = true; + format.block_expand = true; + } + + // Split classes if needed + if (typeof(format.classes) === 'string') + format.classes = format.classes.split(/\s+/); + }); + + formats[name] = format; + } + } + }; + + function apply(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, i; + + function moveStart(rng) { + var container = rng.startContainer, + offset = rng.startOffset, + walker, node; + + // Move startContainer/startOffset in to a suitable node + if (container.nodeType == 1 || container.nodeValue === "") { + container = container.nodeType == 1 ? container.childNodes[offset] : container; + + // Might fail if the offset is behind the last element in it's container + if (container) { + walker = new TreeWalker(container, container.parentNode); + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType == 3 && !isWhiteSpaceNode(node)) { + rng.setStart(node, 0); + break; + } + } + } + } + + return rng; + }; + + function setElementFormat(elm, fmt) { + fmt = fmt || format; + + if (elm) { + 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 applyRngStyle(rng) { + var newWrappers = [], wrapName, wrapElm; + + // Setup wrapper element + wrapName = format.inline || format.block; + wrapElm = dom.create(wrapName); + setElementFormat(wrapElm); + + rangeUtils.walk(rng, function(nodes) { + var currentWrapElm; + + function process(node) { + var nodeName = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found; + + // Stop wrapping on br elements + if (isEq(nodeName, 'br')) { + currentWrapElm = 0; + + // Remove any br elements when we wrap things + if (format.block) + dom.remove(node); + + return; + } + + // If node is wrapper type + if (format.wrapper && matchNode(node, name, vars)) { + currentWrapElm = 0; + return; + } + + // Can we rename the block + if (format.block && !format.wrapper && isTextBlock(nodeName)) { + node = dom.rename(node, wrapName); + setElementFormat(node); + newWrappers.push(node); + currentWrapElm = 0; + return; + } + + // Handle selector patterns + if (format.selector) { + // Look for matching formats + each(formatList, function(format) { + if (dom.is(node, format.selector) && !isCaretNode(node)) { + setElementFormat(node, format); + found = true; + } + }); + + // Continue processing if a selector match wasn't found and a inline element is defined + if (!format.inline || found) { + currentWrapElm = 0; + return; + } + } + + // Is it valid to wrap this item + if (isValid(wrapName, nodeName) && isValid(parentName, wrapName)) { + // Start wrapping + if (!currentWrapElm) { + // Wrap the node + currentWrapElm = wrapElm.cloneNode(FALSE); + node.parentNode.insertBefore(currentWrapElm, node); + newWrappers.push(currentWrapElm); + } + + currentWrapElm.appendChild(node); + } else { + // Start a new wrapper for possible children + currentWrapElm = 0; + + each(tinymce.grep(node.childNodes), process); + + // End the last wrapper + currentWrapElm = 0; + } + }; + + // Process siblings from range + each(nodes, process); + }); + + // Cleanup + each(newWrappers, function(node) { + var childCount; + + function getChildCount(node) { + var count = 0; + + each(node.childNodes, function(node) { + if (!isWhiteSpaceNode(node) && !isBookmarkNode(node)) + count++; + }); + + return count; + }; + + function mergeStyles(node) { + var child, clone; + + each(node.childNodes, function(node) { + if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) { + child = node; + return FALSE; // break loop + } + }); + + // If child was found and of the same type as the current node + if (child && matchName(child, format)) { + clone = child.cloneNode(FALSE); + setElementFormat(clone); + + dom.replace(clone, node, TRUE); + dom.remove(child, 1); + } + + return clone || node; + }; + + childCount = getChildCount(node); + + // Remove empty nodes + if (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: text + // will become: text + each(dom.select(format.inline, node), function(child) { + 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 texttext becomes texttext + if (node) { + node = mergeSiblings(getNonWhiteSpaceSibling(node), node); + node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE)); + } + } + }); + }; + + if (format) { + if (node) { + rng = dom.createRng(); + + rng.setStartBefore(node); + rng.setEndAfter(node); + + applyRngStyle(expandRng(rng, formatList)); + } else { + if (!selection.isCollapsed() || !format.inline) { + // Apply formatting to selection + bookmark = selection.getBookmark(); + applyRngStyle(expandRng(selection.getRng(TRUE), formatList)); + + selection.moveToBookmark(bookmark); + selection.setRng(moveStart(selection.getRng(TRUE))); + ed.nodeChanged(); + } else + performCaretAction('apply', name, vars); + } + } + }; + + function remove(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, i, rng; + + function moveStart(rng) { + var container = rng.startContainer, + offset = rng.startOffset, + walker, node, nodes, tmpNode; + + // Convert text node into index if possible + if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) { + container = container.parentNode; + offset = nodeIndex(container) + 1; + } + + // Move startContainer/startOffset in to a suitable node + if (container.nodeType == 1) { + nodes = container.childNodes; + container = nodes[Math.min(offset, nodes.length - 1)]; + walker = new TreeWalker(container); + + // If offset is at end of the parent node walk to the next one + if (offset > nodes.length - 1) + walker.next(); + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType == 3 && !isWhiteSpaceNode(node)) { + // IE has a "neat" feature where it moves the start node into the closest element + // we can avoid this by inserting an element before it and then remove it after we set the selection + tmpNode = dom.create('a', null, INVISIBLE_CHAR); + node.parentNode.insertBefore(tmpNode, node); + + // Set selection and remove tmpNode + rng.setStart(node, 0); + selection.setRng(rng); + dom.remove(tmpNode); + + return; + } + } + } + }; + + // Merges the styles for each node + function process(node) { + var children, i, l; + + // Grab the children first since the nodelist might be changed + children = tinymce.grep(node.childNodes); + + // Process current node + for (i = 0, l = formatList.length; i < l; i++) { + if (removeFormat(formatList[i], vars, node, node)) + break; + } + + // Process the children + if (format.deep) { + for (i = 0, l = children.length; i < l; i++) + process(children[i]); + } + }; + + function findFormatRoot(container) { + var formatRoot; + + // Find format root + each(getParents(container.parentNode).reverse(), function(parent) { + var format; + + // Find format root element + if (!formatRoot && parent.id != '_start' && parent.id != '_end') { + // Is the node matching the format we are looking for + format = matchNode(parent, name, vars); + if (format && format.split !== false) + formatRoot = parent; + } + }); + + return formatRoot; + }; + + function wrapAndSplit(format_root, container, target, split) { + var parent, clone, lastClone, firstClone, i, formatRootParent; + + // Format root found then clone formats and split it + if (format_root) { + formatRootParent = format_root.parentNode; + + for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) { + clone = parent.cloneNode(FALSE); + + for (i = 0; i < formatList.length; i++) { + if (removeFormat(formatList[i], vars, clone, clone)) { + clone = 0; + break; + } + } + + // Build wrapper node + if (clone) { + if (lastClone) + clone.appendChild(lastClone); + + if (!firstClone) + firstClone = clone; + + lastClone = clone; + } + } + + // Never split block elements if the format is mixed + if (split && (!format.mixed || !isBlock(format_root))) + container = dom.split(format_root, container); + + // Wrap container in cloned formats + if (lastClone) { + target.parentNode.insertBefore(lastClone, target); + firstClone.appendChild(target); + } + } + + return container; + }; + + function splitToFormatRoot(container) { + return wrapAndSplit(findFormatRoot(container), container, container, true); + }; + + function unwrap(start) { + var node = dom.get(start ? '_start' : '_end'), + out = node[start ? 'firstChild' : 'lastChild']; + + // If the end is placed within the start the result will be removed + // So this checks if the out node is a bookmark node if it is it + // checks for another more suitable node + if (isBookmarkNode(out)) + out = out[start ? 'firstChild' : 'lastChild']; + + dom.remove(node, true); + + return out; + }; + + function removeRngStyle(rng) { + var startContainer, endContainer; + + rng = expandRng(rng, formatList, TRUE); + + if (format.split) { + startContainer = getContainer(rng, TRUE); + endContainer = getContainer(rng); + + if (startContainer != endContainer) { + // Wrap start/end nodes in span element since these might be cloned/moved + startContainer = wrap(startContainer, 'span', {id : '_start', _mce_type : 'bookmark'}); + endContainer = wrap(endContainer, 'span', {id : '_end', _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); + }); + }); + }; + + // Handle node + if (node) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + removeRngStyle(rng); + return; + } + + if (!selection.isCollapsed() || !format.inline) { + bookmark = selection.getBookmark(); + removeRngStyle(selection.getRng(TRUE)); + selection.moveToBookmark(bookmark); + + // Check if start element still has formatting then we are at: "text|text" and need to move the start into the next text node + if (match(name, vars, selection.getStart())) { + moveStart(selection.getRng(true)); + } + + ed.nodeChanged(); + } else + performCaretAction('remove', name, vars); + }; + + function toggle(name, vars, node) { + if (match(name, vars, node)) + 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; + + // Check all items + if (items) { + // Non indexed object + if (items.length === undefined) { + for (key in items) { + if (items.hasOwnProperty(key)) { + if (item_name === 'attributes') + value = dom.getAttrib(node, key); + else + value = getStyle(node, key); + + if (similar && !value && !format.exact) + return; + + if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars))) + return; + } + } + } else { + // Only one match needed for indexed arrays + for (i = 0; i < items.length; i++) { + if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i])) + return format; + } + } + } + + return format; + }; + + if (formatList && node) { + // Check each format in list + for (i = 0; i < formatList.length; i++) { + format = formatList[i]; + + // Name name, attributes, styles and classes + if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) { + // Match classes + if (classes = format.classes) { + for (i = 0; i < classes.length; i++) { + if (!dom.hasClass(node, classes[i])) + return; + } + } + + return format; + } + } + } + }; + + function match(name, vars, node) { + var startNode, i; + + 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 pending formats + if (selection.isCollapsed()) { + for (i = pendingFormats.apply.length - 1; i >= 0; i--) { + if (pendingFormats.apply[i].name == name) + return true; + } + + for (i = pendingFormats.remove.length - 1; i >= 0; i--) { + if (pendingFormats.remove[i].name == name) + return false; + } + + return matchParents(selection.getNode()); + } + + // 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; + + // If the selection is collapsed then check pending formats + if (selection.isCollapsed()) { + for (ni = 0; ni < names.length; ni++) { + // If the name is to be removed, then stop it from being added + for (i = pendingFormats.remove.length - 1; i >= 0; i--) { + name = names[ni]; + + if (pendingFormats.remove[i].name == name) { + checkedMap[name] = true; + break; + } + } + } + + // If the format is to be applied + for (i = pendingFormats.apply.length - 1; i >= 0; i--) { + for (ni = 0; ni < names.length; ni++) { + name = names[ni]; + + if (!checkedMap[name] && pendingFormats.apply[i].name == name) { + checkedMap[name] = true; + matchedFormatNames.push(name); + } + } + } + } + + // Check start of selection for formats + startElement = selection.getStart(); + dom.getParent(startElement, function(node) { + var i, name; + + for (i = 0; i < names.length; i++) { + name = names[i]; + + if (!checkedMap[name] && matchNode(node, name, vars)) { + checkedMap[name] = true; + matchedFormatNames.push(name); + } + } + }); + + return matchedFormatNames; + }; + + function canApply(name) { + var formatList = get(name), startNode, parents, i, x, selector; + + if (formatList) { + startNode = selection.getStart(); + parents = getParents(startNode); + + for (x = formatList.length - 1; x >= 0; x--) { + selector = formatList[x].selector; + + // Format is not selector based, then always return TRUE + if (!selector) + return TRUE; + + for (i = parents.length - 1; i >= 0; i--) { + if (dom.is(parents[i], selector)) + return TRUE; + } + } + } + + return FALSE; + }; + + // Expose to public + tinymce.extend(this, { + get : get, + register : register, + apply : apply, + remove : remove, + toggle : toggle, + match : match, + matchAll : matchAll, + matchNode : matchNode, + canApply : canApply + }); + + // Private functions + + function matchName(node, format) { + // Check for inline match + if (isEq(node, format.inline)) + return TRUE; + + // Check for block match + if (isEq(node, format.block)) + return TRUE; + + // Check for selector match + if (format.selector) + return dom.is(node, format.selector); + }; + + function isEq(str1, str2) { + str1 = str1 || ''; + str2 = str2 || ''; + + str1 = '' + (str1.nodeName || str1); + str2 = '' + (str2.nodeName || str2); + + return str1.toLowerCase() == str2.toLowerCase(); + }; + + function getStyle(node, name) { + var styleVal = dom.getStyle(node, name); + + // Force the format to hex + if (name == 'color' || name == 'backgroundColor') + styleVal = dom.toHex(styleVal); + + // Opera will return bold as 700 + if (name == 'fontWeight' && styleVal == 700) + styleVal = 'bold'; + + return '' + styleVal; + }; + + function replaceVars(value, vars) { + if (typeof(value) != "string") + value = value(vars); + else if (vars) { + value = value.replace(/%(\w+)/g, function(str, name) { + return vars[name] || str; + }); + } + + return value; + }; + + function isWhiteSpaceNode(node) { + return node && node.nodeType === 3 && /^([\s\r\n]+|)$/.test(node.nodeValue); + }; + + function wrap(node, name, attrs) { + var wrapper = dom.create(name, attrs); + + node.parentNode.insertBefore(wrapper, node); + wrapper.appendChild(node); + + return wrapper; + }; + + function expandRng(rng, format, remove) { + var startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset, sibling, lastIdx; + + // This function walks up the tree if there is no siblings before/after the node + function findParentContainer(container, child_name, sibling_name, root) { + var parent, child; + + root = root || dom.getRoot(); + + for (;;) { + // Check if we can move up are we at root level or body level + parent = container.parentNode; + + // Stop expanding on block elements or root depending on format + if (parent == root || (!format[0].block_expand && isBlock(parent))) + return container; + + for (sibling = parent[child_name]; sibling && sibling != container; sibling = sibling[sibling_name]) { + if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) + return container; + + if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling)) + return container; + } + + container = container.parentNode; + } + + return container; + }; + + // If index based start position then resolve it + if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { + lastIdx = startContainer.childNodes.length - 1; + startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset]; + + if (startContainer.nodeType == 3) + startOffset = 0; + } + + // If index based end position then resolve it + if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { + lastIdx = endContainer.childNodes.length - 1; + endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1]; + + if (endContainer.nodeType == 3) + endOffset = endContainer.nodeValue.length; + } + + // Exclude bookmark nodes if possible + if (isBookmarkNode(startContainer.parentNode)) + startContainer = startContainer.parentNode; + + if (isBookmarkNode(startContainer)) + startContainer = startContainer.nextSibling || startContainer; + + if (isBookmarkNode(endContainer.parentNode)) + endContainer = endContainer.parentNode; + + if (isBookmarkNode(endContainer)) + endContainer = endContainer.previousSibling || endContainer; + + // Move start/end point up the tree if the leaves are sharp and if we are in different containers + // Example * becomes !: !

    *texttext*

    ! + // 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) { + startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling'); + endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling'); + } + + // Expand start/end container to matching selector + if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) { + function findSelectorEndPoint(container, sibling_name) { + var parents, i, y; + + 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++) { + if (dom.is(parents[i], format[y].selector)) + return parents[i]; + } + } + + return container; + }; + + // Find new startContainer/endContainer if there is better one + startContainer = findSelectorEndPoint(startContainer, 'previousSibling'); + endContainer = findSelectorEndPoint(endContainer, 'nextSibling'); + } + + // Expand start/end container to matching block element or text node + if (format[0].block || format[0].selector) { + function findBlockEndPoint(container, sibling_name, sibling_name2) { + var node; + + // Expand to block of similar type + if (!format[0].wrapper) + node = dom.getParent(container, format[0].block); + + // Expand to first wrappable block element or any block element + if (!node) + node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock); + + // Exclude inner lists from wrapping + if (node && format[0].wrapper) + node = getParents(node, 'ul,ol').reverse()[0] || node; + + // Didn't find a block element look for first/last wrappable element + if (!node) { + node = container; + + while (node[sibling_name] && !isBlock(node[sibling_name])) { + node = node[sibling_name]; + + // Break on BR but include it will be removed later on + // we can't remove it now since we need to check if it can be wrapped + if (isEq(node, 'br')) + break; + } + } + + return node || container; + }; + + // Find new startContainer/endContainer if there is better one + startContainer = findBlockEndPoint(startContainer, 'previousSibling'); + endContainer = findBlockEndPoint(endContainer, 'nextSibling'); + + // Non block element then try to expand up the leaf + if (format[0].block) { + if (!isBlock(startContainer)) + startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling'); + + if (!isBlock(endContainer)) + endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling'); + } + } + + // 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('_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('_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 or + if (format.remove != 'none') { + removeNode(node, format); + return TRUE; + } + }; + + function removeNode(node, format) { + var parentNode = node.parentNode, rootBlockElm; + + if (format.block) { + if (!forcedRootBlock) { + function find(node, next, inc) { + node = getNonWhiteSpaceSibling(node, next, inc); + + return !node || (node.nodeName == 'BR' || isBlock(node)); + }; + + // Append BR elements if needed before we remove the block + if (isBlock(node) && !isBlock(parentNode)) { + if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1)) + node.insertBefore(dom.create('br'), node.firstChild); + + if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1)) + node.appendChild(dom.create('br')); + } + } else { + // Wrap the block in a forcedRootBlock if we are at the root of document + if (parentNode == dom.getRoot()) { + if (!format.list_block || !isEq(node, format.list_block)) { + each(tinymce.grep(node.childNodes), function(node) { + if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) { + if (!rootBlockElm) + rootBlockElm = wrap(node, forcedRootBlock); + else + rootBlockElm.appendChild(node); + } else + rootBlockElm = 0; + }); + } + } + } + } + + // Never remove nodes that isn't the specified inline element if a selector is specified too + if (format.selector && format.inline && !isEq(format.inline, node)) + return; + + dom.remove(node, 1); + }; + + function getNonWhiteSpaceSibling(node, next, inc) { + if (node) { + next = next ? 'nextSibling' : 'previousSibling'; + + for (node = inc ? node : node[next]; node; node = node[next]) { + if (node.nodeType == 1 || !isWhiteSpaceNode(node)) + return node; + } + } + }; + + function isBookmarkNode(node) { + return node && node.nodeType == 1 && node.getAttribute('_mce_type') == 'bookmark'; + }; + + function mergeSiblings(prev, next) { + var marker, sibling, tmpSibling; + + function compareElements(node1, node2) { + // Not the same name + if (node1.nodeName != node2.nodeName) + return FALSE; + + function getAttribs(node) { + var attribs = {}; + + each(dom.getAttribs(node), function(attr) { + var name = attr.nodeName.toLowerCase(); + + // Don't compare internal attributes or style + if (name.indexOf('_') !== 0 && name !== 'style') + attribs[name] = dom.getAttrib(node, name); + }); + + return attribs; + }; + + function compareObjects(obj1, obj2) { + var value, name; + + for (name in obj1) { + // Obj1 has item obj2 doesn't have + if (obj1.hasOwnProperty(name)) { + value = obj2[name]; + + // Obj2 doesn't have obj1 item + if (value === undefined) + return FALSE; + + // Obj2 item has a different value + if (obj1[name] != value) + return FALSE; + + // Delete similar value + delete obj2[name]; + } + } + + // Check if obj 2 has something obj 1 doesn't have + for (name in obj2) { + // Obj2 has item obj1 doesn't have + if (obj2.hasOwnProperty(name)) + return FALSE; + } + + return TRUE; + }; + + // Attribs are not the same + if (!compareObjects(getAttribs(node1), getAttribs(node2))) + return FALSE; + + // Styles are not the same + if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) + return FALSE; + + return TRUE; + }; + + // Check if next/prev exists and that they are elements + if (prev && next) { + function findElementSibling(node, sibling_name) { + for (sibling = node; sibling; sibling = sibling[sibling_name]) { + if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling)) + return node; + + if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) + return sibling; + } + + return node; + }; + + // If previous sibling is empty then jump over it + prev = findElementSibling(prev, 'previousSibling'); + next = findElementSibling(next, 'nextSibling'); + + // Compare next and previous nodes + if (compareElements(prev, next)) { + // Append nodes between + for (sibling = prev.nextSibling; sibling && sibling != next;) { + tmpSibling = sibling; + sibling = sibling.nextSibling; + prev.appendChild(tmpSibling); + } + + // Remove next node + dom.remove(next); + + // Move children into prev node + each(tinymce.grep(next.childNodes), function(node) { + prev.appendChild(node); + }); + + return prev; + } + } + + return next; + }; + + function isTextBlock(name) { + return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name); + }; + + function getContainer(rng, start) { + var container, offset, lastIdx; + + 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]; + } + + return container; + }; + + function performCaretAction(type, name, vars) { + var i, currentPendingFormats = pendingFormats[type], + otherPendingFormats = pendingFormats[type == 'apply' ? 'remove' : 'apply']; + + function hasPending() { + return pendingFormats.apply.length || pendingFormats.remove.length; + }; + + function resetPending() { + pendingFormats.apply = []; + pendingFormats.remove = []; + }; + + function perform(caret_node) { + // Apply pending formats + each(pendingFormats.apply.reverse(), function(item) { + apply(item.name, item.vars, caret_node); + }); + + // Remove pending formats + each(pendingFormats.remove.reverse(), function(item) { + remove(item.name, item.vars, caret_node); + }); + + dom.remove(caret_node, 1); + resetPending(); + }; + + // Check if it already exists then ignore it + for (i = currentPendingFormats.length - 1; i >= 0; i--) { + if (currentPendingFormats[i].name == name) + return; + } + + currentPendingFormats.push({name : name, vars : vars}); + + // Check if it's in the other type, then remove it + for (i = otherPendingFormats.length - 1; i >= 0; i--) { + if (otherPendingFormats[i].name == name) + otherPendingFormats.splice(i, 1); + } + + // Pending apply or remove formats + if (hasPending()) { + ed.getDoc().execCommand('FontName', false, 'mceinline'); + pendingFormats.lastRng = selection.getRng(); + + // IE will convert the current word + each(dom.select('font,span'), function(node) { + var bookmark; + + if (isCaretNode(node)) { + bookmark = selection.getBookmark(); + perform(node); + selection.moveToBookmark(bookmark); + ed.nodeChanged(); + } + }); + + // Only register listeners once if we need to + if (!pendingFormats.isListening && hasPending()) { + pendingFormats.isListening = true; + + each('onKeyDown,onKeyUp,onKeyPress,onMouseUp'.split(','), function(event) { + ed[event].addToTop(function(ed, e) { + // Do we have pending formats and is the selection moved has moved + if (hasPending() && !tinymce.dom.RangeUtils.compareRanges(pendingFormats.lastRng, selection.getRng())) { + each(dom.select('font,span'), function(node) { + var textNode, rng; + + // Look for marker + if (isCaretNode(node)) { + textNode = node.firstChild; + + if (textNode) { + perform(node); + + rng = dom.createRng(); + rng.setStart(textNode, textNode.nodeValue.length); + rng.setEnd(textNode, textNode.nodeValue.length); + selection.setRng(rng); + ed.nodeChanged(); + } else + dom.remove(node); + } + }); + + // Always unbind and clear pending styles on keyup + if (e.type == 'keyup' || e.type == 'mouseup') + resetPending(); + } + }); + }); + } + } + }; + }; +})(tinymce); + +tinymce.onAddEditor.add(function(tinymce, ed) { + var filters, fontSizes, dom, settings = ed.settings; + + if (settings.inline_styles) { + fontSizes = tinymce.explode(settings.font_size_style_values); + + function replaceWithSpan(node, styles) { + dom.replace(dom.create('span', { + style : styles + }), node, 1); + }; + + filters = { + font : function(dom, node) { + replaceWithSpan(node, { + backgroundColor : node.style.backgroundColor, + color : node.color, + fontFamily : node.face, + fontSize : fontSizes[parseInt(node.size) - 1] + }); + }, + + u : function(dom, node) { + replaceWithSpan(node, { + textDecoration : 'underline' + }); + }, + + strike : function(dom, node) { + replaceWithSpan(node, { + textDecoration : 'line-through' + }); + } + }; + + function convert(editor, params) { + dom = editor.dom; + + if (settings.convert_fonts_to_spans) { + tinymce.each(dom.select('font,u,strike', params.node), function(node) { + filters[node.nodeName.toLowerCase()](ed.dom, node); + }); + } + }; + + ed.onPreProcess.add(convert); + + ed.onInit.add(function() { + ed.selection.onSetContent.add(convert); + }); + } +}); + diff --git a/lib/tinymce/jscripts/tiny_mce/utils/editable_selects.js b/lib/tinymce/jscripts/tiny_mce/utils/editable_selects.js new file mode 100644 index 0000000..fd943c0 --- /dev/null +++ b/lib/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'; + h += ' '; + + 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 += ''; + html += ' '; + + 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; + + var sel = form_obj.elements[field_name]; + + var found = false; + for (var i=0; i 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); + 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 +  + +
    diff --git a/templates/category_item_available.php b/templates/category_item_available.php new file mode 100644 index 0000000..0a29a67 --- /dev/null +++ b/templates/category_item_available.php @@ -0,0 +1,3 @@ +
    +  +
    diff --git a/templates/comment_item.php b/templates/comment_item.php new file mode 100644 index 0000000..25489eb --- /dev/null +++ b/templates/comment_item.php @@ -0,0 +1,15 @@ + diff --git a/templates/comments.php b/templates/comments.php new file mode 100644 index 0000000..147f4f5 --- /dev/null +++ b/templates/comments.php @@ -0,0 +1,38 @@ + + +
    +
    +
    + +
    + +
    +
    diff --git a/templates/confirmation_successful.php b/templates/confirmation_successful.php new file mode 100644 index 0000000..e70afae --- /dev/null +++ b/templates/confirmation_successful.php @@ -0,0 +1,7 @@ + +

    IN ARBEIT

    +

    Sie haben Ihre Anmeldung auf dem Stud.IP-Pluginmarktplatz erfolgreich bestätigt - Ihr Account ist jetzt freigeschaltet. Sie können nun die Funktionen des Plugin-Marktplatzes nutzen. Sehen Sie sich doch gleich einmal um!


    +

    Auf dem Plugin-Marktplatz finden Sie die für Stud.IP verfügbaren Plugins in stets aktueller Form. So haben Sie die Möglichkeit, .Ihr. Stud.IP so zu konfigurieren, dass es für den jeweiligen Einsatzzweck optimal eingerichtet ist. Wenn Sie selbst Betreiber sind, finden Sie hier praktische Anleitungen, mit denen Sie direkt in die Nutzung des Plugins einsteigen können. Sind Sie Anwender, so können Sie sich hier von der Vielfalt der Möglichkeiten inspirieren lassen. Ihre Ansprechpartner vor Ort finden Sie dann unter [Infos].


    +

    Sie suchen ein bestimmtes Plugin? Dann benutzen Sie doch unsere [Suchfunktion ]

    +

    Sie möchten wissen, welche Erweiterungsmöglichkeiten für Stud.IP es gibt? Dann stöbern Sie in unseren [Kategorien] und [Tags]!

    +

    Sie möchten zunächst mehr über Stud.IP als Lernmanagementsystem wissen? Schauen Sie unter [Infos] und erfahren mehr über Stud.IP, die Entwickler hinter Stud.IP und Ansprechpartner an verschiedenen (Hochschul-)Standorten!

    diff --git a/templates/datenschutz.php b/templates/datenschutz.php new file mode 100644 index 0000000..e7e6a34 --- /dev/null +++ b/templates/datenschutz.php @@ -0,0 +1 @@ +Datenschutz diff --git a/templates/dep_plugin_item.php b/templates/dep_plugin_item.php new file mode 100644 index 0000000..60956c2 --- /dev/null +++ b/templates/dep_plugin_item.php @@ -0,0 +1,3 @@ +
    + getName())?> +
    diff --git a/templates/dep_release_item_available.php b/templates/dep_release_item_available.php new file mode 100644 index 0000000..c7f39ee --- /dev/null +++ b/templates/dep_release_item_available.php @@ -0,0 +1,3 @@ +
    + getVersion()?> +
    diff --git a/templates/dep_release_item_current.php b/templates/dep_release_item_current.php new file mode 100644 index 0000000..2bbe707 --- /dev/null +++ b/templates/dep_release_item_current.php @@ -0,0 +1,4 @@ +
    + + getName())?>, getVersion()?> +
    diff --git a/templates/edit_content.php b/templates/edit_content.php new file mode 100644 index 0000000..8c2ddb6 --- /dev/null +++ b/templates/edit_content.php @@ -0,0 +1,39 @@ + + +
    + + + + + + + + + + + + + + + + + + + + +

    Inhalt (getKey()?>) bearbeiten

     
    Inhalt:
     
    > onClick="location.href='?';">
    +
    diff --git a/templates/edit_plugin.php b/templates/edit_plugin.php new file mode 100644 index 0000000..e96c829 --- /dev/null +++ b/templates/edit_plugin.php @@ -0,0 +1,295 @@ +GetHoverJSFunction()?> + + + +
    + +have_perm('admin')) : ?> +
    + Admin-Bereich +
    + Benutzer zuweisen: +   STYLE="cursor:pointer;" onClick="location.href='?dispatch=set_plugin_user&plugin_id=getPluginId()?>&user_id='+$('new_user_id').value;"> +
    +
    onClick="location.href='?dispatch=edit_rezension&plugin_id=getPluginId()?>'">
    +
    +getApproved() == 0) : ?> + onClick="location.href='?dispatch=do_clearing&plugin_id=getPluginId()?>'"> + + onClick="if (confirm('Soll dieses Plugin wirklich gesperrt werden?')){location.href='?dispatch=do_suspend&plugin_id=getPluginId()?>'}"> + +
    + +
    + + + + + +getPluginId()) : ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +getApproved() && $p->getPluginId()) : ?> + + + +getPluginId()) : ?> + + +
    +
    Grunddaten: *
    +
    Autor: getUserId())->getImageTag(Avatar::SMALL)?> getUserId())?>
    Mitwirkende: + +getUserId()); ?> +getParticipants())) : ?> + +getUserId()); ?> +
    getUserId())->getImageTag(Avatar::SMALL)?> getUserId())?>

    + + +   STYLE="cursor:pointer;" onClick="location.href='?dispatch=set_plugin_participant&plugin_id=getPluginId()?>&user_id='+$('new_participant_id').value;"> +
    Titel: *
    Lizenz: + + * +
    Im Einsatz bei:
    Homepage-URL:
    Sprache: + getLanguage() == 'de' ? 'CHECKED' : '')?>>Deutsch   + getLanguage() == 'en' ? 'CHECKED' : '')?>>Englisch   + getLanguage() == 'de_en' ? 'CHECKED' : '')?>>Deutsch/Englisch +
    +
    Kategorien: *
    + + + + + +
    +
    Bestehende Zuordnungen:
    +
    +
    +
    Bitte wählen:
    +
    +
    +
    +
    Tags:
    + +
    +
    Tags bitte mit Komma trennen +getTags()) > 0) : ?> +
    | +getTags() as $t) : ?> + | + + +
    +
    Kurzbeschreibung: *
    + Hier ist nur Plaintext zulässig! (max. Zeichen) +
    + +
    +
     
    Beschreibung:
     
    > onClick="location.href='?';"> getPluginId()) : ?> onClick="if (confirm('Wollen Sie das Plugin wirklich löschen?')){location.href='?dispatch=remove_plugin&plugin_id=getPluginId()?>';}">
    +* = Pflichtfeld

    +getPluginId()) : ?> +getReleases()) : ?> +
    Releases:
    + + +switchClass(); ?> + getHover()?>> + + + + +
    Version getVersion()?> STYLE="cursor:pointer" onClick="location.href='?dispatch=edit_release&release_id=getReleaseId()?>&plugin_id=getPluginId()?>'"> STYLE="cursor:pointer" onClick="if (confirm('Wollen Sie das Release wirklich löschen?')){location.href='?dispatch=remove_release&release_id=getReleaseId()?>&plugin_id=getPluginId()?>'}">
    + + onClick="location.href='?dispatch=edit_release&plugin_id=getPluginId()?>'"> + onClick="location.href='?dispatch=show_edit_screenshots&plugin_id=getPluginId()?>'"> + +
    diff --git a/templates/edit_plugin_assi.php b/templates/edit_plugin_assi.php new file mode 100644 index 0000000..a8ea6c4 --- /dev/null +++ b/templates/edit_plugin_assi.php @@ -0,0 +1,265 @@ + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    Schritt ".$part." von 4"))?> +
    +
    Grunddaten: *
    +
    Titel: *
    Lizenz: + + * +
    Im Einsatz bei:
    Homepage-URL:
    Sprache: + >Deutsch   + >Englisch   + >Deutsch/Englisch +
    STYLE="cursor:pointer;" onClick="if (checkInput('1')){document.plugin.part.value='2'; document.plugin.submit();}">
    +
    Kategorien: *
    + + + + + +
    +
    Bestehende Zuordnungen:
    +
    + +getCategory($cat); ?> +
    +  + +
    + +
    +
    +
    Bitte wählen:
    +
    +
    +
    +
    Tags:
    + +
    +
    Tags bitte mit Komma trennen +
    STYLE="cursor:pointer;" onClick="document.plugin.part.value='1'; document.plugin.submit();">  STYLE="cursor:pointer;" onClick="if (checkInput('2')){document.plugin.part.value='3'; document.plugin.submit();}">
    +
    Kurzbeschreibung: *
    + Hier ist nur Plaintext zulässig! (max. Zeichen) +
    + +
    +
    STYLE="cursor:pointer;" onClick="document.plugin.part.value='2'; document.plugin.submit();">  STYLE="cursor:pointer;" onClick="if (checkInput('3')){document.plugin.part.value='4'; document.plugin.submit();}">
    Beschreibung:
    STYLE="cursor:pointer;" onClick="document.plugin.part.value='3'; document.plugin.submit();">  STYLE="cursor:pointer;" onClick="document.plugin.part.value='5'; document.plugin.submit();">
     
    +* = Pflichtfeld

    +
    diff --git a/templates/edit_release.php b/templates/edit_release.php new file mode 100644 index 0000000..277c38b --- /dev/null +++ b/templates/edit_release.php @@ -0,0 +1,158 @@ + + + +
    + + +
    Release bearbeiten
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +getReleaseId()) : ?> + + + + + + + + + + +
    Origin: *
    Version: *
    Stud.IP Min-Version: *
    Stud.IP Max-Version: *
    Release Art: + + +
    + Tags: + + +
    +
    Tags bitte mit Komma trennen +getTags()) > 0) : ?> +
    | +getTags() as $t) : ?> + | + + +
    Dateiname (ZIP-Datei):
    Bisherige Datei: getFileName())?>
    +
    Abhängigkeiten:
    + + + + + + +
    +
    Bitte Plugin wählen:
    +
    +
    +
    Bitte Release wählen:
    +
    +
    +
    Bestehende Zuordnungen:
    +
    +
    +
     
    > onClick="location.href='?dispatch=edit_plugin&plugin_id=getPluginId()?>'"> getReleaseId()) : ?> onClick="if (confirm('Wollen Sie das Release wirklich löschen?')){location.href='?dispatch=remove_release&release_id=getReleaseId()?>&plugin_id=getPluginId()?>';}">
    +* = Daten werden aus dem Manifest übernommen. +
    diff --git a/templates/edit_rezension.php b/templates/edit_rezension.php new file mode 100644 index 0000000..c6cdaa4 --- /dev/null +++ b/templates/edit_rezension.php @@ -0,0 +1,50 @@ + + onClick="location.href='?dispatch=edit_plugin&plugin_id=getPluginId()?>'"> +
    Rezension zu einem Plugin verfassen
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Plugin-Name: getName()?>
     
    Rezension:
     
    > onClick="location.href='?dispatch=edit_plugin&plugin_id=getPluginId()?>'">
    +
    diff --git a/templates/edit_screenshot_details.php b/templates/edit_screenshot_details.php new file mode 100644 index 0000000..39dc940 --- /dev/null +++ b/templates/edit_screenshot_details.php @@ -0,0 +1,16 @@ +
    URL:
    +?dispatch=download&file_id=getFileId()?>
    +
    Dateiname:
    +getFilename())?> +
    + + + + +
    Titel hinzufügen:
    + +
    Screenshot aktualisieren:
    +
    Die Bilddatei darf max. 8 MB groß sein, es sind nur Dateien mit der Endung .jpg, .png und .gif erlaubt! +
    >
    +
    + diff --git a/templates/edit_screenshots.php b/templates/edit_screenshots.php new file mode 100644 index 0000000..962bcfa --- /dev/null +++ b/templates/edit_screenshots.php @@ -0,0 +1,61 @@ + +
    + onClick="location.href='?dispatch=edit_plugin&plugin_id=getPluginId()?>'">

    + +
    Screenshot:
    +Titel:
    +Datei:
    Die Bilddatei darf max. 8 MB groß sein, es sind nur Dateien mit der Endung .jpg, .png und .gif erlaubt! +
    > onClick="location.href='?dispatch=edit_plugin&plugin_id=getPluginId()?>'">
    +
    + +
    + +
    ZIP-Datei:
    +ZIP-Datei:
    Die ZIP-Datei darf max. 50 MB groß sein, darin sind nur Dateien mit der Endung .jpg, .png und .gif erlaubt! +
    > onClick="location.href='?dispatch=edit_plugin&plugin_id=getPluginId()?>'">
    +
    +getAllScreenshots())) : ?> +Screenshots:
    + +
    + +
    + + + diff --git a/templates/edit_user_profle.php b/templates/edit_user_profle.php new file mode 100644 index 0000000..e2c7b83 --- /dev/null +++ b/templates/edit_user_profle.php @@ -0,0 +1,86 @@ + +
    + + +
    Profil bearbeiten
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Username: *
    Anrede: + +
    Vorname: *
    Nachname: *
    E-Mail: *
    Passwort:
    Passwort (wiederholen):
    Profilbild:
    Homepage:
    Arbeitsstelle:
    Geben Sie bitte die nebenstehende Zeichenfolge zur Verifikation ein: CAPTCHA Image + + + +

    Bild unleserlich? Neues generieren
    *
     
    > onClick="location.href='?dispatch=show_profile'">
    +
    +* = Pflichtfeld diff --git a/templates/extended_search.php b/templates/extended_search.php new file mode 100644 index 0000000..b2663f6 --- /dev/null +++ b/templates/extended_search.php @@ -0,0 +1,37 @@ +
    Erweiterte Suche
    +
    + + + + + + + + + + + + + + + + + + + +
    Suchbegriff:
    Volltextsuche:
    Kategorie: + +
    Sprache: + +
     
    >
    +
    diff --git a/templates/faq.php b/templates/faq.php new file mode 100644 index 0000000..d6360a1 --- /dev/null +++ b/templates/faq.php @@ -0,0 +1 @@ +FAQ diff --git a/templates/footer.php b/templates/footer.php new file mode 100644 index 0000000..e04310f --- /dev/null +++ b/templates/footer.php @@ -0,0 +1,2 @@ + + diff --git a/templates/greeting_logged_in.php b/templates/greeting_logged_in.php new file mode 100644 index 0000000..dbb9db8 --- /dev/null +++ b/templates/greeting_logged_in.php @@ -0,0 +1,67 @@ + + diff --git a/templates/header.php b/templates/header.php new file mode 100644 index 0000000..0b8d2aa --- /dev/null +++ b/templates/header.php @@ -0,0 +1,16 @@ + + + + + + + + + Stud.IP Plugin Marktplatz + + + + + diff --git a/templates/header.php.old b/templates/header.php.old new file mode 100644 index 0000000..edf941f --- /dev/null +++ b/templates/header.php.old @@ -0,0 +1,11 @@ + + + + + + + + Stud.IP Plugin Marktplatz + + + diff --git a/templates/history.php b/templates/history.php new file mode 100644 index 0000000..6d4b212 --- /dev/null +++ b/templates/history.php @@ -0,0 +1,6 @@ +
    + Home + + :: + +
    diff --git a/templates/impressum.php b/templates/impressum.php new file mode 100644 index 0000000..35dc829 --- /dev/null +++ b/templates/impressum.php @@ -0,0 +1,4 @@ +

    Impressum

    +

    Der Stud.IP Marktplatz wir mit freundlicher Unterstützung der Technischen Universität Braunschweig und der Universität Bremen betrieben und von Mitgliedern des Stud.IP e.V. unterstützt.

    + +

    diff --git a/templates/list_unclear_plugins.php b/templates/list_unclear_plugins.php new file mode 100644 index 0000000..777579e --- /dev/null +++ b/templates/list_unclear_plugins.php @@ -0,0 +1,16 @@ +GetHoverJSFunction()?> + + + + + + + +switchClass(); ?> + getHover()?>> + + + + + +
    getUsernameByUserId($p->getUserId())?>getName())?> onClick="location.href='?dispatch=edit_plugin&plugin_id=getPluginId()?>';">
    diff --git a/templates/login.php b/templates/login.php new file mode 100644 index 0000000..a97227b --- /dev/null +++ b/templates/login.php @@ -0,0 +1,36 @@ +
    +
    +

    +Melden Sie sich für den Plugin-Marktplatz an +
    + + + + + + + + + + + + +
    Username:
    Passwort:
    + Passwort vergessen? Neues Passwort anfordern

    +
    > onClick="location.href='?';">
    +
    +
    +
    + + + + +
    +
    +
    + + diff --git a/templates/mails/mail_comment.php b/templates/mails/mail_comment.php new file mode 100644 index 0000000..850ee2d --- /dev/null +++ b/templates/mails/mail_comment.php @@ -0,0 +1,8 @@ +getUserId()))?> hat einen Kommentar getName()?> geschrieben: + +"" + + +Viele Grüsse, + +Das Stud.IP Plugin-Marktplatz Team diff --git a/templates/mails/mail_new_plugin.php b/templates/mails/mail_new_plugin.php new file mode 100644 index 0000000..2b328b8 --- /dev/null +++ b/templates/mails/mail_new_plugin.php @@ -0,0 +1,6 @@ +getUserId()))?> hat ein neues Plugin mit dem Titel getName()?> eingetragen und wartet auf die Freischaltung. + + +Viele Grüsse, + +Das Stud.IP Plugin-Marktplatz Team diff --git a/templates/mails/mail_plugin_approvement.php b/templates/mails/mail_plugin_approvement.php new file mode 100644 index 0000000..4a725f1 --- /dev/null +++ b/templates/mails/mail_plugin_approvement.php @@ -0,0 +1,12 @@ +Hallo getSalutation()?> getVorname()?> getNachname()?>, + +Das nachfolgende Plugin wurde nun freigeschaltet: + +Name: getName()?> + + +Sollten Sie diese Mail erhalten haben, obwohl Sie sich nicht auf dem Marktplatz registriert haben, wenden Sie sich bitte an das Team des Plugin-Martkplatzes, damit wir die Registrierung mit Ihrer E-Mail-Adresse rückgängig machen können. + + +Viele Grüße und viel Vergnügen mit Stud.IP und dem Marktplatz wünscht +Das Team des Stud.IP Pluginmarktplatzes diff --git a/templates/mails/mail_plugin_suspend.php b/templates/mails/mail_plugin_suspend.php new file mode 100644 index 0000000..d9f3284 --- /dev/null +++ b/templates/mails/mail_plugin_suspend.php @@ -0,0 +1,12 @@ +Hallo getSalutation()?> getVorname()?> getNachname()?>, + +Das nachfolgende Plugin wurde von der Administration gesperrt: + +Name: getName()?> + + +Sollten Sie diese Mail erhalten haben, obwohl Sie sich nicht auf dem Marktplatz registriert haben, wenden Sie sich bitte an das Team des Plugin-Marktplatzes, damit wir die Registrierung mit Ihrer E-Mail-Adresse rückgängig machen können. + + +Viele Grüße und viel Vergnügen mit Stud.IP und dem Marktplatz wünscht +Das Team des Stud.IP Pluginmarktplatzes diff --git a/templates/mails/mail_register.php b/templates/mails/mail_register.php new file mode 100644 index 0000000..e5d90d8 --- /dev/null +++ b/templates/mails/mail_register.php @@ -0,0 +1,23 @@ +Hallo , + +Sie haben sich am um auf dem Stud.IP-Pluginmarktplatz mit den folgenden Daten registriert: + +Username: + +Name: + +Vorname: + +E-Mail Adresse: + + +Um Ihre Anmeldung abzuschließen und zu bestätigen, klicken Sie bitte auf den folgenden Link. Wahrscheinlich unterstützt Ihr Mail-Programm ein einfaches Anklicken des Links. Ansonsten müssen Sie Ihren Browser öffnen und den Link komplett in die Adresszeile kopieren.Sobald Ihr Account freigeschaltet ist, können Sie alle Möglichkeiten des Stud.Ip-Pluginmarktplatzes nutzen. + + + + +Sollten Sie diese Mail erhalten haben, obwohl Sie sich nicht auf dem Marktplatz registriert haben, wenden Sie sich bitte an das Team des Plugin-Marktplatzes, damit wir die Registrierung mit Ihrer E-Mail-Adresse rückgängig machen können. + + +Viele Grüße und viel Vergnügen mit Stud.IP und dem Marktplatz wünscht +Das Team des Stud.IP Plugin-Marktplatzes diff --git a/templates/mails/reset_password.php b/templates/mails/reset_password.php new file mode 100644 index 0000000..b5d1bef --- /dev/null +++ b/templates/mails/reset_password.php @@ -0,0 +1,10 @@ +Sehr geehrtegetSalutation()=='Herr' ? 'r' : '')?> getSalutation()?> getFullnameByUserId($u->getUserId())?>, + +Sie haben am um ein neues Passwort für den Stud.IP Plugin-Marktplatz angefordert bzw. es wurde für Sie neu gesetzt. Das alte Passwort verliert ab sofort seine Gültigkeit. Ihr neues Passwort lautet: + + + + +Viele Grüsse, + +Das Stud.IP Plugin-Marktplatz Team diff --git a/templates/message_box.php b/templates/message_box.php new file mode 100644 index 0000000..e52e6f5 --- /dev/null +++ b/templates/message_box.php @@ -0,0 +1,23 @@ +
    + + + +
    style="display: none;" > +
      + +
    • + +
    +
    + +
    diff --git a/templates/modal_window.php b/templates/modal_window.php new file mode 100644 index 0000000..9649fe6 --- /dev/null +++ b/templates/modal_window.php @@ -0,0 +1,99 @@ + + +
    + +
    + | + +
    +
    +
    +
    + + +
    +
    diff --git a/templates/modal_window_rezension.php b/templates/modal_window_rezension.php new file mode 100644 index 0000000..3ba530b --- /dev/null +++ b/templates/modal_window_rezension.php @@ -0,0 +1,99 @@ + + +
    + +
    + | + +
    +
    +
    +
    + + +
    +
    diff --git a/templates/not_logged_in.php b/templates/not_logged_in.php new file mode 100644 index 0000000..af52b08 --- /dev/null +++ b/templates/not_logged_in.php @@ -0,0 +1,2 @@ +

    Sie sind nicht mehr angemeldet!

    +Hier gelangen Sie wieder zur Startseite. diff --git a/templates/nutzungsbedingungen.php b/templates/nutzungsbedingungen.php new file mode 100644 index 0000000..8dcbdf8 --- /dev/null +++ b/templates/nutzungsbedingungen.php @@ -0,0 +1 @@ +Nutzungsbedingungen diff --git a/templates/page_shift.php b/templates/page_shift.php new file mode 100644 index 0000000..a692e80 --- /dev/null +++ b/templates/page_shift.php @@ -0,0 +1,73 @@ + + +
    +
    +

    getPageCount() == 0 ? 'Keine Inhalte' : $instance->getPageTitle($offset))?>

    +
    getPageCount() == 0 ? 'Momentan gibt es keine Inhalte, die dargestellt werden könnten.' : $instance->getPageContent($offset))?>
    +
    +
    + + +
    +
    diff --git a/templates/plugin_detail.php b/templates/plugin_detail.php new file mode 100644 index 0000000..056d619 --- /dev/null +++ b/templates/plugin_detail.php @@ -0,0 +1,135 @@ +GetHoverJSFunction()?> +
    +
    + + + + + + + + +
    +getTitleScreen()) : ?> + + + + Kein Titel-Screenshot angegeben + + +

    getName())?>

    +
    +
    + getUserId())->getImageTag(Avatar::SMALL)?>getUserId())?>
    + + +getParticipants())) : ?> + + + + +getUrl()) : ?> + + +getRezension()) : ?> + + +
    Mitwirkende: + +
    getUserId())->getImageTag(Avatar::SMALL)?> getUserId())?>

    + +
    Eingetragen: getMkdate())?>
    Homepage:
    Rezension: anzeigen
    +
    +
    + getShortDescription())?> +
    +getTags()) > 0) : ?> +
    + Tags: | +getTags() as $t) : ?> + | + +
    + +
    +
    +getDescription()) : ?> +

    Beschreibung

    +
    + getDescription()?> +
    + + +

    Releases / Downloads (getReleases())?>)

    +
    + +
    + +getAllScreenshots())) : ?> +

    Screenshots ()

    +
    + +
    + +
    + +
    + +
    + +
    +
    + +
    +
    + +have_plugin_perm('author',$p->getPluginId())) : ?> +
    + +getChdate()) : ?> +
    +
    + Aktualisiert am getChdate())?> +
    + +
    +getLatestRelease()) : ?> + Download
    + Download latest release
    + +
    +
    +
    diff --git a/templates/plugin_item.php b/templates/plugin_item.php new file mode 100644 index 0000000..7566fe7 --- /dev/null +++ b/templates/plugin_item.php @@ -0,0 +1,75 @@ +
    +
    + + + + + + + + + +
    +getTitleScreen()) : ?> + + + + Kein Titel-Screenshot angegeben + + + +getApproved()) : ?> +
    Plugin noch nicht freigegeben
    + +getClassification() == 'firstclass') : ?> +
    Premium Gold Plugin
    + +getClassification() == 'secondclass') : ?> +
    Premium Silver Plugin
    + + +
    +
    + getUserId())->getImageTag(Avatar::SMALL)?> getUserId())?> + +
    +
    +getLatestRelease()) : ?> + + Download
    Download latest release
    + +
    +
    getShortDescription())?>
    +getTags()) > 0) : ?> +
    Tags: | +getTags() as $t) : ?> + | + +
    + +
    +getChdate()) : ?> +
    + Aktualisiert am getChdate())?> +
    + + +
    + + +have_plugin_perm('author',$p->getPluginId())) : ?> +
    + +
    +
    +
    diff --git a/templates/plugin_page.php b/templates/plugin_page.php new file mode 100644 index 0000000..906c470 --- /dev/null +++ b/templates/plugin_page.php @@ -0,0 +1,46 @@ +
    + + + + + + + + + +
    +getTitleScreen()) : ?> + + + + Kein Titel-Screenshot angegeben + + +
    +
    + getUserId())->getImageTag(Avatar::SMALL)?> getUserId())?> + +
    +
    getShortDescription(),170))?>
    +getChdate()) : ?> +
    + Aktualisiert am getChdate())?> +
    + +
    +getLatestRelease()) : ?> + Download latest release + +
    +
    diff --git a/templates/plugins/administration.php b/templates/plugins/administration.php new file mode 100644 index 0000000..7ce9a37 --- /dev/null +++ b/templates/plugins/administration.php @@ -0,0 +1,41 @@ +php +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +class extends AbstractStudIPAdministrationPlugin { + + function __construct() { + parent::AbstractStudIPAdministrationPlugin(); + } + + function getPluginname() { + return ""; + } + + function getDisplaytitle() { + return $this->getPluginname(); + } + + function hasTopNavigation(){ + return FALSE; + } + + function actionShow() { + StudIPTemplateEngine::showInfoMessage("Willkommen zu Ihrem Plugin!"); + } +} diff --git a/templates/plugins/homepage.php b/templates/plugins/homepage.php new file mode 100644 index 0000000..60d00f0 --- /dev/null +++ b/templates/plugins/homepage.php @@ -0,0 +1,50 @@ +php +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +class extends AbstractStudIPHomepagePlugin { + + function __construct() { + parent::AbstractStudIPHomepagePlugin(); + } + + function getPluginname() { + return ""; + } + + function getDisplaytitle() { + return $this->getPluginname(); + } + + function hasTopNavigation(){ + return FALSE; + } + + function setRequestedUser($user){ + parent::setRequestedUser($user); + } + + function actionShowOverview(){ + StudIPTemplateEngine::showInfoMessage("Willkommen zu Ihrem Plugin!"); + } + + public function actionShowAdministrationPage() { + StudIPTemplateEngine::showInfoMessage("Willkommen zur Administrationsseite Ihres Plugins!"); + } + +} diff --git a/templates/plugins/manifest.php b/templates/plugins/manifest.php new file mode 100644 index 0000000..84d6c5d --- /dev/null +++ b/templates/plugins/manifest.php @@ -0,0 +1,10 @@ +pluginname= + +pluginclassname= + +origin= + +version=1.0 +studipMinVersion= + +studipMaxVersion= diff --git a/templates/plugins/portal.php b/templates/plugins/portal.php new file mode 100644 index 0000000..30c6588 --- /dev/null +++ b/templates/plugins/portal.php @@ -0,0 +1,54 @@ +php +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +class extends AbstractStudIPPortalPlugin { + + function __construct() { + parent::AbstractStudIPPortalPlugin(); + } + + function getPluginname() { + return ""; + } + + function getDisplaytitle() { + return $this->getPluginname(); + } + + public function getNavigation() { + return $this->navigation; + } + + function hasAdministration(){ + return FALSE; + } + + public function showOverview($unauthorizedview = TRUE) { + StudIPTemplateEngine::showInfoMessage("Willkommen zu Ihrem Plugin!"); + } + + public function hasUnauthorizedView() { + return FALSE; + } + + public function hasAuthorizedView() { + return TRUE; + } + +} diff --git a/templates/plugins/standard.php b/templates/plugins/standard.php new file mode 100644 index 0000000..b3b985c --- /dev/null +++ b/templates/plugins/standard.php @@ -0,0 +1,49 @@ +php +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +class extends AbstractStudIPStandardPlugin { + + function __construct() { + parent::AbstractStudIPStandardPlugin(); + } + + function getPluginname() { + return ""; + } + + function getDisplaytitle() { + return $this->getPluginname(); + } + + public function actionShow() { + StudIPTemplateEngine::showInfoMessage("Willkommen zu Ihrem Plugin!"); + } + + function isShownInOverview(){ + return FALSE; + } + + function hasChanged($lastlogin) { + return FALSE; + } + + function getOverviewMessage($has_changed = false) { + } + +} diff --git a/templates/plugins/system.php b/templates/plugins/system.php new file mode 100644 index 0000000..27a0b98 --- /dev/null +++ b/templates/plugins/system.php @@ -0,0 +1,40 @@ +php +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +class extends AbstractStudIPSystemPlugin { + + function __construct() { + parent::AbstractStudIPSystemPlugin(); + } + + function getPluginname() { + return ""; + } + + function getDisplaytitle() { + return $this->getPluginname(); + } + + function hasBackgroundTasks() { + return FALSE; + } + + function doBackgroundTasks() { + } +} diff --git a/templates/profile.php b/templates/profile.php new file mode 100644 index 0000000..4fcade7 --- /dev/null +++ b/templates/profile.php @@ -0,0 +1,31 @@ +
    + + + + + + + + + + +
    getImageTag(Avatar::MEDIUM)?> + + + + +getUrl()) : ?> + + + + +getWorkplace()) : ?> + + + + +
    Homepage: getUrl())?>
    Arbeitsstelle: getWorkplace())?>
    +
    + > +
    +
    diff --git a/templates/question.php b/templates/question.php new file mode 100644 index 0000000..c6e7fb5 --- /dev/null +++ b/templates/question.php @@ -0,0 +1,58 @@ + + +getAuthenticatedUser(); ?> + +
    + +
    Treten Sie mit dem Autoren des Plugins in Kontakt
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Art der Anfrage: + +
    Eigene E-Mail Adresse: *
    Name:
    Anfrage: *
    Geben Sie bitte die nebenstehende Zeichenfolge zur Verifikation ein: CAPTCHA Image + + + +

    Bild unleserlich? Neues generieren
    *
     
    > STYLE="cursor:pointer;" onClick="location.href='?';">
    +* = Pflichtfeld +
    diff --git a/templates/rating.php b/templates/rating.php new file mode 100644 index 0000000..47f93b4 --- /dev/null +++ b/templates/rating.php @@ -0,0 +1,11 @@ +<?=_(" TITLE=""> + +
      +
    • Currently / Stars.
    • +
    • 1
    • +
    • 2
    • +
    • 3
    • +
    • 4
    • +
    • 5
    • +
    +<?=_(" TITLE=""> diff --git a/templates/rating_js.php b/templates/rating_js.php new file mode 100644 index 0000000..6a1691d --- /dev/null +++ b/templates/rating_js.php @@ -0,0 +1,24 @@ + diff --git a/templates/rating_no_action.php b/templates/rating_no_action.php new file mode 100644 index 0000000..7b2146b --- /dev/null +++ b/templates/rating_no_action.php @@ -0,0 +1,11 @@ +<?=_('negativer')?>"> + +
      +
    • Currently /5 Stars.
    • +
    • 1
    • +
    • 2
    • +
    • 3
    • +
    • 4
    • +
    • 5
    • +
    +<?=_(" TITLE=""> diff --git a/templates/register.php b/templates/register.php new file mode 100644 index 0000000..237112a --- /dev/null +++ b/templates/register.php @@ -0,0 +1,86 @@ + + +
    + +
    Registrieren Sie sich hier für die Nutzung des Marktplatzes
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Anrede: + + *
    Username: *
    Vorname: *
    Nachname: *
    E-Mail Adresse: *
    E-Mail Adresse (wiederholen): *
    Passwort: *
    Passwort (wiederholen): *
    Geben Sie bitte die nebenstehende Zeichenfolge zur Verifikation ein: CAPTCHA Image + + + +

    Bild unleserlich? Neues generieren
    *
     
    > onClick="location.href='?';">
    +* = Pflichtfeld +
    diff --git a/templates/release_detail.php b/templates/release_detail.php new file mode 100644 index 0000000..098b7aa --- /dev/null +++ b/templates/release_detail.php @@ -0,0 +1,44 @@ +
    + + + + + + +
    + Download
    Download
    +
    + Version: getVersion())?>, Dateiname: getFile()->getFileName())?>
    + getOrigin()) : ?> + Hersteller: getOrigin())?>
    + + getStudipMinVersion()) : ?> + Minimale Stud.IP Version: getStudipMinVersion())?>
    + + getStudipMaxVersion()) : ?> + Maximale Stud.IP Version: getStudipMaxVersion())?>
    + + getReleaseType()) : ?> + Release Art: getReleaseType())?>
    + + getDependencies()) : ?> +  Dieses Release benötigt zwingend die folgenden weiteren Releases:
    + + + +
    +
    + +
    +
    diff --git a/templates/release_item.php b/templates/release_item.php new file mode 100644 index 0000000..a5bfdec --- /dev/null +++ b/templates/release_item.php @@ -0,0 +1,38 @@ +
    + + + + + +
    + Download
    Download
    +
    + Version: getVersion())?>, Dateiname: getFile()->getFileName())?>
    +getOrigin()) : ?> + Hersteller: getOrigin())?>
    + +getStudipMinVersion()) : ?> + Minimale Stud.IP Version: getStudipMinVersion())?>
    + +getStudipMaxVersion()) : ?> + Maximale Stud.IP Version: getStudipMaxVersion())?>
    + +getReleaseType()) : ?> + Release Art: getReleaseType())?>
    + + Downloads: getDownloads()?>
    +getChdate()) : ?> +
    + Aktualisiert am getChdate())?> +
    + + +
    + +
    +
    diff --git a/templates/request_password.php b/templates/request_password.php new file mode 100644 index 0000000..53f5a90 --- /dev/null +++ b/templates/request_password.php @@ -0,0 +1,45 @@ + +
    +
    +
    + + + + + + + + + + + + + + + + + + +
    Fordern Sie ein neues Passwort an:
    Benutzername: *
    Geben Sie bitte die nebenstehende Zeichenfolge zur Verifikation ein: CAPTCHA Image + + + +

    Bild unleserlich? Neues generieren
    *
     
    +* = Pflichtfeld +
    +
    +
    + diff --git a/templates/search_plugins.php b/templates/search_plugins.php new file mode 100644 index 0000000..a8001b9 --- /dev/null +++ b/templates/search_plugins.php @@ -0,0 +1,2 @@ +
    + diff --git a/templates/show_plugin_generator.php b/templates/show_plugin_generator.php new file mode 100644 index 0000000..81862db --- /dev/null +++ b/templates/show_plugin_generator.php @@ -0,0 +1,64 @@ + +
    + +
    Plugin-Hüllen für Stud.IP von Version 1.9 bis einschl. 1.11 generieren
    + +switchClass(); ?> + + + + +switchClass(); ?> + + + + +switchClass(); ?> + + + + +switchClass(); ?> + + + + +switchClass(); ?> + + + + +switchClass(); ?> + + + + + +
    Plugin-Name: *
    Plugin-Klassenname: *
    Bitte keine Bindestriche oder Leerzeichen verwenden.
    Autor: *
    Minimale Stud.IP Version: * + +
    Maximale Stud.IP Version: * + +
    Art des Plugins: * + +
    + +
    >
    +
    +* = Pflichtfeld diff --git a/templates/show_tag_cloud.php b/templates/show_tag_cloud.php new file mode 100644 index 0000000..0a481b5 --- /dev/null +++ b/templates/show_tag_cloud.php @@ -0,0 +1,8 @@ + +
    + + +
  • + + +
    diff --git a/templates/start.php b/templates/start.php new file mode 100644 index 0000000..b5d80a8 --- /dev/null +++ b/templates/start.php @@ -0,0 +1,315 @@ + + + + +
    + + + + + + + + +
    + + +
    + +
    + +
    +
    +
    + +
    + + +
    +
    +
    + + + + + +
    +
    + +
    + +
    +
    +   +
    +
    + + +
    +
    +   +
    +
    +
    +   +
    + + +
    + + + +
    + + + +
    + + +
    +
    +
    +

    Der Marktplatz

    + +
    +
    +
    + + + + +
    +
    +
    +

    Kategorien

    +
      +getCategories() as $c) : ?> +
    • ()
    • + +
    +
    +
    +
    + + + + +
    +
    +
    +

    Hitlisten

    +
      +'Neueste Releases','uri'=>'?dispatch=hitlist&part=latest'),array('title'=>'Meiste Downloads','uri'=>'?dispatch=hitlist&part=most_downloaded')/*,array('title'=>'Am meisten bewertet','uri'=>'?dispatch=hitlist&part=most_rated')*/) as $d) : ?> +
    • + +
    +
    +
    +
    + + + + +getAuthenticatedUser()) : ?> + +
    +
    +
    +

    Mein Marktplatz

    + +
    +
    +
    + + + + + + +
    +
    +
    +

    Für Entwickler

    + +
    +
    +
    + + + + +
    + + + + + + +
    + + +
    + diff --git a/templates/start.php.old b/templates/start.php.old new file mode 100644 index 0000000..6d2da28 --- /dev/null +++ b/templates/start.php.old @@ -0,0 +1,189 @@ + + +
    + + + + + + + + + + + + + + + + + +
    +
     RSS Feed ATOM Feed
    +getAuthenticatedUser()) : ?> +
     Angemeldet als:  | Logout 
    + + + +
    +
    + +
    + + + + + +
     Der Marktplatz
    +
    Willkommen have_perm('admin') ? "\"bearbeiten\"" : '')?>
    +
    Über den Marktplatz have_perm('admin') ? "\"bearbeiten\"" : '')?>
    +
    FAQ have_perm('admin') ? "\"bearbeiten\"" : '')?>
    + +
    Weiterführende Links have_perm('admin') ? "\"bearbeiten\"" : '')?>
    +
    Das Team have_perm('admin') ? "\"bearbeiten\"" : '')?>
    +

    + + + + + +
     Kategorien
    +getCategories() as $c) : ?> + + +

    + + + + + +
     Hitlisten
    +'Empfohlene Plugins','uri'=>'?dispatch=hitlist&part=recommended'),*/array('title'=>'Neueste Releases','uri'=>'?dispatch=hitlist&part=latest'),array('title'=>'Meiste Downloads','uri'=>'?dispatch=hitlist&part=most_downloaded'),array('title'=>'Am meisten bewertet','uri'=>'?dispatch=hitlist&part=most_rated')) as $d) : ?> +
    + +

    + + + +
     Beliebte Tags

    +getAuthenticatedUser()) : ?> + + + + + +
     Mein Marktplatz
    + +have_perm('author')) : ?> + + + +have_perm('admin')) : ?> + + + +

    + + + + + + +
     Für Entwickler
    + + +
    Tutorials have_perm('admin') ? "\"bearbeiten\"" : '')?>
    +
    Entwicklungs-FAQ have_perm('admin') ? "\"bearbeiten\"" : '')?>
    +

    +
    + + + + + + + +
    +
    + +  Suchen nach  in der Kategorie  +   + + +
    +
    Erweiterte Suche
    +
    +
    +
    + + + + + +
    +
    + +
    +
    +
    + +
    + Impressum have_perm('admin') ? "\"bearbeiten\"" : '')?> | + Datenschutz have_perm('admin') ? "\"bearbeiten\"" : '')?> | + Nutzungsbedingungen have_perm('admin') ? "\"bearbeiten\"" : '')?> +
    +
    diff --git a/templates/user_edit_form.php b/templates/user_edit_form.php new file mode 100644 index 0000000..f3b1f14 --- /dev/null +++ b/templates/user_edit_form.php @@ -0,0 +1,83 @@ + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Letzer Login: getUserId()); echo ($s[0]['lastlogin'] ? date('d.m.Y H:i',$s[0]['lastlogin']) : 'nie'); ?>
    Username: *
    Anrede: + +
    Vorname: *
    Nachname: *
    E-Mail: *
    Passwort:
    Passwort (wiederholen):
    Perm: + +
    Locked: getLocked() ? 'CHECKED' : '')?>>
    Profilbild: getUserId())->getImageTag(Avatar::MEDIUM)?>
    > onClick="location.href='?dispatch=user_management';">
    +
    +* = Pflichtfeld diff --git a/templates/user_management.php b/templates/user_management.php new file mode 100644 index 0000000..87b8f7d --- /dev/null +++ b/templates/user_management.php @@ -0,0 +1,23 @@ +GetHoverJSFunction()?> +Neuen Benutzer STYLE="cursor:pointer;" onClick="location.href='?dispatch=show_admin_add_user'">

    + + + + + + + +switchClass(); ?> + getHover()?>> + + + + + + + + + + + +
    getUserId())->getImageTag(Avatar::SMALL)?>getUsername()?>getVorname()?>getNachname()?>getEmail()?>getPerm()?>getLocked() ? 'ja' : 'nein')?>getUserId()); echo ($s[0]['lastlogin'] ? date('d.m.Y H:i',$s[0]['lastlogin']) : 'nie'); ?> onClick="location.href='?dispatch=edit_user&user_id=getUserId()?>'">