From df73ebb83300cd43cfac91f006e20c6e2df4b90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Lebleu?= Date: Thu, 28 May 2015 14:58:23 +0200 Subject: [PATCH] Update to Jappix 1.1.4 and download sources --- scripts/_common.sh | 3 + scripts/install | 7 +- scripts/upgrade | 8 +- source/AUTHORS.md | 76 - source/CHANGELOG.md | 332 - source/COPYING.md | 666 - source/COPYING_FONT.md | 40 - source/COPYING_MINI.md | 26 - source/INSTALL.md | 21 - source/PROTOCOL.md | 88 - source/README.md | 73 - source/THANKS.md | 23 - source/VERSION | 1 - source/app/.htaccess | 2 - source/app/bundles/anonymous.xml | 5 - source/app/bundles/desktop.xml | 5 - source/app/bundles/httpauth.xml | 4 - source/app/bundles/install.xml | 5 - source/app/bundles/manager.xml | 5 - source/app/bundles/mini.xml | 5 - source/app/bundles/mobile.xml | 5 - source/app/fonts/eot/ptsans.eot | Bin 25230 -> 0 bytes source/app/fonts/eot/ptsansbold.eot | Bin 25283 -> 0 bytes source/app/fonts/eot/ptsansbolditalic.eot | Bin 27355 -> 0 bytes source/app/fonts/eot/ptsansitalic.eot | Bin 27671 -> 0 bytes source/app/fonts/svg/ptsans.svg | 242 - source/app/fonts/svg/ptsansbold.svg | 242 - source/app/fonts/svg/ptsansbolditalic.svg | 242 - source/app/fonts/svg/ptsansitalic.svg | 242 - source/app/fonts/ttf/ptsans.ttf | Bin 56840 -> 0 bytes source/app/fonts/ttf/ptsansbold.ttf | Bin 56292 -> 0 bytes source/app/fonts/ttf/ptsansbolditalic.ttf | Bin 62048 -> 0 bytes source/app/fonts/ttf/ptsansitalic.ttf | Bin 62608 -> 0 bytes source/app/fonts/woff/ptsans.woff | Bin 28368 -> 0 bytes source/app/fonts/woff/ptsansbold.woff | Bin 28532 -> 0 bytes source/app/fonts/woff/ptsansbolditalic.woff | Bin 30676 -> 0 bytes source/app/fonts/woff/ptsansitalic.woff | Bin 31012 -> 0 bytes source/app/images/others/blank.gif | Bin 43 -> 0 bytes source/app/images/others/default-avatar.png | Bin 1436 -> 0 bytes source/app/images/others/lock.png | Bin 95 -> 0 bytes .../placeholders/jingle_audio_local.png | Bin 1367 -> 0 bytes .../placeholders/jingle_audio_remote.png | Bin 5325 -> 0 bytes .../placeholders/jingle_video_local.png | Bin 1112 -> 0 bytes .../placeholders/jingle_video_remote.png | Bin 4414 -> 0 bytes source/app/images/sprites/animate.gif | Bin 1297 -> 0 bytes source/app/images/sprites/animate.png | Bin 6146 -> 0 bytes source/app/images/sprites/archives.png | Bin 1728 -> 0 bytes source/app/images/sprites/background.png | Bin 8782 -> 0 bytes source/app/images/sprites/browsers.png | Bin 10776 -> 0 bytes source/app/images/sprites/buttons.png | Bin 298 -> 0 bytes source/app/images/sprites/call.png | Bin 4230 -> 0 bytes source/app/images/sprites/home.png | Bin 27023 -> 0 bytes source/app/images/sprites/install.png | Bin 9980 -> 0 bytes source/app/images/sprites/manager.png | Bin 21102 -> 0 bytes source/app/images/sprites/me.png | Bin 5071 -> 0 bytes source/app/images/sprites/mini.gif | Bin 4105 -> 0 bytes source/app/images/sprites/mini.png | Bin 8861 -> 0 bytes source/app/images/sprites/mobile.png | Bin 2452 -> 0 bytes source/app/images/sprites/smileys.png | Bin 19253 -> 0 bytes source/app/images/sprites/talk.png | Bin 48232 -> 0 bytes source/app/images/sprites/welcome.png | Bin 5371 -> 0 bytes source/app/images/wait/wait-big.gif | Bin 1932 -> 0 bytes source/app/images/wait/wait-medium.png | Bin 294 -> 0 bytes source/app/images/wait/wait-small.gif | Bin 688 -> 0 bytes source/app/images/wait/wait-typing.gif | Bin 151 -> 0 bytes source/app/javascripts/adhoc.js | 158 - source/app/javascripts/anonymous.js | 210 - source/app/javascripts/attention.js | 216 - source/app/javascripts/audio.js | 212 - source/app/javascripts/autocompletion.js | 256 - source/app/javascripts/avatar.js | 290 - source/app/javascripts/base64.js | 82 - source/app/javascripts/board.js | 421 - source/app/javascripts/browser-detect.js | 125 - source/app/javascripts/bubble.js | 102 - source/app/javascripts/call.js | 1095 - source/app/javascripts/caps.js | 787 - source/app/javascripts/carbons.js | 241 - source/app/javascripts/chat.js | 672 - source/app/javascripts/chatstate.js | 252 - source/app/javascripts/common.js | 906 - source/app/javascripts/connection.js | 1034 - source/app/javascripts/console.js | 66 - source/app/javascripts/constants.js | 237 - source/app/javascripts/correction.js | 509 - source/app/javascripts/dataform.js | 1200 - source/app/javascripts/datastore.js | 506 - source/app/javascripts/date.js | 454 - source/app/javascripts/datejs.js | 104 - source/app/javascripts/directory.js | 148 - source/app/javascripts/discovery.js | 241 - source/app/javascripts/errors.js | 210 - source/app/javascripts/favorites.js | 785 - source/app/javascripts/features.js | 457 - source/app/javascripts/filter.js | 491 - source/app/javascripts/groupchat.js | 865 - source/app/javascripts/home.js | 526 - source/app/javascripts/httpauth.js | 114 - source/app/javascripts/httpreply.js | 78 - source/app/javascripts/inbox.js | 1002 - source/app/javascripts/integratebox.js | 470 - source/app/javascripts/interface.js | 784 - source/app/javascripts/ios.js | 354 - source/app/javascripts/iq.js | 464 - source/app/javascripts/jingle.js | 1346 -- source/app/javascripts/jquery.form.js | 1278 -- source/app/javascripts/jquery.js | 10308 --------- source/app/javascripts/jquery.json.js | 201 - source/app/javascripts/jquery.placeholder.js | 157 - source/app/javascripts/jquery.scrollto.js | 186 - source/app/javascripts/jquery.textrange.js | 14 - source/app/javascripts/jquery.timers.js | 138 - source/app/javascripts/jquery.ui.js | 15040 ------------- source/app/javascripts/jsjac.jingle.js | 18789 ---------------- source/app/javascripts/jsjac.js | 5090 ----- source/app/javascripts/jxhr.js | 116 - source/app/javascripts/links.js | 77 - source/app/javascripts/mam.js | 450 - source/app/javascripts/markers.js | 428 - source/app/javascripts/me.js | 116 - source/app/javascripts/message.js | 2068 -- source/app/javascripts/microblog.js | 1967 -- source/app/javascripts/mini.js | 4408 ---- source/app/javascripts/mobile.js | 1101 - source/app/javascripts/mucadmin.js | 580 - source/app/javascripts/muji.js | 1845 -- source/app/javascripts/music.js | 369 - source/app/javascripts/name.js | 234 - source/app/javascripts/notification.js | 658 - source/app/javascripts/oob.js | 283 - source/app/javascripts/options.js | 1008 - source/app/javascripts/origin.js | 56 - source/app/javascripts/pep.js | 1413 -- source/app/javascripts/popup.js | 121 - source/app/javascripts/presence.js | 1946 -- source/app/javascripts/privacy.js | 1271 -- source/app/javascripts/pubsub.js | 103 - source/app/javascripts/receipts.js | 201 - source/app/javascripts/roster.js | 1555 -- source/app/javascripts/rosterx.js | 302 - source/app/javascripts/search.js | 423 - source/app/javascripts/smileys.js | 119 - source/app/javascripts/storage.js | 195 - source/app/javascripts/system.js | 78 - source/app/javascripts/talk.js | 340 - source/app/javascripts/tooltip.js | 629 - source/app/javascripts/userinfos.js | 632 - source/app/javascripts/utilities.js | 719 - source/app/javascripts/vcard.js | 962 - source/app/javascripts/welcome.js | 413 - source/app/javascripts/xmpplinks.js | 109 - source/app/sounds/catch-attention.mp3 | Bin 28252 -> 0 bytes source/app/sounds/catch-attention.oga | Bin 27520 -> 0 bytes source/app/sounds/incoming-call.mp3 | Bin 54553 -> 0 bytes source/app/sounds/incoming-call.oga | Bin 45182 -> 0 bytes source/app/sounds/new-chat.mp3 | Bin 12928 -> 0 bytes source/app/sounds/new-chat.oga | Bin 12224 -> 0 bytes source/app/sounds/notification.mp3 | Bin 12928 -> 0 bytes source/app/sounds/notification.oga | Bin 12981 -> 0 bytes source/app/sounds/outgoing-call.mp3 | Bin 241757 -> 0 bytes source/app/sounds/outgoing-call.oga | Bin 214468 -> 0 bytes source/app/sounds/receive-message.mp3 | Bin 12928 -> 0 bytes source/app/sounds/receive-message.oga | Bin 11837 -> 0 bytes source/app/stylesheets/adhoc.css | 29 - source/app/stylesheets/anonymous.css | 29 - source/app/stylesheets/board.css | 46 - source/app/stylesheets/call.css | 254 - source/app/stylesheets/channel.css | 646 - source/app/stylesheets/directory.css | 15 - source/app/stylesheets/discovery.css | 78 - source/app/stylesheets/favorites.css | 184 - source/app/stylesheets/fonts.css | 51 - source/app/stylesheets/home.css | 998 - source/app/stylesheets/ie.css | 179 - source/app/stylesheets/images.css | 100 - source/app/stylesheets/inbox.css | 244 - source/app/stylesheets/install.css | 304 - source/app/stylesheets/integratebox.css | 37 - source/app/stylesheets/ios.css | 172 - source/app/stylesheets/jingle.css | 104 - source/app/stylesheets/main.css | 146 - source/app/stylesheets/manager.css | 612 - source/app/stylesheets/me.css | 48 - source/app/stylesheets/mini.css | 854 - source/app/stylesheets/mobile.css | 303 - source/app/stylesheets/mucadmin.css | 130 - source/app/stylesheets/muji.css | 690 - source/app/stylesheets/myinfos.css | 382 - source/app/stylesheets/options.css | 114 - source/app/stylesheets/others.css | 246 - source/app/stylesheets/pageengine.css | 1140 - source/app/stylesheets/pageswitch.css | 285 - source/app/stylesheets/popup.css | 719 - source/app/stylesheets/privacy.css | 266 - source/app/stylesheets/roster.css | 645 - source/app/stylesheets/rosterx.css | 69 - source/app/stylesheets/search.css | 59 - source/app/stylesheets/smileys.css | 195 - source/app/stylesheets/stats-svg.css | 70 - source/app/stylesheets/tools.css | 736 - source/app/stylesheets/userinfos.css | 121 - source/app/stylesheets/vcard.css | 120 - source/app/stylesheets/welcome.css | 180 - source/dev/.htaccess | 2 - source/dev/images/icons/accept.png | Bin 726 -> 0 bytes source/dev/images/icons/add.png | Bin 676 -> 0 bytes source/dev/images/icons/anchor.png | Bin 512 -> 0 bytes source/dev/images/icons/application.png | Bin 460 -> 0 bytes source/dev/images/icons/application_add.png | Bin 559 -> 0 bytes .../dev/images/icons/application_cascade.png | Bin 465 -> 0 bytes .../dev/images/icons/application_delete.png | Bin 587 -> 0 bytes .../dev/images/icons/application_double.png | Bin 507 -> 0 bytes source/dev/images/icons/application_edit.png | Bin 650 -> 0 bytes source/dev/images/icons/application_error.png | Bin 650 -> 0 bytes source/dev/images/icons/application_form.png | Bin 439 -> 0 bytes .../dev/images/icons/application_form_add.png | Bin 533 -> 0 bytes .../images/icons/application_form_delete.png | Bin 565 -> 0 bytes .../images/icons/application_form_edit.png | Bin 658 -> 0 bytes .../images/icons/application_form_magnify.png | Bin 591 -> 0 bytes source/dev/images/icons/application_get.png | Bin 569 -> 0 bytes source/dev/images/icons/application_go.png | Bin 634 -> 0 bytes source/dev/images/icons/application_home.png | Bin 654 -> 0 bytes source/dev/images/icons/application_key.png | Bin 631 -> 0 bytes .../images/icons/application_lightning.png | Bin 648 -> 0 bytes source/dev/images/icons/application_link.png | Bin 645 -> 0 bytes source/dev/images/icons/application_osx.png | Bin 487 -> 0 bytes .../images/icons/application_osx_terminal.png | Bin 525 -> 0 bytes source/dev/images/icons/application_put.png | Bin 575 -> 0 bytes .../images/icons/application_side_boxes.png | Bin 437 -> 0 bytes .../icons/application_side_contract.png | Bin 547 -> 0 bytes .../images/icons/application_side_expand.png | Bin 581 -> 0 bytes .../images/icons/application_side_list.png | Bin 471 -> 0 bytes .../images/icons/application_side_tree.png | Bin 442 -> 0 bytes source/dev/images/icons/application_split.png | Bin 486 -> 0 bytes .../icons/application_tile_horizontal.png | Bin 432 -> 0 bytes .../icons/application_tile_vertical.png | Bin 492 -> 0 bytes .../images/icons/application_view_columns.png | Bin 437 -> 0 bytes .../images/icons/application_view_detail.png | Bin 514 -> 0 bytes .../images/icons/application_view_gallery.png | Bin 551 -> 0 bytes .../images/icons/application_view_icons.png | Bin 426 -> 0 bytes .../images/icons/application_view_list.png | Bin 456 -> 0 bytes .../images/icons/application_view_tile.png | Bin 418 -> 0 bytes source/dev/images/icons/application_xp.png | Bin 426 -> 0 bytes .../images/icons/application_xp_terminal.png | Bin 507 -> 0 bytes source/dev/images/icons/arrow_branch.png | Bin 561 -> 0 bytes source/dev/images/icons/arrow_divide.png | Bin 649 -> 0 bytes source/dev/images/icons/arrow_down.png | Bin 374 -> 0 bytes source/dev/images/icons/arrow_in.png | Bin 543 -> 0 bytes source/dev/images/icons/arrow_inout.png | Bin 551 -> 0 bytes source/dev/images/icons/arrow_join.png | Bin 581 -> 0 bytes source/dev/images/icons/arrow_left.png | Bin 332 -> 0 bytes source/dev/images/icons/arrow_merge.png | Bin 466 -> 0 bytes source/dev/images/icons/arrow_out.png | Bin 536 -> 0 bytes source/dev/images/icons/arrow_redo.png | Bin 613 -> 0 bytes source/dev/images/icons/arrow_refresh.png | Bin 630 -> 0 bytes .../dev/images/icons/arrow_refresh_small.png | Bin 457 -> 0 bytes source/dev/images/icons/arrow_right.png | Bin 331 -> 0 bytes .../icons/arrow_rotate_anticlockwise.png | Bin 553 -> 0 bytes .../images/icons/arrow_rotate_clockwise.png | Bin 548 -> 0 bytes source/dev/images/icons/arrow_switch.png | Bin 650 -> 0 bytes source/dev/images/icons/arrow_turn_left.png | Bin 473 -> 0 bytes source/dev/images/icons/arrow_turn_right.png | Bin 456 -> 0 bytes source/dev/images/icons/arrow_undo.png | Bin 616 -> 0 bytes source/dev/images/icons/arrow_up.png | Bin 368 -> 0 bytes source/dev/images/icons/asterisk_orange.png | Bin 706 -> 0 bytes source/dev/images/icons/asterisk_yellow.png | Bin 686 -> 0 bytes source/dev/images/icons/attach.png | Bin 383 -> 0 bytes source/dev/images/icons/award_star_add.png | Bin 806 -> 0 bytes .../dev/images/icons/award_star_bronze_1.png | Bin 708 -> 0 bytes .../dev/images/icons/award_star_bronze_2.png | Bin 723 -> 0 bytes .../dev/images/icons/award_star_bronze_3.png | Bin 719 -> 0 bytes source/dev/images/icons/award_star_delete.png | Bin 823 -> 0 bytes source/dev/images/icons/award_star_gold_1.png | Bin 731 -> 0 bytes source/dev/images/icons/award_star_gold_2.png | Bin 750 -> 0 bytes source/dev/images/icons/award_star_gold_3.png | Bin 746 -> 0 bytes .../dev/images/icons/award_star_silver_1.png | Bin 699 -> 0 bytes .../dev/images/icons/award_star_silver_2.png | Bin 700 -> 0 bytes .../dev/images/icons/award_star_silver_3.png | Bin 695 -> 0 bytes source/dev/images/icons/basket.png | Bin 669 -> 0 bytes source/dev/images/icons/basket_add.png | Bin 696 -> 0 bytes source/dev/images/icons/basket_delete.png | Bin 720 -> 0 bytes source/dev/images/icons/basket_edit.png | Bin 758 -> 0 bytes source/dev/images/icons/basket_error.png | Bin 767 -> 0 bytes source/dev/images/icons/basket_go.png | Bin 722 -> 0 bytes source/dev/images/icons/basket_put.png | Bin 733 -> 0 bytes source/dev/images/icons/basket_remove.png | Bin 738 -> 0 bytes source/dev/images/icons/bell.png | Bin 735 -> 0 bytes source/dev/images/icons/bell_add.png | Bin 760 -> 0 bytes source/dev/images/icons/bell_delete.png | Bin 775 -> 0 bytes source/dev/images/icons/bell_error.png | Bin 764 -> 0 bytes source/dev/images/icons/bell_go.png | Bin 784 -> 0 bytes source/dev/images/icons/bell_link.png | Bin 796 -> 0 bytes source/dev/images/icons/bin.png | Bin 471 -> 0 bytes source/dev/images/icons/bin_closed.png | Bin 358 -> 0 bytes source/dev/images/icons/bin_empty.png | Bin 472 -> 0 bytes source/dev/images/icons/bomb.png | Bin 790 -> 0 bytes source/dev/images/icons/book.png | Bin 593 -> 0 bytes source/dev/images/icons/book_add.png | Bin 714 -> 0 bytes source/dev/images/icons/book_addresses.png | Bin 770 -> 0 bytes source/dev/images/icons/book_delete.png | Bin 719 -> 0 bytes source/dev/images/icons/book_edit.png | Bin 813 -> 0 bytes source/dev/images/icons/book_error.png | Bin 734 -> 0 bytes source/dev/images/icons/book_go.png | Bin 745 -> 0 bytes source/dev/images/icons/book_key.png | Bin 779 -> 0 bytes source/dev/images/icons/book_link.png | Bin 789 -> 0 bytes source/dev/images/icons/book_next.png | Bin 687 -> 0 bytes source/dev/images/icons/book_open.png | Bin 622 -> 0 bytes source/dev/images/icons/book_previous.png | Bin 658 -> 0 bytes source/dev/images/icons/box.png | Bin 555 -> 0 bytes source/dev/images/icons/brick.png | Bin 439 -> 0 bytes source/dev/images/icons/brick_add.png | Bin 673 -> 0 bytes source/dev/images/icons/brick_delete.png | Bin 687 -> 0 bytes source/dev/images/icons/brick_edit.png | Bin 721 -> 0 bytes source/dev/images/icons/brick_error.png | Bin 742 -> 0 bytes source/dev/images/icons/brick_go.png | Bin 736 -> 0 bytes source/dev/images/icons/brick_link.png | Bin 707 -> 0 bytes source/dev/images/icons/bricks.png | Bin 765 -> 0 bytes source/dev/images/icons/briefcase.png | Bin 793 -> 0 bytes source/dev/images/icons/bug.png | Bin 714 -> 0 bytes source/dev/images/icons/bug_add.png | Bin 752 -> 0 bytes source/dev/images/icons/bug_delete.png | Bin 780 -> 0 bytes source/dev/images/icons/bug_edit.png | Bin 803 -> 0 bytes source/dev/images/icons/bug_error.png | Bin 785 -> 0 bytes source/dev/images/icons/bug_go.png | Bin 778 -> 0 bytes source/dev/images/icons/bug_link.png | Bin 792 -> 0 bytes source/dev/images/icons/building.png | Bin 556 -> 0 bytes source/dev/images/icons/building_add.png | Bin 591 -> 0 bytes source/dev/images/icons/building_delete.png | Bin 612 -> 0 bytes source/dev/images/icons/building_edit.png | Bin 700 -> 0 bytes source/dev/images/icons/building_error.png | Bin 653 -> 0 bytes source/dev/images/icons/building_go.png | Bin 647 -> 0 bytes source/dev/images/icons/building_key.png | Bin 676 -> 0 bytes source/dev/images/icons/building_link.png | Bin 646 -> 0 bytes source/dev/images/icons/bullet_add.png | Bin 253 -> 0 bytes .../dev/images/icons/bullet_arrow_bottom.png | Bin 229 -> 0 bytes source/dev/images/icons/bullet_arrow_down.png | Bin 201 -> 0 bytes source/dev/images/icons/bullet_arrow_top.png | Bin 230 -> 0 bytes source/dev/images/icons/bullet_arrow_up.png | Bin 201 -> 0 bytes source/dev/images/icons/bullet_black.png | Bin 211 -> 0 bytes source/dev/images/icons/bullet_blue.png | Bin 239 -> 0 bytes source/dev/images/icons/bullet_delete.png | Bin 268 -> 0 bytes source/dev/images/icons/bullet_disk.png | Bin 455 -> 0 bytes source/dev/images/icons/bullet_error.png | Bin 413 -> 0 bytes source/dev/images/icons/bullet_feed.png | Bin 214 -> 0 bytes source/dev/images/icons/bullet_go.png | Bin 374 -> 0 bytes source/dev/images/icons/bullet_green.png | Bin 249 -> 0 bytes source/dev/images/icons/bullet_key.png | Bin 392 -> 0 bytes source/dev/images/icons/bullet_orange.png | Bin 228 -> 0 bytes source/dev/images/icons/bullet_picture.png | Bin 433 -> 0 bytes source/dev/images/icons/bullet_pink.png | Bin 231 -> 0 bytes source/dev/images/icons/bullet_purple.png | Bin 240 -> 0 bytes source/dev/images/icons/bullet_red.png | Bin 234 -> 0 bytes source/dev/images/icons/bullet_star.png | Bin 285 -> 0 bytes .../dev/images/icons/bullet_toggle_minus.png | Bin 207 -> 0 bytes .../dev/images/icons/bullet_toggle_plus.png | Bin 209 -> 0 bytes source/dev/images/icons/bullet_white.png | Bin 201 -> 0 bytes source/dev/images/icons/bullet_wrench.png | Bin 392 -> 0 bytes source/dev/images/icons/bullet_yellow.png | Bin 233 -> 0 bytes source/dev/images/icons/cake.png | Bin 620 -> 0 bytes source/dev/images/icons/calculator.png | Bin 507 -> 0 bytes source/dev/images/icons/calculator_add.png | Bin 604 -> 0 bytes source/dev/images/icons/calculator_delete.png | Bin 633 -> 0 bytes source/dev/images/icons/calculator_edit.png | Bin 714 -> 0 bytes source/dev/images/icons/calculator_error.png | Bin 686 -> 0 bytes source/dev/images/icons/calculator_link.png | Bin 667 -> 0 bytes source/dev/images/icons/calendar.png | Bin 642 -> 0 bytes source/dev/images/icons/calendar_add.png | Bin 677 -> 0 bytes source/dev/images/icons/calendar_delete.png | Bin 704 -> 0 bytes source/dev/images/icons/calendar_edit.png | Bin 738 -> 0 bytes source/dev/images/icons/calendar_link.png | Bin 741 -> 0 bytes source/dev/images/icons/calendar_view_day.png | Bin 572 -> 0 bytes .../dev/images/icons/calendar_view_month.png | Bin 551 -> 0 bytes .../dev/images/icons/calendar_view_week.png | Bin 480 -> 0 bytes source/dev/images/icons/camera.png | Bin 665 -> 0 bytes source/dev/images/icons/camera_add.png | Bin 765 -> 0 bytes source/dev/images/icons/camera_delete.png | Bin 790 -> 0 bytes source/dev/images/icons/camera_edit.png | Bin 830 -> 0 bytes source/dev/images/icons/camera_error.png | Bin 835 -> 0 bytes source/dev/images/icons/camera_go.png | Bin 809 -> 0 bytes source/dev/images/icons/camera_link.png | Bin 788 -> 0 bytes source/dev/images/icons/camera_small.png | Bin 455 -> 0 bytes source/dev/images/icons/cancel.png | Bin 522 -> 0 bytes source/dev/images/icons/car.png | Bin 559 -> 0 bytes source/dev/images/icons/car_add.png | Bin 620 -> 0 bytes source/dev/images/icons/car_delete.png | Bin 637 -> 0 bytes source/dev/images/icons/cart.png | Bin 413 -> 0 bytes source/dev/images/icons/cart_add.png | Bin 654 -> 0 bytes source/dev/images/icons/cart_delete.png | Bin 686 -> 0 bytes source/dev/images/icons/cart_edit.png | Bin 736 -> 0 bytes source/dev/images/icons/cart_error.png | Bin 732 -> 0 bytes source/dev/images/icons/cart_go.png | Bin 717 -> 0 bytes source/dev/images/icons/cart_put.png | Bin 706 -> 0 bytes source/dev/images/icons/cart_remove.png | Bin 714 -> 0 bytes source/dev/images/icons/cd.png | Bin 605 -> 0 bytes source/dev/images/icons/cd_add.png | Bin 684 -> 0 bytes source/dev/images/icons/cd_burn.png | Bin 689 -> 0 bytes source/dev/images/icons/cd_delete.png | Bin 697 -> 0 bytes source/dev/images/icons/cd_edit.png | Bin 719 -> 0 bytes source/dev/images/icons/cd_eject.png | Bin 716 -> 0 bytes source/dev/images/icons/cd_go.png | Bin 724 -> 0 bytes source/dev/images/icons/chart_bar.png | Bin 541 -> 0 bytes source/dev/images/icons/chart_bar_add.png | Bin 626 -> 0 bytes source/dev/images/icons/chart_bar_delete.png | Bin 636 -> 0 bytes source/dev/images/icons/chart_bar_edit.png | Bin 754 -> 0 bytes source/dev/images/icons/chart_bar_error.png | Bin 671 -> 0 bytes source/dev/images/icons/chart_bar_link.png | Bin 707 -> 0 bytes source/dev/images/icons/chart_curve.png | Bin 680 -> 0 bytes source/dev/images/icons/chart_curve_add.png | Bin 721 -> 0 bytes .../dev/images/icons/chart_curve_delete.png | Bin 738 -> 0 bytes source/dev/images/icons/chart_curve_edit.png | Bin 767 -> 0 bytes source/dev/images/icons/chart_curve_error.png | Bin 782 -> 0 bytes source/dev/images/icons/chart_curve_go.png | Bin 769 -> 0 bytes source/dev/images/icons/chart_curve_link.png | Bin 775 -> 0 bytes source/dev/images/icons/chart_line.png | Bin 497 -> 0 bytes source/dev/images/icons/chart_line_add.png | Bin 625 -> 0 bytes source/dev/images/icons/chart_line_delete.png | Bin 642 -> 0 bytes source/dev/images/icons/chart_line_edit.png | Bin 670 -> 0 bytes source/dev/images/icons/chart_line_error.png | Bin 701 -> 0 bytes source/dev/images/icons/chart_line_link.png | Bin 697 -> 0 bytes .../dev/images/icons/chart_organisation.png | Bin 422 -> 0 bytes .../images/icons/chart_organisation_add.png | Bin 489 -> 0 bytes .../icons/chart_organisation_delete.png | Bin 514 -> 0 bytes source/dev/images/icons/chart_pie.png | Bin 889 -> 0 bytes source/dev/images/icons/chart_pie_add.png | Bin 936 -> 0 bytes source/dev/images/icons/chart_pie_delete.png | Bin 962 -> 0 bytes source/dev/images/icons/chart_pie_edit.png | Bin 927 -> 0 bytes source/dev/images/icons/chart_pie_error.png | Bin 966 -> 0 bytes source/dev/images/icons/chart_pie_link.png | Bin 967 -> 0 bytes source/dev/images/icons/clock.png | Bin 825 -> 0 bytes source/dev/images/icons/clock_add.png | Bin 863 -> 0 bytes source/dev/images/icons/clock_delete.png | Bin 884 -> 0 bytes source/dev/images/icons/clock_edit.png | Bin 897 -> 0 bytes source/dev/images/icons/clock_error.png | Bin 887 -> 0 bytes source/dev/images/icons/clock_go.png | Bin 894 -> 0 bytes source/dev/images/icons/clock_link.png | Bin 899 -> 0 bytes source/dev/images/icons/clock_pause.png | Bin 904 -> 0 bytes source/dev/images/icons/clock_play.png | Bin 885 -> 0 bytes source/dev/images/icons/clock_red.png | Bin 833 -> 0 bytes source/dev/images/icons/clock_stop.png | Bin 866 -> 0 bytes source/dev/images/icons/cog.png | Bin 503 -> 0 bytes source/dev/images/icons/cog_add.png | Bin 758 -> 0 bytes source/dev/images/icons/cog_delete.png | Bin 790 -> 0 bytes source/dev/images/icons/cog_edit.png | Bin 810 -> 0 bytes source/dev/images/icons/cog_error.png | Bin 813 -> 0 bytes source/dev/images/icons/cog_go.png | Bin 817 -> 0 bytes source/dev/images/icons/coins.png | Bin 732 -> 0 bytes source/dev/images/icons/coins_add.png | Bin 775 -> 0 bytes source/dev/images/icons/coins_delete.png | Bin 769 -> 0 bytes source/dev/images/icons/color_swatch.png | Bin 152 -> 0 bytes source/dev/images/icons/color_wheel.png | Bin 876 -> 0 bytes source/dev/images/icons/comment.png | Bin 352 -> 0 bytes source/dev/images/icons/comment_add.png | Bin 467 -> 0 bytes source/dev/images/icons/comment_delete.png | Bin 489 -> 0 bytes source/dev/images/icons/comment_edit.png | Bin 583 -> 0 bytes source/dev/images/icons/comments.png | Bin 491 -> 0 bytes source/dev/images/icons/comments_add.png | Bin 588 -> 0 bytes source/dev/images/icons/comments_delete.png | Bin 610 -> 0 bytes source/dev/images/icons/compress.png | Bin 766 -> 0 bytes source/dev/images/icons/computer.png | Bin 667 -> 0 bytes source/dev/images/icons/computer_add.png | Bin 781 -> 0 bytes source/dev/images/icons/computer_delete.png | Bin 775 -> 0 bytes source/dev/images/icons/computer_edit.png | Bin 792 -> 0 bytes source/dev/images/icons/computer_error.png | Bin 784 -> 0 bytes source/dev/images/icons/computer_go.png | Bin 777 -> 0 bytes source/dev/images/icons/computer_key.png | Bin 771 -> 0 bytes source/dev/images/icons/computer_link.png | Bin 792 -> 0 bytes source/dev/images/icons/connect.png | Bin 721 -> 0 bytes source/dev/images/icons/contrast.png | Bin 428 -> 0 bytes source/dev/images/icons/contrast_decrease.png | Bin 694 -> 0 bytes source/dev/images/icons/contrast_high.png | Bin 430 -> 0 bytes source/dev/images/icons/contrast_increase.png | Bin 696 -> 0 bytes source/dev/images/icons/contrast_low.png | Bin 411 -> 0 bytes source/dev/images/icons/control_eject.png | Bin 543 -> 0 bytes .../dev/images/icons/control_eject_blue.png | Bin 668 -> 0 bytes source/dev/images/icons/control_end.png | Bin 558 -> 0 bytes source/dev/images/icons/control_end_blue.png | Bin 680 -> 0 bytes source/dev/images/icons/control_equalizer.png | Bin 416 -> 0 bytes .../images/icons/control_equalizer_blue.png | Bin 704 -> 0 bytes .../dev/images/icons/control_fastforward.png | Bin 548 -> 0 bytes .../images/icons/control_fastforward_blue.png | Bin 677 -> 0 bytes source/dev/images/icons/control_pause.png | Bin 545 -> 0 bytes .../dev/images/icons/control_pause_blue.png | Bin 663 -> 0 bytes source/dev/images/icons/control_play.png | Bin 532 -> 0 bytes source/dev/images/icons/control_play_blue.png | Bin 658 -> 0 bytes source/dev/images/icons/control_repeat.png | Bin 412 -> 0 bytes .../dev/images/icons/control_repeat_blue.png | Bin 693 -> 0 bytes source/dev/images/icons/control_rewind.png | Bin 551 -> 0 bytes .../dev/images/icons/control_rewind_blue.png | Bin 685 -> 0 bytes source/dev/images/icons/control_start.png | Bin 542 -> 0 bytes .../dev/images/icons/control_start_blue.png | Bin 663 -> 0 bytes source/dev/images/icons/control_stop.png | Bin 396 -> 0 bytes source/dev/images/icons/control_stop_blue.png | Bin 637 -> 0 bytes source/dev/images/icons/controller.png | Bin 614 -> 0 bytes source/dev/images/icons/controller_add.png | Bin 703 -> 0 bytes source/dev/images/icons/controller_delete.png | Bin 716 -> 0 bytes source/dev/images/icons/controller_error.png | Bin 758 -> 0 bytes source/dev/images/icons/creditcards.png | Bin 664 -> 0 bytes source/dev/images/icons/cross.png | Bin 600 -> 0 bytes source/dev/images/icons/css.png | Bin 524 -> 0 bytes source/dev/images/icons/css_add.png | Bin 651 -> 0 bytes source/dev/images/icons/css_delete.png | Bin 654 -> 0 bytes source/dev/images/icons/css_go.png | Bin 655 -> 0 bytes source/dev/images/icons/css_valid.png | Bin 661 -> 0 bytes source/dev/images/icons/cup.png | Bin 578 -> 0 bytes source/dev/images/icons/cup_add.png | Bin 657 -> 0 bytes source/dev/images/icons/cup_delete.png | Bin 676 -> 0 bytes source/dev/images/icons/cup_edit.png | Bin 722 -> 0 bytes source/dev/images/icons/cup_error.png | Bin 734 -> 0 bytes source/dev/images/icons/cup_go.png | Bin 723 -> 0 bytes source/dev/images/icons/cup_key.png | Bin 721 -> 0 bytes source/dev/images/icons/cup_link.png | Bin 703 -> 0 bytes source/dev/images/icons/cursor.png | Bin 343 -> 0 bytes source/dev/images/icons/cut.png | Bin 628 -> 0 bytes source/dev/images/icons/cut_red.png | Bin 633 -> 0 bytes source/dev/images/icons/database.png | Bin 386 -> 0 bytes source/dev/images/icons/database_add.png | Bin 645 -> 0 bytes source/dev/images/icons/database_connect.png | Bin 763 -> 0 bytes source/dev/images/icons/database_delete.png | Bin 659 -> 0 bytes source/dev/images/icons/database_edit.png | Bin 744 -> 0 bytes source/dev/images/icons/database_error.png | Bin 682 -> 0 bytes source/dev/images/icons/database_gear.png | Bin 467 -> 0 bytes source/dev/images/icons/database_go.png | Bin 698 -> 0 bytes source/dev/images/icons/database_key.png | Bin 758 -> 0 bytes .../dev/images/icons/database_lightning.png | Bin 775 -> 0 bytes source/dev/images/icons/database_link.png | Bin 673 -> 0 bytes source/dev/images/icons/database_refresh.png | Bin 770 -> 0 bytes source/dev/images/icons/database_save.png | Bin 755 -> 0 bytes source/dev/images/icons/database_table.png | Bin 668 -> 0 bytes source/dev/images/icons/date.png | Bin 572 -> 0 bytes source/dev/images/icons/date_add.png | Bin 643 -> 0 bytes source/dev/images/icons/date_delete.png | Bin 656 -> 0 bytes source/dev/images/icons/date_edit.png | Bin 738 -> 0 bytes source/dev/images/icons/date_error.png | Bin 711 -> 0 bytes source/dev/images/icons/date_go.png | Bin 694 -> 0 bytes source/dev/images/icons/date_link.png | Bin 715 -> 0 bytes source/dev/images/icons/date_magnify.png | Bin 654 -> 0 bytes source/dev/images/icons/date_next.png | Bin 648 -> 0 bytes source/dev/images/icons/date_previous.png | Bin 681 -> 0 bytes source/dev/images/icons/delete.png | Bin 659 -> 0 bytes source/dev/images/icons/disconnect.png | Bin 759 -> 0 bytes source/dev/images/icons/disk.png | Bin 620 -> 0 bytes source/dev/images/icons/disk_multiple.png | Bin 651 -> 0 bytes source/dev/images/icons/door.png | Bin 412 -> 0 bytes source/dev/images/icons/door_in.png | Bin 693 -> 0 bytes source/dev/images/icons/door_open.png | Bin 508 -> 0 bytes source/dev/images/icons/door_out.png | Bin 688 -> 0 bytes source/dev/images/icons/drink.png | Bin 638 -> 0 bytes source/dev/images/icons/drink_empty.png | Bin 426 -> 0 bytes source/dev/images/icons/drive.png | Bin 338 -> 0 bytes source/dev/images/icons/drive_add.png | Bin 610 -> 0 bytes source/dev/images/icons/drive_burn.png | Bin 608 -> 0 bytes source/dev/images/icons/drive_cd.png | Bin 733 -> 0 bytes source/dev/images/icons/drive_cd_empty.png | Bin 332 -> 0 bytes source/dev/images/icons/drive_delete.png | Bin 628 -> 0 bytes source/dev/images/icons/drive_disk.png | Bin 695 -> 0 bytes source/dev/images/icons/drive_edit.png | Bin 693 -> 0 bytes source/dev/images/icons/drive_error.png | Bin 705 -> 0 bytes source/dev/images/icons/drive_go.png | Bin 661 -> 0 bytes source/dev/images/icons/drive_key.png | Bin 681 -> 0 bytes source/dev/images/icons/drive_link.png | Bin 654 -> 0 bytes source/dev/images/icons/drive_magnify.png | Bin 641 -> 0 bytes source/dev/images/icons/drive_network.png | Bin 585 -> 0 bytes source/dev/images/icons/drive_rename.png | Bin 486 -> 0 bytes source/dev/images/icons/drive_user.png | Bin 712 -> 0 bytes source/dev/images/icons/drive_web.png | Bin 686 -> 0 bytes source/dev/images/icons/dvd.png | Bin 706 -> 0 bytes source/dev/images/icons/dvd_add.png | Bin 730 -> 0 bytes source/dev/images/icons/dvd_delete.png | Bin 742 -> 0 bytes source/dev/images/icons/dvd_edit.png | Bin 787 -> 0 bytes source/dev/images/icons/dvd_error.png | Bin 792 -> 0 bytes source/dev/images/icons/dvd_go.png | Bin 797 -> 0 bytes source/dev/images/icons/dvd_key.png | Bin 759 -> 0 bytes source/dev/images/icons/dvd_link.png | Bin 764 -> 0 bytes source/dev/images/icons/email.png | Bin 639 -> 0 bytes source/dev/images/icons/email_add.png | Bin 701 -> 0 bytes source/dev/images/icons/email_attach.png | Bin 744 -> 0 bytes source/dev/images/icons/email_delete.png | Bin 726 -> 0 bytes source/dev/images/icons/email_edit.png | Bin 728 -> 0 bytes source/dev/images/icons/email_error.png | Bin 769 -> 0 bytes source/dev/images/icons/email_go.png | Bin 751 -> 0 bytes source/dev/images/icons/email_link.png | Bin 764 -> 0 bytes source/dev/images/icons/email_open.png | Bin 723 -> 0 bytes source/dev/images/icons/email_open_image.png | Bin 756 -> 0 bytes source/dev/images/icons/emoticon_evilgrin.png | Bin 683 -> 0 bytes source/dev/images/icons/emoticon_grin.png | Bin 684 -> 0 bytes source/dev/images/icons/emoticon_happy.png | Bin 676 -> 0 bytes source/dev/images/icons/emoticon_smile.png | Bin 723 -> 0 bytes .../dev/images/icons/emoticon_surprised.png | Bin 706 -> 0 bytes source/dev/images/icons/emoticon_tongue.png | Bin 725 -> 0 bytes source/dev/images/icons/emoticon_unhappy.png | Bin 717 -> 0 bytes source/dev/images/icons/emoticon_waii.png | Bin 697 -> 0 bytes source/dev/images/icons/emoticon_wink.png | Bin 676 -> 0 bytes source/dev/images/icons/error.png | Bin 619 -> 0 bytes source/dev/images/icons/error_add.png | Bin 651 -> 0 bytes source/dev/images/icons/error_delete.png | Bin 670 -> 0 bytes source/dev/images/icons/error_go.png | Bin 686 -> 0 bytes source/dev/images/icons/exclamation.png | Bin 671 -> 0 bytes source/dev/images/icons/eye.png | Bin 710 -> 0 bytes source/dev/images/icons/feed.png | Bin 659 -> 0 bytes source/dev/images/icons/feed_add.png | Bin 694 -> 0 bytes source/dev/images/icons/feed_delete.png | Bin 705 -> 0 bytes source/dev/images/icons/feed_disk.png | Bin 738 -> 0 bytes source/dev/images/icons/feed_edit.png | Bin 758 -> 0 bytes source/dev/images/icons/feed_error.png | Bin 751 -> 0 bytes source/dev/images/icons/feed_go.png | Bin 744 -> 0 bytes source/dev/images/icons/feed_key.png | Bin 746 -> 0 bytes source/dev/images/icons/feed_link.png | Bin 749 -> 0 bytes source/dev/images/icons/feed_magnify.png | Bin 720 -> 0 bytes source/dev/images/icons/female.png | Bin 533 -> 0 bytes source/dev/images/icons/film.png | Bin 637 -> 0 bytes source/dev/images/icons/film_add.png | Bin 683 -> 0 bytes source/dev/images/icons/film_delete.png | Bin 703 -> 0 bytes source/dev/images/icons/film_edit.png | Bin 808 -> 0 bytes source/dev/images/icons/film_error.png | Bin 789 -> 0 bytes source/dev/images/icons/film_go.png | Bin 800 -> 0 bytes source/dev/images/icons/film_key.png | Bin 785 -> 0 bytes source/dev/images/icons/film_link.png | Bin 805 -> 0 bytes source/dev/images/icons/film_save.png | Bin 806 -> 0 bytes source/dev/images/icons/find.png | Bin 610 -> 0 bytes source/dev/images/icons/flag_blue.png | Bin 614 -> 0 bytes source/dev/images/icons/flag_green.png | Bin 616 -> 0 bytes source/dev/images/icons/flag_orange.png | Bin 610 -> 0 bytes source/dev/images/icons/flag_pink.png | Bin 588 -> 0 bytes source/dev/images/icons/flag_purple.png | Bin 598 -> 0 bytes source/dev/images/icons/flag_red.png | Bin 606 -> 0 bytes source/dev/images/icons/flag_yellow.png | Bin 615 -> 0 bytes source/dev/images/icons/folder.png | Bin 537 -> 0 bytes source/dev/images/icons/folder_add.png | Bin 626 -> 0 bytes source/dev/images/icons/folder_bell.png | Bin 762 -> 0 bytes source/dev/images/icons/folder_brick.png | Bin 710 -> 0 bytes source/dev/images/icons/folder_bug.png | Bin 779 -> 0 bytes source/dev/images/icons/folder_camera.png | Bin 729 -> 0 bytes source/dev/images/icons/folder_database.png | Bin 687 -> 0 bytes source/dev/images/icons/folder_delete.png | Bin 652 -> 0 bytes source/dev/images/icons/folder_edit.png | Bin 689 -> 0 bytes source/dev/images/icons/folder_error.png | Bin 715 -> 0 bytes source/dev/images/icons/folder_explore.png | Bin 662 -> 0 bytes source/dev/images/icons/folder_feed.png | Bin 691 -> 0 bytes source/dev/images/icons/folder_find.png | Bin 773 -> 0 bytes source/dev/images/icons/folder_go.png | Bin 694 -> 0 bytes source/dev/images/icons/folder_heart.png | Bin 735 -> 0 bytes source/dev/images/icons/folder_image.png | Bin 677 -> 0 bytes source/dev/images/icons/folder_key.png | Bin 720 -> 0 bytes source/dev/images/icons/folder_lightbulb.png | Bin 726 -> 0 bytes source/dev/images/icons/folder_link.png | Bin 728 -> 0 bytes source/dev/images/icons/folder_magnify.png | Bin 686 -> 0 bytes source/dev/images/icons/folder_page.png | Bin 688 -> 0 bytes source/dev/images/icons/folder_page_white.png | Bin 637 -> 0 bytes source/dev/images/icons/folder_palette.png | Bin 811 -> 0 bytes source/dev/images/icons/folder_picture.png | Bin 713 -> 0 bytes source/dev/images/icons/folder_star.png | Bin 721 -> 0 bytes source/dev/images/icons/folder_table.png | Bin 675 -> 0 bytes source/dev/images/icons/folder_user.png | Bin 730 -> 0 bytes source/dev/images/icons/folder_wrench.png | Bin 699 -> 0 bytes source/dev/images/icons/font.png | Bin 552 -> 0 bytes source/dev/images/icons/font_add.png | Bin 616 -> 0 bytes source/dev/images/icons/font_delete.png | Bin 637 -> 0 bytes source/dev/images/icons/font_go.png | Bin 663 -> 0 bytes source/dev/images/icons/group.png | Bin 699 -> 0 bytes source/dev/images/icons/group_add.png | Bin 751 -> 0 bytes source/dev/images/icons/group_delete.png | Bin 773 -> 0 bytes source/dev/images/icons/group_edit.png | Bin 730 -> 0 bytes source/dev/images/icons/group_error.png | Bin 786 -> 0 bytes source/dev/images/icons/group_gear.png | Bin 770 -> 0 bytes source/dev/images/icons/group_go.png | Bin 785 -> 0 bytes source/dev/images/icons/group_key.png | Bin 759 -> 0 bytes source/dev/images/icons/group_link.png | Bin 804 -> 0 bytes source/dev/images/icons/heart.png | Bin 718 -> 0 bytes source/dev/images/icons/heart_add.png | Bin 759 -> 0 bytes source/dev/images/icons/heart_delete.png | Bin 787 -> 0 bytes source/dev/images/icons/help.png | Bin 731 -> 0 bytes source/dev/images/icons/hourglass.png | Bin 688 -> 0 bytes source/dev/images/icons/hourglass_add.png | Bin 756 -> 0 bytes source/dev/images/icons/hourglass_delete.png | Bin 770 -> 0 bytes source/dev/images/icons/hourglass_go.png | Bin 812 -> 0 bytes source/dev/images/icons/hourglass_link.png | Bin 815 -> 0 bytes source/dev/images/icons/house.png | Bin 750 -> 0 bytes source/dev/images/icons/house_go.png | Bin 804 -> 0 bytes source/dev/images/icons/house_link.png | Bin 813 -> 0 bytes source/dev/images/icons/html.png | Bin 578 -> 0 bytes source/dev/images/icons/html_add.png | Bin 684 -> 0 bytes source/dev/images/icons/html_delete.png | Bin 688 -> 0 bytes source/dev/images/icons/html_go.png | Bin 692 -> 0 bytes source/dev/images/icons/html_valid.png | Bin 704 -> 0 bytes source/dev/images/icons/image.png | Bin 512 -> 0 bytes source/dev/images/icons/image_add.png | Bin 617 -> 0 bytes source/dev/images/icons/image_delete.png | Bin 645 -> 0 bytes source/dev/images/icons/image_edit.png | Bin 738 -> 0 bytes source/dev/images/icons/image_link.png | Bin 728 -> 0 bytes source/dev/images/icons/images.png | Bin 602 -> 0 bytes source/dev/images/icons/information.png | Bin 724 -> 0 bytes source/dev/images/icons/ipod.png | Bin 463 -> 0 bytes source/dev/images/icons/ipod_cast.png | Bin 658 -> 0 bytes source/dev/images/icons/ipod_cast_add.png | Bin 727 -> 0 bytes source/dev/images/icons/ipod_cast_delete.png | Bin 747 -> 0 bytes source/dev/images/icons/ipod_sound.png | Bin 678 -> 0 bytes source/dev/images/icons/joystick.png | Bin 559 -> 0 bytes source/dev/images/icons/joystick_add.png | Bin 612 -> 0 bytes source/dev/images/icons/joystick_delete.png | Bin 646 -> 0 bytes source/dev/images/icons/joystick_error.png | Bin 668 -> 0 bytes source/dev/images/icons/key.png | Bin 553 -> 0 bytes source/dev/images/icons/key_add.png | Bin 645 -> 0 bytes source/dev/images/icons/key_delete.png | Bin 666 -> 0 bytes source/dev/images/icons/key_go.png | Bin 687 -> 0 bytes source/dev/images/icons/keyboard.png | Bin 566 -> 0 bytes source/dev/images/icons/keyboard_add.png | Bin 637 -> 0 bytes source/dev/images/icons/keyboard_delete.png | Bin 660 -> 0 bytes source/dev/images/icons/keyboard_magnify.png | Bin 638 -> 0 bytes source/dev/images/icons/layers.png | Bin 597 -> 0 bytes source/dev/images/icons/layout.png | Bin 432 -> 0 bytes source/dev/images/icons/layout_add.png | Bin 520 -> 0 bytes source/dev/images/icons/layout_content.png | Bin 519 -> 0 bytes source/dev/images/icons/layout_delete.png | Bin 550 -> 0 bytes source/dev/images/icons/layout_edit.png | Bin 660 -> 0 bytes source/dev/images/icons/layout_error.png | Bin 642 -> 0 bytes source/dev/images/icons/layout_header.png | Bin 486 -> 0 bytes source/dev/images/icons/layout_link.png | Bin 600 -> 0 bytes source/dev/images/icons/layout_sidebar.png | Bin 433 -> 0 bytes source/dev/images/icons/lightbulb.png | Bin 725 -> 0 bytes source/dev/images/icons/lightbulb_add.png | Bin 783 -> 0 bytes source/dev/images/icons/lightbulb_delete.png | Bin 801 -> 0 bytes source/dev/images/icons/lightbulb_off.png | Bin 648 -> 0 bytes source/dev/images/icons/lightning.png | Bin 595 -> 0 bytes source/dev/images/icons/lightning_add.png | Bin 690 -> 0 bytes source/dev/images/icons/lightning_delete.png | Bin 706 -> 0 bytes source/dev/images/icons/lightning_go.png | Bin 727 -> 0 bytes source/dev/images/icons/link.png | Bin 343 -> 0 bytes source/dev/images/icons/link_add.png | Bin 523 -> 0 bytes source/dev/images/icons/link_break.png | Bin 605 -> 0 bytes source/dev/images/icons/link_delete.png | Bin 545 -> 0 bytes source/dev/images/icons/link_edit.png | Bin 648 -> 0 bytes source/dev/images/icons/link_error.png | Bin 642 -> 0 bytes source/dev/images/icons/link_go.png | Bin 603 -> 0 bytes source/dev/images/icons/lock.png | Bin 749 -> 0 bytes source/dev/images/icons/lock_add.png | Bin 793 -> 0 bytes source/dev/images/icons/lock_break.png | Bin 771 -> 0 bytes source/dev/images/icons/lock_delete.png | Bin 815 -> 0 bytes source/dev/images/icons/lock_edit.png | Bin 861 -> 0 bytes source/dev/images/icons/lock_go.png | Bin 829 -> 0 bytes source/dev/images/icons/lock_open.png | Bin 727 -> 0 bytes source/dev/images/icons/lorry.png | Bin 582 -> 0 bytes source/dev/images/icons/lorry_add.png | Bin 675 -> 0 bytes source/dev/images/icons/lorry_delete.png | Bin 683 -> 0 bytes source/dev/images/icons/lorry_error.png | Bin 739 -> 0 bytes source/dev/images/icons/lorry_flatbed.png | Bin 399 -> 0 bytes source/dev/images/icons/lorry_go.png | Bin 699 -> 0 bytes source/dev/images/icons/lorry_link.png | Bin 751 -> 0 bytes source/dev/images/icons/magifier_zoom_out.png | Bin 601 -> 0 bytes source/dev/images/icons/magnifier.png | Bin 567 -> 0 bytes source/dev/images/icons/magnifier_zoom_in.png | Bin 626 -> 0 bytes source/dev/images/icons/male.png | Bin 614 -> 0 bytes source/dev/images/icons/map.png | Bin 804 -> 0 bytes source/dev/images/icons/map_add.png | Bin 836 -> 0 bytes source/dev/images/icons/map_delete.png | Bin 835 -> 0 bytes source/dev/images/icons/map_edit.png | Bin 865 -> 0 bytes source/dev/images/icons/map_go.png | Bin 842 -> 0 bytes source/dev/images/icons/map_magnify.png | Bin 797 -> 0 bytes source/dev/images/icons/medal_bronze_1.png | Bin 640 -> 0 bytes source/dev/images/icons/medal_bronze_2.png | Bin 654 -> 0 bytes source/dev/images/icons/medal_bronze_3.png | Bin 646 -> 0 bytes source/dev/images/icons/medal_bronze_add.png | Bin 747 -> 0 bytes .../dev/images/icons/medal_bronze_delete.png | Bin 730 -> 0 bytes source/dev/images/icons/medal_gold_1.png | Bin 629 -> 0 bytes source/dev/images/icons/medal_gold_2.png | Bin 641 -> 0 bytes source/dev/images/icons/medal_gold_3.png | Bin 634 -> 0 bytes source/dev/images/icons/medal_gold_add.png | Bin 733 -> 0 bytes source/dev/images/icons/medal_gold_delete.png | Bin 724 -> 0 bytes source/dev/images/icons/medal_silver_1.png | Bin 589 -> 0 bytes source/dev/images/icons/medal_silver_2.png | Bin 600 -> 0 bytes source/dev/images/icons/medal_silver_3.png | Bin 597 -> 0 bytes source/dev/images/icons/medal_silver_add.png | Bin 714 -> 0 bytes .../dev/images/icons/medal_silver_delete.png | Bin 714 -> 0 bytes source/dev/images/icons/money.png | Bin 677 -> 0 bytes source/dev/images/icons/money_add.png | Bin 730 -> 0 bytes source/dev/images/icons/money_delete.png | Bin 751 -> 0 bytes source/dev/images/icons/money_dollar.png | Bin 575 -> 0 bytes source/dev/images/icons/money_euro.png | Bin 547 -> 0 bytes source/dev/images/icons/money_pound.png | Bin 511 -> 0 bytes source/dev/images/icons/money_yen.png | Bin 506 -> 0 bytes source/dev/images/icons/monitor.png | Bin 612 -> 0 bytes source/dev/images/icons/monitor_add.png | Bin 692 -> 0 bytes source/dev/images/icons/monitor_delete.png | Bin 691 -> 0 bytes source/dev/images/icons/monitor_edit.png | Bin 755 -> 0 bytes source/dev/images/icons/monitor_error.png | Bin 714 -> 0 bytes source/dev/images/icons/monitor_go.png | Bin 696 -> 0 bytes source/dev/images/icons/monitor_lightning.png | Bin 768 -> 0 bytes source/dev/images/icons/monitor_link.png | Bin 736 -> 0 bytes source/dev/images/icons/mouse.png | Bin 579 -> 0 bytes source/dev/images/icons/mouse_add.png | Bin 672 -> 0 bytes source/dev/images/icons/mouse_delete.png | Bin 686 -> 0 bytes source/dev/images/icons/mouse_error.png | Bin 735 -> 0 bytes source/dev/images/icons/music.png | Bin 381 -> 0 bytes source/dev/images/icons/new.png | Bin 318 -> 0 bytes source/dev/images/icons/newspaper.png | Bin 600 -> 0 bytes source/dev/images/icons/newspaper_add.png | Bin 693 -> 0 bytes source/dev/images/icons/newspaper_delete.png | Bin 720 -> 0 bytes source/dev/images/icons/newspaper_go.png | Bin 742 -> 0 bytes source/dev/images/icons/newspaper_link.png | Bin 731 -> 0 bytes source/dev/images/icons/note.png | Bin 500 -> 0 bytes source/dev/images/icons/note_add.png | Bin 604 -> 0 bytes source/dev/images/icons/note_delete.png | Bin 630 -> 0 bytes source/dev/images/icons/note_edit.png | Bin 714 -> 0 bytes source/dev/images/icons/note_error.png | Bin 680 -> 0 bytes source/dev/images/icons/note_go.png | Bin 661 -> 0 bytes source/dev/images/icons/overlays.png | Bin 660 -> 0 bytes source/dev/images/icons/package.png | Bin 845 -> 0 bytes source/dev/images/icons/package_add.png | Bin 858 -> 0 bytes source/dev/images/icons/package_delete.png | Bin 869 -> 0 bytes source/dev/images/icons/package_go.png | Bin 887 -> 0 bytes source/dev/images/icons/package_green.png | Bin 859 -> 0 bytes source/dev/images/icons/package_link.png | Bin 892 -> 0 bytes source/dev/images/icons/page.png | Bin 635 -> 0 bytes source/dev/images/icons/page_add.png | Bin 739 -> 0 bytes source/dev/images/icons/page_attach.png | Bin 794 -> 0 bytes source/dev/images/icons/page_code.png | Bin 818 -> 0 bytes source/dev/images/icons/page_copy.png | Bin 652 -> 0 bytes source/dev/images/icons/page_delete.png | Bin 740 -> 0 bytes source/dev/images/icons/page_edit.png | Bin 807 -> 0 bytes source/dev/images/icons/page_error.png | Bin 793 -> 0 bytes source/dev/images/icons/page_excel.png | Bin 795 -> 0 bytes source/dev/images/icons/page_find.png | Bin 879 -> 0 bytes source/dev/images/icons/page_gear.png | Bin 833 -> 0 bytes source/dev/images/icons/page_go.png | Bin 779 -> 0 bytes source/dev/images/icons/page_green.png | Bin 621 -> 0 bytes source/dev/images/icons/page_key.png | Bin 801 -> 0 bytes source/dev/images/icons/page_lightning.png | Bin 839 -> 0 bytes source/dev/images/icons/page_link.png | Bin 824 -> 0 bytes source/dev/images/icons/page_paintbrush.png | Bin 813 -> 0 bytes source/dev/images/icons/page_paste.png | Bin 703 -> 0 bytes source/dev/images/icons/page_red.png | Bin 641 -> 0 bytes source/dev/images/icons/page_refresh.png | Bin 858 -> 0 bytes source/dev/images/icons/page_save.png | Bin 774 -> 0 bytes source/dev/images/icons/page_white.png | Bin 294 -> 0 bytes .../dev/images/icons/page_white_acrobat.png | Bin 530 -> 0 bytes .../images/icons/page_white_actionscript.png | Bin 600 -> 0 bytes source/dev/images/icons/page_white_add.png | Bin 456 -> 0 bytes source/dev/images/icons/page_white_c.png | Bin 527 -> 0 bytes source/dev/images/icons/page_white_camera.png | Bin 635 -> 0 bytes source/dev/images/icons/page_white_cd.png | Bin 607 -> 0 bytes source/dev/images/icons/page_white_code.png | Bin 542 -> 0 bytes .../dev/images/icons/page_white_code_red.png | Bin 526 -> 0 bytes .../images/icons/page_white_coldfusion.png | Bin 527 -> 0 bytes .../images/icons/page_white_compressed.png | Bin 672 -> 0 bytes source/dev/images/icons/page_white_copy.png | Bin 309 -> 0 bytes .../dev/images/icons/page_white_cplusplus.png | Bin 560 -> 0 bytes source/dev/images/icons/page_white_csharp.png | Bin 641 -> 0 bytes source/dev/images/icons/page_white_cup.png | Bin 580 -> 0 bytes .../dev/images/icons/page_white_database.png | Bin 515 -> 0 bytes source/dev/images/icons/page_white_delete.png | Bin 480 -> 0 bytes source/dev/images/icons/page_white_dvd.png | Bin 576 -> 0 bytes source/dev/images/icons/page_white_edit.png | Bin 556 -> 0 bytes source/dev/images/icons/page_white_error.png | Bin 564 -> 0 bytes source/dev/images/icons/page_white_excel.png | Bin 604 -> 0 bytes source/dev/images/icons/page_white_find.png | Bin 620 -> 0 bytes source/dev/images/icons/page_white_flash.png | Bin 517 -> 0 bytes .../dev/images/icons/page_white_freehand.png | Bin 576 -> 0 bytes source/dev/images/icons/page_white_gear.png | Bin 400 -> 0 bytes source/dev/images/icons/page_white_get.png | Bin 461 -> 0 bytes source/dev/images/icons/page_white_go.png | Bin 555 -> 0 bytes source/dev/images/icons/page_white_h.png | Bin 543 -> 0 bytes .../images/icons/page_white_horizontal.png | Bin 296 -> 0 bytes source/dev/images/icons/page_white_key.png | Bin 557 -> 0 bytes .../dev/images/icons/page_white_lightning.png | Bin 608 -> 0 bytes source/dev/images/icons/page_white_link.png | Bin 560 -> 0 bytes .../dev/images/icons/page_white_magnify.png | Bin 495 -> 0 bytes source/dev/images/icons/page_white_medal.png | Bin 656 -> 0 bytes source/dev/images/icons/page_white_office.png | Bin 722 -> 0 bytes source/dev/images/icons/page_white_paint.png | Bin 628 -> 0 bytes .../images/icons/page_white_paintbrush.png | Bin 555 -> 0 bytes source/dev/images/icons/page_white_paste.png | Bin 607 -> 0 bytes source/dev/images/icons/page_white_php.png | Bin 479 -> 0 bytes .../dev/images/icons/page_white_picture.png | Bin 610 -> 0 bytes .../images/icons/page_white_powerpoint.png | Bin 543 -> 0 bytes source/dev/images/icons/page_white_put.png | Bin 467 -> 0 bytes source/dev/images/icons/page_white_ruby.png | Bin 565 -> 0 bytes source/dev/images/icons/page_white_stack.png | Bin 317 -> 0 bytes source/dev/images/icons/page_white_star.png | Bin 504 -> 0 bytes source/dev/images/icons/page_white_swoosh.png | Bin 629 -> 0 bytes source/dev/images/icons/page_white_text.png | Bin 342 -> 0 bytes .../images/icons/page_white_text_width.png | Bin 315 -> 0 bytes source/dev/images/icons/page_white_tux.png | Bin 607 -> 0 bytes source/dev/images/icons/page_white_vector.png | Bin 581 -> 0 bytes .../images/icons/page_white_visualstudio.png | Bin 641 -> 0 bytes source/dev/images/icons/page_white_width.png | Bin 309 -> 0 bytes source/dev/images/icons/page_white_word.png | Bin 630 -> 0 bytes source/dev/images/icons/page_white_world.png | Bin 676 -> 0 bytes source/dev/images/icons/page_white_wrench.png | Bin 551 -> 0 bytes source/dev/images/icons/page_white_zip.png | Bin 379 -> 0 bytes source/dev/images/icons/page_word.png | Bin 777 -> 0 bytes source/dev/images/icons/page_world.png | Bin 903 -> 0 bytes source/dev/images/icons/paintbrush.png | Bin 497 -> 0 bytes source/dev/images/icons/paintcan.png | Bin 655 -> 0 bytes source/dev/images/icons/palette.png | Bin 801 -> 0 bytes source/dev/images/icons/paste_plain.png | Bin 605 -> 0 bytes source/dev/images/icons/paste_word.png | Bin 701 -> 0 bytes source/dev/images/icons/pencil.png | Bin 391 -> 0 bytes source/dev/images/icons/pencil_add.png | Bin 529 -> 0 bytes source/dev/images/icons/pencil_delete.png | Bin 546 -> 0 bytes source/dev/images/icons/pencil_go.png | Bin 607 -> 0 bytes source/dev/images/icons/phone.png | Bin 488 -> 0 bytes source/dev/images/icons/phone_add.png | Bin 595 -> 0 bytes source/dev/images/icons/phone_delete.png | Bin 615 -> 0 bytes source/dev/images/icons/phone_sound.png | Bin 677 -> 0 bytes source/dev/images/icons/photo.png | Bin 589 -> 0 bytes source/dev/images/icons/photo_add.png | Bin 694 -> 0 bytes source/dev/images/icons/photo_delete.png | Bin 703 -> 0 bytes source/dev/images/icons/photo_link.png | Bin 776 -> 0 bytes source/dev/images/icons/photos.png | Bin 647 -> 0 bytes source/dev/images/icons/picture.png | Bin 606 -> 0 bytes source/dev/images/icons/picture_add.png | Bin 706 -> 0 bytes source/dev/images/icons/picture_delete.png | Bin 736 -> 0 bytes source/dev/images/icons/picture_edit.png | Bin 813 -> 0 bytes source/dev/images/icons/picture_empty.png | Bin 463 -> 0 bytes source/dev/images/icons/picture_error.png | Bin 755 -> 0 bytes source/dev/images/icons/picture_go.png | Bin 758 -> 0 bytes source/dev/images/icons/picture_key.png | Bin 784 -> 0 bytes source/dev/images/icons/picture_link.png | Bin 801 -> 0 bytes source/dev/images/icons/picture_save.png | Bin 755 -> 0 bytes source/dev/images/icons/pictures.png | Bin 650 -> 0 bytes source/dev/images/icons/pilcrow.png | Bin 316 -> 0 bytes source/dev/images/icons/pill.png | Bin 662 -> 0 bytes source/dev/images/icons/pill_add.png | Bin 742 -> 0 bytes source/dev/images/icons/pill_delete.png | Bin 754 -> 0 bytes source/dev/images/icons/pill_go.png | Bin 771 -> 0 bytes source/dev/images/icons/plugin.png | Bin 591 -> 0 bytes source/dev/images/icons/plugin_add.png | Bin 650 -> 0 bytes source/dev/images/icons/plugin_delete.png | Bin 685 -> 0 bytes source/dev/images/icons/plugin_disabled.png | Bin 347 -> 0 bytes source/dev/images/icons/plugin_edit.png | Bin 705 -> 0 bytes source/dev/images/icons/plugin_error.png | Bin 702 -> 0 bytes source/dev/images/icons/plugin_go.png | Bin 694 -> 0 bytes source/dev/images/icons/plugin_link.png | Bin 704 -> 0 bytes source/dev/images/icons/printer.png | Bin 674 -> 0 bytes source/dev/images/icons/printer_add.png | Bin 728 -> 0 bytes source/dev/images/icons/printer_delete.png | Bin 738 -> 0 bytes source/dev/images/icons/printer_empty.png | Bin 350 -> 0 bytes source/dev/images/icons/printer_error.png | Bin 811 -> 0 bytes source/dev/images/icons/rainbow.png | Bin 602 -> 0 bytes source/dev/images/icons/report.png | Bin 597 -> 0 bytes source/dev/images/icons/report_add.png | Bin 655 -> 0 bytes source/dev/images/icons/report_delete.png | Bin 671 -> 0 bytes source/dev/images/icons/report_disk.png | Bin 737 -> 0 bytes source/dev/images/icons/report_edit.png | Bin 708 -> 0 bytes source/dev/images/icons/report_go.png | Bin 719 -> 0 bytes source/dev/images/icons/report_key.png | Bin 704 -> 0 bytes source/dev/images/icons/report_link.png | Bin 697 -> 0 bytes source/dev/images/icons/report_magnify.png | Bin 686 -> 0 bytes source/dev/images/icons/report_picture.png | Bin 710 -> 0 bytes source/dev/images/icons/report_user.png | Bin 731 -> 0 bytes source/dev/images/icons/report_word.png | Bin 691 -> 0 bytes source/dev/images/icons/resultset_first.png | Bin 485 -> 0 bytes source/dev/images/icons/resultset_last.png | Bin 485 -> 0 bytes source/dev/images/icons/resultset_next.png | Bin 345 -> 0 bytes .../dev/images/icons/resultset_previous.png | Bin 350 -> 0 bytes source/dev/images/icons/rosette.png | Bin 612 -> 0 bytes source/dev/images/icons/rss.png | Bin 530 -> 0 bytes source/dev/images/icons/rss_add.png | Bin 627 -> 0 bytes source/dev/images/icons/rss_delete.png | Bin 633 -> 0 bytes source/dev/images/icons/rss_go.png | Bin 635 -> 0 bytes source/dev/images/icons/rss_valid.png | Bin 660 -> 0 bytes source/dev/images/icons/ruby.png | Bin 535 -> 0 bytes source/dev/images/icons/ruby_add.png | Bin 635 -> 0 bytes source/dev/images/icons/ruby_delete.png | Bin 650 -> 0 bytes source/dev/images/icons/ruby_gear.png | Bin 660 -> 0 bytes source/dev/images/icons/ruby_get.png | Bin 637 -> 0 bytes source/dev/images/icons/ruby_go.png | Bin 674 -> 0 bytes source/dev/images/icons/ruby_key.png | Bin 683 -> 0 bytes source/dev/images/icons/ruby_link.png | Bin 711 -> 0 bytes source/dev/images/icons/ruby_put.png | Bin 639 -> 0 bytes source/dev/images/icons/script.png | Bin 748 -> 0 bytes source/dev/images/icons/script_add.png | Bin 791 -> 0 bytes source/dev/images/icons/script_code.png | Bin 840 -> 0 bytes source/dev/images/icons/script_code_red.png | Bin 849 -> 0 bytes source/dev/images/icons/script_delete.png | Bin 802 -> 0 bytes source/dev/images/icons/script_edit.png | Bin 841 -> 0 bytes source/dev/images/icons/script_error.png | Bin 837 -> 0 bytes source/dev/images/icons/script_gear.png | Bin 826 -> 0 bytes source/dev/images/icons/script_go.png | Bin 839 -> 0 bytes source/dev/images/icons/script_key.png | Bin 836 -> 0 bytes source/dev/images/icons/script_lightning.png | Bin 864 -> 0 bytes source/dev/images/icons/script_link.png | Bin 844 -> 0 bytes source/dev/images/icons/script_palette.png | Bin 874 -> 0 bytes source/dev/images/icons/script_save.png | Bin 804 -> 0 bytes source/dev/images/icons/server.png | Bin 530 -> 0 bytes source/dev/images/icons/server_add.png | Bin 673 -> 0 bytes source/dev/images/icons/server_chart.png | Bin 673 -> 0 bytes source/dev/images/icons/server_compressed.png | Bin 721 -> 0 bytes source/dev/images/icons/server_connect.png | Bin 755 -> 0 bytes source/dev/images/icons/server_database.png | Bin 666 -> 0 bytes source/dev/images/icons/server_delete.png | Bin 668 -> 0 bytes source/dev/images/icons/server_edit.png | Bin 727 -> 0 bytes source/dev/images/icons/server_error.png | Bin 678 -> 0 bytes source/dev/images/icons/server_go.png | Bin 706 -> 0 bytes source/dev/images/icons/server_key.png | Bin 734 -> 0 bytes source/dev/images/icons/server_lightning.png | Bin 729 -> 0 bytes source/dev/images/icons/server_link.png | Bin 706 -> 0 bytes .../dev/images/icons/server_uncompressed.png | Bin 669 -> 0 bytes source/dev/images/icons/shading.png | Bin 183 -> 0 bytes .../dev/images/icons/shape_align_bottom.png | Bin 398 -> 0 bytes .../dev/images/icons/shape_align_center.png | Bin 384 -> 0 bytes source/dev/images/icons/shape_align_left.png | Bin 402 -> 0 bytes .../dev/images/icons/shape_align_middle.png | Bin 414 -> 0 bytes source/dev/images/icons/shape_align_right.png | Bin 401 -> 0 bytes source/dev/images/icons/shape_align_top.png | Bin 406 -> 0 bytes .../images/icons/shape_flip_horizontal.png | Bin 397 -> 0 bytes .../dev/images/icons/shape_flip_vertical.png | Bin 362 -> 0 bytes source/dev/images/icons/shape_group.png | Bin 553 -> 0 bytes source/dev/images/icons/shape_handles.png | Bin 538 -> 0 bytes source/dev/images/icons/shape_move_back.png | Bin 395 -> 0 bytes .../dev/images/icons/shape_move_backwards.png | Bin 358 -> 0 bytes .../dev/images/icons/shape_move_forwards.png | Bin 381 -> 0 bytes source/dev/images/icons/shape_move_front.png | Bin 435 -> 0 bytes .../icons/shape_rotate_anticlockwise.png | Bin 618 -> 0 bytes .../images/icons/shape_rotate_clockwise.png | Bin 618 -> 0 bytes source/dev/images/icons/shape_square.png | Bin 353 -> 0 bytes source/dev/images/icons/shape_square_add.png | Bin 539 -> 0 bytes .../dev/images/icons/shape_square_delete.png | Bin 537 -> 0 bytes source/dev/images/icons/shape_square_edit.png | Bin 639 -> 0 bytes .../dev/images/icons/shape_square_error.png | Bin 570 -> 0 bytes source/dev/images/icons/shape_square_go.png | Bin 566 -> 0 bytes source/dev/images/icons/shape_square_key.png | Bin 607 -> 0 bytes source/dev/images/icons/shape_square_link.png | Bin 633 -> 0 bytes source/dev/images/icons/shape_ungroup.png | Bin 624 -> 0 bytes source/dev/images/icons/shield.png | Bin 687 -> 0 bytes source/dev/images/icons/shield_add.png | Bin 733 -> 0 bytes source/dev/images/icons/shield_delete.png | Bin 755 -> 0 bytes source/dev/images/icons/shield_go.png | Bin 768 -> 0 bytes source/dev/images/icons/sitemap.png | Bin 278 -> 0 bytes source/dev/images/icons/sitemap_color.png | Bin 345 -> 0 bytes source/dev/images/icons/sound.png | Bin 551 -> 0 bytes source/dev/images/icons/sound_add.png | Bin 624 -> 0 bytes source/dev/images/icons/sound_delete.png | Bin 654 -> 0 bytes source/dev/images/icons/sound_low.png | Bin 467 -> 0 bytes source/dev/images/icons/sound_mute.png | Bin 418 -> 0 bytes source/dev/images/icons/sound_none.png | Bin 361 -> 0 bytes source/dev/images/icons/spellcheck.png | Bin 579 -> 0 bytes source/dev/images/icons/sport_8ball.png | Bin 490 -> 0 bytes source/dev/images/icons/sport_basketball.png | Bin 955 -> 0 bytes source/dev/images/icons/sport_football.png | Bin 824 -> 0 bytes source/dev/images/icons/sport_golf.png | Bin 500 -> 0 bytes source/dev/images/icons/sport_raquet.png | Bin 660 -> 0 bytes source/dev/images/icons/sport_shuttlecock.png | Bin 626 -> 0 bytes source/dev/images/icons/sport_soccer.png | Bin 512 -> 0 bytes source/dev/images/icons/sport_tennis.png | Bin 875 -> 0 bytes source/dev/images/icons/star.png | Bin 657 -> 0 bytes source/dev/images/icons/status_away.png | Bin 736 -> 0 bytes source/dev/images/icons/status_busy.png | Bin 697 -> 0 bytes source/dev/images/icons/status_offline.png | Bin 420 -> 0 bytes source/dev/images/icons/status_online.png | Bin 684 -> 0 bytes source/dev/images/icons/stop.png | Bin 663 -> 0 bytes source/dev/images/icons/style.png | Bin 771 -> 0 bytes source/dev/images/icons/style_add.png | Bin 791 -> 0 bytes source/dev/images/icons/style_delete.png | Bin 808 -> 0 bytes source/dev/images/icons/style_edit.png | Bin 882 -> 0 bytes source/dev/images/icons/style_go.png | Bin 813 -> 0 bytes source/dev/images/icons/sum.png | Bin 289 -> 0 bytes source/dev/images/icons/tab.png | Bin 303 -> 0 bytes source/dev/images/icons/tab_add.png | Bin 444 -> 0 bytes source/dev/images/icons/tab_delete.png | Bin 457 -> 0 bytes source/dev/images/icons/tab_edit.png | Bin 520 -> 0 bytes source/dev/images/icons/tab_go.png | Bin 506 -> 0 bytes source/dev/images/icons/table.png | Bin 528 -> 0 bytes source/dev/images/icons/table_add.png | Bin 608 -> 0 bytes source/dev/images/icons/table_delete.png | Bin 632 -> 0 bytes source/dev/images/icons/table_edit.png | Bin 695 -> 0 bytes source/dev/images/icons/table_error.png | Bin 687 -> 0 bytes source/dev/images/icons/table_gear.png | Bin 658 -> 0 bytes source/dev/images/icons/table_go.png | Bin 683 -> 0 bytes source/dev/images/icons/table_key.png | Bin 693 -> 0 bytes source/dev/images/icons/table_lightning.png | Bin 686 -> 0 bytes source/dev/images/icons/table_link.png | Bin 672 -> 0 bytes source/dev/images/icons/table_multiple.png | Bin 594 -> 0 bytes source/dev/images/icons/table_refresh.png | Bin 749 -> 0 bytes .../dev/images/icons/table_relationship.png | Bin 603 -> 0 bytes source/dev/images/icons/table_row_delete.png | Bin 589 -> 0 bytes source/dev/images/icons/table_row_insert.png | Bin 609 -> 0 bytes source/dev/images/icons/table_save.png | Bin 723 -> 0 bytes source/dev/images/icons/table_sort.png | Bin 678 -> 0 bytes source/dev/images/icons/tag.png | Bin 364 -> 0 bytes source/dev/images/icons/tag_blue.png | Bin 525 -> 0 bytes source/dev/images/icons/tag_blue_add.png | Bin 616 -> 0 bytes source/dev/images/icons/tag_blue_delete.png | Bin 647 -> 0 bytes source/dev/images/icons/tag_blue_edit.png | Bin 688 -> 0 bytes source/dev/images/icons/tag_green.png | Bin 557 -> 0 bytes source/dev/images/icons/tag_orange.png | Bin 526 -> 0 bytes source/dev/images/icons/tag_pink.png | Bin 520 -> 0 bytes source/dev/images/icons/tag_purple.png | Bin 541 -> 0 bytes source/dev/images/icons/tag_red.png | Bin 532 -> 0 bytes source/dev/images/icons/tag_yellow.png | Bin 528 -> 0 bytes source/dev/images/icons/telephone.png | Bin 791 -> 0 bytes source/dev/images/icons/telephone_add.png | Bin 832 -> 0 bytes source/dev/images/icons/telephone_delete.png | Bin 856 -> 0 bytes source/dev/images/icons/telephone_edit.png | Bin 885 -> 0 bytes source/dev/images/icons/telephone_error.png | Bin 884 -> 0 bytes source/dev/images/icons/telephone_go.png | Bin 865 -> 0 bytes source/dev/images/icons/telephone_key.png | Bin 881 -> 0 bytes source/dev/images/icons/telephone_link.png | Bin 875 -> 0 bytes source/dev/images/icons/television.png | Bin 696 -> 0 bytes source/dev/images/icons/television_add.png | Bin 778 -> 0 bytes source/dev/images/icons/television_delete.png | Bin 802 -> 0 bytes source/dev/images/icons/text_align_center.png | Bin 234 -> 0 bytes .../dev/images/icons/text_align_justify.png | Bin 209 -> 0 bytes source/dev/images/icons/text_align_left.png | Bin 209 -> 0 bytes source/dev/images/icons/text_align_right.png | Bin 209 -> 0 bytes source/dev/images/icons/text_allcaps.png | Bin 284 -> 0 bytes source/dev/images/icons/text_bold.png | Bin 297 -> 0 bytes source/dev/images/icons/text_columns.png | Bin 246 -> 0 bytes source/dev/images/icons/text_dropcaps.png | Bin 314 -> 0 bytes source/dev/images/icons/text_heading_1.png | Bin 276 -> 0 bytes source/dev/images/icons/text_heading_2.png | Bin 293 -> 0 bytes source/dev/images/icons/text_heading_3.png | Bin 292 -> 0 bytes source/dev/images/icons/text_heading_4.png | Bin 293 -> 0 bytes source/dev/images/icons/text_heading_5.png | Bin 304 -> 0 bytes source/dev/images/icons/text_heading_6.png | Bin 294 -> 0 bytes .../dev/images/icons/text_horizontalrule.png | Bin 277 -> 0 bytes source/dev/images/icons/text_indent.png | Bin 353 -> 0 bytes .../dev/images/icons/text_indent_remove.png | Bin 351 -> 0 bytes source/dev/images/icons/text_italic.png | Bin 223 -> 0 bytes source/dev/images/icons/text_kerning.png | Bin 454 -> 0 bytes source/dev/images/icons/text_letter_omega.png | Bin 486 -> 0 bytes .../dev/images/icons/text_letterspacing.png | Bin 460 -> 0 bytes source/dev/images/icons/text_linespacing.png | Bin 319 -> 0 bytes source/dev/images/icons/text_list_bullets.png | Bin 301 -> 0 bytes source/dev/images/icons/text_list_numbers.png | Bin 315 -> 0 bytes source/dev/images/icons/text_lowercase.png | Bin 654 -> 0 bytes .../dev/images/icons/text_padding_bottom.png | Bin 237 -> 0 bytes source/dev/images/icons/text_padding_left.png | Bin 271 -> 0 bytes .../dev/images/icons/text_padding_right.png | Bin 271 -> 0 bytes source/dev/images/icons/text_padding_top.png | Bin 236 -> 0 bytes source/dev/images/icons/text_replace.png | Bin 636 -> 0 bytes source/dev/images/icons/text_signature.png | Bin 472 -> 0 bytes source/dev/images/icons/text_smallcaps.png | Bin 260 -> 0 bytes .../dev/images/icons/text_strikethrough.png | Bin 269 -> 0 bytes source/dev/images/icons/text_subscript.png | Bin 375 -> 0 bytes source/dev/images/icons/text_superscript.png | Bin 376 -> 0 bytes source/dev/images/icons/text_underline.png | Bin 273 -> 0 bytes source/dev/images/icons/text_uppercase.png | Bin 693 -> 0 bytes source/dev/images/icons/textfield.png | Bin 124 -> 0 bytes source/dev/images/icons/textfield_add.png | Bin 276 -> 0 bytes source/dev/images/icons/textfield_delete.png | Bin 290 -> 0 bytes source/dev/images/icons/textfield_key.png | Bin 401 -> 0 bytes source/dev/images/icons/textfield_rename.png | Bin 217 -> 0 bytes source/dev/images/icons/thumb_down.png | Bin 539 -> 0 bytes source/dev/images/icons/thumb_up.png | Bin 559 -> 0 bytes source/dev/images/icons/tick.png | Bin 481 -> 0 bytes source/dev/images/icons/time.png | Bin 735 -> 0 bytes source/dev/images/icons/time_add.png | Bin 767 -> 0 bytes source/dev/images/icons/time_delete.png | Bin 792 -> 0 bytes source/dev/images/icons/time_go.png | Bin 833 -> 0 bytes source/dev/images/icons/timeline_marker.png | Bin 327 -> 0 bytes source/dev/images/icons/transmit.png | Bin 683 -> 0 bytes source/dev/images/icons/transmit_add.png | Bin 739 -> 0 bytes source/dev/images/icons/transmit_blue.png | Bin 758 -> 0 bytes source/dev/images/icons/transmit_delete.png | Bin 764 -> 0 bytes source/dev/images/icons/transmit_edit.png | Bin 773 -> 0 bytes source/dev/images/icons/transmit_error.png | Bin 821 -> 0 bytes source/dev/images/icons/transmit_go.png | Bin 777 -> 0 bytes source/dev/images/icons/tux.png | Bin 638 -> 0 bytes source/dev/images/icons/user.png | Bin 685 -> 0 bytes source/dev/images/icons/user_add.png | Bin 691 -> 0 bytes source/dev/images/icons/user_comment.png | Bin 683 -> 0 bytes source/dev/images/icons/user_delete.png | Bin 713 -> 0 bytes source/dev/images/icons/user_edit.png | Bin 779 -> 0 bytes source/dev/images/icons/user_female.png | Bin 606 -> 0 bytes source/dev/images/icons/user_go.png | Bin 738 -> 0 bytes source/dev/images/icons/user_gray.png | Bin 650 -> 0 bytes source/dev/images/icons/user_green.png | Bin 668 -> 0 bytes source/dev/images/icons/user_orange.png | Bin 666 -> 0 bytes source/dev/images/icons/user_red.png | Bin 660 -> 0 bytes source/dev/images/icons/user_suit.png | Bin 693 -> 0 bytes source/dev/images/icons/vcard.png | Bin 533 -> 0 bytes source/dev/images/icons/vcard_add.png | Bin 627 -> 0 bytes source/dev/images/icons/vcard_delete.png | Bin 646 -> 0 bytes source/dev/images/icons/vcard_edit.png | Bin 747 -> 0 bytes source/dev/images/icons/vector.png | Bin 448 -> 0 bytes source/dev/images/icons/vector_add.png | Bin 580 -> 0 bytes source/dev/images/icons/vector_delete.png | Bin 601 -> 0 bytes source/dev/images/icons/wand.png | Bin 518 -> 0 bytes source/dev/images/icons/weather_clouds.png | Bin 523 -> 0 bytes source/dev/images/icons/weather_cloudy.png | Bin 636 -> 0 bytes source/dev/images/icons/weather_lightning.png | Bin 586 -> 0 bytes source/dev/images/icons/weather_rain.png | Bin 586 -> 0 bytes source/dev/images/icons/weather_snow.png | Bin 341 -> 0 bytes source/dev/images/icons/weather_sun.png | Bin 564 -> 0 bytes source/dev/images/icons/webcam.png | Bin 700 -> 0 bytes source/dev/images/icons/webcam_add.png | Bin 731 -> 0 bytes source/dev/images/icons/webcam_delete.png | Bin 751 -> 0 bytes source/dev/images/icons/webcam_error.png | Bin 770 -> 0 bytes source/dev/images/icons/world.png | Bin 888 -> 0 bytes source/dev/images/icons/world_add.png | Bin 906 -> 0 bytes source/dev/images/icons/world_delete.png | Bin 925 -> 0 bytes source/dev/images/icons/world_edit.png | Bin 891 -> 0 bytes source/dev/images/icons/world_go.png | Bin 928 -> 0 bytes source/dev/images/icons/world_link.png | Bin 918 -> 0 bytes source/dev/images/icons/wrench.png | Bin 551 -> 0 bytes source/dev/images/icons/wrench_orange.png | Bin 525 -> 0 bytes source/dev/images/icons/xhtml.png | Bin 595 -> 0 bytes source/dev/images/icons/xhtml_add.png | Bin 680 -> 0 bytes source/dev/images/icons/xhtml_delete.png | Bin 696 -> 0 bytes source/dev/images/icons/xhtml_go.png | Bin 697 -> 0 bytes source/dev/images/icons/xhtml_valid.png | Bin 718 -> 0 bytes source/dev/images/icons/zoom.png | Bin 662 -> 0 bytes source/dev/images/icons/zoom_in.png | Bin 668 -> 0 bytes source/dev/images/icons/zoom_out.png | Bin 651 -> 0 bytes source/dev/images/logo/logo_baseline.psd | Bin 76248 -> 0 bytes source/dev/images/logo/logo_rendered.png | Bin 8615 -> 0 bytes source/dev/images/logo/logo_vector.ai | 222 - .../placeholders/jingle_audio_local.psd | Bin 55994 -> 0 bytes .../placeholders/jingle_audio_remote.psd | Bin 375575 -> 0 bytes .../placeholders/jingle_video_local.psd | Bin 58201 -> 0 bytes .../placeholders/jingle_video_remote.psd | Bin 375103 -> 0 bytes source/dev/images/sprites/animate.psd | Bin 74591 -> 0 bytes source/dev/images/sprites/archives.psd | Bin 41148 -> 0 bytes source/dev/images/sprites/background.svg | 137 - source/dev/images/sprites/browsers.psd | Bin 58807 -> 0 bytes source/dev/images/sprites/buttons.psd | Bin 22274 -> 0 bytes source/dev/images/sprites/call.psd | Bin 371797 -> 0 bytes source/dev/images/sprites/home.psd | Bin 174650 -> 0 bytes source/dev/images/sprites/install.psd | Bin 92355 -> 0 bytes source/dev/images/sprites/manager.psd | Bin 217038 -> 0 bytes source/dev/images/sprites/me.psd | Bin 65226 -> 0 bytes source/dev/images/sprites/mini.psd | Bin 122941 -> 0 bytes source/dev/images/sprites/mobile.psd | Bin 47660 -> 0 bytes source/dev/images/sprites/smileys.psd | Bin 101911 -> 0 bytes source/dev/images/sprites/talk.psd | Bin 305151 -> 0 bytes source/dev/images/sprites/welcome.psd | Bin 179580 -> 0 bytes source/favicon.ico | Bin 1150 -> 0 bytes source/i18n/.htaccess | 2 - source/i18n/ar/LC_MESSAGES/main.mo | Bin 12574 -> 0 bytes source/i18n/ar/LC_MESSAGES/main.po | 2266 -- source/i18n/bg/LC_MESSAGES/main.mo | Bin 62964 -> 0 bytes source/i18n/bg/LC_MESSAGES/main.po | 2521 --- source/i18n/cs/LC_MESSAGES/main.mo | Bin 57309 -> 0 bytes source/i18n/cs/LC_MESSAGES/main.po | 2402 -- source/i18n/de/LC_MESSAGES/main.mo | Bin 57297 -> 0 bytes source/i18n/de/LC_MESSAGES/main.po | 2431 -- source/i18n/en/LC_MESSAGES/main.pot | 2209 -- source/i18n/eo/LC_MESSAGES/main.mo | Bin 45524 -> 0 bytes source/i18n/eo/LC_MESSAGES/main.po | 2382 -- source/i18n/es/LC_MESSAGES/main.mo | Bin 54645 -> 0 bytes source/i18n/es/LC_MESSAGES/main.po | 2414 -- source/i18n/et/LC_MESSAGES/main.mo | Bin 54558 -> 0 bytes source/i18n/et/LC_MESSAGES/main.po | 2393 -- source/i18n/fa/LC_MESSAGES/main.mo | Bin 39086 -> 0 bytes source/i18n/fa/LC_MESSAGES/main.po | 2286 -- source/i18n/fr/LC_MESSAGES/main.mo | Bin 60699 -> 0 bytes source/i18n/fr/LC_MESSAGES/main.po | 2544 --- source/i18n/he/LC_MESSAGES/main.mo | Bin 65228 -> 0 bytes source/i18n/he/LC_MESSAGES/main.po | 2453 -- source/i18n/hu/LC_MESSAGES/main.mo | Bin 47429 -> 0 bytes source/i18n/hu/LC_MESSAGES/main.po | 2382 -- source/i18n/id/LC_MESSAGES/main.mo | Bin 47599 -> 0 bytes source/i18n/id/LC_MESSAGES/main.po | 2402 -- source/i18n/it/LC_MESSAGES/main.mo | Bin 54641 -> 0 bytes source/i18n/it/LC_MESSAGES/main.po | 2417 -- source/i18n/ja/LC_MESSAGES/main.mo | Bin 51552 -> 0 bytes source/i18n/ja/LC_MESSAGES/main.po | 2362 -- source/i18n/lb/LC_MESSAGES/main.mo | Bin 58571 -> 0 bytes source/i18n/lb/LC_MESSAGES/main.po | 2533 --- source/i18n/mn/LC_MESSAGES/main.mo | Bin 20877 -> 0 bytes source/i18n/mn/LC_MESSAGES/main.po | 2261 -- source/i18n/nl/LC_MESSAGES/main.mo | Bin 34011 -> 0 bytes source/i18n/nl/LC_MESSAGES/main.po | 2417 -- source/i18n/oc/LC_MESSAGES/main.mo | Bin 13070 -> 0 bytes source/i18n/oc/LC_MESSAGES/main.po | 2276 -- source/i18n/pl/LC_MESSAGES/main.mo | Bin 54503 -> 0 bytes source/i18n/pl/LC_MESSAGES/main.po | 2406 -- source/i18n/pt-br/LC_MESSAGES/main.mo | Bin 46839 -> 0 bytes source/i18n/pt-br/LC_MESSAGES/main.po | 2378 -- source/i18n/pt/LC_MESSAGES/main.mo | Bin 50622 -> 0 bytes source/i18n/pt/LC_MESSAGES/main.po | 2396 -- source/i18n/ru/LC_MESSAGES/main.mo | Bin 72193 -> 0 bytes source/i18n/ru/LC_MESSAGES/main.po | 2411 -- source/i18n/sk/LC_MESSAGES/main.mo | Bin 40779 -> 0 bytes source/i18n/sk/LC_MESSAGES/main.po | 2350 -- source/i18n/sv/LC_MESSAGES/main.mo | Bin 27897 -> 0 bytes source/i18n/sv/LC_MESSAGES/main.po | 2291 -- source/i18n/tr/LC_MESSAGES/main.mo | Bin 48018 -> 0 bytes source/i18n/tr/LC_MESSAGES/main.po | 2375 -- source/i18n/uk/LC_MESSAGES/main.mo | Bin 18746 -> 0 bytes source/i18n/uk/LC_MESSAGES/main.po | 2267 -- source/i18n/uz/LC_MESSAGES/main.mo | Bin 29793 -> 0 bytes source/i18n/uz/LC_MESSAGES/main.po | 2274 -- source/i18n/vi/LC_MESSAGES/main.mo | Bin 44866 -> 0 bytes source/i18n/vi/LC_MESSAGES/main.po | 2387 -- source/i18n/zh-cn/LC_MESSAGES/main.mo | Bin 47219 -> 0 bytes source/i18n/zh-cn/LC_MESSAGES/main.po | 2298 -- source/i18n/zh-tw/LC_MESSAGES/main.mo | Bin 47235 -> 0 bytes source/i18n/zh-tw/LC_MESSAGES/main.po | 2298 -- source/index.php | 112 - source/log/.htaccess | 2 - source/misc/certs/00673b5b.0 | 25 - source/misc/certs/024dc131.0 | 43 - source/misc/certs/02b73561.0 | 25 - source/misc/certs/039c618a.0 | 25 - source/misc/certs/03f0efa4.0 | 23 - source/misc/certs/052e396b.0 | 25 - source/misc/certs/062cdee6.0 | 21 - source/misc/certs/080911ac.0 | 34 - source/misc/certs/0810ba98.0 | 37 - source/misc/certs/08aef7bb.0 | 28 - source/misc/certs/09789157.0 | 24 - source/misc/certs/0b759015.0 | 22 - source/misc/certs/0c4c9b6c.0 | 41 - source/misc/certs/0d188d89.0 | 22 - source/misc/certs/0d1b923b.0 | 26 - source/misc/certs/10531352.0 | 24 - source/misc/certs/111e6273.0 | 22 - source/misc/certs/1155c94b.0 | 26 - source/misc/certs/116bf586.0 | 17 - source/misc/certs/119afc2e.0 | 29 - source/misc/certs/11a09b38.0 | 30 - source/misc/certs/11f154d6.0 | 24 - source/misc/certs/124bbd54.0 | 25 - source/misc/certs/128805a3.0 | 24 - source/misc/certs/12d55845.0 | 20 - source/misc/certs/157753a5.0 | 25 - source/misc/certs/1636090b.0 | 25 - source/misc/certs/17b51fe6.0 | 22 - source/misc/certs/18856ac4.0 | 21 - source/misc/certs/1dac3003.0 | 24 - source/misc/certs/1dcd6f4c.0 | 32 - source/misc/certs/1df5ec47.0 | 23 - source/misc/certs/1e1eab7c.0 | 23 - source/misc/certs/1e8e7201.0 | 21 - source/misc/certs/1eb37bdf.0 | 42 - source/misc/certs/1ec4d31a.0 | 19 - source/misc/certs/201cada0.0 | 33 - source/misc/certs/20d096ba.0 | 18 - source/misc/certs/219d9499.0 | 24 - source/misc/certs/2251b13a.0 | 22 - source/misc/certs/23f4c490.0 | 24 - source/misc/certs/244b5494.0 | 23 - source/misc/certs/24ad0b63.0 | 14 - source/misc/certs/27af790d.0 | 17 - source/misc/certs/2a4b3efc.0 | 37 - source/misc/certs/2ab3b959.0 | 31 - source/misc/certs/2afc57aa.0 | 27 - source/misc/certs/2b349938.0 | 20 - source/misc/certs/2c543cd1.0 | 20 - source/misc/certs/2cfc4974.0 | 30 - source/misc/certs/2d9dafe4.0 | 31 - source/misc/certs/2e4eed3c.0 | 25 - source/misc/certs/2e5ac55d.0 | 20 - source/misc/certs/2edf7016.0 | 14 - source/misc/certs/2fa87019.0 | 23 - source/misc/certs/2fb1850a.0 | 33 - source/misc/certs/33815e15.0 | 43 - source/misc/certs/343eb6cb.0 | 22 - source/misc/certs/349f2832.0 | 31 - source/misc/certs/3513523f.0 | 22 - source/misc/certs/381ce4dd.0 | 33 - source/misc/certs/399e7759.0 | 22 - source/misc/certs/3a3b02ce.0 | 24 - source/misc/certs/3ad48a91.0 | 21 - source/misc/certs/3b2716e5.0 | 34 - source/misc/certs/3bde41ac.0 | 35 - source/misc/certs/3c58f906.0 | 25 - source/misc/certs/3c860d51.0 | 33 - source/misc/certs/3d441de8.0 | 33 - source/misc/certs/3e45d192.0 | 20 - source/misc/certs/3e7271e8.0 | 26 - source/misc/certs/3ee7e181.0 | 24 - source/misc/certs/40547a79.0 | 25 - source/misc/certs/408e388a.0 | 24 - source/misc/certs/40dc992e.0 | 25 - source/misc/certs/415660c1.0 | 14 - source/misc/certs/418595b9.0 | 30 - source/misc/certs/4304c5e5.0 | 23 - source/misc/certs/442adcac.0 | 19 - source/misc/certs/4597689c.0 | 19 - source/misc/certs/46b2fd3b.0 | 33 - source/misc/certs/480720ec.0 | 21 - source/misc/certs/48a195d8.0 | 34 - source/misc/certs/48bec511.0 | 22 - source/misc/certs/4a6481c9.0 | 22 - source/misc/certs/4bfab552.0 | 23 - source/misc/certs/4d654d1d.0 | 15 - source/misc/certs/4e18c148.0 | 22 - source/misc/certs/4f316efb.0 | 33 - source/misc/certs/4fbd6bfa.0 | 26 - source/misc/certs/5021a0a2.0 | 23 - source/misc/certs/5046c355.0 | 33 - source/misc/certs/524d9b43.0 | 28 - source/misc/certs/5443e9e3.0 | 23 - source/misc/certs/54657681.0 | 31 - source/misc/certs/55a10908.0 | 18 - source/misc/certs/5620c4aa.0 | 27 - source/misc/certs/56657bde.0 | 25 - source/misc/certs/56b8a0b6.0 | 25 - source/misc/certs/56e29e75.0 | 46 - source/misc/certs/57692373.0 | 21 - source/misc/certs/578d5c04.0 | 19 - source/misc/certs/57bbd831.0 | 22 - source/misc/certs/57bcb2da.0 | 33 - source/misc/certs/58a44af1.0 | 24 - source/misc/certs/590d426f.0 | 83 - source/misc/certs/594f1775.0 | 19 - source/misc/certs/5a3f0ff8.0 | 25 - source/misc/certs/5a5372fc.0 | 31 - source/misc/certs/5ad8a5d6.0 | 21 - source/misc/certs/5c44d531.0 | 33 - source/misc/certs/5cf9d536.0 | 34 - source/misc/certs/5e4e69e7.0 | 21 - source/misc/certs/5ed36f99.0 | 83 - source/misc/certs/5f267794.0 | 28 - source/misc/certs/5f47b495.0 | 33 - source/misc/certs/60afe812.0 | 24 - source/misc/certs/635ccfd5.0 | 31 - source/misc/certs/6410666e.0 | 32 - source/misc/certs/653b494a.0 | 21 - source/misc/certs/656b3e35.0 | 25 - source/misc/certs/65b876bd.0 | 30 - source/misc/certs/667c66d4.0 | 34 - source/misc/certs/67495436.0 | 25 - source/misc/certs/67d559d1.0 | 19 - source/misc/certs/69105f4f.0 | 22 - source/misc/certs/6adf0799.0 | 23 - source/misc/certs/6b99d060.0 | 27 - source/misc/certs/6cc3c4c3.0 | 19 - source/misc/certs/6e52cc39.0 | 25 - source/misc/certs/6e8bf996.0 | 19 - source/misc/certs/6f2c1157.0 | 37 - source/misc/certs/6fcc125d.0 | 22 - source/misc/certs/706f604c.0 | 25 - source/misc/certs/72f369af.0 | 20 - source/misc/certs/72fa7371.0 | 19 - source/misc/certs/74c26bd0.0 | 16 - source/misc/certs/755f7420.0 | 19 - source/misc/certs/75680d2e.0 | 25 - source/misc/certs/7651b327.0 | 14 - source/misc/certs/76579174.0 | 25 - source/misc/certs/7672ac4b.0 | 32 - source/misc/certs/76cb8f92.0 | 22 - source/misc/certs/76faf6c0.0 | 38 - source/misc/certs/778e3cb0.0 | 26 - source/misc/certs/790a7190.0 | 24 - source/misc/certs/7999be0d.0 | 20 - source/misc/certs/79ad8b43.0 | 16 - source/misc/certs/7a481e66.0 | 27 - source/misc/certs/7a819ef2.0 | 33 - source/misc/certs/7d0b38bd.0 | 21 - source/misc/certs/7d3cd826.0 | 18 - source/misc/certs/7d453d8f.0 | 24 - source/misc/certs/7d5a75e4.0 | 28 - source/misc/certs/812e17de.0 | 22 - source/misc/certs/8160b96c.0 | 24 - source/misc/certs/81b9768f.0 | 23 - source/misc/certs/82223c44.0 | 31 - source/misc/certs/8317b10c.0 | 39 - source/misc/certs/8470719d.0 | 21 - source/misc/certs/84cba82f.0 | 24 - source/misc/certs/85cde254.0 | 23 - source/misc/certs/861a399d.0 | 24 - source/misc/certs/861e0100.0 | 39 - source/misc/certs/86212b19.0 | 20 - source/misc/certs/876f1e28.0 | 31 - source/misc/certs/87753b0d.0 | 31 - source/misc/certs/882de061.0 | 20 - source/misc/certs/8867006a.0 | 31 - source/misc/certs/88f89ea7.0 | 24 - source/misc/certs/895cad1a.0 | 20 - source/misc/certs/89c02a45.0 | 16 - source/misc/certs/8b59b1ad.0 | 24 - source/misc/certs/8d86cdd1.0 | 20 - source/misc/certs/8e52d3cd.0 | 20 - source/misc/certs/8f7b96c4.0 | 19 - source/misc/certs/91739615.0 | 24 - source/misc/certs/930ac5d2.0 | 33 - source/misc/certs/9339512a.0 | 38 - source/misc/certs/93bc0acc.0 | 20 - source/misc/certs/95aff9e3.0 | 22 - source/misc/certs/9685a493.0 | 20 - source/misc/certs/9772ca32.0 | 21 - source/misc/certs/9818ca0b.0 | 23 - source/misc/certs/988a38cb.0 | 24 - source/misc/certs/98ec67f0.0 | 19 - source/misc/certs/99d0fa06.0 | 83 - source/misc/certs/9a3db647.0 | 37 - source/misc/certs/9af9f759.0 | 18 - source/misc/certs/9b353c9a.0 | 25 - source/misc/certs/9c2e7d30.0 | 19 - source/misc/certs/9c472bf7.0 | 23 - source/misc/certs/9c8dfbd4.0 | 13 - source/misc/certs/9d520b32.0 | 21 - source/misc/certs/9d6523ce.0 | 33 - source/misc/certs/9dbefe7b.0 | 21 - source/misc/certs/9ec3a561.0 | 27 - source/misc/certs/9f533518.0 | 41 - source/misc/certs/9f541fb4.0 | 19 - source/misc/certs/A-Trust-nQual-03.pem | 23 - source/misc/certs/ACEDICOM_Root.pem | 33 - .../misc/certs/AC_Raíz_Certicámara_S.A..pem | 37 - .../certs/Actalis_Authentication_Root_CA.pem | 33 - source/misc/certs/AddTrust_External_Root.pem | 25 - .../AddTrust_Low-Value_Services_Root.pem | 24 - .../certs/AddTrust_Public_Services_Root.pem | 24 - .../AddTrust_Qualified_Certificates_Root.pem | 25 - source/misc/certs/AffirmTrust_Commercial.pem | 20 - source/misc/certs/AffirmTrust_Networking.pem | 20 - source/misc/certs/AffirmTrust_Premium.pem | 31 - source/misc/certs/AffirmTrust_Premium_ECC.pem | 13 - ..._Online_Root_Certification_Authority_1.pem | 22 - ..._Online_Root_Certification_Authority_2.pem | 33 - .../ApplicationCA_-_Japanese_Government.pem | 22 - ...icacion_Firmaprofesional_CIF_A62634068.pem | 35 - .../misc/certs/Baltimore_CyberTrust_Root.pem | 21 - source/misc/certs/Buypass_Class_2_CA_1.pem | 20 - source/misc/certs/Buypass_Class_2_Root_CA.pem | 31 - source/misc/certs/Buypass_Class_3_CA_1.pem | 20 - source/misc/certs/Buypass_Class_3_Root_CA.pem | 31 - source/misc/certs/CA_Disig.pem | 24 - source/misc/certs/CNNIC_ROOT.pem | 20 - .../certs/COMODO_Certification_Authority.pem | 25 - .../COMODO_ECC_Certification_Authority.pem | 16 - .../Camerfirma_Chambers_of_Commerce_Root.pem | 28 - .../Camerfirma_Global_Chambersign_Root.pem | 28 - source/misc/certs/Certigna.pem | 22 - .../certs/Certinomis_-_Autorité_Racine.pem | 32 - .../certs/Certplus_Class_2_Primary_CA.pem | 22 - source/misc/certs/Certum_Root_CA.pem | 19 - .../misc/certs/Certum_Trusted_Network_CA.pem | 22 - .../Chambers_of_Commerce_Root_-_2008.pem | 42 - source/misc/certs/ComSign_CA.pem | 22 - source/misc/certs/ComSign_Secured_CA.pem | 22 - .../misc/certs/Comodo_AAA_Services_root.pem | 25 - .../certs/Comodo_Secure_Services_root.pem | 25 - .../certs/Comodo_Trusted_Services_root.pem | 25 - source/misc/certs/Cybertrust_Global_Root.pem | 22 - source/misc/certs/DST_ACES_CA_X6.pem | 24 - source/misc/certs/DST_Root_CA_X3.pem | 20 - .../misc/certs/Deutsche_Telekom_Root_CA_2.pem | 22 - .../certs/DigiCert_Assured_ID_Root_CA.pem | 22 - source/misc/certs/DigiCert_Global_Root_CA.pem | 22 - .../DigiCert_High_Assurance_EV_Root_CA.pem | 23 - ...igital_Signature_Trust_Co._Global_CA_1.pem | 19 - ...igital_Signature_Trust_Co._Global_CA_3.pem | 19 - ...lektronik_Sertifika_Hizmet_Saglayicisi.pem | 22 - ...lektronik_Sertifika_Hizmet_Sağlayıcısı.pem | 34 - source/misc/certs/EC-ACC.pem | 31 - .../certs/EE_Certification_Centre_Root_CA.pem | 24 - ...rust.net_Premium_2048_Secure_Server_CA.pem | 26 - .../certs/Entrust.net_Secure_Server_CA.pem | 28 - .../Entrust_Root_Certification_Authority.pem | 27 - source/misc/certs/Equifax_Secure_CA.pem | 19 - .../Equifax_Secure_Global_eBusiness_CA.pem | 16 - .../certs/Equifax_Secure_eBusiness_CA_1.pem | 16 - .../certs/Equifax_Secure_eBusiness_CA_2.pem | 19 - .../misc/certs/Firmaprofesional_Root_CA.pem | 26 - .../misc/certs/GTE_CyberTrust_Global_Root.pem | 15 - source/misc/certs/GeoTrust_Global_CA.pem | 20 - source/misc/certs/GeoTrust_Global_CA_2.pem | 21 - ...oTrust_Primary_Certification_Authority.pem | 21 - ...t_Primary_Certification_Authority_-_G2.pem | 17 - ...t_Primary_Certification_Authority_-_G3.pem | 24 - source/misc/certs/GeoTrust_Universal_CA.pem | 31 - source/misc/certs/GeoTrust_Universal_CA_2.pem | 31 - source/misc/certs/GlobalSign_Root_CA.pem | 21 - source/misc/certs/GlobalSign_Root_CA_-_R2.pem | 22 - source/misc/certs/GlobalSign_Root_CA_-_R3.pem | 21 - .../certs/Global_Chambersign_Root_-_2008.pem | 41 - source/misc/certs/Go_Daddy_Class_2_CA.pem | 24 - ..._Daddy_Root_Certificate_Authority_-_G2.pem | 23 - ..._and_Research_Institutions_RootCA_2011.pem | 25 - source/misc/certs/Hongkong_Post_Root_CA_1.pem | 20 - source/misc/certs/IGC_A.pem | 24 - source/misc/certs/Izenpe.com.pem | 34 - source/misc/certs/Juur-SK.pem | 29 - .../misc/certs/Microsec_e-Szigno_Root_CA.pem | 43 - .../certs/Microsec_e-Szigno_Root_CA_2009.pem | 24 - ...tLock_Arany_=Class_Gold=_Főtanúsítvány.pem | 24 - .../certs/NetLock_Business_=Class_B=_Root.pem | 31 - .../certs/NetLock_Express_=Class_C=_Root.pem | 31 - .../certs/NetLock_Notary_=Class_A=_Root.pem | 37 - .../NetLock_Qualified_=Class_QA=_Root.pem | 39 - ...etwork_Solutions_Certificate_Authority.pem | 23 - .../certs/OISTE_WISeKey_Global_Root_GA_CA.pem | 24 - source/misc/certs/QuoVadis_Root_CA.pem | 34 - source/misc/certs/QuoVadis_Root_CA_2.pem | 33 - source/misc/certs/QuoVadis_Root_CA_3.pem | 38 - source/misc/certs/RSA_Root_Certificate_1.pem | 18 - source/misc/certs/RSA_Security_2048_v3.pem | 21 - .../certs/Root_CA_Generalitat_Valenciana.pem | 37 - ...ication_and_Encryption_Root_CA_2005_PN.pem | 26 - source/misc/certs/SecureSign_RootCA11.pem | 21 - source/misc/certs/SecureTrust_CA.pem | 22 - source/misc/certs/Secure_Global_CA.pem | 22 - .../Security_Communication_EV_RootCA1.pem | 21 - .../certs/Security_Communication_RootCA2.pem | 21 - .../certs/Security_Communication_Root_CA.pem | 20 - source/misc/certs/Sonera_Class_1_Root_CA.pem | 19 - source/misc/certs/Sonera_Class_2_Root_CA.pem | 19 - .../certs/Staat_der_Nederlanden_Root_CA.pem | 22 - .../Staat_der_Nederlanden_Root_CA_-_G2.pem | 33 - source/misc/certs/Starfield_Class_2_CA.pem | 24 - ...rfield_Root_Certificate_Authority_-_G2.pem | 23 - ...rvices_Root_Certificate_Authority_-_G2.pem | 24 - .../StartCom_Certification_Authority_G2.pem | 31 - .../Startcom_Certification_Authority.pem | 43 - source/misc/certs/SwissSign_Gold_CA_-_G2.pem | 33 - .../misc/certs/SwissSign_Platinum_CA_-_G2.pem | 33 - .../misc/certs/SwissSign_Silver_CA_-_G2.pem | 33 - source/misc/certs/Swisscom_Root_CA_1.pem | 34 - .../certs/T-TeleSec_GlobalRoot_Class_3.pem | 23 - .../certs/TC_TrustCenter_Class_2_CA_II.pem | 27 - .../certs/TC_TrustCenter_Class_3_CA_II.pem | 27 - .../certs/TC_TrustCenter_Universal_CA_I.pem | 23 - .../certs/TC_TrustCenter_Universal_CA_III.pem | 23 - source/misc/certs/TDC_Internet_Root_CA.pem | 25 - source/misc/certs/TDC_OCES_Root_CA.pem | 30 - ...T_Certificate_Services_Provider_Root_1.pem | 24 - ...T_Certificate_Services_Provider_Root_2.pem | 25 - ...Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.pem | 30 - .../TWCA_Root_Certification_Authority.pem | 21 - source/misc/certs/Taiwan_GRCA.pem | 32 - .../misc/certs/Thawte_Premium_Server_CA.pem | 19 - source/misc/certs/Thawte_Server_CA.pem | 19 - source/misc/certs/Trustis_FPS_Root_CA.pem | 21 - .../misc/certs/UTN_DATACorp_SGC_Root_CA.pem | 26 - .../certs/UTN_USERFirst_Email_Root_CA.pem | 27 - .../certs/UTN_USERFirst_Hardware_Root_CA.pem | 26 - source/misc/certs/ValiCert_Class_1_VA.pem | 18 - source/misc/certs/ValiCert_Class_2_VA.pem | 18 - ...c_Primary_Certification_Authority_-_G4.pem | 21 - ...c_Primary_Certification_Authority_-_G5.pem | 28 - ...Universal_Root_Certification_Authority.pem | 28 - ...Public_Primary_Certification_Authority.pem | 14 - ...c_Primary_Certification_Authority_-_G2.pem | 19 - ...c_Primary_Certification_Authority_-_G3.pem | 24 - ...c_Primary_Certification_Authority_-_G2.pem | 19 - ...c_Primary_Certification_Authority_-_G3.pem | 24 - ...Public_Primary_Certification_Authority.pem | 14 - ...c_Primary_Certification_Authority_-_G2.pem | 19 - ...c_Primary_Certification_Authority_-_G3.pem | 24 - ...c_Primary_Certification_Authority_-_G3.pem | 24 - source/misc/certs/Visa_eCommerce_Root.pem | 22 - ...cure_Public_Root_Certificate_Authority.pem | 28 - source/misc/certs/Wells_Fargo_Root_CA.pem | 23 - source/misc/certs/XRamp_Global_CA_Root.pem | 25 - source/misc/certs/a0bc6fbb.0 | 28 - source/misc/certs/a15b3b6b.0 | 19 - source/misc/certs/a2df7ad7.0 | 24 - source/misc/certs/a3896b44.0 | 20 - source/misc/certs/a5fd78f0.0 | 27 - source/misc/certs/a6a593ba.0 | 19 - source/misc/certs/a7605362.0 | 19 - source/misc/certs/a760e1bd.0 | 22 - source/misc/certs/a7d2cf64.0 | 16 - source/misc/certs/a8dee976.0 | 33 - source/misc/certs/ab5346f4.0 | 21 - source/misc/certs/ad088e1d.0 | 31 - source/misc/certs/add67345.0 | 37 - source/misc/certs/ae8153b9.0 | 43 - source/misc/certs/aeb67534.0 | 31 - source/misc/certs/aee5f10d.0 | 26 - source/misc/certs/b097d71d.0 | 24 - source/misc/certs/b0f3e76e.0 | 21 - source/misc/certs/b1159c4c.0 | 22 - source/misc/certs/b13cc6df.0 | 26 - source/misc/certs/b1b8a7f3.0 | 24 - source/misc/certs/b204d74a.0 | 28 - source/misc/certs/b42ff584.0 | 22 - source/misc/certs/b66938e9.0 | 22 - source/misc/certs/b6c5745d.0 | 24 - source/misc/certs/b727005e.0 | 31 - source/misc/certs/b7a5b843.0 | 21 - source/misc/certs/b7db1890.0 | 21 - source/misc/certs/b7e7231a.0 | 31 - source/misc/certs/b8e83700.0 | 19 - source/misc/certs/ba89ed3b.0 | 25 - source/misc/certs/bad35b78.0 | 24 - source/misc/certs/bb2d49a0.0 | 22 - source/misc/certs/bc3f2570.0 | 23 - source/misc/certs/bcdd5959.0 | 18 - source/misc/certs/bd1910d4.0 | 20 - source/misc/certs/bda4cc84.0 | 22 - source/misc/certs/bdacca6f.0 | 22 - source/misc/certs/bf64f35b.0 | 27 - source/misc/certs/c01cdfa2.0 | 28 - source/misc/certs/c089bbbd.0 | 16 - source/misc/certs/c0ff1f52.0 | 24 - source/misc/certs/c19d42c7.0 | 19 - source/misc/certs/c215bc69.0 | 19 - source/misc/certs/c33a80d4.0 | 19 - source/misc/certs/c3a6a9ad.0 | 23 - source/misc/certs/c47d9980.0 | 42 - source/misc/certs/c51c224c.0 | 21 - source/misc/certs/c527e4ab.0 | 24 - source/misc/certs/c5e082db.0 | 27 - source/misc/certs/c692a373.0 | 15 - source/misc/certs/c7e2a638.0 | 24 - source/misc/certs/c8763593.0 | 37 - source/misc/certs/c8841d13.0 | 23 - source/misc/certs/c99398f3.0 | 21 - source/misc/certs/c9f83a1c.0 | 25 - source/misc/certs/ca-certificates.crt | 4025 ---- source/misc/certs/ca.pem | 25 - source/misc/certs/ca6e4ad9.0 | 33 - source/misc/certs/cacert.org.pem | 83 - source/misc/certs/cb357862.0 | 19 - source/misc/certs/cb59f961.0 | 28 - source/misc/certs/cbeee9e2.0 | 21 - source/misc/certs/cbf06781.0 | 23 - source/misc/certs/cc450945.0 | 34 - source/misc/certs/ccc52f49.0 | 13 - source/misc/certs/cd58d51e.0 | 21 - source/misc/certs/cdaebb72.0 | 22 - source/misc/certs/ce026bf8.0 | 26 - source/misc/certs/certSIGN_ROOT_CA.pem | 20 - source/misc/certs/cf701eeb.0 | 22 - source/misc/certs/cfa1c2ee.0 | 20 - source/misc/certs/d16a5865.0 | 35 - source/misc/certs/d537fba6.0 | 25 - source/misc/certs/d59297b8.0 | 21 - source/misc/certs/d64f06f3.0 | 24 - source/misc/certs/d78a75c7.0 | 24 - source/misc/certs/d7e8dc79.0 | 33 - source/misc/certs/d853d49e.0 | 21 - source/misc/certs/d957f522.0 | 32 - source/misc/certs/d9d12c58.0 | 37 - source/misc/certs/dbc54cab.0 | 31 - source/misc/certs/dc45b0bd.0 | 24 - source/misc/certs/ddc328ff.0 | 19 - source/misc/certs/e113c810.0 | 22 - source/misc/certs/e268a4c5.0 | 24 - source/misc/certs/e2799e36.0 | 24 - source/misc/certs/e48193cf.0 | 20 - source/misc/certs/e536d871.0 | 25 - source/misc/certs/e5662767.0 | 83 - source/misc/certs/e60bf0c0.0 | 34 - source/misc/certs/e775ed2d.0 | 31 - source/misc/certs/e7b8d656.0 | 16 - source/misc/certs/e8651083.0 | 24 - source/misc/certs/e8de2f56.0 | 31 - .../ePKI_Root_Certification_Authority.pem | 33 - source/misc/certs/ea169617.0 | 33 - source/misc/certs/eacdeb40.0 | 22 - source/misc/certs/eb375c3e.0 | 20 - source/misc/certs/ec87c655.0 | 46 - source/misc/certs/ed524cf5.0 | 28 - source/misc/certs/ed62f4e3.0 | 19 - source/misc/certs/ee1365c0.0 | 24 - source/misc/certs/ee64a828.0 | 25 - source/misc/certs/ee7cd6fb.0 | 28 - source/misc/certs/ee90b008.0 | 31 - source/misc/certs/eed8c118.0 | 16 - source/misc/certs/ef2f636c.0 | 16 - source/misc/certs/f060240e.0 | 22 - source/misc/certs/f081611a.0 | 24 - source/misc/certs/f3377b1b.0 | 20 - source/misc/certs/f387163d.0 | 24 - source/misc/certs/f39fc864.0 | 22 - source/misc/certs/f4996e82.0 | 18 - source/misc/certs/f559733c.0 | 26 - source/misc/certs/f58a60fe.0 | 22 - source/misc/certs/f61bff45.0 | 43 - source/misc/certs/f80cc7f6.0 | 34 - source/misc/certs/f90208f7.0 | 28 - source/misc/certs/fac084d7.0 | 22 - source/misc/certs/facacbc6.0 | 28 - source/misc/certs/fb126c6d.0 | 37 - source/misc/certs/fcac10e3.0 | 29 - source/misc/certs/fde84897.0 | 22 - source/misc/certs/ff588423.0 | 22 - source/misc/certs/ff783690.0 | 26 - source/misc/certs/gandi-ca.crt | 37 - source/misc/certs/spi-ca-2003.pem | 24 - source/misc/certs/spi-cacert-2008.pem | 46 - source/misc/certs/thawte_Primary_Root_CA.pem | 25 - .../certs/thawte_Primary_Root_CA_-_G2.pem | 16 - .../certs/thawte_Primary_Root_CA_-_G3.pem | 25 - source/server/analytics.php | 32 - source/server/avatar-upload.php | 107 - source/server/bosh.php | 171 - source/server/captcha.php | 96 - source/server/desktop.php | 282 - source/server/download-chat.php | 54 - source/server/download.php | 70 - source/server/drawsvgchart.php | 495 - source/server/file-share.php | 137 - source/server/form-hosts.php | 73 - source/server/form-main.php | 232 - source/server/form-users.php | 30 - source/server/functions-advertising.php | 79 - source/server/functions-get.php | 320 - source/server/functions-manager.php | 810 - source/server/functions.php | 1711 -- source/server/generate-chat.php | 259 - source/server/geolocation.php | 44 - source/server/get-store.php | 38 - source/server/get.php | 422 - source/server/gettext.php | 948 - source/server/install.php | 291 - source/server/jingle.php | 67 - source/server/jsmin.php | 375 - source/server/manager.php | 847 - source/server/mobile-detect.php | 803 - source/server/mobile.php | 100 - source/server/music-search.php | 109 - source/server/post-design.php | 228 - source/server/post-hosts.php | 153 - source/server/post-main.php | 288 - source/server/post-store.php | 102 - source/server/post-users.php | 51 - source/server/read-design.php | 127 - source/server/read-hosts.php | 111 - source/server/read-main.php | 114 - source/server/register.php | 179 - source/server/send.php | 138 - source/server/srand.php | 151 - source/server/static.php | 41 - source/server/stats-svg.php | 103 - source/server/store-tree.php | 52 - source/server/upload.php | 41 - source/server/vars-design.php | 49 - source/server/vars-hosts.php | 38 - source/server/vars-main.php | 55 - source/server/vars-store.php | 29 - source/store/access/index.html | 14 - source/store/access/months.xml | 11 - source/store/access/total.xml | 5 - source/store/backgrounds/index.html | 14 - source/store/conf/index.html | 14 - source/store/conf/installed.xml | 4 - source/store/index.html | 14 - source/store/logos/index.html | 14 - source/store/music/index.html | 14 - source/store/share/index.html | 14 - source/store/update/index.html | 14 - source/test/.htaccess | 2 - source/test/Gruntfile.js | 137 - source/test/README.md | 9 - source/test/package.json | 33 - source/tmp/.htaccess | 2 - source/tmp/archives/.gitkeep | 0 source/tmp/avatar/.gitkeep | 0 source/tmp/cache/.gitkeep | 0 source/tmp/send/.gitkeep | 0 source/tools/.htaccess | 2 - source/tools/extract_mini.sh | 236 - 1840 files changed, 15 insertions(+), 212860 deletions(-) create mode 100644 scripts/_common.sh delete mode 100644 source/AUTHORS.md delete mode 100644 source/CHANGELOG.md delete mode 100644 source/COPYING.md delete mode 100644 source/COPYING_FONT.md delete mode 100644 source/COPYING_MINI.md delete mode 100644 source/INSTALL.md delete mode 100644 source/PROTOCOL.md delete mode 100644 source/README.md delete mode 100644 source/THANKS.md delete mode 100644 source/VERSION delete mode 100644 source/app/.htaccess delete mode 100644 source/app/bundles/anonymous.xml delete mode 100644 source/app/bundles/desktop.xml delete mode 100644 source/app/bundles/httpauth.xml delete mode 100644 source/app/bundles/install.xml delete mode 100644 source/app/bundles/manager.xml delete mode 100644 source/app/bundles/mini.xml delete mode 100644 source/app/bundles/mobile.xml delete mode 100644 source/app/fonts/eot/ptsans.eot delete mode 100644 source/app/fonts/eot/ptsansbold.eot delete mode 100644 source/app/fonts/eot/ptsansbolditalic.eot delete mode 100644 source/app/fonts/eot/ptsansitalic.eot delete mode 100644 source/app/fonts/svg/ptsans.svg delete mode 100644 source/app/fonts/svg/ptsansbold.svg delete mode 100644 source/app/fonts/svg/ptsansbolditalic.svg delete mode 100644 source/app/fonts/svg/ptsansitalic.svg delete mode 100644 source/app/fonts/ttf/ptsans.ttf delete mode 100644 source/app/fonts/ttf/ptsansbold.ttf delete mode 100644 source/app/fonts/ttf/ptsansbolditalic.ttf delete mode 100644 source/app/fonts/ttf/ptsansitalic.ttf delete mode 100644 source/app/fonts/woff/ptsans.woff delete mode 100644 source/app/fonts/woff/ptsansbold.woff delete mode 100644 source/app/fonts/woff/ptsansbolditalic.woff delete mode 100644 source/app/fonts/woff/ptsansitalic.woff delete mode 100644 source/app/images/others/blank.gif delete mode 100644 source/app/images/others/default-avatar.png delete mode 100644 source/app/images/others/lock.png delete mode 100644 source/app/images/placeholders/jingle_audio_local.png delete mode 100644 source/app/images/placeholders/jingle_audio_remote.png delete mode 100644 source/app/images/placeholders/jingle_video_local.png delete mode 100644 source/app/images/placeholders/jingle_video_remote.png delete mode 100644 source/app/images/sprites/animate.gif delete mode 100644 source/app/images/sprites/animate.png delete mode 100644 source/app/images/sprites/archives.png delete mode 100644 source/app/images/sprites/background.png delete mode 100644 source/app/images/sprites/browsers.png delete mode 100644 source/app/images/sprites/buttons.png delete mode 100644 source/app/images/sprites/call.png delete mode 100644 source/app/images/sprites/home.png delete mode 100644 source/app/images/sprites/install.png delete mode 100644 source/app/images/sprites/manager.png delete mode 100644 source/app/images/sprites/me.png delete mode 100644 source/app/images/sprites/mini.gif delete mode 100644 source/app/images/sprites/mini.png delete mode 100644 source/app/images/sprites/mobile.png delete mode 100644 source/app/images/sprites/smileys.png delete mode 100644 source/app/images/sprites/talk.png delete mode 100644 source/app/images/sprites/welcome.png delete mode 100644 source/app/images/wait/wait-big.gif delete mode 100644 source/app/images/wait/wait-medium.png delete mode 100644 source/app/images/wait/wait-small.gif delete mode 100644 source/app/images/wait/wait-typing.gif delete mode 100644 source/app/javascripts/adhoc.js delete mode 100644 source/app/javascripts/anonymous.js delete mode 100644 source/app/javascripts/attention.js delete mode 100644 source/app/javascripts/audio.js delete mode 100644 source/app/javascripts/autocompletion.js delete mode 100644 source/app/javascripts/avatar.js delete mode 100644 source/app/javascripts/base64.js delete mode 100644 source/app/javascripts/board.js delete mode 100644 source/app/javascripts/browser-detect.js delete mode 100644 source/app/javascripts/bubble.js delete mode 100644 source/app/javascripts/call.js delete mode 100644 source/app/javascripts/caps.js delete mode 100644 source/app/javascripts/carbons.js delete mode 100644 source/app/javascripts/chat.js delete mode 100644 source/app/javascripts/chatstate.js delete mode 100644 source/app/javascripts/common.js delete mode 100644 source/app/javascripts/connection.js delete mode 100644 source/app/javascripts/console.js delete mode 100644 source/app/javascripts/constants.js delete mode 100644 source/app/javascripts/correction.js delete mode 100644 source/app/javascripts/dataform.js delete mode 100644 source/app/javascripts/datastore.js delete mode 100644 source/app/javascripts/date.js delete mode 100644 source/app/javascripts/datejs.js delete mode 100644 source/app/javascripts/directory.js delete mode 100644 source/app/javascripts/discovery.js delete mode 100644 source/app/javascripts/errors.js delete mode 100644 source/app/javascripts/favorites.js delete mode 100644 source/app/javascripts/features.js delete mode 100644 source/app/javascripts/filter.js delete mode 100644 source/app/javascripts/groupchat.js delete mode 100644 source/app/javascripts/home.js delete mode 100644 source/app/javascripts/httpauth.js delete mode 100644 source/app/javascripts/httpreply.js delete mode 100644 source/app/javascripts/inbox.js delete mode 100644 source/app/javascripts/integratebox.js delete mode 100644 source/app/javascripts/interface.js delete mode 100644 source/app/javascripts/ios.js delete mode 100644 source/app/javascripts/iq.js delete mode 100644 source/app/javascripts/jingle.js delete mode 100644 source/app/javascripts/jquery.form.js delete mode 100644 source/app/javascripts/jquery.js delete mode 100644 source/app/javascripts/jquery.json.js delete mode 100644 source/app/javascripts/jquery.placeholder.js delete mode 100644 source/app/javascripts/jquery.scrollto.js delete mode 100644 source/app/javascripts/jquery.textrange.js delete mode 100644 source/app/javascripts/jquery.timers.js delete mode 100755 source/app/javascripts/jquery.ui.js delete mode 100644 source/app/javascripts/jsjac.jingle.js delete mode 100644 source/app/javascripts/jsjac.js delete mode 100644 source/app/javascripts/jxhr.js delete mode 100644 source/app/javascripts/links.js delete mode 100644 source/app/javascripts/mam.js delete mode 100644 source/app/javascripts/markers.js delete mode 100644 source/app/javascripts/me.js delete mode 100644 source/app/javascripts/message.js delete mode 100644 source/app/javascripts/microblog.js delete mode 100644 source/app/javascripts/mini.js delete mode 100644 source/app/javascripts/mobile.js delete mode 100644 source/app/javascripts/mucadmin.js delete mode 100644 source/app/javascripts/muji.js delete mode 100644 source/app/javascripts/music.js delete mode 100644 source/app/javascripts/name.js delete mode 100644 source/app/javascripts/notification.js delete mode 100644 source/app/javascripts/oob.js delete mode 100644 source/app/javascripts/options.js delete mode 100644 source/app/javascripts/origin.js delete mode 100644 source/app/javascripts/pep.js delete mode 100644 source/app/javascripts/popup.js delete mode 100644 source/app/javascripts/presence.js delete mode 100644 source/app/javascripts/privacy.js delete mode 100644 source/app/javascripts/pubsub.js delete mode 100644 source/app/javascripts/receipts.js delete mode 100644 source/app/javascripts/roster.js delete mode 100644 source/app/javascripts/rosterx.js delete mode 100644 source/app/javascripts/search.js delete mode 100644 source/app/javascripts/smileys.js delete mode 100644 source/app/javascripts/storage.js delete mode 100644 source/app/javascripts/system.js delete mode 100644 source/app/javascripts/talk.js delete mode 100644 source/app/javascripts/tooltip.js delete mode 100644 source/app/javascripts/userinfos.js delete mode 100644 source/app/javascripts/utilities.js delete mode 100644 source/app/javascripts/vcard.js delete mode 100644 source/app/javascripts/welcome.js delete mode 100644 source/app/javascripts/xmpplinks.js delete mode 100644 source/app/sounds/catch-attention.mp3 delete mode 100644 source/app/sounds/catch-attention.oga delete mode 100644 source/app/sounds/incoming-call.mp3 delete mode 100644 source/app/sounds/incoming-call.oga delete mode 100644 source/app/sounds/new-chat.mp3 delete mode 100644 source/app/sounds/new-chat.oga delete mode 100644 source/app/sounds/notification.mp3 delete mode 100644 source/app/sounds/notification.oga delete mode 100644 source/app/sounds/outgoing-call.mp3 delete mode 100644 source/app/sounds/outgoing-call.oga delete mode 100644 source/app/sounds/receive-message.mp3 delete mode 100644 source/app/sounds/receive-message.oga delete mode 100644 source/app/stylesheets/adhoc.css delete mode 100644 source/app/stylesheets/anonymous.css delete mode 100644 source/app/stylesheets/board.css delete mode 100644 source/app/stylesheets/call.css delete mode 100644 source/app/stylesheets/channel.css delete mode 100644 source/app/stylesheets/directory.css delete mode 100644 source/app/stylesheets/discovery.css delete mode 100644 source/app/stylesheets/favorites.css delete mode 100644 source/app/stylesheets/fonts.css delete mode 100644 source/app/stylesheets/home.css delete mode 100644 source/app/stylesheets/ie.css delete mode 100644 source/app/stylesheets/images.css delete mode 100644 source/app/stylesheets/inbox.css delete mode 100644 source/app/stylesheets/install.css delete mode 100644 source/app/stylesheets/integratebox.css delete mode 100644 source/app/stylesheets/ios.css delete mode 100644 source/app/stylesheets/jingle.css delete mode 100644 source/app/stylesheets/main.css delete mode 100644 source/app/stylesheets/manager.css delete mode 100644 source/app/stylesheets/me.css delete mode 100644 source/app/stylesheets/mini.css delete mode 100644 source/app/stylesheets/mobile.css delete mode 100644 source/app/stylesheets/mucadmin.css delete mode 100644 source/app/stylesheets/muji.css delete mode 100644 source/app/stylesheets/myinfos.css delete mode 100644 source/app/stylesheets/options.css delete mode 100644 source/app/stylesheets/others.css delete mode 100644 source/app/stylesheets/pageengine.css delete mode 100644 source/app/stylesheets/pageswitch.css delete mode 100644 source/app/stylesheets/popup.css delete mode 100644 source/app/stylesheets/privacy.css delete mode 100644 source/app/stylesheets/roster.css delete mode 100644 source/app/stylesheets/rosterx.css delete mode 100644 source/app/stylesheets/search.css delete mode 100644 source/app/stylesheets/smileys.css delete mode 100644 source/app/stylesheets/stats-svg.css delete mode 100644 source/app/stylesheets/tools.css delete mode 100644 source/app/stylesheets/userinfos.css delete mode 100644 source/app/stylesheets/vcard.css delete mode 100644 source/app/stylesheets/welcome.css delete mode 100644 source/dev/.htaccess delete mode 100644 source/dev/images/icons/accept.png delete mode 100644 source/dev/images/icons/add.png delete mode 100644 source/dev/images/icons/anchor.png delete mode 100644 source/dev/images/icons/application.png delete mode 100644 source/dev/images/icons/application_add.png delete mode 100644 source/dev/images/icons/application_cascade.png delete mode 100644 source/dev/images/icons/application_delete.png delete mode 100644 source/dev/images/icons/application_double.png delete mode 100644 source/dev/images/icons/application_edit.png delete mode 100644 source/dev/images/icons/application_error.png delete mode 100644 source/dev/images/icons/application_form.png delete mode 100644 source/dev/images/icons/application_form_add.png delete mode 100644 source/dev/images/icons/application_form_delete.png delete mode 100644 source/dev/images/icons/application_form_edit.png delete mode 100644 source/dev/images/icons/application_form_magnify.png delete mode 100644 source/dev/images/icons/application_get.png delete mode 100644 source/dev/images/icons/application_go.png delete mode 100644 source/dev/images/icons/application_home.png delete mode 100644 source/dev/images/icons/application_key.png delete mode 100644 source/dev/images/icons/application_lightning.png delete mode 100644 source/dev/images/icons/application_link.png delete mode 100644 source/dev/images/icons/application_osx.png delete mode 100644 source/dev/images/icons/application_osx_terminal.png delete mode 100644 source/dev/images/icons/application_put.png delete mode 100644 source/dev/images/icons/application_side_boxes.png delete mode 100644 source/dev/images/icons/application_side_contract.png delete mode 100644 source/dev/images/icons/application_side_expand.png delete mode 100644 source/dev/images/icons/application_side_list.png delete mode 100644 source/dev/images/icons/application_side_tree.png delete mode 100644 source/dev/images/icons/application_split.png delete mode 100644 source/dev/images/icons/application_tile_horizontal.png delete mode 100644 source/dev/images/icons/application_tile_vertical.png delete mode 100644 source/dev/images/icons/application_view_columns.png delete mode 100644 source/dev/images/icons/application_view_detail.png delete mode 100644 source/dev/images/icons/application_view_gallery.png delete mode 100644 source/dev/images/icons/application_view_icons.png delete mode 100644 source/dev/images/icons/application_view_list.png delete mode 100644 source/dev/images/icons/application_view_tile.png delete mode 100644 source/dev/images/icons/application_xp.png delete mode 100644 source/dev/images/icons/application_xp_terminal.png delete mode 100644 source/dev/images/icons/arrow_branch.png delete mode 100644 source/dev/images/icons/arrow_divide.png delete mode 100644 source/dev/images/icons/arrow_down.png delete mode 100644 source/dev/images/icons/arrow_in.png delete mode 100644 source/dev/images/icons/arrow_inout.png delete mode 100644 source/dev/images/icons/arrow_join.png delete mode 100644 source/dev/images/icons/arrow_left.png delete mode 100644 source/dev/images/icons/arrow_merge.png delete mode 100644 source/dev/images/icons/arrow_out.png delete mode 100644 source/dev/images/icons/arrow_redo.png delete mode 100644 source/dev/images/icons/arrow_refresh.png delete mode 100644 source/dev/images/icons/arrow_refresh_small.png delete mode 100644 source/dev/images/icons/arrow_right.png delete mode 100644 source/dev/images/icons/arrow_rotate_anticlockwise.png delete mode 100644 source/dev/images/icons/arrow_rotate_clockwise.png delete mode 100644 source/dev/images/icons/arrow_switch.png delete mode 100644 source/dev/images/icons/arrow_turn_left.png delete mode 100644 source/dev/images/icons/arrow_turn_right.png delete mode 100644 source/dev/images/icons/arrow_undo.png delete mode 100644 source/dev/images/icons/arrow_up.png delete mode 100644 source/dev/images/icons/asterisk_orange.png delete mode 100644 source/dev/images/icons/asterisk_yellow.png delete mode 100644 source/dev/images/icons/attach.png delete mode 100644 source/dev/images/icons/award_star_add.png delete mode 100644 source/dev/images/icons/award_star_bronze_1.png delete mode 100644 source/dev/images/icons/award_star_bronze_2.png delete mode 100644 source/dev/images/icons/award_star_bronze_3.png delete mode 100644 source/dev/images/icons/award_star_delete.png delete mode 100644 source/dev/images/icons/award_star_gold_1.png delete mode 100644 source/dev/images/icons/award_star_gold_2.png delete mode 100644 source/dev/images/icons/award_star_gold_3.png delete mode 100644 source/dev/images/icons/award_star_silver_1.png delete mode 100644 source/dev/images/icons/award_star_silver_2.png delete mode 100644 source/dev/images/icons/award_star_silver_3.png delete mode 100644 source/dev/images/icons/basket.png delete mode 100644 source/dev/images/icons/basket_add.png delete mode 100644 source/dev/images/icons/basket_delete.png delete mode 100644 source/dev/images/icons/basket_edit.png delete mode 100644 source/dev/images/icons/basket_error.png delete mode 100644 source/dev/images/icons/basket_go.png delete mode 100644 source/dev/images/icons/basket_put.png delete mode 100644 source/dev/images/icons/basket_remove.png delete mode 100644 source/dev/images/icons/bell.png delete mode 100644 source/dev/images/icons/bell_add.png delete mode 100644 source/dev/images/icons/bell_delete.png delete mode 100644 source/dev/images/icons/bell_error.png delete mode 100644 source/dev/images/icons/bell_go.png delete mode 100644 source/dev/images/icons/bell_link.png delete mode 100644 source/dev/images/icons/bin.png delete mode 100644 source/dev/images/icons/bin_closed.png delete mode 100644 source/dev/images/icons/bin_empty.png delete mode 100644 source/dev/images/icons/bomb.png delete mode 100644 source/dev/images/icons/book.png delete mode 100644 source/dev/images/icons/book_add.png delete mode 100644 source/dev/images/icons/book_addresses.png delete mode 100644 source/dev/images/icons/book_delete.png delete mode 100644 source/dev/images/icons/book_edit.png delete mode 100644 source/dev/images/icons/book_error.png delete mode 100644 source/dev/images/icons/book_go.png delete mode 100644 source/dev/images/icons/book_key.png delete mode 100644 source/dev/images/icons/book_link.png delete mode 100644 source/dev/images/icons/book_next.png delete mode 100644 source/dev/images/icons/book_open.png delete mode 100644 source/dev/images/icons/book_previous.png delete mode 100644 source/dev/images/icons/box.png delete mode 100644 source/dev/images/icons/brick.png delete mode 100644 source/dev/images/icons/brick_add.png delete mode 100644 source/dev/images/icons/brick_delete.png delete mode 100644 source/dev/images/icons/brick_edit.png delete mode 100644 source/dev/images/icons/brick_error.png delete mode 100644 source/dev/images/icons/brick_go.png delete mode 100644 source/dev/images/icons/brick_link.png delete mode 100644 source/dev/images/icons/bricks.png delete mode 100644 source/dev/images/icons/briefcase.png delete mode 100644 source/dev/images/icons/bug.png delete mode 100644 source/dev/images/icons/bug_add.png delete mode 100644 source/dev/images/icons/bug_delete.png delete mode 100644 source/dev/images/icons/bug_edit.png delete mode 100644 source/dev/images/icons/bug_error.png delete mode 100644 source/dev/images/icons/bug_go.png delete mode 100644 source/dev/images/icons/bug_link.png delete mode 100644 source/dev/images/icons/building.png delete mode 100644 source/dev/images/icons/building_add.png delete mode 100644 source/dev/images/icons/building_delete.png delete mode 100644 source/dev/images/icons/building_edit.png delete mode 100644 source/dev/images/icons/building_error.png delete mode 100644 source/dev/images/icons/building_go.png delete mode 100644 source/dev/images/icons/building_key.png delete mode 100644 source/dev/images/icons/building_link.png delete mode 100644 source/dev/images/icons/bullet_add.png delete mode 100644 source/dev/images/icons/bullet_arrow_bottom.png delete mode 100644 source/dev/images/icons/bullet_arrow_down.png delete mode 100644 source/dev/images/icons/bullet_arrow_top.png delete mode 100644 source/dev/images/icons/bullet_arrow_up.png delete mode 100644 source/dev/images/icons/bullet_black.png delete mode 100644 source/dev/images/icons/bullet_blue.png delete mode 100644 source/dev/images/icons/bullet_delete.png delete mode 100644 source/dev/images/icons/bullet_disk.png delete mode 100644 source/dev/images/icons/bullet_error.png delete mode 100644 source/dev/images/icons/bullet_feed.png delete mode 100644 source/dev/images/icons/bullet_go.png delete mode 100644 source/dev/images/icons/bullet_green.png delete mode 100644 source/dev/images/icons/bullet_key.png delete mode 100644 source/dev/images/icons/bullet_orange.png delete mode 100644 source/dev/images/icons/bullet_picture.png delete mode 100644 source/dev/images/icons/bullet_pink.png delete mode 100644 source/dev/images/icons/bullet_purple.png delete mode 100644 source/dev/images/icons/bullet_red.png delete mode 100644 source/dev/images/icons/bullet_star.png delete mode 100644 source/dev/images/icons/bullet_toggle_minus.png delete mode 100644 source/dev/images/icons/bullet_toggle_plus.png delete mode 100644 source/dev/images/icons/bullet_white.png delete mode 100644 source/dev/images/icons/bullet_wrench.png delete mode 100644 source/dev/images/icons/bullet_yellow.png delete mode 100644 source/dev/images/icons/cake.png delete mode 100644 source/dev/images/icons/calculator.png delete mode 100644 source/dev/images/icons/calculator_add.png delete mode 100644 source/dev/images/icons/calculator_delete.png delete mode 100644 source/dev/images/icons/calculator_edit.png delete mode 100644 source/dev/images/icons/calculator_error.png delete mode 100644 source/dev/images/icons/calculator_link.png delete mode 100644 source/dev/images/icons/calendar.png delete mode 100644 source/dev/images/icons/calendar_add.png delete mode 100644 source/dev/images/icons/calendar_delete.png delete mode 100644 source/dev/images/icons/calendar_edit.png delete mode 100644 source/dev/images/icons/calendar_link.png delete mode 100644 source/dev/images/icons/calendar_view_day.png delete mode 100644 source/dev/images/icons/calendar_view_month.png delete mode 100644 source/dev/images/icons/calendar_view_week.png delete mode 100644 source/dev/images/icons/camera.png delete mode 100644 source/dev/images/icons/camera_add.png delete mode 100644 source/dev/images/icons/camera_delete.png delete mode 100644 source/dev/images/icons/camera_edit.png delete mode 100644 source/dev/images/icons/camera_error.png delete mode 100644 source/dev/images/icons/camera_go.png delete mode 100644 source/dev/images/icons/camera_link.png delete mode 100644 source/dev/images/icons/camera_small.png delete mode 100644 source/dev/images/icons/cancel.png delete mode 100644 source/dev/images/icons/car.png delete mode 100644 source/dev/images/icons/car_add.png delete mode 100644 source/dev/images/icons/car_delete.png delete mode 100644 source/dev/images/icons/cart.png delete mode 100644 source/dev/images/icons/cart_add.png delete mode 100644 source/dev/images/icons/cart_delete.png delete mode 100644 source/dev/images/icons/cart_edit.png delete mode 100644 source/dev/images/icons/cart_error.png delete mode 100644 source/dev/images/icons/cart_go.png delete mode 100644 source/dev/images/icons/cart_put.png delete mode 100644 source/dev/images/icons/cart_remove.png delete mode 100644 source/dev/images/icons/cd.png delete mode 100644 source/dev/images/icons/cd_add.png delete mode 100644 source/dev/images/icons/cd_burn.png delete mode 100644 source/dev/images/icons/cd_delete.png delete mode 100644 source/dev/images/icons/cd_edit.png delete mode 100644 source/dev/images/icons/cd_eject.png delete mode 100644 source/dev/images/icons/cd_go.png delete mode 100644 source/dev/images/icons/chart_bar.png delete mode 100644 source/dev/images/icons/chart_bar_add.png delete mode 100644 source/dev/images/icons/chart_bar_delete.png delete mode 100644 source/dev/images/icons/chart_bar_edit.png delete mode 100644 source/dev/images/icons/chart_bar_error.png delete mode 100644 source/dev/images/icons/chart_bar_link.png delete mode 100644 source/dev/images/icons/chart_curve.png delete mode 100644 source/dev/images/icons/chart_curve_add.png delete mode 100644 source/dev/images/icons/chart_curve_delete.png delete mode 100644 source/dev/images/icons/chart_curve_edit.png delete mode 100644 source/dev/images/icons/chart_curve_error.png delete mode 100644 source/dev/images/icons/chart_curve_go.png delete mode 100644 source/dev/images/icons/chart_curve_link.png delete mode 100644 source/dev/images/icons/chart_line.png delete mode 100644 source/dev/images/icons/chart_line_add.png delete mode 100644 source/dev/images/icons/chart_line_delete.png delete mode 100644 source/dev/images/icons/chart_line_edit.png delete mode 100644 source/dev/images/icons/chart_line_error.png delete mode 100644 source/dev/images/icons/chart_line_link.png delete mode 100644 source/dev/images/icons/chart_organisation.png delete mode 100644 source/dev/images/icons/chart_organisation_add.png delete mode 100644 source/dev/images/icons/chart_organisation_delete.png delete mode 100644 source/dev/images/icons/chart_pie.png delete mode 100644 source/dev/images/icons/chart_pie_add.png delete mode 100644 source/dev/images/icons/chart_pie_delete.png delete mode 100644 source/dev/images/icons/chart_pie_edit.png delete mode 100644 source/dev/images/icons/chart_pie_error.png delete mode 100644 source/dev/images/icons/chart_pie_link.png delete mode 100644 source/dev/images/icons/clock.png delete mode 100644 source/dev/images/icons/clock_add.png delete mode 100644 source/dev/images/icons/clock_delete.png delete mode 100644 source/dev/images/icons/clock_edit.png delete mode 100644 source/dev/images/icons/clock_error.png delete mode 100644 source/dev/images/icons/clock_go.png delete mode 100644 source/dev/images/icons/clock_link.png delete mode 100644 source/dev/images/icons/clock_pause.png delete mode 100644 source/dev/images/icons/clock_play.png delete mode 100644 source/dev/images/icons/clock_red.png delete mode 100644 source/dev/images/icons/clock_stop.png delete mode 100644 source/dev/images/icons/cog.png delete mode 100644 source/dev/images/icons/cog_add.png delete mode 100644 source/dev/images/icons/cog_delete.png delete mode 100644 source/dev/images/icons/cog_edit.png delete mode 100644 source/dev/images/icons/cog_error.png delete mode 100644 source/dev/images/icons/cog_go.png delete mode 100644 source/dev/images/icons/coins.png delete mode 100644 source/dev/images/icons/coins_add.png delete mode 100644 source/dev/images/icons/coins_delete.png delete mode 100644 source/dev/images/icons/color_swatch.png delete mode 100644 source/dev/images/icons/color_wheel.png delete mode 100644 source/dev/images/icons/comment.png delete mode 100644 source/dev/images/icons/comment_add.png delete mode 100644 source/dev/images/icons/comment_delete.png delete mode 100644 source/dev/images/icons/comment_edit.png delete mode 100644 source/dev/images/icons/comments.png delete mode 100644 source/dev/images/icons/comments_add.png delete mode 100644 source/dev/images/icons/comments_delete.png delete mode 100644 source/dev/images/icons/compress.png delete mode 100644 source/dev/images/icons/computer.png delete mode 100644 source/dev/images/icons/computer_add.png delete mode 100644 source/dev/images/icons/computer_delete.png delete mode 100644 source/dev/images/icons/computer_edit.png delete mode 100644 source/dev/images/icons/computer_error.png delete mode 100644 source/dev/images/icons/computer_go.png delete mode 100644 source/dev/images/icons/computer_key.png delete mode 100644 source/dev/images/icons/computer_link.png delete mode 100644 source/dev/images/icons/connect.png delete mode 100644 source/dev/images/icons/contrast.png delete mode 100644 source/dev/images/icons/contrast_decrease.png delete mode 100644 source/dev/images/icons/contrast_high.png delete mode 100644 source/dev/images/icons/contrast_increase.png delete mode 100644 source/dev/images/icons/contrast_low.png delete mode 100644 source/dev/images/icons/control_eject.png delete mode 100644 source/dev/images/icons/control_eject_blue.png delete mode 100644 source/dev/images/icons/control_end.png delete mode 100644 source/dev/images/icons/control_end_blue.png delete mode 100644 source/dev/images/icons/control_equalizer.png delete mode 100644 source/dev/images/icons/control_equalizer_blue.png delete mode 100644 source/dev/images/icons/control_fastforward.png delete mode 100644 source/dev/images/icons/control_fastforward_blue.png delete mode 100644 source/dev/images/icons/control_pause.png delete mode 100644 source/dev/images/icons/control_pause_blue.png delete mode 100644 source/dev/images/icons/control_play.png delete mode 100644 source/dev/images/icons/control_play_blue.png delete mode 100644 source/dev/images/icons/control_repeat.png delete mode 100644 source/dev/images/icons/control_repeat_blue.png delete mode 100644 source/dev/images/icons/control_rewind.png delete mode 100644 source/dev/images/icons/control_rewind_blue.png delete mode 100644 source/dev/images/icons/control_start.png delete mode 100644 source/dev/images/icons/control_start_blue.png delete mode 100644 source/dev/images/icons/control_stop.png delete mode 100644 source/dev/images/icons/control_stop_blue.png delete mode 100644 source/dev/images/icons/controller.png delete mode 100644 source/dev/images/icons/controller_add.png delete mode 100644 source/dev/images/icons/controller_delete.png delete mode 100644 source/dev/images/icons/controller_error.png delete mode 100644 source/dev/images/icons/creditcards.png delete mode 100644 source/dev/images/icons/cross.png delete mode 100644 source/dev/images/icons/css.png delete mode 100644 source/dev/images/icons/css_add.png delete mode 100644 source/dev/images/icons/css_delete.png delete mode 100644 source/dev/images/icons/css_go.png delete mode 100644 source/dev/images/icons/css_valid.png delete mode 100644 source/dev/images/icons/cup.png delete mode 100644 source/dev/images/icons/cup_add.png delete mode 100644 source/dev/images/icons/cup_delete.png delete mode 100644 source/dev/images/icons/cup_edit.png delete mode 100644 source/dev/images/icons/cup_error.png delete mode 100644 source/dev/images/icons/cup_go.png delete mode 100644 source/dev/images/icons/cup_key.png delete mode 100644 source/dev/images/icons/cup_link.png delete mode 100644 source/dev/images/icons/cursor.png delete mode 100644 source/dev/images/icons/cut.png delete mode 100644 source/dev/images/icons/cut_red.png delete mode 100644 source/dev/images/icons/database.png delete mode 100644 source/dev/images/icons/database_add.png delete mode 100644 source/dev/images/icons/database_connect.png delete mode 100644 source/dev/images/icons/database_delete.png delete mode 100644 source/dev/images/icons/database_edit.png delete mode 100644 source/dev/images/icons/database_error.png delete mode 100644 source/dev/images/icons/database_gear.png delete mode 100644 source/dev/images/icons/database_go.png delete mode 100644 source/dev/images/icons/database_key.png delete mode 100644 source/dev/images/icons/database_lightning.png delete mode 100644 source/dev/images/icons/database_link.png delete mode 100644 source/dev/images/icons/database_refresh.png delete mode 100644 source/dev/images/icons/database_save.png delete mode 100644 source/dev/images/icons/database_table.png delete mode 100644 source/dev/images/icons/date.png delete mode 100644 source/dev/images/icons/date_add.png delete mode 100644 source/dev/images/icons/date_delete.png delete mode 100644 source/dev/images/icons/date_edit.png delete mode 100644 source/dev/images/icons/date_error.png delete mode 100644 source/dev/images/icons/date_go.png delete mode 100644 source/dev/images/icons/date_link.png delete mode 100644 source/dev/images/icons/date_magnify.png delete mode 100644 source/dev/images/icons/date_next.png delete mode 100644 source/dev/images/icons/date_previous.png delete mode 100644 source/dev/images/icons/delete.png delete mode 100644 source/dev/images/icons/disconnect.png delete mode 100644 source/dev/images/icons/disk.png delete mode 100644 source/dev/images/icons/disk_multiple.png delete mode 100644 source/dev/images/icons/door.png delete mode 100644 source/dev/images/icons/door_in.png delete mode 100644 source/dev/images/icons/door_open.png delete mode 100644 source/dev/images/icons/door_out.png delete mode 100644 source/dev/images/icons/drink.png delete mode 100644 source/dev/images/icons/drink_empty.png delete mode 100644 source/dev/images/icons/drive.png delete mode 100644 source/dev/images/icons/drive_add.png delete mode 100644 source/dev/images/icons/drive_burn.png delete mode 100644 source/dev/images/icons/drive_cd.png delete mode 100644 source/dev/images/icons/drive_cd_empty.png delete mode 100644 source/dev/images/icons/drive_delete.png delete mode 100644 source/dev/images/icons/drive_disk.png delete mode 100644 source/dev/images/icons/drive_edit.png delete mode 100644 source/dev/images/icons/drive_error.png delete mode 100644 source/dev/images/icons/drive_go.png delete mode 100644 source/dev/images/icons/drive_key.png delete mode 100644 source/dev/images/icons/drive_link.png delete mode 100644 source/dev/images/icons/drive_magnify.png delete mode 100644 source/dev/images/icons/drive_network.png delete mode 100644 source/dev/images/icons/drive_rename.png delete mode 100644 source/dev/images/icons/drive_user.png delete mode 100644 source/dev/images/icons/drive_web.png delete mode 100644 source/dev/images/icons/dvd.png delete mode 100644 source/dev/images/icons/dvd_add.png delete mode 100644 source/dev/images/icons/dvd_delete.png delete mode 100644 source/dev/images/icons/dvd_edit.png delete mode 100644 source/dev/images/icons/dvd_error.png delete mode 100644 source/dev/images/icons/dvd_go.png delete mode 100644 source/dev/images/icons/dvd_key.png delete mode 100644 source/dev/images/icons/dvd_link.png delete mode 100644 source/dev/images/icons/email.png delete mode 100644 source/dev/images/icons/email_add.png delete mode 100644 source/dev/images/icons/email_attach.png delete mode 100644 source/dev/images/icons/email_delete.png delete mode 100644 source/dev/images/icons/email_edit.png delete mode 100644 source/dev/images/icons/email_error.png delete mode 100644 source/dev/images/icons/email_go.png delete mode 100644 source/dev/images/icons/email_link.png delete mode 100644 source/dev/images/icons/email_open.png delete mode 100644 source/dev/images/icons/email_open_image.png delete mode 100644 source/dev/images/icons/emoticon_evilgrin.png delete mode 100644 source/dev/images/icons/emoticon_grin.png delete mode 100644 source/dev/images/icons/emoticon_happy.png delete mode 100644 source/dev/images/icons/emoticon_smile.png delete mode 100644 source/dev/images/icons/emoticon_surprised.png delete mode 100644 source/dev/images/icons/emoticon_tongue.png delete mode 100644 source/dev/images/icons/emoticon_unhappy.png delete mode 100644 source/dev/images/icons/emoticon_waii.png delete mode 100644 source/dev/images/icons/emoticon_wink.png delete mode 100644 source/dev/images/icons/error.png delete mode 100644 source/dev/images/icons/error_add.png delete mode 100644 source/dev/images/icons/error_delete.png delete mode 100644 source/dev/images/icons/error_go.png delete mode 100644 source/dev/images/icons/exclamation.png delete mode 100644 source/dev/images/icons/eye.png delete mode 100644 source/dev/images/icons/feed.png delete mode 100644 source/dev/images/icons/feed_add.png delete mode 100644 source/dev/images/icons/feed_delete.png delete mode 100644 source/dev/images/icons/feed_disk.png delete mode 100644 source/dev/images/icons/feed_edit.png delete mode 100644 source/dev/images/icons/feed_error.png delete mode 100644 source/dev/images/icons/feed_go.png delete mode 100644 source/dev/images/icons/feed_key.png delete mode 100644 source/dev/images/icons/feed_link.png delete mode 100644 source/dev/images/icons/feed_magnify.png delete mode 100644 source/dev/images/icons/female.png delete mode 100644 source/dev/images/icons/film.png delete mode 100644 source/dev/images/icons/film_add.png delete mode 100644 source/dev/images/icons/film_delete.png delete mode 100644 source/dev/images/icons/film_edit.png delete mode 100644 source/dev/images/icons/film_error.png delete mode 100644 source/dev/images/icons/film_go.png delete mode 100644 source/dev/images/icons/film_key.png delete mode 100644 source/dev/images/icons/film_link.png delete mode 100644 source/dev/images/icons/film_save.png delete mode 100644 source/dev/images/icons/find.png delete mode 100644 source/dev/images/icons/flag_blue.png delete mode 100644 source/dev/images/icons/flag_green.png delete mode 100644 source/dev/images/icons/flag_orange.png delete mode 100644 source/dev/images/icons/flag_pink.png delete mode 100644 source/dev/images/icons/flag_purple.png delete mode 100644 source/dev/images/icons/flag_red.png delete mode 100644 source/dev/images/icons/flag_yellow.png delete mode 100644 source/dev/images/icons/folder.png delete mode 100644 source/dev/images/icons/folder_add.png delete mode 100644 source/dev/images/icons/folder_bell.png delete mode 100644 source/dev/images/icons/folder_brick.png delete mode 100644 source/dev/images/icons/folder_bug.png delete mode 100644 source/dev/images/icons/folder_camera.png delete mode 100644 source/dev/images/icons/folder_database.png delete mode 100644 source/dev/images/icons/folder_delete.png delete mode 100644 source/dev/images/icons/folder_edit.png delete mode 100644 source/dev/images/icons/folder_error.png delete mode 100644 source/dev/images/icons/folder_explore.png delete mode 100644 source/dev/images/icons/folder_feed.png delete mode 100644 source/dev/images/icons/folder_find.png delete mode 100644 source/dev/images/icons/folder_go.png delete mode 100644 source/dev/images/icons/folder_heart.png delete mode 100644 source/dev/images/icons/folder_image.png delete mode 100644 source/dev/images/icons/folder_key.png delete mode 100644 source/dev/images/icons/folder_lightbulb.png delete mode 100644 source/dev/images/icons/folder_link.png delete mode 100644 source/dev/images/icons/folder_magnify.png delete mode 100644 source/dev/images/icons/folder_page.png delete mode 100644 source/dev/images/icons/folder_page_white.png delete mode 100644 source/dev/images/icons/folder_palette.png delete mode 100644 source/dev/images/icons/folder_picture.png delete mode 100644 source/dev/images/icons/folder_star.png delete mode 100644 source/dev/images/icons/folder_table.png delete mode 100644 source/dev/images/icons/folder_user.png delete mode 100644 source/dev/images/icons/folder_wrench.png delete mode 100644 source/dev/images/icons/font.png delete mode 100644 source/dev/images/icons/font_add.png delete mode 100644 source/dev/images/icons/font_delete.png delete mode 100644 source/dev/images/icons/font_go.png delete mode 100644 source/dev/images/icons/group.png delete mode 100644 source/dev/images/icons/group_add.png delete mode 100644 source/dev/images/icons/group_delete.png delete mode 100644 source/dev/images/icons/group_edit.png delete mode 100644 source/dev/images/icons/group_error.png delete mode 100644 source/dev/images/icons/group_gear.png delete mode 100644 source/dev/images/icons/group_go.png delete mode 100644 source/dev/images/icons/group_key.png delete mode 100644 source/dev/images/icons/group_link.png delete mode 100644 source/dev/images/icons/heart.png delete mode 100644 source/dev/images/icons/heart_add.png delete mode 100644 source/dev/images/icons/heart_delete.png delete mode 100644 source/dev/images/icons/help.png delete mode 100644 source/dev/images/icons/hourglass.png delete mode 100644 source/dev/images/icons/hourglass_add.png delete mode 100644 source/dev/images/icons/hourglass_delete.png delete mode 100644 source/dev/images/icons/hourglass_go.png delete mode 100644 source/dev/images/icons/hourglass_link.png delete mode 100644 source/dev/images/icons/house.png delete mode 100644 source/dev/images/icons/house_go.png delete mode 100644 source/dev/images/icons/house_link.png delete mode 100644 source/dev/images/icons/html.png delete mode 100644 source/dev/images/icons/html_add.png delete mode 100644 source/dev/images/icons/html_delete.png delete mode 100644 source/dev/images/icons/html_go.png delete mode 100644 source/dev/images/icons/html_valid.png delete mode 100644 source/dev/images/icons/image.png delete mode 100644 source/dev/images/icons/image_add.png delete mode 100644 source/dev/images/icons/image_delete.png delete mode 100644 source/dev/images/icons/image_edit.png delete mode 100644 source/dev/images/icons/image_link.png delete mode 100644 source/dev/images/icons/images.png delete mode 100644 source/dev/images/icons/information.png delete mode 100644 source/dev/images/icons/ipod.png delete mode 100644 source/dev/images/icons/ipod_cast.png delete mode 100644 source/dev/images/icons/ipod_cast_add.png delete mode 100644 source/dev/images/icons/ipod_cast_delete.png delete mode 100644 source/dev/images/icons/ipod_sound.png delete mode 100644 source/dev/images/icons/joystick.png delete mode 100644 source/dev/images/icons/joystick_add.png delete mode 100644 source/dev/images/icons/joystick_delete.png delete mode 100644 source/dev/images/icons/joystick_error.png delete mode 100644 source/dev/images/icons/key.png delete mode 100644 source/dev/images/icons/key_add.png delete mode 100644 source/dev/images/icons/key_delete.png delete mode 100644 source/dev/images/icons/key_go.png delete mode 100644 source/dev/images/icons/keyboard.png delete mode 100644 source/dev/images/icons/keyboard_add.png delete mode 100644 source/dev/images/icons/keyboard_delete.png delete mode 100644 source/dev/images/icons/keyboard_magnify.png delete mode 100644 source/dev/images/icons/layers.png delete mode 100644 source/dev/images/icons/layout.png delete mode 100644 source/dev/images/icons/layout_add.png delete mode 100644 source/dev/images/icons/layout_content.png delete mode 100644 source/dev/images/icons/layout_delete.png delete mode 100644 source/dev/images/icons/layout_edit.png delete mode 100644 source/dev/images/icons/layout_error.png delete mode 100644 source/dev/images/icons/layout_header.png delete mode 100644 source/dev/images/icons/layout_link.png delete mode 100644 source/dev/images/icons/layout_sidebar.png delete mode 100644 source/dev/images/icons/lightbulb.png delete mode 100644 source/dev/images/icons/lightbulb_add.png delete mode 100644 source/dev/images/icons/lightbulb_delete.png delete mode 100644 source/dev/images/icons/lightbulb_off.png delete mode 100644 source/dev/images/icons/lightning.png delete mode 100644 source/dev/images/icons/lightning_add.png delete mode 100644 source/dev/images/icons/lightning_delete.png delete mode 100644 source/dev/images/icons/lightning_go.png delete mode 100644 source/dev/images/icons/link.png delete mode 100644 source/dev/images/icons/link_add.png delete mode 100644 source/dev/images/icons/link_break.png delete mode 100644 source/dev/images/icons/link_delete.png delete mode 100644 source/dev/images/icons/link_edit.png delete mode 100644 source/dev/images/icons/link_error.png delete mode 100644 source/dev/images/icons/link_go.png delete mode 100644 source/dev/images/icons/lock.png delete mode 100644 source/dev/images/icons/lock_add.png delete mode 100644 source/dev/images/icons/lock_break.png delete mode 100644 source/dev/images/icons/lock_delete.png delete mode 100644 source/dev/images/icons/lock_edit.png delete mode 100644 source/dev/images/icons/lock_go.png delete mode 100644 source/dev/images/icons/lock_open.png delete mode 100644 source/dev/images/icons/lorry.png delete mode 100644 source/dev/images/icons/lorry_add.png delete mode 100644 source/dev/images/icons/lorry_delete.png delete mode 100644 source/dev/images/icons/lorry_error.png delete mode 100644 source/dev/images/icons/lorry_flatbed.png delete mode 100644 source/dev/images/icons/lorry_go.png delete mode 100644 source/dev/images/icons/lorry_link.png delete mode 100644 source/dev/images/icons/magifier_zoom_out.png delete mode 100644 source/dev/images/icons/magnifier.png delete mode 100644 source/dev/images/icons/magnifier_zoom_in.png delete mode 100644 source/dev/images/icons/male.png delete mode 100644 source/dev/images/icons/map.png delete mode 100644 source/dev/images/icons/map_add.png delete mode 100644 source/dev/images/icons/map_delete.png delete mode 100644 source/dev/images/icons/map_edit.png delete mode 100644 source/dev/images/icons/map_go.png delete mode 100644 source/dev/images/icons/map_magnify.png delete mode 100644 source/dev/images/icons/medal_bronze_1.png delete mode 100644 source/dev/images/icons/medal_bronze_2.png delete mode 100644 source/dev/images/icons/medal_bronze_3.png delete mode 100644 source/dev/images/icons/medal_bronze_add.png delete mode 100644 source/dev/images/icons/medal_bronze_delete.png delete mode 100644 source/dev/images/icons/medal_gold_1.png delete mode 100644 source/dev/images/icons/medal_gold_2.png delete mode 100644 source/dev/images/icons/medal_gold_3.png delete mode 100644 source/dev/images/icons/medal_gold_add.png delete mode 100644 source/dev/images/icons/medal_gold_delete.png delete mode 100644 source/dev/images/icons/medal_silver_1.png delete mode 100644 source/dev/images/icons/medal_silver_2.png delete mode 100644 source/dev/images/icons/medal_silver_3.png delete mode 100644 source/dev/images/icons/medal_silver_add.png delete mode 100644 source/dev/images/icons/medal_silver_delete.png delete mode 100644 source/dev/images/icons/money.png delete mode 100644 source/dev/images/icons/money_add.png delete mode 100644 source/dev/images/icons/money_delete.png delete mode 100644 source/dev/images/icons/money_dollar.png delete mode 100644 source/dev/images/icons/money_euro.png delete mode 100644 source/dev/images/icons/money_pound.png delete mode 100644 source/dev/images/icons/money_yen.png delete mode 100644 source/dev/images/icons/monitor.png delete mode 100644 source/dev/images/icons/monitor_add.png delete mode 100644 source/dev/images/icons/monitor_delete.png delete mode 100644 source/dev/images/icons/monitor_edit.png delete mode 100644 source/dev/images/icons/monitor_error.png delete mode 100644 source/dev/images/icons/monitor_go.png delete mode 100644 source/dev/images/icons/monitor_lightning.png delete mode 100644 source/dev/images/icons/monitor_link.png delete mode 100644 source/dev/images/icons/mouse.png delete mode 100644 source/dev/images/icons/mouse_add.png delete mode 100644 source/dev/images/icons/mouse_delete.png delete mode 100644 source/dev/images/icons/mouse_error.png delete mode 100644 source/dev/images/icons/music.png delete mode 100644 source/dev/images/icons/new.png delete mode 100644 source/dev/images/icons/newspaper.png delete mode 100644 source/dev/images/icons/newspaper_add.png delete mode 100644 source/dev/images/icons/newspaper_delete.png delete mode 100644 source/dev/images/icons/newspaper_go.png delete mode 100644 source/dev/images/icons/newspaper_link.png delete mode 100644 source/dev/images/icons/note.png delete mode 100644 source/dev/images/icons/note_add.png delete mode 100644 source/dev/images/icons/note_delete.png delete mode 100644 source/dev/images/icons/note_edit.png delete mode 100644 source/dev/images/icons/note_error.png delete mode 100644 source/dev/images/icons/note_go.png delete mode 100644 source/dev/images/icons/overlays.png delete mode 100644 source/dev/images/icons/package.png delete mode 100644 source/dev/images/icons/package_add.png delete mode 100644 source/dev/images/icons/package_delete.png delete mode 100644 source/dev/images/icons/package_go.png delete mode 100644 source/dev/images/icons/package_green.png delete mode 100644 source/dev/images/icons/package_link.png delete mode 100644 source/dev/images/icons/page.png delete mode 100644 source/dev/images/icons/page_add.png delete mode 100644 source/dev/images/icons/page_attach.png delete mode 100644 source/dev/images/icons/page_code.png delete mode 100644 source/dev/images/icons/page_copy.png delete mode 100644 source/dev/images/icons/page_delete.png delete mode 100644 source/dev/images/icons/page_edit.png delete mode 100644 source/dev/images/icons/page_error.png delete mode 100644 source/dev/images/icons/page_excel.png delete mode 100644 source/dev/images/icons/page_find.png delete mode 100644 source/dev/images/icons/page_gear.png delete mode 100644 source/dev/images/icons/page_go.png delete mode 100644 source/dev/images/icons/page_green.png delete mode 100644 source/dev/images/icons/page_key.png delete mode 100644 source/dev/images/icons/page_lightning.png delete mode 100644 source/dev/images/icons/page_link.png delete mode 100644 source/dev/images/icons/page_paintbrush.png delete mode 100644 source/dev/images/icons/page_paste.png delete mode 100644 source/dev/images/icons/page_red.png delete mode 100644 source/dev/images/icons/page_refresh.png delete mode 100644 source/dev/images/icons/page_save.png delete mode 100644 source/dev/images/icons/page_white.png delete mode 100644 source/dev/images/icons/page_white_acrobat.png delete mode 100644 source/dev/images/icons/page_white_actionscript.png delete mode 100644 source/dev/images/icons/page_white_add.png delete mode 100644 source/dev/images/icons/page_white_c.png delete mode 100644 source/dev/images/icons/page_white_camera.png delete mode 100644 source/dev/images/icons/page_white_cd.png delete mode 100644 source/dev/images/icons/page_white_code.png delete mode 100644 source/dev/images/icons/page_white_code_red.png delete mode 100644 source/dev/images/icons/page_white_coldfusion.png delete mode 100644 source/dev/images/icons/page_white_compressed.png delete mode 100644 source/dev/images/icons/page_white_copy.png delete mode 100644 source/dev/images/icons/page_white_cplusplus.png delete mode 100644 source/dev/images/icons/page_white_csharp.png delete mode 100644 source/dev/images/icons/page_white_cup.png delete mode 100644 source/dev/images/icons/page_white_database.png delete mode 100644 source/dev/images/icons/page_white_delete.png delete mode 100644 source/dev/images/icons/page_white_dvd.png delete mode 100644 source/dev/images/icons/page_white_edit.png delete mode 100644 source/dev/images/icons/page_white_error.png delete mode 100644 source/dev/images/icons/page_white_excel.png delete mode 100644 source/dev/images/icons/page_white_find.png delete mode 100644 source/dev/images/icons/page_white_flash.png delete mode 100644 source/dev/images/icons/page_white_freehand.png delete mode 100644 source/dev/images/icons/page_white_gear.png delete mode 100644 source/dev/images/icons/page_white_get.png delete mode 100644 source/dev/images/icons/page_white_go.png delete mode 100644 source/dev/images/icons/page_white_h.png delete mode 100644 source/dev/images/icons/page_white_horizontal.png delete mode 100644 source/dev/images/icons/page_white_key.png delete mode 100644 source/dev/images/icons/page_white_lightning.png delete mode 100644 source/dev/images/icons/page_white_link.png delete mode 100644 source/dev/images/icons/page_white_magnify.png delete mode 100644 source/dev/images/icons/page_white_medal.png delete mode 100644 source/dev/images/icons/page_white_office.png delete mode 100644 source/dev/images/icons/page_white_paint.png delete mode 100644 source/dev/images/icons/page_white_paintbrush.png delete mode 100644 source/dev/images/icons/page_white_paste.png delete mode 100644 source/dev/images/icons/page_white_php.png delete mode 100644 source/dev/images/icons/page_white_picture.png delete mode 100644 source/dev/images/icons/page_white_powerpoint.png delete mode 100644 source/dev/images/icons/page_white_put.png delete mode 100644 source/dev/images/icons/page_white_ruby.png delete mode 100644 source/dev/images/icons/page_white_stack.png delete mode 100644 source/dev/images/icons/page_white_star.png delete mode 100644 source/dev/images/icons/page_white_swoosh.png delete mode 100644 source/dev/images/icons/page_white_text.png delete mode 100644 source/dev/images/icons/page_white_text_width.png delete mode 100644 source/dev/images/icons/page_white_tux.png delete mode 100644 source/dev/images/icons/page_white_vector.png delete mode 100644 source/dev/images/icons/page_white_visualstudio.png delete mode 100644 source/dev/images/icons/page_white_width.png delete mode 100644 source/dev/images/icons/page_white_word.png delete mode 100644 source/dev/images/icons/page_white_world.png delete mode 100644 source/dev/images/icons/page_white_wrench.png delete mode 100644 source/dev/images/icons/page_white_zip.png delete mode 100644 source/dev/images/icons/page_word.png delete mode 100644 source/dev/images/icons/page_world.png delete mode 100644 source/dev/images/icons/paintbrush.png delete mode 100644 source/dev/images/icons/paintcan.png delete mode 100644 source/dev/images/icons/palette.png delete mode 100644 source/dev/images/icons/paste_plain.png delete mode 100644 source/dev/images/icons/paste_word.png delete mode 100644 source/dev/images/icons/pencil.png delete mode 100644 source/dev/images/icons/pencil_add.png delete mode 100644 source/dev/images/icons/pencil_delete.png delete mode 100644 source/dev/images/icons/pencil_go.png delete mode 100644 source/dev/images/icons/phone.png delete mode 100644 source/dev/images/icons/phone_add.png delete mode 100644 source/dev/images/icons/phone_delete.png delete mode 100644 source/dev/images/icons/phone_sound.png delete mode 100644 source/dev/images/icons/photo.png delete mode 100644 source/dev/images/icons/photo_add.png delete mode 100644 source/dev/images/icons/photo_delete.png delete mode 100644 source/dev/images/icons/photo_link.png delete mode 100644 source/dev/images/icons/photos.png delete mode 100644 source/dev/images/icons/picture.png delete mode 100644 source/dev/images/icons/picture_add.png delete mode 100644 source/dev/images/icons/picture_delete.png delete mode 100644 source/dev/images/icons/picture_edit.png delete mode 100644 source/dev/images/icons/picture_empty.png delete mode 100644 source/dev/images/icons/picture_error.png delete mode 100644 source/dev/images/icons/picture_go.png delete mode 100644 source/dev/images/icons/picture_key.png delete mode 100644 source/dev/images/icons/picture_link.png delete mode 100644 source/dev/images/icons/picture_save.png delete mode 100644 source/dev/images/icons/pictures.png delete mode 100644 source/dev/images/icons/pilcrow.png delete mode 100644 source/dev/images/icons/pill.png delete mode 100644 source/dev/images/icons/pill_add.png delete mode 100644 source/dev/images/icons/pill_delete.png delete mode 100644 source/dev/images/icons/pill_go.png delete mode 100644 source/dev/images/icons/plugin.png delete mode 100644 source/dev/images/icons/plugin_add.png delete mode 100644 source/dev/images/icons/plugin_delete.png delete mode 100644 source/dev/images/icons/plugin_disabled.png delete mode 100644 source/dev/images/icons/plugin_edit.png delete mode 100644 source/dev/images/icons/plugin_error.png delete mode 100644 source/dev/images/icons/plugin_go.png delete mode 100644 source/dev/images/icons/plugin_link.png delete mode 100644 source/dev/images/icons/printer.png delete mode 100644 source/dev/images/icons/printer_add.png delete mode 100644 source/dev/images/icons/printer_delete.png delete mode 100644 source/dev/images/icons/printer_empty.png delete mode 100644 source/dev/images/icons/printer_error.png delete mode 100644 source/dev/images/icons/rainbow.png delete mode 100644 source/dev/images/icons/report.png delete mode 100644 source/dev/images/icons/report_add.png delete mode 100644 source/dev/images/icons/report_delete.png delete mode 100644 source/dev/images/icons/report_disk.png delete mode 100644 source/dev/images/icons/report_edit.png delete mode 100644 source/dev/images/icons/report_go.png delete mode 100644 source/dev/images/icons/report_key.png delete mode 100644 source/dev/images/icons/report_link.png delete mode 100644 source/dev/images/icons/report_magnify.png delete mode 100644 source/dev/images/icons/report_picture.png delete mode 100644 source/dev/images/icons/report_user.png delete mode 100644 source/dev/images/icons/report_word.png delete mode 100644 source/dev/images/icons/resultset_first.png delete mode 100644 source/dev/images/icons/resultset_last.png delete mode 100644 source/dev/images/icons/resultset_next.png delete mode 100644 source/dev/images/icons/resultset_previous.png delete mode 100644 source/dev/images/icons/rosette.png delete mode 100644 source/dev/images/icons/rss.png delete mode 100644 source/dev/images/icons/rss_add.png delete mode 100644 source/dev/images/icons/rss_delete.png delete mode 100644 source/dev/images/icons/rss_go.png delete mode 100644 source/dev/images/icons/rss_valid.png delete mode 100644 source/dev/images/icons/ruby.png delete mode 100644 source/dev/images/icons/ruby_add.png delete mode 100644 source/dev/images/icons/ruby_delete.png delete mode 100644 source/dev/images/icons/ruby_gear.png delete mode 100644 source/dev/images/icons/ruby_get.png delete mode 100644 source/dev/images/icons/ruby_go.png delete mode 100644 source/dev/images/icons/ruby_key.png delete mode 100644 source/dev/images/icons/ruby_link.png delete mode 100644 source/dev/images/icons/ruby_put.png delete mode 100644 source/dev/images/icons/script.png delete mode 100644 source/dev/images/icons/script_add.png delete mode 100644 source/dev/images/icons/script_code.png delete mode 100644 source/dev/images/icons/script_code_red.png delete mode 100644 source/dev/images/icons/script_delete.png delete mode 100644 source/dev/images/icons/script_edit.png delete mode 100644 source/dev/images/icons/script_error.png delete mode 100644 source/dev/images/icons/script_gear.png delete mode 100644 source/dev/images/icons/script_go.png delete mode 100644 source/dev/images/icons/script_key.png delete mode 100644 source/dev/images/icons/script_lightning.png delete mode 100644 source/dev/images/icons/script_link.png delete mode 100644 source/dev/images/icons/script_palette.png delete mode 100644 source/dev/images/icons/script_save.png delete mode 100644 source/dev/images/icons/server.png delete mode 100644 source/dev/images/icons/server_add.png delete mode 100644 source/dev/images/icons/server_chart.png delete mode 100644 source/dev/images/icons/server_compressed.png delete mode 100644 source/dev/images/icons/server_connect.png delete mode 100644 source/dev/images/icons/server_database.png delete mode 100644 source/dev/images/icons/server_delete.png delete mode 100644 source/dev/images/icons/server_edit.png delete mode 100644 source/dev/images/icons/server_error.png delete mode 100644 source/dev/images/icons/server_go.png delete mode 100644 source/dev/images/icons/server_key.png delete mode 100644 source/dev/images/icons/server_lightning.png delete mode 100644 source/dev/images/icons/server_link.png delete mode 100644 source/dev/images/icons/server_uncompressed.png delete mode 100644 source/dev/images/icons/shading.png delete mode 100644 source/dev/images/icons/shape_align_bottom.png delete mode 100644 source/dev/images/icons/shape_align_center.png delete mode 100644 source/dev/images/icons/shape_align_left.png delete mode 100644 source/dev/images/icons/shape_align_middle.png delete mode 100644 source/dev/images/icons/shape_align_right.png delete mode 100644 source/dev/images/icons/shape_align_top.png delete mode 100644 source/dev/images/icons/shape_flip_horizontal.png delete mode 100644 source/dev/images/icons/shape_flip_vertical.png delete mode 100644 source/dev/images/icons/shape_group.png delete mode 100644 source/dev/images/icons/shape_handles.png delete mode 100644 source/dev/images/icons/shape_move_back.png delete mode 100644 source/dev/images/icons/shape_move_backwards.png delete mode 100644 source/dev/images/icons/shape_move_forwards.png delete mode 100644 source/dev/images/icons/shape_move_front.png delete mode 100644 source/dev/images/icons/shape_rotate_anticlockwise.png delete mode 100644 source/dev/images/icons/shape_rotate_clockwise.png delete mode 100644 source/dev/images/icons/shape_square.png delete mode 100644 source/dev/images/icons/shape_square_add.png delete mode 100644 source/dev/images/icons/shape_square_delete.png delete mode 100644 source/dev/images/icons/shape_square_edit.png delete mode 100644 source/dev/images/icons/shape_square_error.png delete mode 100644 source/dev/images/icons/shape_square_go.png delete mode 100644 source/dev/images/icons/shape_square_key.png delete mode 100644 source/dev/images/icons/shape_square_link.png delete mode 100644 source/dev/images/icons/shape_ungroup.png delete mode 100644 source/dev/images/icons/shield.png delete mode 100644 source/dev/images/icons/shield_add.png delete mode 100644 source/dev/images/icons/shield_delete.png delete mode 100644 source/dev/images/icons/shield_go.png delete mode 100644 source/dev/images/icons/sitemap.png delete mode 100644 source/dev/images/icons/sitemap_color.png delete mode 100644 source/dev/images/icons/sound.png delete mode 100644 source/dev/images/icons/sound_add.png delete mode 100644 source/dev/images/icons/sound_delete.png delete mode 100644 source/dev/images/icons/sound_low.png delete mode 100644 source/dev/images/icons/sound_mute.png delete mode 100644 source/dev/images/icons/sound_none.png delete mode 100644 source/dev/images/icons/spellcheck.png delete mode 100644 source/dev/images/icons/sport_8ball.png delete mode 100644 source/dev/images/icons/sport_basketball.png delete mode 100644 source/dev/images/icons/sport_football.png delete mode 100644 source/dev/images/icons/sport_golf.png delete mode 100644 source/dev/images/icons/sport_raquet.png delete mode 100644 source/dev/images/icons/sport_shuttlecock.png delete mode 100644 source/dev/images/icons/sport_soccer.png delete mode 100644 source/dev/images/icons/sport_tennis.png delete mode 100644 source/dev/images/icons/star.png delete mode 100644 source/dev/images/icons/status_away.png delete mode 100644 source/dev/images/icons/status_busy.png delete mode 100644 source/dev/images/icons/status_offline.png delete mode 100644 source/dev/images/icons/status_online.png delete mode 100644 source/dev/images/icons/stop.png delete mode 100644 source/dev/images/icons/style.png delete mode 100644 source/dev/images/icons/style_add.png delete mode 100644 source/dev/images/icons/style_delete.png delete mode 100644 source/dev/images/icons/style_edit.png delete mode 100644 source/dev/images/icons/style_go.png delete mode 100644 source/dev/images/icons/sum.png delete mode 100644 source/dev/images/icons/tab.png delete mode 100644 source/dev/images/icons/tab_add.png delete mode 100644 source/dev/images/icons/tab_delete.png delete mode 100644 source/dev/images/icons/tab_edit.png delete mode 100644 source/dev/images/icons/tab_go.png delete mode 100644 source/dev/images/icons/table.png delete mode 100644 source/dev/images/icons/table_add.png delete mode 100644 source/dev/images/icons/table_delete.png delete mode 100644 source/dev/images/icons/table_edit.png delete mode 100644 source/dev/images/icons/table_error.png delete mode 100644 source/dev/images/icons/table_gear.png delete mode 100644 source/dev/images/icons/table_go.png delete mode 100644 source/dev/images/icons/table_key.png delete mode 100644 source/dev/images/icons/table_lightning.png delete mode 100644 source/dev/images/icons/table_link.png delete mode 100644 source/dev/images/icons/table_multiple.png delete mode 100644 source/dev/images/icons/table_refresh.png delete mode 100644 source/dev/images/icons/table_relationship.png delete mode 100644 source/dev/images/icons/table_row_delete.png delete mode 100644 source/dev/images/icons/table_row_insert.png delete mode 100644 source/dev/images/icons/table_save.png delete mode 100644 source/dev/images/icons/table_sort.png delete mode 100644 source/dev/images/icons/tag.png delete mode 100644 source/dev/images/icons/tag_blue.png delete mode 100644 source/dev/images/icons/tag_blue_add.png delete mode 100644 source/dev/images/icons/tag_blue_delete.png delete mode 100644 source/dev/images/icons/tag_blue_edit.png delete mode 100644 source/dev/images/icons/tag_green.png delete mode 100644 source/dev/images/icons/tag_orange.png delete mode 100644 source/dev/images/icons/tag_pink.png delete mode 100644 source/dev/images/icons/tag_purple.png delete mode 100644 source/dev/images/icons/tag_red.png delete mode 100644 source/dev/images/icons/tag_yellow.png delete mode 100644 source/dev/images/icons/telephone.png delete mode 100644 source/dev/images/icons/telephone_add.png delete mode 100644 source/dev/images/icons/telephone_delete.png delete mode 100644 source/dev/images/icons/telephone_edit.png delete mode 100644 source/dev/images/icons/telephone_error.png delete mode 100644 source/dev/images/icons/telephone_go.png delete mode 100644 source/dev/images/icons/telephone_key.png delete mode 100644 source/dev/images/icons/telephone_link.png delete mode 100644 source/dev/images/icons/television.png delete mode 100644 source/dev/images/icons/television_add.png delete mode 100644 source/dev/images/icons/television_delete.png delete mode 100644 source/dev/images/icons/text_align_center.png delete mode 100644 source/dev/images/icons/text_align_justify.png delete mode 100644 source/dev/images/icons/text_align_left.png delete mode 100644 source/dev/images/icons/text_align_right.png delete mode 100644 source/dev/images/icons/text_allcaps.png delete mode 100644 source/dev/images/icons/text_bold.png delete mode 100644 source/dev/images/icons/text_columns.png delete mode 100644 source/dev/images/icons/text_dropcaps.png delete mode 100644 source/dev/images/icons/text_heading_1.png delete mode 100644 source/dev/images/icons/text_heading_2.png delete mode 100644 source/dev/images/icons/text_heading_3.png delete mode 100644 source/dev/images/icons/text_heading_4.png delete mode 100644 source/dev/images/icons/text_heading_5.png delete mode 100644 source/dev/images/icons/text_heading_6.png delete mode 100644 source/dev/images/icons/text_horizontalrule.png delete mode 100644 source/dev/images/icons/text_indent.png delete mode 100644 source/dev/images/icons/text_indent_remove.png delete mode 100644 source/dev/images/icons/text_italic.png delete mode 100644 source/dev/images/icons/text_kerning.png delete mode 100644 source/dev/images/icons/text_letter_omega.png delete mode 100644 source/dev/images/icons/text_letterspacing.png delete mode 100644 source/dev/images/icons/text_linespacing.png delete mode 100644 source/dev/images/icons/text_list_bullets.png delete mode 100644 source/dev/images/icons/text_list_numbers.png delete mode 100644 source/dev/images/icons/text_lowercase.png delete mode 100644 source/dev/images/icons/text_padding_bottom.png delete mode 100644 source/dev/images/icons/text_padding_left.png delete mode 100644 source/dev/images/icons/text_padding_right.png delete mode 100644 source/dev/images/icons/text_padding_top.png delete mode 100644 source/dev/images/icons/text_replace.png delete mode 100644 source/dev/images/icons/text_signature.png delete mode 100644 source/dev/images/icons/text_smallcaps.png delete mode 100644 source/dev/images/icons/text_strikethrough.png delete mode 100644 source/dev/images/icons/text_subscript.png delete mode 100644 source/dev/images/icons/text_superscript.png delete mode 100644 source/dev/images/icons/text_underline.png delete mode 100644 source/dev/images/icons/text_uppercase.png delete mode 100644 source/dev/images/icons/textfield.png delete mode 100644 source/dev/images/icons/textfield_add.png delete mode 100644 source/dev/images/icons/textfield_delete.png delete mode 100644 source/dev/images/icons/textfield_key.png delete mode 100644 source/dev/images/icons/textfield_rename.png delete mode 100644 source/dev/images/icons/thumb_down.png delete mode 100644 source/dev/images/icons/thumb_up.png delete mode 100644 source/dev/images/icons/tick.png delete mode 100644 source/dev/images/icons/time.png delete mode 100644 source/dev/images/icons/time_add.png delete mode 100644 source/dev/images/icons/time_delete.png delete mode 100644 source/dev/images/icons/time_go.png delete mode 100644 source/dev/images/icons/timeline_marker.png delete mode 100644 source/dev/images/icons/transmit.png delete mode 100644 source/dev/images/icons/transmit_add.png delete mode 100644 source/dev/images/icons/transmit_blue.png delete mode 100644 source/dev/images/icons/transmit_delete.png delete mode 100644 source/dev/images/icons/transmit_edit.png delete mode 100644 source/dev/images/icons/transmit_error.png delete mode 100644 source/dev/images/icons/transmit_go.png delete mode 100644 source/dev/images/icons/tux.png delete mode 100644 source/dev/images/icons/user.png delete mode 100644 source/dev/images/icons/user_add.png delete mode 100644 source/dev/images/icons/user_comment.png delete mode 100644 source/dev/images/icons/user_delete.png delete mode 100644 source/dev/images/icons/user_edit.png delete mode 100644 source/dev/images/icons/user_female.png delete mode 100644 source/dev/images/icons/user_go.png delete mode 100644 source/dev/images/icons/user_gray.png delete mode 100644 source/dev/images/icons/user_green.png delete mode 100644 source/dev/images/icons/user_orange.png delete mode 100644 source/dev/images/icons/user_red.png delete mode 100644 source/dev/images/icons/user_suit.png delete mode 100644 source/dev/images/icons/vcard.png delete mode 100644 source/dev/images/icons/vcard_add.png delete mode 100644 source/dev/images/icons/vcard_delete.png delete mode 100644 source/dev/images/icons/vcard_edit.png delete mode 100644 source/dev/images/icons/vector.png delete mode 100644 source/dev/images/icons/vector_add.png delete mode 100644 source/dev/images/icons/vector_delete.png delete mode 100644 source/dev/images/icons/wand.png delete mode 100644 source/dev/images/icons/weather_clouds.png delete mode 100644 source/dev/images/icons/weather_cloudy.png delete mode 100644 source/dev/images/icons/weather_lightning.png delete mode 100644 source/dev/images/icons/weather_rain.png delete mode 100644 source/dev/images/icons/weather_snow.png delete mode 100644 source/dev/images/icons/weather_sun.png delete mode 100644 source/dev/images/icons/webcam.png delete mode 100644 source/dev/images/icons/webcam_add.png delete mode 100644 source/dev/images/icons/webcam_delete.png delete mode 100644 source/dev/images/icons/webcam_error.png delete mode 100644 source/dev/images/icons/world.png delete mode 100644 source/dev/images/icons/world_add.png delete mode 100644 source/dev/images/icons/world_delete.png delete mode 100644 source/dev/images/icons/world_edit.png delete mode 100644 source/dev/images/icons/world_go.png delete mode 100644 source/dev/images/icons/world_link.png delete mode 100644 source/dev/images/icons/wrench.png delete mode 100644 source/dev/images/icons/wrench_orange.png delete mode 100644 source/dev/images/icons/xhtml.png delete mode 100644 source/dev/images/icons/xhtml_add.png delete mode 100644 source/dev/images/icons/xhtml_delete.png delete mode 100644 source/dev/images/icons/xhtml_go.png delete mode 100644 source/dev/images/icons/xhtml_valid.png delete mode 100644 source/dev/images/icons/zoom.png delete mode 100644 source/dev/images/icons/zoom_in.png delete mode 100644 source/dev/images/icons/zoom_out.png delete mode 100644 source/dev/images/logo/logo_baseline.psd delete mode 100644 source/dev/images/logo/logo_rendered.png delete mode 100644 source/dev/images/logo/logo_vector.ai delete mode 100644 source/dev/images/placeholders/jingle_audio_local.psd delete mode 100644 source/dev/images/placeholders/jingle_audio_remote.psd delete mode 100644 source/dev/images/placeholders/jingle_video_local.psd delete mode 100644 source/dev/images/placeholders/jingle_video_remote.psd delete mode 100644 source/dev/images/sprites/animate.psd delete mode 100644 source/dev/images/sprites/archives.psd delete mode 100644 source/dev/images/sprites/background.svg delete mode 100644 source/dev/images/sprites/browsers.psd delete mode 100644 source/dev/images/sprites/buttons.psd delete mode 100644 source/dev/images/sprites/call.psd delete mode 100644 source/dev/images/sprites/home.psd delete mode 100644 source/dev/images/sprites/install.psd delete mode 100644 source/dev/images/sprites/manager.psd delete mode 100644 source/dev/images/sprites/me.psd delete mode 100644 source/dev/images/sprites/mini.psd delete mode 100644 source/dev/images/sprites/mobile.psd delete mode 100644 source/dev/images/sprites/smileys.psd delete mode 100644 source/dev/images/sprites/talk.psd delete mode 100644 source/dev/images/sprites/welcome.psd delete mode 100644 source/favicon.ico delete mode 100644 source/i18n/.htaccess delete mode 100644 source/i18n/ar/LC_MESSAGES/main.mo delete mode 100644 source/i18n/ar/LC_MESSAGES/main.po delete mode 100644 source/i18n/bg/LC_MESSAGES/main.mo delete mode 100644 source/i18n/bg/LC_MESSAGES/main.po delete mode 100644 source/i18n/cs/LC_MESSAGES/main.mo delete mode 100644 source/i18n/cs/LC_MESSAGES/main.po delete mode 100644 source/i18n/de/LC_MESSAGES/main.mo delete mode 100644 source/i18n/de/LC_MESSAGES/main.po delete mode 100644 source/i18n/en/LC_MESSAGES/main.pot delete mode 100644 source/i18n/eo/LC_MESSAGES/main.mo delete mode 100644 source/i18n/eo/LC_MESSAGES/main.po delete mode 100644 source/i18n/es/LC_MESSAGES/main.mo delete mode 100644 source/i18n/es/LC_MESSAGES/main.po delete mode 100644 source/i18n/et/LC_MESSAGES/main.mo delete mode 100644 source/i18n/et/LC_MESSAGES/main.po delete mode 100644 source/i18n/fa/LC_MESSAGES/main.mo delete mode 100644 source/i18n/fa/LC_MESSAGES/main.po delete mode 100644 source/i18n/fr/LC_MESSAGES/main.mo delete mode 100644 source/i18n/fr/LC_MESSAGES/main.po delete mode 100644 source/i18n/he/LC_MESSAGES/main.mo delete mode 100644 source/i18n/he/LC_MESSAGES/main.po delete mode 100644 source/i18n/hu/LC_MESSAGES/main.mo delete mode 100644 source/i18n/hu/LC_MESSAGES/main.po delete mode 100644 source/i18n/id/LC_MESSAGES/main.mo delete mode 100644 source/i18n/id/LC_MESSAGES/main.po delete mode 100644 source/i18n/it/LC_MESSAGES/main.mo delete mode 100644 source/i18n/it/LC_MESSAGES/main.po delete mode 100644 source/i18n/ja/LC_MESSAGES/main.mo delete mode 100644 source/i18n/ja/LC_MESSAGES/main.po delete mode 100644 source/i18n/lb/LC_MESSAGES/main.mo delete mode 100644 source/i18n/lb/LC_MESSAGES/main.po delete mode 100644 source/i18n/mn/LC_MESSAGES/main.mo delete mode 100644 source/i18n/mn/LC_MESSAGES/main.po delete mode 100644 source/i18n/nl/LC_MESSAGES/main.mo delete mode 100644 source/i18n/nl/LC_MESSAGES/main.po delete mode 100644 source/i18n/oc/LC_MESSAGES/main.mo delete mode 100644 source/i18n/oc/LC_MESSAGES/main.po delete mode 100644 source/i18n/pl/LC_MESSAGES/main.mo delete mode 100644 source/i18n/pl/LC_MESSAGES/main.po delete mode 100644 source/i18n/pt-br/LC_MESSAGES/main.mo delete mode 100644 source/i18n/pt-br/LC_MESSAGES/main.po delete mode 100644 source/i18n/pt/LC_MESSAGES/main.mo delete mode 100644 source/i18n/pt/LC_MESSAGES/main.po delete mode 100644 source/i18n/ru/LC_MESSAGES/main.mo delete mode 100644 source/i18n/ru/LC_MESSAGES/main.po delete mode 100644 source/i18n/sk/LC_MESSAGES/main.mo delete mode 100644 source/i18n/sk/LC_MESSAGES/main.po delete mode 100644 source/i18n/sv/LC_MESSAGES/main.mo delete mode 100644 source/i18n/sv/LC_MESSAGES/main.po delete mode 100644 source/i18n/tr/LC_MESSAGES/main.mo delete mode 100644 source/i18n/tr/LC_MESSAGES/main.po delete mode 100644 source/i18n/uk/LC_MESSAGES/main.mo delete mode 100644 source/i18n/uk/LC_MESSAGES/main.po delete mode 100644 source/i18n/uz/LC_MESSAGES/main.mo delete mode 100644 source/i18n/uz/LC_MESSAGES/main.po delete mode 100644 source/i18n/vi/LC_MESSAGES/main.mo delete mode 100644 source/i18n/vi/LC_MESSAGES/main.po delete mode 100644 source/i18n/zh-cn/LC_MESSAGES/main.mo delete mode 100644 source/i18n/zh-cn/LC_MESSAGES/main.po delete mode 100644 source/i18n/zh-tw/LC_MESSAGES/main.mo delete mode 100644 source/i18n/zh-tw/LC_MESSAGES/main.po delete mode 100644 source/index.php delete mode 100644 source/log/.htaccess delete mode 100644 source/misc/certs/00673b5b.0 delete mode 100644 source/misc/certs/024dc131.0 delete mode 100644 source/misc/certs/02b73561.0 delete mode 100644 source/misc/certs/039c618a.0 delete mode 100644 source/misc/certs/03f0efa4.0 delete mode 100644 source/misc/certs/052e396b.0 delete mode 100644 source/misc/certs/062cdee6.0 delete mode 100644 source/misc/certs/080911ac.0 delete mode 100644 source/misc/certs/0810ba98.0 delete mode 100644 source/misc/certs/08aef7bb.0 delete mode 100644 source/misc/certs/09789157.0 delete mode 100644 source/misc/certs/0b759015.0 delete mode 100644 source/misc/certs/0c4c9b6c.0 delete mode 100644 source/misc/certs/0d188d89.0 delete mode 100644 source/misc/certs/0d1b923b.0 delete mode 100644 source/misc/certs/10531352.0 delete mode 100644 source/misc/certs/111e6273.0 delete mode 100644 source/misc/certs/1155c94b.0 delete mode 100644 source/misc/certs/116bf586.0 delete mode 100644 source/misc/certs/119afc2e.0 delete mode 100644 source/misc/certs/11a09b38.0 delete mode 100644 source/misc/certs/11f154d6.0 delete mode 100644 source/misc/certs/124bbd54.0 delete mode 100644 source/misc/certs/128805a3.0 delete mode 100644 source/misc/certs/12d55845.0 delete mode 100644 source/misc/certs/157753a5.0 delete mode 100644 source/misc/certs/1636090b.0 delete mode 100644 source/misc/certs/17b51fe6.0 delete mode 100644 source/misc/certs/18856ac4.0 delete mode 100644 source/misc/certs/1dac3003.0 delete mode 100644 source/misc/certs/1dcd6f4c.0 delete mode 100644 source/misc/certs/1df5ec47.0 delete mode 100644 source/misc/certs/1e1eab7c.0 delete mode 100644 source/misc/certs/1e8e7201.0 delete mode 100644 source/misc/certs/1eb37bdf.0 delete mode 100644 source/misc/certs/1ec4d31a.0 delete mode 100644 source/misc/certs/201cada0.0 delete mode 100644 source/misc/certs/20d096ba.0 delete mode 100644 source/misc/certs/219d9499.0 delete mode 100644 source/misc/certs/2251b13a.0 delete mode 100644 source/misc/certs/23f4c490.0 delete mode 100644 source/misc/certs/244b5494.0 delete mode 100644 source/misc/certs/24ad0b63.0 delete mode 100644 source/misc/certs/27af790d.0 delete mode 100644 source/misc/certs/2a4b3efc.0 delete mode 100644 source/misc/certs/2ab3b959.0 delete mode 100644 source/misc/certs/2afc57aa.0 delete mode 100644 source/misc/certs/2b349938.0 delete mode 100644 source/misc/certs/2c543cd1.0 delete mode 100644 source/misc/certs/2cfc4974.0 delete mode 100644 source/misc/certs/2d9dafe4.0 delete mode 100644 source/misc/certs/2e4eed3c.0 delete mode 100644 source/misc/certs/2e5ac55d.0 delete mode 100644 source/misc/certs/2edf7016.0 delete mode 100644 source/misc/certs/2fa87019.0 delete mode 100644 source/misc/certs/2fb1850a.0 delete mode 100644 source/misc/certs/33815e15.0 delete mode 100644 source/misc/certs/343eb6cb.0 delete mode 100644 source/misc/certs/349f2832.0 delete mode 100644 source/misc/certs/3513523f.0 delete mode 100644 source/misc/certs/381ce4dd.0 delete mode 100644 source/misc/certs/399e7759.0 delete mode 100644 source/misc/certs/3a3b02ce.0 delete mode 100644 source/misc/certs/3ad48a91.0 delete mode 100644 source/misc/certs/3b2716e5.0 delete mode 100644 source/misc/certs/3bde41ac.0 delete mode 100644 source/misc/certs/3c58f906.0 delete mode 100644 source/misc/certs/3c860d51.0 delete mode 100644 source/misc/certs/3d441de8.0 delete mode 100644 source/misc/certs/3e45d192.0 delete mode 100644 source/misc/certs/3e7271e8.0 delete mode 100644 source/misc/certs/3ee7e181.0 delete mode 100644 source/misc/certs/40547a79.0 delete mode 100644 source/misc/certs/408e388a.0 delete mode 100644 source/misc/certs/40dc992e.0 delete mode 100644 source/misc/certs/415660c1.0 delete mode 100644 source/misc/certs/418595b9.0 delete mode 100644 source/misc/certs/4304c5e5.0 delete mode 100644 source/misc/certs/442adcac.0 delete mode 100644 source/misc/certs/4597689c.0 delete mode 100644 source/misc/certs/46b2fd3b.0 delete mode 100644 source/misc/certs/480720ec.0 delete mode 100644 source/misc/certs/48a195d8.0 delete mode 100644 source/misc/certs/48bec511.0 delete mode 100644 source/misc/certs/4a6481c9.0 delete mode 100644 source/misc/certs/4bfab552.0 delete mode 100644 source/misc/certs/4d654d1d.0 delete mode 100644 source/misc/certs/4e18c148.0 delete mode 100644 source/misc/certs/4f316efb.0 delete mode 100644 source/misc/certs/4fbd6bfa.0 delete mode 100644 source/misc/certs/5021a0a2.0 delete mode 100644 source/misc/certs/5046c355.0 delete mode 100644 source/misc/certs/524d9b43.0 delete mode 100644 source/misc/certs/5443e9e3.0 delete mode 100644 source/misc/certs/54657681.0 delete mode 100644 source/misc/certs/55a10908.0 delete mode 100644 source/misc/certs/5620c4aa.0 delete mode 100644 source/misc/certs/56657bde.0 delete mode 100644 source/misc/certs/56b8a0b6.0 delete mode 100644 source/misc/certs/56e29e75.0 delete mode 100644 source/misc/certs/57692373.0 delete mode 100644 source/misc/certs/578d5c04.0 delete mode 100644 source/misc/certs/57bbd831.0 delete mode 100644 source/misc/certs/57bcb2da.0 delete mode 100644 source/misc/certs/58a44af1.0 delete mode 100644 source/misc/certs/590d426f.0 delete mode 100644 source/misc/certs/594f1775.0 delete mode 100644 source/misc/certs/5a3f0ff8.0 delete mode 100644 source/misc/certs/5a5372fc.0 delete mode 100644 source/misc/certs/5ad8a5d6.0 delete mode 100644 source/misc/certs/5c44d531.0 delete mode 100644 source/misc/certs/5cf9d536.0 delete mode 100644 source/misc/certs/5e4e69e7.0 delete mode 100644 source/misc/certs/5ed36f99.0 delete mode 100644 source/misc/certs/5f267794.0 delete mode 100644 source/misc/certs/5f47b495.0 delete mode 100644 source/misc/certs/60afe812.0 delete mode 100644 source/misc/certs/635ccfd5.0 delete mode 100644 source/misc/certs/6410666e.0 delete mode 100644 source/misc/certs/653b494a.0 delete mode 100644 source/misc/certs/656b3e35.0 delete mode 100644 source/misc/certs/65b876bd.0 delete mode 100644 source/misc/certs/667c66d4.0 delete mode 100644 source/misc/certs/67495436.0 delete mode 100644 source/misc/certs/67d559d1.0 delete mode 100644 source/misc/certs/69105f4f.0 delete mode 100644 source/misc/certs/6adf0799.0 delete mode 100644 source/misc/certs/6b99d060.0 delete mode 100644 source/misc/certs/6cc3c4c3.0 delete mode 100644 source/misc/certs/6e52cc39.0 delete mode 100644 source/misc/certs/6e8bf996.0 delete mode 100644 source/misc/certs/6f2c1157.0 delete mode 100644 source/misc/certs/6fcc125d.0 delete mode 100644 source/misc/certs/706f604c.0 delete mode 100644 source/misc/certs/72f369af.0 delete mode 100644 source/misc/certs/72fa7371.0 delete mode 100644 source/misc/certs/74c26bd0.0 delete mode 100644 source/misc/certs/755f7420.0 delete mode 100644 source/misc/certs/75680d2e.0 delete mode 100644 source/misc/certs/7651b327.0 delete mode 100644 source/misc/certs/76579174.0 delete mode 100644 source/misc/certs/7672ac4b.0 delete mode 100644 source/misc/certs/76cb8f92.0 delete mode 100644 source/misc/certs/76faf6c0.0 delete mode 100644 source/misc/certs/778e3cb0.0 delete mode 100644 source/misc/certs/790a7190.0 delete mode 100644 source/misc/certs/7999be0d.0 delete mode 100644 source/misc/certs/79ad8b43.0 delete mode 100644 source/misc/certs/7a481e66.0 delete mode 100644 source/misc/certs/7a819ef2.0 delete mode 100644 source/misc/certs/7d0b38bd.0 delete mode 100644 source/misc/certs/7d3cd826.0 delete mode 100644 source/misc/certs/7d453d8f.0 delete mode 100644 source/misc/certs/7d5a75e4.0 delete mode 100644 source/misc/certs/812e17de.0 delete mode 100644 source/misc/certs/8160b96c.0 delete mode 100644 source/misc/certs/81b9768f.0 delete mode 100644 source/misc/certs/82223c44.0 delete mode 100644 source/misc/certs/8317b10c.0 delete mode 100644 source/misc/certs/8470719d.0 delete mode 100644 source/misc/certs/84cba82f.0 delete mode 100644 source/misc/certs/85cde254.0 delete mode 100644 source/misc/certs/861a399d.0 delete mode 100644 source/misc/certs/861e0100.0 delete mode 100644 source/misc/certs/86212b19.0 delete mode 100644 source/misc/certs/876f1e28.0 delete mode 100644 source/misc/certs/87753b0d.0 delete mode 100644 source/misc/certs/882de061.0 delete mode 100644 source/misc/certs/8867006a.0 delete mode 100644 source/misc/certs/88f89ea7.0 delete mode 100644 source/misc/certs/895cad1a.0 delete mode 100644 source/misc/certs/89c02a45.0 delete mode 100644 source/misc/certs/8b59b1ad.0 delete mode 100644 source/misc/certs/8d86cdd1.0 delete mode 100644 source/misc/certs/8e52d3cd.0 delete mode 100644 source/misc/certs/8f7b96c4.0 delete mode 100644 source/misc/certs/91739615.0 delete mode 100644 source/misc/certs/930ac5d2.0 delete mode 100644 source/misc/certs/9339512a.0 delete mode 100644 source/misc/certs/93bc0acc.0 delete mode 100644 source/misc/certs/95aff9e3.0 delete mode 100644 source/misc/certs/9685a493.0 delete mode 100644 source/misc/certs/9772ca32.0 delete mode 100644 source/misc/certs/9818ca0b.0 delete mode 100644 source/misc/certs/988a38cb.0 delete mode 100644 source/misc/certs/98ec67f0.0 delete mode 100644 source/misc/certs/99d0fa06.0 delete mode 100644 source/misc/certs/9a3db647.0 delete mode 100644 source/misc/certs/9af9f759.0 delete mode 100644 source/misc/certs/9b353c9a.0 delete mode 100644 source/misc/certs/9c2e7d30.0 delete mode 100644 source/misc/certs/9c472bf7.0 delete mode 100644 source/misc/certs/9c8dfbd4.0 delete mode 100644 source/misc/certs/9d520b32.0 delete mode 100644 source/misc/certs/9d6523ce.0 delete mode 100644 source/misc/certs/9dbefe7b.0 delete mode 100644 source/misc/certs/9ec3a561.0 delete mode 100644 source/misc/certs/9f533518.0 delete mode 100644 source/misc/certs/9f541fb4.0 delete mode 100644 source/misc/certs/A-Trust-nQual-03.pem delete mode 100644 source/misc/certs/ACEDICOM_Root.pem delete mode 100644 source/misc/certs/AC_Raíz_Certicámara_S.A..pem delete mode 100644 source/misc/certs/Actalis_Authentication_Root_CA.pem delete mode 100644 source/misc/certs/AddTrust_External_Root.pem delete mode 100644 source/misc/certs/AddTrust_Low-Value_Services_Root.pem delete mode 100644 source/misc/certs/AddTrust_Public_Services_Root.pem delete mode 100644 source/misc/certs/AddTrust_Qualified_Certificates_Root.pem delete mode 100644 source/misc/certs/AffirmTrust_Commercial.pem delete mode 100644 source/misc/certs/AffirmTrust_Networking.pem delete mode 100644 source/misc/certs/AffirmTrust_Premium.pem delete mode 100644 source/misc/certs/AffirmTrust_Premium_ECC.pem delete mode 100644 source/misc/certs/America_Online_Root_Certification_Authority_1.pem delete mode 100644 source/misc/certs/America_Online_Root_Certification_Authority_2.pem delete mode 100644 source/misc/certs/ApplicationCA_-_Japanese_Government.pem delete mode 100644 source/misc/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem delete mode 100644 source/misc/certs/Baltimore_CyberTrust_Root.pem delete mode 100644 source/misc/certs/Buypass_Class_2_CA_1.pem delete mode 100644 source/misc/certs/Buypass_Class_2_Root_CA.pem delete mode 100644 source/misc/certs/Buypass_Class_3_CA_1.pem delete mode 100644 source/misc/certs/Buypass_Class_3_Root_CA.pem delete mode 100644 source/misc/certs/CA_Disig.pem delete mode 100644 source/misc/certs/CNNIC_ROOT.pem delete mode 100644 source/misc/certs/COMODO_Certification_Authority.pem delete mode 100644 source/misc/certs/COMODO_ECC_Certification_Authority.pem delete mode 100644 source/misc/certs/Camerfirma_Chambers_of_Commerce_Root.pem delete mode 100644 source/misc/certs/Camerfirma_Global_Chambersign_Root.pem delete mode 100644 source/misc/certs/Certigna.pem delete mode 100644 source/misc/certs/Certinomis_-_Autorité_Racine.pem delete mode 100644 source/misc/certs/Certplus_Class_2_Primary_CA.pem delete mode 100644 source/misc/certs/Certum_Root_CA.pem delete mode 100644 source/misc/certs/Certum_Trusted_Network_CA.pem delete mode 100644 source/misc/certs/Chambers_of_Commerce_Root_-_2008.pem delete mode 100644 source/misc/certs/ComSign_CA.pem delete mode 100644 source/misc/certs/ComSign_Secured_CA.pem delete mode 100644 source/misc/certs/Comodo_AAA_Services_root.pem delete mode 100644 source/misc/certs/Comodo_Secure_Services_root.pem delete mode 100644 source/misc/certs/Comodo_Trusted_Services_root.pem delete mode 100644 source/misc/certs/Cybertrust_Global_Root.pem delete mode 100644 source/misc/certs/DST_ACES_CA_X6.pem delete mode 100644 source/misc/certs/DST_Root_CA_X3.pem delete mode 100644 source/misc/certs/Deutsche_Telekom_Root_CA_2.pem delete mode 100644 source/misc/certs/DigiCert_Assured_ID_Root_CA.pem delete mode 100644 source/misc/certs/DigiCert_Global_Root_CA.pem delete mode 100644 source/misc/certs/DigiCert_High_Assurance_EV_Root_CA.pem delete mode 100644 source/misc/certs/Digital_Signature_Trust_Co._Global_CA_1.pem delete mode 100644 source/misc/certs/Digital_Signature_Trust_Co._Global_CA_3.pem delete mode 100644 source/misc/certs/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.pem delete mode 100644 source/misc/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem delete mode 100644 source/misc/certs/EC-ACC.pem delete mode 100644 source/misc/certs/EE_Certification_Centre_Root_CA.pem delete mode 100644 source/misc/certs/Entrust.net_Premium_2048_Secure_Server_CA.pem delete mode 100644 source/misc/certs/Entrust.net_Secure_Server_CA.pem delete mode 100644 source/misc/certs/Entrust_Root_Certification_Authority.pem delete mode 100644 source/misc/certs/Equifax_Secure_CA.pem delete mode 100644 source/misc/certs/Equifax_Secure_Global_eBusiness_CA.pem delete mode 100644 source/misc/certs/Equifax_Secure_eBusiness_CA_1.pem delete mode 100644 source/misc/certs/Equifax_Secure_eBusiness_CA_2.pem delete mode 100644 source/misc/certs/Firmaprofesional_Root_CA.pem delete mode 100644 source/misc/certs/GTE_CyberTrust_Global_Root.pem delete mode 100644 source/misc/certs/GeoTrust_Global_CA.pem delete mode 100644 source/misc/certs/GeoTrust_Global_CA_2.pem delete mode 100644 source/misc/certs/GeoTrust_Primary_Certification_Authority.pem delete mode 100644 source/misc/certs/GeoTrust_Primary_Certification_Authority_-_G2.pem delete mode 100644 source/misc/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem delete mode 100644 source/misc/certs/GeoTrust_Universal_CA.pem delete mode 100644 source/misc/certs/GeoTrust_Universal_CA_2.pem delete mode 100644 source/misc/certs/GlobalSign_Root_CA.pem delete mode 100644 source/misc/certs/GlobalSign_Root_CA_-_R2.pem delete mode 100644 source/misc/certs/GlobalSign_Root_CA_-_R3.pem delete mode 100644 source/misc/certs/Global_Chambersign_Root_-_2008.pem delete mode 100644 source/misc/certs/Go_Daddy_Class_2_CA.pem delete mode 100644 source/misc/certs/Go_Daddy_Root_Certificate_Authority_-_G2.pem delete mode 100644 source/misc/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.pem delete mode 100644 source/misc/certs/Hongkong_Post_Root_CA_1.pem delete mode 100644 source/misc/certs/IGC_A.pem delete mode 100644 source/misc/certs/Izenpe.com.pem delete mode 100644 source/misc/certs/Juur-SK.pem delete mode 100644 source/misc/certs/Microsec_e-Szigno_Root_CA.pem delete mode 100644 source/misc/certs/Microsec_e-Szigno_Root_CA_2009.pem delete mode 100644 source/misc/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem delete mode 100644 source/misc/certs/NetLock_Business_=Class_B=_Root.pem delete mode 100644 source/misc/certs/NetLock_Express_=Class_C=_Root.pem delete mode 100644 source/misc/certs/NetLock_Notary_=Class_A=_Root.pem delete mode 100644 source/misc/certs/NetLock_Qualified_=Class_QA=_Root.pem delete mode 100644 source/misc/certs/Network_Solutions_Certificate_Authority.pem delete mode 100644 source/misc/certs/OISTE_WISeKey_Global_Root_GA_CA.pem delete mode 100644 source/misc/certs/QuoVadis_Root_CA.pem delete mode 100644 source/misc/certs/QuoVadis_Root_CA_2.pem delete mode 100644 source/misc/certs/QuoVadis_Root_CA_3.pem delete mode 100644 source/misc/certs/RSA_Root_Certificate_1.pem delete mode 100644 source/misc/certs/RSA_Security_2048_v3.pem delete mode 100644 source/misc/certs/Root_CA_Generalitat_Valenciana.pem delete mode 100644 source/misc/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.pem delete mode 100644 source/misc/certs/SecureSign_RootCA11.pem delete mode 100644 source/misc/certs/SecureTrust_CA.pem delete mode 100644 source/misc/certs/Secure_Global_CA.pem delete mode 100644 source/misc/certs/Security_Communication_EV_RootCA1.pem delete mode 100644 source/misc/certs/Security_Communication_RootCA2.pem delete mode 100644 source/misc/certs/Security_Communication_Root_CA.pem delete mode 100644 source/misc/certs/Sonera_Class_1_Root_CA.pem delete mode 100644 source/misc/certs/Sonera_Class_2_Root_CA.pem delete mode 100644 source/misc/certs/Staat_der_Nederlanden_Root_CA.pem delete mode 100644 source/misc/certs/Staat_der_Nederlanden_Root_CA_-_G2.pem delete mode 100644 source/misc/certs/Starfield_Class_2_CA.pem delete mode 100644 source/misc/certs/Starfield_Root_Certificate_Authority_-_G2.pem delete mode 100644 source/misc/certs/Starfield_Services_Root_Certificate_Authority_-_G2.pem delete mode 100644 source/misc/certs/StartCom_Certification_Authority_G2.pem delete mode 100644 source/misc/certs/Startcom_Certification_Authority.pem delete mode 100644 source/misc/certs/SwissSign_Gold_CA_-_G2.pem delete mode 100644 source/misc/certs/SwissSign_Platinum_CA_-_G2.pem delete mode 100644 source/misc/certs/SwissSign_Silver_CA_-_G2.pem delete mode 100644 source/misc/certs/Swisscom_Root_CA_1.pem delete mode 100644 source/misc/certs/T-TeleSec_GlobalRoot_Class_3.pem delete mode 100644 source/misc/certs/TC_TrustCenter_Class_2_CA_II.pem delete mode 100644 source/misc/certs/TC_TrustCenter_Class_3_CA_II.pem delete mode 100644 source/misc/certs/TC_TrustCenter_Universal_CA_I.pem delete mode 100644 source/misc/certs/TC_TrustCenter_Universal_CA_III.pem delete mode 100644 source/misc/certs/TDC_Internet_Root_CA.pem delete mode 100644 source/misc/certs/TDC_OCES_Root_CA.pem delete mode 100644 source/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem delete mode 100644 source/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_2.pem delete mode 100644 source/misc/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.pem delete mode 100644 source/misc/certs/TWCA_Root_Certification_Authority.pem delete mode 100644 source/misc/certs/Taiwan_GRCA.pem delete mode 100644 source/misc/certs/Thawte_Premium_Server_CA.pem delete mode 100644 source/misc/certs/Thawte_Server_CA.pem delete mode 100644 source/misc/certs/Trustis_FPS_Root_CA.pem delete mode 100644 source/misc/certs/UTN_DATACorp_SGC_Root_CA.pem delete mode 100644 source/misc/certs/UTN_USERFirst_Email_Root_CA.pem delete mode 100644 source/misc/certs/UTN_USERFirst_Hardware_Root_CA.pem delete mode 100644 source/misc/certs/ValiCert_Class_1_VA.pem delete mode 100644 source/misc/certs/ValiCert_Class_2_VA.pem delete mode 100644 source/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem delete mode 100644 source/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem delete mode 100644 source/misc/certs/VeriSign_Universal_Root_Certification_Authority.pem delete mode 100644 source/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority.pem delete mode 100644 source/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G2.pem delete mode 100644 source/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.pem delete mode 100644 source/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.pem delete mode 100644 source/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.pem delete mode 100644 source/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority.pem delete mode 100644 source/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.pem delete mode 100644 source/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.pem delete mode 100644 source/misc/certs/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.pem delete mode 100644 source/misc/certs/Visa_eCommerce_Root.pem delete mode 100644 source/misc/certs/WellsSecure_Public_Root_Certificate_Authority.pem delete mode 100644 source/misc/certs/Wells_Fargo_Root_CA.pem delete mode 100644 source/misc/certs/XRamp_Global_CA_Root.pem delete mode 100644 source/misc/certs/a0bc6fbb.0 delete mode 100644 source/misc/certs/a15b3b6b.0 delete mode 100644 source/misc/certs/a2df7ad7.0 delete mode 100644 source/misc/certs/a3896b44.0 delete mode 100644 source/misc/certs/a5fd78f0.0 delete mode 100644 source/misc/certs/a6a593ba.0 delete mode 100644 source/misc/certs/a7605362.0 delete mode 100644 source/misc/certs/a760e1bd.0 delete mode 100644 source/misc/certs/a7d2cf64.0 delete mode 100644 source/misc/certs/a8dee976.0 delete mode 100644 source/misc/certs/ab5346f4.0 delete mode 100644 source/misc/certs/ad088e1d.0 delete mode 100644 source/misc/certs/add67345.0 delete mode 100644 source/misc/certs/ae8153b9.0 delete mode 100644 source/misc/certs/aeb67534.0 delete mode 100644 source/misc/certs/aee5f10d.0 delete mode 100644 source/misc/certs/b097d71d.0 delete mode 100644 source/misc/certs/b0f3e76e.0 delete mode 100644 source/misc/certs/b1159c4c.0 delete mode 100644 source/misc/certs/b13cc6df.0 delete mode 100644 source/misc/certs/b1b8a7f3.0 delete mode 100644 source/misc/certs/b204d74a.0 delete mode 100644 source/misc/certs/b42ff584.0 delete mode 100644 source/misc/certs/b66938e9.0 delete mode 100644 source/misc/certs/b6c5745d.0 delete mode 100644 source/misc/certs/b727005e.0 delete mode 100644 source/misc/certs/b7a5b843.0 delete mode 100644 source/misc/certs/b7db1890.0 delete mode 100644 source/misc/certs/b7e7231a.0 delete mode 100644 source/misc/certs/b8e83700.0 delete mode 100644 source/misc/certs/ba89ed3b.0 delete mode 100644 source/misc/certs/bad35b78.0 delete mode 100644 source/misc/certs/bb2d49a0.0 delete mode 100644 source/misc/certs/bc3f2570.0 delete mode 100644 source/misc/certs/bcdd5959.0 delete mode 100644 source/misc/certs/bd1910d4.0 delete mode 100644 source/misc/certs/bda4cc84.0 delete mode 100644 source/misc/certs/bdacca6f.0 delete mode 100644 source/misc/certs/bf64f35b.0 delete mode 100644 source/misc/certs/c01cdfa2.0 delete mode 100644 source/misc/certs/c089bbbd.0 delete mode 100644 source/misc/certs/c0ff1f52.0 delete mode 100644 source/misc/certs/c19d42c7.0 delete mode 100644 source/misc/certs/c215bc69.0 delete mode 100644 source/misc/certs/c33a80d4.0 delete mode 100644 source/misc/certs/c3a6a9ad.0 delete mode 100644 source/misc/certs/c47d9980.0 delete mode 100644 source/misc/certs/c51c224c.0 delete mode 100644 source/misc/certs/c527e4ab.0 delete mode 100644 source/misc/certs/c5e082db.0 delete mode 100644 source/misc/certs/c692a373.0 delete mode 100644 source/misc/certs/c7e2a638.0 delete mode 100644 source/misc/certs/c8763593.0 delete mode 100644 source/misc/certs/c8841d13.0 delete mode 100644 source/misc/certs/c99398f3.0 delete mode 100644 source/misc/certs/c9f83a1c.0 delete mode 100644 source/misc/certs/ca-certificates.crt delete mode 100644 source/misc/certs/ca.pem delete mode 100644 source/misc/certs/ca6e4ad9.0 delete mode 100644 source/misc/certs/cacert.org.pem delete mode 100644 source/misc/certs/cb357862.0 delete mode 100644 source/misc/certs/cb59f961.0 delete mode 100644 source/misc/certs/cbeee9e2.0 delete mode 100644 source/misc/certs/cbf06781.0 delete mode 100644 source/misc/certs/cc450945.0 delete mode 100644 source/misc/certs/ccc52f49.0 delete mode 100644 source/misc/certs/cd58d51e.0 delete mode 100644 source/misc/certs/cdaebb72.0 delete mode 100644 source/misc/certs/ce026bf8.0 delete mode 100644 source/misc/certs/certSIGN_ROOT_CA.pem delete mode 100644 source/misc/certs/cf701eeb.0 delete mode 100644 source/misc/certs/cfa1c2ee.0 delete mode 100644 source/misc/certs/d16a5865.0 delete mode 100644 source/misc/certs/d537fba6.0 delete mode 100644 source/misc/certs/d59297b8.0 delete mode 100644 source/misc/certs/d64f06f3.0 delete mode 100644 source/misc/certs/d78a75c7.0 delete mode 100644 source/misc/certs/d7e8dc79.0 delete mode 100644 source/misc/certs/d853d49e.0 delete mode 100644 source/misc/certs/d957f522.0 delete mode 100644 source/misc/certs/d9d12c58.0 delete mode 100644 source/misc/certs/dbc54cab.0 delete mode 100644 source/misc/certs/dc45b0bd.0 delete mode 100644 source/misc/certs/ddc328ff.0 delete mode 100644 source/misc/certs/e113c810.0 delete mode 100644 source/misc/certs/e268a4c5.0 delete mode 100644 source/misc/certs/e2799e36.0 delete mode 100644 source/misc/certs/e48193cf.0 delete mode 100644 source/misc/certs/e536d871.0 delete mode 100644 source/misc/certs/e5662767.0 delete mode 100644 source/misc/certs/e60bf0c0.0 delete mode 100644 source/misc/certs/e775ed2d.0 delete mode 100644 source/misc/certs/e7b8d656.0 delete mode 100644 source/misc/certs/e8651083.0 delete mode 100644 source/misc/certs/e8de2f56.0 delete mode 100644 source/misc/certs/ePKI_Root_Certification_Authority.pem delete mode 100644 source/misc/certs/ea169617.0 delete mode 100644 source/misc/certs/eacdeb40.0 delete mode 100644 source/misc/certs/eb375c3e.0 delete mode 100644 source/misc/certs/ec87c655.0 delete mode 100644 source/misc/certs/ed524cf5.0 delete mode 100644 source/misc/certs/ed62f4e3.0 delete mode 100644 source/misc/certs/ee1365c0.0 delete mode 100644 source/misc/certs/ee64a828.0 delete mode 100644 source/misc/certs/ee7cd6fb.0 delete mode 100644 source/misc/certs/ee90b008.0 delete mode 100644 source/misc/certs/eed8c118.0 delete mode 100644 source/misc/certs/ef2f636c.0 delete mode 100644 source/misc/certs/f060240e.0 delete mode 100644 source/misc/certs/f081611a.0 delete mode 100644 source/misc/certs/f3377b1b.0 delete mode 100644 source/misc/certs/f387163d.0 delete mode 100644 source/misc/certs/f39fc864.0 delete mode 100644 source/misc/certs/f4996e82.0 delete mode 100644 source/misc/certs/f559733c.0 delete mode 100644 source/misc/certs/f58a60fe.0 delete mode 100644 source/misc/certs/f61bff45.0 delete mode 100644 source/misc/certs/f80cc7f6.0 delete mode 100644 source/misc/certs/f90208f7.0 delete mode 100644 source/misc/certs/fac084d7.0 delete mode 100644 source/misc/certs/facacbc6.0 delete mode 100644 source/misc/certs/fb126c6d.0 delete mode 100644 source/misc/certs/fcac10e3.0 delete mode 100644 source/misc/certs/fde84897.0 delete mode 100644 source/misc/certs/ff588423.0 delete mode 100644 source/misc/certs/ff783690.0 delete mode 100644 source/misc/certs/gandi-ca.crt delete mode 100644 source/misc/certs/spi-ca-2003.pem delete mode 100644 source/misc/certs/spi-cacert-2008.pem delete mode 100644 source/misc/certs/thawte_Primary_Root_CA.pem delete mode 100644 source/misc/certs/thawte_Primary_Root_CA_-_G2.pem delete mode 100644 source/misc/certs/thawte_Primary_Root_CA_-_G3.pem delete mode 100644 source/server/analytics.php delete mode 100644 source/server/avatar-upload.php delete mode 100644 source/server/bosh.php delete mode 100644 source/server/captcha.php delete mode 100644 source/server/desktop.php delete mode 100644 source/server/download-chat.php delete mode 100644 source/server/download.php delete mode 100644 source/server/drawsvgchart.php delete mode 100644 source/server/file-share.php delete mode 100644 source/server/form-hosts.php delete mode 100644 source/server/form-main.php delete mode 100644 source/server/form-users.php delete mode 100644 source/server/functions-advertising.php delete mode 100644 source/server/functions-get.php delete mode 100644 source/server/functions-manager.php delete mode 100644 source/server/functions.php delete mode 100644 source/server/generate-chat.php delete mode 100644 source/server/geolocation.php delete mode 100644 source/server/get-store.php delete mode 100644 source/server/get.php delete mode 100644 source/server/gettext.php delete mode 100644 source/server/install.php delete mode 100644 source/server/jingle.php delete mode 100644 source/server/jsmin.php delete mode 100644 source/server/manager.php delete mode 100644 source/server/mobile-detect.php delete mode 100644 source/server/mobile.php delete mode 100644 source/server/music-search.php delete mode 100644 source/server/post-design.php delete mode 100644 source/server/post-hosts.php delete mode 100644 source/server/post-main.php delete mode 100644 source/server/post-store.php delete mode 100644 source/server/post-users.php delete mode 100644 source/server/read-design.php delete mode 100644 source/server/read-hosts.php delete mode 100644 source/server/read-main.php delete mode 100644 source/server/register.php delete mode 100644 source/server/send.php delete mode 100644 source/server/srand.php delete mode 100644 source/server/static.php delete mode 100644 source/server/stats-svg.php delete mode 100644 source/server/store-tree.php delete mode 100644 source/server/upload.php delete mode 100644 source/server/vars-design.php delete mode 100644 source/server/vars-hosts.php delete mode 100644 source/server/vars-main.php delete mode 100644 source/server/vars-store.php delete mode 100644 source/store/access/index.html delete mode 100644 source/store/access/months.xml delete mode 100644 source/store/access/total.xml delete mode 100644 source/store/backgrounds/index.html delete mode 100644 source/store/conf/index.html delete mode 100644 source/store/conf/installed.xml delete mode 100755 source/store/index.html delete mode 100644 source/store/logos/index.html delete mode 100644 source/store/music/index.html delete mode 100644 source/store/share/index.html delete mode 100644 source/store/update/index.html delete mode 100644 source/test/.htaccess delete mode 100644 source/test/Gruntfile.js delete mode 100644 source/test/README.md delete mode 100644 source/test/package.json delete mode 100644 source/tmp/.htaccess delete mode 100644 source/tmp/archives/.gitkeep delete mode 100644 source/tmp/avatar/.gitkeep delete mode 100644 source/tmp/cache/.gitkeep delete mode 100644 source/tmp/send/.gitkeep delete mode 100644 source/tools/.htaccess delete mode 100755 source/tools/extract_mini.sh diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..80df790 --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +VERSION="1.1.4" diff --git a/scripts/install b/scripts/install index 9025b21..e97ce97 100644 --- a/scripts/install +++ b/scripts/install @@ -1,5 +1,7 @@ #!/bin/bash +source ./_common.sh + # Retrieve arguments domain=$1 path=$2 @@ -15,10 +17,13 @@ fi # Remove trailing "/" for next commands path=${path%/} +# Retrieve sources +wget -nv -O jappix.tar.gz https://github.com/jappix/jappix/archive/${VERSION}.tar.gz + # Copy files to the right place final_path=/var/www/jappix sudo mkdir -p $final_path -sudo cp -r ../source/* $final_path +sudo tar -C $final_path -xf jappix.tar.gz --strip-components 1 sudo cp ../conf/*.xml $final_path/store/conf/ # Set permissions to jappix directory diff --git a/scripts/upgrade b/scripts/upgrade index 6d2ec50..184e93e 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,5 +1,7 @@ #!/bin/bash +source ./_common.sh + # Retrieve arguments domain=$(sudo yunohost app setting jappix domain) path=$(sudo yunohost app setting jappix path) @@ -15,14 +17,16 @@ then language="en" fi - # Remove trailing "/" for next commands path=${path%/} +# Retrieve sources +wget -nv -O jappix.tar.gz https://github.com/jappix/jappix/archive/${VERSION}.tar.gz + # Copy files to the right place final_path=/var/www/jappix sudo mkdir -p $final_path -sudo cp -r ../source/* $final_path +sudo tar -C $final_path -xf jappix.tar.gz --strip-components 1 sudo cp ../conf/*.xml $final_path/store/conf/ # Set permissions to jappix directory diff --git a/source/AUTHORS.md b/source/AUTHORS.md deleted file mode 100644 index d761d99..0000000 --- a/source/AUTHORS.md +++ /dev/null @@ -1,76 +0,0 @@ -Jappix Authors -============== - -Here are the Jappix contributors, who coded or translated the application: - - -Founders --------- - -* Valérian Saliou -* Julien Barrier - - -Organizations -------------- - -* PostPro (association) -* FrenchTouch Web Agency (company) - - -Developers ----------- - -* am0ur3ux -* Camaran -* Cyril "Kyriog" Glapa -* hunterjm -* LinkMauve -* Maranda -* Mathieui -* Olivier -* sim6 - - -Translators ------------ - -* allan -* Arsimael -* Belzeneph -* camaran -* Catdarko -* Cerritus -* chunzu -* ebraminio -* Eraser -* Finkregh -* GenghisKhan -* hamano -* JanCBorchardt -* jarda -* joeka -* kahpa -* kr2ysiek -* krohn -* Lenwe -* LinkMauve -* Liverbool -* lwj -* m1st -* Maime -* Maranda -* mbajur -* mentalo -* mkwm -* Natureshadow -* Och.Oyuka -* Otourly -* piotr.moskal -* pocamon -* quimi -* sahwar -* Valérian Saliou -* vitalyster -* zAchAry -* Zash diff --git a/source/CHANGELOG.md b/source/CHANGELOG.md deleted file mode 100644 index bbe9a13..0000000 --- a/source/CHANGELOG.md +++ /dev/null @@ -1,332 +0,0 @@ -Jappix Changelog -================ - -Here's the log of what has changed over the Jappix releases. - - -Primo, v1.1.2 (October 2014) ----------------------------- - - * XEP-0353: Jingle Message Initiation @valeriansaliou - * Fixes Jingle calls in Chrome 38+ @valeriansaliou - - -Primo, v1.1.1 (September 2014) ------------------------------- - - * Ignore empty XHTML-IM messages @eijebong, @valeriansaliou - * Fix a bug with message markers @valeriansaliou - - -Primo, v1.1.0 (June 2014) -------------------------- - - * XEP-0272: Multiparty Jingle (Muji) @valeriansaliou - * Prevent client crash on huge messages @valeriansaliou - * Beautified client code (JavaScript) @valeriansaliou - * Fix unavailable MUC rooms @emamirazavi - - -One, v1.0.7 (May 2014) ----------------------- - - * Fix BackLinks design @valeriansaliou - * Sort Jappix Mobile contacts alphabetically @valeriansaliou - * Display offline contacts in Jappix Mini @valeriansaliou - - -One, v1.0.6 (May 2014) ----------------------- - - * XEP-0308: Last Message Correction @valeriansaliou - * XEP-0333: Chat Markers @valeriansaliou - * XEP-0319: Last User Interaction into Presence @valeriansaliou - * XEP-0224: Attention @valeriansaliou - * XEP-0152: Reachability Addresses @valeriansaliou - * XEP-0334: Message Processing Hints @valeriansaliou - * Fix gateway contacts management @valeriansaliou - * Fix sounds in Jappix Mini @aryo, @valeriansaliou - - -One, v1.0.5 (May 2014) ----------------------- - - * Fix MUC bookmark shortcut button @valeriansaliou - * Fix HTML5 notifications in Firefox 22+ @valeriansaliou - * Fix server commands tool @valeriansaliou - * New translations added (Uzbek), and a few ones updated @nurkamol, @valeriansaliou - - -One, v1.0.4 (May 2014) ----------------------- - - * Fix update tool (on some environments) @valeriansaliou - * Fix MUC room join @maranda, @valeriansaliou - * Fix special chars in JIDs for Jappix Mini @dunger, @valeriansaliou - * Fix WebSocket session termination in JSJaC @sstrigler - * Enhance backend security (verify SSL certificates) @valeriansaliou - * Add assets client cache option @valeriansaliou - * Add SSO support to Jappix Mobile @valeriansaliou - - -One, v1.0.3 (March 2014) ------------------------- - - * Fix JSJaC packet register @valeriansaliou, @sstrigler - - -One, v1.0.2 (March 2014) ------------------------- - - * Fix IQ spoofing security issue @valeriansaliou, @sstrigler - * Better autocompletion @Nabellaleen - * Various bugfixes @Nabellaleen, @valeriansaliou - - -One, v1.0.1 (January 2014) --------------------------- - - * Change MAM namespace to a temporary one @maranda - * Fix broken Jappix Mini CSS loader in some cases @valeriansaliou - * Libs update @valeriansaliou - - -One, v1.0.0 (January 2014) --------------------------- - - * XEP-0166: Jingle @valeriansaliou - * XEP-0292: vCard4 Over XMPP @valeriansaliou - * XEP-0280: Message Carbons @valeriansaliou - * IE9, IE10, IE11 support @valeriansaliou - * Libs update @valeriansaliou - * Client code rewrite @valeriansaliou - * Directory tree re-organization @valeriansaliou - * Tested code (pass CSSLint, JSHint and PHPLint) @valeriansaliou - - -Nemesis Alpha 9, v0.9.9 (August 2013) -------------------------------------- - - * XEP-0313: Message Archive Management @valeriansaliou - * Drop support for Message Archiving (XEP-0136), outpaced by MAM (XEP-0313) @valeriansaliou - * Jappix Desktop performances improved (noticeable with big rosters) @valeriansaliou - * Fix Jappix Desktop avatar system, unable to cache avatars (thus increasing network load and delays) @valeriansaliou - * New translations added (Mongolian), and a few ones updated @valeriansaliou - - -Nemesis Alpha 8, v0.9.8 (May 2013) ----------------------------------- - - * RTL (Right-To-Left Languages) support @valeriansaliou - * Various bufixes @valeriansaliou - - -Nemesis Alpha 7, v0.9.7 (April 2013) ------------------------------------- - - * Fix overflow events in Mini @valeriansaliou - * Fix user info display bug with formatted text @valeriansaliou - * Jappix Me notification system @valeriansaliou - * Update JSJaC @valeriansaliou - * Update jQuery (v1.10.1) @valeriansaliou - - -Nemesis Alpha 6, v0.9.6 (April 2013) ------------------------------------- - - * Fix login with accented usernames @valeriansaliou - * WOFF Get API headers fixed @valeriansaliou - * Better Get API URL generator @valeriansaliou - * Fix broken Jappix Mini extraction script @valeriansaliou - * Show when user joins/exits MUC in Jappix Mini @valeriansaliou - - -Nemesis Alpha 5, v0.9.5 (March 2013) ------------------------------------- - - * Jappix Mini enhancements @valeriansaliou - * Fix Jappix over non-standard ports @valeriansaliou - * Locale detector improved @valeriansaliou - * Load more items on social channel scroll @valeriansaliou - * Fix a lot of English base language typos @valeriansaliou - * Support for XHTML microblog entries (Movim compatibility) @valeriansaliou - * Show Jappix Desktop on tablets (not mobile anymore) @valeriansaliou - * Option to disable Jappix Mini on mobile phones @valeriansaliou - * Fix broken MUC bookmarks retrieval @valeriansaliou - - -Nemesis Alpha 4, v0.9.4 (March 2013) ------------------------------------- - - * [SECURITY] Fix insafe HTML escaping @valeriansaliou - * PHP 5.4 compatibility @valeriansaliou - * Auto-populate microblog on connect @valeriansaliou - * Register API support for Metronome XMPPd @valeriansaliou - * Non-blocking PHP sessions @valeriansaliou - * Permissive geoloc selector in microblog @valeriansaliou - * Select priority more easily @valeriansaliou - * Compliancy with Atom specification (social inbox) @valeriansaliou - * Added project mirrors @valeriansaliou - - -Nemesis Alpha 3, v0.9.3 (February 2013) ---------------------------------------- - - * [SECURITY] More randomness in CAPTCHA @valeriansaliou - * Fix buggy roster filter with groups @valeriansaliou - * Add Piwik tracking feature (configurable in manager) @valeriansaliou - * Easy popup close by clicking away @valeriansaliou - * Fix cropped uploaded pictures @valeriansaliou - * Revert to old File Share API (which is far better) @valeriansaliou - * Fixes broken translations (strange UTF-8 chars due to bugged Gettext compiler) @valeriansaliou - - -Nemesis Alpha 2, v0.9.2 (January 2013) --------------------------------------- - - * [SECURITY] Introduce the Register API (prevents register flood by spam bots) @valeriansaliou - * Reworked Storage API @valeriansaliou - * Jappix Mini code beautify @valeriansaliou - * Lighter and Web-safe font files @valeriansaliou - * Better error logging @valeriansaliou - * Fix Openfire ping request @valeriansaliou - * Typing notification in Jappix Mini @valeriansaliou - * Support for WebKit notifications @valeriansaliou - * Jappix Mini groupchat suggest @valeriansaliou - * Enhanced Download API @valeriansaliou - * Mini animated chat icon, much sexier @valeriansaliou - * IE custom font compatibility @valeriansaliou - * Legal changes @valeriansaliou - * Update licensing with real names @valeriansaliou - - -Nemesis Alpha 1, v0.9.1 (2012) ------------------------------- - - * Show an 'add to home' button on iOS devices @camaran - * Ability to suspend statistics @valeriansaliou - * Fix IE9 issue with clustering @valeriansaliou - * Show profile button in user search results @valeriansaliou - * Ability to change message font, font size and color @valeriansaliou - * Fix choppy Jappix Mini status picker @valeriansaliou - * Sounds for Safari & IE9 @valeriansaliou - * Enhance new file storage functions @valeriansaliou - * No resize for textareas @valeriansaliou - * Add a configurable legal disclaimer @valeriansaliou - * Fix a loop bug on presence if no support for sessionStorage @valeriansaliou - * Universal fonts @valeriansaliou - * Add ability to configure the node owner name & website @valeriansaliou - * HTTP authentication for LDAP @valeriansaliou - * Better notification + comments management @valeriansaliou - - -Spaco, v0.9 (2011) ------------------- - - * [SECURITY] Fix when sending files to a contact @valeriansaliou - * Better Jappix Mini performances @valeriansaliou - * Fix Jappix Mini display issues @valeriansaliou - * Connection issue fixed with BOSH API @valeriansaliou - * Open XMPP links when Jappix is ready @valeriansaliou - - -Suno, v0.8 (2011) ---------------------- - - * XEP-0066: Out of Band Data @valeriansaliou - * Switch from OpenStreetMap to Google Maps for geolocation @valeriansaliou - - -Stelo, v0.7 (2011) ------------------- - - * Lighter Jappix Mini @valeriansaliou - * Welcome popup @valeriansaliou - * Support for /me command in Jappix Mini @valeriansaliou - * Fixes in social channel @valeriansaliou - * Bigger BOSH poll interval (avoids some overactivity errors) @valeriansaliou - * Compression disabled by default in Get API @valeriansaliou - * Send chatstates in MUC @valeriansaliou - * Social notification inbox @valeriansaliou - - -Lumo, v0.6 (2011) ------------------ - - * Smoother Mini animation @valeriansaliou - * Show avatars in social channel comments @valeriansaliou - * Legacy mode for microblog comments @valeriansaliou - * Microblog updated to comply with a new version of XEP-0277 @valeriansaliou - * Fix DNS SRV issue because of a 'route' attribute on BOSH initiation @valeriansaliou - - -Ribelo, v0.5 (2011) -------------------- - - * Add support for comments in microblog @valeriansaliou - * Jappix Mini fixes and improvements @valeriansaliou - - -Lupo, v0.4 (2011) ------------------ - - * Full IE5.5 compatibility for Jappix Mini @valeriansaliou - * BOSH without cURL (if cURL unavailable) @valeriansaliou - * Handle multiple microblog attached files @valeriansaliou - * Microblog attached files thumbnails @valeriansaliou - * BOM (Byte Order Mark) filtering for Get API @valeriansaliou - * Autoplay for new YouTube HTML5 player @valeriansaliou - * Support for privacy lists pushs @valeriansaliou - * Roster-side privacy lists (make contact blocking/unblocking easy) @valeriansaliou - * Better update checker @valeriansaliou - * XEP-0144: Roster Item Exchange @valeriansaliou - * Cross domain support for Internet Explorer and legacy browsers @valeriansaliou - * Update jQuery (v1.4.4) @valeriansaliou - * TZO fix (for negative timezones, e.g.: UTC-5) @valeriansaliou - * Better language detection @valeriansaliou - * Use HTML5 or Flash for YouTube embedded videos @valeriansaliou - - -Prism, v0.3 (2011) ------------------- - - * [SECURITY] Fix JS escape bug for quotes @valeriansaliou - * [SECURITY] HTML-encode notification username @valeriansaliou - * Introduction of Jappix Mini @valeriansaliou - * Introduction of Jappix Manager @valeriansaliou - * Introduction of Jappix Install @valeriansaliou - * XEP-0050: Ad-Hoc Commands @valeriansaliou - * XEP-0136: Message Archiving @valeriansaliou - * Update Jappix logo @valeriansaliou - * Declare application language to XMPP server @valeriansaliou - * Add a buddy search tool @valeriansaliou - * Support for old/legacy vCard server implementations @valeriansaliou - * Inbox messages sorted by date @valeriansaliou - * Better music search @valeriansaliou - * Human-readable geolocation @valeriansaliou - * Gateway show/hide @valeriansaliou - * HTML5 forms @valeriansaliou - * Better notification management @valeriansaliou - * Unified chat design @valeriansaliou - * Dynamic DOM load (better performances) @valeriansaliou - * Jappix logo shown when connected (improves branding) @valeriansaliou - - -Lidar, v0.2 (2010) ------------------- - - * Introduction of Jappix Mobile @valeriansaliou - * UI redesign (from grey to black and blue) @valeriansaliou - * Social channel introduced (microblog) @valeriansaliou - - -Genesis, v0.1 (2010) --------------------- - - * Initial version, released after private beta @valeriansaliou - * Introduction of Jappix Desktop @valeriansaliou - * Basic chat, groupchat, roster and profile features @valeriansaliou - * Basic UI @valeriansaliou - - -**For more information about what changed through time, check the changes made to our source code on GitHub: https://github.com/jappix/jappix/commits/master** diff --git a/source/COPYING.md b/source/COPYING.md deleted file mode 100644 index 7fc56b5..0000000 --- a/source/COPYING.md +++ /dev/null @@ -1,666 +0,0 @@ -Jappix Copying -============== - - - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license - for software and other kinds of works, specifically designed to ensure - cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are - designed to take away your freedom to share and change the works. By - contrast, our General Public Licenses are intended to guarantee your - freedom to share and change all versions of a program--to make sure it - remains free software for all its users. - - When we speak of free software, we are referring to freedom, not - price. Our General Public Licenses are designed to make sure that you - have the freedom to distribute copies of free software (and charge for - them if you wish), that you receive source code or can get it if you - want it, that you can change the software or use pieces of it in new - free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights - with two steps: (1) assert copyright on the software, and (2) offer - you this License which gives you legal permission to copy, distribute - and/or modify the software. - - A secondary benefit of defending all users' freedom is that - improvements made in alternate versions of the program, if they - receive widespread use, become available for other developers to - incorporate. Many developers of free software are heartened and - encouraged by the resulting cooperation. However, in the case of - software used on network servers, this result may fail to come about. - The GNU General Public License permits making a modified version and - letting the public access it on a server without ever releasing its - source code to the public. - - The GNU Affero General Public License is designed specifically to - ensure that, in such cases, the modified source code becomes available - to the community. It requires the operator of a network server to - provide the source code of the modified version running there to the - users of that server. Therefore, public use of a modified version, on - a publicly accessible server, gives the public access to the source - code of the modified version. - - An older license, called the Affero General Public License and - published by Affero, was designed to accomplish similar goals. This is - a different license, not a version of the Affero GPL, but Affero has - released a new version of the Affero GPL which permits relicensing under - this license. - - The precise terms and conditions for copying, distribution and - modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public - License. - - "Copyright" also means copyright-like laws that apply to other kinds - of works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this - License. Each licensee is addressed as "you". "Licensees" and - "recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work - in a fashion requiring copyright permission, other than the making of an - exact copy. The resulting work is called a "modified version" of the - earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based - on the Program. - - To "propagate" a work means to do anything with it that, without - permission, would make you directly or secondarily liable for - infringement under applicable copyright law, except executing it on a - computer or modifying a private copy. Propagation includes copying, - distribution (with or without modification), making available to the - public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other - parties to make or receive copies. Mere interaction with a user through - a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" - to the extent that it includes a convenient and prominently visible - feature that (1) displays an appropriate copyright notice, and (2) - tells the user that there is no warranty for the work (except to the - extent that warranties are provided), that licensees may convey the - work under this License, and how to view a copy of this License. If - the interface presents a list of user commands or options, such as a - menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work - for making modifications to it. "Object code" means any non-source - form of a work. - - A "Standard Interface" means an interface that either is an official - standard defined by a recognized standards body, or, in the case of - interfaces specified for a particular programming language, one that - is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other - than the work as a whole, that (a) is included in the normal form of - packaging a Major Component, but which is not part of that Major - Component, and (b) serves only to enable use of the work with that - Major Component, or to implement a Standard Interface for which an - implementation is available to the public in source code form. A - "Major Component", in this context, means a major essential component - (kernel, window system, and so on) of the specific operating system - (if any) on which the executable work runs, or a compiler used to - produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all - the source code needed to generate, install, and (for an executable - work) run the object code and to modify the work, including scripts to - control those activities. However, it does not include the work's - System Libraries, or general-purpose tools or generally available free - programs which are used unmodified in performing those activities but - which are not part of the work. For example, Corresponding Source - includes interface definition files associated with source files for - the work, and the source code for shared libraries and dynamically - linked subprograms that the work is specifically designed to require, - such as by intimate data communication or control flow between those - subprograms and other parts of the work. - - The Corresponding Source need not include anything that users - can regenerate automatically from other parts of the Corresponding - Source. - - The Corresponding Source for a work in source code form is that - same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of - copyright on the Program, and are irrevocable provided the stated - conditions are met. This License explicitly affirms your unlimited - permission to run the unmodified Program. The output from running a - covered work is covered by this License only if the output, given its - content, constitutes a covered work. This License acknowledges your - rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not - convey, without conditions so long as your license otherwise remains - in force. You may convey covered works to others for the sole purpose - of having them make modifications exclusively for you, or provide you - with facilities for running those works, provided that you comply with - the terms of this License in conveying all material for which you do - not control copyright. Those thus making or running the covered works - for you must do so exclusively on your behalf, under your direction - and control, on terms that prohibit them from making any copies of - your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under - the conditions stated below. Sublicensing is not allowed; section 10 - makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological - measure under any applicable law fulfilling obligations under article - 11 of the WIPO copyright treaty adopted on 20 December 1996, or - similar laws prohibiting or restricting circumvention of such - measures. - - When you convey a covered work, you waive any legal power to forbid - circumvention of technological measures to the extent such circumvention - is effected by exercising rights under this License with respect to - the covered work, and you disclaim any intention to limit operation or - modification of the work as a means of enforcing, against the work's - users, your or third parties' legal rights to forbid circumvention of - technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you - receive it, in any medium, provided that you conspicuously and - appropriately publish on each copy an appropriate copyright notice; - keep intact all notices stating that this License and any - non-permissive terms added in accord with section 7 apply to the code; - keep intact all notices of the absence of any warranty; and give all - recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, - and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to - produce it from the Program, in the form of source code under the - terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent - works, which are not by their nature extensions of the covered work, - and which are not combined with it such as to form a larger program, - in or on a volume of a storage or distribution medium, is called an - "aggregate" if the compilation and its resulting copyright are not - used to limit the access or legal rights of the compilation's users - beyond what the individual works permit. Inclusion of a covered work - in an aggregate does not cause this License to apply to the other - parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms - of sections 4 and 5, provided that you also convey the - machine-readable Corresponding Source under the terms of this License, - in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded - from the Corresponding Source as a System Library, need not be - included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any - tangible personal property which is normally used for personal, family, - or household purposes, or (2) anything designed or sold for incorporation - into a dwelling. In determining whether a product is a consumer product, - doubtful cases shall be resolved in favor of coverage. For a particular - product received by a particular user, "normally used" refers to a - typical or common use of that class of product, regardless of the status - of the particular user or of the way in which the particular user - actually uses, or expects or is expected to use, the product. A product - is a consumer product regardless of whether the product has substantial - commercial, industrial or non-consumer uses, unless such uses represent - the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, - procedures, authorization keys, or other information required to install - and execute modified versions of a covered work in that User Product from - a modified version of its Corresponding Source. The information must - suffice to ensure that the continued functioning of the modified object - code is in no case prevented or interfered with solely because - modification has been made. - - If you convey an object code work under this section in, or with, or - specifically for use in, a User Product, and the conveying occurs as - part of a transaction in which the right of possession and use of the - User Product is transferred to the recipient in perpetuity or for a - fixed term (regardless of how the transaction is characterized), the - Corresponding Source conveyed under this section must be accompanied - by the Installation Information. But this requirement does not apply - if neither you nor any third party retains the ability to install - modified object code on the User Product (for example, the work has - been installed in ROM). - - The requirement to provide Installation Information does not include a - requirement to continue to provide support service, warranty, or updates - for a work that has been modified or installed by the recipient, or for - the User Product in which it has been modified or installed. Access to a - network may be denied when the modification itself materially and - adversely affects the operation of the network or violates the rules and - protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, - in accord with this section must be in a format that is publicly - documented (and with an implementation available to the public in - source code form), and must require no special password or key for - unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this - License by making exceptions from one or more of its conditions. - Additional permissions that are applicable to the entire Program shall - be treated as though they were included in this License, to the extent - that they are valid under applicable law. If additional permissions - apply only to part of the Program, that part may be used separately - under those permissions, but the entire Program remains governed by - this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option - remove any additional permissions from that copy, or from any part of - it. (Additional permissions may be written to require their own - removal in certain cases when you modify the work.) You may place - additional permissions on material, added by you to a covered work, - for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you - add to a covered work, you may (if authorized by the copyright holders of - that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further - restrictions" within the meaning of section 10. If the Program as you - received it, or any part of it, contains a notice stating that it is - governed by this License along with a term that is a further restriction, - you may remove that term. If a license document contains a further - restriction but permits relicensing or conveying under this License, you - may add to a covered work material governed by the terms of that license - document, provided that the further restriction does not survive such - relicensing or conveying. - - If you add terms to a covered work in accord with this section, you - must place, in the relevant source files, a statement of the - additional terms that apply to those files, or a notice indicating - where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the - form of a separately written license, or stated as exceptions; - the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly - provided under this License. Any attempt otherwise to propagate or - modify it is void, and will automatically terminate your rights under - this License (including any patent licenses granted under the third - paragraph of section 11). - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly and - finally terminates your license, and (b) permanently, if the copyright - holder fails to notify you of the violation by some reasonable means - prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from that - copyright holder, and you cure the violation prior to 30 days after - your receipt of the notice. - - Termination of your rights under this section does not terminate the - licenses of parties who have received copies or rights from you under - this License. If your rights have been terminated and not permanently - reinstated, you do not qualify to receive new licenses for the same - material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or - run a copy of the Program. Ancillary propagation of a covered work - occurring solely as a consequence of using peer-to-peer transmission - to receive a copy likewise does not require acceptance. However, - nothing other than this License grants you permission to propagate or - modify any covered work. These actions infringe copyright if you do - not accept this License. Therefore, by modifying or propagating a - covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically - receives a license from the original licensors, to run, modify and - propagate that work, subject to this License. You are not responsible - for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an - organization, or substantially all assets of one, or subdividing an - organization, or merging organizations. If propagation of a covered - work results from an entity transaction, each party to that - transaction who receives a copy of the work also receives whatever - licenses to the work the party's predecessor in interest had or could - give under the previous paragraph, plus a right to possession of the - Corresponding Source of the work from the predecessor in interest, if - the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the - rights granted or affirmed under this License. For example, you may - not impose a license fee, royalty, or other charge for exercise of - rights granted under this License, and you may not initiate litigation - (including a cross-claim or counterclaim in a lawsuit) alleging that - any patent claim is infringed by making, using, selling, offering for - sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this - License of the Program or a work on which the Program is based. The - work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims - owned or controlled by the contributor, whether already acquired or - hereafter acquired, that would be infringed by some manner, permitted - by this License, of making, using, or selling its contributor version, - but do not include claims that would be infringed only as a - consequence of further modification of the contributor version. For - purposes of this definition, "control" includes the right to grant - patent sublicenses in a manner consistent with the requirements of - this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free - patent license under the contributor's essential patent claims, to - make, use, sell, offer for sale, import and otherwise run, modify and - propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express - agreement or commitment, however denominated, not to enforce a patent - (such as an express permission to practice a patent or covenant not to - sue for patent infringement). To "grant" such a patent license to a - party means to make such an agreement or commitment not to enforce a - patent against the party. - - If you convey a covered work, knowingly relying on a patent license, - and the Corresponding Source of the work is not available for anyone - to copy, free of charge and under the terms of this License, through a - publicly available network server or other readily accessible means, - then you must either (1) cause the Corresponding Source to be so - available, or (2) arrange to deprive yourself of the benefit of the - patent license for this particular work, or (3) arrange, in a manner - consistent with the requirements of this License, to extend the patent - license to downstream recipients. "Knowingly relying" means you have - actual knowledge that, but for the patent license, your conveying the - covered work in a country, or your recipient's use of the covered work - in a country, would infringe one or more identifiable patents in that - country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or - arrangement, you convey, or propagate by procuring conveyance of, a - covered work, and grant a patent license to some of the parties - receiving the covered work authorizing them to use, propagate, modify - or convey a specific copy of the covered work, then the patent license - you grant is automatically extended to all recipients of the covered - work and works based on it. - - A patent license is "discriminatory" if it does not include within - the scope of its coverage, prohibits the exercise of, or is - conditioned on the non-exercise of one or more of the rights that are - specifically granted under this License. You may not convey a covered - work if you are a party to an arrangement with a third party that is - in the business of distributing software, under which you make payment - to the third party based on the extent of your activity of conveying - the work, and under which the third party grants, to any of the - parties who would receive the covered work from you, a discriminatory - patent license (a) in connection with copies of the covered work - conveyed by you (or copies made from those copies), or (b) primarily - for and in connection with specific products or compilations that - contain the covered work, unless you entered into that arrangement, - or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting - any implied license or other defenses to infringement that may - otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or - otherwise) that contradict the conditions of this License, they do not - excuse you from the conditions of this License. If you cannot convey a - covered work so as to satisfy simultaneously your obligations under this - License and any other pertinent obligations, then as a consequence you may - not convey it at all. For example, if you agree to terms that obligate you - to collect a royalty for further conveying from those to whom you convey - the Program, the only way you could satisfy both those terms and this - License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the - Program, your modified version must prominently offer all users - interacting with it remotely through a computer network (if your version - supports such interaction) an opportunity to receive the Corresponding - Source of your version by providing access to the Corresponding Source - from a network server at no charge, through some standard or customary - means of facilitating copying of software. This Corresponding Source - shall include the Corresponding Source for any work covered by version 3 - of the GNU General Public License that is incorporated pursuant to the - following paragraph. - - Notwithstanding any other provision of this License, you have permission - to link or combine any covered work with a work licensed under version 3 - of the GNU General Public License into a single combined work, and to - convey the resulting work. The terms of this License will continue to - apply to the part which is the covered work, but the work with which it is - combined will remain governed by version 3 of the GNU General Public - License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of - the GNU Affero General Public License from time to time. Such new - versions will be similar in spirit to the present version, but may differ - in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the - Program specifies that a certain numbered version of the GNU Affero - General Public License "or any later version" applies to it, you have - the option of following the terms and conditions either of that - numbered version or of any later version published by the Free - Software Foundation. If the Program does not specify a version number - of the GNU Affero General Public License, you may choose any version - ever published by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future - versions of the GNU Affero General Public License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Program. - - Later license versions may give you additional or different - permissions. However, no additional obligations are imposed on any - author or copyright holder as a result of your choosing to follow a - later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY - APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT - HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY - OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, - THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM - IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF - ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING - WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS - THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY - GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE - USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF - DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD - PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), - EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF - SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided - above cannot be given local legal effect according to their terms, - reviewing courts shall apply local law that most closely approximates - an absolute waiver of all civil liability in connection with the - Program, unless a warranty or assumption of liability accompanies a - copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest - possible use to the public, the best way to achieve this is to make it - free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest - to attach them to the start of each source file to most effectively - state the exclusion of warranty; and each file should have at least - the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - - Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer - network, you should also make sure that it provides a way for users to - get its source. For example, if your program is a web application, its - interface could display a "Source" link that leads users to an archive - of the code. There are many ways you could offer source, and different - solutions will be better for different programs; see section 13 for the - specific requirements. - - You should also get your employer (if you work as a programmer) or school, - if any, to sign a "copyright disclaimer" for the program, if necessary. - For more information on this, and how to apply and follow the GNU AGPL, see - . diff --git a/source/COPYING_FONT.md b/source/COPYING_FONT.md deleted file mode 100644 index eb6a6e0..0000000 --- a/source/COPYING_FONT.md +++ /dev/null @@ -1,40 +0,0 @@ -Jappix Font Copying -=================== - -_Copyright © 2009 ParaType Ltd._ -_with Reserved Names "PT Sans" and "ParaType"._ - - -Font License ------------- - -Permission & Conditions ------------------------ - -Permission is hereby granted, free of charge, to any person obtaining a copy of the font software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the font software, subject to the following conditions: - -1. Neither the font software nor any of its individual components, in original or modified versions, may be sold by itself. - -2. Original or modified versions of the font software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. - -3. No modified version of the font software may use the Reserved Name(s) or combinations of Reserved Names with other words unless explicit written permission is granted by the ParaType. This restriction only applies to the primary font name as presented to the users. - -4. The name of ParaType or the author(s) of the font software shall not be used to promote, endorse or advertise any modified version, except to acknowledge the contribution(s) of ParaType and the author(s) or with explicit written permission of ParaType. - -5. The font software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. - - -Termination & Territory ------------------------ - -This license has no limits on time and territory, but it becomes null and void if any of the above conditions are not met. - - -Disclaimer ----------- - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL PARATYPE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. - - -**ParaType Ltd** -**http://www.paratype.ru** diff --git a/source/COPYING_MINI.md b/source/COPYING_MINI.md deleted file mode 100644 index c8168c4..0000000 --- a/source/COPYING_MINI.md +++ /dev/null @@ -1,26 +0,0 @@ -Jappix Mini Copying -=================== - -Code ----- - -The following notice applies to the files which state that they are dual- -licensed under the MPL: - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -Artwork -------- - -The files img/sprites/mini.png and img/sprites/mini.gif were created by -Valérian Saliou and are dual-licensed under the Creative Commons Attribution 2.5 -License and the Creative Commons Attribution 3.0 License. - -They contain work from the FamFamFam Silk icon set by Mark James. - -* http://famfamfam.com/lab/icons/silk/ -* http://creativecommons.org/licenses/by/2.5/ -* http://creativecommons.org/licenses/by/3.0/ diff --git a/source/INSTALL.md b/source/INSTALL.md deleted file mode 100644 index 8708161..0000000 --- a/source/INSTALL.md +++ /dev/null @@ -1,21 +0,0 @@ -Jappix Installation -=================== - -It's very simple to install Jappix on your webserver, you just have to follow these things: - - -Installation ------------- - -* The HTTP server: https://github.com/jappix/jappix/wiki/HttpServer -* The XMPP server: https://github.com/jappix/jappix/wiki/XmppServer -* The BOSH server: https://github.com/jappix/jappix/wiki/BoshServer -* The Jappix app : https://github.com/jappix/jappix/wiki/JappixApp - -More ----- - -* The whole documentation is available at: https://github.com/jappix/jappix/wiki - - -Now, you can use Jappix. Happy socializing! diff --git a/source/PROTOCOL.md b/source/PROTOCOL.md deleted file mode 100644 index 846dfb1..0000000 --- a/source/PROTOCOL.md +++ /dev/null @@ -1,88 +0,0 @@ -Jappix Protocol Support -======================= - -Here are listed the XMPP Protocol Extensions that Jappix supports, as well as their implementation version. - - -# XMPP Core - - * RFC-6120: Extensible Messaging and Presence Protocol (XMPP): Core - * RFC-6121: Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence - * RFC-6122: Extensible Messaging and Presence Protocol (XMPP): Address Format - - -# XMPP Extensions (Standardized) - - * XEP-0004: Data Forms *v2.9* - * XEP-0012: Last Activity *v2.0* - * XEP-0016: Privacy Lists *v1.6* - * XEP-0030: Service Discovery *v2.4* - * XEP-0045: Multi-User Chat *v1.25* - * XEP-0049: Private XML Storage *v1.2* - * XEP-0050: Ad-Hoc Commands *v1.2* - * XEP-0054: vcard-temp *v1.2* - * XEP-0055: Jabber Search *v1.3* - * XEP-0060: Publish-Subscribe *v1.13* - * XEP-0066: Out of Band Data *v1.5* - * XEP-0071: XHTML-IM *v1.5* - * XEP-0072: SOAP Over XMPP *v1.0* - * XEP-0077: In-Band Registration *v2.4* - * XEP-0080: User Location *v1.7* - * XEP-0084: User Avatar *v1.1* - * XEP-0085: Chat State Notifications *v2.1* - * XEP-0092: Software Version *v1.1* - * XEP-0107: User Mood *v1.2* - * XEP-0108: User Activity *v1.3* - * XEP-0115: Entity Capabilities *v1.5* - * XEP-0118: User Tune *v1.2* - * XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH) *v1.10* - * XEP-0144: Roster Item Exchange *v1.0* - * XEP-0152: Reachability Addresses *v1.0* - * XEP-0166: Jingle *v1.1* - * XEP-0167: Jingle RTP Sessions *v1.1* - * XEP-0172: User Nickname *v1.1* - * XEP-0176: Jingle ICE-UDP Transport Method *v1.0* - * XEP-0177: Jingle Raw UDP Transport Method *v1.1* - * XEP-0184: Message Delivery Receipts *v1.2* - * XEP-0199: XMPP Ping *v2.0* - * XEP-0202: Entity Time *v2.0* - * XEP-0203: Delayed Delivery *v2.0* - * XEP-0224: Attention *v1.0* - * XEP-0215: External Service Discovery *v0.5* - * XEP-0249: Direct MUC Invitations *v1.2* - * XEP-0262: Use of ZRTP in Jingle RTP Sessions *v1.0* - * XEP-0266: Codecs for Jingle Audio *v1.0* - * XEP-0269: Jingle Early Media *v0.1* - * XEP-0277: Microblogging over XMPP *v0.6* - * XEP-0278: Jingle Relay Nodes *v0.2* - * XEP-0280: Message Carbons *v0.9* - * XEP-0292: vCard4 Over XMPP *v0.10* - * XEP-0293: Jingle RTP Feedback Negotiation *v0.1* - * XEP-0294: Jingle RTP Header Extensions Negotiation *v0.1* - * XEP-0299: Codecs for Jingle Video *v0.1* - * XEP-0308: Last Message Correction *v1.0* - * XEP-0319: Last User Interaction in Presence *v0.2* - * XEP-0320: Use of DTLS-SRTP in Jingle Sessions *v0.2* - * XEP-0333: Chat Markers *v0.2* - * XEP-0334: Message Processing Hints *v0.1* - * XEP-0338: Jingle Grouping Framework *v0.1* - * XEP-0339: Source-Specific Media Attributes in Jingle *v0.1* - * XEP-0353: Jingle Message Initiation *v0.1* - - -# XMPP Extensions (Updated) - - * XEP-0272: Multiparty Jingle (Muji) *v0.2* - * Alternate URL: https://demo.hakuma.holdings/valerian.saliou/xmpp/extensions/xep-0272.html - * XEP-0313: Message Archive Management *v0.3* - * Alternate URL: https://demo.hakuma.holdings/valerian.saliou/xmpp/extensions/xep-0313.html - - -# XMPP Extensions (Proposed) - * XEP-xxxx: Notification Inbox *v0.1* - * Alternate URL: http://xmpp.org/extensions/inbox/notification-inbox.html - - -# Others - - * RFC-3264: An Offer/Answer Model with Session Description Protocol (SDP) diff --git a/source/README.md b/source/README.md deleted file mode 100644 index 8413ee0..0000000 --- a/source/README.md +++ /dev/null @@ -1,73 +0,0 @@ -Jappix - - -Jappix is a fresh new open social platform which enables you to create your own cloud, wherever you want to. People must be able to get in touch with all their friends on a free decentralized network! - -You can build your own Jappix installation for your own requirements: if you want to use it as a personal social client, you can download it and put it on your webserver. It's easy, fast and free. - - -[![build status](https://ci.hakuma.holdings/projects/7/status.png?ref=master)](https://ci.hakuma.holdings/projects/7?ref=master) - - -License -------- - -Jappix is released under the terms of the AGPL license. See COPYING for details. - - -Installation ------------- - -Please refer to the installation instructions that are located in the INSTALL file to process the Jappix installation. - - -Translations ------------- - -Help us translate Jappix and get Jappix in your language! - -Start translating on https://www.transifex.com/projects/p/jappix/ (new translators are automatically approved when they join a translation team). - - -Links ------ - -* Jappix project website: https://jappix.org/ -* Jappix project dev panel: https://github.com/jappix/jappix -* Jappix nodes list: https://jappix.net/ -* Jappix main service: https://jappix.com/ -* Jappix commercial support: https://jappix.pro/ - - -Mirrors -------- - -In case a master service is down (GitHub for Git access or Jappix.org for project download), here is a list of available mirrors: - -* Project website mirror: https://project.jappix.com/ -* Development repository mirror: https://code.hakuma.holdings/jappix/jappix - - -MUC Links ---------- - -* Jappix.org support room: https://jappix.com/?r=support@muc.jappix.org -* Jappix.org dev-talk room: https://jappix.com/?r=dev@muc.jappix.org - - -Social networking ------------------ - -We're social and you can join us on: - -* Twitter: https://twitter.com/jappixorg -* Facebook: https://www.facebook.com/jappix -* Google+: https://plus.google.com/b/107215163233435523450/ - -We're not on your favorite social network? Contact us and we'll do everything we can to be there too! - - -One more thing... ------------------ - -Have fun with Jappix, and don't hesitate to help us by reporting bugs, translating or submitting new ideas! diff --git a/source/THANKS.md b/source/THANKS.md deleted file mode 100644 index 9cfe295..0000000 --- a/source/THANKS.md +++ /dev/null @@ -1,23 +0,0 @@ -Jappix Thanks -============= - -We would like to thanks the authors of these tools, coming from other projects: - - -Projects --------- - -* Base64 https://github.com/dankogai/js-base64 -* DrawSVGChart http://codingteam.net/project/codingteam -* idzXHR http://www.iadvize.com/plugin_strophe_xmpp.html -* JSJaC http://blog.jwchat.org/jsjac/ -* JSMin http://github.com/rgrove/jsmin-php/ -* jQuery http://jquery.com/ -* jQuery Form http://jquery.malsup.com/form/ -* jQuery Timers http://plugins.jquery.com/project/timers -* jXHR http://mulletxhr.com/ -* Mobile Detect https://github.com/serbanghita/Mobile-Detect -* ParaType http://paratype.ru/ -* PHP-gettext https://launchpad.net/php-gettext -* Silk icons http://www.famfamfam.com/lab/icons/silk/ -* Smileys http://www.gajim.org/ diff --git a/source/VERSION b/source/VERSION deleted file mode 100644 index 3793834..0000000 --- a/source/VERSION +++ /dev/null @@ -1 +0,0 @@ -Primo [1.1.2] diff --git a/source/app/.htaccess b/source/app/.htaccess deleted file mode 100644 index a6e0b16..0000000 --- a/source/app/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ -# Security rule -deny from all \ No newline at end of file diff --git a/source/app/bundles/anonymous.xml b/source/app/bundles/anonymous.xml deleted file mode 100644 index 03008df..0000000 --- a/source/app/bundles/anonymous.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - anonymous.css - anonymous.js - diff --git a/source/app/bundles/desktop.xml b/source/app/bundles/desktop.xml deleted file mode 100644 index 4042d38..0000000 --- a/source/app/bundles/desktop.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - fonts.css~main.css~images.css~board.css~home.css~others.css~tools.css~roster.css~myinfos.css~pageengine.css~channel.css~pageswitch.css~smileys.css~popup.css~vcard.css~options.css~favorites.css~discovery.css~directory.css~adhoc.css~privacy.css~inbox.css~mucadmin.css~integratebox.css~userinfos.css~search.css~welcome.css~me.css~rosterx.css~call.css~jingle.css~muji.css - origin.js~jxhr.js~datejs.js~jquery.js~jquery.ui.js~jquery.json.js~jquery.form.js~jquery.timers.js~jquery.placeholder.js~jquery.textrange.js~jquery.scrollto.js~base64.js~jsjac.js~jsjac.jingle.js~system.js~constants.js~datastore.js~browser-detect.js~home.js~talk.js~popup.js~audio.js~board.js~bubble.js~chat.js~groupchat.js~smileys.js~oob.js~avatar.js~mucadmin.js~connection.js~dataform.js~discovery.js~directory.js~adhoc.js~privacy.js~errors.js~name.js~favorites.js~features.js~interface.js~xmpplinks.js~iq.js~message.js~chatstate.js~receipts.js~tooltip.js~filter.js~links.js~inbox.js~microblog.js~music.js~notification.js~httpreply.js~options.js~integratebox.js~pubsub.js~pep.js~presence.js~roster.js~call.js~jingle.js~muji.js~storage.js~console.js~common.js~utilities.js~date.js~caps.js~vcard.js~userinfos.js~search.js~autocompletion.js~welcome.js~me.js~rosterx.js~mam.js~carbons.js~correction.js~markers.js~attention.js - diff --git a/source/app/bundles/httpauth.xml b/source/app/bundles/httpauth.xml deleted file mode 100644 index e3e597e..0000000 --- a/source/app/bundles/httpauth.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - httpauth.js - diff --git a/source/app/bundles/install.xml b/source/app/bundles/install.xml deleted file mode 100644 index 25781b2..0000000 --- a/source/app/bundles/install.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - main.css~install.css~images.css - - diff --git a/source/app/bundles/manager.xml b/source/app/bundles/manager.xml deleted file mode 100644 index b7bfe7b..0000000 --- a/source/app/bundles/manager.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - main.css~manager.css~images.css - - diff --git a/source/app/bundles/mini.xml b/source/app/bundles/mini.xml deleted file mode 100644 index 742b084..0000000 --- a/source/app/bundles/mini.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - mini.css - origin.js~jxhr.js~base64.js~jsjac.js~jquery.json.js~jquery.timers.js~jquery.scrollto.js~system.js~constants.js~datastore.js~browser-detect.js~console.js~common.js~date.js~links.js~mini.js - diff --git a/source/app/bundles/mobile.xml b/source/app/bundles/mobile.xml deleted file mode 100644 index fdf0ac2..0000000 --- a/source/app/bundles/mobile.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - mobile.css~ios.css~images.css - origin.js~jxhr.js~base64.js~jsjac.js~system.js~constants.js~console.js~browser-detect.js~links.js~mobile.js~ios.js - diff --git a/source/app/fonts/eot/ptsans.eot b/source/app/fonts/eot/ptsans.eot deleted file mode 100644 index 21e0f536db43e8d24509e3848a9c4e211c7af562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25230 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/app/fonts/svg/ptsansbold.svg b/source/app/fonts/svg/ptsansbold.svg deleted file mode 100644 index c36d936..0000000 --- a/source/app/fonts/svg/ptsansbold.svg +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/app/fonts/svg/ptsansbolditalic.svg b/source/app/fonts/svg/ptsansbolditalic.svg deleted file mode 100644 index f9975f5..0000000 --- a/source/app/fonts/svg/ptsansbolditalic.svg +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/app/fonts/svg/ptsansitalic.svg b/source/app/fonts/svg/ptsansitalic.svg deleted file mode 100644 index 4c595eb..0000000 --- a/source/app/fonts/svg/ptsansitalic.svg +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/app/fonts/ttf/ptsans.ttf b/source/app/fonts/ttf/ptsans.ttf deleted file mode 100644 index a005ea338ee7e9df266a14a3da7a266fc586ae24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56840 zcmce<3qVxonKyneb7O#EF2HbyVHn179L8ZB#t{%iL_|Uep;JN$RV0Wg-iR@lvevcM zsxg{q5^Jrssh@Re*6*BwSYy*PiM4JvUpAY~#(Zg-CTTZK=|AbF*=#p4Fn+)1Ju_Uq zr0HJ%;>~G#e(K^lz5+*cmeww*(|uJt8=u?o zdHvGnTW_!aUn{rc^WWi>y7cxh)O?)$$qO7O{1UIXZoS=Gdi48WU&wLlCvpCYRsAbB zUVZD_DUQ?R;QZgOy65f!vo5io<8(TFzo2L1>i*kDy+6R`TKxX5)hh=!;<%CH^p9by zTfJ^uPtkMV{SH2la@>)x_1?9zn=iioc8>f0JbYi)ivuZN)nfPi>+n|8+kf}H`&+;8 zANYKba|6mU8|BwAE@7*Y<_#blI>2aK2uzqF#T?vaHPUpD4!T9F> ze&dFLyVI|h02sf(_=HOvH{Z1}`NLar>M#EhzxQmttE=bbU*3lC{R+o84PFF2?*CLi z`XX&Fz4h`{+P+Zs^>+4+0Uvtk2q$m`9MR&X!=JzTRC&@rE!_)>ObZ2!`qf-%&*qh@xcNA+l3Tc8bN70#mca{e7^MO`Wj#c8gzn5^1X_$TgDc=> zadWx(TwM(37P67?-0|4;h*P8dvg7Pw@t zh^@>LZV8vgEyZ6pw+w$d+;aToa!uT=TpnAu0<7B!F38FFtKxo&ziPIIi`W|0FsxjR ztD5oB;iY1j9L63GeBik<95G-9>=gl5YJo>Q@I=IF zXK*F#3>`k1ISbAs9Q-TxDGhW*N3HCP?UVZ=&P!z&nuTu&*EF~iQPHg!x4<>xD34ha zlrr#|4kaFU7jVo1n1Hq1@QjujX9$2~0nSrsMS(S4h3;Yc9B0y8XPzklmj!MeH;Cf` zgN7)+#~&m-Rr^)o!rW11E4;w<2%Jt364jz0;J*s&0sfA~^VsWn<%f<7@R*^pv1nJuYl>DG+Qtn8fJy!--N zp}oja?40GA?VjT)@y_*?`sW48g7ZTQ$}1`tR#h*mSqw?Kw0>E`^2S@5Zf(A;<@VMu zgumE!NBfsL?(F>Xij~~1Z+vs_gO7aY(eHi#f1NyadiZaC_}H1h{ohh#bmZ|Lo&E9o zCx60i?!IfyFSnl9xb`>q^l`ht#SL)WYGsV;2Du+R@wHX!=~Mq#-{{)$^@pE%_McyQ z?H89{J;yzLf&2BFZ@u$d?%x0VI=6G*U*EUq{sRa1AAX2C^zCCuxu0F!gdc5FuA{8` z5%A4Tpr0MwKJFlQnEMX5k{jmUB(=Lus=Mb7_Qf4{;Ckvg z$sO$;Ni#<-gTytr?Y(R7$^zP%pKY_4Y+L0dt0mvRX@FPZL)TNmstSh}}vrG0O~UOT&;UE*5Wq-var`O$5q>bvLz zeq&&Fs=SBQMz7(q`|%=b1xExoNMYQM6S~!305{TdB{I)>DM*Yi*h$vu}lSMkLro$1fCTF}N!qaiT$!2ocOtxB~AX>y9iT0|$aOH=!jDHH; z+gIP^Uj+Y41dp!gA_*MlmPOTABw66xykz!D++|r~7^BxniiXp<<)q{>Dak9RB#+4! z-Yusjnapy67z%N6vS>0(#?V|}a9)|eG(9a1gqAoEBC-M?-GwZUPnKCA28s&5hFfCy>rbq#5Nze3z6m zCfj(oRF-vq;Vpms5|`%IpI;dIqndW4EaQlfrM0+6ME0(scU*KNAybE)bmNFVJrO%; z#*yT-B%Ees?D8wDo4!+UtomWwq2~R! zzIyBZ&5ylW{VM;$PCjWTUmJarUOS^7?TildVS3>>)=cD%UGbvT9)T7Y1telf8hZcH- zi&#O85jBxQnqPLPF$1fy;AyX1r5+ny=CP`i-SRT*W~Z>-Z1or~H8P6LFpfzXM!5hJ z*JD?2lxJbL0=pGPxfZ*n#xeO8Yzs0><_LZs3Wem_3hbu^J=o{usvu}NH6$%F$)&UK zr6U_;uIECaZp*xdg1DCY7B{sCi?2QD$n>vO;f|eQr=w-piWR$B9N3O8 zQV%s<*`eAn*q82atF3MGr>_{_dCf^HrhQ3x^&x|K1Uh;HboKRIq!jR$+;rA_HmAJSGK=vJOC7ZW@!88|B-uYX%(K=#UQJQir75Ory!A6?JJv){ta2ON#)> zic)+vJ0!K5&T=}l!&BFUFBK>TOMqcHU((-u1oB7rxUng?(%6oMrp zju37VUKRt)ABMVyYJK&#rJI^t2bSdTI%sQK)#JB%+;+qEB+vX%rn|0ueojySK1bX7 zUCk?gxPAG_K*!ca{*~dS*7AWhZF#{j*B8I(clF<1)zq+r-`?`j_O-5tLt$TMgU7uj zToOLpT0S(m&7ZlvwcS;2U(tPMo~y!bHx2~$I%)&9vfd*-Rd+3RWVr&l<@fE|;d6yo ztQW>Aw^h^)xNB}}VDbxmoo{1&eYV2YV=SEqMlLSgM-mZ zA*7CQX|PlnN$^rSyFj9OOtvb&0w@W3X#f~#S{x+&=xSM4la*K7zr43|XS0L;mW@-_UkIK7eh?&9VGy*c zmJLi$KId||Ht^irYoO*xQ52xA|4e6)#qSamXg$w zjaENIj(SWoKxE|6Oh%0cPN#Cq`Irm@yvaNwCYy5y!+AH!}f-aO~)R{Upmlw^a0@oeiMIp^ug$!=z-`y{u}&?U9TT+ z<86Fk=Nl)&(Ki6617NbF7-JHR5Jo2yAaP6*OJnm(_DZ_TvS`Afb%Z#gnzSg9c6A!8 zvjJlj!B>HhkVxQ|Ji{g6R4|1i7qyz~01Hk}nH1z3$kMPdUUC}<__2`f5 z>st2pENI&Gcz4I4><6rQuIBYM2liF)KmStNk&39bLX{%S?|rai!wFv)ZbSP}r5fJ1`iID$YGyOwter`Lb@;di5p5AvQ=O?~t& z{#>m%I)3C}w4Oh=-NZk2dS7%K*5EkS;5gPGo7NyRz6MFO1}RtrqdqeUYha``0C6Qk zHWe?h*+^BH%G&6$HmOrCWb48-!gqli z#MnOozGrbBuAPg(#Si5U7)08mtkI5*8fK-FzGxuiFJY`98=%fM$_@ZTd4Idn z_U%p2yuM)l$u&JEw^p4fZ0KKBzOv5w&HddE=BW6$pNFb{JauR4!0DIP2Rq)l)Ol*C zzGlahtE;}cqTJK8q3VIdt15FHG)IaaaN;Xi9~}o>g5(5aBr->AJHadKiF!Gb3!0F` zn`BX|-~&+G4jdm6+a@BX1fl(2wQywqmE$U@n;f3txcdORmjF9EtcxYw3NDgQ&~wF= zz(oYIItH>LfJ{f`MHzOAjPgRj%#7Uy0b`&I<{1_LYVU7-ypdb*DE zmYuLIT3O}qtatmGd*%=I**uM1fsVEv?ZNQEJU+bRr?=$ShWqN8cXkGR;jK%zM8f$E z?VFaiJ=j~Zpler`uYHj-zr3Te^3KM}+`7kvBcVH%RAklfYwg|S2sHw~`T(Q18GgAD zb%-PrgbdmkegRaY>3PY7U+Dy_ISPKkHUoYY0VJSm*@JC1cq^o~RAd@SR;ODSc=FP5 z%o37ZCRsPlzA&ey3I-lrRty?=MGuCFQ5IB;GHAbj3)Y|7@X}cCx$(n}tv}rpHU@X~ zw>~sbGkkQY`(U1mx7Tf2K6Ib>Zr9%oE{T5lr+1^L{;v$)=G?l0g%blHheQj7es;ku!mIGhH60 zY3`5naakYV#$~>^Ay`!vgcpQx5b-YPK<9C93zrW~Y*Gt~Sn1xmbZ__-QZLI{xUr!W zt^x9bKrxa;Z$!)j3sQ6=_!49>6-?2ZOA_I;v?OubC{NGSn9{4@tywfbP<5^9qjC`|6x(n6wUte6Z{{WgiYoAYulr*HZ6+2Hb`@9;hz!Dil;$w zTJR~-f=Shc!ll+@emZa5e?!6uuNJX;{FvCyKXd31fBWIX1gDwz4DxBblMgz>O`>u9 zN)!Lv^XF8$p=d=#)H%evnikPL8-cez;B5hX2R&Q_p;5P71pgM(lX3}JJzmLjSx$kI zCfi~&xMe3GoMM!-2yMX@OR!C`fCc6j%?1mUoF+*ONm+n!5pJ#q>gxZiFX}TB!#me?u3T5wxz%s~^nsWY4Ree{d$h#An&G?tC*TgT{BqqGd;#(j zY_h#lieGMpr1h0bcY0+9&AN+`Xf<^BYQ;}*8`#)wM%j$%mf&cKQ7*%-9{#CSG5^%R zfAlqSOBtj)j8gm4vOE0~Y4+3H$ZYo=?c^BZC->kN;$`z~CUbRyIz8J_zNE4BP7)|3 zCV5sp;8X^egKHTRi`h#+{PiLE&Q>~GZ|2eqO3JF4`Ru^iu9(c317V{|2TLGvL#lqz zt{BG(7frVY{h|TlGwy`oi|mCe4LlU)bQLiTE3uHGV!@%D5ww)xvq6X)!uQ z?{>8xePMHWwMwPSy=6szx$jGhoZ$y9tZQs{*VV1j>kHj=d)6-QdnWp)6Q`oTe06B! zOT0Z&eq^Dm<5>GsQTaa(3TqaHU2Wl}{7U2L~_lr%w0I7&dDOVrTcpbRxTcETSS5tJIH;dP_1@xTTj+Y7s-JJaBz)sg$RNq z6H>?I8X(mCJP1QoN@ljf&bYrlrWci%$lK&K%Z3zSNTo?i2uUil#AD<^(Q9VL#YQ8I~u?rPpBiBC%|qvU*A;^DgHMT`5q`uV39 z2y>YvB*H8ZN)`V|%oCtEM93*(OFJVbO&k}z6E6w<>Z3=Z?nj~mnS+pXbl>y1ZvrTf z-FNDqIyED69oF z9cwn0?Rn>Pr|`lhK1;#;ihXaNI`YN?^?v@~td$dcGF>?-Z9fA3GnlF(Y%Qx|oKvfC zPKq>%dInW-Y9$k~l0vDJ$eg}dQ&|gjKyhrr!bDKb4;#~FIx{Rt!^0EJ>Z20}giTj^ zga;-zC~$oRz}=4fiSR;9tzq2rDdKAMQhYpg#aD*aN3Zm--(Ed`^*#OoerqI66fP^M zb-+6<@Q#;EUP;3cjifcAe(>jz*{?M*cIga~o*cmSDE?L=)Y(F{;o$HChmAg;H|fFb zZM~|pPrrBahbmoC3?@f$9|Q7j*cc`KBuscIg)O&%0YWy?&B!r{JCa8gvz>otv8tMXY}atA zzA1X&yy%t&eJ*BP_}!DjYgc;23$I?B*e2|`@XC0(f(vJ^j;Tf=w^N{{DR9PEX*nf8 zP%^Tar(mqmJT){{7)&N?Q`lJ9u;c^{#;sDr83uaN(mG5Zq7$nT8(h0^X06_OqJ1K~ zJ|Rsljn`hhD4x1zjA2bYX`yN>og z^$YJ^-&*_RtMDWC@Z0+?L_atkJsSPm+Glyw>8-Ckx&od=&z4uew=()B00`Lyy~o33 zmy_#`Q4`ZbilBuUvN&iV6eKgi!DxX$X%?G6DiAlVR7zE37O5aE%psrbBZG>dXaE!u zv6iw-QUf%t`U&e|zMaAd}195`$Fwv|Mcb zL@Ijv{J;M5v#E4gF7@gpuMyvepBal}znY=N~@tiv88_ee3l zpZ}oenLn^IN{u6POT9SmqxT5jr{uacH^e=T93i9zkzj{)@FU6?qEsQ}b4=J1K1C8m zWS|n zyrb!f{ayTBm!eyqJF)-VBfGOhfw>0tK7+~Cd1T$`m+Xxb&k23`6I+EV`wnk7pjN5C zn>%4EzX@D)(@fyJWh##1gNB;O+&ad~6iJtIjby9KMc}C9*2%>xLiR`rrpHyumMoi# zCQ)RT)8RUYTN?f^l22Kt5#DGmqVFtb_@k%$p-W&QQ~ZWv@gOazy{ee8*SWxZZlLy_ zu)pW%=+U0B|2y=57R>XW9oW5_eO|Qv@y$p7&VMx9pI!c?%J90@hTfxFPyfu3^RU&m zt);oIwWa@&O&y2(7R<%`;6_w6LSAUO1xh?((tik-GfOamSXD#(s5PX}sG&$jG-}$_ zkoP&3T>{Sp#j_kLXLQjpT!}}nM4{$0*#`Z350ghhE@C10K}Tcvkdh_^62zM%D#;%P zCA0{B3IJJHh=Zgy)A*VECTq9o%&$;Cs`+GsS&KPmodd~^Rp9j>!4iT95$ z-tpwN&^vVhtK*O{q%$OtzCq!r2oTgQX>f17m(oq(9)AH$Kh_1p+>_@GiUH_~WVQrq1Xa4!tA#MkioU_5L5lpD6DnH(z^wd=cOg z0REf>JW{yg7^Op3qJRdXrX<5jVso-Ul35K!0vb{Rgu4~WLjv7bi%`oO(Z&~eyWhwA ze}aJXt3QuE87zxFF1#i@6V2MPh5zluEfbl7FgQ37CHUihy|`Z@#YOcq){{kHnMMPJ zR8F8Uh>A&N4!dlDC+7`ZHD2PIF-v~Y*{B;j=EVM?9m0n3?@e43LWH+XxQ~(DXO=QA zh;XI^zbqDD&4$d=Y5yc`~XReW~B6&5{5Rp~89j(+-^<#8P? z>Jn_YwiY?mF%t%kD7gOA6N)Q}XTIC}t`Kd2Qn!;iKK^ZJ|%rRxtW(invAO&3o z{aVeSjj1FfvJEX0xT?ZH$j4#{Ac<@6*>BvbKH`r41K39M)epo?DkGvv3z6r{q=97f z%RU4}(#a*A441!pfh!%dO|8L7RxwSa1k6qG97?)UIS=_p*`;zdFtmh-f>ds)3>tTG zI+GB2X1TD4B*X$AgkK(4L@psY84(=WoQ+e{P2h?c8>PrB;H_mr%6dV3e=_n4IgxI) zJ7d1USe8)`8C-N)bHlFln{tCW8vaZ7*qd7$bLKU@xT$YPZF*9YX`5Sbp5N3{Q?s$f zJKWP8`qCn|KDRul>MI>V-rT;eK3`So+tjYNWSIuNo>0ez;NaMr#@(R*eMhpgmCb)u$#%q!3~OlA(Q(o@6nH0f@pzU+Km$f>mX~tbfRRNY=Mln~kS`{sk=+#Gw1{KE=^evlN*_?f zcR@^qDPGqSq5HS5cI}xz*SonU`bK{J-Qk8UjzHzItX zU*yRh^2}|#|K|**G&b_Rq=J?|iX^2?>EZI&Gk;ZAGaTc+0l9LM79-^;^D$5A~ zbAnMyBL8DD5(AUHauU)4Dd5ReOVNz+Co8&^jrk=~3~Wji_ypc5QzDV9U>VRVmKsqO zG%-D;`{UOd+x#b0rVTEg>sap#mxi+|yX$+un(pXq+JAx{hkMy*H1ors{=9d%<$?N6 zUf?aQ2UeG_+rW?KW}FA!&>SBF{IijVf($gu_>+y89-A2gxT86VRuM#&Lz!rHHc9eJ zyjqcJDP^t>-O0zD}UU(<+1f;kMZO8^ly6ri>Ki&`QhU`YHw@5 zZ-w7y+v;1;c>mAdJN8v_Eb-tSobaOh6y}DAbQZ}k9TrVaA+o^2k-Y|1CRw3-A)cOf znIu3a)-1I&l1U-0>P#y%u&hkl%_0p9^X1^y#*C6elFr2Z+TdLAAOO=H4MHxjXlR}j z`Aasm)N}_O-d0DTA`5E~{otgy=|HISzBaefx+gW+R^3sVdtm&4h`Io*MYKsgqcX$a z?dCRek!)HEdweYr<0LH#)De$wlBXMP?qVQYI-EmLdq@|~BTknLJd%n{qoOGzTMwoN z!Xdew%qSZ1PrF%y7VM&U(KQ6boHoVCF#~Nc6e@W;88lN^$JXV_M_W!Udilk{hXQWz z<~zgdYBF@L?L9AE7|yNis_(rwqh zSu^E>Ttkdi0llDqC|RLe6L?hMp$*~ft$>c)*mHT>>Si1AF35lWUUGF+fUA$H#0VJ}Q%UK^ zt9-t?I-jq~{(W`OTU+b(R#sm5SjCMq-eZn7@jG#U10t2TaZ2J)25zk(#6@t0qbv|a z){r5nGecQoNh)f}0?{GET9<}EVhRNky>c3|=W_rh9g}PD^;0Sn<;oIcfrqZxIeld2 zP_09Ma_0eKu4!+4fYCRQc-1Ig`SiJ`ej*5(cVdH`T)Stmb_UWBal{?>-$m36NHGr{ zTQ|jnrzQlwp$G5y$yUDdspzHF9{!8ZM~6ufek7NVM7tNaM1A}VQ9p1+y85nA%j6vV zk}L~AL*xv)jxUI)z@9_C8L$E3i>F`?g>i_HP6jiIrIS8ScBRu|+v4un`hx0(PrK?X zb%q_rv^6oDRDTG*=t6ZPo0n|KgY7|lgJC65lmeMj7MKT%QOGXbSD^H7#oL4YD56eE z8M5FT1S@2hfB~sOj6`W*sU}b)Cp!R;h^QjJ8gpt|6(Nhf3&tL&;qNp|-kh%sKDec8 z$nHJW8{XPvKbhiQzOZK?<7A3!`NGbj3>7z2)7seC-0oa;ddI|3p|_!bseSX>iB_Su z<=z(8=I}(-9P5xPZ1w^=F*i(Nd^-mK{H!jIJc%v zB}RnAJ3xaNx$o3K>-JXn$&SJP{W)x;aSA-~y)A7MRQX48=^czK1-9g*k1);)A(vPN z9r>QX1fj1>L`UZD4qP;9Ytz8_uuk zYa~&b$F|Y;6g2^A!M5ml^#7x6(}A^%_;1{PU~LugifE7c0mf>93|+}ZQiyL`V?st@ zVfnxm&Knn?zz4_}hAb8(&`&BD2~kT7m|4gsgPp_4))b(OSqVnzVPKJ3VDiT>#H56y z$uT%X6Wf@t^FF-dh39Gq&-6h(aCF|X{|C9%-3`6lGNL`|ql5L0A4cEb@ec=^Ea}m( z(3qR|@(ZndRs_~EMGVddSs+a8H)U&$efO#FETAM zjR+8NRA`ac%NZod-9WTNKk9$Vb5iFT>UrT}T%0uS+J79XjE*QEmEk*DH#ESyxO!e&Jk5%D2K#FIlF$SmsBP4HU-sR-9MNBS?Y8fsK9jTEQpJUU>qe)lAA zjgAGX0}UQW@axNmRzrb$-h1W1#NYL`rCWxwZTFuN!dP&OaX;Yy916K}xi51OlmWYy zBuZU;paytJSgN}W89`1k@?8K6z(6DmDe0+T->F{N0wtYLnbnhJGCrLSTBKA4IW0X# zgNl)XjQ<(>d5N(9q{VYfMKE0JH=fidZ*u9qCk9)FTHXA^Lf^zW(lG3m%^u;g346ow z@<*H3g7eYX%~!|R*r)lrm@~=zlRt$7|8J$}@+B&6;`D_}LhGkv3>NU6 zsb2yt(zq`vzBBR)<38{xCMEm*isLNlvYdfsi-}9@SXOBfsH%C8mYFyE1GsgJXrRRm_ ziQ$XS2`!(F2`5hvPjs^J!Vv_1&t2o&A`pCrZ_8qZOAWp)5gv>XlKM|S_w0i5OXs4e z`1Q}ewy^3AA&LJe`p(^V^V!kViTC*6;9&GQz#tR;jMEG@cY;?Cd1|zNKbdDpb!LG( z_+d$(jsvFQ{X+_1G)DLfC9P4?J}a*-Y#%g)mwcl~myPI#C!|35y0Z zpZrru@40j;`jWl&w$+OpygAvKp*}kx)BCfZ3lER?c0YNzEp5Mk+aU#~f!d-MV@;fl zS0(_RNw*^AGUXdffZQb(q9QR2**ncY7Uo|IBf|e$)ZQxi4hZ*!4;+|S-%Ktn%zX>| zV|&!cVBsR~l$l3JPlwe_HZIGMqnp6EEw~JNmaT9|8A>D80wQZGN;Am6LiVh+0Jldv zh0MW@mD3SVp$u5&a7lzW5;-+Q;uIF1S60rak&7M5C$edHY}471VtiM;r766k>r78@ zUN{tN^Hp@8>F5dbM-Q~L^B=6(dN5cM&2I11C+qsd(cG#92l{*YcYAMP^Eeaz6CZ+J zD8iEvQwNm-9}yX3^imvE5T2$p`=Wo+ocyGN{caQHzbig}mYxp_3x+OZY1s@6Z2l^i zcA1a)rLp@S^Pq>MJBYJNBBL26ScoHVg|E6le!T#Q8MsFj)5;d;a z%H~lew29A)9pKM?j(C`;N71L4ilWaHO2^9ZDqJ@e`h=VWBc04wMJQ8p)?@%Hma3+> zbgJ48mWNighrP}gZ(Y-nKX_+rtIyk4BmAZ|V0RZ5xP}65JO0X`Hynxf@Viu2;He2+ zGZgm$OeKigYpZyTtcn*I-}sJn2v)^wq(Ts-iZ=nf(2FssX$Dg^@3)xjN8)**#rC@j zhs6`Y>T1ehop=_RZjVfWg&-FZwVD!Yi*wLn15%hgN@V93BGD6wOI{7|RI;j(?9WRM zrU=9$N=S^74PgE1G?Z-`5FSGsB2-@_Cc(t!fiNOfP?LR_gYQyU22Bbfw7!&O;^z>e zBp?Mra+pT)3th9B7r{-~?Lr@Pr4;`%2v3z3X^=ZEgMW zyS`h}cJE-D`$X4wYODC_+V2Ql$KY4)>=;620`LQ3Le&8tn91G4MbIWH3tfg`` zAjc>+7V{y>prGDl%m?)^X-W+Yupoe!3K5_}M1X3}Mpr!Z@y8zz;{~^Y5(%2n4DJ|= zzRJ6>AsU|IAFtw7R0UcCOaJD`hHuSx`o6iWtG1Fh@k=LS7lfwm37@^<0ns%_p}TX*Zg0Y}zes~w#Y zDmhSqpa#%oJWa``K4{zYDUT6Py;JE(dE z{?$jp^R4K3#oS|*=}l}u4ZM~hjQv>E!l)*d%SRka!=kjKX7-5*rJ0=GF^%gF20fnn z^F5v*zbEMN&JWJ@1l1w$f(2f8DCCZ9A@O^!?$GGbQ^A7D^%{8UiL0SfO{(_F3$U5z zmEG7trmKk;EN1JS3M@ii4wa?HDytD+VCm*mo}P#5^B<*Ts_pK%mDOw^7gS>*D?`#e z(^-9L-Ym{nK}+p6BhiFOfU=@khB(U$MXL8yNfHTDgJ7k3vBF>_!64mQsst#Cdj~G^ z8q^qQFK*s^F?!|j$>^V+Tz#6z$wQPLKHcEL!7x}Q9^1X5%#AgWbbCR4udMz@l5pFZ2v80Q9vt$EF%r3%rd88rw zO;DF0Lk#dtMiNXc4LQvO8A}jF%&j!tUxxAp<~L$7H}amwLvDa#@npoUxR5~HwXpa8 z+YH$$g0HS+w=>^=diC~BjYhvQTbJF{*7vo8!0iDdS$(xU)+DGtLx=H!OXwf7JapKS@ex|{%8El;pl7Ff3pqO;<;A-sCZ7aBL{JA zyb2}W@k2!=&d5WAv;v=ts8}^BDVni7L<@qx_CTxHeMmqB^VWZ7*Za@c605i~{E+HB z^?61+^Fck|P^bq&p~@@INm9s$0<4T|MpKodpBUxL$Et@)iAh#s(Y^TOHBy{zRG-52 zBgRXlR5{;dKAVzhSI;RcC6e))WPbpQpJ$fl0UN52e-Db{@@9EM^z|H*JKkGX)_Xj5#$bgk@+IYR-6?`YOuTHhDZvYs+c7V?}k<%9T}BD^(9v zt!;EW8~bW&`<6SM%lm4ZzSwq4QyY+$YNz_ev+8clF$LZgW*M^DDJc;RX|M+!0jZ&6 z6(I&Ott}1n${Q||#7+jk(3M7#sgk}rS;;)C|cGaKLEi`FnVTw1W44*U_J&xQCqvb_wVdzDG#o3dII|! zcIfih%h#7yG`zuc2=Zx3{>>0Gn%=XKrDe;1Npo;P>XU!OhF&?njljn<~+H7(xv z=O+&?9(SO6Y3GKaM_@lG`5eRXd=Ab#%3qt$f$R>JHH<_UvxJ_uSqmIOy}FhecUqprN35>_@cnc4HErnrFj)b?kzb#rF^@Mq6YXe`{9<7MF+IUxM1FWk4tM6)7pf{2Z zP`845k16%-FsGCZD{E#F>fR)iVoX_(J-}KzWTwz+An8^S=Hzfjx(y4rvu21AO-JP$(1;OAk7=y=bZci*a&PrQn zp(LA!4mp~ePB4*ki2=K(gMfOr6#zFa%!g>98PCBXaoUV6rpNV(S-Hg&27v)S8>Uu* zfqg>D^f4Ftl#O}P1Wu*keAcUN)W298L8 zNj^NOCFtmMfr}t+;+E|Gh>3J+qh@ThWUk!=Jeh_3c~I@_(#YHrTJ^cb34j-xXArz_ zTDqR?LM-r75Nwdi15{j7dWYmImFJKaUK*L>p&!qg4easEp_9$0T{7 zQ<+C?#fAQP44iXIATAtUNIDWJ5zar4kn9Fx<IsID4$OGV@mpAEw^2MG`4vPM-kLVT3#jzo8gwIu>-iAaq|bRspvhSUg~ zmrAW!eYFkA?{W%)epJJhgJdPRe^|BkRH5W-N;o461s#8=pxU3F3f&a8I=Ob@nP&Vn z+qLn!!s=kG;+ijyiWCrkHmVtQR!L>TWfEg8h-ind7m5smj~rsmfam zJQom`GEd6-}z^%c*HFS)zx>w3nW3>5J-IEOVrt|<5SiVt>b4f5k- zp}d?dznloCLpmA9R%DJ)+ZHK>xtv+X7UFI1g)S7bbn~ndi89VX;mMSVjuI?u!YAi{ z|F;)TY7U*@J|U-@%eyHArxH*5n0Fd#z{yiDJQ67VFl|-6yUmo?K`Xbea?o(HTeObKiK7V z*3~Yu*{bZJnefxp*Oa7Yr@GtxPHeL5-rp)gU?bES1!fM*xfq>f;2z>eh%~04A`#7C$Uk2S| z0B61!o2kK1!4C`Urb4K2#OM);fSQmA6B=DRDfq01D+O@}IUfe{sFqK+qTeU+X$1Ze zivW&4uF@y-=}Ln(|D+$0EaGW(_N*^r%g`Ew zHH}?u;hMIjD?6sD@r72q*W++{y)-A`>dR=ZUBz;+QmIoB(}JM_&nQeb7@7P>yC2jj zvt3rBoaU91E>qAfUZ$Kxl8X`q@UEDIq$I)KVcBX7JMAo=l2QZMOXT4K(R#!d(HN^; zUN`>xXv1&OF0)ey^CDKp%s-5tQ4ZlW21|PLKs3zi9xscBPjGa068B|FPKTtO zDrKWyLUa>%U}ebH41^@jw1G^#&tyy-IW#IJUS_~1{m;V& z_8oBKGhjnz-_2n&DTbyGENe;vO#*64_F%2h2Lo>xHRrK@R%n;#gYj7_D1pRm{?QbL zWoCnADrVWuM=hZ`ish)A!BrEC%y!KKSEabVnM!U_h=pDQ-)Zb~y2pO{%zSaq$?uuu znUf0;XPT}_ZYf+H1)&}Qo}yp{QbFmkMZF=YyB14yMX;C(sVS2cd6XEE$W$6~1pvSdkzFGjM>-ag($+DAX-h_9m@e;7 zZlVae*M>FmwVIS`pP)bYm7d9uKt9NTC~6H~LfjyO^KrjJelqctJn$4sA)$=0S=gWL z_Mjs*3k0!pr%|Li>0kiOMUPJyKqVM@saLX6(UY7BP2DqTInRYrV`X{wR*FeOBvN8$ zGHO-*O0JT&l%PKO_pn0fDl6z&Rx?7 zq<2GS+Atb{EYKggu*K)uz#4)0Q+QAGW#ROou=TojASz*a;vIAZncfm4nmtH7i)#5b z=UA@Pm6%2`Rn1RT8ife-Lf=$EGsVz8Gw{g@csm&fyQa_|K`_eyn$$-NOC&4w(Ly6k zDd?kCC?wPMQS|#xPlE!A6GjRO^P!L0=p8-`>lAb&I7a$t0rb(d^a2}!m_Lh$IMCA@ z7`$T@*wZ=;NE(xDq{1t-Lb$HafSiHulFHW>6AXXiM}E|hPW2s_Ok$a?y`GuTjKFqd z)%DsQ1=s4X;K8hC0qCB378FsP!VS6>DA^>j<|HHvsA~b~a8zYJf+};R<&V~;Cp|*Y+QH=g7?2^4wNZ@V8isp>d$JvK;44XpFIaYM6C96%t9Zt38$~c?3=6w zd`?s9TzoCa(G*_`3Q7J2^RP@Y@Xwx2{S<5e98==rMkdL5WnM(r`CJ*EkaInbAs#E0 zB7F(e%vwHr%Rt+d=;8!z&(L7wQ=WefZI_lvPSAEK`fd_!Q#5xvZ99x3#SU~?zzH*& zE8yTX+D5AdqHXk87@-ym3T@A9ufSR<#bNE932U@j04WzBh!1&d{4DIbAxVEW{F`n} z;-6zJnr0fTBnFv6d67ZURuuX}Ad$tN1nx=zwNlgx=;$;(u1PV8 z**0LCl%!OI6;T?S31*~}XL>v#DV58jL^fpZ$r?!a82X`opH++Qen7=Sr`8#ykynh{j^3_A$?JZCJ!fsc< zSy?f-^l(@7<438j%)mgyo-RJ|RPPf_VnbkI^v&^qMN=QNnCUv#Nct4(jkX8!B@Ojn z9v7}qG2-pTZ4FjXQ$>5lPxOQ+n)4p#!JfC8^&45_}BEL5npVIX1 z8kkX*pnTk9nA72^ga?Q#iF0yOhSBq3OB&KJ&3iZp$9>4Oh-m7Vya)xM$T+{DLLE_h(YQ? zMC~9Sl$ym(!O1~oDC3rebYuaemYcY@9-L-2wyd0tlG#xOOiahbYMU~VBTI#bOd~b1 zEH9R}LM0PqqZ-z=X>=2HZHn#`QmJcG-S)0lbZt_hu?qZI9`wvx zf!gLJcs5w1maNbmB2On$8_8srD`Q13l*i7xN7u5toW-aWtzAs>ttG>1v5^caCt*oB1zjEfiw%ZQ39 zO>*LV##yN@dJ-5@4Rw?USj5^`q3cdO;EP_9h+BG2Jo{Mdeci#Pj;4j3YayyS_O*HI zD*{>G%p!Nd>26+FSlQ9vQMr8Ovf_meg`wO0sZ>$zy(GDt`xiHLHq`k&0hhaOV|&d| z*Fvo!)wCxmElHCfSn8=<=5v;JG&QeitP9vfZfkDMy5?~eRbG=EV*MtN<3Rl;7IRY&_vb_l>`}`Gl&5+I9T@1HVQ8 z^YCM7EB{IOZP|AA#lIMSVtG70W)g<40|(1s)qGUy#aI2Z(zikK~EY8H~JOg|zl^v*3Mq6HpC3X6P<-!5JN?eo9f{e&tslo%U@ zL{S&_7q&q;KECK*4mZ0!9YcS4KNRs1YJ&64d+zz>_)liEMv2q)S-`Xwm5V2*U|K%| zrnkjmiY~&kPd7GF=39gki3&;>4l^Jx0g#s%>7iBAfc!-OdC4>&-=YB7S5{H00C}Xa zXg=jNa`J8UH;1xZMvuNK3Dsgfpu&C5els^Tj$#kO`b(jIpnR3fULN%4dVIb>o5L0g z&daX^`{mH75LI^2*HjnSH55F9lcFS zJa5Cw&4U?=Y*T5uX;ht_TvS|+e~NG z>AnTY^-O#&L5Cu&&S$r5l3Sagu`H?jONePQm7J_TgD~B+o}NAXd6#K;=IT_g`%-xG z=5Tn^`ZBxIKflmk_IXxmMw=(`#c+4~iss%GZ7z??<8iy=p+pN+^4pqG2p^>-aBkF#d9P@LKX4HfX*=3ZPzmMLz5rkb(Lf{QD+}%3G(`_^L0cr4s#^4)K4^Z|l{nz~g8gw7yQGn&^9Yw0@6+ng|U&?=xiAwQa1uLH{kGn;#$Q*>*U# zK>5LpO&vn46W6YW+WfW?J8Vl`kxTx3bQ@aT=~z6k;M$H{e0IjZE!2VtdU|&>%=%mT zs0R^iszi?*%JYsoVsU3gKwxpi9+O2zMmFNkq?FG_CxRd8(ZMIrHpfG7MjHhZBzgxx z$Z27!!jCbdQxx?dnreO(DsZ?& z)LU-5c5Ue?JPxH>n1j+jm8bB~+B#UbFp7l4AH;()VQR;Y9#v=^|&YaBMEgZ`NgVh_ia&4JHuB__NbS1hB6)KyFs!|z7{ z11Iu47vMSFQy894iVNKH4k#}3m11Lg4uCRC0SaD zupST^3Furn?p2O^y`up|XQ{x~-a>Fwqg9*(JV6Qy0!!3aZ5Au$o)de7!_B}mU8q?U z2u)W(Zi*@g<2px<0xiBXu4~*3bHve@A~CTFU=zG?wL(C?7sq$AT7s#kXi-nA$rwNU z4+sax!~EzF326^eLH!{qET0M5T>O33CGyh^tXY=8J%ek0h--?-8$e7Rd`Rj3!mf$u zB~j5Rd>M32=J-?769E)&jc7rg!ZY9h9;kpW7Oz$iSo}R#{W{C}jy+{DqG#hodOec- zlW;-mL6(FBiHN|n=R_btjMf~?2qHJEDvo3o-&gg-@#xc|N{27-%B#PFleI!k^^+9i zNA(Y7QYlVvi&93JiErAa37Mmd|;HQDms z*uJ|#?=5xJO#3Y+=iUK*QBSBs)KSMGV88;V(Bu#nAn5>VOspFh`lhgMT-4Hvp2mUL zcOKyYC+ARWWStSqPx@bsQB7;fr4p&YuSgNo*Z1VI^3;+mIyO&{(CFQHZBs6R-`9+; zTmqi&I4Pt5%VVcy7MeN>u>=zV?`x#?LTgzC@lp=HA0UsjR7vBW-N>ax)u&2uA z{}k-eQb*xoH|U8Lhrc$?+7$ipW{dE8oa=#9Ch_Pj=2Fbfqi4OaNGc?xf=7N(4~n#r zxH6Jqv4eW@h|VOXZ(KXyzm| zlQZzdr-(7T_y#C<6Aua+pvUlV1_(~xn1)=eTU;D6*8xO4HR#7faV<|#vIZj6cIpiAxf3PljBC_ z>Hx&i*@_l1+dDc}5fVXsJ)3gBmB(nz!h>-lI%3GzQREDLfr5%LsLW6rrX%{%xO6ej zfC;}XE^4laP9*M#_;5N{_%m^hf$*kyL)sD%4}-CcWh9mRQ{-FtO)CE0pj zNtSKdS5HgG($&L4ehDL6l4V=SLK4DuU1G}*Nko>7WMdlx=9NQ30EZ-pLr*B7ZVrdg z99NPRa44aKQV0!6ASRH6G$*8K39Z{wO8Q8R+~04$9qnG}$}&DV`J>iZ@7>+mneY95 zGduGQGd0D79?k}SnE0Q;6@BoL$kLOF-~k`SkP%h9p8*$00zWI!GvD^gtele*#8B9s#qWRpkXM#x?St_ScXM)4m>NuVC zTpLX79IZ?mO*%|$L*{&}F66grKR;DNY#-iTyLVM>)q6jAeDCrb8zU7@Wu#kQTHIbU z@&2dty6UW~P`2=5ZA)u+^9zTW*RZ9v?S|%OZ>k@T*i|`;?2k(qr?9;s#=pmVFi z2haly%$QwGyuj?))kqQ@iY;QMq`7IQb1*B6qzG~8#-*lO(_Uhxd}}B9Ib-IWYyLYW z&$t(_UB45&m^E%JhY1coVdglCvFJ?bSZn!tVP<@Mw-}#cc=e9<7?`gzLnb`&8ng3? zjzll)T|`ce=PVBA>kfGcU(hj*bE(Xl?3>Mm;r+&^Tnx+2u1E1XGI7iq$ETaBI~X3g(9eM@d03gEJdeF z;*rS93?Sr3#!JM-qhoQ&oEu$;SO6R2r0exX`N&;}+5RH|tP#chJauVF4ZTy#y@EUg zrzfV%ag6+jll{;r`NbT`0P|(cg9pA_vRrY~Ev@=`0=l04z|}1}|4tJI&Uu|e<#r7ubV{&gIFl5H|dfi%)ov$M|K!|STKNS3odl1M$@}TFFAIu`(TFB2FJKD{4p|fuvb7 zTZ}!%C%gCvUD)?C->j`0JLcwU4lUH( zLi-2S`D1;Dkt3MfI()jLyO+BI6l^Hn_Fzv{4YvpA-Lid`C(g|Cs*3u{%Lm znX_cp*uM79YM|5U35n>g%t6?R-0v|~(Ijwv@kRE>nMr@5_RaZmy|YHc zowsQcsL573{=8`uv6#DKul=YV$0}pi7KjDYcVN34XK;)=%V2vL4vxWXF*@be6O+#R zm~qPP2p0QttoLpEX+0KFuST%!*N0wP(3b%+=!AQErPO$m)IE=NXCS&oY=?3DQHACD zOrFRoQ!%?>$71)irVUL14mbA^_5jbzJZk-$jV-YR#>;*7p>6xSZRQfiemCr7U|(7s zI-gG*Z~@e4>Oc}4$j*s|Q{Ea6=$t}hDa<2+ZkA~{4c}n6 z*@gMg}f0wHs@?uW#fA!<)!07 zo>i~DJBhQ-!E({2eZ-l}r|LKEyuYpWUbVw}d(7$w7YB zB@+wqbtQtFpW3^{VkMV_A?_KUFFY>b-X^LbWN;#nN9Ulw0xpjRkX(qkiF|qZZ2Y?C z)>PJ8WwXgbd2Bvi$g}&jY#2Tj)G$epUaHBoZflMIT;O4)HZQkPFlM~lw>QMWS#A7th}{v^{W0&6&0KMSFP%AEw^u5 z)8AUUWMf}rW8cOlI76p=>LKi-dO|U`5!Z!cml8}3g~7TrN?Cx#clwrAHdzL0 zRteJe!(YMg!#a;T%ROP)47I4*hD=j`KQuX1l3)_@+QBtf)-^QL)n09~C1K!X&2l8? zHD}lW8OW%gdfW@kwEWHNa=dG(M_Z-8m^2E1wX#E!(O!;Y%M@ z^PTWy^Pw#YVeV`_V#pe5QYC3tifO>fP^r;OY?-O7%4DokgbZSn6@0rK560^o3u{J$ zxWOGimcfy}H5$gCPA#YxMvs3q0W%;lcNu}x$kG*~nM{D86B*Xk)ULMb3hHXObGWm= zBy=b*J}(f;TxezE2bUN)IYg8%RJ7lIxafHHjSoND-}eXx&W>+uKHk@wX|FB#_$*cf z`U@t?3*H`S{|t6re|r15iFZnE``*S-QRcl5ymIHN`PmO;&nw;bg}!^!OG4>+Y4^VJ zLeauIBSqLTAqxbw!GSXY?r9Z|Uh{3vj(7P#@|>@tM`NQjm15Qo-gJl;6o&Gch$&j zY3wE^`$b^k3AcpG0^;Zh=jb`p+;k`%OH=2OGC7Y-6P$tTO!GJ!&fJE=}n@( zeJYZ7cR^l3%Z-iamG36KNtDd{ei*WQ1y(o9u6V!!S=zAZ7dYt74>lVSWY8lZGQ~g! z%i&5jG9^H!uzIYdl*p7I^Uzpn34fLnFRUbBYF~caVsRC2rk)Vf@1B_%}p4AeP}(e&e-+p7!JSvefZ-<QR`{7+kW%HILdFq zaRSG29K0^Y@feO{IBvu7IUF}yFQ{kjIqFH&(am~z_T8#lgXq!vPpMS@*VQTiLuxo~ z70w%Q`wI~yYs@c{&(empi`ZS>%nnE4f~Hc=NIv8jk>{qKo!N+;rHh* zoDX~j_5Qo6_1}#1cG!VIH|1~&Lf!hPB z+`kFGcc{ngLLB)j-S;NW$YU6|9r)os;N0!+#2Mx6GkE_7)owqnvi+OY1HN}udfdBc zcad7*dsgN6z6iR#qz+l{0iT!DO~8MRrvIRN1h9?a=*Cfo!_P9l|51m08`QDDkm~bg z0oES^#zfUc+QB3p^LGyroa1PLa9DF#A^Se0C$E~|CVR%43cn`qzh`t6N z$P065K7e2T=Ttdq9_t8zhMEuH0r_AK;Fg2q+jilF^EiI(zZEbV9*_^-gYv~|@WFeK z59Alm@dwp#;O|fdvH|)Y^Ht$MDsF0%Iolmjr*GlF#6uqH=Q!`ic^Bjcd@x7cdi7!8 z1oY(r=!bJa9y-k7!+1p?T|LBi?H!O29IO|-4#kJGEGo!fx&LeU%C3;{N&XI~uUfZT zAJ|X%w)^hzjre}yU+N$9Kk0wj|3O?ZZd=?VaUTS>1;*l2(TSlb0s%PQEYs7b(Rlcch$4eJ!mz?PS^y z)6>&eroWi}+l-2g?HTuFoXmJLV$WsPN5WFN^sGjGnk#(78P zoy%FC^I*^rpwu1vjhtZw`A;^n_x@!HBqSA|yHx7uEPPkmv1Tm6yxr|QpN zb=OrBYqqa>?&|!jPc>ZCaMxP3c3|yW>o%_YRpZ*mCz=|YUTz+0{@MEA`qml#wyp15 zfAjhW*FUlT7cJqIZ7nZssMzp@4S%~aAAgM-_u}tYo4PmkY-@Iy`=ImNhwsRDIluk*D)+SWI}Sen zP3Lz2dqMoG^E+O3TZzu^pqgjxaDFGKM(c?4J24^Add~Tsq$(0$c7D%MZHXT_zvmXN zOj_&wPFAZUw>rPmRdVEv^ZPq0D`MV#RaHiQhIK{z5qTWNm&1P5i&bd{RakuuM>WO) zDlr#6j0kxrp6;sit;IM zO|7#ZkcI(a7}yg3-Kce+hWOLCw;#OclRn(N7>%Z4XQLjRA1aKz#^Q>DRm&0**WJEDUat zW8~=uEd#sI0(nI$z!FcsyBxoG=ctBl7_$w@eJ?*rvq4ZR44oow{B;;5jC`@K!?+^t z!m!k&0c#ir#%yypo()1i!nzEh>qjZRwO5zjhhO9hp^%m+MQnw2k#2|ZgwiK(4C0Ev zTso}6^+CX}ALl{bXZ!nc9gSHSW7)G|R*HA{K4pMVvt439sWY;zlp`U0ipNI|~&{&9M5?;#7AwWdyMIMuiEEL%69%;@7l&{~85hg357(3z>X^ZYl0FxiwRjkL_fmvcDQx8n31N`U0QXainK_L zC2fokG7>j4tfZ`1Li!O>OS}SUK|WFI`%xy^7I}F?uS2|Of$2x-PZ{lqbvC?U2}<=& z)Fe-Ow6C1*xrO#_WaQc-`ef3Sc7b%FOiiW4Ucf^C6iq>vY|vcdyRMIJcQ7W!45Zg+ z7|G3bx~ACjYAAdue50jm1lC5L!sy>fR7a_ncFAYvvX~mHcN=)IH7;gCD{@Qp(%2HIp&K>OQZeqKy$Mf=gDPOX4&v_sqLB#x4(q=PT#GfQO(xeX z96kSJr6bxl4xomJmLo$eLOYCmvR39pS}xCM+X>*wyD!?UfopNlIJ?AeI<|P<3bt5b9F{T#J`KCDP7EX~C5;G4(w! z1=@f)?YrwMsPVJWNm^#B!a39D`2DmSp0x6_!D*-gJe2YwttFHYLPTkzR7(6$8z?@I)}OYB z)|3)yYM||+m89*IKA!P>LX&8W&0A6nt+B*PVrdWS){XTtax(yoiRn)0I{g`S+r$;F zMWuW-!!lm0OCHqyjA*%+n4urg(??d|U|kicdkC@}K|iV)Jyqko&AA*F?)U%4);rO& zY6Ui%A>B=?P2;y2=Pvwe#j|z#ZYTZ^V_maY7h?yjfL9gn(>hmUh7D=62UHt^hEr3> zKk-X-8spzThHTN$xE+?E3B0=oJ94z*7w^+b(i-%FKa?@r9kK34qG#6<_HTr%-hP)G zcTu8cR6(Lv_V9+#)^13%iA19#0n;NhuuzUE|CC6+D-jO0M(h})4)%!X$=&#pI%c4V z9sQW7g!;yK!y7rVN6+Vsmt3l_4`Rj~sOhe+qy|cKM~$K$^C=&G{;{a-L?SdQS$BN8FI*66AVuZ*@ShVe;r80bxQnX3}we-8h zdXmP6KrOLu&*lWYIP0>#n@zCoQ94fR4oy2p+RIO0VPknSSCW~74j6-#9B zm^wPR8wlLRuNp+LbXA8`F}zBeEQYVM(Jq z!W%FAn^6njAob{prp9wK!EWTpL?JSMWnw^)Dwh(STF$(EOo;(x6rJ8%;tApNOkU}7 z(170pMilMb|sU2NrHc1e@p-q(WKVo69 z6pKtvG;twe6ndEPHB;8WbTR2LR+lz;54@0!W-}6GG&?vc&tC2}Xxfn;Ls(-M+xi*m zkQ?5y5#mO=2u6%Ahct)8fA`{w8cHpa`_w5?!HmFCZw})bqgl~Q;jP#2Nq?6y0{JPN zlUUe{4|*dop}_34aw))`S_k?u8{i$-f1{rWW2G=HHh(ux^B?URR*qB2h?qboR+SM0 zJ%R90C_p%=H>8#uhl>=6Ot3e*M?W_llo%%(caC_Q@nItsjO~pLGhS(S>Zg!(r;=6XBnM(2WD-nXwJ>9&wLlhgge?bmTeJU>1pvdzl56pZ2mrYr0&IfA&j}GyI$=Ri7^@~v7_`LWUN8P7>s6lBMyn6 zWwg&gEz%S#_O3vyU0UWCK@kGtX?kvy3DXZ0Zyhb8CMG1Dl(ll4rH{(GXsP5|mmAxX z7VfuJ<{%;VyK$H?Jz^;%84@##{E2iL9h2Sx{SfKOFDPtF_)AK%^d3Mny>{9kLdzC; zrWK_PU>r&+n;xZU&tM=>$X9AJg63jHI`i#V{d0cDB5cv^MAMlV%XlPxJN1C=!pq~!t7h_Xpr;QDKFk5VT- zDz-O__J1a_F?69O%rq}#otBg6IZNK&lFzPth@<^s8di<5KA?R?=-HHl@i6V~0#x z8K<~B4RU>LZItZH%tca-d|~t;c8gpSZp4bFSY9mVY<(oDnUX+Wh+M>q@z|d9l88C& zGcDt#jAyU~LuZcfOH0v`I8%$>`i+En`w##B$H``v30I1`CVM$;s$p_G%zU+p6=evg zsZ;d7w3&n8jMxantDEtZW3-ec+8USsUduBz`k5M4^F7LoJCZ0K--Vuiuuk;HS^@h8 zcue-#1ojsE=9e<_m8}!Mnt|W-D9JBWoa@+$|M|UYGrqZPK!2_YM;LwG2K|K3^R*?r z9#6ZF4{tN(W_F>3)X{-*{DQX?cUU*)PPFN(O(@U)A*HuTZP9Hsp*FU+8SSy{YjBre z{@5nV@eSf}9j^I%J?^b_+H1pGY?tNPA0^KSX&3Ihtwuw|nx#ELCX`tR90cYD)XguF ztZS=opCh7OXxG3=$`R5A9PRkO15f##@;bc5E8e{h=XR8n@0P5YP!U>=t+s(C9s0Z; zwGsmP-YK+VAG#fFv&4G9)uo|eOT>;PNtG@IlbO2_)2wXoc_+ZJ;fFRZUr;p^RjZf7gPW zLU*ZeDi*}+dQCHz>OyBiNI7APW|YL`G20}}1|G^RWyxrQOBHGvAz@48HLutLHGz_} z88qcHqlMCj;p27sT~jOHi>9y97E{i=cQFegG%{_oZWnh-2Wcq~lFLGk+3OYSbvg4H zKBfB+J>Wa(XXdhB4-44?D{CTC&KIaei9_0Q%3Ogk%Gctk#QKDlII8sjb+{ulk81Sl z2fgIsLNDry_3u5bi?A&pRulNKULt@Mn?aR;ulq^Z0e&vlK%^jFMH<#iWT+4_$z)*- z@H}K!osSG@3$eCy5%!P^t2|iL0%Yqg!Z_LzeAy_)y1_DVwHz=<09_T}sR4YonCDQZ zmSYXVO3Z*>t?H3iWR1F7^K_lo%w}yhHXvXBCUD^z@SFDJTF6N!aK8>(e?2VkR%E&U z1GOF5d2YboMmy9_W|c4tDjpz^_Y4}{YHJH{!^VqKJ!=AE73roN}Xuigjk z&Z^hd8|p6*gMOeMQg311$Bz)-|FilR^;ygt=trcw58iT6Jr0iDggBP*F-NIy26z7n zy{cOf9Ua43*jv>Z^`}@>dAqtp-KoxD&B(LJ{xGWkQvF!{#7eLdtt1N@SzF22M?Td` zv(l{$D`aI_S;z!>8Y@qpQ7@@+^$qnm>R$EdRa{&ug9YmCm`&IWKq4 zroINbu5#+Fs!H73-+O3i&+eVWee$TfShn&=8go)wr^1*zHrlsudH#zA8s1+W!Okk zgNry^__Ljh050NoIT!J`2(&vFL0rU_I~NJK2$ne)iMU9(!nsJoMdEztVh%2noOY~{ zxlZfJxI1@&jjU$PH>3R&Tqe7hsklr*qt4SbT&6CYyiCVsTJhv%1}@W!CND#{%qW<= Y%*16V-CS-R36)XLt!q=yzN6It0j>s}#sB~S diff --git a/source/app/fonts/ttf/ptsansbold.ttf b/source/app/fonts/ttf/ptsansbold.ttf deleted file mode 100644 index 31e458830fd3609e22a6555a87570f3b1a982205..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56292 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�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 diff --git a/source/app/fonts/ttf/ptsansbolditalic.ttf b/source/app/fonts/ttf/ptsansbolditalic.ttf deleted file mode 100644 index dbc88079903d5c0907843150ccad58a779a88ed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62048 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 diff --git a/source/app/fonts/woff/ptsansbold.woff b/source/app/fonts/woff/ptsansbold.woff deleted file mode 100644 index f92d6b75b6dfa93cb6b3b46693444c919fc2f889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28532 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 Ze*)mcUxaLjqo@D?002ovPDHLkV1mC<(J%l2 diff --git a/source/app/images/placeholders/jingle_audio_remote.png b/source/app/images/placeholders/jingle_audio_remote.png deleted file mode 100644 index 187b9db92946b8e54f16a5933820e60c22601ce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5325 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 diff --git a/source/app/images/placeholders/jingle_video_local.png b/source/app/images/placeholders/jingle_video_local.png deleted file mode 100644 index 79ddff5143af397c9c86b3c56507d498bc3db331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 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 FYXEt-=xP7} diff --git a/source/app/images/sprites/animate.png b/source/app/images/sprites/animate.png deleted file mode 100644 index 0ec0b19102e10b80413d74f259410aad4908b56f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6146 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 UO0G#%_5c6?07*qoM6N<$f*5M_KmY&$ diff --git a/source/app/images/sprites/archives.png b/source/app/images/sprites/archives.png deleted file mode 100644 index 3375d6982e9e5238e1c873a401f9553806bd97f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 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 diff --git a/source/app/images/sprites/browsers.png b/source/app/images/sprites/browsers.png deleted file mode 100644 index 3fb3c63957de0623e63946bd9eec719928f18f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10776 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 W0@#n5K70000SkW)zit<*CJIPzWsca@iV_? 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 diff --git a/source/app/images/sprites/home.png b/source/app/images/sprites/home.png deleted file mode 100644 index 5b5dd00748e40412cb1ebc849d7cbe451c701c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27023 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 B68ZoD diff --git a/source/app/images/sprites/install.png b/source/app/images/sprites/install.png deleted file mode 100644 index e2f4cd267491548ccbc3c7e522d85c44c5710694..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9980 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 H(~$oKZFmFf diff --git a/source/app/images/sprites/manager.png b/source/app/images/sprites/manager.png deleted file mode 100644 index d63a3fec408a13548eaec1181dbc51e45cebe48e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21102 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 diff --git a/source/app/images/sprites/me.png b/source/app/images/sprites/me.png deleted file mode 100644 index 639c83d80584bde78619f71115cbf10b74ead82e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5071 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 diff --git a/source/app/images/sprites/mini.gif b/source/app/images/sprites/mini.gif deleted file mode 100644 index 53a8e9989e19842a6f07b508460f1f4c18de5b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4105 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 diff --git a/source/app/images/sprites/talk.png b/source/app/images/sprites/talk.png deleted file mode 100644 index ce2ea9d8992ca995c96024a4fb3febdb27518b7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48232 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�S1CX00LPkag17@=ez*lk4Pm)wx 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�?lA5YRqmW0$;`i$D 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 bQvvWTubyVRu}fkwV3QJ)7p)OC4EnzS;1>nw diff --git a/source/app/images/sprites/welcome.png b/source/app/images/sprites/welcome.png deleted file mode 100644 index e11565c0532b27bdfb2496c4a0869a56b421b652..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5371 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 diff --git a/source/app/images/wait/wait-small.gif b/source/app/images/wait/wait-small.gif deleted file mode 100644 index 695857584e35a7fcc3cf57b1205cc500b8b72f36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmZ?wbhEHb6krfw_{_ktV#Nx7fB&+wGE-AiH#fJ13m0~FcG}w7rl+URm@%WFp<&ae zP2u6;`T6;AadF$WZBzWu?dKX2?CcoeYNTht%*epNp!k!8lM6`e05Q-|0R{#ZAAu8| ztM`_+9&FD!l$1HQgvVu~plZT~77NZ7X1Z$}a@*V_n;BZ075#c7RT|tKcQlDaz3Dg+ zSfJ6o#CWMlM7yrK!fr09M}?Ay^Zb>d7Vt3WFaa�b39{;bhU2Ju@Z>2Bmcu@T4?~ zN?R%@Fyyru$s7<8c-Uav_<^tKzySqCG0P?V9;Oi*o=%SsWjx?0IrqSSgTe*|W!5t< zlN4sKTwc1ss=%I8(Xld6=1LC-)FxhJn}Ro-yveY5$I8SPLI(|G9xI8qtmtyuyu@XC zhr2pY%gs9-a%Dn}2UBn%Y0C^+f!mvVp->eBuRI3 zcAJ-5x&kI?h!u*8G$mP>Ff4z%#8kk+dVTjBw$d{JElnvaFV;>FLeAR*m6)(;h?YTRow*#rkreGP+QEyeyFjKF;AsU$?YRIE06F& zM&SgO#L5M9IxyN{76HRb^B70c z*_|y}ZK;As(_{{B%up~C&{5_)v28~ai^hsjzl8^mO%iz0#;oF<Rz8Hq`^PcMjE$amTEpz16squCo2tSs`B7_0#!Z|2Pa diff --git a/source/app/images/wait/wait-typing.gif b/source/app/images/wait/wait-typing.gif deleted file mode 100644 index 22ec6bb2875022d5de41fb26eefe2012ba182303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmZ?wbhEHb6kuRs_{hYtY}vB&=gdHEz$7T5peeYk)-NgNQb*iXgXnNkR8?GHRlFfenha$-Bq{>7EncL7P{9T? I2dfHe0B~a?E&u=k diff --git a/source/app/javascripts/adhoc.js b/source/app/javascripts/adhoc.js deleted file mode 100644 index e4e898b..0000000 --- a/source/app/javascripts/adhoc.js +++ /dev/null @@ -1,158 +0,0 @@ -/* - -Jappix - An open social platform -These are the Ad-Hoc JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var AdHoc = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Opens the adhoc popup - * @public - * @return {boolean} - */ - self.open = function() { - - try { - // Popup HTML content - var html = - '

' + - - '
' + - '
' + - - '
' + - '
' + - - '
'; - - // Create the popup - Popup.create('adhoc', html); - - // Associate the events - self.launch(); - } catch(e) { - Console.error('AdHoc.open', e); - } finally { - return false; - } - - }; - - - /** - * Closes the adhoc popup - * @public - * @return {boolean} - */ - self.close = function() { - - try { - // Destroy the popup - Popup.destroy('adhoc'); - } catch(e) { - Console.error('AdHoc.close', e); - } finally { - return false; - } - - }; - - - /** - * Retrieves an entity adhoc command - * @public - * @param {string} xid - * @return {boolean} - */ - self.retrieve = function(xid) { - - try { - // Open the popup - self.open(); - - // Add a XID marker - $('#adhoc .adhoc-head').html('' + Name.getBuddy(xid).htmlEnc() + ' (' + xid.htmlEnc() + ')'); - - // Get the highest entity resource - var highest = Presence.highestPriority(xid); - - if(highest) - xid = highest; - - // Start a new adhoc command - DataForm.go(xid, 'command', '', '', 'adhoc'); - } catch(e) { - Console.error('AdHoc.retrieve', e); - } finally { - return false; - } - - }; - - - /** - * Starts an adhoc command on the user server - * @public - * @param {string} server - * @return {undefined} - */ - self.server = function(server) { - - try { - // Open the popup - self.open(); - - // Add a XID marker - $('#adhoc .adhoc-head').html('' + server.htmlEnc() + ''); - - // Start a new adhoc command - DataForm.go(server, 'command', '', '', 'adhoc'); - } catch(e) { - Console.error('AdHoc.server', e); - } - - }; - - - /** - * Plugin launcher - * @public - * @return {undefined} - */ - self.launch = function() { - - try { - // Click event - $('#adhoc .bottom .finish').click(self.close); - } catch(e) { - Console.error('AdHoc.launch', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/anonymous.js b/source/app/javascripts/anonymous.js deleted file mode 100644 index f38f819..0000000 --- a/source/app/javascripts/anonymous.js +++ /dev/null @@ -1,210 +0,0 @@ -/* - -Jappix - An open social platform -These are the anonymous mode JS script for Jappix - -------------------------------------------------- - -License: AGPL -Authors: Valérian Saliou, LinkMauve - -*/ - -// Bundle -var Anonymous = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Registers connection handlers - * @private - * @param {object} con - * @return {undefined} - */ - self._registerHandlers = function(con) { - - try { - con.registerHandler('message', Message.handle); - con.registerHandler('presence', Presence.handle); - con.registerHandler('iq', IQ.handle); - con.registerHandler('onconnect', self.connected); - con.registerHandler('onerror', Errors.handle); - con.registerHandler('ondisconnect', self.disconnected); - } catch(e) { - Console.error('Anonymous._registerHandlers', e); - } - - }; - - - /** - * Connected to an anonymous session - * @public - * @return {undefined} - */ - self.connected = function() { - - try { - Console.info('Jappix (anonymous) is now connected.'); - - // Connected marker - Connection.connected = true; - Connection.current_session = true; - Connection.reconnect_try = 0; - Connection.reconnect_timer = 0; - - // Not resumed? - if(!Connection.resume) { - // Create the app - Talk.create(); - - // Send our first presence - Presence.sendFirst(''); - - // Set last activity stamp - DateUtils.last_activity = DateUtils.getTimeStamp(); - - // Create the new groupchat - Chat.checkCreate(Common.generateXID(ANONYMOUS_ROOM, 'groupchat'), 'groupchat'); - - // Remove some nasty elements for the anonymous mode - $('.tools-mucadmin, .tools-add').remove(); - } - - // Resumed - else { - // Send again our presence - Presence.sendActions(); - - // Change the title - Interface.updateTitle(); - } - - // Remove the waiting icon - Interface.removeGeneralWait(); - } catch(e) { - Console.error('Anonymous.connected', e); - } - - }; - - - /** - * Disconnected from an anonymous session - * @public - * @return {undefined} - */ - self.disconnected = function() { - - try { - Console.info('Jappix (anonymous) is now disconnected.'); - } catch(e) { - Console.error('Anonymous.disconnected', e); - } - - }; - - - /** - * Logins to a anonymous account - * @public - * @param {string} server - * @return {boolean} - */ - self.login = function(server) { - - try { - if(Common.hasWebSocket()) { - // WebSocket supported & configured - con = new JSJaCWebSocketConnection({ - httpbase: HOST_WEBSOCKET - }); - } else { - var httpbase = (HOST_BOSH_MAIN || HOST_BOSH); - - // Check BOSH origin - BOSH_SAME_ORIGIN = Origin.isSame(httpbase); - - // We create the new http-binding connection - con = new JSJaCHttpBindingConnection({ - httpbase: httpbase - }); - } - - // And we handle everything that happen - self._registerHandlers(con); - - // We set the anonymous connection parameters - oArgs = {}; - oArgs.domain = server; - oArgs.authtype = 'saslanon'; - oArgs.resource = JAPPIX_RESOURCE + ' Anonymous (' + (new Date()).getTime() + ')'; - oArgs.secure = true; - oArgs.xmllang = XML_LANG; - - // We connect ! - con.connect(oArgs); - - // Change the page title - Interface.title('wait'); - } catch(e) { - Console.error('Anonymous.login', e); - - // Reset Jappix - self.disconnected(); - - // Open an unknown error - Board.openThisError(2); - } finally { - return false; - } - - }; - - - /** - * Plugin launcher - * @public - * @return {undefined} - */ - self.launch = function() { - - try { - $(document).ready(function() { - Console.info('Anonymous mode detected, connecting...'); - - // We add the login wait div - Interface.showGeneralWait(); - - // Get the vars - if(XMPPLinks.links_var.r) { - ANONYMOUS_ROOM = XMPPLinks.links_var.r; - } - - if(XMPPLinks.links_var.n) { - ANONYMOUS_NICK = XMPPLinks.links_var.n; - } - - // Fire the login action - self.login(HOST_ANONYMOUS); - }); - } catch(e) { - Console.error('Anonymous.launch', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); - -Anonymous.launch(); \ No newline at end of file diff --git a/source/app/javascripts/attention.js b/source/app/javascripts/attention.js deleted file mode 100644 index abcd44b..0000000 --- a/source/app/javascripts/attention.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - -Jappix - An open social platform -Implementation of XEP-0224: Attention - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Attention = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Displays attention message - * @private - * @param {string} xid - * @param {string} body - * @return {undefined} - */ - self._display = function(xid, body, mode) { - - try { - var name = Name.getBuddy(xid).htmlEnc(); - var hash = hex_md5(xid); - - // Compute some variables - var message = Common._e(Common.printf("You requested %s's attention to the conversation", name)); - - if(mode == 'him') { - message = Common._e(Common.printf("%s requested your attention to the conversation", name)); - } - - if(body) { - message += ' (' + body + ')'; - } - - // Display notification - Message.display( - 'chat', - xid, - hash, - name, - message, - DateUtils.getCompleteTime(), - DateUtils.getTimeStamp(), - 'system-message', - true, - undefined, - mode - ); - - // Add a marker to displayed message - $('#' + hash + ' .content .one-line.system-message:last').addClass('attention-notice'); - } catch(e) { - Console.error('Attention._display', e); - } - - }; - - - /** - * Sends attention stanza - * @private - * @param {string} xid - * @param {string} body - * @return {object} - */ - self._stanza = function(xid, body) { - - try { - var message = new JSJaCMessage(); - message.setType('headline'); - message.setTo(xid); - - if(body) { - message.setBody(body); - } - - // Attention node - message.appendNode('attention', { - 'xmlns': NS_URN_ATTENTION - }); - - con.send(message); - - return message; - } catch(e) { - Console.error('Attention._stanza', e); - } - - }; - - - /** - * Returns whether last attention message exists or not - * @private - * @param {string} xid - * @return {boolean} - */ - self._lastExists = function(xid, mode) { - - var last_exists = false; - - try { - var line_sel = $('#' + hex_md5(xid) + ' .content .one-line[data-mode="' + mode + '"]:last'); - last_exists = line_sel.is('.system-message.attention-notice') ? true : false; - } catch(e) { - Console.error('Attention._lastExists', e); - } finally { - return last_exists; - } - - }; - - - /** - * Return whether entity supports attention notifications - * @public - * @param {string} xid - * @return {boolean} - */ - self.hasSupport = function(xid) { - - var has_support = false; - - try { - has_support = true ? $('#' + hex_md5(xid)).attr('data-attention') == 'true' : false; - } catch(e) { - Console.error('Attention.hasSupport', e); - } finally { - return has_support; - } - - }; - - - /** - * Send an attention message - * @public - * @param {string} xid - * @param {string} body - * @return {undefined} - */ - self.send = function(xid, body) { - - try { - var mode = 'me'; - - // Don't send attention message twice - if(self._lastExists(xid, mode) === false) { - // Send message stanza - self._stanza(xid, body); - - // Display attention notification - self._display(xid, body, mode); - } else { - Console.debug('Attention.send', 'Not sending attention message to: ' + xid + ' because already sent.'); - } - } catch(e) { - Console.error('Attention.send', e); - } - - }; - - - /** - * Receive an attention notification - * @public - * @param {string} xid - * @return {undefined} - */ - self.receive = function(xid, body) { - - try { - var mode = 'him'; - var hash = hex_md5(xid); - - // Don't receive attention message twice - if((self._lastExists(xid, mode) === false) && Common.exists('#' + hash)) { - // Display attention notification - self._display(xid, body, mode); - - // Show a notification - Interface.messageNotify(hash, 'personal'); - Audio.play('catch-attention'); - - Board.quick( - xid, - 'chat', - Common._e("Attention to conversation requested."), - Name.getBuddy(xid) - ); - } - } catch(e) { - Console.error('Attention.receive', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/audio.js b/source/app/javascripts/audio.js deleted file mode 100644 index 62652ea..0000000 --- a/source/app/javascripts/audio.js +++ /dev/null @@ -1,212 +0,0 @@ -/* - -Jappix - An open social platform -These are the audio JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Audio = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Variables */ - self._timeout_stop = false; - - - /** - * Returns whether browser supports audio or not - * @private - * @return {boolean} - */ - self._isSupported = function() { - - is_supported = true; - - try { - if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) { - is_supported = false; - } - } catch(e) { - Console.error('Audio._isSupported', e); - } finally { - return is_supported; - } - - }; - - - /** - * Append audio DOM code - * @private - * @return {undefined} - */ - self._appendDOM = function() { - - try { - // If the audio elements aren't yet in the DOM - if(!Common.exists('#audio')) { - $('body').append( - '
' + - '' + - - '' + - - '' + - - '' + - - '' + - - '' + - '
' - ); - } - } catch(e) { - Console.error('Audio._appendDOM', e); - } - - }; - - - /** - * Plays the given sound ID - * @public - * @param {string} name - * @return {boolean} - */ - self.play = function(name, repeat) { - - try { - repeat = (typeof repeat === 'boolean') ? repeat : false; - - // Not supported? - if(!self._isSupported()) { - return false; - } - - // If the sounds are enabled - if(DataStore.getDB(Connection.desktop_hash, 'options', 'sounds') === '1') { - self._appendDOM(); - - // We play the target sound - var audio_raw_sel = $('#audio audio').filter('#' + name); - var audio_sel = audio_raw_sel[0]; - - if(audio_sel) { - // Fixes Chrome audio bug when Get API serves expired files (for development work purposes) - if(window.chrome && System.isDeveloper()) { - audio_sel.load(); - } - - // Must repeat sound? - if(repeat === true) { - // We hardcoded sound duration as it's a mess to add load event handlers to determine duration via Audio API... - var duration = parseInt((audio_raw_sel.attr('data-duration') || 0), 10); - - self._timeout_stop = false; - - audio_raw_sel.oneTime((duration + 's'), function() { - if(!self._timeout_stop) { - self.play(name, repeat); - } - }); - } - - audio_sel.play(); - - Console.info('Played sound with name: ' + name + ' (' + (repeat ? 'repeatedly' : 'one time') + ')'); - } else { - throw 'Sound does not exist: ' + name; - } - } - } catch(e) { - Console.error('Audio.play', e); - } finally { - return false; - } - - }; - - - /** - * Stops the given sound ID - * @public - * @param {string} name - * @return {boolean} - */ - self.stop = function(name) { - - try { - // Not supported? - if(!self._isSupported()) { - return false; - } - - self._timeout_stop = true; - - // Check the audio container exists before doing anything... - var audio_parent_sel = $('#audio'); - var audio_raw_sel = audio_parent_sel.find('audio').filter('#' + name); - var audio_sel = audio_raw_sel[0]; - - if(audio_parent_sel.size()) { - audio_raw_sel.stopTime(); - - if(audio_sel) { - if(!audio_sel.paused) { - audio_sel.pause(); - - Console.info('Stopped sound with name: ' + name); - } else { - Console.info('Sound with name: ' + name + ' already stopped'); - } - } else { - throw 'Sound does not exist: ' + name; - } - } else { - Console.warn('Audio container does not exist, aborting as nothing likely to be playing! (already stopped)'); - } - } catch(e) { - Console.error('Audio.stop', e); - } finally { - return false; - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/autocompletion.js b/source/app/javascripts/autocompletion.js deleted file mode 100644 index 78f48b5..0000000 --- a/source/app/javascripts/autocompletion.js +++ /dev/null @@ -1,256 +0,0 @@ -/* - -Jappix - An open social platform -These are the autocompletion tools JS script for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Autocompletion = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Sort an autocompletion result array with insensitivity to the case, - * using the 1st elements (a[0] and b[0]) to process comparison - * @public - * @param {array} a - * @param {array} b - * @return {undefined} - */ - self.caseInsensitiveSort = function(a, b) { - - try { - // Put the two strings into lower case - var sort_a = a[0].toLowerCase(); - var sort_b = b[0].toLowerCase(); - - // Process the sort - if(sort_a > sort_b) { - return 1; - } - - if(sort_a < sort_b) { - return -1; - } - } catch(e) { - Console.error('Autocompletion.caseInsensitiveSort', e); - } - - }; - - - /** - * Split a query into its subqueries ready to be used in autocompletion - * @public - * @param {string} query - * @return {object} - */ - self.getSubQueries = function(query) { - - var result = []; - - try { - var subqueries = []; - var remnants = []; - - var query_last_char_pos = query.length - 1; - var space_counter = 0; - var cur_char; - - for(var i = query_last_char_pos; i >= 0; i--) { - // Search from the end of the query - cur_char = query.charAt(i); - - if(space_counter === 0 && cur_char.search(/\s/) === 0) { - // The first "local" space was found - // Add the subquery and its remnant to results - subqueries.push(query.slice(i+1)); - remnants.push(query.slice(0, i+1)); - - space_counter++; - } else { - space_counter = 0; - } - } - - if(space_counter === 0) { - // If the first char of the query is not a space, add the full query to results - subqueries.push(query); - remnants.push(''); - } - - result = [subqueries, remnants]; - } catch(e) { - Console.error('Autocompletion.getSubQueries', e); - } finally { - return result; - } - - }; - - - /** - * Creates an array with the autocompletion results. An autocompletion result - * is an array containing the result himself and the rank of the query which - * matched this answer - * @public - * @param {Array} query - * @param {string} id - * @return {Array} - */ - self.process = function(query, id) { - - var results = []; - - try { - // Replace forbidden characters in regex - query = Common.escapeRegex(query); - - // Build an array of regex to use - var query_reg_exp = []; - - for(i = 0; i < query.length; i++) { - if(query[i] !== null) { - query_reg_exp.push( - new RegExp('(^)' + query[i], 'gi') - ); - } - } - - // Search in the roster - var nick, regex; - - $('#' + id + ' .user').each(function() { - nick = $(this).find('.name').text(); - - for(i = 0; i < query_reg_exp.length; i++) { - regex = query_reg_exp[i]; - - if(nick.match(regex)) { - results.push([nick, i]); - } - } - }); - - // Sort the array - results = results.sort( - self.caseInsensitiveSort - ); - } catch(e) { - Console.error('Autocompletion.process', e); - } finally { - return results; - } - - }; - - - /** - * Resets the autocompletion tools - * @public - * @param {string} hash - * @return {undefined} - */ - self.reset = function(hash) { - - try { - $('#' + hash + ' .message-area').removeAttr('data-autocompletion-pointer') - .removeAttr('data-autocompletion-query'); - } catch(e) { - Console.error('Autocompletion.reset', e); - } - - }; - - - /** - * Autocompletes the chat input nick - * @public - * @param {string} hash - * @return {undefined} - */ - self.create = function(hash) { - - try { - // Initialize - var message_area_sel = $('#' + hash + ' .message-area'); - var value = message_area_sel.val(); - - if(!value) { - self.reset(hash); - } - - var query = message_area_sel.attr('data-autocompletion-query'); - - if(query === undefined) { - // The autocompletion has not been yet launched - query = self.getSubQueries(value); - message_area_sel.attr('data-autocompletion-query', JSON.stringify(query)); - } else { - // The autocompletion has already stored a query - query = JSON.parse(query); - } - - // Get the pointer - var pointer = message_area_sel.attr('data-autocompletion-pointer'); - var i = pointer ? parseInt(pointer, 10) : 0; - - // We get the nickname - var nick_result = self.process(query[0], hash)[i]; - var nick; - - if(nick_result !== undefined) { - nick = nick_result[0]; - } - - // Shit, this is my nick! - if((nick !== undefined) && (nick.toLowerCase() == Name.getMUCNick(hash).toLowerCase())) { - // Increment - i++; - - // Get the next nick - nick_result = self.process(query[0], hash)[i]; - - if (nick_result !== undefined) { - nick = nick_result[0]; - } - } - - // We quote the nick - if((nick_result !== undefined) && (nick !== undefined)) { - // Increment - i++; - - Utils.quoteMyNick( - hash, - nick, - query[1][nick_result[1]] - ); - - // Put a pointer - message_area_sel.attr('data-autocompletion-pointer', i); - } - } catch(e) { - Console.error('Autocompletion.create', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); diff --git a/source/app/javascripts/avatar.js b/source/app/javascripts/avatar.js deleted file mode 100644 index 4aae5a5..0000000 --- a/source/app/javascripts/avatar.js +++ /dev/null @@ -1,290 +0,0 @@ -/* - -Jappix - An open social platform -These are the avatar JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou, Maranda - -*/ - -// Bundle -var Avatar = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Variables */ - self.pending = []; - - - /** - * Requests the avatar of a given user - * @public - * @param {string} xid - * @param {string} mode - * @param {boolean} enabled - * @param {boolean} photo - * @return {boolean} - */ - self.get = function(xid, mode, enabled, photo) { - - /* REF: http://xmpp.org/extensions/xep-0153.html */ - - try { - // No need to get the avatar, another process is yet running - if(Utils.existArrayValue(self.pending, xid)) { - return false; - } - - // Initialize: XML data is in one SQL entry, because some browser are sloooow with SQL requests - var xml = Common.XMLFromString( - DataStore.getPersistent('global', 'avatar', xid) - ); - var forced = false; - - // Retrieving forced? - if($(xml).find('forced').text() == 'true') { - forced = true; - } - - // No avatar in presence - if(!photo && !forced && enabled == 'true') { - // Pending marker - self.pending.push(xid); - - // Reset the avatar - self.reset(xid, hex_md5(xid)); - - Console.warn('No avatar for: ' + xid); - } - - // Try to catch the avatar - else { - // Define some stuffs - var type = $(xml).find('type').text(); - var binval = $(xml).find('binval').text(); - var checksum = $(xml).find('checksum').text(); - var updated = false; - - // Process the checksum of the avatar - if(checksum == photo || photo == 'forget' || forced) { - updated = true; - } - - // If the avatar is yet stored and a new retrieving is not needed - if(mode == 'cache' && type && binval && checksum && updated) { - // Pending marker - self.pending.push(xid); - - // Display the cache avatar - self.display(xid, hex_md5(xid), type, binval); - - Console.info('Read avatar from cache: ' + xid); - } - - // Else if the request has not yet been fired, we get it - else if((!updated || mode == 'force' || photo == 'forget') && enabled != 'false') { - // Pending marker - self.pending.push(xid); - - // Get the latest avatar - var iq = new JSJaCIQ(); - iq.setType('get'); - iq.setTo(xid); - - iq.appendNode('vCard', {'xmlns': NS_VCARD}); - - con.send(iq, self.handle); - - Console.info('Get avatar from server: ' + xid); - } - } - - return true; - } catch(e) { - Console.error('Avatar.get', e); - } - - }; - - - /** - * Handles the avatar - * @public - * @param {object} iq - * @return {undefined} - */ - self.handle = function(iq) { - - try { - // Extract the XML values - var handleXML = iq.getNode(); - var handleFrom = Common.fullXID(Common.getStanzaFrom(iq)); - - // Is this me? Remove the resource! - if(Common.bareXID(handleFrom) == Common.getXID()) { - handleFrom = Common.bareXID(handleFrom); - } - - // Get some other values - var hash = hex_md5(handleFrom); - var find = $(handleXML).find('vCard'); - var aChecksum = 'none'; - var oChecksum = null; - - // Read our own checksum - if(handleFrom == Common.getXID()) { - oChecksum = DataStore.getDB(Connection.desktop_hash, 'checksum', 1); - - // Avoid the "null" value - if(!oChecksum) { - oChecksum = ''; - } - } - - // vCard not empty? - if(find.size()) { - // We get our profile details - if(handleFrom == Common.getXID()) { - // Get the names - var names = Name.generateBuddy(iq); - var phone_number = find.find('TEL:has(NUMBER):first NUMBER:first').text(); - - // Write the values to the database - DataStore.setDB(Connection.desktop_hash, 'profile', 'name', names[0]); - DataStore.setDB(Connection.desktop_hash, 'profile', 'nick', names[1]); - DataStore.setDB(Connection.desktop_hash, 'profile', 'phone', phone_number); - } - - // We get the avatar - var aType = find.find('TYPE:first').text(); - var aBinval = find.find('BINVAL:first').text(); - - // No binval? - if(!aBinval) { - aType = 'none'; - aBinval = 'none'; - } - - // Enough data - else { - // No type? - if(!aType) { - aType = 'image/png'; - } else { - aChecksum = hex_sha1(Base64.decode(aBinval)); - } - } - - // We display the user avatar - self.display(handleFrom, hash, aType, aBinval); - - // Store the avatar - DataStore.setPersistent('global', 'avatar', handleFrom, '' + aType + '' + aBinval + '' + aChecksum + 'false'); - - Console.info('Avatar retrieved from server: ' + handleFrom); - } - - // vCard is empty - else { - self.reset(handleFrom); - } - - // We got a new checksum for us? - if(((oChecksum !== null) && (oChecksum != aChecksum)) || !Presence.first_sent) { - // Define a proper checksum - var pChecksum = aChecksum; - - if(pChecksum == 'none') { - pChecksum = ''; - } - - // Update our temp. checksum - DataStore.setDB(Connection.desktop_hash, 'checksum', 1, pChecksum); - - // Send the stanza - if(!Presence.first_sent) { - Storage.get(NS_OPTIONS); - } else if(DataStore.hasPersistent()) { - Presence.sendActions(pChecksum); - } - } - } catch(e) { - Console.error('Avatar.handle', e); - } - - }; - - - /** - * Reset the avatar of an user - * @public - * @param {string} xid - * @param {string} hash - * @return {undefined} - */ - self.reset = function(xid, hash) { - - try { - // Store the empty avatar - DataStore.setPersistent('global', 'avatar', xid, 'nonenonenonefalse'); - - // Display the empty avatar - self.display(xid, hash, 'none', 'none'); - } catch(e) { - Console.error('Avatar.reset', e); - } - - }; - - - /** - * Displays the avatar of an user - * @public - * @param {string} xid - * @param {string} hash - * @param {string} type - * @param {string} binval - * @return {undefined} - */ - self.display = function(xid, hash, type, binval) { - - try { - // Initialize the vars - var container = hash + ' .avatar-container'; - var code = ''; - - // Replace with the new avatar (in the roster and in the chat) - $('.' + container).html(code); - - // We can remove the pending marker - Utils.removeArrayValue(self.pending, xid); - } catch(e) { - Console.error('Avatar.display', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/base64.js b/source/app/javascripts/base64.js deleted file mode 100644 index 1ef3528..0000000 --- a/source/app/javascripts/base64.js +++ /dev/null @@ -1,82 +0,0 @@ -// License: PD - -// This code was written by Tyler Akins and has been placed in the -// public domain. It would be nice if you left this header intact. -// Base64 code from Tyler Akins -- http://rumkin.com - -var Base64 = (function () { - var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - - var obj = { - /** - * Encodes a string in base64 - * @param {String} input The string to encode in base64. - */ - encode: function (input) { - var output = ""; - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0; - - do { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - - enc1 = chr1 >> 2; - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); - enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); - enc4 = chr3 & 63; - - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - - output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + - keyStr.charAt(enc3) + keyStr.charAt(enc4); - } while (i < input.length); - - return output; - }, - - /** - * Decodes a base64 string. - * @param {String} input The string to decode. - */ - decode: function (input) { - var output = ""; - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0; - - // remove all characters that are not A-Z, a-z, 0-9, +, /, or = - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - - do { - enc1 = keyStr.indexOf(input.charAt(i++)); - enc2 = keyStr.indexOf(input.charAt(i++)); - enc3 = keyStr.indexOf(input.charAt(i++)); - enc4 = keyStr.indexOf(input.charAt(i++)); - - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - - output = output + String.fromCharCode(chr1); - - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } while (i < input.length); - - return output; - } - }; - - return obj; -})(); \ No newline at end of file diff --git a/source/app/javascripts/board.js b/source/app/javascripts/board.js deleted file mode 100644 index fd73bd4..0000000 --- a/source/app/javascripts/board.js +++ /dev/null @@ -1,421 +0,0 @@ -/* - -Jappix - An open social platform -These are the notification board JS script for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou, Maranda - -*/ - -// Bundle -var Board = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Contants */ - self.NOTIFICATION = (window.Notification || window.mozNotification || window.webkitNotification); - - - /** - * Generate board info message - * @private - * @param {string} id - * @return {string} - */ - self._generateBoardInfo = function(id) { - - var text = null; - - try { - switch(id) { - // Password change - case 1: - text = Common._e("Your password has been changed, now you can connect to your account with your new login data."); - - break; - - // Account deletion - case 2: - text = Common._e("Your XMPP account has been removed, bye!"); - - break; - - // Account logout - case 3: - text = Common._e("You have been logged out of your XMPP account, have a nice day!"); - - break; - - // Groupchat join - case 4: - text = Common._e("The room you tried to join doesn't seem to exist."); - - break; - - // Groupchat removal - case 5: - text = Common._e("The groupchat has been removed."); - - break; - - // Non-existant groupchat user - case 6: - text = Common._e("The user that you want to reach is not present in the room."); - - break; - } - } catch(e) { - Console.error('Board._generateBoardInfo', e); - } finally { - return text; - } - - }; - - - /** - * Generate board error message - * @private - * @param {string} id - * @return {string} - */ - self._generateBoardError = function(id) { - - var text = null; - - try { - switch(id) { - // Custom error - case 1: - text = '' + Common._e("Error") + ' » '; - - break; - - // Network error - case 2: - text = Common._e("Jappix has been interrupted by a network issue, a bug or bad login (check that you entered the right credentials), sorry for the inconvenience."); - - break; - - // List retrieving error - case 3: - text = Common._e("The element list on this server could not be obtained!"); - - break; - - // Attaching error - case 4: - text = Common.printf(Common._e("An error occured while uploading your file: maybe it is too big (%s maximum) or forbidden!"), JAPPIX_MAX_UPLOAD); - - break; - } - } catch(e) { - Console.error('Board._generateBoardError', e); - } finally { - return text; - } - - }; - - - /** - * Attaches board events - * @private - * @param {object} board_sel - * @return {undefined} - */ - self._attachEvents = function(board_sel) { - - try { - board_sel.click(function() { - self.closeThis(this); - }); - - board_sel.oneTime('5s', function() { - self.closeThis(this); - }); - - board_sel.slideDown(); - } catch(e) { - Console.error('Board._attachEvents', e); - } - - }; - - - /** - * Creates a board panel - * @public - * @param {string} type - * @param {string} id - * @return {boolean} - */ - self.create = function(type, id) { - - try { - // Text var - var text = ''; - - // Info - if(type == 'info') { - text = self._generateBoardInfo(id); - } else { - text = self._generateBoardError(id); - } - - // No text? - if(!text) { - return false; - } - - // Append the content - $('#board').append( - '
' + text + '
' - ); - - // Events (click and auto-hide) - self._attachEvents( - $('#board .one-board.' + type + '[data-id="' + id + '"]') - ); - - return true; - } catch(e) { - Console.error('Board.create', e); - } - - }; - - - /** - * Destroys the existing board notifications - * @public - * @return {undefined} - */ - self.destroy = function() { - - try { - $('#board').empty(); - } catch(e) { - Console.error('Board.destroy', e); - } - - }; - - - /** - * Executes a given action on the notification board - * @public - * @param {type} name - * @return {undefined} - */ - self.action = function(id, type) { - - try { - // In a first, we destroy other boards - self.destroy(); - - // Then we display the board - self.create(type, id); - } catch(e) { - Console.error('Board.action', e); - } - - }; - - - /** - * Opens a given error ID - * @public - * @param {string} id - * @return {undefined} - */ - self.openThisError = function(id) { - - try { - self.action(id, 'error'); - } catch(e) { - Console.error('Board.openThisError', e); - } - - }; - - - /** - * Opens a given info ID - * @public - * @param {string} id - * @return {undefined} - */ - self.openThisInfo = function(id) { - - try { - self.action(id, 'info'); - } catch(e) { - Console.error('Board.openThisInfo', e); - } - - }; - - - /** - * Closes a given board - * @public - * @param {string} board - * @return {undefined} - */ - self.closeThis = function(board) { - - try { - $(board).slideUp('normal', function() { - $(this).remove(); - }); - } catch(e) { - Console.error('Board.closeThis', e); - } - - }; - - - /** - * Creates a quick board (HTML5 notification) - * @public - * @param {string} xid - * @param {string} type - * @param {string} content - * @param {string} title - * @param {string} icon - * @return {object} - */ - self.quick = function(xid, type, content, title, icon) { - - try { - // Cannot process? - if(Common.isFocused() || !content || !self.NOTIFICATION) { - return; - } - - // Default icon? - if(!icon) { - icon = './images/others/default-avatar.png'; - - // Avatar icon? - if(xid) { - var avatar_xml = Common.XMLFromString( - DataStore.getPersistent('global', 'avatar', xid) - ); - - var avatar_type = $(avatar_xml).find('type').text() || 'image/png'; - var avatar_binval = $(avatar_xml).find('binval').text(); - - if(avatar_binval && avatar_type) { - icon = 'data:' + avatar_type + ';base64,' + avatar_binval; - } - } - } - - // Default title? - if(!title) { - title = Common._e("New event!"); - } - - // Create notification - var notification = new self.NOTIFICATION(title, { - dir: 'auto', - lang: '', - body: content, - tag: type, - icon: icon - }); - - // Click event - notification.onclick = function() { - // Click action? - switch(type) { - case 'chat': - Interface.switchChan(hex_md5(xid)); - break; - - case 'groupchat': - Interface.switchChan(hex_md5(Common.bareXID(xid))); - break; - - default: - break; - } - - // Focus on msg-me - window.focus(); - - // Remove notification - this.close(); - }; - - // Show event - notification.onshow = function() { - setTimeout(function() { - notification.close(); - }, 10000); - }; - - return notification; - } catch(e) { - Console.error('Board.quick', e); - } - - }; - - - /** - * Asks for permission to show quick boards (HTML5 notification) - * @public - * @return {undefined} - */ - self.quickPermission = function() { - - try { - self.NOTIFICATION.requestPermission(); - } catch(e) { - Console.error('Board.quickPermission', e); - } - - }; - - - /** - * Plugin launcher - * @public - * @return {undefined} - */ - self.launch = function() { - - try { - // Fires quickPermission() on document click - $(document).click(function() { - // Ask for permission to use quick boards - if((typeof con != 'undefined') && con.connected()) { - self.quickPermission(); - } - }); - } catch(e) { - Console.error('Board.launch', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); - -Board.launch(); \ No newline at end of file diff --git a/source/app/javascripts/browser-detect.js b/source/app/javascripts/browser-detect.js deleted file mode 100644 index cef3c4a..0000000 --- a/source/app/javascripts/browser-detect.js +++ /dev/null @@ -1,125 +0,0 @@ -/* BROWSER DETECT - * http://www.quirksmode.org/js/detect.html - * License: dual-licensed under MPLv2 and the original license - */ - -var BrowserDetect = { - init: function () { - this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; - this.version = this.searchVersion(navigator.userAgent) || - this.searchVersion(navigator.appVersion) || - "an unknown version"; - this.OS = this.searchString(this.dataOS) || "an unknown OS"; - }, - - searchString: function (data) { - for (var i=0;i' + attrs.text + ''; - }); - } - - // Append notification to DOM - call_subitem_sel.html( - '
' + - '
' + - '
' + - '' + - '
' + - - '' + - '
' + - - '
' + - '' + fullname + '' + - '' + map[type].text + '' + - - '
' + buttons_html + '
' + - '
' + - '
' - ); - - // Apply user avatar - Avatar.get(sender_xid, 'cache', 'true', 'forget'); - - // Apply button events - if(typeof map[type].buttons === 'object') { - $.each(map[type].buttons, function(button, attrs) { - call_tools_all_sel.find('a.reply-button[data-action="' + button + '"]').click(function() { - try { - // Remove notification - self._unnotify(); - - // Execute callback, if any - if(typeof attrs.cb === 'function') { - attrs.cb(xid, mode, options_arr); - } - - Console.info('Closed call notification drawer'); - } catch(e) { - Console.error('Call.notify[async]', e); - } finally { - return false; - } - }); - }); - } - - // Enable notification box! - call_tool_sel.addClass('active'); - - // Open notification box! - call_content_sel.show(); - } catch(e) { - Console.error('Call.notify', e); - } finally { - return false; - } - - }; - - - /** - * Remove notification - * @private - * @return {boolean} - */ - self._unnotify = function() { - - try { - // Selectors - var call_tools_all_sel = $('#top-content .tools-all:has(.tools.call)'); - var call_tool_sel = call_tools_all_sel.find('.tools.call'); - var call_content_sel = call_tools_all_sel.find('.call-content'); - var call_subitem_sel = call_content_sel.find('.tools-content-subitem'); - - // Close & disable notification box - call_content_sel.hide(); - call_subitem_sel.empty(); - call_tool_sel.removeClass('active'); - - // Stop all sounds - Audio.stop('incoming-call'); - Audio.stop('outgoing-call'); - } catch(e) { - Console.error('Call._unnotify', e); - } finally { - return false; - } - - }; - - - /** - * Processes the video elements size - * @private - * @param {object} screen - * @param {object} video - * @return {object} - */ - self._process_size = function(screen, video) { - - try { - if(!(typeof screen === 'object' && typeof video === 'object')) { - throw 'Invalid object passed, aborting!'; - } - - // Get the intrinsic size of the video - var video_w = video[0].videoWidth || video.width(); - var video_h = video[0].videoHeight || video.height(); - - // Get the screen size of the video - var screen_w = screen.width(); - var screen_h = screen.height(); - - // Process resize ratios (2 cases) - var r_1 = screen_h / video_h; - var r_2 = screen_w / video_w; - - // Process resized video sizes - var video_w_1 = video_w * r_1; - var video_h_1 = video_h * r_1; - - var video_w_2 = video_w * r_2; - var video_h_2 = video_h * r_2; - - // DOM view modifiers - var dom_width = 'auto'; - var dom_height = 'auto'; - var dom_left = 0; - var dom_top = 0; - - // Landscape/Portrait/Equal container? - if(video_w > video_h || (video_h == video_w && screen_w < screen_h)) { - // Not sufficient? - if(video_w_1 < screen_w) { - dom_width = screen_w + 'px'; - dom_top = -1 * (video_h_2 - screen_h) / 2; - } else { - dom_height = screen_h + 'px'; - dom_left = -1 * (video_w_1 - screen_w) / 2; - } - } else if(video_h > video_w || (video_h == video_w && screen_w > screen_h)) { - // Not sufficient? - if(video_h_1 < screen_h) { - dom_height = screen_h + 'px'; - dom_left = -1 * (video_w_1 - screen_w) / 2; - } else { - dom_width = screen_w + 'px'; - dom_top = -1 * (video_h_2 - screen_h) / 2; - } - } else if(screen_w == screen_h) { - dom_width = screen_w + 'px'; - dom_height = screen_h + 'px'; - } - - return { - width : dom_width, - height : dom_height, - left : dom_left, - top : dom_top - }; - } catch(e) { - Console.error('Call._process_size', e); - } - - }; - - - /** - * Adapts the local video view - * @public - * @param {object} local_sel - * @return {undefined} - */ - self.adapt_local = function(local_sel) { - - try { - var local_video_sel = local_sel.find('video'); - - // Process new sizes - var sizes = Call._process_size( - local_sel, - local_video_sel - ); - - // Apply new sizes - local_video_sel.css({ - 'height': sizes.height, - 'width': sizes.width, - 'margin-top': sizes.top, - 'margin-left': sizes.left - }); - } catch(e) { - Console.error('Call.adapt_local', e); - } - - }; - - - /** - * Adapts the remote video view - * @public - * @param {object} videobox_sel - * @return {undefined} - */ - self.adapt_remote = function(videobox_sel) { - - try { - var remote_video_sel, sizes; - - videobox_sel.find('.remote_video').each(function() { - remote_video_sel = $(this).find('video'); - - if(remote_video_sel.size()) { - // Process new sizes - sizes = Call._process_size( - $(this), - remote_video_sel - ); - - // Apply new sizes - remote_video_sel.css({ - 'height': sizes.height, - 'width': sizes.width, - 'margin-top': sizes.top, - 'margin-left': sizes.left - }); - } - }); - } catch(e) { - Console.error('Call.adapt_remote', e); - } - - }; - - - /** - * Start call elpsed time counter - * @public - * @return {boolean} - */ - self.start_counter = function() { - - try { - // Initialize counter - self.stop_counter(); - self._start_stamp = DateUtils.getTimeStamp(); - self._fire_clock(); - - // Fire it every second - $('#top-content .tools.call .counter').everyTime('1s', self._fire_clock); - - Console.info('Call counter started'); - } catch(e) { - Console.error('Call.start_counter', e); - } finally { - return false; - } - - }; - - - /** - * Stop call elpsed time counter - * @public - * @return {boolean} - */ - self.stop_counter = function() { - - try { - // Reset stamp storage - self._start_stamp = 0; - - // Reset counter - var counter_sel = $('#top-content .tools.call .counter'); - var default_count = counter_sel.attr('data-default'); - - counter_sel.stopTime(); - - $('#top-content .tools.call .counter').text(default_count); - $('#jingle, #muji').find('.elapsed').text(default_count); - - Console.info('Call counter stopped'); - } catch(e) { - Console.error('Call.stop_counter', e); - } finally { - return false; - } - - }; - - - /** - * Fires the counter clock (once more) - * @private - * @return {undefined} - */ - self._fire_clock = function() { - - try { - // Process updated time - var count = DateUtils.difference( - DateUtils.getTimeStamp(), - self._start_stamp - ); - - if(count.getHours()) { - count = count.toString('H:mm:ss'); - } else { - count = count.toString('mm:ss'); - } - - // Display updated counter - $('#top-content .tools.call .counter').text(count); - $('#jingle, #muji').find('.elapsed').text(count); - } catch(e) { - Console.error('Call._fire_clock', e); - } - - }; - - - /** - * Destroy the call interface - * @public - * @return {undefined} - */ - self.destroy_interface = function(container_sel) { - - try { - container_sel.stopTime(); - container_sel.find('*').stopTime(); - - container_sel.remove(); - } catch(e) { - Console.error('Call.destroy_interface', e); - } - - }; - - - /** - * Show the call interface - * @public - * @param {object} manager - * @param {object} call_sel - * @param {object} video_container_sel - * @return {boolean} - */ - self.show_interface = function(manager, call_sel, video_container_sel) { - - try { - if(manager.in_call()) { - call_sel.filter(':hidden').show(); - - // Launch back some events - video_container_sel.mousemove(); - } - } catch(e) { - Console.error('Call.show_interface', e); - } finally { - return false; - } - - }; - - - /** - * Hide the call interface - * @public - * @param {object} call_sel - * @param {object} video_container_sel - * @return {boolean} - */ - self.hide_interface = function(call_sel, video_container_sel) { - - try { - call_sel.filter(':visible').hide(); - - // Reset some events - video_container_sel.find('.topbar').stopTime().hide(); - } catch(e) { - Console.error('Call.hide_interface', e); - } finally { - return false; - } - - }; - - - /** - * Attaches interface events - * @public - * @param {object} manager - * @param {object} call_sel - * @param {object} video_container_sel - * @return {undefined} - */ - self.events_interface = function(manager, call_sel, video_container_sel) { - - try { - call_sel.everyTime(50, function() { - manager._adapt(); - }); - - // Close interface on click on semi-transparent background - call_sel.click(function(evt) { - try { - // Click on lock background? - if($(evt.target).is('.lock')) { - return manager._hide_interface(); - } - } catch(e) { - Console.error('Call.events_interface[async]', e); - } - }); - - // Click on a control or action button - call_sel.find('.topbar').find('.controls a, .actions a').click(function() { - try { - switch($(this).data('type')) { - case 'close': - manager._hide_interface(); break; - case 'stop': - case 'leave': - manager.stop(); break; - case 'mute': - manager.mute(); break; - case 'unmute': - manager.unmute(); break; - } - } catch(e) { - Console.error('Call.events_interface[async]', e); - } finally { - return false; - } - }); - - // Auto Hide/Show interface topbar - video_container_sel.mousemove(function() { - try { - var topbar_sel = $(this).find('.topbar'); - - if(topbar_sel.is(':hidden')) { - topbar_sel.stop(true).fadeIn(250); - } - - topbar_sel.stopTime(); - topbar_sel.oneTime('5s', function() { - topbar_sel.stop(true).fadeOut(250); - }); - } catch(e) { - Console.error('Call.events_interface[async]', e); - } - }); - } catch(e) { - Console.error('Call.events_interface', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); diff --git a/source/app/javascripts/caps.js b/source/app/javascripts/caps.js deleted file mode 100644 index 0538f43..0000000 --- a/source/app/javascripts/caps.js +++ /dev/null @@ -1,787 +0,0 @@ -/* - -Jappix - An open social platform -These are the CAPS JS script for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou, Maranda - -*/ - -// Bundle -var Caps = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Constants */ - self.disco_infos = { - 'identity': { - 'category': 'client', - 'type': 'web', - 'name': 'Jappix' - }, - - 'items': [ - NS_MUC, - NS_MUC_USER, - NS_MUC_ADMIN, - NS_MUC_OWNER, - NS_MUC_CONFIG, - NS_DISCO_INFO, - NS_DISCO_ITEMS, - NS_PUBSUB_RI, - NS_BOSH, - NS_CAPS, - NS_MOOD, - NS_ACTIVITY, - NS_TUNE, - NS_GEOLOC, - NS_NICK, - NS_URN_MBLOG, - NS_URN_INBOX, - NS_MOOD + NS_NOTIFY, - NS_ACTIVITY + NS_NOTIFY, - NS_TUNE + NS_NOTIFY, - NS_GEOLOC + NS_NOTIFY, - NS_URN_MBLOG + NS_NOTIFY, - NS_URN_INBOX + NS_NOTIFY, - NS_URN_DELAY, - NS_ROSTER, - NS_ROSTERX, - NS_HTTP_AUTH, - NS_CHATSTATES, - NS_XHTML_IM, - NS_URN_MAM, - NS_IPV6, - NS_LAST, - NS_PRIVATE, - NS_REGISTER, - NS_SEARCH, - NS_COMMANDS, - NS_VERSION, - NS_XDATA, - NS_VCARD, - NS_IETF_VCARD4, - NS_URN_ADATA, - NS_URN_AMETA, - NS_URN_TIME, - NS_URN_PING, - NS_URN_RECEIPTS, - NS_PRIVACY, - NS_IQOOB, - NS_XOOB, - NS_URN_CARBONS, - NS_URN_CORRECT, - NS_URN_MARKERS, - NS_URN_IDLE, - NS_URN_ATTENTION, - NS_URN_REACH, - NS_URN_HINTS - ] - }; - - - /** - * Parse identities from disco infos query response - * @private - * @param {object} query - * @return {object} - */ - self._parseDiscoIdentities = function(query) { - - var identities = []; - - try { - var cur_category, cur_type, cur_lang, cur_name; - - $(query).find('identity').each(function() { - cur_category = $(this).attr('category') || ''; - cur_type = $(this).attr('type') || ''; - cur_lang = $(this).attr('xml:lang') || ''; - cur_name = $(this).attr('name') || ''; - - identities.push(cur_category + '/' + cur_type + '/' + cur_lang + '/' + cur_name); - }); - } catch(e) { - Console.error('Caps._parseDiscoIdentities', e); - } finally { - return identities; - } - - }; - - - /** - * Parse features from disco infos query response - * @private - * @param {object} query - * @return {object} - */ - self._parseDiscoFeatures = function(query) { - - var features = []; - - try { - var cur_var; - - $(query).find('feature').each(function() { - cur_var = $(this).attr('var'); - - // Add the current value to the array - if(cur_var) { - features.push(cur_var); - } - }); - } catch(e) { - Console.error('Caps._parseDiscoFatures', e); - } finally { - return features; - } - - }; - - - /** - * Parse data form from disco infos query response - * @private - * @param {object} query - * @return {object} - */ - self._parseDiscoDataForms = function(query) { - - var data_forms = []; - - try { - var cur_string, cur_sort_var, - cur_text, cur_var, cur_sort_val; - - $(query).find('x[xmlns="' + NS_XDATA + '"]').each(function() { - // Initialize some stuffs - cur_string = ''; - cur_sort_var = []; - - // Add the form type field - $(this).find('field[var="FORM_TYPE"] value').each(function() { - cur_text = $(this).text(); - - if(cur_text) { - cur_string += cur_text + '<'; - } - }); - - // Add the var attributes into an array - $(this).find('field:not([var="FORM_TYPE"])').each(function() { - cur_var = $(this).attr('var'); - - if(cur_var) { - cur_sort_var.push(cur_var); - } - }); - - // Sort the var attributes - cur_sort_var = cur_sort_var.sort(); - - // Loop this sorted var attributes - $.each(cur_sort_var, function(i) { - // Initialize the value sorting - cur_sort_val = []; - - // Append it to the string - cur_string += cur_sort_var[i] + '<'; - - // Add each value to the array - $(this).find('field[var=' + cur_sort_var[i] + '] value').each(function() { - cur_sort_val.push($(this).text()); - }); - - // Sort the values - cur_sort_val = cur_sort_val.sort(); - - // Append the values to the string - for(var j in cur_sort_val) { - cur_string += cur_sort_val[j] + '<'; - } - }); - - // Any string? - if(cur_string) { - // Remove the undesired double '<' from the string - if(cur_string.match(/(.+)(<)+$/)) { - cur_string = cur_string.substring(0, cur_string.length - 1); - } - - // Add the current string to the array - data_forms.push(cur_string); - } - }); - } catch(e) { - Console.error('Caps._parseDiscoDataForms', e); - } finally { - return data_forms; - } - - }; - - - /** - * Apply XHTML-IM features from disco infos - * @private - * @param {string} xid - * @param {object} features - * @param {object} style_sel - * @param {object} message_area_sel - * @return {undefined} - */ - self._applyDiscoXHTMLIM = function(xid, features, style_sel, message_area_sel) { - - try { - // Apply - if(NS_XHTML_IM in features) { - style_sel.show(); - } else { - // Remove the tooltip elements - style_sel.hide(); - style_sel.find('.bubble-style').remove(); - - // Reset the markers - message_area_sel.removeAttr('style') - .removeAttr('data-font') - .removeAttr('data-fontsize') - .removeAttr('data-color') - .removeAttr('data-bold') - .removeAttr('data-italic') - .removeAttr('data-underline'); - } - - } catch(e) { - Console.error('Caps._applyDiscoXHTMLIM', e); - } - - }; - - - /** - * Apply Jingle features from disco infos - * @private - * @param {string} xid - * @param {object} path_sel - * @param {object} roster_sel - * @return {undefined} - */ - self._applyDiscoJingle = function(xid, path_sel, roster_sel) { - - try { - // Selectors - var roster_jingle_sel = roster_sel.find('.buddy-infos .call-jingle'); - var jingle_audio = path_sel.find('.tools-jingle-audio'); - var roster_jingle_audio = roster_jingle_sel.find('a.audio'); - var jingle_video = path_sel.find('.tools-jingle-video'); - var roster_jingle_video = roster_jingle_sel.find('a.video'); - var roster_jingle_separator = roster_jingle_sel.find('span.separator'); - - // Apply - var jingle_local_supported = JSJAC_JINGLE_AVAILABLE; - var jingle_audio_xid = self.getFeatureResource(xid, NS_JINGLE_APPS_RTP_AUDIO); - var jingle_video_xid = self.getFeatureResource(xid, NS_JINGLE_APPS_RTP_VIDEO); - - if(jingle_audio_xid && jingle_local_supported) { - jingle_audio.show(); - roster_jingle_audio.show(); - } else { - jingle_audio.hide(); - roster_jingle_audio.hide(); - } - - if(jingle_video_xid && jingle_local_supported) { - jingle_video.show(); - roster_jingle_video.show(); - } else { - jingle_video.hide(); - roster_jingle_video.hide(); - } - - if(jingle_audio_xid && jingle_video_xid && jingle_local_supported) { - roster_jingle_separator.show(); - } else { - roster_jingle_separator.hide(); - } - - if((jingle_audio_xid || jingle_video_xid) && jingle_local_supported) { - roster_jingle_sel.show(); - } else { - roster_jingle_sel.hide(); - } - } catch(e) { - Console.error('Caps._applyDiscoJingle', e); - } - - }; - - - /** - * Apply Out of Band Data features from disco infos - * @private - * @param {string} xid - * @param {object} features - * @param {object} file_sel - * @return {undefined} - */ - self._applyDiscoOOB = function(xid, features, file_sel) { - - try { - // Apply - var iq_oob_xid = self.getFeatureResource(xid, NS_IQOOB); - - if(iq_oob_xid || NS_XOOB in features) { - file_sel.show(); - - // Set a marker - file_sel.attr( - 'data-oob', - iq_oob_xid ? 'iq' : 'x' - ); - } else { - // Remove the tooltip elements - file_sel.hide(); - file_sel.find('.bubble-style').remove(); - - // Reset the marker - file_sel.removeAttr('data-oob'); - } - } catch(e) { - Console.error('Caps._applyDiscoOOB', e); - } - - }; - - - /** - * Apply Receipts features from disco infos - * @private - * @param {string} xid - * @param {object} features - * @param {object} message_area_sel - * @return {undefined} - */ - self._applyDiscoReceipts = function(xid, features, message_area_sel) { - - try { - // Apply - if(NS_URN_RECEIPTS in features) { - message_area_sel.attr('data-receipts', 'true'); - } else { - message_area_sel.removeAttr('data-receipts'); - } - } catch(e) { - Console.error('Caps._applyDiscoReceipts', e); - } - - }; - - - /** - * Apply Last Message Correction features from disco infos - * @private - * @param {string} xid - * @param {object} features - * @param {object} path_sel - * @return {undefined} - */ - self._applyDiscoCorrection = function(xid, features, path_sel) { - - try { - // Apply - if(NS_URN_CORRECT in features) { - path_sel.attr('data-correction', 'true'); - } else { - path_sel.removeAttr('data-correction'); - } - } catch(e) { - Console.error('Caps._applyDiscoCorrection', e); - } - - }; - - - /** - * Apply Chat Markers features from disco infos - * @private - * @param {string} xid - * @param {object} features - * @param {object} path_sel - * @return {undefined} - */ - self._applyDiscoMarkers = function(xid, features, path_sel) { - - try { - // Apply - if(NS_URN_MARKERS in features) { - path_sel.attr('data-markers', 'true'); - } else { - path_sel.removeAttr('data-markers'); - } - } catch(e) { - Console.error('Caps._applyDiscoMarkers', e); - } - - }; - - - /** - * Apply Attention features from disco infos - * @private - * @param {string} xid - * @param {object} features - * @param {object} path_sel - * @return {undefined} - */ - self._applyDiscoAttention = function(xid, features, path_sel) { - - try { - // Apply - if(NS_URN_ATTENTION in features) { - path_sel.attr('data-attention', 'true'); - } else { - path_sel.removeAttr('data-attention'); - } - } catch(e) { - Console.error('Caps._applyDiscoAttention', e); - } - - }; - - - /** - * Reads a stored Caps - * @public - * @param {string} caps - * @return {object} - */ - self.read = function(caps) { - - try { - return Common.XMLFromString( - DataStore.getPersistent('global', 'caps', caps) - ); - } catch(e) { - Console.error('Caps.read', e); - } - - }; - - - /** - * Returns an array of the Jappix disco#infos - * @public - * @return {object} - */ - self.myDiscoInfos = function() { - - try { - var disco_base = self.disco_infos.items; - - var disco_jingle = JSJaCJingle.disco(); - var disco_all = disco_base.concat(disco_jingle); - - return Utils.uniqueArrayValues(disco_all); - } catch(e) { - Console.error('Caps.myDiscoInfos', e); - } - - }; - - - /** - * Gets the disco#infos of an entity - * @public - * @param {string} to - * @param {string} caps - * @return {boolean} - */ - self.getDiscoInfos = function(to, caps) { - - try { - // No CAPS - if(!caps) { - Console.warn('No CAPS: ' + to); - - self.displayDiscoInfos(to, ''); - - return false; - } - - // Get the stored disco infos - var xml = self.read(caps); - - // Yet stored - if(xml) { - Console.info('CAPS from cache: ' + to); - - self.displayDiscoInfos(to, xml); - - return true; - } - - Console.info('CAPS from the network: ' + to); - - // Not stored: get the disco#infos - var iq = new JSJaCIQ(); - - iq.setTo(to); - iq.setType('get'); - iq.setQuery(NS_DISCO_INFO); - - con.send(iq, self.handleDiscoInfos); - - return true; - } catch(e) { - Console.error('Caps.getDiscoInfos', e); - } - - }; - - - /** - * Handles the disco#infos of an entity - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleDiscoInfos = function(iq) { - - try { - if(!iq || (iq.getType() == 'error')) { - return; - } - - var from = Common.fullXID(Common.getStanzaFrom(iq)); - var query = iq.getQuery(); - - // Parse values - var identities = self._parseDiscoIdentities(query); - var features = self._parseDiscoFeatures(query); - var data_forms = self._parseDiscoDataForms(query); - - // Process the CAPS - var caps = self.process(identities, features, data_forms); - - // Get the XML string - var xml = Common.xmlToString(query); - - // Store the disco infos - DataStore.setPersistent('global', 'caps', caps, xml); - - // This is our server - if(from == Utils.getServer()) { - // Handle the features - Features.handle(xml); - - Console.info('Got our server CAPS'); - } else { - // Display the disco infos - self.displayDiscoInfos(from, xml); - - Console.info('Got CAPS: ' + from); - } - } catch(e) { - Console.error('Caps.handleDiscoInfos', e); - } - - }; - - - /** - * Displays the disco#infos everywhere needed for an entity - * @public - * @param {string} from - * @param {string} xml - * @return {undefined} - */ - self.displayDiscoInfos = function(from, xml) { - - try { - // Generate the chat path - var xid = Common.bareXID(from); - - // This comes from a private groupchat chat? - if(Utils.isPrivate(xid)) { - xid = from; - } - - hash = hex_md5(xid); - - // Display the supported features - var features = {}; - - $(xml).find('feature').each(function() { - var current = $(this).attr('var'); - - if(current) { - features[current] = 1; - } - }); - - // Paths - var path_sel = $('#' + hash); - var roster_sel = $('#roster .buddy.' + hash); - var message_area_sel = path_sel.find('.message-area'); - var style_sel = path_sel.find('.chat-tools-style'); - var file_sel = path_sel.find('.chat-tools-file'); - - // Apply Features - self._applyDiscoXHTMLIM(xid, features, style_sel, message_area_sel); - self._applyDiscoJingle(xid, path_sel, roster_sel); - self._applyDiscoOOB(xid, features, file_sel); - self._applyDiscoReceipts(xid, features, message_area_sel); - self._applyDiscoCorrection(xid, features, path_sel); - self._applyDiscoMarkers(xid, features, path_sel); - self._applyDiscoAttention(xid, features, path_sel); - } catch(e) { - Console.error('Caps.displayDiscoInfos', e); - } - - }; - - - /** - * Generates the CAPS hash - * @public - * @param {object} identities - * @param {object} features - * @param {object} dataforms - * @return {string} - */ - self.process = function(identities, features, dataforms) { - - try { - // Initialize - var caps_str = ''; - - // Sort the arrays - identities = identities.sort(); - features = features.sort(); - dataforms = dataforms.sort(); - - // Process the sorted identity string - for(var a in identities) { - caps_str += identities[a] + '<'; - } - - // Process the sorted feature string - for(var b in features) { - caps_str += features[b] + '<'; - } - - // Process the sorted data-form string - for(var c in dataforms) { - caps_str += dataforms[c] + '<'; - } - - // Process the SHA-1 hash - var cHash = b64_sha1(caps_str); - - return cHash; - } catch(e) { - Console.error('Caps.process', e); - } - - }; - - - /** - * Generates the Jappix CAPS hash - * @public - * @return {string} - */ - self.mine = function() { - - try { - return self.process( - [ - self.disco_infos.identity.category + '/' + - self.disco_infos.identity.type + '//' + - self.disco_infos.identity.name - ], - - self.myDiscoInfos(), - [] - ); - } catch(e) { - Console.error('Caps.mine', e); - } - - }; - - - /** - * Returns the user resource supporting given feature w/ highest priority - * @public - * @param {string} xid - * @param {string} feature_ns - * @return {string} - */ - self.getFeatureResource = function(xid, feature_ns) { - - var selected_xid = null; - - try { - if(!feature_ns) { - throw 'No feature namespace given!'; - } - - var max_priority = null; - var cur_xid_full, cur_presence_sel, cur_caps, cur_features, cur_priority; - - var resources_obj = Presence.resources(xid); - var fn_parse_resource = function(cur_resource) { - cur_xid_full = xid; - - if(cur_resource) { - cur_xid_full += '/' + cur_resource; - } - - cur_presence_sel = $(Presence.readStanza(cur_xid_full)); - - cur_priority = parseInt((cur_presence_sel.find('priority').text() || 0), 10); - cur_caps = cur_presence_sel.find('caps').text(); - - if(cur_caps) { - cur_features = self.read(cur_caps); - - if(cur_features && $(cur_features).find('feature[var="' + feature_ns + '"]').size() && - (cur_priority >= max_priority || max_priority === null)) { - max_priority = cur_priority; - selected_xid = cur_xid_full; - } - } - }; - - if(resources_obj.bare === 1) { - fn_parse_resource(null); - } - - for(var cur_resource in resources_obj.list) { - fn_parse_resource(cur_resource); - } - } catch(e) { - Console.error('Caps.getFeatureResource', e); - } finally { - return selected_xid; - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); diff --git a/source/app/javascripts/carbons.js b/source/app/javascripts/carbons.js deleted file mode 100644 index 4635b94..0000000 --- a/source/app/javascripts/carbons.js +++ /dev/null @@ -1,241 +0,0 @@ -/* - -Jappix - An open social platform -These are the Message Carbons JS script for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Carbons = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Configures Message Carbons options - * @private - * @param {string} type - * @return {undefined} - */ - self._configure = function(type) { - - try { - if(!(type in {'enable': 1, 'disable': 1})) { - Console.error('Carbons._configure', 'Invalid type (must be either "enable" or "disable")'); return; - } - - var iq = new JSJaCIQ(); - iq.setType('set'); - - iq.appendNode(type, {'xmlns': NS_URN_CARBONS}); - - con.send(iq, function(iq) { - self._handleConfigure(iq, type); - }); - } catch(e) { - Console.error('Carbons._configure', e); - } - - }; - - - /** - * Configures Message Carbons options - * @private - * @param {object} iq - * @param {string} type - * @return {undefined} - */ - self._handleConfigure = function(iq, type) { - - try { - if(iq.getType() === 'result') { - Console.log('Message Carbons successfully configured (type: ' + type + ')'); - } else { - Console.error('Message Carbons could not be configured (type: ' + type + ')'); - } - } catch(e) { - Console.error('Carbons._handleConfigure', e); - } - - }; - - - /** - * Enables Message Carbons for this session - * @public - * @return {undefined} - */ - self.enable = function() { - - try { - self._configure('enable'); - } catch(e) { - Console.error('Carbons.enable', e); - } - - }; - - - /** - * Disables Message Carbons for this session - * @public - * @return {undefined} - */ - self.disable = function() { - - try { - self._configure('disable'); - } catch(e) { - Console.error('Carbons.disable', e); - } - - }; - - - /** - * Returns whether the server has Carbons support or not - * @public - * @return {boolean} - */ - self.has = function() { - - try { - return Features.enabledCarbons(); - } catch(e) { - Console.error('Carbons.has', e); - } - - }; - - - /** - * Returns the forwarded message stanza - * @public - * @param {object} message - * @return {object} - */ - self._getForwarded = function(message) { - - try { - var forwarded_message = $(message.getNode()).find('forwarded[xmlns="' + NS_URN_FORWARD + '"]:first message:first'); - - if(forwarded_message[0]) { - return JSJaCPacket.wrapNode(forwarded_message[0]); - } - - return null; - } catch(e) { - Console.error('Carbons._getForwarded', e); - } - - }; - - - /** - * Handles a forwarded sent message - * @public - * @param {object} message - * @return {undefined} - */ - self.handleSent = function(message) { - - try { - var forwarded_message = self._getForwarded(message); - - if(forwarded_message !== null) { - var to = Common.bareXID(forwarded_message.getTo()); - var hash = hex_md5(to); - var type = forwarded_message.getType(); - - // Display sent message - if(type === 'chat' || !type) { - // Chat opened? (no need to display sent messages if chat does not exist there...) - if(Chat.exists(hash)) { - // Get more data - var id = forwarded_message.getID(); - var body = $.trim(forwarded_message.getBody()); - var my_xid = Common.getXID(); - - // Generate the message body - var html_escape = (Message.generate(forwarded_message, body, hash) !== 'XHTML'); - if(!html_escape) { - body = Filter.xhtml(forwarded_message.getNode()); - } - - if(body) { - // Display the message (finally!) - Message.display( - 'chat', - my_xid, - hash, - Name.getBuddy(my_xid).htmlEnc(), - body, - DateUtils.getCompleteTime(), - DateUtils.getTimeStamp(), - 'user-message', - html_escape, - '', - 'me', - id - ); - - Console.debug('Got a sent message from another resource to: ' + (to || 'none')); - } else { - Console.debug('Got a sent message from another resource to: ' + (to || 'none') + ', was ignored because body empty'); - } - - // Handle chat markers change - Markers.handleCarbonChange(forwarded_message); - } else { - Console.debug('Got a sent message from another resource to: ' + (to || 'none') + ', was ignored because chat not open'); - } - } else { - Console.warning('Got a sent message from another resource to: ' + (to || 'none') + ', was ignored because of type: ' + type); - } - } - } catch(e) { - Console.error('Carbons.handleSent', e); - } - - }; - - - /** - * Handles a forwarded received message - * @public - * @param {object} message - * @return {undefined} - */ - self.handleReceived = function(message) { - - try { - var forwarded_message = self._getForwarded(message); - - if(forwarded_message !== null) { - Console.debug('Got a received message from another resource from: ' + (forwarded_message.getFrom() || 'none')); - - Message.handle(forwarded_message); - } - } catch(e) { - Console.error('Carbons.handleReceived', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/chat.js b/source/app/javascripts/chat.js deleted file mode 100644 index a9f0bd6..0000000 --- a/source/app/javascripts/chat.js +++ /dev/null @@ -1,672 +0,0 @@ -/* - -Jappix - An open social platform -These are the chat JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Authors: Valérian Saliou, Eric, Maranda - -*/ - -// Bundle -var Chat = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Apply generate events - * @private - * @param {string} path - * @param {string} id - * @param {string} xid - * @return {undefined} - */ - self._generateEvents = function(path, id, xid) { - - try { - // Click event: chat cleaner - $(path + 'tools-clear').click(function() { - self.clean(id); - }); - - // Click event: call (audio) - $(path + 'tools-jingle-audio').click(function() { - Jingle.start(xid, 'audio'); - }); - - // Click event: call (video) - $(path + 'tools-jingle-video').click(function() { - Jingle.start(xid, 'video'); - }); - - // Click event: user-infos - $(path + 'tools-infos').click(function() { - UserInfos.open(xid); - }); - } catch(e) { - Console.error('Chat._generateEvents', e); - } - - }; - - - /** - * Apply generate events - * @private - * @param {object} input_sel - * @param {string} xid - * @param {string} hash - * @return {undefined} - */ - self._createEvents = function(input_sel, xid, hash) { - - try { - self._createEventsInput(input_sel, hash); - self._createEventsKey(input_sel, xid, hash); - self._createEventsMouse(xid, hash); - } catch(e) { - Console.error('Chat._createEvents', e); - } - - }; - - - /** - * Apply generate events (input) - * @private - * @param {object} input_sel - * @param {string} hash - * @return {undefined} - */ - self._createEventsInput = function(input_sel, hash) { - - try { - input_sel.focus(function() { - // Clean notifications for this chat - Interface.chanCleanNotify(hash); - - // Store focus on this chat! - Interface.chat_focus_hash = hash; - }); - - input_sel.blur(function() { - // Reset storage about focus on this chat! - if(Interface.chat_focus_hash == hash) { - Interface.chat_focus_hash = null; - } - }); - } catch(e) { - Console.error('Chat._createEventsInput', e); - } - - }; - - - /** - * Apply generate events (key) - * @private - * @param {object} input_sel - * @param {string} xid - * @param {string} hash - * @return {undefined} - */ - self._createEventsKey = function(input_sel, xid, hash) { - - try { - input_sel.keydown(function(e) { - if(e.keyCode == 13) { - // Enter key - if(e.shiftKey || e.ctrlKey) { - // Add a new line - input_sel.val(input_sel.val() + '\n'); - } else { - if(Correction.isIn(xid) === true) { - var corrected_value = input_sel.val().trim(); - - if(corrected_value) { - // Send the corrected message - Correction.send(xid, 'chat', corrected_value); - } - - Correction.leave(xid); - } else { - // Send the message - Message.send(hash, 'chat'); - } - - // Reset the composing database entry - DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'off'); - } - - return false; - } else if(e.keyCode == 8) { - // Leave correction mode? (another way, by flushing input value progressively) - if(Correction.isIn(xid) === true && !input_sel.val()) { - Correction.leave(xid); - } - } - }); - - input_sel.keyup(function(e) { - if(e.keyCode == 27) { - // Escape key - input_sel.val(''); - - // Leave correction mode? (simple escape way) - if(Correction.isIn(xid) === true) { - Correction.leave(xid); - } - } else { - Correction.detect(xid, input_sel); - } - }); - } catch(e) { - Console.error('Chat._createEventsKey', e); - } - - }; - - - /** - * Apply generate events (mouse) - * @private - * @param {string} xid - * @param {string} hash - * @return {undefined} - */ - self._createEventsMouse = function(xid, hash) { - - try { - // Scroll in chat content - $('#page-engine #' + hash + ' .content').scroll(function() { - var self = this; - - if(Features.enabledMAM() && !(xid in MAM.map_pending)) { - var has_state = xid in MAM.map_states; - var rsm_count = has_state ? MAM.map_states[xid].rsm.count : 1; - var rsm_before = has_state ? MAM.map_states[xid].rsm.first : ''; - - // Request more archives? - if(rsm_count > 0 && $(this).scrollTop() < MAM.SCROLL_THRESHOLD) { - var was_scroll_top = $(self).scrollTop() <= 32; - var wait_mam = $('#' + hash).find('.wait-mam'); - wait_mam.show(); - - MAM.getArchives({ - 'with': xid - }, { - 'max': MAM.REQ_MAX, - 'before': rsm_before - }, function() { - var wait_mam_height = was_scroll_top ? 0 : wait_mam.height(); - wait_mam.hide(); - - // Restore scroll? - if($(self).scrollTop() < MAM.SCROLL_THRESHOLD) { - var sel_mam_chunk = $(self).find('.mam-chunk:first'); - - var cont_padding_top = parseInt($(self).css('padding-top').replace(/[^-\d\.]/g, '')); - var cont_one_group_margin_bottom = parseInt(sel_mam_chunk.find('.one-group:last').css('margin-bottom').replace(/[^-\d\.]/g, '')); - var cont_mam_chunk_height = sel_mam_chunk.height(); - - $(self).scrollTop(wait_mam_height + cont_padding_top + cont_one_group_margin_bottom + cont_mam_chunk_height); - } - }); - } - } - }); - } catch(e) { - Console.error('Chat._createEventsMouse', e); - } - - }; - - - /** - * Apply generate events - * @private - * @param {string} type - * @param {string} id - * @param {string} xid - * @return {object} - */ - self._generateChatCode = function(type, id, xid) { - - var code_args = {}; - - try { - // Groupchat special code - if(type == 'groupchat') { - code_args.attributes = ' data-type="groupchat" data-correction="true"'; - code_args.avatar = ''; - code_args.name = '

' + Common._e("Subject") + ' ' + Common._e("no subject defined for this room.") + '

'; - code_args.code = '
' + - '

' + Common._e("Moderators") + '

' + - '

' + Common._e("Participants") + '

' + - '

' + Common._e("Visitors") + '

' + - '

' + Common._e("Others") + '

'; - code_args.link = ''; - code_args.style = ''; - - // Is this a gateway? - if(xid.match(/%/)) { - code_args.disabled = ''; - } else { - code_args.disabled = ' disabled=""'; - } - } else { - code_args.mam = '
'; - code_args.attributes = ' data-type="chat"'; - code_args.avatar = '
'; - code_args.name = '

'; - code_args.code = '
' + code_args.mam + '
'; - code_args.link = '' + - '' + - ''; - code_args.style = ' style="display: none;"'; - code_args.disabled = ''; - } - - // Not a groupchat private chat, we can use the buddy add icon - if((type == 'chat') || (type == 'groupchat')) { - var title; - - if(type == 'chat') { - title = Common._e("Add this contact to your friends"); - } else { - title = Common._e("Add this groupchat to your favorites"); - } - - code_args.link += ''; - } - - // IE DOM parsing bug fix - code_args.style_picker = '
' + - '' + - '
'; - - if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) { - code_args.style_picker = ''; - } - } catch(e) { - Console.error('Chat._generateChatCode', e); - } finally { - return code_args; - } - - }; - - - /** - * Correctly opens a new chat - * @public - * @param {string} xid - * @param {string} type - * @param {string} nickname - * @param {string} password - * @param {string} title - * @return {boolean} - */ - self.checkCreate = function(xid, type, nickname, password, title) { - - try { - // No XID? - if(!xid) { - return false; - } - - // We generate some stuffs - var hash = hex_md5(xid); - var name; - - // Gets the name of the user/title of the room - if(title) { - name = title; - } else { - // Private groupchat chat - if(type == 'private') { - name = Common.thisResource(xid); - } - - // XMPP-ID - else if(xid.indexOf('@') != -1) { - name = Name.getBuddy(xid); - } - - // Gateway - else { - name = xid; - } - } - - // If the target div does not exist - if(!Common.exists('#' + hash)) { - // We check the type of the chat to open - if((type == 'chat') || (type == 'private')) { - self.create(hash, xid, name, type); - } else if(type == 'groupchat') { - // Try to read the room stored configuration - if(!Utils.isAnonymous() && (!nickname || !password || !title)) { - // Catch the room data - var fData = $(Common.XMLFromString(DataStore.getDB(Connection.desktop_hash, 'favorites', xid))); - var fNick = fData.find('nick').text(); - var fPwd = fData.find('password').text(); - var fName = fData.find('name').text(); - - // Apply the room data - if(!nickname && fNick) - nickname = fNick; - if(!password && fPwd) - password = fPwd; - if(!title && fName) - name = fName; - } - - Groupchat.create(hash, xid, name, nickname, password); - } - } - - // Switch to the newly-created chat - Interface.switchChan(hash); - } catch(e) { - Console.error('Chat.checkCreate', e); - } finally { - return false; - } - - }; - - - /** - * Generates the chat DOM elements - * @public - * @param {string} type - * @param {string} id - * @param {string} xid - * @param {string} nick - * @return {undefined} - */ - self.generate = function(type, id, xid, nick) { - - try { - // Generate some stuffs - var path = '#' + id + ' .'; - var escaped_xid = escape(xid); - - // Special code - var chat_args = self._generateChatCode(type, id, xid); - - // Append the chat HTML code - $('#page-engine').append( - '
' + - '
' + - chat_args.avatar + - - '
' + - '

' + nick.htmlEnc() + '

' + - chat_args.name + - '
' + - '
' + - - chat_args.code + - - '
' + - '' + - - '
' + - '' + - '
' + - '
' + - '
' - ); - - self._generateEvents(path, id, xid); - } catch(e) { - Console.error('Chat.generate', e); - } - - }; - - - /** - * Generates the chat switch elements - * @public - * @param {string} type - * @param {string} id - * @param {string} xid - * @param {string} nick - * @return {undefined} - */ - self.generateSwitch = function(type, id, xid, nick) { - - try { - // Path to the element - var chat_switch = '#page-switch .'; - - // Special code - var special_class = ' unavailable'; - var show_close = true; - - // Groupchat - if(type == 'groupchat') { - special_class = ' groupchat-default'; - - if(Utils.isAnonymous() && (xid == Common.generateXID(ANONYMOUS_ROOM, 'groupchat'))) { - show_close = false; - } - } - - // Generate the HTML code - var html = '
' + - '
' + - - '
' + nick.htmlEnc() + '
'; - - // Show the close button if not MUC and not anonymous - if(show_close) { - html += '
' + - 'x' + - '
'; - } - - // Close the HTML - html += '
'; - - // Append the HTML code - $(chat_switch + 'chans, ' + chat_switch + 'more-content').append(html); - } catch(e) { - Console.error('Chat.generateSwitch', e); - } - - }; - - - /** - * Cleans given the chat lines - * @public - * @param {string} chat - * @return {undefined} - */ - self.clean = function(chat) { - - try { - // Remove the messages - $('#page-engine #' + chat + ' .content .one-group').remove(); - - // Clear the history database - Message.removeLocalArchive(chat); - - // Focus again - $(document).oneTime(10, function() { - $('#page-engine #' + chat + ' .text .message-area').focus(); - }); - } catch(e) { - Console.error('Chat.clean', e); - } - - }; - - - /** - * Returns whether chat exists or not - * @public - * @param {string} hash - * @return {boolean} - */ - self.exists = function(hash) { - - exists = false; - - try { - if(hash) { - exists = Common.exists('#' + hash + '.page-engine-chan[data-type="chat"]'); - } - } catch(e) { - Console.error('Chat.exists', e); - } finally { - return exists; - } - - }; - - - /** - * Creates a new chat - * @public - * @param {string} hash - * @param {string} xid - * @param {string} nick - * @param {string} type - * @return {undefined} - */ - self.create = function(hash, xid, nick, type) { - - try { - Console.info('New chat: ' + xid); - - // Create the chat content - self.generate(type, hash, xid, nick); - - // Create the chat switcher - self.generateSwitch(type, hash, xid, nick); - - // Is this a chat? - if(type == 'chat') { - // MAM? Get archives from there! - if(Features.enabledMAM()) { - MAM.getArchives({ - 'with': xid - }, { - 'max': MAM.REQ_MAX, - 'before': '' - }); - } else { - // Restore the chat history - var chat_history = Message.readLocalArchive(hash); - - if(chat_history) { - // Generate hashs - var my_hash = hex_md5(Common.getXID()); - var friend_hash = hex_md5(xid); - - // Add chat history HTML - var path_sel = $('#' + hash); - - path_sel.find('.content').append(chat_history); - - // Filter old groups & messages - var one_group_sel = path_sel.find('.one-group'); - one_group_sel.filter('[data-type="user-message"]').addClass('from-history').attr('data-type', 'old-message'); - path_sel.find('.user-message').removeClass('user-message').addClass('old-message'); - - // Regenerate user names - one_group_sel.filter('.' + my_hash + ' b.name').text( - Name.getBuddy(Common.getXID()) - ); - - one_group_sel.filter('.' + friend_hash + ' b.name').text( - Name.getBuddy(xid) - ); - - // Regenerate group dates - one_group_sel.each(function() { - var current_stamp = parseInt($(this).attr('data-stamp'), 10); - $(this).find('span.date').text(DateUtils.relative(current_stamp)); - }); - - // Regenerate avatars - if(Common.exists('#' + hash + ' .one-group.' + my_hash + ' .avatar-container')) { - Avatar.get(Common.getXID(), 'cache', 'true', 'forget'); - } - - if(Common.exists('#' + hash + ' .one-group.' + friend_hash + ' .avatar-container')) { - Avatar.get(xid, 'cache', 'true', 'forget'); - } - } - } - - // Add button - if(!Roster.isFriend(xid)) { - $('#' + hash + ' .tools-add').click(function() { - // Hide the icon (to tell the user all is okay) - $(this).hide(); - - // Send the subscribe request - Roster.addThisContact(xid, nick); - }).show(); - } - } - - // We catch the user's informations (like this avatar, vcard, and so on...) - UserInfos.get(hash, xid, nick, type); - - // The icons-hover functions - Tooltip.icons(xid, hash); - - // The event handlers - var input_sel = $('#page-engine #' + hash + ' .message-area'); - self._createEvents(input_sel, xid, hash); - - // Input events - ChatState.events(input_sel, xid, hash, 'chat'); - Markers.events(input_sel, xid, hash, 'chat'); - } catch(e) { - Console.error('Chat.create', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); diff --git a/source/app/javascripts/chatstate.js b/source/app/javascripts/chatstate.js deleted file mode 100644 index d0353fb..0000000 --- a/source/app/javascripts/chatstate.js +++ /dev/null @@ -1,252 +0,0 @@ -/* - -Jappix - An open social platform -These are the chatstate JS script for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var ChatState = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Sends a given chatstate to a given entity - * @public - * @param {string} state - * @param {string} xid - * @param {string} hash - * @return {undefined} - */ - self.send = function(state, xid, hash) { - - try { - var user_type = $('#' + hash).attr('data-type'); - - // If the friend client supports chatstates and is online - if((user_type == 'groupchat') || ((user_type == 'chat') && $('#' + hash + ' .message-area').attr('data-chatstates') && !Common.exists('#page-switch .' + hash + ' .unavailable'))) { - // Already sent? - if(DataStore.getDB(Connection.desktop_hash, 'currentchatstate', xid) == state) { - return; - } - - // Write the state - DataStore.setDB(Connection.desktop_hash, 'currentchatstate', xid, state); - - // New message stanza - var aMsg = new JSJaCMessage(); - aMsg.setTo(xid); - aMsg.setType(user_type); - - // Append the chatstate node - aMsg.appendNode(state, { - 'xmlns': NS_CHATSTATES - }); - - // Send this! - con.send(aMsg); - } - } catch(e) { - Console.error('ChatState.send', e); - } - - }; - - - /** - * Displays a given chatstate in a given chat - * @public - * @param {string} state - * @param {string} hash - * @param {string} type - * @return {undefined} - */ - self.display = function(state, hash, type) { - - try { - // Groupchat? - if(type == 'groupchat') { - self.reset(hash, type); - - // "gone" state not allowed - if(state != 'gone') { - $('#page-engine .page-engine-chan .user.' + hash).addClass(state); - } - } - - // Chat - else { - // We change the buddy name color in the page-switch - self.reset(hash, type); - $('#page-switch .' + hash + ' .name').addClass(state); - - // We generate the chatstate text - var text = ''; - - switch(state) { - // Active - case 'active': - text = Common._e("Your friend is paying attention to the conversation."); - - break; - - // Composing - case 'composing': - text = Common._e("Your friend is writing a message..."); - - break; - - // Paused - case 'paused': - text = Common._e("Your friend stopped writing a message."); - - break; - - // Inactive - case 'inactive': - text = Common._e("Your friend is doing something else."); - - break; - - // Gone - case 'gone': - text = Common._e("Your friend closed the chat."); - - break; - } - - // We reset the previous state - $('#' + hash + ' .chatstate').remove(); - - // We create the chatstate - $('#' + hash + ' .content').after( - '
' + text + '
' - ); - } - } catch(e) { - Console.error('ChatState.display', e); - } - - }; - - - /** - * Resets the chatstate switcher marker - * @public - * @param {string} hash - * @param {string} type - * @return {undefined} - */ - self.reset = function(hash, type) { - - try { - // Define the selector - var selector; - - if(type == 'groupchat') { - selector = $('#page-engine .page-engine-chan .user.' + hash); - } else { - selector = $('#page-switch .' + hash + ' .name'); - } - - // Reset! - selector.removeClass('active composing paused inactive gone'); - } catch(e) { - Console.error('ChatState.reset', e); - } - - }; - - - /** - * Adds the chatstate events - * @public - * @param {object} target - * @param {string} xid - * @param {string} hash - * @param {string} type - * @return {undefined} - */ - self.events = function(target, xid, hash, type) { - - try { - target.keyup(function(e) { - if(e.keyCode != 13) { - // Composing a message - if($(this).val() && (DataStore.getDB(Connection.desktop_hash, 'chatstate', xid) != 'on')) { - // We change the state detect input - DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'on'); - - // We send the friend a "composing" chatstate - self.send('composing', xid, hash); - } - - // Flushed the message which was being composed - else if(!$(this).val() && (DataStore.getDB(Connection.desktop_hash, 'chatstate', xid) == 'on')) { - // We change the state detect input - DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'off'); - - // We send the friend an "active" chatstate - self.send('active', xid, hash); - } - } - }); - - target.change(function() { - // Reset the composing database entry - DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'off'); - }); - - target.focus(function() { - // Not needed - if(target.is(':disabled')) { - return; - } - - // Something was written, user started writing again - if($(this).val()) { - self.send('composing', xid, hash); - } - - // Chat only: Nothing in the input, user is active - else if(type == 'chat') { - self.send('active', xid, hash); - } - }); - - target.blur(function() { - // Not needed - if(target.is(':disabled')) { - return; - } - - // Something was written, user paused - if($(this).val()) { - self.send('paused', xid, hash); - } else if(type == 'chat') { - self.send('inactive', xid, hash); - } - }); - } catch(e) { - Console.error('ChatState.events', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/common.js b/source/app/javascripts/common.js deleted file mode 100644 index 5874604..0000000 --- a/source/app/javascripts/common.js +++ /dev/null @@ -1,906 +0,0 @@ -/* - -Jappix - An open social platform -These are the common JS script for Jappix - -------------------------------------------------- - -License: dual-licensed under AGPL and MPLv2 -Authors: Valérian Saliou, olivierm, regilero, Maranda - -*/ - -// Bundle -var Common = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Constants */ - self.R_DOMAIN_NAME = /^(([a-zA-Z0-9-\.]+)\.)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/i; - - - /** - * Checks if an element exists in the DOM - * @public - * @param {string} path - * @return {boolean} - */ - self.exists = function(path) { - - var exists = false; - - try { - if(jQuery(path).size() > 0) { - exists = true; - } - } catch(e) { - Console.error('Common.exists', e); - } finally { - return exists; - } - - }; - - - /** - * Checks if Jappix is connected - * @public - * @return {boolean} - */ - self.isConnected = function() { - - connected = false; - - try { - if((typeof con != 'undefined') && con && con.connected()) { - connected = true; - } - } catch(e) { - Console.error('Common.isConnected', e); - } finally { - return connected; - } - - }; - - - /** - * Checks if Jappix is connected - * @public - * @return {boolean} - */ - self.hasWebSocket = function() { - - has_websocket = false; - - try { - if(HOST_WEBSOCKET && typeof window.WebSocket != 'undefined') { - has_websocket = true; - } - } catch(e) { - Console.error('Common.hasWebSocket', e); - } finally { - return has_websocket; - } - - }; - - - /** - * Checks if Jappix has focus - * @public - * @return {boolean} - */ - self.isFocused = function() { - - has_focus = true; - - try { - if(!document.hasFocus()) { - has_focus = false; - } - } catch(e) { - Console.error('Common.isFocused', e); - } finally { - return has_focus; - } - - }; - - - /** - * Matches a domain name - * @public - * @param {string} xid - * @return {boolean} - */ - self.isDomain = function(xid) { - - is_domain = false; - - try { - if(xid.match(self.R_DOMAIN_NAME)) { - is_domain = true; - } - } catch(e) { - Console.error('Common.isDomain', e); - } finally { - return is_domain; - } - - }; - - - /** - * Generates the good XID - * @public - * @param {string} xid - * @param {string} type - * @return {string} - */ - self.generateXID = function(xid, type) { - - try { - // XID needs to be transformed - xid = xid.toLowerCase(); - - if(xid && (xid.indexOf('@') === -1)) { - // Groupchat XID - if(type == 'groupchat') { - return xid + '@' + HOST_MUC; - } - - // Gateway XID - if(self.isDomain(xid) === true) { - return xid; - } - - // User XID - return xid + '@' + HOST_MAIN; - } - - // Nothing special (yet bare XID) - return xid; - } catch(e) { - Console.error('Common.generateXID', e); - } - - }; - - - /** - * Gets the asked translated string - * @public - * @param {string} string - * @return {string} - */ - self._e = function(string) { - - try { - return string; - } catch(e) { - Console.error('Common._e', e); - } - - }; - - - /** - * Replaces '%s' to a given value for a translated string - * @public - * @param {string} string - * @param {string} value - * @return {string} - */ - self.printf = function(string, value) { - - try { - return string.replace('%s', value); - } catch(e) { - Console.error('Common.printf', e); - } - - }; - - - /** - * Returns the string after the last given char - * @public - * @param {string} given_char - * @param {string} str - * @return {string} - */ - self.strAfterLast = function(given_char, str) { - - try { - if(!given_char || !str) { - return ''; - } - - var char_index = str.lastIndexOf(given_char); - var str_return = str; - - if(char_index >= 0) { - str_return = str.substr(char_index + 1); - } - - return str_return; - } catch(e) { - Console.error('Common.strAfterLast', e); - } - - }; - - - /** - * Properly explodes a string with a given character - * @public - * @param {string} toEx - * @param {string} toStr - * @param {number} i - * @return {string} - */ - self.explodeThis = function(toEx, toStr, i) { - - try { - // Get the index of our char to explode - var index = toStr.indexOf(toEx); - - // We split if necessary the string - if(index !== -1) { - if(i === 0) { - toStr = toStr.substr(0, index); - } else { - toStr = toStr.substr(index + 1); - } - } - - // We return the value - return toStr; - } catch(e) { - Console.error('Common.explodeThis', e); - } - - }; - - - /** - * Cuts the resource of a XID - * @public - * @param {string} aXID - * @return {string} - */ - self.cutResource = function(aXID) { - - try { - return self.explodeThis('/', aXID, 0); - } catch(e) { - Console.error('Common.cutResource', e); - } - - }; - - - /** - * Gets the resource of a XID - * @public - * @param {string} aXID - * @return {string} - */ - self.thisResource = function(aXID) { - - resource = ''; - - try { - // Any resource? - if(self.isFullXID(aXID)) { - resource = self.explodeThis('/', aXID, 1); - } - } catch(e) { - Console.error('Common.thisResource', e); - } finally { - return resource; - } - - }; - - - /** - * Returns whether this XID is full or not - * @public - * @param {string} xid - * @return {boolean} - */ - self.isFullXID = function(xid) { - - try { - return xid.indexOf('/') !== -1; - } catch(e) { - Console.error('Common.isFullXID', e); - - return false; - } - - }; - - - /** - * nodepreps an XMPP node - * @public - * @param {string} node - * @return {string} - */ - self.nodeprep = function(node) { - - // Spec: http://tools.ietf.org/html/rfc6122#appendix-A - - try { - if(!node) { - return node; - } - - // Remove prohibited chars - var prohibited_chars = ['"', '&', '\'', '/', ':', '<', '>', '@']; - - for(var j in prohibited_chars) { - node = node.replace(prohibited_chars[j], ''); - } - - // Lower case - node = node.toLowerCase(); - - return node; - } catch(e) { - Console.error('Common.nodeprep', e); - } - - }; - - - /** - * Encodes quotes in a string - * @public - * @param {string} str - * @return {string} - */ - self.encodeQuotes = function(str) { - - try { - return (str + '').htmlEnc(); - } catch(e) { - Console.error('Common.encodeQuotes', e); - } - - }; - - - /** - * Escapes quotes in a string - * @public - * @param {string} str - * @return {string} - */ - self.escapeQuotes = function(str) { - - try { - return escape(self.encodeQuotes(str)); - } catch(e) { - Console.error('Common.escapeQuotes', e); - } - - }; - - - /** - * Unescapes quotes in a string - * @public - * @param {string} str - * @return {string} - */ - self.unescapeQuotes = function(str) { - - try { - return unescape(str); - } catch(e) { - Console.error('Common.unescapeQuotes', e); - } - - }; - - - /** - * Gets the bare XID from a XID - * @public - * @param {string} xid - * @return {string} - */ - self.bareXID = function(xid) { - - try { - // Cut the resource - xid = self.cutResource(xid); - - // Launch nodeprep - if(xid.indexOf('@') !== -1) { - xid = self.nodeprep(self.getXIDNick(xid, true)) + '@' + self.getXIDHost(xid); - } - - return xid; - } catch(e) { - Console.error('Common.bareXID', e); - } - - }; - - - /** - * Gets the full XID from a XID - * @public - * @param {string} xid - * @return {string} - */ - self.fullXID = function(xid) { - - try { - // Normalizes the XID - var full = self.bareXID(xid); - var resource = self.thisResource(xid); - - // Any resource? - if(resource) { - full += '/' + resource; - } - - return full; - } catch(e) { - Console.error('Common.fullXID', e); - } - - }; - - - /** - * Gets the nick from a XID - * @public - * @param {string} aXID - * @param {boolean} raw_explode - * @return {string} - */ - self.getXIDNick = function(aXID, raw_explode) { - - try { - if(raw_explode !== true) { - // Gateway nick? - if(aXID.match(/\\40/)) { - return self.explodeThis('\\40', aXID, 0); - } - } - - return self.explodeThis('@', aXID, 0); - } catch(e) { - Console.error('Common.getXIDNick', e); - } - - }; - - - /** - * Gets the host from a XID - * @public - * @param {string} aXID - * @return {string} - */ - self.getXIDHost = function(aXID) { - - try { - return self.explodeThis('@', aXID, 1); - } catch(e) { - Console.error('Common.getXIDHost', e); - } - - }; - - - /** - * Checks if we are RTL (Right-To-Left) - * @public - * @return {boolean} - */ - self.isRTL = function() { - - try { - return (self._e("default:LTR") == 'default:RTL'); - } catch(e) { - Console.error('Common.isRTL', e); - } - - }; - - - /** - * Checks if anonymous mode is allowed - * @public - * @return {boolean} - */ - self.allowedAnonymous = function() { - - try { - return (ANONYMOUS == 'on'); - } catch(e) { - Console.error('Common.allowedAnonymous', e); - } - - }; - - - /** - * Checks if host is locked - * @public - * @return {boolean} - */ - self.lockHost = function() { - - try { - return (LOCK_HOST == 'on'); - } catch(e) { - Console.error('Common.lockHost', e); - } - - }; - - - /** - * Gets the bare XID of the user - * @public - * @return {string} - */ - self.getXID = function() { - - try { - // Return the XID of the user - if(con.username && con.domain) { - return con.username + '@' + con.domain; - } - - return ''; - } catch(e) { - Console.error('Common.getXID', e); - } - - }; - - - /** - * Gets the full XID of the user - * @public - * @return {string} - */ - self.getFullXID = function() { - - try { - var xid = self.getXID(); - - // Return the full XID of the user - if(xid) { - return xid + '/' + con.resource; - } - - return ''; - } catch(e) { - Console.error('Common.getFullXID', e); - } - - }; - - - /** - * Generates the colors for a given user XID - * @public - * @param {type} xid - * @return {string} - */ - self.generateColor = function(xid) { - - try { - var colors = new Array( - 'ac0000', - 'a66200', - '007703', - '00705f', - '00236b', - '4e005c' - ); - - var number = 0; - - for(var i = 0; i < xid.length; i++) { - number += xid.charCodeAt(i); - } - - var color = '#' + colors[number % (colors.length)]; - - return color; - } catch(e) { - Console.error('Common.generateColor', e); - } - - }; - - - /** - * Checks if the XID is a gateway - * @public - * @param {string} xid - * @return {boolean} - */ - self.isGateway = function(xid) { - - is_gateway = true; - - try { - if(xid.indexOf('@') !== -1) { - is_gateway = false; - } - } catch(e) { - Console.error('Common.isGateway', e); - } finally { - return is_gateway; - } - - }; - - - /** - * Gets the from attribute of a stanza (overrides some servers like Prosody missing from attributes) - * @public - * @param {object} stanza - * @return {string} - */ - self.getStanzaFrom = function(stanza) { - - try { - var from = stanza.getFrom(); - - // No from, we assume this is our XID - if(!from) { - from = self.getXID(); - } - - return from; - } catch(e) { - Console.error('Common.getStanzaFrom', e); - } - - }; - - - /** - * Returns whether the stanza has been really sent from our own server or entity - * @public - * @param {object} stanza - * @return {string} - */ - self.isSafeStanza = function(stanza) { - - var is_safe = false; - - try { - var from = self.getStanzaFrom(stanza); - - is_safe = (!from || from == con.domain || from == self.getXID()) && true; - } catch(e) { - Console.error('Common.isSafeStanza', e); - } finally { - return is_safe; - } - - }; - - - /** - * Adds a zero to a date when needed - * @public - * @param {number} i - * @return {string} - */ - self.padZero = function(i) { - - try { - // Negative number (without first 0) - if(i > -10 && i < 0) { - return '-0' + (i * -1); - } - - // Positive number (without first 0) - if(i < 10 && i >= 0) { - return '0' + i; - } - - // All is okay - return i; - } catch(e) { - Console.error('Common.padZero', e); - } - - }; - - - /** - * Escapes a string (or an array of string) for a regex usage. In case of an - * array, escapes are not done "in place", keeping the query unmodified - * @public - * @param {object} query - * @return {object} - */ - self.escapeRegex = function(query) { - - var result = []; - - try { - if(query instanceof Array) { - result = [query.length]; - - for(i = 0; i < query.length; i++) { - try { - result[i] = Common.escapeRegex(query[i]); - } catch(e) { - Console.error('Common.escapeRegex', e); - result[i] = null; - } - } - } else { - try { - result = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); - } catch(e) { - Console.error('Common.escapeRegex[inner]', e); - } - } - } catch(e) { - Console.error('Common.escapeRegex', e); - } finally { - return result; - } - - }; - - - /** - * Returns a random array value - * @public - * @param {object} arr - * @return {object} - */ - self.randomArrayValue = function(arr) { - - try { - return arr[Math.floor(Math.random() * arr.length)]; - } catch(e) { - Console.error('Common.randomArrayValue', e); - } - - }; - - - /** - * Returns whether the browser is mobile or not - * @public - * @return {boolean} - */ - self.isMobile = function() { - - is_mobile = false; - - try { - is_mobile = /Android|iPhone|iPod|iPad|Windows Phone|BlackBerry|Bada|Maemo|Meego|webOS/i.test(navigator.userAgent); - } catch(e) { - Console.error('Common.isMobile', e); - } finally { - return is_mobile; - } - - }; - - - /** - * Converts a XML document to a string - * @public - * @param {object} xmlData - * @return {string} - */ - self.xmlToString = function(xmlData) { - - xml_str = null; - - try { - // For Mozilla, Firefox, Opera, etc. - if(window.XMLSerializer) { - xml_str = (new XMLSerializer()).serializeToString(xmlData); - } - - // For Internet Explorer - if(window.ActiveXObject) { - xml_str = xmlData.xml; - } - } catch(e) { - Console.error('Common.xmlToString', e); - } finally { - return xml_str; - } - - }; - - - /** - * Converts a string to a XML document - * @public - * @param {string} sXML - * @return {object} - */ - self.XMLFromString = function(sXML) { - - try { - // No data? - if(!sXML) { - return ''; - } - - // Add the XML tag - if(!sXML.match(/^<\?xml/i)) { - sXML = '' + sXML; - } - - // Parse it! - if(window.DOMParser) { - return (new DOMParser()).parseFromString(sXML, 'text/xml'); - } - - if(window.ActiveXObject) { - var oXML = new ActiveXObject('Microsoft.XMLDOM'); - oXML.loadXML(sXML); - - return oXML; - } - } catch(e) { - Console.error('Common.XMLFromString', e); - - return ''; - } - - }; - - - /** - * Watches for input value change (delays callback) - * @public - * @param {function} cb - * @return {function} - */ - self.typewatch = function(cb) { - - try { - var timer = 0; - - return function(callback, ms) { - clearTimeout(timer); - timer = setTimeout(callback, ms); - }; - } catch(e) { - Console.error('Common.typewatch', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); - -var JappixCommon = Common; diff --git a/source/app/javascripts/connection.js b/source/app/javascripts/connection.js deleted file mode 100644 index 6f1dadb..0000000 --- a/source/app/javascripts/connection.js +++ /dev/null @@ -1,1034 +0,0 @@ -/* - -Jappix - An open social platform -These are the connection JS script for Jappix - -------------------------------------------------- - -License: AGPL -Authors: Valérian Saliou, Maranda - -*/ - -// Bundle -var Connection = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Variables */ - self.current_session = false; - self.desktop_hash = null; - self.connected = false; - self.reconnect_try = 0; - self.reconnect_timer = 0; - self.resume = false; - - - /** - * Do registration on Register API - * @private - * @param {string} username - * @param {string} domain - * @param {string} pass - * @param {string} captcha - * @return {boolean} - */ - self._doRegisterAPI = function(username, domain, pass, captcha) { - - var is_success = false; - - try { - // Show the waiting image - Interface.showGeneralWait(); - - // Change the page title - Interface.title('wait'); - - // Send request - $.post('./server/register.php', {username: username, domain: domain, password: pass, captcha: captcha}, function(data) { - // Error registering - Interface.removeGeneralWait(); - Interface.title('home'); - - // In all case, update CAPTCHA - $('#home img.captcha_img').attr('src', './server/captcha.php?id=' + genID()); - $('#home input.captcha').val(''); - - // Registration okay - if($(data).find('query status').text() == '1') { - is_success = true; - self.handleRegistered(); - } else { - // Show error message - var error_message = ''; - - switch($(data).find('query message').text()) { - case 'CAPTCHA Not Matching': - error_message = Common._e("The security code you entered is invalid. Please retry with another one."); - - $('#home input.captcha').focus(); - - break; - - case 'Username Unavailable': - error_message = Common._e("The username you picked is not available. Please try another one."); - - $('#home input.nick').focus(); - - break; - - default: - error_message = Common._e("There was an error registering your account. Please retry."); - - break; - } - - if(error_message) { - Errors.show('', error_message, ''); - } - } - }); - } catch(e) { - Console.error('Connection._doRegisterAPI', e); - } finally { - return is_success; - } - - }; - - - /** - * Do registration throug in-band stream - * @private - * @param {string} username - * @param {string} domain - * @param {string} pass - * @return {boolean} - */ - self._doRegisterInBand = function(username, domain, pass) { - - var is_success = true; - - try { - if(Common.hasWebSocket()) { - // WebSocket supported & configured - con = new JSJaCWebSocketConnection({ - httpbase: HOST_WEBSOCKET - }); - } else { - var httpbase = (HOST_BOSH_MAIN || HOST_BOSH); - - // Check BOSH origin - BOSH_SAME_ORIGIN = Origin.isSame(httpbase); - - // We create the new http-binding connection - con = new JSJaCHttpBindingConnection({ - httpbase: httpbase - }); - } - - // We setup the connection ! - con.registerHandler('onconnect', self.handleRegistered); - con.registerHandler('onerror', Errors.handle); - - con.connect({ - 'domain': $.trim(domain), - 'username': $.trim(username), - 'resource': JAPPIX_RESOURCE + ' Register (' + (new Date()).getTime() + ')', - 'pass': pass, - 'register': true, - 'secure': true, - 'xmllang': XML_LANG - }); - - // Show the waiting image - Interface.showGeneralWait(); - - // Change the page title - Interface.title('wait'); - } catch(e) { - Console.error('Connection._doRegisterInBand', e); - is_success = false; - } finally { - return is_success; - } - - }; - - - /** - * Attaches reconnect events - * @private - * @param {string} mode - * @return {undefined} - */ - self._eventsReconnect = function(mode) { - - try { - // Click events - if(mode == 'normal') { - $('#reconnect a.finish.cancel').click(function() { - return self.cancelReconnect(); - }); - } - - $('#reconnect a.finish.reconnect').click(function() { - return self.acceptReconnect(mode); - }); - } catch(e) { - Console.error('Connection._eventsReconnect', e); - } - - }; - - - /** - * Schedules the next auto reconnect - * @private - * @param {string} mode - * @return {undefined} - */ - self._scheduleReconnect = function(mode) { - - try { - // Try to reconnect automatically after a while - if(self.reconnect_try < 5) { - self.reconnect_timer = 5 + (5 * self.reconnect_try); - } else { - self.reconnect_timer = 120; - } - - // Change the try number - self.reconnect_try++; - - // Fire the event! - $('#reconnect a.finish.reconnect').everyTime('1s', function() { - // We can reconnect! - if(self.reconnect_timer === 0) { - return self.acceptReconnect(mode); - } - - // Button text - if(self.reconnect_timer <= 10) { - $(this).text(Common._e("Reconnect") + ' (' + self.reconnect_timer + ')'); - } - - // Remove 1 second - self.reconnect_timer--; - }); - } catch(e) { - Console.error('Connection._scheduleReconnect', e); - } - - }; - - - /** - * Does the user login - * @public - * @param {string} lNick - * @param {string} lServer - * @param {string} lPass - * @param {string} lResource - * @param {number} lPriority - * @param {boolean} lRemember - * @param {object} loginOpts - * @return {boolean} - */ - self.doLogin = function(lNick, lServer, lPass, lResource, lPriority, lRemember, loginOpts) { - - try { - // get optionnal conn handlers - extend_obj = loginOpts || {}; - - // We remove the not completed class to avoid problems - $('#home .loginer input').removeClass('please-complete'); - - // We add the login wait div - Interface.showGeneralWait(); - - if(Common.hasWebSocket()) { - // WebSocket supported & configured - con = new JSJaCWebSocketConnection({ - httpbase: HOST_WEBSOCKET - }); - } else { - var httpbase = (HOST_BOSH_MAIN || HOST_BOSH); - - // Check BOSH origin - BOSH_SAME_ORIGIN = Origin.isSame(httpbase); - - // We create the new http-binding connection - con = new JSJaCHttpBindingConnection({ - httpbase: httpbase - }); - } - - // And we handle everything that happen - self.setupCon(con, extend_obj); - - // Generate a resource - var random_resource = DataStore.getDB(self.desktop_hash, 'session', 'resource'); - - if(!random_resource) { - random_resource = lResource + ' (' + (new Date()).getTime() + ')'; - } - - var con_args = { - 'domain': lServer.trim(), - 'username': lNick.trim(), - 'resource': random_resource, - 'pass': lPass, - 'secure': true, - 'xmllang': XML_LANG - }; - - self.desktop_hash = 'jd.' + hex_md5(con_args.username + '@' + con_args.domain); - - // Store the resource (for reconnection) - DataStore.setDB(self.desktop_hash, 'session', 'resource', random_resource); - - // Store session XML in temporary database - self.storeSession(lNick, lServer, lPass, lResource, lPriority, lRemember); - - // We store the infos of the user into the data-base - DataStore.setDB(self.desktop_hash, 'priority', 1, lPriority); - - // We connect ! - con.connect(con_args); - - // Change the page title - Interface.title('wait'); - - Console.info('Jappix is connecting...'); - } catch(e) { - Console.error('Connection.doLogin', e); - - // Reset Jappix - Talk.destroy(); - - // Open an unknown error - Board.openThisError(2); - } finally { - return false; - } - - }; - - - /** - * Handles the user registration - * @public - * @return {undefined} - */ - self.handleRegistered = function() { - - try { - Console.info('A new account has been registered.'); - - // We remove the waiting image - Interface.removeGeneralWait(); - - // Reset the title - Interface.title('home'); - - // We show the success information - $('#home .registerer .success').fadeIn('fast'); - - // We quit the session - if(Common.isConnected()) { - self.logout(); - } - } catch(e) { - Console.error('Connection.handleRegistered', e); - } - - }; - - - /** - * Does the user registration - * @public - * @param {string} username - * @param {string} domain - * @param {string} pass - * @param {string} captcha - * @return {boolean} - */ - self.doRegister = function(username, domain, pass, captcha) { - - try { - Console.info('Trying to register an account...'); - - // We change the registered information text - $('#home .homediv.registerer').append( - '
' + - Common._e("You have been registered, here is your XMPP address:") + - ' ' + username.htmlEnc() + '@' + domain.htmlEnc() + ' - ' + - '' + Common._e("Login") + '' + - '
' - ); - - // Login link - $('#home .homediv.registerer .success a').click(function() { - return self.doLogin(username, domain, pass, '', '10', false); - }); - - if((REGISTER_API == 'on') && (domain == HOST_MAIN) && captcha) { - self._doRegisterAPI(username, domain, pass, captcha); - } else { - self._doRegisterInBand(username, domain, pass); - } - } catch(e) { - Console.error('Connection.doRegister', e); - } finally { - return false; - } - - }; - - - /** - * Does the user anonymous login - * @public - * @return {boolean} - */ - self.doAnonymous = function() { - - try { - Console.info('Trying to login anonymously...'); - - var path_sel = $('#home .anonymouser'); - var room = path_sel.find('.room').val(); - var nick = path_sel.find('.nick').val(); - - // Form correctly completed? - if(room && nick) { - // We remove the not completed class to avoid problems - $('#home .anonymouser input').removeClass('please-complete'); - - // Redirect the user to the anonymous room - window.location.href = JAPPIX_LOCATION + '?r=' + room + '&n=' + nick; - } else { - path_sel.find('input[type="text"]').each(function() { - var this_sel = $(this); - - if(!this_sel.val()) { - $(document).oneTime(10, function() { - this_sel.addClass('please-complete').focus(); - }); - } else { - this_sel.removeClass('please-complete'); - } - }); - } - } catch(e) { - Console.error('Connection.doAnonymous', e); - } finally { - return false; - } - - }; - - - /** - * Handles the user connected event - * @public - * @return {undefined} - */ - self.handleConnected = function() { - - try { - Console.info('Jappix is now connected.'); - - // Connection markers - self.connected = true; - self.reconnect_try = 0; - self.reconnect_timer = 0; - - // We hide the home page - $('#home').hide(); - - // Any suggest to do before triggering connected event? - Groupchat.suggestCheck(); - - // Remove the waiting item - Interface.removeGeneralWait(); - - // Init call - Call.init(); - } catch(e) { - Console.error('Connection.handleConnected', e); - } - - }; - - - /** - * Triggers the connected state - * @public - * @return {undefined} - */ - self.triggerConnected = function() { - - try { - // Not resumed? - if(!self.resume) { - // Remember the session? - if(DataStore.getDB(self.desktop_hash, 'remember', 'session')) { - DataStore.setPersistent('global', 'session', 1, self.current_session); - } - - // We show the chatting app. - Talk.create(); - - // We reset the homepage - Home.change('default'); - - // We get all the other things - self.getEverything(); - - // Set last activity stamp - DateUtils.last_activity = DateUtils.getTimeStamp(); - } - - // Resumed - else { - // Send our presence - Presence.sendActions(); - - // Change the title - Interface.updateTitle(); - } - } catch(e) { - Console.error('Connection.triggerConnected', e); - } - - }; - - - /** - * Handles the user disconnected event - * @public - * @return {undefined} - */ - self.handleDisconnected = function() { - - try { - Console.info('Jappix is now disconnected.'); - - // Abort ongoing call (if any) - Call.stop(true); - - // Normal disconnection - if(!self.current_session && !self.connected) { - Talk.destroy(); - self.desktop_hash = null; - } - } catch(e) { - Console.error('Connection.handleDisconnected', e); - } - - }; - - - /** - * Setups the normal connection - * @public - * @param {object} con - * @param {object} extend_obj - * @return {undefined} - */ - self.setupCon = function(con, extend_obj) { - - try { - var connection_handlers = { - 'message': Message.handle, - 'presence': Presence.handle, - 'iq': IQ.handle, - 'onconnect': self.handleConnected, - 'onerror': Errors.handle, - 'ondisconnect': self.handleDisconnected - }; - - for(var cur_handler in connection_handlers) { - con.registerHandler( - cur_handler, - connection_handlers[cur_handler] - ); - } - - // Extended handlers - extend_obj = extend_obj || {}; - - jQuery.each(extend_obj, function(keywd,funct) { - con.registerHandler(keywd, funct); - }); - } catch(e) { - Console.error('Connection.setupCon', e); - } - - }; - - - /** - * Logouts from the server - * @public - * @return {boolean} - */ - self.logout = function() { - - logout_done = false; - - try { - if(Common.isConnected()) { - Console.info('Jappix is disconnecting...'); - - // Disconnect from the XMPP server - con.disconnect(); - - logout_done = true; - } - } catch(e) { - Console.error('Connection.logout', e); - } finally { - return logout_done; - } - - }; - - - /** - * Terminates the user session - * @public - * @return {undefined} - */ - self.terminate = function() { - - try { - if(Common.isConnected()) { - // Clear temporary session storage - self.resetConMarkers(); - - // Show the waiting item (useful if BOSH is sloooow) - Interface.showGeneralWait(); - - // Change the page title - Interface.title('wait'); - - // Disconnect from the XMPP server - self.logout(); - } - } catch(e) { - Console.error('Connection.terminate', e); - } - - }; - - - /** - * Quits a session - * @public - * @param {type} name - * @return {undefined} - */ - self.quit = function() { - - try { - if(!Common.isConnected()) { - return; - } - - // We show the waiting image - Interface.showGeneralWait(); - - // Change the page title - Interface.title('wait'); - - // We disconnect from the XMPP server - self.logout(); - } catch(e) { - Console.error('Connection.quit', e); - } - - }; - - - /** - * Creates the reconnect pane - * @public - * @param {string} mode - * @return {undefined} - */ - self.createReconnect = function(mode) { - - try { - Console.error('This is not a normal disconnection, show the reconnect pane...'); - - // Reconnect pane not yet displayed? - if(!Common.exists('#reconnect')) { - // Blur the focused input/textarea/select - $('input, select, textarea').blur(); - - // Create the HTML code - var html = '
' + - '
' + - Common._e("Due to a network issue, you were disconnected. What do you want to do now?"); - - // Can we cancel reconnection? - if(mode == 'normal') { - html += '' + Common._e("Cancel") + ''; - } - - html += '' + Common._e("Reconnect") + '' + - '
'; - - // Append the code - $('body').append(html); - - // Attach events - self._eventsReconnect(mode); - - // Schedule next reconnect - self._scheduleReconnect(mode); - - // Page title - Interface.updateTitle(); - } - } catch(e) { - Console.error('Connection.createReconnect', e); - } - - }; - - - /** - * Reconnects the user if he was disconnected (network issue) - * @public - * @param {string} mode - * @return {boolean} - */ - self.acceptReconnect = function(mode) { - - try { - Console.info('Trying to reconnect the user...'); - - // Resume marker - self.resume = true; - - // Show waiting item - Interface.showGeneralWait(); - - // Reset some various stuffs - var groupchats = '#page-engine .page-engine-chan[data-type="groupchat"]'; - var groupchats_sel = $(groupchats); - - groupchats_sel.find('.list .role').hide(); - groupchats_sel.find('.one-group, ' + groupchats + ' .list .user').remove(); - groupchats_sel.attr('data-initial', 'false'); - - // Stop the timer - $('#reconnect a.finish.reconnect').stopTime(); - - // Remove the reconnect pane - $('#reconnect').remove(); - - // Try to login again - if(mode == 'normal') { - self.loginFromSession(Common.XMLFromString(self.current_session)); - } else if(mode == 'anonymous') { - Anonymous.login(HOST_ANONYMOUS); - } - } catch(e) { - Console.error('Connection.acceptReconnect', e); - } finally { - return false; - } - - }; - - - /** - * Cancel the reconnection of user account (network issue) - * @public - * @return {boolean} - */ - self.cancelReconnect = function() { - - try { - Console.info('User has canceled automatic reconnection...'); - - // Stop the timer - $('#reconnect a.finish.reconnect').stopTime(); - - // Remove the reconnect pane - $('#reconnect').remove(); - - // Destroy the talk page - Talk.destroy(); - - // Renitialize the previous session parameters - self.resetConMarkers(); - } catch(e) { - Console.error('Connection.cancelReconnect', e); - } finally { - return false; - } - - }; - - - /** - * Clears session reminder database - * @public - * @return {undefined} - */ - self.clearLastSession = function() { - - try { - // Clear temporary storage - self.resetConMarkers(); - - // Clear persistent storage - if($(Common.XMLFromString(DataStore.getPersistent('global', 'session', 1))).find('stored').text() == 'true') { - DataStore.removePersistent('global', 'session', 1); - } - } catch(e) { - Console.error('Connection.clearLastSession', e); - } - - }; - - - /** - * Resets the connection markers - * @public - * @return {undefined} - */ - self.resetConMarkers = function() { - - try { - self.current_session = false; - self.connected = false; - self.resume = false; - self.reconnect_try = 0; - self.reconnect_timer = 0; - } catch(e) { - Console.error('Connection.resetConMarkers', e); - } - - }; - - - /** - * Logins from a saved session - * @public - * @param {string} data - * @return {undefined} - */ - self.loginFromSession = function(data) { - - try { - // Select the data - var session = $(data); - - // Fire the login event - self.doLogin( - session.find('username').text(), - session.find('domain').text(), - session.find('password').text(), - session.find('resource').text(), - session.find('priority').text(), - false - ); - } catch(e) { - Console.error('Connection.loginFromSession', e); - } - - }; - - - /** - * Quits a session normally - * @public - * @return {boolean} - */ - self.normalQuit = function() { - - try { - // Reset our database - self.clearLastSession(); - - // We quit the current session - self.quit(); - - // We show an info - Board.openThisInfo(3); - } catch(e) { - Console.error('Connection.normalQuit', e); - } finally { - return false; - } - - }; - - - /** - * Gets all the users stuff - * @public - * @return {undefined} - */ - self.getEverything = function() { - - try { - Features.get(); - Roster.get(); - Privacy.list(); - Storage.get(NS_ROSTERNOTES); - } catch(e) { - Console.error('Connection.getEverything', e); - } - - }; - - - /** - * Generates session data to store - * @public - * @param {string} lNick - * @param {string} lServer - * @param {string} lPass - * @param {string} lResource - * @param {number} lPriority - * @param {boolean} lRemember - * @return {undefined} - */ - self.storeSession = function(lNick, lServer, lPass, lResource, lPriority, lRemember) { - - try { - // Generate a session XML to be stored - session_xml = '' + - 'true' + - '' + lServer.htmlEnc() + '' + - '' + lNick.htmlEnc() + '' + - '' + lResource.htmlEnc() + '' + - '' + lPass.htmlEnc() + '' + - '' + lPriority.htmlEnc() + '' + - ''; - - // Save the session parameters (for reconnect if network issue) - self.current_session = session_xml; - - // Remember me? - if(lRemember) { - DataStore.setDB(self.desktop_hash, 'remember', 'session', 1); - } - - return session_xml; - } catch(e) { - Console.error('Connection.storeSession', e); - } - - }; - - - /** - * Plugin launcher - * @public - * @return {undefined} - */ - self.launch = function() { - - try { - $(document).ready(function() { - // Logouts when Jappix is closed - $(window).bind('beforeunload', Connection.terminate); - - // Nothing to do when anonymous! - if(Utils.isAnonymous()) { - return; - } - - // Connection params submitted in URL? - if(XMPPLinks.links_var.u && XMPPLinks.links_var.q) { - // Generate login data - var login_xid = Common.bareXID(Common.generateXID(XMPPLinks.links_var.u, 'chat')); - var login_nick = Common.getXIDNick(login_xid); - var login_server = Common.getXIDHost(login_xid); - var login_pwd = XMPPLinks.links_var.q; - var login_resource = JAPPIX_RESOURCE + ' (' + (new Date()).getTime() + ')'; - var login_priority = '10'; - var login_remember = 1; - - // Must store session? - if(XMPPLinks.links_var.h && (XMPPLinks.links_var.h === '1')) { - // Store session - var session_xml = self.storeSession( - login_nick, - login_server, - login_pwd, - login_resource, - login_priority, - true - ); - - DataStore.setPersistent('global', 'session', 1, session_xml); - - // Redirect to a clean URL - document.location.href = './'; - } else { - // Hide the homepage - $('#home').hide(); - - // Show the waiting icon - Interface.showGeneralWait(); - - // Proceed login - self.doLogin(login_nick, login_server, login_pwd, login_resource, login_priority, login_remember); - } - - return; - } - - // Try to resume a stored session, if not anonymous - var session = Common.XMLFromString( - DataStore.getPersistent('global', 'session', 1) - ); - - if($(session).find('stored').text() == 'true') { - // Hide the homepage - $('#home').hide(); - - // Show the waiting icon - Interface.showGeneralWait(); - - // Login! - self.loginFromSession(session); - - Console.info('Saved session found, resuming it...'); - } else if((parent.location.hash != '#OK') && XMPPLinks.links_var.x) { - Home.change('loginer'); - - Console.info('A XMPP link is set, switch to login page.'); - } - }); - } catch(e) { - Console.error('Connection.launch', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); - -Connection.launch(); \ No newline at end of file diff --git a/source/app/javascripts/console.js b/source/app/javascripts/console.js deleted file mode 100644 index d645e54..0000000 --- a/source/app/javascripts/console.js +++ /dev/null @@ -1,66 +0,0 @@ -// License: MIT - -/* - * Console.js - * - * An interface to native console methods - * Avoids issues when browser does not have native support for console - * - * @license OS - * @author Valérian Saliou - * @url https://github.com/valeriansaliou/console.js - */ - -var Console = (function () { - - var self = this; - - - /* Variables */ - self._available = typeof(window.console) != 'undefined'; - self._has = self._available && JappixSystem.isDeveloper(); - self._console = self._available ? console : {}; - - - /* Adapters */ - self._adapter = function (level) { - if (!self._has) { - return function() {}; - } - - var adapter = null; - try { - switch (level) { - case 0: - adapter = console.warn; break; - case 1: - adapter = console.error; break; - case 2: - adapter = console.info; break; - case 3: - adapter = console.log; break; - case 4: - adapter = console.debug; break; - } - } catch (e) { - adapter = function() {}; - } - - return adapter.bind(self._console); - }; - - - /* Methods */ - self.warn = self._adapter(0); - self.error = self._adapter(1); - self.info = self._adapter(2); - self.log = self._adapter(3); - self.debug = self._adapter(4); - - - /* Return class scope */ - return self; - -})(); - -var JappixConsole = Console; \ No newline at end of file diff --git a/source/app/javascripts/constants.js b/source/app/javascripts/constants.js deleted file mode 100644 index 69b71d1..0000000 --- a/source/app/javascripts/constants.js +++ /dev/null @@ -1,237 +0,0 @@ -/* - -Jappix - An open social platform -These are the constants JS scripts for Jappix - -------------------------------------------------- - -License: dual-licensed under AGPL and MPLv2 -Authors: Stefan Strigler, Valérian Saliou, Kloadut, Maranda - -*/ - -// XMPP XMLNS attributes -var NS_PROTOCOL = 'http://jabber.org/protocol/'; -var NS_FEATURES = 'http://jabber.org/features/'; -var NS_CLIENT = 'jabber:client'; -var NS_IQ = 'jabber:iq:'; -var NS_X = 'jabber:x:'; -var NS_IETF = 'urn:ietf:params:xml:ns:'; -var NS_IETF_XMPP = NS_IETF + 'xmpp-'; -var NS_XMPP = 'urn:xmpp:'; - -var NS_STORAGE = 'storage:'; -var NS_BOOKMARKS = NS_STORAGE + 'bookmarks'; -var NS_ROSTERNOTES = NS_STORAGE + 'rosternotes'; - -var NS_JAPPIX = 'jappix:'; -var NS_INBOX = NS_JAPPIX + 'inbox'; -var NS_OPTIONS = NS_JAPPIX + 'options'; - -var NS_DISCO_ITEMS = NS_PROTOCOL + 'disco#items'; -var NS_DISCO_INFO = NS_PROTOCOL + 'disco#info'; -var NS_VCARD = 'vcard-temp'; -var NS_VCARD_P = NS_VCARD + ':x:update'; -var NS_IETF_VCARD4 = NS_IETF + 'vcard-4.0'; -var NS_XMPP_VCARD4 = NS_XMPP + 'vcard4'; -var NS_URN_ADATA = NS_XMPP + 'avatar:data'; -var NS_URN_AMETA = NS_XMPP + 'avatar:metadata'; -var NS_AUTH = NS_IQ + 'auth'; -var NS_AUTH_ERROR = NS_IQ + 'auth:error'; -var NS_REGISTER = NS_IQ + 'register'; -var NS_SEARCH = NS_IQ + 'search'; -var NS_ROSTER = NS_IQ + 'roster'; -var NS_PRIVACY = NS_IQ + 'privacy'; -var NS_PRIVATE = NS_IQ + 'private'; -var NS_VERSION = NS_IQ + 'version'; -var NS_TIME = NS_IQ + 'time'; -var NS_LAST = NS_IQ + 'last'; -var NS_IQDATA = NS_IQ + 'data'; -var NS_XDATA = NS_X + 'data'; -var NS_IQOOB = NS_IQ + 'oob'; -var NS_XOOB = NS_X + 'oob'; -var NS_DELAY = NS_X + 'delay'; -var NS_EXPIRE = NS_X + 'expire'; -var NS_EVENT = NS_X + 'event'; -var NS_XCONFERENCE = NS_X + 'conference'; -var NS_STATS = NS_PROTOCOL + 'stats'; -var NS_MUC = NS_PROTOCOL + 'muc'; -var NS_MUC_USER = NS_MUC + '#user'; -var NS_MUC_ADMIN = NS_MUC + '#admin'; -var NS_MUC_OWNER = NS_MUC + '#owner'; -var NS_MUC_CONFIG = NS_MUC + '#roomconfig'; -var NS_PUBSUB = NS_PROTOCOL + 'pubsub'; -var NS_PUBSUB_EVENT = NS_PUBSUB + '#event'; -var NS_PUBSUB_OWNER = NS_PUBSUB + '#owner'; -var NS_PUBSUB_NMI = NS_PUBSUB + '#node-meta-info'; -var NS_PUBSUB_NC = NS_PUBSUB + '#node_config'; -var NS_PUBSUB_CN = NS_PUBSUB + '#config-node'; -var NS_PUBSUB_RI = NS_PUBSUB + '#retrieve-items'; -var NS_COMMANDS = NS_PROTOCOL + 'commands'; -var NS_BOSH = NS_PROTOCOL + 'httpbind'; -var NS_STREAM = 'http://etherx.jabber.org/streams'; -var NS_URN_TIME = NS_XMPP + 'time'; -var NS_URN_PING = NS_XMPP + 'ping'; -var NS_URN_MBLOG = NS_XMPP + 'microblog:0'; -var NS_URN_INBOX = NS_XMPP + 'inbox'; -var NS_URN_FORWARD = NS_XMPP + 'forward:0'; -var NS_URN_MAM = NS_XMPP + 'mam:tmp'; -var NS_URN_DELAY = NS_XMPP + 'delay'; -var NS_URN_RECEIPTS = NS_XMPP + 'receipts'; -var NS_URN_CARBONS = NS_XMPP + 'carbons:2'; -var NS_URN_CORRECT = NS_XMPP + 'message-correct:0'; -var NS_URN_IDLE = NS_XMPP + 'idle:1'; -var NS_URN_REACH = NS_XMPP + 'reach:0'; -var NS_URN_MARKERS = NS_XMPP + 'chat-markers:0'; -var NS_URN_ATTENTION = NS_XMPP + 'attention:0'; -var NS_URN_HINTS = NS_XMPP + 'hints'; -var NS_RSM = NS_PROTOCOL + 'rsm'; -var NS_IPV6 = 'ipv6'; -var NS_XHTML = 'http://www.w3.org/1999/xhtml'; -var NS_XHTML_IM = NS_PROTOCOL + 'xhtml-im'; -var NS_CHATSTATES = NS_PROTOCOL + 'chatstates'; -var NS_HTTP_AUTH = NS_PROTOCOL + 'http-auth'; -var NS_ROSTERX = NS_PROTOCOL + 'rosterx'; -var NS_MOOD = NS_PROTOCOL + 'mood'; -var NS_ACTIVITY = NS_PROTOCOL + 'activity'; -var NS_TUNE = NS_PROTOCOL + 'tune'; -var NS_GEOLOC = NS_PROTOCOL + 'geoloc'; -var NS_NICK = NS_PROTOCOL + 'nick'; -var NS_NOTIFY = '+notify'; -var NS_CAPS = NS_PROTOCOL + 'caps'; -var NS_ATOM = 'http://www.w3.org/2005/Atom'; - -var NS_STANZAS = NS_IETF_XMPP + 'stanzas'; -var NS_STREAMS = NS_IETF_XMPP + 'streams'; - -var NS_TLS = NS_IETF_XMPP + 'tls'; -var NS_SASL = NS_IETF_XMPP + 'sasl'; -var NS_SESSION = NS_IETF_XMPP + 'session'; -var NS_BIND = NS_IETF_XMPP + 'bind'; - -var NS_FEATURE_IQAUTH = NS_FEATURES + 'iq-auth'; -var NS_FEATURE_IQREGISTER = NS_FEATURES + 'iq-register'; -var NS_FEATURE_COMPRESS = NS_FEATURES + 'compress'; - -var NS_COMPRESS = NS_PROTOCOL + 'compress'; - -var NS_METRONOME_MAM_PURGE = 'http://metronome.im/protocol/mam-purge'; - -// Available locales -var LOCALES_AVAILABLE_ID = []; -var LOCALES_AVAILABLE_NAMES = []; - -// XML lang -var XML_LANG = null; - -// Jappix parameters -var JAPPIX_STATIC = null; -var JAPPIX_VERSION = null; -var JAPPIX_MAX_FILE_SIZE = null; -var JAPPIX_MAX_UPLOAD = null; - -// Jappix main configuration -var SERVICE_NAME = null; -var SERVICE_DESC = null; -var OWNER_NAME = null; -var OWNER_WEBSITE = null; -var LEGAL = null; -var JAPPIX_RESOURCE = null; -var LOCK_HOST = null; -var ANONYMOUS = null; -var HTTP_AUTH = null; -var REGISTRATION = null; -var BOSH_PROXY = null; -var MANAGER_LINK = null; -var GROUPCHATS_JOIN = null; -var GROUPCHATS_SUGGEST = null; -var ENCRYPTION = null; -var HTTPS_STORAGE = null; -var HTTPS_FORCE = null; -var COMPRESSION = null; -var ADS_ENABLE = null; -var GADS_CLIENT = null; -var GADS_SLOT = null; -var MULTI_FILES = null; -var DEVELOPER = null; -var REGISTER_API = null; - -// Jappix hosts configuration -var HOST_MAIN = null; -var HOST_MUC = null; -var HOST_PUBSUB = null; -var HOST_VJUD = null; -var HOST_ANONYMOUS = null; -var HOST_STUN = null; -var HOST_TURN = null; -var HOST_TURN_USERNAME = null; -var HOST_TURN_PASSWORD = null; -var HOST_BOSH = null; -var HOST_BOSH_MAIN = null; -var HOST_BOSH_MINI = null; -var HOST_WEBSOCKET = null; -var HOST_STATIC = null; -var HOST_UPLOAD = null; - -// Anonymous mode -var ANONYMOUS_ROOM = null; -var ANONYMOUS_NICK = null; - -// Node parameters -var JAPPIX_LOCATION = JappixSystem.location(); -var JAPPIX_MINI_CSS = null; -var BOSH_SAME_ORIGIN = false; - -// XMPP error stanzas -function STANZA_ERROR(code, type, cond) { - if(window == this) { - return new STANZA_ERROR(code, type, cond); - } - - this.code = code; - this.type = type; - this.cond = cond; -} - -var ERR_BAD_REQUEST = - STANZA_ERROR('400', 'modify', 'bad-request'); -var ERR_CONFLICT = - STANZA_ERROR('409', 'cancel', 'conflict'); -var ERR_FEATURE_NOT_IMPLEMENTED = - STANZA_ERROR('501', 'cancel', 'feature-not-implemented'); -var ERR_FORBIDDEN = - STANZA_ERROR('403', 'auth', 'forbidden'); -var ERR_GONE = - STANZA_ERROR('302', 'modify', 'gone'); -var ERR_INTERNAL_SERVER_ERROR = - STANZA_ERROR('500', 'wait', 'internal-server-error'); -var ERR_ITEM_NOT_FOUND = - STANZA_ERROR('404', 'cancel', 'item-not-found'); -var ERR_JID_MALFORMED = - STANZA_ERROR('400', 'modify', 'jid-malformed'); -var ERR_NOT_ACCEPTABLE = - STANZA_ERROR('406', 'modify', 'not-acceptable'); -var ERR_NOT_ALLOWED = - STANZA_ERROR('405', 'cancel', 'not-allowed'); -var ERR_NOT_AUTHORIZED = - STANZA_ERROR('401', 'auth', 'not-authorized'); -var ERR_PAYMENT_REQUIRED = - STANZA_ERROR('402', 'auth', 'payment-required'); -var ERR_RECIPIENT_UNAVAILABLE = - STANZA_ERROR('404', 'wait', 'recipient-unavailable'); -var ERR_REDIRECT = - STANZA_ERROR('302', 'modify', 'redirect'); -var ERR_REGISTRATION_REQUIRED = - STANZA_ERROR('407', 'auth', 'registration-required'); -var ERR_REMOTE_SERVER_NOT_FOUND = - STANZA_ERROR('404', 'cancel', 'remote-server-not-found'); -var ERR_REMOTE_SERVER_TIMEOUT = - STANZA_ERROR('504', 'wait', 'remote-server-timeout'); -var ERR_RESOURCE_CONSTRAINT = - STANZA_ERROR('500', 'wait', 'resource-constraint'); -var ERR_SERVICE_UNAVAILABLE = - STANZA_ERROR('503', 'cancel', 'service-unavailable'); -var ERR_SUBSCRIPTION_REQUIRED = - STANZA_ERROR('407', 'auth', 'subscription-required'); -var ERR_UNEXPECTED_REQUEST = - STANZA_ERROR('400', 'wait', 'unexpected-request'); diff --git a/source/app/javascripts/correction.js b/source/app/javascripts/correction.js deleted file mode 100644 index deea70c..0000000 --- a/source/app/javascripts/correction.js +++ /dev/null @@ -1,509 +0,0 @@ -/* - -Jappix - An open social platform -Implementation of XEP-0308: Last Message Correction - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Correction = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * @private - * @param {string} xid - * @return {boolean} - */ - self._hasSupport = function(xid) { - - var support = false; - - try { - if($('#' + hex_md5(xid) + '[data-correction="true"]').size()) { - support = true; - } - } catch(e) { - Console.error('Correction._hasSupport', e); - } finally { - return support; - } - - }; - - - /** - * @private - * @param {string} xid - * @return {string} - */ - self._getLastID = function(xid) { - - var last_id = null; - - try { - if(self._hasSupport(xid) === true) { - // Check last message from ourselves - last_id = $('#' + hex_md5(xid) + ' .content .one-line.user-message[data-mode="me"]:last').attr('data-id') || null; - } - } catch(e) { - Console.error('Correction._getLastID', e); - } finally { - return last_id; - } - - }; - - - /** - * @private - * @param {string} xid - * @return {string} - */ - self._getCurrentID = function(xid) { - - var current_id = null; - - try { - if(self._hasSupport(xid) === true) { - // Check the ID of the message being edited (if any) - current_id = $('#' + hex_md5(xid) + ' .message-area').attr('data-correction-current') || null; - } - } catch(e) { - Console.error('Correction._getCurrentID', e); - } finally { - return current_id; - } - - }; - - - /** - * @private - * @param {string} xid - * @return {object} - */ - self._getLastMessage = function(xid) { - - var last_message_val = null; - var last_message_sel = null; - - try { - if(self._hasSupport(xid) === true) { - // Check last message from ourselves - last_message_sel = $('#' + hex_md5(xid) + ' .content .one-line.user-message[data-mode="me"]:last'); - last_message_val = last_message_sel.find('.message-content').text() || null; - - if(last_message_val === null) { - last_message_sel = null; - } - } - } catch(e) { - Console.error('Correction._getLastMessage', e); - } finally { - return { - 'value': last_message_val, - 'selector': last_message_sel - }; - } - - }; - - - /** - * @private - * @param {string} xid - * @param {object} message_sel - * @return {undefined} - */ - self._bindInterface = function(xid, message_sel) { - - try { - // Add message area elements - var text_sel = $('#' + hex_md5(xid) + ' .text'); - - text_sel.addClass('correction-active'); - text_sel.prepend( - '
' + - '' + Common._e("Editing") + '' + - '' + Common._e("Cancel") + '' + - '
' - ); - - // Add message correction marker - message_sel.addClass('correction-active'); - message_sel.find('.correction-label').remove(); - message_sel.find('.correction-edit').hide(); - - message_sel.append( - '' + - Common._e("Being edited") + - '' - ); - - // Bind click events - text_sel.find('.correction-cancel').click(function() { - self.leave(xid); - return false; - }); - } catch(e) { - Console.error('Correction._bindInterface', e); - } - - }; - - - /** - * @private - * @param {string} xid - * @param {object} message_sel - * @return {undefined} - */ - self._unbindInterface = function(xid, message_sel) { - - try { - // Remove message area elements - var text_sel = $('#' + hex_md5(xid) + ' .text'); - text_sel.removeClass('correction-active'); - text_sel.find('.correction-toolbox, .correction-label').remove(); - - if(message_sel.size()) { - message_sel.find('.correction-edit').css('display', ''); - - // Remove message correction marker - message_sel.removeClass('correction-active'); - message_sel.find('.correction-label').remove(); - } - } catch(e) { - Console.error('Correction._unbindInterface', e); - } - - }; - - - /** - * @private - * @param {string} xid - * @param {string} full_xid - * @param {string} type - * @param {string} message_id - * @param {string} message_body - * @return {string} - */ - self._sendStanza = function(xid, full_xid, type, message_id, message_body) { - - var args = { - 'id': null, - 'xhtml': false, - 'message': null - }; - - try { - var hash = hex_md5(xid); - var id = genID(); - args.id = id; - - // Initialize message stanza - var message = new JSJaCMessage(); - args.message = message; - - message.setType(type); - message.setTo(full_xid); - message.setID(id); - - // Generates the correct message depending of the choosen style - var generate_message = Message.generate(message, message_body, hash); - args.xhtml = (generate_message === 'XHTML'); - - // Receipt request - var receipt_request = Receipts.request(hash); - - if(receipt_request) { - message.appendNode('request', {'xmlns': NS_URN_RECEIPTS}); - } - - // Chatstate - message.appendNode('active', {'xmlns': NS_CHATSTATES}); - - if(message_id !== null) { - message.appendNode('replace', { - 'xmlns': NS_URN_CORRECT, - 'id': message_id - }); - } - - con.send(message, Errors.handleReply); - } catch(e) { - Console.error('Correction._sendStanza', e); - } finally { - return args; - } - - }; - - - /** - * Detects correction mode request (in input) - * @public - * @param {string} xid - * @param {object} input_sel - * @return {undefined} - */ - self.detect = function(xid, input_sel) { - - try { - // Other keys - if(input_sel.val().match(/^\/correct/) && self.isIn(xid) === false) { - // Enter correction mode? - self.enter(xid); - } - } catch(e) { - Console.error('Correction.detect', e); - } - - }; - - - /** - * Enter correction mode (for last message) - * @public - * @param {string} xid - * @return {undefined} - */ - self.enter = function(xid) { - - try { - Console.debug('Correction.enter', 'Requested to enter the correction mode with: ' + xid); - - if(self._hasSupport(xid) === true && self.isIn(xid) === false) { - var last_message = self._getLastMessage(xid); - - if(last_message.value && last_message.selector) { - Console.info('Correction.enter', 'Valid last message found for correction mode with: ' + xid); - - var message_area_sel = $('#' + hex_md5(xid) + ' .message-area'); - message_area_sel.val(last_message.value); - - self._bindInterface( - xid, - last_message.selector - ); - - // Focus hack (to get cursor at the end of textarea) - message_area_sel.oneTime(10, function() { - message_area_sel[0].select(); - message_area_sel[0].selectionStart = message_area_sel[0].selectionEnd; - }); - } - } - } catch(e) { - Console.error('Correction.enter', e); - } - - }; - - - /** - * Leave correction mode - * @public - * @param {string} xid - * @return {undefined} - */ - self.leave = function(xid) { - - try { - if(self.isIn(xid) === true) { - var base_sel = $('#' + hex_md5(xid)); - var active_message_sel = base_sel.find('.content .one-line.user-message.correction-active'); - - self._unbindInterface(xid, active_message_sel); - - var message_area_sel = base_sel.find('.message-area'); - message_area_sel.val(''); - message_area_sel.focus(); - } - } catch(e) { - Console.error('Correction.leave', e); - } - - }; - - - /** - * Send corrected message - * @public - * @param {string} xid - * @param {string} type - * @param {string} replacement - * @return {undefined} - */ - self.send = function(xid, type, replacement) { - - try { - if(self._hasSupport(xid) === true) { - if(self._getLastMessage(xid).value != replacement) { - var own_xid = Common.getXID(); - var hash = hex_md5(xid); - var replace_id = self._getLastID(xid); - - Console.info('Correction.send', 'Sending replacement message for: ' + xid + ' "' + replacement + '" with ID: ' + (replace_id || 'none')); - - // Send the stanza itself - var full_xid = Presence.highestPriority(xid) || xid; - var stanza_args = self._sendStanza( - xid, - full_xid, - type, - replace_id, - replacement - ); - - // Update DOM (for chat only) - if(type == 'chat') { - // Filter the xHTML message (for us!) - var replacement_formatted = replacement; - - if(stanza_args.xhtml) { - replacement_formatted = Filter.xhtml(stanza_args.message.getNode()); - } - - // Remove old message - old_message_sel = $('#' + hash + ' .content .one-line.user-message[data-mode="me"]').filter(function() { - return ($(this).attr('data-id') + '') === (replace_id + ''); - }).filter(':last'); - - var edit_count = old_message_sel.attr('data-edit-count') || 0; - edit_count = isNaN(edit_count) ? 0 : parseInt(edit_count, 10); - - if(type == 'chat') { - old_message_sel.remove(); - } - - // Display edited message - Message.display( - 'chat', - own_xid, - hash, - Name.getBuddy(own_xid).htmlEnc(), - replacement_formatted, - DateUtils.getCompleteTime(), - DateUtils.getTimeStamp(), - 'user-message', - !stanza_args.xhtml, - '', - 'me', - stanza_args.id, - undefined, - undefined, - true, - (edit_count + 1) - ); - } - } - } - } catch(e) { - Console.error('Correction.send', e); - } - - }; - - - /** - * Catches a replace message - * @public - * @param {object} message - * @param {string} hash - * @param {string} type - * @return {object} - */ - self.catch = function(message, hash, type) { - - var edit_results = { - 'has_replace': false, - 'is_edited': false, - 'count': 0, - 'next_count': 0 - }; - - try { - var replace_node = message.getChild('replace', NS_URN_CORRECT); - - if(replace_node) { - edit_results.has_replace = true; - var message_edit_id = $(replace_node).attr('id'); - - if(typeof message_edit_id != 'undefined') { - var message_edit_sel = $('#' + hash + ' .one-line.user-message').filter(function() { - var this_sel = $(this); - var is_valid_mode = true; - - if(type == 'chat') { - is_valid_mode = true ? this_sel.attr('data-mode') == 'him' : false; - } - - return is_valid_mode && ((this_sel.attr('data-id') + '') === (message_edit_id + '')); - }).filter(':last'); - - if(message_edit_sel.size()) { - edit_results.count = message_edit_sel.attr('data-edit-count') || 0; - edit_results.count = isNaN(edit_results.count) ? 0 : parseInt(edit_results.count, 10); - edit_results.next_count = edit_results.count + 1; - edit_results.is_edited = true; - - // Empty group? - var message_edit_group_sel = message_edit_sel.parents('.one-group'); - - if(message_edit_group_sel.find('.one-line').size() <= 1) { - message_edit_group_sel.remove(); - } else { - message_edit_sel.remove(); - } - } - } - } - } catch(e) { - Console.error('Correction.catch', e); - } finally { - return edit_results; - } - - }; - - - /** - * Returns whether we are in correction mode or not - * @public - * @param {string} xid - * @return {boolean} - */ - self.isIn = function(xid) { - - var is_in = false; - - try { - is_in = $('#' + hex_md5(xid) + ' .text').hasClass('correction-active'); - } catch(e) { - Console.error('Correction.isIn', e); - } finally { - return is_in; - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); diff --git a/source/app/javascripts/dataform.js b/source/app/javascripts/dataform.js deleted file mode 100644 index b409768..0000000 --- a/source/app/javascripts/dataform.js +++ /dev/null @@ -1,1200 +0,0 @@ -/* - -Jappix - An open social platform -These are the dataform JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Authors: Valérian Saliou, Maranda - -*/ - -// Bundle -var DataForm = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Gets the defined dataform elements - * @public - * @param {string} host - * @param {string} type - * @param {string} node - * @param {string} action - * @param {string} target - * @return {boolean} - */ - self.go = function(host, type, node, action, target) { - - try { - // Clean the current session - self.clean(target); - - // We tell the user that a search has been launched - $('#' + target + ' .wait').show(); - - // If we have enough data - if(host && type) { - // Generate a session ID - var sessionID = Math.round(100000.5 + (((900000.49999) - (100000.5)) * Math.random())); - var id = target + '-' + sessionID + '-' + genID(); - $('.' + target + '-results').attr('data-session', target + '-' + sessionID); - - // We request the service item - var iq = new JSJaCIQ(); - iq.setID(id); - iq.setTo(host); - iq.setType('get'); - - // MUC admin query - if(type == 'muc') { - iq.setQuery(NS_MUC_OWNER); - con.send(iq, self.handleMUC); - } - - // Browse query - else if(type == 'browse') { - var iqQuery = iq.setQuery(NS_DISCO_ITEMS); - - if(node) { - iqQuery.setAttribute('node', node); - } - - con.send(iq, self.handleBrowse); - } - - // Command - else if(type == 'command') { - var items; - - if(node) { - items = iq.appendNode('command', {'node': node, 'xmlns': NS_COMMANDS}); - } - - else { - items = iq.setQuery(NS_DISCO_ITEMS); - items.setAttribute('node', NS_COMMANDS); - } - - if(action && node) { - iq.setType('set'); - items.setAttribute('action', action); - } - - con.send(iq, self.handleCommand); - } - - // Search query - else if(type == 'search') { - iq.setQuery(NS_SEARCH); - con.send(iq, self.handleSearch); - } - - // Subscribe query - else if(type == 'subscribe') { - iq.setQuery(NS_REGISTER); - con.send(iq, self.handleSubscribe); - } - - // Join - else if(type == 'join') { - if(target == 'discovery') { - Discovery.close(); - } - - Chat.checkCreate(host, 'groupchat'); - } - } - } catch(e) { - Console.error('DataForm.go', e); - } finally { - return false; - } - - }; - - - /** - * Sends a given dataform - * @public - * @param {string} type - * @param {string} action - * @param {string} x_type - * @param {string} id - * @param {string} xid - * @param {string} node - * @param {string} sessionid - * @param {string} target - * @return {boolean} - */ - self.send = function(type, action, x_type, id, xid, node, sessionid, target) { - - try { - // Path - var pathID = '#' + target + ' .results[data-session="' + id + '"]'; - - // New IQ - var iq = new JSJaCIQ(); - iq.setTo(xid); - iq.setType('set'); - - // Set the correct query - var query; - - if(type == 'subscribe') { - iqQuery = iq.setQuery(NS_REGISTER); - } else if(type == 'search') { - iqQuery = iq.setQuery(NS_SEARCH); - } else if(type == 'command') { - iqQuery = iq.appendNode('command', {'xmlns': NS_COMMANDS, 'node': node, 'sessionid': sessionid, 'action': action}); - } else if(type == 'x') { - iqQuery = iq.setQuery(NS_MUC_OWNER); - } - - // Build the XML document - if(action != 'cancel') { - // No X node - if(Common.exists('input.register-special') && (type == 'subscribe')) { - $('input.register-special').each(function() { - var iName = $(this).attr('name'); - var iValue = $(this).val(); - - iqQuery.appendChild(iq.buildNode(iName, {'xmlns': NS_REGISTER}, iValue)); - }); - } - - // Can create the X node - else { - var iqX = iqQuery.appendChild(iq.buildNode('x', {'xmlns': NS_XDATA, 'type': x_type})); - - // Each input - $(pathID + ' .oneresult input, ' + pathID + ' .oneresult textarea, ' + pathID + ' .oneresult select').each(function() { - // Get the current input value - var iVar = $(this).attr('name'); - var iType = $(this).attr('data-type'); - var iValue = $(this).val(); - - // Build a new field node - var field = iqX.appendChild(iq.buildNode('field', {'var': iVar, 'type': iType, 'xmlns': NS_XDATA})); - - // Boolean input? - if(iType == 'boolean') { - if($(this).filter(':checked').size()) { - iValue = '1'; - } else { - iValue = '0'; - } - } - - // JID-multi input? - if(iType == 'jid-multi') { - // Values array - var xid_arr = [iValue]; - var xid_check = []; - - // Try to split it - if(iValue.indexOf(',') != -1) { - xid_arr = iValue.split(','); - } - - // Append each value to the XML document - for(var i in xid_arr) { - // Get the current value - xid_current = $.trim(xid_arr[i]); - - // No current value? - if(!xid_current) { - continue; - } - - // Add the current value - if(!Utils.existArrayValue(xid_check, xid_current)) { - xid_check.push(xid_current); - field.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, xid_current)); - } - } - } - - // List-multi selector? - else if(iType == 'list-multi') { - // Any value? - if(iValue && iValue.length) { - for(var j in iValue) { - field.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, iValue[j])); - } - } - } - - // Other inputs? - else { - field.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, iValue)); - } - }); - } - } - - // Clean the current session - self.clean(target); - - // Show the waiting item - $('#' + target + ' .wait').show(); - - // Change the ID of the current discovered item - var iqID = target + '-' + genID(); - $('#' + target + ' .' + target + '-results').attr('data-session', iqID); - iq.setID(iqID); - - // Send the IQ - if(type == 'subscribe') { - con.send(iq, self.handleSubscribe); - } else if(type == 'search') { - con.send(iq, self.handleSearch); - } else if(type == 'command') { - con.send(iq, self.handleCommand); - } else { - con.send(iq); - } - } catch(e) { - Console.error('DataForm.send', e); - } finally { - return false; - } - - }; - - - /** - * Displays the good dataform buttons - * @public - * @param {string} type - * @param {string} action - * @param {string} id - * @param {string} xid - * @param {string} node - * @param {string} sessionid - * @param {string} target - * @param {string} pathID - * @return {undefined} - */ - self.buttons = function(type, action, id, xid, node, sessionid, target, pathID) { - - try { - // No need to use buttons? - if(type == 'muc') { - return; - } - - // Override the "undefined" output - if(!id) - id = ''; - if(!xid) - xid = ''; - if(!node) - node = ''; - if(!sessionid) - sessionid = ''; - - // We generate the buttons code - var buttonsCode = '
'; - - if(action == 'submit') { - if((target == 'adhoc') && (type == 'command')) { - buttonsCode += '' + Common._e("Submit") + ''; - - // When keyup on one text input - $(pathID + ' input').keyup(function(e) { - if(e.keyCode == 13) { - self.send(type, 'execute', 'submit', id, xid, node, sessionid, target); - - return false; - } - }); - } else { - buttonsCode += '' + Common._e("Submit") + ''; - - // When keyup on one text input - $(pathID + ' input').keyup(function(e) { - if(e.keyCode == 13) { - self.send(type, 'submit', 'submit', id, xid, node, sessionid, target); - - return false; - } - }); - } - } - - if((action == 'submit') && (type != 'subscribe') && (type != 'search')) { - buttonsCode += '' + Common._e("Cancel") + ''; - } - - if(((action == 'back') || (type == 'subscribe') || (type == 'search')) && (target == 'discovery')) { - buttonsCode += '' + Common._e("Close") + ''; - } - - if((action == 'back') && ((target == 'welcome') || (target == 'directory'))) { - buttonsCode += '' + Common._e("Previous") + ''; - } - - if((action == 'back') && (target == 'adhoc')) { - buttonsCode += '' + Common._e("Previous") + ''; - } - - buttonsCode += '
'; - - // We display the buttons code - $(pathID).append(buttonsCode); - - // If no submit link, lock the form - if(!Common.exists(pathID + ' a.submit')) { - $(pathID + ' input, ' + pathID + ' textarea').attr('readonly', true); - } - } catch(e) { - Console.error('DataForm.buttons', e); - } - - }; - - - /** - * Handles the MUC dataform - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleMUC = function(iq) { - - try { - Errors.handleReply(iq); - self.handleContent(iq, 'muc'); - } catch(e) { - Console.error('DataForm.handleMUC', e); - } - - }; - - - /** - * Handles the browse dataform - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleBrowse = function(iq) { - - try { - Errors.handleReply(iq); - self.handleContent(iq, 'browse'); - } catch(e) { - Console.error('DataForm.handleBrowse', e); - } - - }; - - - /** - * Handles the command dataform - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleCommand = function(iq) { - - try { - Errors.handleReply(iq); - self.handleContent(iq, 'command'); - } catch(e) { - Console.error('DataForm.handleCommand', e); - } - - }; - - - /** - * Handles the subscribe dataform - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleSubscribe = function(iq) { - - try { - Errors.handleReply(iq); - self.handleContent(iq, 'subscribe'); - } catch(e) { - Console.error('DataForm.handleSubscribe', e); - } - - }; - - - /** - * Handles the search dataform - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleSearch = function(iq) { - - try { - Errors.handleReply(iq); - self.handleContent(iq, 'search'); - } catch(e) { - Console.error('DataForm.handleSearch', e); - } - - }; - - - /** - * Handles the dataform content - * @public - * @param {object} iq - * @param {string} type - * @return {undefined} - */ - self.handleContent = function(iq, type) { - - try { - // Get the ID - var sID = iq.getID(); - - // Get the target - var splitted = sID.split('-'); - var target = splitted[0]; - var sessionID = target + '-' + splitted[1]; - var from = Common.fullXID(Common.getStanzaFrom(iq)); - var pathID = '#' + target + ' .results[data-session="' + sessionID + '"]'; - - // If an error occured - if(!iq || (iq.getType() != 'result')) { - self.noResult(pathID); - } - - // If we got something okay - else { - var handleXML = iq.getNode(); - - if(type == 'browse') { - if($(handleXML).find('item').attr('jid')) { - // Get the query node - var queryNode = $(handleXML).find('query').attr('node'); - - $(handleXML).find('item').each(function() { - // We parse the received xml - var itemHost = $(this).attr('jid'); - var itemNode = $(this).attr('node'); - var itemName = $(this).attr('name'); - var itemHash = hex_md5(itemHost); - - // Node - if(itemNode) { - $(pathID).append( - '
' + - '
' + itemNode.htmlEnc() + '
' + - '
' - ); - } - - // Item - else if(queryNode && itemName) { - $(pathID).append( - '
' + - '
' + itemName.htmlEnc() + '
' + - '
' - ); - } - - // Item with children - else { - // We display the waiting element - $(pathID + ' .disco-wait .disco-category-title').after( - '
' + - '
' + - '
' + itemHost + '
' + - '
' + Common._e("Requesting this service...") + '
' + - '
' - ); - - // We display the category - $('#' + target + ' .disco-wait').show(); - - // We ask the server what's the service type - self.getType(itemHost, itemNode, sessionID); - } - }); - } - - // Else, there are no items for this query - else - self.noResult(pathID); - } - - else if((type == 'muc') || (type == 'search') || (type == 'subscribe') || ((type == 'command') && $(handleXML).find('command').attr('xmlns'))) { - // Get some values - var xCommand = $(handleXML).find('command'); - var bNode = xCommand.attr('node'); - var bSession = xCommand.attr('sessionid'); - var bStatus = xCommand.attr('status'); - var xRegister = $(handleXML).find('query[xmlns="' + NS_REGISTER + '"]').text(); - var xElement = $(handleXML).find('x'); - - // Search done - if((xElement.attr('type') == 'result') && (type == 'search')) { - var bPath = pathID; - - // Display the result - $(handleXML).find('item').each(function() { - // Have some "flexibility" for what regards field names, it would be better to return the whole original DF - // layout, but on a large amount of result which have many fields, there's a very high chance the browser can - // choke on old systems or new ones even. - - // Search for useful fields, return first result. This is rather hacky, but jQuery is horrible when it comes to - // matching st. using patterns. (TODO: Improve and return the full DF layout without choking the browser) - var bName; - var bCountry; - var doneName, doneCountry; - - $.each($(this).find('field'), function(i, item) { - var $item = $(item); - - if($(item).attr('var').match(/^(fn|name|[^n][^i][^c][^k]name)$/gi) && doneName !== true) { - bName = $item.children('value:first').text(); - doneName = true; - } else if($(item).attr('var').match(/^(ctry|country.*)$/gi) && doneCountry !== true) { - bCountry = $item.children('value:first').text(); - doneCountry = true; - } - }); - - var bXID = $(this).find('field[var="jid"] value:first').text(); - var dName = bName; - - // Override "undefined" value - if(!bXID) - bXID = ''; - if(!bName) - bName = Common._e("Unknown name"); - if(!bCountry) - bCountry = Common._e("Unknown country"); - - // User hash - var bHash = hex_md5(bXID); - - // HTML code - var bHTML = '
' + - '
' + - '' + - '
' + - '
' + bName + '
' + - '
' + bCountry + '
' + - '
' + bXID + '
' + - '
'; - - // The buddy is not in our buddy list? - if(!Common.exists('#roster .buddy[data-xid="' + escape(bXID) + '"]')) { - bHTML += '' + Common._e("Add") + ''; - } - - // Chat button, if not in welcome/directory mode - if(target == 'discovery') { - bHTML += '' + Common._e("Chat") + ''; - } - - // Profile button, if not in discovery mode - else { - bHTML += '' + Common._e("Profile") + ''; - } - - // Close the HTML element - bHTML += '
'; - - $(bPath).append(bHTML); - - // Click events - $(bPath + ' .' + bHash + ' a').click(function() { - // Buddy add - if($(this).is('.one-add')) { - $(this).hide(); - - Roster.addThisContact(bXID, dName); - } - - // Buddy chat - if($(this).is('.one-chat')) { - if(target == 'discovery') - Discovery.close(); - - Chat.checkCreate(bXID, 'chat', '', '', dName); - } - - // Buddy profile - if($(this).is('.one-profile')) { - UserInfos.open(bXID); - } - - return false; - }); - - // Get the user's avatar - if(bXID) { - Avatar.get(bXID, 'cache', 'true', 'forget'); - } - }); - - // No result? - if(!$(handleXML).find('item').size()) - self.noResult(pathID); - - // Previous button - self.buttons(type, 'back', sessionID, from, bNode, bSession, target, pathID); - } - - // Command to complete - else if(xElement.attr('xmlns') || ((type == 'subscribe') && xRegister)) { - // We display the elements - self.fill(handleXML, sessionID); - - // We display the buttons - if(bStatus != 'completed') { - self.buttons(type, 'submit', sessionID, from, bNode, bSession, target, pathID); - } else { - self.buttons(type, 'back', sessionID, from, bNode, bSession, target, pathID); - } - } - - // Command completed or subscription done - else if(((bStatus == 'completed') && (type == 'command')) || (!xRegister && (type == 'subscribe'))) { - // Display the good text - var cNote = $(xCommand).find('note'); - - // Any note? - if(cNote.size()) { - cNote.each(function() { - $(pathID).append( - '
' + $(this).text().htmlEnc() + '
' - ); - }); - } - - // Default text - else { - $(pathID).append('
' + Common._e("Your form has been sent.") + '
'); - } - - // Display the back button - self.buttons(type, 'back', sessionID, from, '', '', target, pathID); - - // Add the gateway to our roster if subscribed - if(type == 'subscribe') { - Roster.addThisContact(from); - } - } - - // Command canceled - else if((bStatus == 'canceled') && (type == 'command')) { - if(target == 'discovery') { - Discovery.start(); - } else if(target == 'adhoc') { - dataForm(from, 'command', '', '', 'adhoc'); - } - } - - // No items for this query - else - self.noResult(pathID); - } - - else if(type == 'command') { - if($(handleXML).find('item').attr('jid')) { - // We display the elements - $(handleXML).find('item').each(function() { - // We parse the received xml - var itemHost = $(this).attr('jid'); - var itemNode = $(this).attr('node'); - var itemName = $(this).attr('name'); - var itemHash = hex_md5(itemHost); - - // We display the waiting element - $(pathID).prepend( - '
' + - '
' + itemName + '
' + - '
»
' + - '
' - ); - }); - } - - // Else, there are no items for this query - else { - self.noResult(pathID); - } - } - } - - // Focus on the first input - $(document).oneTime(10, function() { - $(pathID + ' input:visible:first').focus(); - }); - - // Hide the wait icon - $('#' + target + ' .wait').hide(); - } catch(e) { - Console.error('DataForm.handleContent', e); - } - - }; - - - /** - * Fills the dataform elements - * @public - * @param {type} xml - * @param {type} id - * @return {boolean} - */ - self.fill = function(xml, id) { - - /* REF: http://xmpp.org/extensions/xep-0004.html */ - - try { - // Initialize new vars - var target = id.split('-')[0]; - var pathID = '#' + target + ' .results[data-session="' + id + '"]'; - var selector, is_dataform; - - // Is it a dataform? - if($(xml).find('x[xmlns="' + NS_XDATA + '"]').size()) { - is_dataform = true; - } else { - is_dataform = false; - } - - // Determines the good selector to use - if(is_dataform) { - selector = $(xml).find('x[xmlns="' + NS_XDATA + '"]'); - } else { - selector = $(xml); - } - - // Form title - selector.find('title').each(function() { - $(pathID).append( - '
' + $(this).text().htmlEnc() + '
' - ); - }); - - // Form instructions - selector.find('instructions').each(function() { - $(pathID).append( - '
' + $(this).text().htmlEnc() + '
' - ); - }); - - // Register? - if(!is_dataform) { - // Items to detect - var reg_names = [Common._e("Nickname"), Common._e("Name"), Common._e("Password"), Common._e("E-mail")]; - var reg_ids = ['username', 'name', 'password', 'email']; - - // Append these inputs - $.each(reg_names, function(a) { - selector.find(reg_ids[a]).each(function() { - $(pathID).append( - '
' + - '' + - '' + - '
' - ); - }); - }); - - return false; - } - - // Dataform? - selector.find('field').each(function() { - // We parse the received xml - var type = $(this).attr('type'); - var label = $(this).attr('label'); - var field = $(this).attr('var'); - var value = $(this).find('value:first').text(); - var required = ''; - - // No value? - if(!field) { - return; - } - - // Required input? - if($(this).find('required').size()) { - required = ' required=""'; - } - - // Compatibility fix - if(!label) { - label = field; - } - - if(!type) { - type = ''; - } - - // Generate some values - var input; - var hideThis = ''; - - // Fixed field - if(type == 'fixed') { - $(pathID).append('
' + value.htmlEnc() + '
'); - } else { - // Hidden field - if(type == 'hidden') { - hideThis = ' style="display: none;"'; - input = ''; - } - - // Boolean field - else if(type == 'boolean') { - var checked; - - if(value == '1') - checked = 'checked'; - else - checked = ''; - - input = ''; - } - - // List-single/list-multi field - else if((type == 'list-single') || (type == 'list-multi')) { - var multiple = ''; - - // Multiple options? - if(type == 'list-multi') { - multiple = ' multiple=""'; - } - - // Append the select field - input = ''; - } - - // Text-multi field - else if(type == 'text-multi') { - input = ''; - } - - // JID-multi field - else if(type == 'jid-multi') { - // Put the XID into an array - var xid_arr = []; - - $(this).find('value').each(function() { - var cValue = $(this).text(); - - if(!Utils.existArrayValue(xid_arr, cValue)) { - xid_arr.push(cValue); - } - }); - - // Sort the array - xid_arr.sort(); - - // Create the input - var xid_value = ''; - - if(xid_arr.length) { - for(var i in xid_arr) { - // Any pre-value - if(xid_value) { - xid_value += ', '; - } - - // Add the current XID - xid_value += xid_arr[i]; - } - } - - input = ''; - } - - // Other stuffs that are similar - else { - // Text-single field - var iType = 'text'; - - // Text-private field - if(type == 'text-private') { - iType = 'password'; - } - - // JID-single field - else if(type == 'jid-single') { - iType = 'email'; - } - - input = ''; - } - - // Append the HTML markup for this field - $(pathID).append( - '
' + - '' + - input + - '
' - ); - } - }); - } catch(e) { - Console.error('DataForm.fill', e); - } finally { - return false; - } - - }; - - - /** - * Gets the dataform type - * @public - * @param {string} host - * @param {string} node - * @param {string} id - * @return {undefined} - */ - self.getType = function(host, node, id) { - - try { - var iq = new JSJaCIQ(); - iq.setID(id + '-' + genID()); - iq.setTo(host); - iq.setType('get'); - - var iqQuery = iq.setQuery(NS_DISCO_INFO); - - if(node) { - iqQuery.setAttribute('node', node); - } - - con.send(iq, self.handleThisBrowse); - } catch(e) { - Console.error('DataForm.getType', e); - } - - }; - - - /** - * Handles the browse stanza - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleThisBrowse = function(iq) { - - /* REF: http://xmpp.org/registrar/disco-categories.html */ - - try { - var id = iq.getID(); - var splitted = id.split('-'); - var target = splitted[0]; - var sessionID = target + '-' + splitted[1]; - var from = Common.fullXID(Common.getStanzaFrom(iq)); - var hash = hex_md5(from); - var handleXML = iq.getQuery(); - var pathID = '#' + target + ' .results[data-session="' + sessionID + '"]'; - - // We first remove the waiting element - $(pathID + ' .disco-wait .' + hash).remove(); - - if($(handleXML).find('identity').attr('type')) { - var category = $(handleXML).find('identity').attr('category'); - var type = $(handleXML).find('identity').attr('type'); - var named = $(handleXML).find('identity').attr('name'); - - if(named) { - gName = named; - } else { - gName = ''; - } - - var one, two, three, four, five; - - // Get the features that this entity supports - var findFeature = $(handleXML).find('feature'); - - for(var i in findFeature) { - var current = findFeature.eq(i).attr('var'); - - switch(current) { - case NS_SEARCH: - one = 1; - break; - - case NS_MUC: - two = 1; - break; - - case NS_REGISTER: - three = 1; - break; - - case NS_COMMANDS: - four = 1; - break; - - case NS_DISCO_ITEMS: - five = 1; - break; - - default: - break; - } - } - - var buttons = Array(one, two, three, four, five); - - // We define the toolbox links depending on the supported features - var tools = ''; - var aTools = Array('search', 'join', 'subscribe', 'command', 'browse'); - var bTools = Array(Common._e("Search"), Common._e("Join"), Common._e("Subscribe"), Common._e("Command"), Common._e("Browse")); - - for(var b in buttons) { - if(buttons[b]) { - tools += ''; - } - } - - // As defined in the ref, we detect the type of each category to put an icon - switch(category) { - case 'account': - case 'auth': - case 'automation': - case 'client': - case 'collaboration': - case 'component': - case 'conference': - case 'directory': - case 'gateway': - case 'headline': - case 'hierarchy': - case 'proxy': - case 'pubsub': - case 'server': - case 'store': - break; - - default: - category = 'others'; - } - - // We display the item we found - $(pathID + ' .disco-' + category + ' .disco-category-title').after( - '
' + - '
' + - '
' + from + '
' + - '
' + gName + '
' + - '
' + tools + '
' + - '
' - ); - - // We display the category - $(pathID + ' .disco-' + category).show(); - } - - else { - $(pathID + ' .disco-others .disco-category-title').after( - '
' + - '
' + - '
' + from + '
' + - '
' + Common._e("Service offline or broken") + '
' + - '
' - ); - - // We display the category - $(pathID + ' .disco-others').show(); - } - - // We hide the waiting stuffs if there's no remaining loading items - if(!$(pathID + ' .disco-wait .' + target + '-oneresult').size()) { - $(pathID + ' .disco-wait, #' + target + ' .wait').hide(); - } - } catch(e) { - Console.error('DataForm.handleThisBrowse', e); - } - - }; - - - /** - * Cleans the current data-form popup - * @public - * @param {string} target - * @return {undefined} - */ - self.clean = function(target) { - - try { - if(target == 'discovery') { - Discovery.clean(); - } else { - $('#' + target + ' div.results').empty(); - } - } catch(e) { - Console.error('DataForm.clean', e); - } - - }; - - - /** - * Displays the no result indicator - * @public - * @param {string} path - * @return {undefined} - */ - self.noResult = function(path) { - - try { - $(path).prepend('

' + Common._e("Sorry, but the entity didn't return any result!") + '

'); - } catch(e) { - Console.error('DataForm.noResult', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/datastore.js b/source/app/javascripts/datastore.js deleted file mode 100644 index 1f4b64f..0000000 --- a/source/app/javascripts/datastore.js +++ /dev/null @@ -1,506 +0,0 @@ -/* - -Jappix - An open social platform -These are the temporary/persistent data store functions - -------------------------------------------------- - -License: dual-licensed under AGPL and MPLv2 -Authors: Valérian Saliou, Maranda - -*/ - -// Bundle -var DataStore = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Variables */ - self._db_emulated = {}; - self._persistent_emulated = {}; - - - /** - * Common: storage adapter - * @public - * @param {object} storage_native - * @param {object} storage_emulated - * @return {undefined} - */ - self._adapter = function(storage_native, storage_emulated) { - - try { - var legacy = !storage_native; - - this.key = function(key) { - if(legacy) { - if(key >= this.length) { - return null; - } - - var c = 0; - - for(var name in storage_emulated) { - if(c++ == key) return name; - } - - return null; - } - - return storage_native.key(key); - }; - - this.getItem = function(key) { - if(legacy) { - if(storage_emulated[key] !== undefined) { - return storage_emulated[key]; - } - - return null; - } else { - return storage_native.getItem(key); - } - }; - - this.setItem = function(key, data) { - if(legacy) { - if(!(key in storage_emulated)) { - this.length++; - } - - storage_emulated[key] = (data + ''); - } else { - storage_native.setItem(key, data); - this.length = storage_native.length; - } - }; - - this.removeItem = function(key) { - if(legacy) { - if(key in storage_emulated) { - this.length--; - delete storage_emulated[key]; - } - } else { - storage_native.removeItem(key); - this.length = storage_native.length; - } - }; - - this.clear = function() { - if(legacy) { - this.length = 0; - storage_emulated = {}; - } else { - storage_native.clear(); - this.length = storage_native.length; - } - }; - - this.length = legacy ? 0 : storage_native.length; - } catch(e) { - Console.error('DataStore._adapter', e); - } - - }; - - - /** - * Temporary: sessionStorage class alias for direct access - */ - self.storageDB = new self._adapter( - (window.sessionStorage ? sessionStorage : null), - self._db_emulated - ); - - - /** - * Persistent: localStorage class alias for direct access - */ - self.storagePersistent = new self._adapter( - (window.localStorage ? localStorage : null), - self._persistent_emulated - ); - - - /** - * Temporary: returns whether it is available or not - * @public - * @return {boolean} - */ - self.hasDB = function() { - - var has_db = false; - - try { - self.storageDB.setItem('hasdb_check', 'ok'); - self.storageDB.removeItem('hasdb_check'); - - has_db = true; - } catch(e) { - Console.error('DataStore.hasDB', e); - } finally { - return has_db; - } - - }; - - - /** - * Temporary: used to read a database entry - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @return {object} - */ - self.getDB = function(dbID, type, id) { - - try { - try { - return self.storageDB.getItem(dbID + '_' + type + '_' + id); - } - - catch(e) { - Console.error('Error while getting a temporary database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e); - } - - return null; - } catch(e) { - Console.error('DataStore.getDB', e); - } - - }; - - - /** - * Temporary: used to update a database entry - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @param {type} value - * @return {boolean} - */ - self.setDB = function(dbID, type, id, value) { - - try { - try { - self.storageDB.setItem(dbID + '_' + type + '_' + id, value); - - return true; - } - - catch(e) { - Console.error('Error while writing a temporary database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e); - } - - return false; - } catch(e) { - Console.error('DataStore.setDB', e); - } - - }; - - - /** - * Temporary: used to remove a database entry - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @return {undefined} - */ - self.removeDB = function(dbID, type, id) { - - try { - try { - self.storageDB.removeItem(dbID + '_' + type + '_' + id); - - return true; - } - - catch(e) { - Console.error('Error while removing a temporary database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e); - } - - return false; - } catch(e) { - Console.error('DataStore.removeDB', e); - } - - }; - - - /** - * Temporary: used to check a database entry exists - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @return {boolean} - */ - self.existDB = function(dbID, type, id) { - - try { - return self.getDB(dbID, type, id) !== null; - } catch(e) { - Console.error('DataStore.existDB', e); - } - - }; - - - /** - * Temporary: used to clear all the database - * @public - * @return {boolean} - */ - self.resetDB = function() { - - try { - try { - self.storageDB.clear(); - - Console.info('Temporary database cleared.'); - - return true; - } - - catch(e) { - Console.error('Error while clearing temporary database', e); - - return false; - } - } catch(e) { - Console.error('DataStore.resetDB', e); - } - - }; - - - /** - * Persistent: returns whether it is available or not - * @public - * @return {boolean} - */ - self.hasPersistent = function() { - - var has_persistent = false; - - try { - // Try to write something - self.storagePersistent.setItem('haspersistent_check', 'ok'); - self.storagePersistent.removeItem('haspersistent_check'); - - has_persistent = true; - } catch(e) { - Console.error('DataStore.hasPersistent', e); - } finally { - return has_persistent; - } - - }; - - - /** - * Persistent: used to read a database entry - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @return {object} - */ - self.getPersistent = function(dbID, type, id) { - - try { - try { - return self.storagePersistent.getItem(dbID + '_' + type + '_' + id); - } - - catch(e) { - Console.error('Error while getting a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e); - - return null; - } - } catch(e) { - Console.error('DataStore.getPersistent', e); - } - - }; - - - /** - * Persistent: used to update a database entry - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @param {string} value - * @return {boolean} - */ - self.setPersistent = function(dbID, type, id, value) { - - try { - try { - self.storagePersistent.setItem(dbID + '_' + type + '_' + id, value); - - return true; - } - - // Database might be full - catch(e) { - Console.warn('Retrying: could not write a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e); - - // Flush it! - self.flushPersistent(); - - // Set the item again - try { - self.storagePersistent.setItem(dbID + ' -> ' + type + '_' + id, value); - - return true; - } - - // New error! - catch(_e) { - Console.error('Aborted: error while writing a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', _e); - } - } - - return false; - } catch(e) { - Console.error('DataStore.setPersistent', e); - } - - }; - - - /** - * Persistent: used to remove a database entry - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @return {boolean} - */ - self.removePersistent = function(dbID, type, id) { - - try { - try { - self.storagePersistent.removeItem(dbID + '_' + type + '_' + id); - - return true; - } - - catch(e) { - Console.error('Error while removing a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e); - } - - return false; - } catch(e) { - Console.error('DataStore.removePersistent', e); - } - - }; - - - /** - * Persistent: used to check a database entry exists - * @public - * @param {string} dbID - * @param {string} type - * @param {string} id - * @return {boolean} - */ - self.existPersistent = function(dbID, type, id) { - - try { - return self.getPersistent(dbID, type, id) !== null; - } catch(e) { - Console.error('DataStore.existPersistent', e); - } - - }; - - - /** - * Persistent: used to clear all the database - * @public - * @param {type} name - * @return {boolean} - */ - self.resetPersistent = function() { - - try { - try { - self.storagePersistent.clear(); - - Console.info('Persistent database cleared.'); - - return true; - } - - catch(e) { - Console.error('Error while clearing persistent database', e); - } - - return false; - } catch(e) { - Console.error('DataStore.resetPersistent', e); - } - - }; - - - /** - * Persistent: used to flush the database - * @public - * @param {type} name - * @return {boolean} - */ - self.flushPersistent = function() { - - try { - try { - // Get the stored session entry - var session = self.getPersistent('global', 'session', 1); - - // Reset the persistent database - self.resetPersistent(); - - // Restaure the stored session entry - if(session) { - self.setPersistent('global', 'session', 1, session); - } - - Console.info('Persistent database flushed.'); - - return true; - } - - catch(e) { - Console.error('Error while flushing persistent database', e); - } - - return false; - } catch(e) { - Console.error('DataStore.flushPersistent', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); - -var JappixDataStore = DataStore; \ No newline at end of file diff --git a/source/app/javascripts/date.js b/source/app/javascripts/date.js deleted file mode 100644 index 977b677..0000000 --- a/source/app/javascripts/date.js +++ /dev/null @@ -1,454 +0,0 @@ -/* - -Jappix - An open social platform -These are the date related JS scripts for Jappix - -------------------------------------------------- - -License: dual-licensed under AGPL and MPLv2 -Author: Valérian Saliou - -*/ - -// Bundle -var DateUtils = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Variables */ - self.last_activity = 0; - self.presence_last_activity = 0; - - - /** - * Gets a stamp from a date - * @public - * @param {Date} date - * @return {number} - */ - self.extractStamp = function(date) { - - try { - return Math.round(date.getTime() / 1000); - } catch(e) { - Console.error('DateUtils.extractStamp', e); - } - - }; - - - /** - * Gets the time from a date - * @public - * @param {Date} date - * @return {string} - */ - self.extractTime = function(date) { - - try { - return date.toLocaleTimeString(); - } catch(e) { - Console.error('DateUtils.extractTime', e); - } - - }; - - - /** - * Gets the actual date stamp - * @public - * @return {number} - */ - self.getTimeStamp = function() { - - try { - return self.extractStamp(new Date()); - } catch(e) { - Console.error('DateUtils.getTimeStamp', e); - } - - }; - - - /** - * Gets the last user activity in seconds - * @public - * @return {number} - */ - self.getLastActivity = function() { - - try { - // Last activity not yet initialized? - if(self.last_activity === 0) { - return 0; - } - - return self.getTimeStamp() - self.last_activity; - } catch(e) { - Console.error('DateUtils.getLastActivity', e); - } - - }; - - - /** - * Gets the last user activity as a date - * @public - * @return {string} - */ - self.getLastActivityDate = function() { - - try { - var last_activity = self.last_activity || self.getTimeStamp(); - - var last_date = new Date(); - last_date.setTime(last_activity * 1000); - - return self.getDatetime(last_date, 'utc'); - } catch(e) { - Console.error('DateUtils.getLastActivityDate', e); - } - - }; - - - /** - * Gets the last user available presence in seconds - * @public - * @return {number} - */ - self.getPresenceLast = function() { - - try { - // Last presence stamp not yet initialized? - if(self.presence_last_activity === 0) { - return 0; - } - - return self.getTimeStamp() - self.presence_last_activity; - } catch(e) { - Console.error('DateUtils.getPresenceLast', e); - } - - }; - - - /** - * Generates a normalized datetime - * @public - * @param {Date} date - * @param {string} location - * @return {string} - */ - self.getDatetime = function(date, location) { - - /* FROM : http://trac.jwchat.org/jsjac/browser/branches/jsjac_1.0/jsextras.js?rev=221 */ - - var year, month, day, hours, minutes, seconds; - var date_string = null; - - try { - if(location == 'utc') { - // UTC date - year = date.getUTCFullYear(); - month = date.getUTCMonth(); - day = date.getUTCDate(); - hours = date.getUTCHours(); - minutes = date.getUTCMinutes(); - seconds = date.getUTCSeconds(); - } else { - // Local date - year = date.getFullYear(); - month = date.getMonth(); - day = date.getDate(); - hours = date.getHours(); - minutes = date.getMinutes(); - seconds = date.getSeconds(); - } - - // Generates the date string - date_string = year + '-'; - date_string += Common.padZero(month + 1) + '-'; - date_string += Common.padZero(day) + 'T'; - date_string += Common.padZero(hours) + ':'; - date_string += Common.padZero(minutes) + ':'; - date_string += Common.padZero(seconds) + 'Z'; - - // Returns the date string - return date_string; - } catch(e) { - Console.error('DateUtils.getDatetime', e); - } - - }; - - - /** - * Generates the time for XMPP - * @public - * @param {string} location - * @return {string} - */ - self.getXMPPTime = function(location) { - - try { - return self.getDatetime( - (new Date()), - location - ); - } catch(e) { - Console.error('DateUtils.getXMPPTime', e); - } - - }; - - - /** - * Generates then human time - * @public - * @return {string} - */ - self.getCompleteTime = function() { - - try { - var init = new Date(); - - var time = Common.padZero(init.getHours()) + ':'; - time += Common.padZero(init.getMinutes()) + ':'; - time += Common.padZero(init.getSeconds()); - - return time; - } catch(e) { - Console.error('DateUtils.getCompleteTime', e); - } - - }; - - - /** - * Gets the TZO of a date - * @public - * @return {string} - */ - self.getTZO = function() { - - try { - // Get the date - var date = new Date(); - var offset = date.getTimezoneOffset(); - - // Default vars - var sign = ''; - var hours = 0; - var minutes = 0; - - // Process a neutral offset - if(offset < 0) { - offset = offset * -1; - sign = '+'; - } - - // Get the values - var n_date = new Date(offset * 60 * 1000); - hours = n_date.getHours() - 1; - minutes = n_date.getMinutes(); - - // Process the TZO - tzo = sign + Common.padZero(hours) + ':' + Common.padZero(minutes); - - // Return the processed value - return tzo; - } catch(e) { - Console.error('DateUtils.getTZO', e); - } - - }; - - - /** - * Returns a date representing the difference of time between 2 timestamps - * @public - * @param {string} now_stamp - * @param {string} past_stamp - * @return {Date} - */ - self.difference = function(now_stamp, past_stamp) { - - try { - return (new Date()).clearTime().addSeconds( - past_stamp > 0 ? now_stamp - past_stamp : 0 - ); - } catch(e) { - Console.error('DateUtils.difference', e); - } - - }; - - - /** - * Parses a XMPP date (yyyy-mm-dd, hh-mm-ss) into an human-readable one - * @public - * @param {string} to_parse - * @return {string} - */ - self.parse = function(to_parse) { - - try { - var date = Date.jab2date(to_parse); - var parsed = date.toLocaleDateString() + ' (' + date.toLocaleTimeString() + ')'; - - return parsed; - } catch(e) { - Console.error('DateUtils.parse', e); - } - - }; - - - /** - * Parses a XMPP date (yyyy-mm-dd) into an human-readable one - * @public - * @param {string} to_parse - * @return {string} - */ - self.parseDay = function(to_parse) { - - try { - var date = Date.jab2date(to_parse); - var parsed = date.toLocaleDateString(); - - return parsed; - } catch(e) { - Console.error('DateUtils.parseDay', e); - } - - }; - - - /** - * Parses a XMPP date (hh-mm-ss) into an human-readable one - * @public - * @param {string} to_parse - * @return {string} - */ - self.parseTime = function(to_parse) { - - try { - var date = Date.jab2date(to_parse); - var parsed = date.toLocaleTimeString(); - - return parsed; - } catch(e) { - Console.error('DateUtils.parseTime', e); - } - - }; - - - /** - * Parses a XMPP date stamp into a relative one - * @public - * @param {string} to_parse - * @return {string} - */ - self.relative = function(to_parse) { - - try { - // Get the current date - var current_date = Date.jab2date(self.getXMPPTime('utc')); - var current_day = current_date.getDate(); - var current_stamp = current_date.getTime(); - - // Parse the given date - var old_date = Date.jab2date(to_parse); - var old_day = old_date.getDate(); - var old_stamp = old_date.getTime(); - var old_time = old_date.toLocaleTimeString(); - - // Get the day number between the two dates - var days = Math.round((current_stamp - old_stamp) / 86400000); - - // Invalid date? - if(isNaN(old_stamp) || isNaN(days)) { - return self.getCompleteTime(); - } - - // Is it today? - if(current_day == old_day) { - return old_time; - } - - // It is yesterday? - if(days <= 1) { - return Common._e("Yesterday") + ' - ' + old_time; - } - - // Is it less than a week ago? - if(days <= 7) { - return Common.printf(Common._e("%s days ago"), days) + ' - ' + old_time; - } - - // Another longer period - return old_date.toLocaleDateString() + ' - ' + old_time; - } catch(e) { - Console.error('DateUtils.relative', e); - } - - }; - - - /** - * Reads a message delay - * @public - * @param {string} node - * @param {boolean} return_date - * @return {string|Date} - */ - self.readMessageDelay = function(node, return_date) { - - try { - // Initialize - var delay, d_delay; - - // Read the delay - d_delay = jQuery(node).find('delay[xmlns="' + NS_URN_DELAY + '"]:first').attr('stamp'); - - // Get delay - if(d_delay) { - // New delay (valid XEP) - delay = d_delay; - } else { - // Old delay (obsolete XEP!) - var x_delay = jQuery(node).find('x[xmlns="' + NS_DELAY + '"]:first').attr('stamp'); - - if(x_delay) { - delay = x_delay.replace(/^(\w{4})(\w{2})(\w{2})T(\w{2}):(\w{2}):(\w{2})Z?(\S+)?/, '$1-$2-$3T$4:$5:$6Z$7'); - } - } - - // Return a date object? - if(return_date === true && delay) { - return Date.jab2date(delay); - } - - return delay; - } catch(e) { - Console.error('DateUtils.readMessageDelay', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); - -var JappixDateUtils = DateUtils; \ No newline at end of file diff --git a/source/app/javascripts/datejs.js b/source/app/javascripts/datejs.js deleted file mode 100644 index 2d52e9a..0000000 --- a/source/app/javascripts/datejs.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Version: 1.0 Alpha-1 - * Build Date: 13-Nov-2007 - * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved. - * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. - * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/ - */ -Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; -Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;idate)?1:(this=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;} -var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);} -if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);} -if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);} -if(x.hour||x.hours){this.addHours(x.hour||x.hours);} -if(x.month||x.months){this.addMonths(x.month||x.months);} -if(x.year||x.years){this.addYears(x.year||x.years);} -if(x.day||x.days){this.addDays(x.day||x.days);} -return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(valuemax){throw new RangeError(value+" is not a valid value for "+name+".");} -return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;} -if(!x.second&&x.second!==0){x.second=-1;} -if(!x.minute&&x.minute!==0){x.minute=-1;} -if(!x.hour&&x.hour!==0){x.hour=-1;} -if(!x.day&&x.day!==0){x.day=-1;} -if(!x.month&&x.month!==0){x.month=-1;} -if(!x.year&&x.year!==0){x.year=-1;} -if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());} -if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());} -if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());} -if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());} -if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());} -if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());} -if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());} -if(x.timezone){this.setTimezone(x.timezone);} -if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);} -return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;} -var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}} -return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();}; -Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;} -return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;} -if(!last&&q[1].length===0){last=true;} -if(!last){var qx=[];for(var j=0;j0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}} -if(rx[1].length1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];} -if(args){for(var i=0,px=args.shift();i2)?n:(n+(((n+2000)Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");} -var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});} -return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;} -for(var i=0;i' + Common._e("User directory") + '' + - - '
' + - '
' + - '
' + Common._e("Server to query") + '
' + - - '' + - '
' + - - '
' + - '
' + - - '
' + - '
' + - - '' + Common._e("Close") + '' + - '
'; - - // Create the popup - Popup.create('directory', html); - - // Associate the events - self.instance(); - - // Start a search! - self.start(); - } catch(e) { - Console.error('Directory.open', e); - } finally { - return false; - } - - }; - - - /** - * Quits the directory popup - * @public - * @return {boolean} - */ - self.close = function() { - - try { - // Destroy the popup - Popup.destroy('directory'); - } catch(e) { - Console.error('Directory.close', e); - } finally { - return false; - } - - }; - - - /** - * Launches a directory search - * @public - * @return {boolean} - */ - self.start = function() { - - try { - // Get the server to query - var server = $('#directory .directory-server-input').val(); - - // Launch the search! - DataForm.go($('#directory .directory-server-input').val(), 'search', '', '', 'directory'); - - Console.log('Directory search launched: ' + server); - } catch(e) { - Console.error('Directory.start', e); - } finally { - return false; - } - - }; - - - /** - * Plugin launcher - * @public - * @return {undefined} - */ - self.instance = function() { - - try { - // Click event - $('#directory .bottom .finish').click(self.close); - - // Keyboard event - $('#directory .directory-server-input').keyup(function(e) { - if(e.keyCode == 13) { - // No value? - if(!$(this).val()) { - $(this).val(HOST_VJUD); - } - - // Start the directory search - self.start(); - - return false; - } - }); - } catch(e) { - Console.error('Directory.instance', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/discovery.js b/source/app/javascripts/discovery.js deleted file mode 100644 index ef419ba..0000000 --- a/source/app/javascripts/discovery.js +++ /dev/null @@ -1,241 +0,0 @@ -/* - -Jappix - An open social platform -These are the discovery JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Discovery = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Opens the discovery popup - * @public - * @return {boolean} - */ - self.open = function() { - - try { - // Popup HTML content - var html = - '
' + Common._e("Service discovery") + '
' + - - '
' + - '
' + - '
' + Common._e("Server to query") + '
' + - - '' + - '
' + - - '
' + - '' + - - '
' + - '

' + Common._e("Authentications") + '

' + - '
' + - - '
' + - '

' + Common._e("Automation") + '

' + - '
' + - - '
' + - '

' + Common._e("Clients") + '

' + - '
' + - - '
' + - '

' + Common._e("Collaboration") + '

' + - '
' + - - '
' + - '

' + Common._e("Components") + '

' + - '
' + - - '
' + - '

' + Common._e("Rooms") + '

' + - '
' + - - '
' + - '

' + Common._e("Directories") + '

' + - '
' + - - '
' + - '

' + Common._e("Gateways") + '

' + - '
' + - - '
' + - '

' + Common._e("News") + '

' + - '
' + - - '
' + - '

' + Common._e("Hierarchy") + '

' + - '
' + - - '
' + - '

' + Common._e("Proxies") + '

' + - '
' + - - '
' + - '

' + Common._e("Publication/Subscription") + '

' + - '
' + - - '
' + - '

' + Common._e("Server") + '

' + - '
' + - - '
' + - '

' + Common._e("Storage") + '

' + - '
' + - - '
' + - '

' + Common._e("Others") + '

' + - '
' + - - '
' + - '

' + Common._e("Loading") + '

' + - '
' + - '
' + - '
' + - - '
' + - '
' + - - '' + Common._e("Close") + '' + - '
'; - - // Create the popup - Popup.create('discovery', html); - - // Associate the events - self.instance(); - - // We request a disco to the default server - self.start(); - } catch(e) { - Console.error('Discovery.open', e); - } finally { - return false; - } - - }; - - - /** - * Quits the discovery popup - * @public - * @return {boolean} - */ - self.close = function() { - - try { - // Destroy the popup - Popup.destroy('discovery'); - } catch(e) { - Console.error('Discovery.close', e); - } finally { - return false; - } - - }; - - - /** - * Launches a discovery - * @public - * @return {boolean} - */ - self.start = function() { - - /* REF: http://xmpp.org/extensions/xep-0030.html */ - - try { - // We get the server to query - var discoServer = $('#discovery .disco-server-input').val(); - - // We launch the items query - DataForm.go(discoServer, 'browse', '', '', 'discovery'); - - Console.log('Service discovery launched: ' + discoServer); - } catch(e) { - Console.error('Discovery.start', e); - } finally { - return false; - } - - }; - - - /** - * Cleans the discovery results - * @public - * @return {boolean} - */ - self.clean = function() { - - try { - // We remove the results - $('#discovery .discovery-oneresult, #discovery .oneinstructions, #discovery .onetitle, #discovery .no-results').remove(); - - // We clean the user info - $('#discovery .disco-server-info').text(''); - - // We hide the wait icon, the no result alert and the results - $('#discovery .wait, #discovery .disco-category').hide(); - } catch(e) { - Console.error('Discovery.clean', e); - } - - }; - - - /** - * Plugin launcher - * @public - * @return {undefined} - */ - self.instance = function() { - - try { - // Click event - $('#discovery .bottom .finish').click(self.close); - - // Keyboard event - $('#discovery .disco-server-input').keyup(function(e) { - if(e.keyCode == 13) { - // No value? - if(!$(this).val()) { - $(this).val(HOST_MAIN); - } - - // Start the discovery - self.start(); - - return false; - } - }); - } catch(e) { - Console.error('Discovery.instance', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/errors.js b/source/app/javascripts/errors.js deleted file mode 100644 index f1a651c..0000000 --- a/source/app/javascripts/errors.js +++ /dev/null @@ -1,210 +0,0 @@ -/* - -Jappix - An open social platform -These are the error functions for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Errors = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Shows the given error output - * @public - * @param {string} condition - * @param {string} reason - * @param {string} type - * @return {undefined} - */ - self.show = function(condition, reason, type) { - - try { - // Enough data to output the error - if(condition || reason) { - // Initialize the error text - var eText = ''; - - // Any error condition - if(condition) { - eText += condition; - } - - // Any error type - if(type && eText) { - eText += ' (' + type + ')'; - } - - // Any error reason - if(reason) { - if(eText) { - eText += ' - '; - } - - eText += reason; - } - - // We reveal the error - Board.openThisError(1); - - // Create the error text - $('#board .one-board.error[data-id="1"] span').text(eText); - } - - // Not enough data to output the error: output a generic board - else { - Board.openThisError(2); - } - } catch(e) { - Console.error('Errors.show', e); - } - - }; - - - /** - * Handles the error from a packet and return true if any error - * @public - * @param {object} packet - * @return {boolean} - */ - self.handle = function(packet) { - - /* REF: http://xmpp.org/extensions/xep-0086.html */ - - try { - // Initialize - var type, code, reason, condition; - var node = $(packet); - - // First level error (connection error) - if(node.is('error')) { - // Get the value - code = node.attr('code'); - - // Specific error reason - switch(code) { - case '401': - reason = Common._e("Authorization failed"); - break; - - case '409': - reason = Common._e("Registration failed, please choose a different username"); - break; - - case '503': - reason = Common._e("Service unavailable"); - break; - - case '500': - reason = Common._e("Internal server error, try later"); - break; - - default: - reason = node.find('text').text(); - break; - } - - // Remove the general wait item (security) - Interface.removeGeneralWait(); - - // Show reconnect pane - if(Connection.current_session && Connection.connected) { - // Anonymous? - if(Utils.isAnonymous()) { - Connection.createReconnect('anonymous'); - } else { - Connection.createReconnect('normal'); - } - } - - // Show the homepage (security) - else if(!Connection.current_session || !Connection.connected) { - $('#home').show(); - Interface.title('home'); - } - - // Still connected? (security) - if(Common.isConnected()) { - con.disconnect(); - } - - Console.error('First level error received.'); - } - - // Second level error (another error) - else if(node.find('error').size()) { - type = node.find('error').attr('type'); - reason = node.find('error text').text(); - condition = packet.getElementsByTagName('error').item(0).childNodes.item(0).nodeName.replace(/-/g, ' '); - - Console.error('Second level error received.'); - } else { - return false; - } - - // Show the error board - self.show(condition, reason, type); - - // Return there's an error - return true; - } catch(e) { - Console.error('Errors.handle', e); - } - - }; - - - /** - * Handles the error reply of a packet - * @public - * @param {object} packet - * @return {boolean} - */ - self.handleReply = function(packet) { - - try { - return self.handle(packet.getNode()); - } catch(e) { - Console.error('Errors.handleReply', e); - } - - }; - - - /** - * Handles the error reply for a message - * @public - * @param {object} packet - * @return {boolean} - */ - self.handleMessage = function(packet) { - - try { - if(!self.handleReply(packet)) { - Message.handle(packet); - } - } catch(e) { - Console.error('Errors.handleMessage', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/favorites.js b/source/app/javascripts/favorites.js deleted file mode 100644 index ffbbe17..0000000 --- a/source/app/javascripts/favorites.js +++ /dev/null @@ -1,785 +0,0 @@ -/* - -Jappix - An open social platform -These are the favorites JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou - -*/ - -// Bundle -var Favorites = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Opens the favorites popup - * @public - * @return {undefined} - */ - self.open = function() { - - try { - // Popup HTML content - var html = - '
' + Common._e("Manage favorite rooms") + '
' + - - '
' + - '
' + - '
' + - '
' + - - Common._e("Change favorites") + - '
' + - - '' + - '
' + - - '
' + - '
' + - '
' + - '
' + Common._e("Select a favorite") + '
' + - - '' + - '
' + - - '
' + - '
' + - '' + - - '' + - '
' + - - '
' + - '' + - - '' + - '
' + - - '
' + - '' + - - '' + - '
' + - - '
' + - '' + - - '' + - '
' + - - '
' + - '' + - - '' + - '
' + - - '
' + - '' + - - '' + - '
' + - - '' + - '
' + - '
' + - - '' + - '
' + - '
' + - - '
' + - '
' + - - '' + Common._e("Close") + '' + - '
'; - - // Create the popup - Popup.create('favorites', html); - - // Load the favorites - self.load(); - - // Associate the events - self.instance(); - } catch(e) { - Console.error('Favorites.open', e); - } - - }; - - - /** - * Resets the favorites elements - * @public - * @return {undefined} - */ - self.reset = function() { - - try { - var path_sel = $('#favorites'); - - path_sel.find('.wait'); - path_sel.find('.fedit-terminate').hide(); - path_sel.find('.fedit-add').show(); - - path_sel.find('.fsearch-oneresult').remove(); - path_sel.find('input').val(''); - path_sel.find('.please-complete').removeClass('please-complete'); - - path_sel.find('.fedit-nick').val(Name.getNick()); - path_sel.find('.fsearch-head-server').val(HOST_MUC); - path_sel.find('.fedit-server').val(HOST_MUC); - - path_sel.find('.fedit-autojoin').removeAttr('checked'); - } catch(e) { - Console.error('Favorites.reset', e); - } - - }; - - - /** - * Quits the favorites popup - * @public - * @return {boolean} - */ - self.quit = function() { - - try { - // Destroy the popup - Popup.destroy('favorites'); - } catch(e) { - Console.error('Favorites.quit', e); - } finally { - return false; - } - - }; - - - /** - * Adds a room to the favorites - * @public - * @param {string} room_xid - * @param {string} room_name - * @return {boolean} - */ - self.addThis = function(room_xid, room_name) { - - try { - // Button path - var button_sel = $('#favorites .fsearch-results div[data-xid="' + escape(room_xid) + '"] a.one-button'); - - // Add a remove button instead of the add one - button_sel.filter('.add').replaceWith( - '' + Common._e("Remove") + '' - ); - - // Click event - button_sel.filter('.remove').click(function() { - return self.removeThis(room_xid, room_name); - }); - - // Hide the add button in the (opened?) groupchat - $('#' + hex_md5(room_xid) + ' .tools-add').hide(); - - // Add the database entry - self.display( - room_xid, - Common.explodeThis(' (', room_name, 0), Name.getNick(), '0', '' - ); - - // Publish the favorites - self.publish(); - } catch(e) { - Console.error('Favorites.addThis', e); - } finally { - return false; - } - - }; - - - /** - * Removes a room from the favorites - * @public - * @param {string} room_xid - * @param {string} room_name - * @return {boolean} - */ - self.removeThis = function(room_xid, room_name) { - - try { - // Button path - var button_sel = $('#favorites .fsearch-results div[data-xid="' + escape(room_xid) + '"] a.one-button'); - - // Add a remove button instead of the add one - button_sel.filter('.remove').replaceWith('' + Common._e("Add") + ''); - - // Click event - button_sel.filter('.add').click(function() { - return self.addThis(room_xid, room_name); - }); - - // Show the add button in the (opened?) groupchat - $('#' + hex_md5(room_xid) + ' .tools-add').show(); - - // Remove the favorite - self.remove(room_xid, true); - - // Publish the favorites - self.publish(); - } catch(e) { - Console.error('Favorites.removeThis', e); - } finally { - return false; - } - - }; - - - /** - * Edits a favorite - * @public - * @return {undefined} - */ - self.edit = function() { - - try { - // Path to favorites - var favorites_sel = $('#favorites'); - - // Reset the favorites - self.reset(); - - // Show the edit/remove button, hide the others - favorites_sel.find('.fedit-terminate').hide(); - favorites_sel.find('.fedit-edit').show(); - favorites_sel.find('.fedit-remove').show(); - - // We retrieve the values - var xid = favorites_sel.find('.fedit-head-select').val(); - var data_sel = $(Common.XMLFromString( - DataStore.getDB(Connection.desktop_hash, 'favorites', xid) - )); - - // If this is not the default room - if(xid != 'none') { - // We apply the values - favorites_sel.find('.fedit-title').val(data_sel.find('name').text()); - favorites_sel.find('.fedit-nick').val(data_sel.find('nick').text()); - favorites_sel.find('.fedit-chan').val(Common.getXIDNick(xid)); - favorites_sel.find('.fedit-server').val(Common.getXIDHost(xid)); - favorites_sel.find('.fedit-password').val(data_sel.find('password').text()); - - if(data_sel.find('autojoin').text() == 'true') { - favorites_sel.find('.fedit-autojoin').attr('checked', true); - } - } - } catch(e) { - Console.error('Favorites.edit', e); - } - - }; - - - /** - * Terminate a favorite editing - * @public - * @param {string} type - * @return {boolean} - */ - self.terminateThis = function(type) { - - try { - // Path to favorites - var favorites_sel = $('#favorites'); - - // We get the values of the current edited groupchat - var old_xid = favorites_sel.find('.fedit-head-select').val(); - - var title = favorites_sel.find('.fedit-title').val(); - var nick = favorites_sel.find('.fedit-nick').val(); - var room = favorites_sel.find('.fedit-chan').val(); - var server = favorites_sel.find('.fedit-server').val(); - var xid = room + '@' + server; - var password = favorites_sel.find('.fedit-password').val(); - var autojoin = 'false'; - - if(favorites_sel.find('.fedit-autojoin').filter(':checked').size()) { - autojoin = 'true'; - } - - // We check the missing values and send this if okay - if((type == 'add') || (type == 'edit')) { - if(title && nick && room && server) { - // Remove the edited room - if(type == 'edit') { - self.remove(old_xid, true); - } - - // Display the favorites - self.display(xid, title, nick, autojoin, password); - - // Reset the inputs - self.reset(); - } else { - favorites_sel.find('input[required]').each(function() { - var select = $(this); - - if(!select.val()) { - $(document).oneTime(10, function() { - select.addClass('please-complete').focus(); - }); - } else { - select.removeClass('please-complete'); - } - }); - } - } else if(type == 'remove') { - self.remove(old_xid, true); - - // Reset the inputs - self.reset(); - } - - // Publish the new favorites - self.publish(); - - Console.info('Action on this bookmark: ' + room + '@' + server + ' / ' + type); - } catch(e) { - Console.error('Favorites.terminateThis', e); - } finally { - return false; - } - - }; - - - /** - * Removes a favorite - * @public - * @param {string} xid - * @param {boolean} database - * @return {undefined} - */ - self.remove = function(xid, database) { - - try { - // We remove the target favorite everywhere needed - $('.buddy-conf-groupchat-select option[value="' + xid + '"]').remove(); - $('.fedit-head-select option[value="' + xid + '"]').remove(); - - // Must remove it from database? - if(database) { - DataStore.removeDB(Connection.desktop_hash, 'favorites', xid); - } - } catch(e) { - Console.error('Favorites.remove', e); - } - - }; - - - /** - * Sends a favorite to the XMPP server - * @public - * @return {undefined} - */ - self.publish = function() { - - try { - var iq = new JSJaCIQ(); - iq.setType('set'); - - var query = iq.setQuery(NS_PRIVATE); - var storage = query.appendChild(iq.buildNode('storage', { - 'xmlns': NS_BOOKMARKS - })); - - // We generate the XML - var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'favorites_(.+)'); - - for(var i = 0; i < DataStore.storageDB.length; i++) { - // Get the pointer values - var current = DataStore.storageDB.key(i); - - // If the pointer is on a stored favorite - if(current.match(db_regex)) { - var data_sel = $(Common.XMLFromString( - DataStore.storageDB.getItem(current) - )); - - var xid = data_sel.find('xid').text(); - var rName = data_sel.find('name').text(); - var nick = data_sel.find('nick').text(); - var password = data_sel.find('password').text(); - var autojoin = data_sel.find('autojoin').text(); - - // We create the node for this groupchat - var item = storage.appendChild( - iq.buildNode('conference', { - 'name': rName, - 'jid': xid, - 'autojoin': autojoin, - xmlns: NS_BOOKMARKS - }) - ); - - item.appendChild(iq.buildNode('nick', { - xmlns: NS_BOOKMARKS - }, nick)); - - if(password) { - item.appendChild(iq.buildNode('password', { - xmlns: NS_BOOKMARKS - }, password)); - } - - Console.info('Bookmark sent: ' + xid); - } - } - - con.send(iq); - } catch(e) { - Console.error('Favorites.publish', e); - } - - }; - - - /** - * Gets a list of the MUC items on a given server - * @public - * @return {undefined} - */ - self.getGCList = function() { - - try { - var path_sel = $('#favorites'); - var groupchat_server = $('.fsearch-head-server').val(); - - // We reset some things - path_sel.find('.fsearch-oneresult').remove(); - path_sel.find('.fsearch-noresults').hide(); - path_sel.find('.wait').show(); - - var iq = new JSJaCIQ(); - iq.setType('get'); - iq.setTo(groupchat_server); - - iq.setQuery(NS_DISCO_ITEMS); - - con.send(iq, self.handleGCList); - } catch(e) { - Console.error('Favorites.getGCList', e); - } - - }; - - - /** - * Handles the MUC items list - * @public - * @param {object} iq - * @return {undefined} - */ - self.handleGCList = function(iq) { - - try { - var path_sel = $('#favorites'); - var from = Common.fullXID(Common.getStanzaFrom(iq)); - - if(!iq || (iq.getType() != 'result')) { - Board.openThisError(3); - - path_sel.find('.wait').hide(); - - Console.error('Error while retrieving the rooms: ' + from); - } - - else { - var handleXML = iq.getQuery(); - - if($(handleXML).find('item').size()) { - // Initialize the HTML code - var html = ''; - - $(handleXML).find('item').each(function() { - var this_sel = $(this); - - var room_xid = this_sel.attr('jid'); - var room_name = this_sel.attr('name'); - - if(room_xid && room_name) { - // Escaped values - var escaped_xid = Utils.encodeOnclick(room_xid); - var escaped_name = Utils.encodeOnclick(room_name); - - // Initialize the room HTML - html += '
' + - '
' + room_name.htmlEnc() + '
' + - '' + Common._e("Join") + ''; - - // This room is yet a favorite - if(DataStore.existDB(Connection.desktop_hash, 'favorites', room_xid)) { - html += '' + - Common._e("Remove") + - ''; - } else { - html += '' + - Common._e("Add") + - ''; - } - - // Close the room HTML - html += '
'; - } - }); - - // Append this code to the popup - path_sel.find('.fsearch-results').append(html); - } else { - path_sel.find('.fsearch-noresults').show(); - } - - Console.info('Rooms retrieved: ' + from); - } - - path_sel.find('.wait').hide(); - } catch(e) { - Console.error('Favorites.handleGCList', e); - } - - }; - - - /** - * Joins a groupchat from favorites - * @public - * @param {string} room - * @return {boolean} - */ - self.join = function(room) { - - try { - self.quit(); - - Chat.checkCreate( - room, - 'groupchat', - '', - '', - Common.getXIDNick(room) - ); - } catch(e) { - Console.error('Favorites.join', e); - } finally { - return false; - } - - }; - - - /** - * Displays a given favorite - * @public - * @param {string} xid - * @param {string} name - * @param {string} nick - * @param {boolean} autojoin - * @param {string} password - * @return {undefined} - */ - self.display = function(xid, name, nick, autojoin, password) { - - try { - // Generate the HTML code - var html = ''; - - // Remove the existing favorite - self.remove(xid, false); - - // We complete the select forms - $('#roster .gc-join-first-option, #favorites .fedit-head-select-first-option').after(html); - - // We store the informations - var value = '' + - '' + xid.htmlEnc() + '' + - '' + name.htmlEnc() + '' + - '' + nick.htmlEnc() + '' + - '' + autojoin.htmlEnc() + '' + - '' + password.htmlEnc() + '' + - ''; - - DataStore.setDB(Connection.desktop_hash, 'favorites', xid, value); - } catch(e) { - Console.error('Favorites.display', e); - } - - }; - - - /** - * Loads the favorites for the popup - * @public - * @return {undefined} - */ - self.load = function() { - - try { - // Initialize the HTML code - var html = ''; - - // Read the database - var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'favorites_(.+)'); - - for(var i = 0; i < DataStore.storageDB.length; i++) { - // Get the pointer values - var current = DataStore.storageDB.key(i); - - // If the pointer is on a stored favorite - if(current.match(db_regex)) { - var data = Common.XMLFromString(DataStore.storageDB.getItem(current)); - - // Add the current favorite to the HTML code - html += ''; - } - } - - // Generate specific HTML code - var favorites_bubble = '' + html; - - var favorites_popup = '' + html; - - // Append the HTML code - $('#roster .buddy-conf-groupchat-select').html(favorites_bubble); - $('#favorites .fedit-head-select').html(favorites_popup); - } catch(e) { - Console.error('Favorites.load', e); - } - - }; - - - /** - * Plugin launcher - * @public - * @return {undefined} - */ - self.instance = function() { - - try { - var favorites_sel = $('#favorites'); - - // Keyboard events - favorites_sel.find('.fsearch-head-server').keyup(function(e) { - if(e.keyCode == 13) { - var this_sel = $(this); - - // No value? - if(!this_sel.val()) { - this_sel.val(HOST_MUC); - } - - // Get the list - self.getGCList(); - } - }); - - favorites_sel.find('.fedit-line input').keyup(function(e) { - if(e.keyCode == 13) { - // Edit a favorite - if(favorites_sel.find('.fedit-edit').is(':visible')) { - self.terminateThis('edit'); - } else { - self.terminateThis('add'); - } - } - }); - - // Change events - $('.fedit-head-select').change(self.edit); - - // Click events - favorites_sel.find('.room-switcher').click(function() { - favorites_sel.find('.favorites-content').hide(); - self.reset(); - }); - - favorites_sel.find('.room-list').click(function() { - favorites_sel.find('.favorites-edit').show(); - }); - - favorites_sel.find('.room-search').click(function() { - favorites_sel.find('.favorites-search').show(); - self.getGCList(); - }); - - favorites_sel.find('.fedit-add').click(function() { - return self.terminateThis('add'); - }); - - favorites_sel.find('.fedit-edit').click(function() { - return self.terminateThis('edit'); - }); - - favorites_sel.find('.fedit-remove').click(function() { - return self.terminateThis('remove'); - }); - - favorites_sel.find('.bottom .finish').click(function() { - return self.quit(); - }); - } catch(e) { - Console.error('Favorites.instance', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/features.js b/source/app/javascripts/features.js deleted file mode 100644 index 2e7ba1e..0000000 --- a/source/app/javascripts/features.js +++ /dev/null @@ -1,457 +0,0 @@ -/* - -Jappix - An open social platform -This is the server features JS script for Jappix - -------------------------------------------------- - -License: AGPL -Author: Valérian Saliou, Maranda - -*/ - -// Bundle -var Features = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Constants */ - self.SERVER_NAMES = [ - 'metronome', - 'prosody', - 'ejabberd', - 'jabberd', - 'openfire', - 'tigase', - 'isode' - ]; - - - /* Variables */ - self.server_name = null; - - - /** - * Gets the features of a server - * @public - * @return {undefined} - */ - self.get = function() { - - /* REF: http://xmpp.org/extensions/xep-0030.html */ - - try { - // Get the main values - var to = Utils.getServer(); - var caps = con.server_caps; - var xml = null; - - // Try to get the stored data - if(caps) { - xml = Common.XMLFromString( - DataStore.getPersistent('global', 'caps', caps) - ); - } - - // Any stored data? - if(xml) { - self.handle(xml); - - Console.log('Read server CAPS from cache.'); - } else { - // Not stored (or no CAPS)! - var iq = new JSJaCIQ(); - - iq.setTo(to); - iq.setType('get'); - iq.setQuery(NS_DISCO_INFO); - - con.send(iq, Caps.handleDiscoInfos); - - Console.log('Read server CAPS from network.'); - } - } catch(e) { - Console.error('Features.get', e); - } - - }; - - - /** - * Handles the features of a server - * @public - * @param {string} xml - * @return {boolean} - */ - self.handle = function(xml) { - - try { - // Selector - var selector = $(xml); - - // Functions - var check_feature_fn = function(namespace) { - // This weird selector fixes an IE8 bug... - return (selector.find('feature').filter(function() { - return ($(this).attr('var') == namespace); - }).size() > 0 ? true : false); - }; - - // Markers - var namespaces = [NS_PUBSUB, NS_PUBSUB_CN, NS_URN_MAM, NS_COMMANDS, NS_URN_CARBONS, NS_URN_CORRECT]; - - var identity = selector.find('identity'); - - var cur_feature; - var features = { - // This weird selector fixes the same IE8 bug as above... - 'pep': (identity.filter(function() { - var this_sel = $(this); - return (this_sel.attr('category') == 'pubsub' && this_sel.attr('type') == 'pep'); - }).size() && true) - }; - - $.each(namespaces, function(n, namespace) { - features[namespace] = check_feature_fn(namespace); - - if(features[namespace] === true) { - self.enable(namespace); - } - }); - - // Retrieve server identity - self.server_name = self._normalizeServerName( - identity.filter('[category="server"]').attr('name') - ); - - // Enable the pep elements if available - if(features.pep === true) { - // Update our database - self.enable('pep'); - - // Get the PEP nodes to initiate - Microblog.getInit(); - PEP.getInitGeoloc(); - - // Get the notifications - Notification.get(); - - // Geolocate the user - PEP.geolocate(); - - // Enable microblogging send tools - Microblog.wait('sync'); - $('.postit.attach').css('display', 'block'); - - Console.info('XMPP server supports PEP.'); - } else { - Microblog.wait('unsync'); - - Console.warn('XMPP server does not support PEP.'); - } - - // Hide the private life fieldset if nothing to show - if(features.pep === false && features[NS_URN_MAM] === false) { - $('#options fieldset.privacy').hide(); - } - - // Apply the features - self.apply('talk'); - - // Process the roster height - if(features.pep === true) { - Roster.adapt(); - } - - // Enable Message Carbons? - if(features[NS_URN_CARBONS] === true) { - Carbons.enable(); - } - } catch(e) { - Console.error('Features.handle', e); - } finally { - return false; - } - - }; - - - /** - * The function to apply the features to an element - * @public - * @param {string} id - * @return {undefined} - */ - self.apply = function(id) { - - try { - // Path to the elements - var path = '#' + id + ' .'; - - // PEP features - if(self.enabledPEP()) { - $(path + 'pep-hidable').show(); - } - - // PubSub features - if(self.enabledPubSub()) { - $(path + 'pubsub-hidable').show(); - } - - // PubSub Config-Node features - if(self.enabledPubSubCN()) { - $(path + 'pubsub-hidable-cn').show(); - } - - // MAM features - if(self.enabledMAM()) { - $(path + 'mam-hidable').show(); - $(path + 'mam-showable').hide(); - } - - // MAM Purge - if(self.enabledMAMPurge()) { - $(path + 'mam-purge-hidable').show(); - } - - // Message correction features - if(self.enabledCorrection()) { - $(path + 'correction-hidable').show(); - } - - // Commands features - if(self.enabledCommands()) { - $(path + 'commands-hidable').show(); - } - - // XMPP links (browser feature) - if(navigator.registerProtocolHandler) { - $(path + 'xmpplinks-hidable').show(); - } - } catch(e) { - Console.error('Features.apply', e); - } - - }; - - - /** - * Enables a feature - * @public - * @param {string} feature - * @return {undefined} - */ - self.enable = function(feature) { - - try { - DataStore.setDB(Connection.desktop_hash, 'feature', feature, 'true'); - } catch(e) { - Console.error('Features.enable', e); - } - - }; - - - /** - * Checks if a feature is enabled - * @public - * @param {string} feature - * @return {boolean} - */ - self.isEnabled = function(feature) { - - try { - return DataStore.getDB(Connection.desktop_hash, 'feature', feature) === 'true'; - } catch(e) { - Console.error('Features.isEnabled', e); - } - - }; - - - /** - * Returns the XMPP server PEP support - * @public - * @return {boolean} - */ - self.enabledPEP = function() { - - try { - return self.isEnabled('pep'); - } catch(e) { - Console.error('Features.enabledPEP', e); - } - - }; - - - /** - * Returns the XMPP server PubSub support - * @public - * @return {boolean} - */ - self.enabledPubSub = function() { - - try { - return self.isEnabled(NS_PUBSUB); - } catch(e) { - Console.error('Features.enabledPubSub', e); - } - - }; - - - /** - * Returns the XMPP server PubSub Config-Node support - * @public - * @return {boolean} - */ - self.enabledPubSubCN = function() { - - try { - return self.isEnabled(NS_PUBSUB_CN); - } catch(e) { - Console.error('Features.enabledPubSubCN', e); - } - - }; - - - /** - * Returns the XMPP server MAM support - * @public - * @return {boolean} - */ - self.enabledMAM = function() { - - try { - return self.isEnabled(NS_URN_MAM); - } catch(e) { - Console.error('Features.enabledMAM', e); - } - - }; - - - /** - * Returns Metronome MAM Purge support - * @public - * @return {boolean} - */ - self.enabledMAMPurge = function() { - - try { - if(self.isEnabled(NS_URN_MAM)) { - return self.isEnabled(NS_METRONOME_MAM_PURGE); - } else { - return false; - } - } catch(e) { - Console.error('Features.enabledMAMPurge', e); - } - - }; - - - /** - * Returns the XMPP server Carbons support - * @public - * @return {boolean} - */ - self.enabledCarbons = function() { - - try { - return self.isEnabled(NS_URN_CARBONS); - } catch(e) { - Console.error('Features.enabledCarbons', e); - } - - }; - - - /** - * Returns the XMPP server commands support - * @public - * @return {boolean} - */ - self.enabledCommands = function() { - - try { - return self.isEnabled(NS_COMMANDS); - } catch(e) { - Console.error('Features.enabledCommands', e); - } - - }; - - - /** - * Returns the XMPP server correction support - * @public - * @return {boolean} - */ - self.enabledCorrection = function() { - - try { - return self.isEnabled(NS_URN_CORRECT); - } catch(e) { - Console.error('Features.enabledCorrection', e); - } - - }; - - - /** - * Normalizes the XMPP server name - * @private - * @return {string} - */ - self._normalizeServerName = function(name) { - - try { - var cur_r; - - for(var i in self.SERVER_NAMES) { - cur_r = new RegExp(self.SERVER_NAMES[i], 'gi'); - - if(cur_r.exec(name) !== null) { - name = self.SERVER_NAMES[i]; - break; - } - } - } catch(e) { - Console.error('Features._normalizeServerName', e); - } finally { - return name; - } - - }; - - - /** - * Returns the XMPP server name - * @public - * @return {string} - */ - self.getServerName = function() { - - try { - return self.server_name; - } catch(e) { - Console.error('Features.getServerName', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/filter.js b/source/app/javascripts/filter.js deleted file mode 100644 index bda2f2e..0000000 --- a/source/app/javascripts/filter.js +++ /dev/null @@ -1,491 +0,0 @@ -/* - -Jappix - An open social platform -These are the filtering JS script for Jappix - -------------------------------------------------- - -License: AGPL -Authors: Valérian Saliou, Maranda - -*/ - -// Bundle -var Filter = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Constants */ - self.message_regex = { - 'commands': { - 'me': /((^)|((.+)(>)))(\/me )([^<]+)/ - }, - - 'emotes': { - 'angry': [ - /(:-?@)($|\s|<)/gi, - '$2' - ], - - 'bat': [ - /(:-?\[)($|\s|<)/gi, - '$2' - ], - - 'beer': [ - /(\(B\))($|\s|<)/g, - '$2' - ], - - 'biggrin': [ - /((:-?D)|(XD))($|\s|<)/gi, - '$4' - ], - - 'blush': [ - /(:-?\$)($|\s|<)/gi, - '$2' - ], - - 'boy': [ - /(\(Z\))($|\s|<)/g, - '$2' - ], - - 'brflower': [ - /(\(W\))($|\s|<)/g, - '$2' - ], - - 'brheart': [ - /((<\/3)|(\(U\)))($|\s|<)/g, - '$4' - ], - - 'coffee': [ - /(\(C\))($|\s|<)/g, - '$2' - ], - - 'coolglasses': [ - /((8-\))|(\(H\)))($|\s|<)/g, - '$4' - ], - - 'cry': [ - /(:'-?\()($|\s|<)/gi, - '$2' - ], - - 'cuffs': [ - /(\(%\))($|\s|<)/g, - '$2' - ], - - 'devil': [ - /(\]:-?>)($|\s|<)/gi, - '$2' - ], - - 'drink': [ - /(\(D\))($|\s|<)/g, - '$2' - ], - - 'flower': [ - /(@}->--)($|\s|<)/gi, - '$2' - ], - - 'frowning': [ - /((:-?\/)|(:-?S))($|\s|<)/gi, - '$4' - ], - - 'girl': [ - /(\(X\))($|\s|<)/g, - '$2' - ], - - 'heart': [ - /((<3)|(\(L\)))($|\s|<)/g, - '$4' - ], - - 'hugleft': [ - /(\(}\))($|\s|<)/g, - '$2' - ], - - 'hugright': [ - /(\({\))($|\s|<)/g, - '$2' - ], - - 'kis': [ - /(:-?{})($|\s|<)/gi, - '$2' - ], - - 'lamp': [ - /(\(I\))($|\s|<)/g, - '$2' - ], - - 'lion': [ - /(:-?3)($|\s|<)/gi, - '$2' - ], - - 'mail': [ - /(\(E\))($|\s|<)/g, - '$2' - ], - - 'moon': [ - /(\(S\))($|\s|<)/g, - '$2' - ], - - 'music': [ - /(\(8\))($|\s|<)/g, - '$2' - ], - - 'oh': [ - /((=-?O)|(:-?O))($|\s|<)/gi, - '$4' - ], - - 'phone': [ - /(\(T\))($|\s|<)/g, - '$2' - ], - - 'photo': [ - /(\(P\))($|\s|<)/g, - '$2' - ], - - 'puke': [ - /(:-?!)($|\s|<)/gi, - '$2' - ], - - 'pussy': [ - /(\(@\))($|\s|<)/g, - '$2' - ], - - 'rainbow': [ - /(\(R\))($|\s|<)/g, - '$2' - ], - - 'smile': [ - /(:-?\))($|\s|<)/gi, - '$2' - ], - - 'star': [ - /(\(\*\))($|\s|<)/g, - '$2' - ], - - 'stare': [ - /(:-?\|)($|\s|<)/gi, - '$2' - ], - - 'thumbdown': [ - /(\(N\))($|\s|<)/g, - '$2' - ], - - 'thumbup': [ - /(\(Y\))($|\s|<)/g, - '$2' - ], - - 'tongue': [ - /(:-?P)($|\s|<)/gi, - '$2' - ], - - 'unhappy': [ - /(:-?\()($|\s|<)/gi, - '$2' - ], - - 'wink': [ - /(;-?\))($|\s|<)/gi, - '$2' - ] - - }, - - 'formatting': { - 'bold': [ - /(^|\s|>|\()((\*)([^<>'"\*]+)(\*))($|\s|<|\))/gi, - '$1$2$6' - ], - - 'italic': [ - /(^|\s|>|\()((\/)([^<>'"\/]+)(\/))($|\s|<|\))/gi, - '$1$2$6' - ], - - 'underline': [ - /(^|\s|>|\()((_)([^<>'"_]+)(_))($|\s|<|\))/gi, - '$1$2$6' - ] - } - - }; - - self.xhtml_allow = { - 'elements': [ - 'a', - 'abbr', - 'acronym', - 'address', - 'blockquote', - 'body', - 'br', - 'cite', - 'code', - 'dd', - 'dfn', - 'div', - 'dt', - 'em', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'html', - 'kbd', - 'li', - 'ol', - 'p', - 'pre', - 'q', - 'samp', - 'span', - 'strong', - 'title', - 'ul', - 'var' - ], - - 'attributes': [ - 'accesskey', - 'alt', - 'charset', - 'cite', - 'class', - 'height', - 'href', - 'hreflang', - 'id', - 'longdesc', - 'profile', - 'rel', - 'rev', - 'src', - 'style', - 'tabindex', - 'title', - 'type', - 'uri', - 'version', - 'width', - 'xml:lang', - 'xmlns' - ] - }; - - - /** - * Generates a given emoticon HTML code - * @public - * @param {string} image - * @param {string} text - * @param {string} after - * @return {string} - */ - self.emoteImage = function(image, text, after) { - - try { - return ' ' + Common.encodeQuotes(text) + ' ' + after; - } catch(e) { - Console.error('Filter.emoteImage', e); - } - - }; - - - /** - * Filters a given message - * @public - * @param {string} message - * @param {string} nick - * @param {string} html_escape - * @return {string} - */ - self.message = function(message, nick, html_escape) { - - try { - var filtered = message; - - // We encode the HTML special chars - if(html_escape) { - filtered = filtered.htmlEnc(); - } - - // Security: don't filter huge messages (avoids crash attacks) - if(filtered.length < 10000) { - // /me command - filtered = filtered.replace(self.message_regex.commands.me, nick + ' $7'); - - // We replace the smilies text into images - var cur_emote; - - for(var cur_emote_name in self.message_regex.emotes) { - cur_emote = self.message_regex.emotes[cur_emote_name]; - - filtered = filtered.replace( - cur_emote[0], - self.emoteImage( - cur_emote_name, - '$1', - cur_emote[1] - ) - ); - } - - // Text formatting - var cur_formatting; - - for(var cur_formatting_name in self.message_regex.formatting) { - cur_formatting = self.message_regex.formatting[cur_formatting_name]; - - filtered = filtered.replace( - cur_formatting[0], - cur_formatting[1] - ); - } - - // Add the links - if(html_escape) { - filtered = Links.apply(filtered, 'desktop'); - } - - // Filter integratebox links - filtered = IntegrateBox.filter(filtered); - } - - return filtered; - } catch(e) { - Console.error('Filter.message', e); - } - - }; - - - /** - * Returns whether XHTML body exists or not - * @public - * @param {DOM} xhtml_sel - * @return {boolean} - */ - self.has_xhtml_body = function(xhtml_sel) { - - var has_xhtml_body = false; - - try { - xhtml_sel.find('*').each(function() { - if($(this).text()) { - has_xhtml_body = true; - return false; - } - }); - } catch(e) { - Console.error('Filter.has_xhtml_body', e); - } finally { - return has_xhtml_body; - } - - }; - - - /** - * Filters a xHTML message to be displayed in Jappix - * @public - * @param {string} code - * @return {string} - */ - self.xhtml = function(code) { - - try { - var code_sel = $(code); - - // Check if Filter for XHTML-IM images is enabled - if(DataStore.getDB(Connection.desktop_hash, 'options', 'no-xhtml-images') != '1') { - self.xhtml_allow.elements.push("img"); - } - - // Remove forbidden elements - code_sel.find('html body *').each(function() { - // This element is not authorized - if(!Utils.existArrayValue(self.xhtml_allow.elements, (this).nodeName.toLowerCase())) { - $(this).remove(); - } - }); - - // Remove forbidden attributes - code_sel.find('html body *').each(function() { - // Put a pointer on this element (jQuery way & normal way) - var cSelector = $(this); - var cElement = (this); - - // Loop the attributes of the current element - $(cElement.attributes).each(function(index) { - // Read the current attribute - var cAttr = cElement.attributes[index]; - var cName = cAttr.name; - var cVal = cAttr.value; - - // This attribute is not authorized, or contains JS code - if(!Utils.existArrayValue(self.xhtml_allow.attributes, cName.toLowerCase()) || - ((cVal.toLowerCase()).match(/(^|"|')javascript:/))) { - cSelector.removeAttr(cName); - } - }); - }); - - // Filter some other elements - code_sel.find('a').attr('target', '_blank'); - - return code_sel.find('html body').html(); - } catch(e) { - Console.error('Filter.xhtml', e); - } - - }; - - - /** - * Return class scope - */ - return self; - -})(); \ No newline at end of file diff --git a/source/app/javascripts/groupchat.js b/source/app/javascripts/groupchat.js deleted file mode 100644 index 21ed7da..0000000 --- a/source/app/javascripts/groupchat.js +++ /dev/null @@ -1,865 +0,0 @@ -/* - -Jappix - An open social platform -These are the groupchat JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Authors: Valérian Saliou, Maranda, Eric - -*/ - -// Bundle -var Groupchat = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /* Variables */ - self.join_suggest = []; - - - /** - * Apply generate events - * @private - * @param {object} input_sel - * @param {string} hash - * @param {string} room - * @return {undefined} - */ - self._createEvents = function(input_sel, hash, room) { - - try { - self._createEventsInput(input_sel, hash); - self._createEventsKey(input_sel, hash, room); - } catch(e) { - Console.error('Groupchat._createEvents', e); - } - - }; - - - /** - * Apply generate events (input) - * @private - * @param {object} input_sel - * @param {string} hash - * @return {undefined} - */ - self._createEventsInput = function(input_sel, hash) { - - try { - // Focus event - input_sel.focus(function() { - // Clean notifications for this chat - Interface.chanCleanNotify(hash); - - // Store focus on this chat! - Interface.chat_focus_hash = hash; - }); - - // Blur event - input_sel.blur(function() { - // Reset storage about focus on this chat! - if(Interface.chat_focus_hash == hash) { - Interface.chat_focus_hash = null; - } - - // Reset autocompletion - Autocompletion.reset(hash); - }); - } catch(e) { - Console.error('Groupchat._createEventsInput', e); - } - - }; - - - /** - * Apply generate events (key) - * @private - * @param {object} input_sel - * @param {string} hash - * @param {string} room - * @return {undefined} - */ - self._createEventsKey = function(input_sel, hash, room) { - - try { - // Lock to the input - input_sel.keydown(function(e) { - // Enter key - if(e.keyCode == 13) { - // If shift key (without any others modifiers) was pressed, add a new line - if(e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) { - input_sel.val(input_sel.val() + '\n'); - } else { - if(Correction.isIn(room) === true) { - var corrected_value = input_sel.val().trim(); - - if(corrected_value) { - // Send the corrected message - Correction.send(room, 'groupchat', corrected_value); - } - - Correction.leave(room); - } else { - // Send the message - Message.send(hash, 'groupchat'); - - // Reset the composing database entry - DataStore.setDB(Connection.desktop_hash, 'chatstate', room, 'off'); - } - } - - return false; - } - - // Remove chars (leave correction) - else if(e.keyCode == 8) { - // Leave correction mode? (another way, by flushing input value progressively) - if(Correction.isIn(room) === true && !input_sel.val()) { - Correction.leave(room); - } - } - - // Tabulation key (without any modifiers) - else if(!e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && e.keyCode == 9) { - Autocompletion.create(hash); - - return false; - } - - // Reset the autocompleter - else { - Autocompletion.reset(hash); - } - }); - - input_sel.keyup(function(e) { - if(e.keyCode == 27) { - // Escape key - input_sel.val(''); - - // Leave correction mode? (simple escape way) - if(Correction.isIn(room) === true) { - Correction.leave(room); - } - } else { - Correction.detect(room, input_sel); - } - }); - } catch(e) { - Console.error('Groupchat._createEventsKey', e); - } - - }; - - - /** - * Apply suggest check events - * @private - * @return {undefined} - */ - self._suggestCheckEvents = function() { - - try { - // Click events - $('#suggest .content a.one').click(function() { - var this_sel = $(this); - - // Add/remove the active class - this_sel.toggleClass('active'); - - // We require at least one room to be chosen - if(Common.exists('#suggest .content a.one.active')) { - $('#suggest a.next').removeClass('disabled'); - } else { - $('#suggest a.next').addClass('disabled'); - } - - return false; - }); - - $('#suggest a.next').click(function() { - var this_sel = $(this); - - // Disabled? - if(this_sel.hasClass('disabled')) { - return false; - } - - // Store groupchats to join? - if(this_sel.is('.continue')) { - $('#suggest .content a.one.active').each(function() { - self.join_suggest.push( - $(this).attr('data-xid') - ); - }); - } - - // Switch to talk UI - $('#suggest').remove(); - Connection.triggerConnected(); - - return false; - }); - } catch(e) { - Console.error('Groupchat._suggestCheckEvents', e); - } - - }; - - - /** - * Displays the MUC admin elements - * @public - * @param {string} affiliation - * @param {string} id - * @param {string} xid - * @param {number} statuscode - * @return {undefined} - */ - self.openAdmin = function(affiliation, id, xid, statuscode) { - - try { - // We must be in the "login" mode - if(Utils.isAnonymous()) { - return; - } - - // We check if the user is a room owner or administrator to give him privileges - if(affiliation == 'owner' || affiliation == 'admin') { - $('#' + id + ' .tools-mucadmin').show(); - } - - // We check if the room hasn't been yet created - if(statuscode == 201) { - Board.openThisInfo(4); - } - - // We add the click event - $('#' + id + ' .tools-mucadmin').click(function() { - MUCAdmin.open(xid, affiliation); - }); - } catch(e) { - Console.error('Groupchat.openAdmin', e); - } - - }; - - - /** - * Initializes a connection with a MUC groupchat - * @public - * @param {string} room - * @param {string} nickname - * @param {string} password - * @return {boolean} - */ - self.getMUC = function(room, nickname, password) { - - try { - // Room hash - var hash = hex_md5(room); - - // Reset the elements - $('#' + hash + ' .muc-ask').remove(); - $('#' + hash + ' .compose').show(); - - // No nickname? - if(!nickname) { - // Get some values - if(!Utils.isAnonymous()) { - nickname = Name.getNick(); - } else { - nickname = ANONYMOUS_NICK; - } - - // If the nickname could not be retrieved, ask it - if(!nickname) { - self.generateMUCAsk('nickname', room, hash, nickname, password); - } - } - - // Got our nickname? - if(nickname) { - // Get our general presence - var show = DataStore.getDB(Connection.desktop_hash, 'presence-show', 1); - var status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status'); - - // Set my nick - $('#' + hash).attr('data-nick', escape(nickname)); - - // Send the appropriate presence - Presence.send(room + '/' + nickname, '', show, status, '', true, password, self.handleMUC); - } - } catch(e) { - Console.error('Groupchat.getMUC', e); - } finally { - return false; - } - - }; - - - /** - * Handles the MUC main elements - * @public - * @param {object} presence - * @return {undefined} - */ - self.handleMUC = function(presence) { - - try { - // We get the xml content - var xml = presence.getNode(); - var from = Common.fullXID(Common.getStanzaFrom(presence)); - var room = Common.bareXID(from); - var nickname = Common.thisResource(from); - var hash = hex_md5(room); - var id = presence.getID(); - - // No ID: must fix M-Link bug - if(id === null) { - id = 1; - presence.setID(id); - } - - Console.info('First MUC presence: ' + from); - - // Catch the errors - if(!Errors.handle(xml)) { - // Define some stuffs - var muc_user = $(xml).find('x[xmlns="' + NS_MUC_USER + '"]'); - var affiliation = muc_user.find('item').attr('affiliation'); - var statuscode = parseInt(muc_user.find('status').attr('code')); - - // Handle my presence - Presence.handle(presence); - - // Configure the new room - if(affiliation == 'owner' || affiliation == 'admin') { - self._initialConfiguration(id, room); - } - - // Check if I am a room owner - self.openAdmin(affiliation, hash, room, statuscode); - - // Tell the MUC we can notify the incoming presences - $(document).oneTime('15s', function() { - $('#' + hash).attr('data-initial', 'true'); - }); - - // Enable the chatting input - $(document).oneTime(10, function() { - $('#' + hash + ' .message-area').removeAttr('disabled').focus(); - }); - } - - // A password is required - else if($(xml).find('error[type="auth"] not-authorized').size()) { - self.generateMUCAsk('password', room, hash, nickname); - } - - // There's a nickname conflict - else if($(xml).find('error[type="cancel"] conflict').size()) { - self.generateMUCAsk('nickname', room, hash); - } - } catch(e) { - Console.error('Groupchat.handleMUC', e); - } - - }; - - - /** - * Generates a correct MUC asker - * @public - * @param {string} type - * @param {string} room - * @param {string} hash - * @param {string} nickname - * @param {string} password - * @return {undefined} - */ - self.generateMUCAsk = function(type, room, hash, nickname, password) { - - try { - // Generate the path to the elements - var path_to = '#' + hash + ' .muc-ask'; - - // Define the label text - var label_text; - - switch(type) { - case 'nickname': - label_text = Common._e("Nickname"); - break; - - case 'password': - label_text = Common._e("Password"); - break; - } - - // Create the HTML markup - $('#' + hash + ' .compose').hide(); - - $('#' + hash).append( - '
' + - '' + - '' + - '
' - ); - - // When a key is pressed in the input - $(path_to + ' input').keyup(function(e) { - var value_input = $(this).val(); - - // Enter key pressed - if(e.keyCode == 13) { - // $.trim() fixes #304 - if(type == 'nickname' && $.trim(value_input)) { - nickname = $.trim(value_input); - return self.getMUC(room, nickname, password); - } - - if(type == 'password' && value_input) { - password = value_input; - return self.getMUC(room, nickname, password); - } - } - }); - - // Focus on the input - $(document).oneTime(10, function() { - $(path_to + ' input').focus(); - }); - } catch(e) { - Console.error('Groupchat.generateMUCAsk', e); - } - - }; - - - /** - * Creates a new groupchat - * @public - * @param {string} hash - * @param {string} room - * @param {string} chan - * @param {string} nickname - * @param {string} password - * @return {undefined} - */ - self.create = function(hash, room, chan, nickname, password) { - - /* REF: http://xmpp.org/extensions/xep-0045.html */ - - try { - Console.info('New groupchat: ' + room); - - // Create the chat content - Chat.generate('groupchat', hash, room, chan); - - // Create the chat switcher - Chat.generateSwitch('groupchat', hash, room, chan); - - // The icons-hover functions - Tooltip.icons(room, hash); - - // Click event on the add tool - $('#' + hash + ' .tools-add').click(function() { - // Hide the icon (to tell the user all is okay) - $(this).hide(); - - // Add the groupchat to the user favorites - Favorites.addThis(room, chan); - }); - - // Must show the add button? - if(!DataStore.existDB(Connection.desktop_hash, 'favorites', room)) { - $('#' + hash + ' .tools-add').show(); - } - - // The event handlers - var input_sel = $('#' + hash + ' .message-area'); - self._createEvents(input_sel, hash, room); - - // Chatstate events - ChatState.events(input_sel, room, hash, 'groupchat'); - - // Get the current muc informations and content - self.getMUC(room, nickname, password); - } catch(e) { - Console.error('Groupchat.create', e); - } - - }; - - - /** - * Generates a groupchat to join array - * @public - * @return {object} - */ - self.arrayJoin = function() { - - try { - // Values array - var muc_arr = [GROUPCHATS_JOIN]; - var new_arr = []; - - // Try to split it - if(GROUPCHATS_JOIN.indexOf(',') != -1) { - muc_arr = GROUPCHATS_JOIN.split(','); - } - - for(var i in muc_arr) { - // Get the current value - var muc_current = $.trim(muc_arr[i]); - - // No current value? - if(!muc_current) { - continue; - } - - // Filter the current value - muc_current = Common.generateXID(muc_current, 'groupchat'); - - // Add the current value - if(!Utils.existArrayValue(new_arr, muc_current)) { - new_arr.push(muc_current); - } - } - - return new_arr; - } catch(e) { - Console.error('Groupchat.arrayJoin', e); - } - - }; - - - /** - * Joins the defined groupchats - * @public - * @return {undefined} - */ - self.joinConf = function() { - - try { - // Nothing to join? - if(!self.join_suggest) { - return; - } - - // Join the chats - if(self.join_suggest.length) { - for(var g in self.join_suggest) { - Chat.checkCreate(self.join_suggest[g], 'groupchat'); - } - } - } catch(e) { - Console.error('Groupchat.joinConf', e); - } - - }; - - - /** - * Checks suggest utility - * @public - * @return {undefined} - */ - self.suggestCheck = function() { - - try { - var groupchat_arr = self.arrayJoin(); - - // Must suggest the user? - if((GROUPCHATS_SUGGEST == 'on') && groupchat_arr.length) { - if(Common.exists('#suggest')) { - return; - } - - // Create HTML code - var html = '
'; - html += '
' + Common._e("Suggested chatrooms") + '
'; - - html += ''; - - html += '
'; - html += ''; - html += ''; - html += '
'; - html += '
'; - - // Append HTML code - $('body').append(html); - - // Attach events - self._suggestCheckEvents(); - } else { - self.join_suggest = groupchat_arr; - - Connection.triggerConnected(); - } - } catch(e) { - Console.error('Groupchat.suggestCheck', e); - } - - }; - - - /** - * Bans a user from given room - * @public - * @param {string} room_xid - * @param {string} ban_xid - * @param {string} reason - * @return {object} - */ - self.banUser = function(room_xid, ban_xid, reason) { - - try { - // We check if the user exists - if(!ban_xid) { - Board.openThisInfo(6); - - Console.warn('Could not ban user with XID: ' + ban_xid + ' from room: ' + room_xid); - } else { - // We generate the ban IQ - var iq = new JSJaCIQ(); - iq.setTo(room_xid); - iq.setType('set'); - - var iqQuery = iq.setQuery(NS_MUC_ADMIN); - var item = iqQuery.appendChild(iq.buildNode('item', { - 'affiliation': 'outcast', - 'jid': ban_xid, - 'xmlns': NS_MUC_ADMIN - })); - - if(reason) { - item.appendChild(iq.buildNode('reason', { - 'xmlns': NS_MUC_ADMIN - }, reason)); - } - - con.send(iq, Errors.handleReply); - - Console.log('Banned user with XID: ' + ban_xid + ' from room: ' + room_xid); - } - } catch(e) { - Console.error('Groupchat.banUser', e); - } - - }; - - - /** - * Kicks a user from given room - * @public - * @param {string} room_xid - * @param {string} kick_xid - * @param {string} nick - * @param {string} reason - * @return {object} - */ - self.kickUser = function(room_xid, kick_xid, nick, reason) { - - try { - // We check if the user exists - if(!room_xid) { - Board.openThisInfo(6); - - Console.warning('Could not kick user "' + nick + '" from room: ' + room_xid); - } else { - // We generate the kick IQ - var iq = new JSJaCIQ(); - iq.setTo(room_xid); - iq.setType('set'); - - var iqQuery = iq.setQuery(NS_MUC_ADMIN); - var item = iqQuery.appendChild(iq.buildNode('item', { - 'nick': nick, - 'role': 'none', - 'xmlns': NS_MUC_ADMIN - })); - - if(reason) { - item.appendChild(iq.buildNode('reason', { - 'xmlns': NS_MUC_ADMIN - }, reason)); - } - - con.send(iq, Errors.handleReply); - - Console.info('Kicked user "' + nick + '" from room: ' + room_xid); - } - } catch(e) { - Console.error('Groupchat.kickUser', e); - } - - }; - - - /** - * Promotes an user as groupchat moderator - * @public - * @param {string} muc_xid - * @param {string} user_xid - * @return {object} - */ - self.promoteModerator = function(muc_xid, user_xid) { - - try { - MUCAdmin.setAffiliation(muc_xid, user_xid, 'admin'); - } catch(e) { - Console.error('Groupchat.promoteModerator', e); - } - - }; - - - /** - * Demotes an user as being groupchat moderator - * @public - * @param {string} muc_xid - * @param {string} user_xid - * @return {object} - */ - self.demoteModerator = function(muc_xid, user_xid) { - - try { - MUCAdmin.setAffiliation(muc_xid, user_xid, 'none'); - } catch(e) { - Console.error('Groupchat.demoteModerator', e); - } - - }; - - - /** - * Returns user affiliation in groupchat - * @public - * @param {string} muc_xid - * @param {string} nick - * @return {object} - */ - self.affiliationUser = function(muc_xid, nick) { - - try { - // Initial data - var affiliations = ['none', 'member', 'admin', 'owner']; - var affiliation = { - code: 0, - name: affiliations[0] - }; - - // Get user data - var user_sel = $('#' + hex_md5(muc_xid) + ' .list .user[data-nick="' + escape(nick) + '"]'); - - if(user_sel.size()) { - var user_affiliation = user_sel.attr('data-affiliation'); - - if(user_affiliation && Utils.existArrayValue(affiliations, user_affiliation)) { - affiliation.code = Utils.indexArrayValue(affiliations, user_affiliation); - affiliation.name = user_affiliation; - } - } - - return affiliation; - } catch(e) { - Console.error('Groupchat.affiliationUser', e); - } - - }; - - - /** - * Returns our affiliation in groupchat - * @public - * @param {string} muc_xid - * @return {object} - */ - self.affiliationMe = function(muc_xid) { - - try { - // Get my nick - var my_nick = unescape($('#' + hex_md5(muc_xid)).attr('data-nick') || ''); - - // Return my affiliation - return self.affiliationUser(muc_xid, my_nick); - } catch(e) { - Console.error('Groupchat.affiliationMe', e); - } - - }; - - /** - * Sends initial configuration of the room - * @private - * @param {string} pid - * @param {string} xid - * @return {undefined} - */ - self._initialConfiguration = function(pid, xid) { - - try { - var iq = new JSJaCIQ(); - - iq.setTo(xid); - iq.setType('set'); - iq.setID('first-muc-config-' + pid); - - var iqQuery = iq.setQuery(NS_MUC_OWNER); - - // Configure room with nil(null) fields - var iqX = iqQuery.appendChild(iq.buildNode('x', { - 'xmlns': NS_XDATA, - 'type': 'submit' - })); - - // Build a new field node - var iqField = iqX.appendChild(iq.buildNode('field', { - 'var': 'FORM_TYPE', - 'type': 'hidden', - 'xmlns': NS_XDATA - })); - - iqField.appendChild(iq.buildNode('value', { - 'xmlns': NS_XDATA - }, NS_MUC_CONFIG)); - - con.send(iq); - - Console.info('Groupchat._initialConfiguration', 'Sent initial room configuration: ' + xid); - } catch(e) { - Console.error('Groupchat._initialConfiguration', e); - } - }; - - - - /** - * Return class scope - */ - return self; - -})(); diff --git a/source/app/javascripts/home.js b/source/app/javascripts/home.js deleted file mode 100644 index 06f8672..0000000 --- a/source/app/javascripts/home.js +++ /dev/null @@ -1,526 +0,0 @@ -/* - -Jappix - An open social platform -These are the homepage JS scripts for Jappix - -------------------------------------------------- - -License: AGPL -Authors: Valérian Saliou, LinkMauve - -*/ - -// Bundle -var Home = (function () { - - /** - * Alias of this - * @private - */ - var self = {}; - - - /** - * Apply change events - * @private - * @param {object} current_sel - * @param {string} div - * @return {undefined} - */ - self._eventsChange = function(current_sel, div) { - - try { - // Create the attached events - switch(div) { - // Login tool - case 'loginer': - current_sel.find('a.to-anonymous').click(function() { - return self.change('anonymouser'); - }); - - current_sel.find('a.advanced').click(self.showAdvanced); - current_sel.find('form').submit(self.loginForm); - - break; - - // Anonymous login tool - case 'anonymouser': - current_sel.find('a.to-home').click(function() { - return self.change('loginer'); - }); - - current_sel.find('form').submit(Connection.doAnonymous); - - // Keyup event on anonymous join's room input - current_sel.find('input.room').keyup(function() { - var value = $(this).val(); - var report_sel = current_sel.find('.report'); - var span_sel = current_sel.find('span'); - - if(!value) { - report_sel.hide(); - span_sel.text(''); - } else { - report_sel.show(); - span_sel.text(JAPPIX_LOCATION + '?r=' + value); - } - }); - - break; - - // Register tool - case 'registerer': - // Server input change - $('#home input.server').keyup(function(e) { - if($.trim($(this).val()) == HOST_MAIN) { - $('#home .captcha_grp').show(); - $('#home input.captcha').removeAttr('disabled'); - } else { - $('#home .captcha_grp').hide(); - $('#home input.captcha').attr('disabled', true); - } - }); - - // Register input placeholder - // FIXME: breaks IE compatibility - //$('#home input[placeholder]').placeholder(); - - // Register form submit - current_sel.find('form').submit(self.registerForm); - - break; - } - } catch(e) { - Console.error('Home._eventsChange', e); - } - - }; - - - /** - * Create obsolete form - * @private - * @param {string} home - * @param {string} locale - * @return {undefined} - */ - self._obsolete = function(home, locale) { - - try { - // Add the code - $(locale).after( - '
' + - '

' + Common._e("Your browser is out of date!") + '

' + - - '' + - '' + - '' + - '' + - '' + - '
' - ); - - // Display it later - $(home + '.obsolete').oneTime('1s', function() { - $(this).slideDown(); - }); - - Console.warn('Jappix does not support this browser!'); - } catch(e) { - Console.error('Home._obsolete', e); - } - - }; - - - /** - * Allows the user to switch the difference home page elements - * @public - * @param {string} div - * @return {boolean} - */ - self.change = function(div) { - - try { - // Path to - var home = '#home .'; - var right = home + 'right '; - var current = right + '.homediv.' + div; - - // We switch the div - $(right + '.homediv, ' + right + '.top').hide(); - $(right + '.' + div).show(); - - // We reset the homedivs - $(home + 'homediv:not(.default), ' + home + 'top:not(.default)').remove(); - - // Get the HTML code to display - var disable_form = ''; - var lock_host = ''; - var code = ''; - - // Apply the previous link - switch(div) { - case 'loginer': - case 'anonymouser': - case 'registerer': - if(!Common.exists(right + '.top.sub')) { - // Append the HTML code for previous link - $(right + '.top.default').after('

«

'); - - // Click event on previous link - $(home + 'top.sub a.previous').click(function() { - return self.change('default'); - }); - } - - break; - } - - // Apply the form - switch(div) { - // Login tool - case 'loginer': - lock_host = Utils.disableInput(LOCK_HOST, 'on'); - code = '

' + Common.printf(Common._e("Login to your existing XMPP account. You can also use the %s to join a groupchat."), '' + Common._e("anonymous mode") + '') + '

' + - - '
' + - '
' + - '' + Common._e("Required") + '' + - - '' + - '@' + - '' + - '' + - '' + - '' + - '
' + - - '' + Common._e("Advanced") + '' + - - '
' + - '' + Common._e("Advanced") + '' + - - '' + - '' + - '' + - '' + - '
' + - - '
' + - '' + - - '
' + - '
' + - '
'; - - break; - - // Anonymous login tool - case 'anonymouser': - disable_form = Utils.disableInput(ANONYMOUS, 'off'); - code = '

' + Common.printf(Common._e("Enter the groupchat you want to join and the nick you want to have. You can also go back to the %s."), '' + Common._e("login page") + '') + '

'; - - if(LEGAL) { - code += '

' + Common.printf(Common._e("By using our service, you accept %s."), '' + Common._e("our terms of use") + '') + '

'; - } - - code += '
' + - '
' + - '' + Common._e("Required") + '' + - - '' + - '' + - - '' + - '' + - '
' + - - '' + - '
' + - - '
' + - Common._e("Share this link with your friends:") + ' ' + - '
'; - - break; - - // Register tool - case 'registerer': - disable_form = Utils.disableInput(REGISTRATION, 'off'); - - if(!disable_form) { - lock_host = Utils.disableInput(LOCK_HOST, 'on'); - } - - code = '

' + Common._e("Register a new XMPP account to join your friends on your own social cloud. That's simple!") + '

'; - - if(LEGAL) { - code += '

' + Common.printf(Common._e("By using our service, you accept %s."), '' + Common._e("our terms of use") + '') + '

'; - } - - code += '
' + - '
' + - '' + Common._e("Required") + '' + - - '' + - '@' + - '' + - ''; - - if(REGISTER_API == 'on') { - code += '
' + - '' + - '
'; - } - - code += '
' + - - '' + - '
'; - - break; - } - - // Form disabled? - if(disable_form) { - code += '
' + - Common._e("This tool has been disabled!") + - '
'; - } - - // Create this HTML code - if(code && !Common.exists(current)) { - $(right + '.homediv.default').after( - '
' + code + '
' - ); - - self._eventsChange( - $(current), - div - ); - } - - // We focus on the first input - $(document).oneTime(10, function() { - $(right + 'input:visible:first').focus(); - }); - } catch(e) { - Console.error('Home.change', e); - } finally { - return false; - } - - }; - - - /** - * Allows the user to display the advanced login options - * @public - * @return {boolean} - */ - self.showAdvanced = function() { - - try { - // Hide the link - $('#home a.advanced').hide(); - - // Show the fieldset - $('#home fieldset.advanced').show(); - } catch(e) { - Console.error('Home.showAdvanced', e); - } finally { - return false; - } - - }; - - - /** - * Reads the login form values - * @public - * @return {boolean} - */ - self.loginForm = function() { - - try { - // We get the values - var path_sel = $('#home .loginer'); - - var lServer = path_sel.find('.server').val(); - var lNick = Common.nodeprep(path_sel.find('.nick').val()); - var lPass = path_sel.find('.password').val(); - var lResource = path_sel.find('.resource').val(); - var lPriority = path_sel.find('.priority').val(); - var lRemember = path_sel.find('.remember').filter(':checked').size(); - - // Enough values? - if(lServer && lNick && lPass && lResource && lPriority) { - Connection.doLogin(lNick, lServer, lPass, lResource, lPriority, lRemember); - } else { - $(lPath + 'input[type="text"], ' + lPath + 'input[type="password"]').each(function() { - var select = $(this); - - if(!select.val()) { - $(document).oneTime(10, function() { - select.addClass('please-complete').focus(); - }); - } else { - select.removeClass('please-complete'); - } - }); - } - } catch(e) { - Console.error('Home.loginForm', e); - } finally { - return false; - } - - }; - - - /** - * Reads the register form values - * @public - * @return {boolean} - */ - self.registerForm = function() { - - try { - var path = '#home .registerer'; - var path_sel = $(path); - - // Remove the success info - path_sel.find('.success').remove(); - - // Get the values - var username = Common.nodeprep(path_sel.find('.nick').val()); - var domain = path_sel.find('.server').val(); - var pass = path_sel.find('.password').val(); - var spass = path_sel.find('.spassword').val(); - var captcha = path_sel.find('.captcha').val(); - - // Enough values? - if(domain && username && pass && spass && (pass == spass) && !((REGISTER_API == 'on') && (domain == HOST_MAIN) && !captcha)) { - // We remove the not completed class to avoid problems - $('#home .registerer input').removeClass('please-complete'); - - // Fire the register event! - Connection.doRegister(username, domain, pass, captcha); - } - - // Something is missing? - else { - $(path + ' input[type="text"], ' + path + ' input[type="password"]').each(function() { - var select = $(this); - - if(!select.val() || (select.is('#spassword') && pass && (pass != spass))) { - $(document).oneTime(10, function() { - select.addClass('please-complete').focus(); - }); - } else { - select.removeClass('please-complete'); - } - }); - } - } catch(e) { - Console.error('Home.registerForm', e); - } finally { - return false; - } - - }; - - - /** - * Plugin launcher - * @public - * @param {type} name - * @return {undefined} - */ - self.launch = function() { - - try { - $(document).ready(function() { - // Define the vars - var home = '#home '; - var button = home + 'button'; - var corp = home + '.corporation'; - var aboutus = home + '.aboutus'; - var locale = home + '.locale'; - - // Removes the