From 979b37660965f78ea261dcc13066262f0671d457 Mon Sep 17 00:00:00 2001 From: "titoko@titoko.fr" Date: Wed, 12 Mar 2014 14:52:47 +0100 Subject: [PATCH] update 1.0.1 --- source/AUTHORS.md | 1 + source/CHANGELOG.md | 253 + source/COPYING.md | 0 source/COPYING_FONT.md | 0 source/COPYING_MINI.md | 0 source/INSTALL.md | 2 +- source/PROTOCOL.md | 68 + source/README.md | 18 +- source/THANKS.md | 0 source/VERSION | 2 +- 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 0 -> 25230 bytes source/app/fonts/eot/ptsansbold.eot | Bin 0 -> 25283 bytes source/app/fonts/eot/ptsansbolditalic.eot | Bin 0 -> 27355 bytes source/app/fonts/eot/ptsansitalic.eot | Bin 0 -> 27671 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 0 -> 56840 bytes source/app/fonts/ttf/ptsansbold.ttf | Bin 0 -> 56292 bytes source/app/fonts/ttf/ptsansbolditalic.ttf | Bin 0 -> 62048 bytes source/app/fonts/ttf/ptsansitalic.ttf | Bin 0 -> 62608 bytes source/app/fonts/woff/ptsans.woff | Bin 0 -> 28368 bytes source/app/fonts/woff/ptsansbold.woff | Bin 0 -> 28532 bytes source/app/fonts/woff/ptsansbolditalic.woff | Bin 0 -> 30676 bytes source/app/fonts/woff/ptsansitalic.woff | Bin 0 -> 31012 bytes source/app/images/others/blank.gif | Bin 0 -> 43 bytes source/app/images/others/default-avatar.png | Bin 0 -> 1436 bytes source/app/images/others/lock.png | Bin 0 -> 95 bytes .../placeholders/jingle_video_local.png | Bin 0 -> 10577 bytes source/app/images/sprites/animate.gif | Bin 0 -> 1297 bytes source/app/images/sprites/animate.png | Bin 0 -> 6146 bytes source/app/images/sprites/archives.png | Bin 0 -> 1728 bytes source/app/images/sprites/background.png | Bin 0 -> 8782 bytes source/app/images/sprites/browsers.png | Bin 0 -> 10776 bytes source/app/images/sprites/buttons.png | Bin 0 -> 298 bytes source/app/images/sprites/home.png | Bin 0 -> 29420 bytes source/app/images/sprites/install.png | Bin 0 -> 9980 bytes source/app/images/sprites/jingle.png | Bin 0 -> 2060 bytes source/app/images/sprites/manager.png | Bin 0 -> 21102 bytes source/app/images/sprites/me.png | Bin 0 -> 5071 bytes source/app/images/sprites/mini.gif | Bin 0 -> 4105 bytes source/app/images/sprites/mini.png | Bin 0 -> 8861 bytes source/app/images/sprites/mobile.png | Bin 0 -> 2452 bytes source/app/images/sprites/smileys.png | Bin 0 -> 19253 bytes source/app/images/sprites/talk.png | Bin 0 -> 47001 bytes source/app/images/sprites/welcome.png | Bin 0 -> 5394 bytes source/app/images/wait/wait-big.gif | Bin 0 -> 1932 bytes source/app/images/wait/wait-medium.png | Bin 0 -> 294 bytes source/app/images/wait/wait-small.gif | Bin 0 -> 688 bytes source/app/images/wait/wait-typing.gif | Bin 0 -> 151 bytes source/app/javascripts/adhoc.js | 160 + source/app/javascripts/anonymous.js | 190 + source/app/javascripts/audio.js | 191 + source/app/javascripts/autocompletion.js | 166 + source/app/javascripts/avatar.js | 282 + source/app/javascripts/base64.js | 82 + source/app/javascripts/board.js | 357 + source/app/javascripts/browser-detect.js | 125 + source/app/javascripts/bubble.js | 98 + source/app/javascripts/caps.js | 541 + source/app/javascripts/carbons.js | 238 + source/app/javascripts/chat.js | 505 + source/app/javascripts/chatstate.js | 242 + source/app/javascripts/common.js | 763 + source/app/javascripts/connection.js | 926 + source/app/javascripts/console.js | 66 + source/app/javascripts/constants.js | 231 + source/app/javascripts/dataform.js | 1160 ++ source/app/javascripts/datastore.js | 502 + source/app/javascripts/date.js | 402 + source/app/javascripts/datejs.js | 104 + source/app/javascripts/directory.js | 147 + source/app/javascripts/discovery.js | 240 + source/app/javascripts/errors.js | 206 + source/app/javascripts/favorites.js | 719 + source/app/javascripts/features.js | 370 + source/app/javascripts/filter.js | 250 + source/app/javascripts/groupchat.js | 680 + source/app/javascripts/home.js | 476 + source/app/javascripts/httpauth.js | 118 + source/app/javascripts/httpreply.js | 70 + source/app/javascripts/inbox.js | 985 + source/app/javascripts/integratebox.js | 469 + source/app/javascripts/interface.js | 703 + source/app/javascripts/ios.js | 354 + source/app/javascripts/iq.js | 237 + source/app/javascripts/jingle.js | 1638 ++ source/app/javascripts/jquery.form.js | 1278 ++ source/app/javascripts/jquery.js | 10337 +++++++++++ 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 | 7247 ++++++++ source/app/javascripts/jsjac.js | 4942 +++++ source/app/javascripts/jxhr.js | 116 + source/app/javascripts/links.js | 69 + source/app/javascripts/mam.js | 394 + source/app/javascripts/me.js | 114 + source/app/javascripts/message.js | 1184 ++ source/app/javascripts/microblog.js | 1837 ++ source/app/javascripts/mini.js | 4408 +++++ source/app/javascripts/mobile.js | 1007 ++ source/app/javascripts/mucadmin.js | 575 + source/app/javascripts/music.js | 366 + source/app/javascripts/name.js | 229 + source/app/javascripts/notification.js | 657 + source/app/javascripts/oob.js | 273 + source/app/javascripts/options.js | 985 + source/app/javascripts/origin.js | 56 + source/app/javascripts/pep.js | 1067 ++ source/app/javascripts/popup.js | 121 + source/app/javascripts/presence.js | 1678 ++ source/app/javascripts/privacy.js | 1240 ++ source/app/javascripts/pubsub.js | 103 + source/app/javascripts/receipts.js | 195 + source/app/javascripts/roster.js | 1455 ++ source/app/javascripts/rosterx.js | 277 + source/app/javascripts/search.js | 419 + source/app/javascripts/smileys.js | 156 + source/app/javascripts/storage.js | 180 + source/app/javascripts/system.js | 74 + source/app/javascripts/talk.js | 335 + source/app/javascripts/tooltip.js | 596 + source/app/javascripts/userinfos.js | 610 + source/app/javascripts/utilities.js | 678 + source/app/javascripts/vcard.js | 943 + source/app/javascripts/welcome.js | 398 + source/app/javascripts/xmpplinks.js | 109 + source/app/sounds/incoming-call.mp3 | Bin 0 -> 54553 bytes source/app/sounds/incoming-call.oga | Bin 0 -> 45182 bytes source/app/sounds/new-chat.mp3 | Bin 0 -> 12928 bytes source/app/sounds/new-chat.oga | Bin 0 -> 12224 bytes source/app/sounds/notification.mp3 | Bin 0 -> 12928 bytes source/app/sounds/notification.oga | Bin 0 -> 12981 bytes source/app/sounds/outgoing-call.mp3 | Bin 0 -> 241757 bytes source/app/sounds/outgoing-call.oga | Bin 0 -> 214468 bytes source/app/sounds/receive-message.mp3 | Bin 0 -> 12928 bytes source/app/sounds/receive-message.oga | Bin 0 -> 11837 bytes source/app/stylesheets/adhoc.css | 29 + source/app/stylesheets/anonymous.css | 29 + source/app/stylesheets/board.css | 46 + 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 | 981 + 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 | 328 + source/app/stylesheets/main.css | 132 + source/app/stylesheets/manager.css | 612 + source/app/stylesheets/me.css | 48 + source/app/stylesheets/mini.css | 854 + source/app/stylesheets/mobile.css | 302 + source/app/stylesheets/mucadmin.css | 130 + source/app/stylesheets/myinfos.css | 382 + source/app/stylesheets/options.css | 114 + source/app/stylesheets/others.css | 245 + source/app/stylesheets/pageengine.css | 987 + source/app/stylesheets/pageswitch.css | 285 + source/app/stylesheets/popup.css | 719 + source/app/stylesheets/privacy.css | 266 + source/app/stylesheets/roster.css | 627 + 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 | 725 + 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 0 -> 726 bytes source/dev/images/icons/add.png | Bin 0 -> 676 bytes source/dev/images/icons/anchor.png | Bin 0 -> 512 bytes source/dev/images/icons/application.png | Bin 0 -> 460 bytes source/dev/images/icons/application_add.png | Bin 0 -> 559 bytes .../dev/images/icons/application_cascade.png | Bin 0 -> 465 bytes .../dev/images/icons/application_delete.png | Bin 0 -> 587 bytes .../dev/images/icons/application_double.png | Bin 0 -> 507 bytes source/dev/images/icons/application_edit.png | Bin 0 -> 650 bytes source/dev/images/icons/application_error.png | Bin 0 -> 650 bytes source/dev/images/icons/application_form.png | Bin 0 -> 439 bytes .../dev/images/icons/application_form_add.png | Bin 0 -> 533 bytes .../images/icons/application_form_delete.png | Bin 0 -> 565 bytes .../images/icons/application_form_edit.png | Bin 0 -> 658 bytes .../images/icons/application_form_magnify.png | Bin 0 -> 591 bytes source/dev/images/icons/application_get.png | Bin 0 -> 569 bytes source/dev/images/icons/application_go.png | Bin 0 -> 634 bytes source/dev/images/icons/application_home.png | Bin 0 -> 654 bytes source/dev/images/icons/application_key.png | Bin 0 -> 631 bytes .../images/icons/application_lightning.png | Bin 0 -> 648 bytes source/dev/images/icons/application_link.png | Bin 0 -> 645 bytes source/dev/images/icons/application_osx.png | Bin 0 -> 487 bytes .../images/icons/application_osx_terminal.png | Bin 0 -> 525 bytes source/dev/images/icons/application_put.png | Bin 0 -> 575 bytes .../images/icons/application_side_boxes.png | Bin 0 -> 437 bytes .../icons/application_side_contract.png | Bin 0 -> 547 bytes .../images/icons/application_side_expand.png | Bin 0 -> 581 bytes .../images/icons/application_side_list.png | Bin 0 -> 471 bytes .../images/icons/application_side_tree.png | Bin 0 -> 442 bytes source/dev/images/icons/application_split.png | Bin 0 -> 486 bytes .../icons/application_tile_horizontal.png | Bin 0 -> 432 bytes .../icons/application_tile_vertical.png | Bin 0 -> 492 bytes .../images/icons/application_view_columns.png | Bin 0 -> 437 bytes .../images/icons/application_view_detail.png | Bin 0 -> 514 bytes .../images/icons/application_view_gallery.png | Bin 0 -> 551 bytes .../images/icons/application_view_icons.png | Bin 0 -> 426 bytes .../images/icons/application_view_list.png | Bin 0 -> 456 bytes .../images/icons/application_view_tile.png | Bin 0 -> 418 bytes source/dev/images/icons/application_xp.png | Bin 0 -> 426 bytes .../images/icons/application_xp_terminal.png | Bin 0 -> 507 bytes source/dev/images/icons/arrow_branch.png | Bin 0 -> 561 bytes source/dev/images/icons/arrow_divide.png | Bin 0 -> 649 bytes source/dev/images/icons/arrow_down.png | Bin 0 -> 374 bytes source/dev/images/icons/arrow_in.png | Bin 0 -> 543 bytes source/dev/images/icons/arrow_inout.png | Bin 0 -> 551 bytes source/dev/images/icons/arrow_join.png | Bin 0 -> 581 bytes source/dev/images/icons/arrow_left.png | Bin 0 -> 332 bytes source/dev/images/icons/arrow_merge.png | Bin 0 -> 466 bytes source/dev/images/icons/arrow_out.png | Bin 0 -> 536 bytes source/dev/images/icons/arrow_redo.png | Bin 0 -> 613 bytes source/dev/images/icons/arrow_refresh.png | Bin 0 -> 630 bytes .../dev/images/icons/arrow_refresh_small.png | Bin 0 -> 457 bytes source/dev/images/icons/arrow_right.png | Bin 0 -> 331 bytes .../icons/arrow_rotate_anticlockwise.png | Bin 0 -> 553 bytes .../images/icons/arrow_rotate_clockwise.png | Bin 0 -> 548 bytes source/dev/images/icons/arrow_switch.png | Bin 0 -> 650 bytes source/dev/images/icons/arrow_turn_left.png | Bin 0 -> 473 bytes source/dev/images/icons/arrow_turn_right.png | Bin 0 -> 456 bytes source/dev/images/icons/arrow_undo.png | Bin 0 -> 616 bytes source/dev/images/icons/arrow_up.png | Bin 0 -> 368 bytes source/dev/images/icons/asterisk_orange.png | Bin 0 -> 706 bytes source/dev/images/icons/asterisk_yellow.png | Bin 0 -> 686 bytes source/dev/images/icons/attach.png | Bin 0 -> 383 bytes source/dev/images/icons/award_star_add.png | Bin 0 -> 806 bytes .../dev/images/icons/award_star_bronze_1.png | Bin 0 -> 708 bytes .../dev/images/icons/award_star_bronze_2.png | Bin 0 -> 723 bytes .../dev/images/icons/award_star_bronze_3.png | Bin 0 -> 719 bytes source/dev/images/icons/award_star_delete.png | Bin 0 -> 823 bytes source/dev/images/icons/award_star_gold_1.png | Bin 0 -> 731 bytes source/dev/images/icons/award_star_gold_2.png | Bin 0 -> 750 bytes source/dev/images/icons/award_star_gold_3.png | Bin 0 -> 746 bytes .../dev/images/icons/award_star_silver_1.png | Bin 0 -> 699 bytes .../dev/images/icons/award_star_silver_2.png | Bin 0 -> 700 bytes .../dev/images/icons/award_star_silver_3.png | Bin 0 -> 695 bytes source/dev/images/icons/basket.png | Bin 0 -> 669 bytes source/dev/images/icons/basket_add.png | Bin 0 -> 696 bytes source/dev/images/icons/basket_delete.png | Bin 0 -> 720 bytes source/dev/images/icons/basket_edit.png | Bin 0 -> 758 bytes source/dev/images/icons/basket_error.png | Bin 0 -> 767 bytes source/dev/images/icons/basket_go.png | Bin 0 -> 722 bytes source/dev/images/icons/basket_put.png | Bin 0 -> 733 bytes source/dev/images/icons/basket_remove.png | Bin 0 -> 738 bytes source/dev/images/icons/bell.png | Bin 0 -> 735 bytes source/dev/images/icons/bell_add.png | Bin 0 -> 760 bytes source/dev/images/icons/bell_delete.png | Bin 0 -> 775 bytes source/dev/images/icons/bell_error.png | Bin 0 -> 764 bytes source/dev/images/icons/bell_go.png | Bin 0 -> 784 bytes source/dev/images/icons/bell_link.png | Bin 0 -> 796 bytes source/dev/images/icons/bin.png | Bin 0 -> 471 bytes source/dev/images/icons/bin_closed.png | Bin 0 -> 358 bytes source/dev/images/icons/bin_empty.png | Bin 0 -> 472 bytes source/dev/images/icons/bomb.png | Bin 0 -> 790 bytes source/dev/images/icons/book.png | Bin 0 -> 593 bytes source/dev/images/icons/book_add.png | Bin 0 -> 714 bytes source/dev/images/icons/book_addresses.png | Bin 0 -> 770 bytes source/dev/images/icons/book_delete.png | Bin 0 -> 719 bytes source/dev/images/icons/book_edit.png | Bin 0 -> 813 bytes source/dev/images/icons/book_error.png | Bin 0 -> 734 bytes source/dev/images/icons/book_go.png | Bin 0 -> 745 bytes source/dev/images/icons/book_key.png | Bin 0 -> 779 bytes source/dev/images/icons/book_link.png | Bin 0 -> 789 bytes source/dev/images/icons/book_next.png | Bin 0 -> 687 bytes source/dev/images/icons/book_open.png | Bin 0 -> 622 bytes source/dev/images/icons/book_previous.png | Bin 0 -> 658 bytes source/dev/images/icons/box.png | Bin 0 -> 555 bytes source/dev/images/icons/brick.png | Bin 0 -> 439 bytes source/dev/images/icons/brick_add.png | Bin 0 -> 673 bytes source/dev/images/icons/brick_delete.png | Bin 0 -> 687 bytes source/dev/images/icons/brick_edit.png | Bin 0 -> 721 bytes source/dev/images/icons/brick_error.png | Bin 0 -> 742 bytes source/dev/images/icons/brick_go.png | Bin 0 -> 736 bytes source/dev/images/icons/brick_link.png | Bin 0 -> 707 bytes source/dev/images/icons/bricks.png | Bin 0 -> 765 bytes source/dev/images/icons/briefcase.png | Bin 0 -> 793 bytes source/dev/images/icons/bug.png | Bin 0 -> 714 bytes source/dev/images/icons/bug_add.png | Bin 0 -> 752 bytes source/dev/images/icons/bug_delete.png | Bin 0 -> 780 bytes source/dev/images/icons/bug_edit.png | Bin 0 -> 803 bytes source/dev/images/icons/bug_error.png | Bin 0 -> 785 bytes source/dev/images/icons/bug_go.png | Bin 0 -> 778 bytes source/dev/images/icons/bug_link.png | Bin 0 -> 792 bytes source/dev/images/icons/building.png | Bin 0 -> 556 bytes source/dev/images/icons/building_add.png | Bin 0 -> 591 bytes source/dev/images/icons/building_delete.png | Bin 0 -> 612 bytes source/dev/images/icons/building_edit.png | Bin 0 -> 700 bytes source/dev/images/icons/building_error.png | Bin 0 -> 653 bytes source/dev/images/icons/building_go.png | Bin 0 -> 647 bytes source/dev/images/icons/building_key.png | Bin 0 -> 676 bytes source/dev/images/icons/building_link.png | Bin 0 -> 646 bytes source/dev/images/icons/bullet_add.png | Bin 0 -> 253 bytes .../dev/images/icons/bullet_arrow_bottom.png | Bin 0 -> 229 bytes source/dev/images/icons/bullet_arrow_down.png | Bin 0 -> 201 bytes source/dev/images/icons/bullet_arrow_top.png | Bin 0 -> 230 bytes source/dev/images/icons/bullet_arrow_up.png | Bin 0 -> 201 bytes source/dev/images/icons/bullet_black.png | Bin 0 -> 211 bytes source/dev/images/icons/bullet_blue.png | Bin 0 -> 239 bytes source/dev/images/icons/bullet_delete.png | Bin 0 -> 268 bytes source/dev/images/icons/bullet_disk.png | Bin 0 -> 455 bytes source/dev/images/icons/bullet_error.png | Bin 0 -> 413 bytes source/dev/images/icons/bullet_feed.png | Bin 0 -> 214 bytes source/dev/images/icons/bullet_go.png | Bin 0 -> 374 bytes source/dev/images/icons/bullet_green.png | Bin 0 -> 249 bytes source/dev/images/icons/bullet_key.png | Bin 0 -> 392 bytes source/dev/images/icons/bullet_orange.png | Bin 0 -> 228 bytes source/dev/images/icons/bullet_picture.png | Bin 0 -> 433 bytes source/dev/images/icons/bullet_pink.png | Bin 0 -> 231 bytes source/dev/images/icons/bullet_purple.png | Bin 0 -> 240 bytes source/dev/images/icons/bullet_red.png | Bin 0 -> 234 bytes source/dev/images/icons/bullet_star.png | Bin 0 -> 285 bytes .../dev/images/icons/bullet_toggle_minus.png | Bin 0 -> 207 bytes .../dev/images/icons/bullet_toggle_plus.png | Bin 0 -> 209 bytes source/dev/images/icons/bullet_white.png | Bin 0 -> 201 bytes source/dev/images/icons/bullet_wrench.png | Bin 0 -> 392 bytes source/dev/images/icons/bullet_yellow.png | Bin 0 -> 233 bytes source/dev/images/icons/cake.png | Bin 0 -> 620 bytes source/dev/images/icons/calculator.png | Bin 0 -> 507 bytes source/dev/images/icons/calculator_add.png | Bin 0 -> 604 bytes source/dev/images/icons/calculator_delete.png | Bin 0 -> 633 bytes source/dev/images/icons/calculator_edit.png | Bin 0 -> 714 bytes source/dev/images/icons/calculator_error.png | Bin 0 -> 686 bytes source/dev/images/icons/calculator_link.png | Bin 0 -> 667 bytes source/dev/images/icons/calendar.png | Bin 0 -> 642 bytes source/dev/images/icons/calendar_add.png | Bin 0 -> 677 bytes source/dev/images/icons/calendar_delete.png | Bin 0 -> 704 bytes source/dev/images/icons/calendar_edit.png | Bin 0 -> 738 bytes source/dev/images/icons/calendar_link.png | Bin 0 -> 741 bytes source/dev/images/icons/calendar_view_day.png | Bin 0 -> 572 bytes .../dev/images/icons/calendar_view_month.png | Bin 0 -> 551 bytes .../dev/images/icons/calendar_view_week.png | Bin 0 -> 480 bytes source/dev/images/icons/camera.png | Bin 0 -> 665 bytes source/dev/images/icons/camera_add.png | Bin 0 -> 765 bytes source/dev/images/icons/camera_delete.png | Bin 0 -> 790 bytes source/dev/images/icons/camera_edit.png | Bin 0 -> 830 bytes source/dev/images/icons/camera_error.png | Bin 0 -> 835 bytes source/dev/images/icons/camera_go.png | Bin 0 -> 809 bytes source/dev/images/icons/camera_link.png | Bin 0 -> 788 bytes source/dev/images/icons/camera_small.png | Bin 0 -> 455 bytes source/dev/images/icons/cancel.png | Bin 0 -> 522 bytes source/dev/images/icons/car.png | Bin 0 -> 559 bytes source/dev/images/icons/car_add.png | Bin 0 -> 620 bytes source/dev/images/icons/car_delete.png | Bin 0 -> 637 bytes source/dev/images/icons/cart.png | Bin 0 -> 413 bytes source/dev/images/icons/cart_add.png | Bin 0 -> 654 bytes source/dev/images/icons/cart_delete.png | Bin 0 -> 686 bytes source/dev/images/icons/cart_edit.png | Bin 0 -> 736 bytes source/dev/images/icons/cart_error.png | Bin 0 -> 732 bytes source/dev/images/icons/cart_go.png | Bin 0 -> 717 bytes source/dev/images/icons/cart_put.png | Bin 0 -> 706 bytes source/dev/images/icons/cart_remove.png | Bin 0 -> 714 bytes source/dev/images/icons/cd.png | Bin 0 -> 605 bytes source/dev/images/icons/cd_add.png | Bin 0 -> 684 bytes source/dev/images/icons/cd_burn.png | Bin 0 -> 689 bytes source/dev/images/icons/cd_delete.png | Bin 0 -> 697 bytes source/dev/images/icons/cd_edit.png | Bin 0 -> 719 bytes source/dev/images/icons/cd_eject.png | Bin 0 -> 716 bytes source/dev/images/icons/cd_go.png | Bin 0 -> 724 bytes source/dev/images/icons/chart_bar.png | Bin 0 -> 541 bytes source/dev/images/icons/chart_bar_add.png | Bin 0 -> 626 bytes source/dev/images/icons/chart_bar_delete.png | Bin 0 -> 636 bytes source/dev/images/icons/chart_bar_edit.png | Bin 0 -> 754 bytes source/dev/images/icons/chart_bar_error.png | Bin 0 -> 671 bytes source/dev/images/icons/chart_bar_link.png | Bin 0 -> 707 bytes source/dev/images/icons/chart_curve.png | Bin 0 -> 680 bytes source/dev/images/icons/chart_curve_add.png | Bin 0 -> 721 bytes .../dev/images/icons/chart_curve_delete.png | Bin 0 -> 738 bytes source/dev/images/icons/chart_curve_edit.png | Bin 0 -> 767 bytes source/dev/images/icons/chart_curve_error.png | Bin 0 -> 782 bytes source/dev/images/icons/chart_curve_go.png | Bin 0 -> 769 bytes source/dev/images/icons/chart_curve_link.png | Bin 0 -> 775 bytes source/dev/images/icons/chart_line.png | Bin 0 -> 497 bytes source/dev/images/icons/chart_line_add.png | Bin 0 -> 625 bytes source/dev/images/icons/chart_line_delete.png | Bin 0 -> 642 bytes source/dev/images/icons/chart_line_edit.png | Bin 0 -> 670 bytes source/dev/images/icons/chart_line_error.png | Bin 0 -> 701 bytes source/dev/images/icons/chart_line_link.png | Bin 0 -> 697 bytes .../dev/images/icons/chart_organisation.png | Bin 0 -> 422 bytes .../images/icons/chart_organisation_add.png | Bin 0 -> 489 bytes .../icons/chart_organisation_delete.png | Bin 0 -> 514 bytes source/dev/images/icons/chart_pie.png | Bin 0 -> 889 bytes source/dev/images/icons/chart_pie_add.png | Bin 0 -> 936 bytes source/dev/images/icons/chart_pie_delete.png | Bin 0 -> 962 bytes source/dev/images/icons/chart_pie_edit.png | Bin 0 -> 927 bytes source/dev/images/icons/chart_pie_error.png | Bin 0 -> 966 bytes source/dev/images/icons/chart_pie_link.png | Bin 0 -> 967 bytes source/dev/images/icons/clock.png | Bin 0 -> 825 bytes source/dev/images/icons/clock_add.png | Bin 0 -> 863 bytes source/dev/images/icons/clock_delete.png | Bin 0 -> 884 bytes source/dev/images/icons/clock_edit.png | Bin 0 -> 897 bytes source/dev/images/icons/clock_error.png | Bin 0 -> 887 bytes source/dev/images/icons/clock_go.png | Bin 0 -> 894 bytes source/dev/images/icons/clock_link.png | Bin 0 -> 899 bytes source/dev/images/icons/clock_pause.png | Bin 0 -> 904 bytes source/dev/images/icons/clock_play.png | Bin 0 -> 885 bytes source/dev/images/icons/clock_red.png | Bin 0 -> 833 bytes source/dev/images/icons/clock_stop.png | Bin 0 -> 866 bytes source/dev/images/icons/cog.png | Bin 0 -> 503 bytes source/dev/images/icons/cog_add.png | Bin 0 -> 758 bytes source/dev/images/icons/cog_delete.png | Bin 0 -> 790 bytes source/dev/images/icons/cog_edit.png | Bin 0 -> 810 bytes source/dev/images/icons/cog_error.png | Bin 0 -> 813 bytes source/dev/images/icons/cog_go.png | Bin 0 -> 817 bytes source/dev/images/icons/coins.png | Bin 0 -> 732 bytes source/dev/images/icons/coins_add.png | Bin 0 -> 775 bytes source/dev/images/icons/coins_delete.png | Bin 0 -> 769 bytes source/dev/images/icons/color_swatch.png | Bin 0 -> 152 bytes source/dev/images/icons/color_wheel.png | Bin 0 -> 876 bytes source/dev/images/icons/comment.png | Bin 0 -> 352 bytes source/dev/images/icons/comment_add.png | Bin 0 -> 467 bytes source/dev/images/icons/comment_delete.png | Bin 0 -> 489 bytes source/dev/images/icons/comment_edit.png | Bin 0 -> 583 bytes source/dev/images/icons/comments.png | Bin 0 -> 491 bytes source/dev/images/icons/comments_add.png | Bin 0 -> 588 bytes source/dev/images/icons/comments_delete.png | Bin 0 -> 610 bytes source/dev/images/icons/compress.png | Bin 0 -> 766 bytes source/dev/images/icons/computer.png | Bin 0 -> 667 bytes source/dev/images/icons/computer_add.png | Bin 0 -> 781 bytes source/dev/images/icons/computer_delete.png | Bin 0 -> 775 bytes source/dev/images/icons/computer_edit.png | Bin 0 -> 792 bytes source/dev/images/icons/computer_error.png | Bin 0 -> 784 bytes source/dev/images/icons/computer_go.png | Bin 0 -> 777 bytes source/dev/images/icons/computer_key.png | Bin 0 -> 771 bytes source/dev/images/icons/computer_link.png | Bin 0 -> 792 bytes source/dev/images/icons/connect.png | Bin 0 -> 721 bytes source/dev/images/icons/contrast.png | Bin 0 -> 428 bytes source/dev/images/icons/contrast_decrease.png | Bin 0 -> 694 bytes source/dev/images/icons/contrast_high.png | Bin 0 -> 430 bytes source/dev/images/icons/contrast_increase.png | Bin 0 -> 696 bytes source/dev/images/icons/contrast_low.png | Bin 0 -> 411 bytes source/dev/images/icons/control_eject.png | Bin 0 -> 543 bytes .../dev/images/icons/control_eject_blue.png | Bin 0 -> 668 bytes source/dev/images/icons/control_end.png | Bin 0 -> 558 bytes source/dev/images/icons/control_end_blue.png | Bin 0 -> 680 bytes source/dev/images/icons/control_equalizer.png | Bin 0 -> 416 bytes .../images/icons/control_equalizer_blue.png | Bin 0 -> 704 bytes .../dev/images/icons/control_fastforward.png | Bin 0 -> 548 bytes .../images/icons/control_fastforward_blue.png | Bin 0 -> 677 bytes source/dev/images/icons/control_pause.png | Bin 0 -> 545 bytes .../dev/images/icons/control_pause_blue.png | Bin 0 -> 663 bytes source/dev/images/icons/control_play.png | Bin 0 -> 532 bytes source/dev/images/icons/control_play_blue.png | Bin 0 -> 658 bytes source/dev/images/icons/control_repeat.png | Bin 0 -> 412 bytes .../dev/images/icons/control_repeat_blue.png | Bin 0 -> 693 bytes source/dev/images/icons/control_rewind.png | Bin 0 -> 551 bytes .../dev/images/icons/control_rewind_blue.png | Bin 0 -> 685 bytes source/dev/images/icons/control_start.png | Bin 0 -> 542 bytes .../dev/images/icons/control_start_blue.png | Bin 0 -> 663 bytes source/dev/images/icons/control_stop.png | Bin 0 -> 396 bytes source/dev/images/icons/control_stop_blue.png | Bin 0 -> 637 bytes source/dev/images/icons/controller.png | Bin 0 -> 614 bytes source/dev/images/icons/controller_add.png | Bin 0 -> 703 bytes source/dev/images/icons/controller_delete.png | Bin 0 -> 716 bytes source/dev/images/icons/controller_error.png | Bin 0 -> 758 bytes source/dev/images/icons/creditcards.png | Bin 0 -> 664 bytes source/dev/images/icons/cross.png | Bin 0 -> 600 bytes source/dev/images/icons/css.png | Bin 0 -> 524 bytes source/dev/images/icons/css_add.png | Bin 0 -> 651 bytes source/dev/images/icons/css_delete.png | Bin 0 -> 654 bytes source/dev/images/icons/css_go.png | Bin 0 -> 655 bytes source/dev/images/icons/css_valid.png | Bin 0 -> 661 bytes source/dev/images/icons/cup.png | Bin 0 -> 578 bytes source/dev/images/icons/cup_add.png | Bin 0 -> 657 bytes source/dev/images/icons/cup_delete.png | Bin 0 -> 676 bytes source/dev/images/icons/cup_edit.png | Bin 0 -> 722 bytes source/dev/images/icons/cup_error.png | Bin 0 -> 734 bytes source/dev/images/icons/cup_go.png | Bin 0 -> 723 bytes source/dev/images/icons/cup_key.png | Bin 0 -> 721 bytes source/dev/images/icons/cup_link.png | Bin 0 -> 703 bytes source/dev/images/icons/cursor.png | Bin 0 -> 343 bytes source/dev/images/icons/cut.png | Bin 0 -> 628 bytes source/dev/images/icons/cut_red.png | Bin 0 -> 633 bytes source/dev/images/icons/database.png | Bin 0 -> 386 bytes source/dev/images/icons/database_add.png | Bin 0 -> 645 bytes source/dev/images/icons/database_connect.png | Bin 0 -> 763 bytes source/dev/images/icons/database_delete.png | Bin 0 -> 659 bytes source/dev/images/icons/database_edit.png | Bin 0 -> 744 bytes source/dev/images/icons/database_error.png | Bin 0 -> 682 bytes source/dev/images/icons/database_gear.png | Bin 0 -> 467 bytes source/dev/images/icons/database_go.png | Bin 0 -> 698 bytes source/dev/images/icons/database_key.png | Bin 0 -> 758 bytes .../dev/images/icons/database_lightning.png | Bin 0 -> 775 bytes source/dev/images/icons/database_link.png | Bin 0 -> 673 bytes source/dev/images/icons/database_refresh.png | Bin 0 -> 770 bytes source/dev/images/icons/database_save.png | Bin 0 -> 755 bytes source/dev/images/icons/database_table.png | Bin 0 -> 668 bytes source/dev/images/icons/date.png | Bin 0 -> 572 bytes source/dev/images/icons/date_add.png | Bin 0 -> 643 bytes source/dev/images/icons/date_delete.png | Bin 0 -> 656 bytes source/dev/images/icons/date_edit.png | Bin 0 -> 738 bytes source/dev/images/icons/date_error.png | Bin 0 -> 711 bytes source/dev/images/icons/date_go.png | Bin 0 -> 694 bytes source/dev/images/icons/date_link.png | Bin 0 -> 715 bytes source/dev/images/icons/date_magnify.png | Bin 0 -> 654 bytes source/dev/images/icons/date_next.png | Bin 0 -> 648 bytes source/dev/images/icons/date_previous.png | Bin 0 -> 681 bytes source/dev/images/icons/delete.png | Bin 0 -> 659 bytes source/dev/images/icons/disconnect.png | Bin 0 -> 759 bytes source/dev/images/icons/disk.png | Bin 0 -> 620 bytes source/dev/images/icons/disk_multiple.png | Bin 0 -> 651 bytes source/dev/images/icons/door.png | Bin 0 -> 412 bytes source/dev/images/icons/door_in.png | Bin 0 -> 693 bytes source/dev/images/icons/door_open.png | Bin 0 -> 508 bytes source/dev/images/icons/door_out.png | Bin 0 -> 688 bytes source/dev/images/icons/drink.png | Bin 0 -> 638 bytes source/dev/images/icons/drink_empty.png | Bin 0 -> 426 bytes source/dev/images/icons/drive.png | Bin 0 -> 338 bytes source/dev/images/icons/drive_add.png | Bin 0 -> 610 bytes source/dev/images/icons/drive_burn.png | Bin 0 -> 608 bytes source/dev/images/icons/drive_cd.png | Bin 0 -> 733 bytes source/dev/images/icons/drive_cd_empty.png | Bin 0 -> 332 bytes source/dev/images/icons/drive_delete.png | Bin 0 -> 628 bytes source/dev/images/icons/drive_disk.png | Bin 0 -> 695 bytes source/dev/images/icons/drive_edit.png | Bin 0 -> 693 bytes source/dev/images/icons/drive_error.png | Bin 0 -> 705 bytes source/dev/images/icons/drive_go.png | Bin 0 -> 661 bytes source/dev/images/icons/drive_key.png | Bin 0 -> 681 bytes source/dev/images/icons/drive_link.png | Bin 0 -> 654 bytes source/dev/images/icons/drive_magnify.png | Bin 0 -> 641 bytes source/dev/images/icons/drive_network.png | Bin 0 -> 585 bytes source/dev/images/icons/drive_rename.png | Bin 0 -> 486 bytes source/dev/images/icons/drive_user.png | Bin 0 -> 712 bytes source/dev/images/icons/drive_web.png | Bin 0 -> 686 bytes source/dev/images/icons/dvd.png | Bin 0 -> 706 bytes source/dev/images/icons/dvd_add.png | Bin 0 -> 730 bytes source/dev/images/icons/dvd_delete.png | Bin 0 -> 742 bytes source/dev/images/icons/dvd_edit.png | Bin 0 -> 787 bytes source/dev/images/icons/dvd_error.png | Bin 0 -> 792 bytes source/dev/images/icons/dvd_go.png | Bin 0 -> 797 bytes source/dev/images/icons/dvd_key.png | Bin 0 -> 759 bytes source/dev/images/icons/dvd_link.png | Bin 0 -> 764 bytes source/dev/images/icons/email.png | Bin 0 -> 639 bytes source/dev/images/icons/email_add.png | Bin 0 -> 701 bytes source/dev/images/icons/email_attach.png | Bin 0 -> 744 bytes source/dev/images/icons/email_delete.png | Bin 0 -> 726 bytes source/dev/images/icons/email_edit.png | Bin 0 -> 728 bytes source/dev/images/icons/email_error.png | Bin 0 -> 769 bytes source/dev/images/icons/email_go.png | Bin 0 -> 751 bytes source/dev/images/icons/email_link.png | Bin 0 -> 764 bytes source/dev/images/icons/email_open.png | Bin 0 -> 723 bytes source/dev/images/icons/email_open_image.png | Bin 0 -> 756 bytes source/dev/images/icons/emoticon_evilgrin.png | Bin 0 -> 683 bytes source/dev/images/icons/emoticon_grin.png | Bin 0 -> 684 bytes source/dev/images/icons/emoticon_happy.png | Bin 0 -> 676 bytes source/dev/images/icons/emoticon_smile.png | Bin 0 -> 723 bytes .../dev/images/icons/emoticon_surprised.png | Bin 0 -> 706 bytes source/dev/images/icons/emoticon_tongue.png | Bin 0 -> 725 bytes source/dev/images/icons/emoticon_unhappy.png | Bin 0 -> 717 bytes source/dev/images/icons/emoticon_waii.png | Bin 0 -> 697 bytes source/dev/images/icons/emoticon_wink.png | Bin 0 -> 676 bytes source/dev/images/icons/error.png | Bin 0 -> 619 bytes source/dev/images/icons/error_add.png | Bin 0 -> 651 bytes source/dev/images/icons/error_delete.png | Bin 0 -> 670 bytes source/dev/images/icons/error_go.png | Bin 0 -> 686 bytes source/dev/images/icons/exclamation.png | Bin 0 -> 671 bytes source/dev/images/icons/eye.png | Bin 0 -> 710 bytes source/dev/images/icons/feed.png | Bin 0 -> 659 bytes source/dev/images/icons/feed_add.png | Bin 0 -> 694 bytes source/dev/images/icons/feed_delete.png | Bin 0 -> 705 bytes source/dev/images/icons/feed_disk.png | Bin 0 -> 738 bytes source/dev/images/icons/feed_edit.png | Bin 0 -> 758 bytes source/dev/images/icons/feed_error.png | Bin 0 -> 751 bytes source/dev/images/icons/feed_go.png | Bin 0 -> 744 bytes source/dev/images/icons/feed_key.png | Bin 0 -> 746 bytes source/dev/images/icons/feed_link.png | Bin 0 -> 749 bytes source/dev/images/icons/feed_magnify.png | Bin 0 -> 720 bytes source/dev/images/icons/female.png | Bin 0 -> 533 bytes source/dev/images/icons/film.png | Bin 0 -> 637 bytes source/dev/images/icons/film_add.png | Bin 0 -> 683 bytes source/dev/images/icons/film_delete.png | Bin 0 -> 703 bytes source/dev/images/icons/film_edit.png | Bin 0 -> 808 bytes source/dev/images/icons/film_error.png | Bin 0 -> 789 bytes source/dev/images/icons/film_go.png | Bin 0 -> 800 bytes source/dev/images/icons/film_key.png | Bin 0 -> 785 bytes source/dev/images/icons/film_link.png | Bin 0 -> 805 bytes source/dev/images/icons/film_save.png | Bin 0 -> 806 bytes source/dev/images/icons/find.png | Bin 0 -> 610 bytes source/dev/images/icons/flag_blue.png | Bin 0 -> 614 bytes source/dev/images/icons/flag_green.png | Bin 0 -> 616 bytes source/dev/images/icons/flag_orange.png | Bin 0 -> 610 bytes source/dev/images/icons/flag_pink.png | Bin 0 -> 588 bytes source/dev/images/icons/flag_purple.png | Bin 0 -> 598 bytes source/dev/images/icons/flag_red.png | Bin 0 -> 606 bytes source/dev/images/icons/flag_yellow.png | Bin 0 -> 615 bytes source/dev/images/icons/folder.png | Bin 0 -> 537 bytes source/dev/images/icons/folder_add.png | Bin 0 -> 626 bytes source/dev/images/icons/folder_bell.png | Bin 0 -> 762 bytes source/dev/images/icons/folder_brick.png | Bin 0 -> 710 bytes source/dev/images/icons/folder_bug.png | Bin 0 -> 779 bytes source/dev/images/icons/folder_camera.png | Bin 0 -> 729 bytes source/dev/images/icons/folder_database.png | Bin 0 -> 687 bytes source/dev/images/icons/folder_delete.png | Bin 0 -> 652 bytes source/dev/images/icons/folder_edit.png | Bin 0 -> 689 bytes source/dev/images/icons/folder_error.png | Bin 0 -> 715 bytes source/dev/images/icons/folder_explore.png | Bin 0 -> 662 bytes source/dev/images/icons/folder_feed.png | Bin 0 -> 691 bytes source/dev/images/icons/folder_find.png | Bin 0 -> 773 bytes source/dev/images/icons/folder_go.png | Bin 0 -> 694 bytes source/dev/images/icons/folder_heart.png | Bin 0 -> 735 bytes source/dev/images/icons/folder_image.png | Bin 0 -> 677 bytes source/dev/images/icons/folder_key.png | Bin 0 -> 720 bytes source/dev/images/icons/folder_lightbulb.png | Bin 0 -> 726 bytes source/dev/images/icons/folder_link.png | Bin 0 -> 728 bytes source/dev/images/icons/folder_magnify.png | Bin 0 -> 686 bytes source/dev/images/icons/folder_page.png | Bin 0 -> 688 bytes source/dev/images/icons/folder_page_white.png | Bin 0 -> 637 bytes source/dev/images/icons/folder_palette.png | Bin 0 -> 811 bytes source/dev/images/icons/folder_picture.png | Bin 0 -> 713 bytes source/dev/images/icons/folder_star.png | Bin 0 -> 721 bytes source/dev/images/icons/folder_table.png | Bin 0 -> 675 bytes source/dev/images/icons/folder_user.png | Bin 0 -> 730 bytes source/dev/images/icons/folder_wrench.png | Bin 0 -> 699 bytes source/dev/images/icons/font.png | Bin 0 -> 552 bytes source/dev/images/icons/font_add.png | Bin 0 -> 616 bytes source/dev/images/icons/font_delete.png | Bin 0 -> 637 bytes source/dev/images/icons/font_go.png | Bin 0 -> 663 bytes source/dev/images/icons/group.png | Bin 0 -> 699 bytes source/dev/images/icons/group_add.png | Bin 0 -> 751 bytes source/dev/images/icons/group_delete.png | Bin 0 -> 773 bytes source/dev/images/icons/group_edit.png | Bin 0 -> 730 bytes source/dev/images/icons/group_error.png | Bin 0 -> 786 bytes source/dev/images/icons/group_gear.png | Bin 0 -> 770 bytes source/dev/images/icons/group_go.png | Bin 0 -> 785 bytes source/dev/images/icons/group_key.png | Bin 0 -> 759 bytes source/dev/images/icons/group_link.png | Bin 0 -> 804 bytes source/dev/images/icons/heart.png | Bin 0 -> 718 bytes source/dev/images/icons/heart_add.png | Bin 0 -> 759 bytes source/dev/images/icons/heart_delete.png | Bin 0 -> 787 bytes source/dev/images/icons/help.png | Bin 0 -> 731 bytes source/dev/images/icons/hourglass.png | Bin 0 -> 688 bytes source/dev/images/icons/hourglass_add.png | Bin 0 -> 756 bytes source/dev/images/icons/hourglass_delete.png | Bin 0 -> 770 bytes source/dev/images/icons/hourglass_go.png | Bin 0 -> 812 bytes source/dev/images/icons/hourglass_link.png | Bin 0 -> 815 bytes source/dev/images/icons/house.png | Bin 0 -> 750 bytes source/dev/images/icons/house_go.png | Bin 0 -> 804 bytes source/dev/images/icons/house_link.png | Bin 0 -> 813 bytes source/dev/images/icons/html.png | Bin 0 -> 578 bytes source/dev/images/icons/html_add.png | Bin 0 -> 684 bytes source/dev/images/icons/html_delete.png | Bin 0 -> 688 bytes source/dev/images/icons/html_go.png | Bin 0 -> 692 bytes source/dev/images/icons/html_valid.png | Bin 0 -> 704 bytes source/dev/images/icons/image.png | Bin 0 -> 512 bytes source/dev/images/icons/image_add.png | Bin 0 -> 617 bytes source/dev/images/icons/image_delete.png | Bin 0 -> 645 bytes source/dev/images/icons/image_edit.png | Bin 0 -> 738 bytes source/dev/images/icons/image_link.png | Bin 0 -> 728 bytes source/dev/images/icons/images.png | Bin 0 -> 602 bytes source/dev/images/icons/information.png | Bin 0 -> 724 bytes source/dev/images/icons/ipod.png | Bin 0 -> 463 bytes source/dev/images/icons/ipod_cast.png | Bin 0 -> 658 bytes source/dev/images/icons/ipod_cast_add.png | Bin 0 -> 727 bytes source/dev/images/icons/ipod_cast_delete.png | Bin 0 -> 747 bytes source/dev/images/icons/ipod_sound.png | Bin 0 -> 678 bytes source/dev/images/icons/joystick.png | Bin 0 -> 559 bytes source/dev/images/icons/joystick_add.png | Bin 0 -> 612 bytes source/dev/images/icons/joystick_delete.png | Bin 0 -> 646 bytes source/dev/images/icons/joystick_error.png | Bin 0 -> 668 bytes source/dev/images/icons/key.png | Bin 0 -> 553 bytes source/dev/images/icons/key_add.png | Bin 0 -> 645 bytes source/dev/images/icons/key_delete.png | Bin 0 -> 666 bytes source/dev/images/icons/key_go.png | Bin 0 -> 687 bytes source/dev/images/icons/keyboard.png | Bin 0 -> 566 bytes source/dev/images/icons/keyboard_add.png | Bin 0 -> 637 bytes source/dev/images/icons/keyboard_delete.png | Bin 0 -> 660 bytes source/dev/images/icons/keyboard_magnify.png | Bin 0 -> 638 bytes source/dev/images/icons/layers.png | Bin 0 -> 597 bytes source/dev/images/icons/layout.png | Bin 0 -> 432 bytes source/dev/images/icons/layout_add.png | Bin 0 -> 520 bytes source/dev/images/icons/layout_content.png | Bin 0 -> 519 bytes source/dev/images/icons/layout_delete.png | Bin 0 -> 550 bytes source/dev/images/icons/layout_edit.png | Bin 0 -> 660 bytes source/dev/images/icons/layout_error.png | Bin 0 -> 642 bytes source/dev/images/icons/layout_header.png | Bin 0 -> 486 bytes source/dev/images/icons/layout_link.png | Bin 0 -> 600 bytes source/dev/images/icons/layout_sidebar.png | Bin 0 -> 433 bytes source/dev/images/icons/lightbulb.png | Bin 0 -> 725 bytes source/dev/images/icons/lightbulb_add.png | Bin 0 -> 783 bytes source/dev/images/icons/lightbulb_delete.png | Bin 0 -> 801 bytes source/dev/images/icons/lightbulb_off.png | Bin 0 -> 648 bytes source/dev/images/icons/lightning.png | Bin 0 -> 595 bytes source/dev/images/icons/lightning_add.png | Bin 0 -> 690 bytes source/dev/images/icons/lightning_delete.png | Bin 0 -> 706 bytes source/dev/images/icons/lightning_go.png | Bin 0 -> 727 bytes source/dev/images/icons/link.png | Bin 0 -> 343 bytes source/dev/images/icons/link_add.png | Bin 0 -> 523 bytes source/dev/images/icons/link_break.png | Bin 0 -> 605 bytes source/dev/images/icons/link_delete.png | Bin 0 -> 545 bytes source/dev/images/icons/link_edit.png | Bin 0 -> 648 bytes source/dev/images/icons/link_error.png | Bin 0 -> 642 bytes source/dev/images/icons/link_go.png | Bin 0 -> 603 bytes source/dev/images/icons/lock.png | Bin 0 -> 749 bytes source/dev/images/icons/lock_add.png | Bin 0 -> 793 bytes source/dev/images/icons/lock_break.png | Bin 0 -> 771 bytes source/dev/images/icons/lock_delete.png | Bin 0 -> 815 bytes source/dev/images/icons/lock_edit.png | Bin 0 -> 861 bytes source/dev/images/icons/lock_go.png | Bin 0 -> 829 bytes source/dev/images/icons/lock_open.png | Bin 0 -> 727 bytes source/dev/images/icons/lorry.png | Bin 0 -> 582 bytes source/dev/images/icons/lorry_add.png | Bin 0 -> 675 bytes source/dev/images/icons/lorry_delete.png | Bin 0 -> 683 bytes source/dev/images/icons/lorry_error.png | Bin 0 -> 739 bytes source/dev/images/icons/lorry_flatbed.png | Bin 0 -> 399 bytes source/dev/images/icons/lorry_go.png | Bin 0 -> 699 bytes source/dev/images/icons/lorry_link.png | Bin 0 -> 751 bytes source/dev/images/icons/magifier_zoom_out.png | Bin 0 -> 601 bytes source/dev/images/icons/magnifier.png | Bin 0 -> 567 bytes source/dev/images/icons/magnifier_zoom_in.png | Bin 0 -> 626 bytes source/dev/images/icons/male.png | Bin 0 -> 614 bytes source/dev/images/icons/map.png | Bin 0 -> 804 bytes source/dev/images/icons/map_add.png | Bin 0 -> 836 bytes source/dev/images/icons/map_delete.png | Bin 0 -> 835 bytes source/dev/images/icons/map_edit.png | Bin 0 -> 865 bytes source/dev/images/icons/map_go.png | Bin 0 -> 842 bytes source/dev/images/icons/map_magnify.png | Bin 0 -> 797 bytes source/dev/images/icons/medal_bronze_1.png | Bin 0 -> 640 bytes source/dev/images/icons/medal_bronze_2.png | Bin 0 -> 654 bytes source/dev/images/icons/medal_bronze_3.png | Bin 0 -> 646 bytes source/dev/images/icons/medal_bronze_add.png | Bin 0 -> 747 bytes .../dev/images/icons/medal_bronze_delete.png | Bin 0 -> 730 bytes source/dev/images/icons/medal_gold_1.png | Bin 0 -> 629 bytes source/dev/images/icons/medal_gold_2.png | Bin 0 -> 641 bytes source/dev/images/icons/medal_gold_3.png | Bin 0 -> 634 bytes source/dev/images/icons/medal_gold_add.png | Bin 0 -> 733 bytes source/dev/images/icons/medal_gold_delete.png | Bin 0 -> 724 bytes source/dev/images/icons/medal_silver_1.png | Bin 0 -> 589 bytes source/dev/images/icons/medal_silver_2.png | Bin 0 -> 600 bytes source/dev/images/icons/medal_silver_3.png | Bin 0 -> 597 bytes source/dev/images/icons/medal_silver_add.png | Bin 0 -> 714 bytes .../dev/images/icons/medal_silver_delete.png | Bin 0 -> 714 bytes source/dev/images/icons/money.png | Bin 0 -> 677 bytes source/dev/images/icons/money_add.png | Bin 0 -> 730 bytes source/dev/images/icons/money_delete.png | Bin 0 -> 751 bytes source/dev/images/icons/money_dollar.png | Bin 0 -> 575 bytes source/dev/images/icons/money_euro.png | Bin 0 -> 547 bytes source/dev/images/icons/money_pound.png | Bin 0 -> 511 bytes source/dev/images/icons/money_yen.png | Bin 0 -> 506 bytes source/dev/images/icons/monitor.png | Bin 0 -> 612 bytes source/dev/images/icons/monitor_add.png | Bin 0 -> 692 bytes source/dev/images/icons/monitor_delete.png | Bin 0 -> 691 bytes source/dev/images/icons/monitor_edit.png | Bin 0 -> 755 bytes source/dev/images/icons/monitor_error.png | Bin 0 -> 714 bytes source/dev/images/icons/monitor_go.png | Bin 0 -> 696 bytes source/dev/images/icons/monitor_lightning.png | Bin 0 -> 768 bytes source/dev/images/icons/monitor_link.png | Bin 0 -> 736 bytes source/dev/images/icons/mouse.png | Bin 0 -> 579 bytes source/dev/images/icons/mouse_add.png | Bin 0 -> 672 bytes source/dev/images/icons/mouse_delete.png | Bin 0 -> 686 bytes source/dev/images/icons/mouse_error.png | Bin 0 -> 735 bytes source/dev/images/icons/music.png | Bin 0 -> 381 bytes source/dev/images/icons/new.png | Bin 0 -> 318 bytes source/dev/images/icons/newspaper.png | Bin 0 -> 600 bytes source/dev/images/icons/newspaper_add.png | Bin 0 -> 693 bytes source/dev/images/icons/newspaper_delete.png | Bin 0 -> 720 bytes source/dev/images/icons/newspaper_go.png | Bin 0 -> 742 bytes source/dev/images/icons/newspaper_link.png | Bin 0 -> 731 bytes source/dev/images/icons/note.png | Bin 0 -> 500 bytes source/dev/images/icons/note_add.png | Bin 0 -> 604 bytes source/dev/images/icons/note_delete.png | Bin 0 -> 630 bytes source/dev/images/icons/note_edit.png | Bin 0 -> 714 bytes source/dev/images/icons/note_error.png | Bin 0 -> 680 bytes source/dev/images/icons/note_go.png | Bin 0 -> 661 bytes source/dev/images/icons/overlays.png | Bin 0 -> 660 bytes source/dev/images/icons/package.png | Bin 0 -> 845 bytes source/dev/images/icons/package_add.png | Bin 0 -> 858 bytes source/dev/images/icons/package_delete.png | Bin 0 -> 869 bytes source/dev/images/icons/package_go.png | Bin 0 -> 887 bytes source/dev/images/icons/package_green.png | Bin 0 -> 859 bytes source/dev/images/icons/package_link.png | Bin 0 -> 892 bytes source/dev/images/icons/page.png | Bin 0 -> 635 bytes source/dev/images/icons/page_add.png | Bin 0 -> 739 bytes source/dev/images/icons/page_attach.png | Bin 0 -> 794 bytes source/dev/images/icons/page_code.png | Bin 0 -> 818 bytes source/dev/images/icons/page_copy.png | Bin 0 -> 652 bytes source/dev/images/icons/page_delete.png | Bin 0 -> 740 bytes source/dev/images/icons/page_edit.png | Bin 0 -> 807 bytes source/dev/images/icons/page_error.png | Bin 0 -> 793 bytes source/dev/images/icons/page_excel.png | Bin 0 -> 795 bytes source/dev/images/icons/page_find.png | Bin 0 -> 879 bytes source/dev/images/icons/page_gear.png | Bin 0 -> 833 bytes source/dev/images/icons/page_go.png | Bin 0 -> 779 bytes source/dev/images/icons/page_green.png | Bin 0 -> 621 bytes source/dev/images/icons/page_key.png | Bin 0 -> 801 bytes source/dev/images/icons/page_lightning.png | Bin 0 -> 839 bytes source/dev/images/icons/page_link.png | Bin 0 -> 824 bytes source/dev/images/icons/page_paintbrush.png | Bin 0 -> 813 bytes source/dev/images/icons/page_paste.png | Bin 0 -> 703 bytes source/dev/images/icons/page_red.png | Bin 0 -> 641 bytes source/dev/images/icons/page_refresh.png | Bin 0 -> 858 bytes source/dev/images/icons/page_save.png | Bin 0 -> 774 bytes source/dev/images/icons/page_white.png | Bin 0 -> 294 bytes .../dev/images/icons/page_white_acrobat.png | Bin 0 -> 530 bytes .../images/icons/page_white_actionscript.png | Bin 0 -> 600 bytes source/dev/images/icons/page_white_add.png | Bin 0 -> 456 bytes source/dev/images/icons/page_white_c.png | Bin 0 -> 527 bytes source/dev/images/icons/page_white_camera.png | Bin 0 -> 635 bytes source/dev/images/icons/page_white_cd.png | Bin 0 -> 607 bytes source/dev/images/icons/page_white_code.png | Bin 0 -> 542 bytes .../dev/images/icons/page_white_code_red.png | Bin 0 -> 526 bytes .../images/icons/page_white_coldfusion.png | Bin 0 -> 527 bytes .../images/icons/page_white_compressed.png | Bin 0 -> 672 bytes source/dev/images/icons/page_white_copy.png | Bin 0 -> 309 bytes .../dev/images/icons/page_white_cplusplus.png | Bin 0 -> 560 bytes source/dev/images/icons/page_white_csharp.png | Bin 0 -> 641 bytes source/dev/images/icons/page_white_cup.png | Bin 0 -> 580 bytes .../dev/images/icons/page_white_database.png | Bin 0 -> 515 bytes source/dev/images/icons/page_white_delete.png | Bin 0 -> 480 bytes source/dev/images/icons/page_white_dvd.png | Bin 0 -> 576 bytes source/dev/images/icons/page_white_edit.png | Bin 0 -> 556 bytes source/dev/images/icons/page_white_error.png | Bin 0 -> 564 bytes source/dev/images/icons/page_white_excel.png | Bin 0 -> 604 bytes source/dev/images/icons/page_white_find.png | Bin 0 -> 620 bytes source/dev/images/icons/page_white_flash.png | Bin 0 -> 517 bytes .../dev/images/icons/page_white_freehand.png | Bin 0 -> 576 bytes source/dev/images/icons/page_white_gear.png | Bin 0 -> 400 bytes source/dev/images/icons/page_white_get.png | Bin 0 -> 461 bytes source/dev/images/icons/page_white_go.png | Bin 0 -> 555 bytes source/dev/images/icons/page_white_h.png | Bin 0 -> 543 bytes .../images/icons/page_white_horizontal.png | Bin 0 -> 296 bytes source/dev/images/icons/page_white_key.png | Bin 0 -> 557 bytes .../dev/images/icons/page_white_lightning.png | Bin 0 -> 608 bytes source/dev/images/icons/page_white_link.png | Bin 0 -> 560 bytes .../dev/images/icons/page_white_magnify.png | Bin 0 -> 495 bytes source/dev/images/icons/page_white_medal.png | Bin 0 -> 656 bytes source/dev/images/icons/page_white_office.png | Bin 0 -> 722 bytes source/dev/images/icons/page_white_paint.png | Bin 0 -> 628 bytes .../images/icons/page_white_paintbrush.png | Bin 0 -> 555 bytes source/dev/images/icons/page_white_paste.png | Bin 0 -> 607 bytes source/dev/images/icons/page_white_php.png | Bin 0 -> 479 bytes .../dev/images/icons/page_white_picture.png | Bin 0 -> 610 bytes .../images/icons/page_white_powerpoint.png | Bin 0 -> 543 bytes source/dev/images/icons/page_white_put.png | Bin 0 -> 467 bytes source/dev/images/icons/page_white_ruby.png | Bin 0 -> 565 bytes source/dev/images/icons/page_white_stack.png | Bin 0 -> 317 bytes source/dev/images/icons/page_white_star.png | Bin 0 -> 504 bytes source/dev/images/icons/page_white_swoosh.png | Bin 0 -> 629 bytes source/dev/images/icons/page_white_text.png | Bin 0 -> 342 bytes .../images/icons/page_white_text_width.png | Bin 0 -> 315 bytes source/dev/images/icons/page_white_tux.png | Bin 0 -> 607 bytes source/dev/images/icons/page_white_vector.png | Bin 0 -> 581 bytes .../images/icons/page_white_visualstudio.png | Bin 0 -> 641 bytes source/dev/images/icons/page_white_width.png | Bin 0 -> 309 bytes source/dev/images/icons/page_white_word.png | Bin 0 -> 630 bytes source/dev/images/icons/page_white_world.png | Bin 0 -> 676 bytes source/dev/images/icons/page_white_wrench.png | Bin 0 -> 551 bytes source/dev/images/icons/page_white_zip.png | Bin 0 -> 379 bytes source/dev/images/icons/page_word.png | Bin 0 -> 777 bytes source/dev/images/icons/page_world.png | Bin 0 -> 903 bytes source/dev/images/icons/paintbrush.png | Bin 0 -> 497 bytes source/dev/images/icons/paintcan.png | Bin 0 -> 655 bytes source/dev/images/icons/palette.png | Bin 0 -> 801 bytes source/dev/images/icons/paste_plain.png | Bin 0 -> 605 bytes source/dev/images/icons/paste_word.png | Bin 0 -> 701 bytes source/dev/images/icons/pencil.png | Bin 0 -> 391 bytes source/dev/images/icons/pencil_add.png | Bin 0 -> 529 bytes source/dev/images/icons/pencil_delete.png | Bin 0 -> 546 bytes source/dev/images/icons/pencil_go.png | Bin 0 -> 607 bytes source/dev/images/icons/phone.png | Bin 0 -> 488 bytes source/dev/images/icons/phone_add.png | Bin 0 -> 595 bytes source/dev/images/icons/phone_delete.png | Bin 0 -> 615 bytes source/dev/images/icons/phone_sound.png | Bin 0 -> 677 bytes source/dev/images/icons/photo.png | Bin 0 -> 589 bytes source/dev/images/icons/photo_add.png | Bin 0 -> 694 bytes source/dev/images/icons/photo_delete.png | Bin 0 -> 703 bytes source/dev/images/icons/photo_link.png | Bin 0 -> 776 bytes source/dev/images/icons/photos.png | Bin 0 -> 647 bytes source/dev/images/icons/picture.png | Bin 0 -> 606 bytes source/dev/images/icons/picture_add.png | Bin 0 -> 706 bytes source/dev/images/icons/picture_delete.png | Bin 0 -> 736 bytes source/dev/images/icons/picture_edit.png | Bin 0 -> 813 bytes source/dev/images/icons/picture_empty.png | Bin 0 -> 463 bytes source/dev/images/icons/picture_error.png | Bin 0 -> 755 bytes source/dev/images/icons/picture_go.png | Bin 0 -> 758 bytes source/dev/images/icons/picture_key.png | Bin 0 -> 784 bytes source/dev/images/icons/picture_link.png | Bin 0 -> 801 bytes source/dev/images/icons/picture_save.png | Bin 0 -> 755 bytes source/dev/images/icons/pictures.png | Bin 0 -> 650 bytes source/dev/images/icons/pilcrow.png | Bin 0 -> 316 bytes source/dev/images/icons/pill.png | Bin 0 -> 662 bytes source/dev/images/icons/pill_add.png | Bin 0 -> 742 bytes source/dev/images/icons/pill_delete.png | Bin 0 -> 754 bytes source/dev/images/icons/pill_go.png | Bin 0 -> 771 bytes source/dev/images/icons/plugin.png | Bin 0 -> 591 bytes source/dev/images/icons/plugin_add.png | Bin 0 -> 650 bytes source/dev/images/icons/plugin_delete.png | Bin 0 -> 685 bytes source/dev/images/icons/plugin_disabled.png | Bin 0 -> 347 bytes source/dev/images/icons/plugin_edit.png | Bin 0 -> 705 bytes source/dev/images/icons/plugin_error.png | Bin 0 -> 702 bytes source/dev/images/icons/plugin_go.png | Bin 0 -> 694 bytes source/dev/images/icons/plugin_link.png | Bin 0 -> 704 bytes source/dev/images/icons/printer.png | Bin 0 -> 674 bytes source/dev/images/icons/printer_add.png | Bin 0 -> 728 bytes source/dev/images/icons/printer_delete.png | Bin 0 -> 738 bytes source/dev/images/icons/printer_empty.png | Bin 0 -> 350 bytes source/dev/images/icons/printer_error.png | Bin 0 -> 811 bytes source/dev/images/icons/rainbow.png | Bin 0 -> 602 bytes source/dev/images/icons/report.png | Bin 0 -> 597 bytes source/dev/images/icons/report_add.png | Bin 0 -> 655 bytes source/dev/images/icons/report_delete.png | Bin 0 -> 671 bytes source/dev/images/icons/report_disk.png | Bin 0 -> 737 bytes source/dev/images/icons/report_edit.png | Bin 0 -> 708 bytes source/dev/images/icons/report_go.png | Bin 0 -> 719 bytes source/dev/images/icons/report_key.png | Bin 0 -> 704 bytes source/dev/images/icons/report_link.png | Bin 0 -> 697 bytes source/dev/images/icons/report_magnify.png | Bin 0 -> 686 bytes source/dev/images/icons/report_picture.png | Bin 0 -> 710 bytes source/dev/images/icons/report_user.png | Bin 0 -> 731 bytes source/dev/images/icons/report_word.png | Bin 0 -> 691 bytes source/dev/images/icons/resultset_first.png | Bin 0 -> 485 bytes source/dev/images/icons/resultset_last.png | Bin 0 -> 485 bytes source/dev/images/icons/resultset_next.png | Bin 0 -> 345 bytes .../dev/images/icons/resultset_previous.png | Bin 0 -> 350 bytes source/dev/images/icons/rosette.png | Bin 0 -> 612 bytes source/dev/images/icons/rss.png | Bin 0 -> 530 bytes source/dev/images/icons/rss_add.png | Bin 0 -> 627 bytes source/dev/images/icons/rss_delete.png | Bin 0 -> 633 bytes source/dev/images/icons/rss_go.png | Bin 0 -> 635 bytes source/dev/images/icons/rss_valid.png | Bin 0 -> 660 bytes source/dev/images/icons/ruby.png | Bin 0 -> 535 bytes source/dev/images/icons/ruby_add.png | Bin 0 -> 635 bytes source/dev/images/icons/ruby_delete.png | Bin 0 -> 650 bytes source/dev/images/icons/ruby_gear.png | Bin 0 -> 660 bytes source/dev/images/icons/ruby_get.png | Bin 0 -> 637 bytes source/dev/images/icons/ruby_go.png | Bin 0 -> 674 bytes source/dev/images/icons/ruby_key.png | Bin 0 -> 683 bytes source/dev/images/icons/ruby_link.png | Bin 0 -> 711 bytes source/dev/images/icons/ruby_put.png | Bin 0 -> 639 bytes source/dev/images/icons/script.png | Bin 0 -> 748 bytes source/dev/images/icons/script_add.png | Bin 0 -> 791 bytes source/dev/images/icons/script_code.png | Bin 0 -> 840 bytes source/dev/images/icons/script_code_red.png | Bin 0 -> 849 bytes source/dev/images/icons/script_delete.png | Bin 0 -> 802 bytes source/dev/images/icons/script_edit.png | Bin 0 -> 841 bytes source/dev/images/icons/script_error.png | Bin 0 -> 837 bytes source/dev/images/icons/script_gear.png | Bin 0 -> 826 bytes source/dev/images/icons/script_go.png | Bin 0 -> 839 bytes source/dev/images/icons/script_key.png | Bin 0 -> 836 bytes source/dev/images/icons/script_lightning.png | Bin 0 -> 864 bytes source/dev/images/icons/script_link.png | Bin 0 -> 844 bytes source/dev/images/icons/script_palette.png | Bin 0 -> 874 bytes source/dev/images/icons/script_save.png | Bin 0 -> 804 bytes source/dev/images/icons/server.png | Bin 0 -> 530 bytes source/dev/images/icons/server_add.png | Bin 0 -> 673 bytes source/dev/images/icons/server_chart.png | Bin 0 -> 673 bytes source/dev/images/icons/server_compressed.png | Bin 0 -> 721 bytes source/dev/images/icons/server_connect.png | Bin 0 -> 755 bytes source/dev/images/icons/server_database.png | Bin 0 -> 666 bytes source/dev/images/icons/server_delete.png | Bin 0 -> 668 bytes source/dev/images/icons/server_edit.png | Bin 0 -> 727 bytes source/dev/images/icons/server_error.png | Bin 0 -> 678 bytes source/dev/images/icons/server_go.png | Bin 0 -> 706 bytes source/dev/images/icons/server_key.png | Bin 0 -> 734 bytes source/dev/images/icons/server_lightning.png | Bin 0 -> 729 bytes source/dev/images/icons/server_link.png | Bin 0 -> 706 bytes .../dev/images/icons/server_uncompressed.png | Bin 0 -> 669 bytes source/dev/images/icons/shading.png | Bin 0 -> 183 bytes .../dev/images/icons/shape_align_bottom.png | Bin 0 -> 398 bytes .../dev/images/icons/shape_align_center.png | Bin 0 -> 384 bytes source/dev/images/icons/shape_align_left.png | Bin 0 -> 402 bytes .../dev/images/icons/shape_align_middle.png | Bin 0 -> 414 bytes source/dev/images/icons/shape_align_right.png | Bin 0 -> 401 bytes source/dev/images/icons/shape_align_top.png | Bin 0 -> 406 bytes .../images/icons/shape_flip_horizontal.png | Bin 0 -> 397 bytes .../dev/images/icons/shape_flip_vertical.png | Bin 0 -> 362 bytes source/dev/images/icons/shape_group.png | Bin 0 -> 553 bytes source/dev/images/icons/shape_handles.png | Bin 0 -> 538 bytes source/dev/images/icons/shape_move_back.png | Bin 0 -> 395 bytes .../dev/images/icons/shape_move_backwards.png | Bin 0 -> 358 bytes .../dev/images/icons/shape_move_forwards.png | Bin 0 -> 381 bytes source/dev/images/icons/shape_move_front.png | Bin 0 -> 435 bytes .../icons/shape_rotate_anticlockwise.png | Bin 0 -> 618 bytes .../images/icons/shape_rotate_clockwise.png | Bin 0 -> 618 bytes source/dev/images/icons/shape_square.png | Bin 0 -> 353 bytes source/dev/images/icons/shape_square_add.png | Bin 0 -> 539 bytes .../dev/images/icons/shape_square_delete.png | Bin 0 -> 537 bytes source/dev/images/icons/shape_square_edit.png | Bin 0 -> 639 bytes .../dev/images/icons/shape_square_error.png | Bin 0 -> 570 bytes source/dev/images/icons/shape_square_go.png | Bin 0 -> 566 bytes source/dev/images/icons/shape_square_key.png | Bin 0 -> 607 bytes source/dev/images/icons/shape_square_link.png | Bin 0 -> 633 bytes source/dev/images/icons/shape_ungroup.png | Bin 0 -> 624 bytes source/dev/images/icons/shield.png | Bin 0 -> 687 bytes source/dev/images/icons/shield_add.png | Bin 0 -> 733 bytes source/dev/images/icons/shield_delete.png | Bin 0 -> 755 bytes source/dev/images/icons/shield_go.png | Bin 0 -> 768 bytes source/dev/images/icons/sitemap.png | Bin 0 -> 278 bytes source/dev/images/icons/sitemap_color.png | Bin 0 -> 345 bytes source/dev/images/icons/sound.png | Bin 0 -> 551 bytes source/dev/images/icons/sound_add.png | Bin 0 -> 624 bytes source/dev/images/icons/sound_delete.png | Bin 0 -> 654 bytes source/dev/images/icons/sound_low.png | Bin 0 -> 467 bytes source/dev/images/icons/sound_mute.png | Bin 0 -> 418 bytes source/dev/images/icons/sound_none.png | Bin 0 -> 361 bytes source/dev/images/icons/spellcheck.png | Bin 0 -> 579 bytes source/dev/images/icons/sport_8ball.png | Bin 0 -> 490 bytes source/dev/images/icons/sport_basketball.png | Bin 0 -> 955 bytes source/dev/images/icons/sport_football.png | Bin 0 -> 824 bytes source/dev/images/icons/sport_golf.png | Bin 0 -> 500 bytes source/dev/images/icons/sport_raquet.png | Bin 0 -> 660 bytes source/dev/images/icons/sport_shuttlecock.png | Bin 0 -> 626 bytes source/dev/images/icons/sport_soccer.png | Bin 0 -> 512 bytes source/dev/images/icons/sport_tennis.png | Bin 0 -> 875 bytes source/dev/images/icons/star.png | Bin 0 -> 657 bytes source/dev/images/icons/status_away.png | Bin 0 -> 736 bytes source/dev/images/icons/status_busy.png | Bin 0 -> 697 bytes source/dev/images/icons/status_offline.png | Bin 0 -> 420 bytes source/dev/images/icons/status_online.png | Bin 0 -> 684 bytes source/dev/images/icons/stop.png | Bin 0 -> 663 bytes source/dev/images/icons/style.png | Bin 0 -> 771 bytes source/dev/images/icons/style_add.png | Bin 0 -> 791 bytes source/dev/images/icons/style_delete.png | Bin 0 -> 808 bytes source/dev/images/icons/style_edit.png | Bin 0 -> 882 bytes source/dev/images/icons/style_go.png | Bin 0 -> 813 bytes source/dev/images/icons/sum.png | Bin 0 -> 289 bytes source/dev/images/icons/tab.png | Bin 0 -> 303 bytes source/dev/images/icons/tab_add.png | Bin 0 -> 444 bytes source/dev/images/icons/tab_delete.png | Bin 0 -> 457 bytes source/dev/images/icons/tab_edit.png | Bin 0 -> 520 bytes source/dev/images/icons/tab_go.png | Bin 0 -> 506 bytes source/dev/images/icons/table.png | Bin 0 -> 528 bytes source/dev/images/icons/table_add.png | Bin 0 -> 608 bytes source/dev/images/icons/table_delete.png | Bin 0 -> 632 bytes source/dev/images/icons/table_edit.png | Bin 0 -> 695 bytes source/dev/images/icons/table_error.png | Bin 0 -> 687 bytes source/dev/images/icons/table_gear.png | Bin 0 -> 658 bytes source/dev/images/icons/table_go.png | Bin 0 -> 683 bytes source/dev/images/icons/table_key.png | Bin 0 -> 693 bytes source/dev/images/icons/table_lightning.png | Bin 0 -> 686 bytes source/dev/images/icons/table_link.png | Bin 0 -> 672 bytes source/dev/images/icons/table_multiple.png | Bin 0 -> 594 bytes source/dev/images/icons/table_refresh.png | Bin 0 -> 749 bytes .../dev/images/icons/table_relationship.png | Bin 0 -> 603 bytes source/dev/images/icons/table_row_delete.png | Bin 0 -> 589 bytes source/dev/images/icons/table_row_insert.png | Bin 0 -> 609 bytes source/dev/images/icons/table_save.png | Bin 0 -> 723 bytes source/dev/images/icons/table_sort.png | Bin 0 -> 678 bytes source/dev/images/icons/tag.png | Bin 0 -> 364 bytes source/dev/images/icons/tag_blue.png | Bin 0 -> 525 bytes source/dev/images/icons/tag_blue_add.png | Bin 0 -> 616 bytes source/dev/images/icons/tag_blue_delete.png | Bin 0 -> 647 bytes source/dev/images/icons/tag_blue_edit.png | Bin 0 -> 688 bytes source/dev/images/icons/tag_green.png | Bin 0 -> 557 bytes source/dev/images/icons/tag_orange.png | Bin 0 -> 526 bytes source/dev/images/icons/tag_pink.png | Bin 0 -> 520 bytes source/dev/images/icons/tag_purple.png | Bin 0 -> 541 bytes source/dev/images/icons/tag_red.png | Bin 0 -> 532 bytes source/dev/images/icons/tag_yellow.png | Bin 0 -> 528 bytes source/dev/images/icons/telephone.png | Bin 0 -> 791 bytes source/dev/images/icons/telephone_add.png | Bin 0 -> 832 bytes source/dev/images/icons/telephone_delete.png | Bin 0 -> 856 bytes source/dev/images/icons/telephone_edit.png | Bin 0 -> 885 bytes source/dev/images/icons/telephone_error.png | Bin 0 -> 884 bytes source/dev/images/icons/telephone_go.png | Bin 0 -> 865 bytes source/dev/images/icons/telephone_key.png | Bin 0 -> 881 bytes source/dev/images/icons/telephone_link.png | Bin 0 -> 875 bytes source/dev/images/icons/television.png | Bin 0 -> 696 bytes source/dev/images/icons/television_add.png | Bin 0 -> 778 bytes source/dev/images/icons/television_delete.png | Bin 0 -> 802 bytes source/dev/images/icons/text_align_center.png | Bin 0 -> 234 bytes .../dev/images/icons/text_align_justify.png | Bin 0 -> 209 bytes source/dev/images/icons/text_align_left.png | Bin 0 -> 209 bytes source/dev/images/icons/text_align_right.png | Bin 0 -> 209 bytes source/dev/images/icons/text_allcaps.png | Bin 0 -> 284 bytes source/dev/images/icons/text_bold.png | Bin 0 -> 297 bytes source/dev/images/icons/text_columns.png | Bin 0 -> 246 bytes source/dev/images/icons/text_dropcaps.png | Bin 0 -> 314 bytes source/dev/images/icons/text_heading_1.png | Bin 0 -> 276 bytes source/dev/images/icons/text_heading_2.png | Bin 0 -> 293 bytes source/dev/images/icons/text_heading_3.png | Bin 0 -> 292 bytes source/dev/images/icons/text_heading_4.png | Bin 0 -> 293 bytes source/dev/images/icons/text_heading_5.png | Bin 0 -> 304 bytes source/dev/images/icons/text_heading_6.png | Bin 0 -> 294 bytes .../dev/images/icons/text_horizontalrule.png | Bin 0 -> 277 bytes source/dev/images/icons/text_indent.png | Bin 0 -> 353 bytes .../dev/images/icons/text_indent_remove.png | Bin 0 -> 351 bytes source/dev/images/icons/text_italic.png | Bin 0 -> 223 bytes source/dev/images/icons/text_kerning.png | Bin 0 -> 454 bytes source/dev/images/icons/text_letter_omega.png | Bin 0 -> 486 bytes .../dev/images/icons/text_letterspacing.png | Bin 0 -> 460 bytes source/dev/images/icons/text_linespacing.png | Bin 0 -> 319 bytes source/dev/images/icons/text_list_bullets.png | Bin 0 -> 301 bytes source/dev/images/icons/text_list_numbers.png | Bin 0 -> 315 bytes source/dev/images/icons/text_lowercase.png | Bin 0 -> 654 bytes .../dev/images/icons/text_padding_bottom.png | Bin 0 -> 237 bytes source/dev/images/icons/text_padding_left.png | Bin 0 -> 271 bytes .../dev/images/icons/text_padding_right.png | Bin 0 -> 271 bytes source/dev/images/icons/text_padding_top.png | Bin 0 -> 236 bytes source/dev/images/icons/text_replace.png | Bin 0 -> 636 bytes source/dev/images/icons/text_signature.png | Bin 0 -> 472 bytes source/dev/images/icons/text_smallcaps.png | Bin 0 -> 260 bytes .../dev/images/icons/text_strikethrough.png | Bin 0 -> 269 bytes source/dev/images/icons/text_subscript.png | Bin 0 -> 375 bytes source/dev/images/icons/text_superscript.png | Bin 0 -> 376 bytes source/dev/images/icons/text_underline.png | Bin 0 -> 273 bytes source/dev/images/icons/text_uppercase.png | Bin 0 -> 693 bytes source/dev/images/icons/textfield.png | Bin 0 -> 124 bytes source/dev/images/icons/textfield_add.png | Bin 0 -> 276 bytes source/dev/images/icons/textfield_delete.png | Bin 0 -> 290 bytes source/dev/images/icons/textfield_key.png | Bin 0 -> 401 bytes source/dev/images/icons/textfield_rename.png | Bin 0 -> 217 bytes source/dev/images/icons/thumb_down.png | Bin 0 -> 539 bytes source/dev/images/icons/thumb_up.png | Bin 0 -> 559 bytes source/dev/images/icons/tick.png | Bin 0 -> 481 bytes source/dev/images/icons/time.png | Bin 0 -> 735 bytes source/dev/images/icons/time_add.png | Bin 0 -> 767 bytes source/dev/images/icons/time_delete.png | Bin 0 -> 792 bytes source/dev/images/icons/time_go.png | Bin 0 -> 833 bytes source/dev/images/icons/timeline_marker.png | Bin 0 -> 327 bytes source/dev/images/icons/transmit.png | Bin 0 -> 683 bytes source/dev/images/icons/transmit_add.png | Bin 0 -> 739 bytes source/dev/images/icons/transmit_blue.png | Bin 0 -> 758 bytes source/dev/images/icons/transmit_delete.png | Bin 0 -> 764 bytes source/dev/images/icons/transmit_edit.png | Bin 0 -> 773 bytes source/dev/images/icons/transmit_error.png | Bin 0 -> 821 bytes source/dev/images/icons/transmit_go.png | Bin 0 -> 777 bytes source/dev/images/icons/tux.png | Bin 0 -> 638 bytes source/dev/images/icons/user.png | Bin 0 -> 685 bytes source/dev/images/icons/user_add.png | Bin 0 -> 691 bytes source/dev/images/icons/user_comment.png | Bin 0 -> 683 bytes source/dev/images/icons/user_delete.png | Bin 0 -> 713 bytes source/dev/images/icons/user_edit.png | Bin 0 -> 779 bytes source/dev/images/icons/user_female.png | Bin 0 -> 606 bytes source/dev/images/icons/user_go.png | Bin 0 -> 738 bytes source/dev/images/icons/user_gray.png | Bin 0 -> 650 bytes source/dev/images/icons/user_green.png | Bin 0 -> 668 bytes source/dev/images/icons/user_orange.png | Bin 0 -> 666 bytes source/dev/images/icons/user_red.png | Bin 0 -> 660 bytes source/dev/images/icons/user_suit.png | Bin 0 -> 693 bytes source/dev/images/icons/vcard.png | Bin 0 -> 533 bytes source/dev/images/icons/vcard_add.png | Bin 0 -> 627 bytes source/dev/images/icons/vcard_delete.png | Bin 0 -> 646 bytes source/dev/images/icons/vcard_edit.png | Bin 0 -> 747 bytes source/dev/images/icons/vector.png | Bin 0 -> 448 bytes source/dev/images/icons/vector_add.png | Bin 0 -> 580 bytes source/dev/images/icons/vector_delete.png | Bin 0 -> 601 bytes source/dev/images/icons/wand.png | Bin 0 -> 518 bytes source/dev/images/icons/weather_clouds.png | Bin 0 -> 523 bytes source/dev/images/icons/weather_cloudy.png | Bin 0 -> 636 bytes source/dev/images/icons/weather_lightning.png | Bin 0 -> 586 bytes source/dev/images/icons/weather_rain.png | Bin 0 -> 586 bytes source/dev/images/icons/weather_snow.png | Bin 0 -> 341 bytes source/dev/images/icons/weather_sun.png | Bin 0 -> 564 bytes source/dev/images/icons/webcam.png | Bin 0 -> 700 bytes source/dev/images/icons/webcam_add.png | Bin 0 -> 731 bytes source/dev/images/icons/webcam_delete.png | Bin 0 -> 751 bytes source/dev/images/icons/webcam_error.png | Bin 0 -> 770 bytes source/dev/images/icons/world.png | Bin 0 -> 888 bytes source/dev/images/icons/world_add.png | Bin 0 -> 906 bytes source/dev/images/icons/world_delete.png | Bin 0 -> 925 bytes source/dev/images/icons/world_edit.png | Bin 0 -> 891 bytes source/dev/images/icons/world_go.png | Bin 0 -> 928 bytes source/dev/images/icons/world_link.png | Bin 0 -> 918 bytes source/dev/images/icons/wrench.png | Bin 0 -> 551 bytes source/dev/images/icons/wrench_orange.png | Bin 0 -> 525 bytes source/dev/images/icons/xhtml.png | Bin 0 -> 595 bytes source/dev/images/icons/xhtml_add.png | Bin 0 -> 680 bytes source/dev/images/icons/xhtml_delete.png | Bin 0 -> 696 bytes source/dev/images/icons/xhtml_go.png | Bin 0 -> 697 bytes source/dev/images/icons/xhtml_valid.png | Bin 0 -> 718 bytes source/dev/images/icons/zoom.png | Bin 0 -> 662 bytes source/dev/images/icons/zoom_in.png | Bin 0 -> 668 bytes source/dev/images/icons/zoom_out.png | Bin 0 -> 651 bytes source/dev/images/logo/logo_baseline.psd | Bin 0 -> 76248 bytes source/dev/images/logo/logo_rendered.png | Bin 0 -> 8615 bytes source/dev/images/logo/logo_vector.ai | 222 + .../placeholders/jingle_video_local.psd | Bin 0 -> 250647 bytes source/dev/images/sprites/animate.psd | Bin 0 -> 74591 bytes source/dev/images/sprites/archives.psd | Bin 0 -> 41148 bytes source/dev/images/sprites/background.svg | 137 + source/dev/images/sprites/browsers.psd | Bin 0 -> 58807 bytes source/dev/images/sprites/buttons.psd | Bin 0 -> 22274 bytes source/dev/images/sprites/home.psd | Bin 0 -> 174650 bytes source/dev/images/sprites/install.psd | Bin 0 -> 92355 bytes source/dev/images/sprites/jingle.psd | Bin 0 -> 278265 bytes source/dev/images/sprites/manager.psd | Bin 0 -> 217038 bytes source/dev/images/sprites/me.psd | Bin 0 -> 65226 bytes source/dev/images/sprites/mini.psd | Bin 0 -> 122941 bytes source/dev/images/sprites/mobile.psd | Bin 0 -> 47660 bytes source/dev/images/sprites/smileys.psd | Bin 0 -> 101911 bytes source/dev/images/sprites/talk.psd | Bin 0 -> 300297 bytes source/dev/images/sprites/welcome.psd | Bin 0 -> 179580 bytes source/favicon.ico | Bin source/i18n/.htaccess | 2 + source/i18n/ar/LC_MESSAGES/main.mo | Bin 0 -> 12566 bytes source/i18n/ar/LC_MESSAGES/main.po | 2263 +++ source/i18n/bg/LC_MESSAGES/main.mo | Bin 0 -> 61290 bytes source/i18n/bg/LC_MESSAGES/main.po | 2422 +++ source/i18n/cs/LC_MESSAGES/main.mo | Bin 0 -> 55402 bytes source/i18n/cs/LC_MESSAGES/main.po | 2394 +++ source/i18n/de/LC_MESSAGES/main.mo | Bin 0 -> 57474 bytes source/i18n/de/LC_MESSAGES/main.po | 2428 +++ source/i18n/en/LC_MESSAGES/main.pot | 2107 +++ source/i18n/eo/LC_MESSAGES/main.mo | Bin 0 -> 45689 bytes source/i18n/eo/LC_MESSAGES/main.po | 2379 +++ source/i18n/es/LC_MESSAGES/main.mo | Bin 0 -> 54814 bytes source/i18n/es/LC_MESSAGES/main.po | 2411 +++ source/i18n/et/LC_MESSAGES/main.mo | Bin 0 -> 54615 bytes source/i18n/et/LC_MESSAGES/main.po | 2390 +++ source/i18n/fa/LC_MESSAGES/main.mo | Bin 0 -> 25942 bytes source/i18n/fa/LC_MESSAGES/main.po | 2262 +++ source/i18n/fr/LC_MESSAGES/main.mo | Bin 0 -> 58718 bytes source/i18n/fr/LC_MESSAGES/main.po | 2447 +++ source/i18n/he/LC_MESSAGES/main.mo | Bin 0 -> 62486 bytes source/i18n/he/LC_MESSAGES/main.po | 2352 +++ source/i18n/hu/LC_MESSAGES/main.mo | Bin 0 -> 47621 bytes source/i18n/hu/LC_MESSAGES/main.po | 2379 +++ source/i18n/id/LC_MESSAGES/main.mo | Bin 0 -> 47786 bytes source/i18n/id/LC_MESSAGES/main.po | 2399 +++ source/i18n/it/LC_MESSAGES/main.mo | Bin 0 -> 54840 bytes source/i18n/it/LC_MESSAGES/main.po | 2414 +++ source/i18n/ja/LC_MESSAGES/main.mo | Bin 0 -> 51826 bytes source/i18n/ja/LC_MESSAGES/main.po | 2359 +++ source/i18n/lb/LC_MESSAGES/main.mo | Bin 0 -> 56067 bytes source/i18n/lb/LC_MESSAGES/main.po | 2433 +++ source/i18n/mn/LC_MESSAGES/main.mo | Bin 0 -> 20935 bytes source/i18n/mn/LC_MESSAGES/main.po | 2258 +++ source/i18n/nl/LC_MESSAGES/main.mo | Bin 0 -> 15498 bytes source/i18n/nl/LC_MESSAGES/main.po | 2274 +++ source/i18n/oc/LC_MESSAGES/main.mo | Bin 0 -> 13147 bytes source/i18n/oc/LC_MESSAGES/main.po | 2273 +++ source/i18n/pl/LC_MESSAGES/main.mo | Bin 0 -> 54700 bytes source/i18n/pl/LC_MESSAGES/main.po | 2403 +++ source/i18n/pt-br/LC_MESSAGES/main.mo | Bin 0 -> 47012 bytes source/i18n/pt-br/LC_MESSAGES/main.po | 2375 +++ source/i18n/pt/LC_MESSAGES/main.mo | Bin 0 -> 50801 bytes source/i18n/pt/LC_MESSAGES/main.po | 2393 +++ source/i18n/ru/LC_MESSAGES/main.mo | Bin 0 -> 72186 bytes source/i18n/ru/LC_MESSAGES/main.po | 2408 +++ source/i18n/sk/LC_MESSAGES/main.mo | Bin 0 -> 40960 bytes source/i18n/sk/LC_MESSAGES/main.po | 2347 +++ source/i18n/sv/LC_MESSAGES/main.mo | Bin 0 -> 27972 bytes source/i18n/sv/LC_MESSAGES/main.po | 2288 +++ source/i18n/tr/LC_MESSAGES/main.mo | Bin 0 -> 48252 bytes source/i18n/tr/LC_MESSAGES/main.po | 2372 +++ source/i18n/uk/LC_MESSAGES/main.mo | Bin 0 -> 18746 bytes source/i18n/uk/LC_MESSAGES/main.po | 2264 +++ source/i18n/zh-cn/LC_MESSAGES/main.mo | Bin 0 -> 47410 bytes source/i18n/zh-cn/LC_MESSAGES/main.po | 2295 +++ source/i18n/zh-tw/LC_MESSAGES/main.mo | Bin 0 -> 47426 bytes source/i18n/zh-tw/LC_MESSAGES/main.po | 2295 +++ source/index.php | 139 +- source/log/.htaccess | 2 + source/server/analytics.php | 32 + source/server/avatar-upload.php | 107 + source/server/bosh.php | 171 + source/server/captcha.php | 97 + 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 | 223 + source/server/form-users.php | 30 + source/server/functions-advertising.php | 79 + source/server/functions-get.php | 320 + source/server/functions-manager.php | 807 + source/server/functions.php | 1634 ++ source/server/generate-chat.php | 259 + source/server/geolocation.php | 44 + source/server/get-store.php | 38 + source/server/get.php | 420 + 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 | 78 + source/server/music-search.php | 109 + source/server/post-design.php | 228 + source/server/post-hosts.php | 153 + source/server/post-main.php | 280 + 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 | 112 + 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 | 54 + source/server/vars-store.php | 29 + source/test/.htaccess | 2 + source/test/Gruntfile.js | 144 + 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 + 1327 files changed, 169316 insertions(+), 79 deletions(-) mode change 100755 => 100644 source/AUTHORS.md create mode 100644 source/CHANGELOG.md mode change 100755 => 100644 source/COPYING.md mode change 100755 => 100644 source/COPYING_FONT.md mode change 100755 => 100644 source/COPYING_MINI.md mode change 100755 => 100644 source/INSTALL.md create mode 100644 source/PROTOCOL.md mode change 100755 => 100644 source/README.md mode change 100755 => 100644 source/THANKS.md mode change 100755 => 100644 source/VERSION create mode 100644 source/app/.htaccess create mode 100644 source/app/bundles/anonymous.xml create mode 100644 source/app/bundles/desktop.xml create mode 100644 source/app/bundles/httpauth.xml create mode 100644 source/app/bundles/install.xml create mode 100644 source/app/bundles/manager.xml create mode 100644 source/app/bundles/mini.xml create mode 100644 source/app/bundles/mobile.xml create mode 100644 source/app/fonts/eot/ptsans.eot create mode 100644 source/app/fonts/eot/ptsansbold.eot create mode 100644 source/app/fonts/eot/ptsansbolditalic.eot create mode 100644 source/app/fonts/eot/ptsansitalic.eot create mode 100644 source/app/fonts/svg/ptsans.svg create mode 100644 source/app/fonts/svg/ptsansbold.svg create mode 100644 source/app/fonts/svg/ptsansbolditalic.svg create mode 100644 source/app/fonts/svg/ptsansitalic.svg create mode 100644 source/app/fonts/ttf/ptsans.ttf create mode 100644 source/app/fonts/ttf/ptsansbold.ttf create mode 100644 source/app/fonts/ttf/ptsansbolditalic.ttf create mode 100644 source/app/fonts/ttf/ptsansitalic.ttf create mode 100644 source/app/fonts/woff/ptsans.woff create mode 100644 source/app/fonts/woff/ptsansbold.woff create mode 100644 source/app/fonts/woff/ptsansbolditalic.woff create mode 100644 source/app/fonts/woff/ptsansitalic.woff create mode 100644 source/app/images/others/blank.gif create mode 100644 source/app/images/others/default-avatar.png create mode 100644 source/app/images/others/lock.png create mode 100644 source/app/images/placeholders/jingle_video_local.png create mode 100644 source/app/images/sprites/animate.gif create mode 100644 source/app/images/sprites/animate.png create mode 100644 source/app/images/sprites/archives.png create mode 100644 source/app/images/sprites/background.png create mode 100644 source/app/images/sprites/browsers.png create mode 100644 source/app/images/sprites/buttons.png create mode 100644 source/app/images/sprites/home.png create mode 100644 source/app/images/sprites/install.png create mode 100644 source/app/images/sprites/jingle.png create mode 100644 source/app/images/sprites/manager.png create mode 100644 source/app/images/sprites/me.png create mode 100644 source/app/images/sprites/mini.gif create mode 100644 source/app/images/sprites/mini.png create mode 100644 source/app/images/sprites/mobile.png create mode 100644 source/app/images/sprites/smileys.png create mode 100644 source/app/images/sprites/talk.png create mode 100644 source/app/images/sprites/welcome.png create mode 100644 source/app/images/wait/wait-big.gif create mode 100644 source/app/images/wait/wait-medium.png create mode 100644 source/app/images/wait/wait-small.gif create mode 100644 source/app/images/wait/wait-typing.gif create mode 100644 source/app/javascripts/adhoc.js create mode 100644 source/app/javascripts/anonymous.js create mode 100644 source/app/javascripts/audio.js create mode 100644 source/app/javascripts/autocompletion.js create mode 100644 source/app/javascripts/avatar.js create mode 100644 source/app/javascripts/base64.js create mode 100644 source/app/javascripts/board.js create mode 100644 source/app/javascripts/browser-detect.js create mode 100644 source/app/javascripts/bubble.js create mode 100644 source/app/javascripts/caps.js create mode 100644 source/app/javascripts/carbons.js create mode 100644 source/app/javascripts/chat.js create mode 100644 source/app/javascripts/chatstate.js create mode 100644 source/app/javascripts/common.js create mode 100644 source/app/javascripts/connection.js create mode 100644 source/app/javascripts/console.js create mode 100644 source/app/javascripts/constants.js create mode 100644 source/app/javascripts/dataform.js create mode 100644 source/app/javascripts/datastore.js create mode 100644 source/app/javascripts/date.js create mode 100644 source/app/javascripts/datejs.js create mode 100644 source/app/javascripts/directory.js create mode 100644 source/app/javascripts/discovery.js create mode 100644 source/app/javascripts/errors.js create mode 100644 source/app/javascripts/favorites.js create mode 100644 source/app/javascripts/features.js create mode 100644 source/app/javascripts/filter.js create mode 100644 source/app/javascripts/groupchat.js create mode 100644 source/app/javascripts/home.js create mode 100644 source/app/javascripts/httpauth.js create mode 100644 source/app/javascripts/httpreply.js create mode 100644 source/app/javascripts/inbox.js create mode 100644 source/app/javascripts/integratebox.js create mode 100644 source/app/javascripts/interface.js create mode 100644 source/app/javascripts/ios.js create mode 100644 source/app/javascripts/iq.js create mode 100644 source/app/javascripts/jingle.js create mode 100644 source/app/javascripts/jquery.form.js create mode 100644 source/app/javascripts/jquery.js create mode 100644 source/app/javascripts/jquery.json.js create mode 100644 source/app/javascripts/jquery.placeholder.js create mode 100644 source/app/javascripts/jquery.scrollto.js create mode 100644 source/app/javascripts/jquery.textrange.js create mode 100644 source/app/javascripts/jquery.timers.js create mode 100755 source/app/javascripts/jquery.ui.js create mode 100644 source/app/javascripts/jsjac.jingle.js create mode 100644 source/app/javascripts/jsjac.js create mode 100644 source/app/javascripts/jxhr.js create mode 100644 source/app/javascripts/links.js create mode 100644 source/app/javascripts/mam.js create mode 100644 source/app/javascripts/me.js create mode 100644 source/app/javascripts/message.js create mode 100644 source/app/javascripts/microblog.js create mode 100644 source/app/javascripts/mini.js create mode 100644 source/app/javascripts/mobile.js create mode 100644 source/app/javascripts/mucadmin.js create mode 100644 source/app/javascripts/music.js create mode 100644 source/app/javascripts/name.js create mode 100644 source/app/javascripts/notification.js create mode 100644 source/app/javascripts/oob.js create mode 100644 source/app/javascripts/options.js create mode 100644 source/app/javascripts/origin.js create mode 100644 source/app/javascripts/pep.js create mode 100644 source/app/javascripts/popup.js create mode 100644 source/app/javascripts/presence.js create mode 100644 source/app/javascripts/privacy.js create mode 100644 source/app/javascripts/pubsub.js create mode 100644 source/app/javascripts/receipts.js create mode 100644 source/app/javascripts/roster.js create mode 100644 source/app/javascripts/rosterx.js create mode 100644 source/app/javascripts/search.js create mode 100644 source/app/javascripts/smileys.js create mode 100644 source/app/javascripts/storage.js create mode 100644 source/app/javascripts/system.js create mode 100644 source/app/javascripts/talk.js create mode 100644 source/app/javascripts/tooltip.js create mode 100644 source/app/javascripts/userinfos.js create mode 100644 source/app/javascripts/utilities.js create mode 100644 source/app/javascripts/vcard.js create mode 100644 source/app/javascripts/welcome.js create mode 100644 source/app/javascripts/xmpplinks.js create mode 100644 source/app/sounds/incoming-call.mp3 create mode 100644 source/app/sounds/incoming-call.oga create mode 100644 source/app/sounds/new-chat.mp3 create mode 100644 source/app/sounds/new-chat.oga create mode 100644 source/app/sounds/notification.mp3 create mode 100644 source/app/sounds/notification.oga create mode 100644 source/app/sounds/outgoing-call.mp3 create mode 100644 source/app/sounds/outgoing-call.oga create mode 100644 source/app/sounds/receive-message.mp3 create mode 100644 source/app/sounds/receive-message.oga create mode 100644 source/app/stylesheets/adhoc.css create mode 100644 source/app/stylesheets/anonymous.css create mode 100644 source/app/stylesheets/board.css create mode 100644 source/app/stylesheets/channel.css create mode 100644 source/app/stylesheets/directory.css create mode 100644 source/app/stylesheets/discovery.css create mode 100644 source/app/stylesheets/favorites.css create mode 100644 source/app/stylesheets/fonts.css create mode 100644 source/app/stylesheets/home.css create mode 100644 source/app/stylesheets/ie.css create mode 100644 source/app/stylesheets/images.css create mode 100644 source/app/stylesheets/inbox.css create mode 100644 source/app/stylesheets/install.css create mode 100644 source/app/stylesheets/integratebox.css create mode 100644 source/app/stylesheets/ios.css create mode 100644 source/app/stylesheets/jingle.css create mode 100644 source/app/stylesheets/main.css create mode 100644 source/app/stylesheets/manager.css create mode 100644 source/app/stylesheets/me.css create mode 100644 source/app/stylesheets/mini.css create mode 100644 source/app/stylesheets/mobile.css create mode 100644 source/app/stylesheets/mucadmin.css create mode 100644 source/app/stylesheets/myinfos.css create mode 100644 source/app/stylesheets/options.css create mode 100644 source/app/stylesheets/others.css create mode 100644 source/app/stylesheets/pageengine.css create mode 100644 source/app/stylesheets/pageswitch.css create mode 100644 source/app/stylesheets/popup.css create mode 100644 source/app/stylesheets/privacy.css create mode 100644 source/app/stylesheets/roster.css create mode 100644 source/app/stylesheets/rosterx.css create mode 100644 source/app/stylesheets/search.css create mode 100644 source/app/stylesheets/smileys.css create mode 100644 source/app/stylesheets/stats-svg.css create mode 100644 source/app/stylesheets/tools.css create mode 100644 source/app/stylesheets/userinfos.css create mode 100644 source/app/stylesheets/vcard.css create mode 100644 source/app/stylesheets/welcome.css create mode 100644 source/dev/.htaccess create mode 100644 source/dev/images/icons/accept.png create mode 100644 source/dev/images/icons/add.png create mode 100644 source/dev/images/icons/anchor.png create mode 100644 source/dev/images/icons/application.png create mode 100644 source/dev/images/icons/application_add.png create mode 100644 source/dev/images/icons/application_cascade.png create mode 100644 source/dev/images/icons/application_delete.png create mode 100644 source/dev/images/icons/application_double.png create mode 100644 source/dev/images/icons/application_edit.png create mode 100644 source/dev/images/icons/application_error.png create mode 100644 source/dev/images/icons/application_form.png create mode 100644 source/dev/images/icons/application_form_add.png create mode 100644 source/dev/images/icons/application_form_delete.png create mode 100644 source/dev/images/icons/application_form_edit.png create mode 100644 source/dev/images/icons/application_form_magnify.png create mode 100644 source/dev/images/icons/application_get.png create mode 100644 source/dev/images/icons/application_go.png create mode 100644 source/dev/images/icons/application_home.png create mode 100644 source/dev/images/icons/application_key.png create mode 100644 source/dev/images/icons/application_lightning.png create mode 100644 source/dev/images/icons/application_link.png create mode 100644 source/dev/images/icons/application_osx.png create mode 100644 source/dev/images/icons/application_osx_terminal.png create mode 100644 source/dev/images/icons/application_put.png create mode 100644 source/dev/images/icons/application_side_boxes.png create mode 100644 source/dev/images/icons/application_side_contract.png create mode 100644 source/dev/images/icons/application_side_expand.png create mode 100644 source/dev/images/icons/application_side_list.png create mode 100644 source/dev/images/icons/application_side_tree.png create mode 100644 source/dev/images/icons/application_split.png create mode 100644 source/dev/images/icons/application_tile_horizontal.png create mode 100644 source/dev/images/icons/application_tile_vertical.png create mode 100644 source/dev/images/icons/application_view_columns.png create mode 100644 source/dev/images/icons/application_view_detail.png create mode 100644 source/dev/images/icons/application_view_gallery.png create mode 100644 source/dev/images/icons/application_view_icons.png create mode 100644 source/dev/images/icons/application_view_list.png create mode 100644 source/dev/images/icons/application_view_tile.png create mode 100644 source/dev/images/icons/application_xp.png create mode 100644 source/dev/images/icons/application_xp_terminal.png create mode 100644 source/dev/images/icons/arrow_branch.png create mode 100644 source/dev/images/icons/arrow_divide.png create mode 100644 source/dev/images/icons/arrow_down.png create mode 100644 source/dev/images/icons/arrow_in.png create mode 100644 source/dev/images/icons/arrow_inout.png create mode 100644 source/dev/images/icons/arrow_join.png create mode 100644 source/dev/images/icons/arrow_left.png create mode 100644 source/dev/images/icons/arrow_merge.png create mode 100644 source/dev/images/icons/arrow_out.png create mode 100644 source/dev/images/icons/arrow_redo.png create mode 100644 source/dev/images/icons/arrow_refresh.png create mode 100644 source/dev/images/icons/arrow_refresh_small.png create mode 100644 source/dev/images/icons/arrow_right.png create mode 100644 source/dev/images/icons/arrow_rotate_anticlockwise.png create mode 100644 source/dev/images/icons/arrow_rotate_clockwise.png create mode 100644 source/dev/images/icons/arrow_switch.png create mode 100644 source/dev/images/icons/arrow_turn_left.png create mode 100644 source/dev/images/icons/arrow_turn_right.png create mode 100644 source/dev/images/icons/arrow_undo.png create mode 100644 source/dev/images/icons/arrow_up.png create mode 100644 source/dev/images/icons/asterisk_orange.png create mode 100644 source/dev/images/icons/asterisk_yellow.png create mode 100644 source/dev/images/icons/attach.png create mode 100644 source/dev/images/icons/award_star_add.png create mode 100644 source/dev/images/icons/award_star_bronze_1.png create mode 100644 source/dev/images/icons/award_star_bronze_2.png create mode 100644 source/dev/images/icons/award_star_bronze_3.png create mode 100644 source/dev/images/icons/award_star_delete.png create mode 100644 source/dev/images/icons/award_star_gold_1.png create mode 100644 source/dev/images/icons/award_star_gold_2.png create mode 100644 source/dev/images/icons/award_star_gold_3.png create mode 100644 source/dev/images/icons/award_star_silver_1.png create mode 100644 source/dev/images/icons/award_star_silver_2.png create mode 100644 source/dev/images/icons/award_star_silver_3.png create mode 100644 source/dev/images/icons/basket.png create mode 100644 source/dev/images/icons/basket_add.png create mode 100644 source/dev/images/icons/basket_delete.png create mode 100644 source/dev/images/icons/basket_edit.png create mode 100644 source/dev/images/icons/basket_error.png create mode 100644 source/dev/images/icons/basket_go.png create mode 100644 source/dev/images/icons/basket_put.png create mode 100644 source/dev/images/icons/basket_remove.png create mode 100644 source/dev/images/icons/bell.png create mode 100644 source/dev/images/icons/bell_add.png create mode 100644 source/dev/images/icons/bell_delete.png create mode 100644 source/dev/images/icons/bell_error.png create mode 100644 source/dev/images/icons/bell_go.png create mode 100644 source/dev/images/icons/bell_link.png create mode 100644 source/dev/images/icons/bin.png create mode 100644 source/dev/images/icons/bin_closed.png create mode 100644 source/dev/images/icons/bin_empty.png create mode 100644 source/dev/images/icons/bomb.png create mode 100644 source/dev/images/icons/book.png create mode 100644 source/dev/images/icons/book_add.png create mode 100644 source/dev/images/icons/book_addresses.png create mode 100644 source/dev/images/icons/book_delete.png create mode 100644 source/dev/images/icons/book_edit.png create mode 100644 source/dev/images/icons/book_error.png create mode 100644 source/dev/images/icons/book_go.png create mode 100644 source/dev/images/icons/book_key.png create mode 100644 source/dev/images/icons/book_link.png create mode 100644 source/dev/images/icons/book_next.png create mode 100644 source/dev/images/icons/book_open.png create mode 100644 source/dev/images/icons/book_previous.png create mode 100644 source/dev/images/icons/box.png create mode 100644 source/dev/images/icons/brick.png create mode 100644 source/dev/images/icons/brick_add.png create mode 100644 source/dev/images/icons/brick_delete.png create mode 100644 source/dev/images/icons/brick_edit.png create mode 100644 source/dev/images/icons/brick_error.png create mode 100644 source/dev/images/icons/brick_go.png create mode 100644 source/dev/images/icons/brick_link.png create mode 100644 source/dev/images/icons/bricks.png create mode 100644 source/dev/images/icons/briefcase.png create mode 100644 source/dev/images/icons/bug.png create mode 100644 source/dev/images/icons/bug_add.png create mode 100644 source/dev/images/icons/bug_delete.png create mode 100644 source/dev/images/icons/bug_edit.png create mode 100644 source/dev/images/icons/bug_error.png create mode 100644 source/dev/images/icons/bug_go.png create mode 100644 source/dev/images/icons/bug_link.png create mode 100644 source/dev/images/icons/building.png create mode 100644 source/dev/images/icons/building_add.png create mode 100644 source/dev/images/icons/building_delete.png create mode 100644 source/dev/images/icons/building_edit.png create mode 100644 source/dev/images/icons/building_error.png create mode 100644 source/dev/images/icons/building_go.png create mode 100644 source/dev/images/icons/building_key.png create mode 100644 source/dev/images/icons/building_link.png create mode 100644 source/dev/images/icons/bullet_add.png create mode 100644 source/dev/images/icons/bullet_arrow_bottom.png create mode 100644 source/dev/images/icons/bullet_arrow_down.png create mode 100644 source/dev/images/icons/bullet_arrow_top.png create mode 100644 source/dev/images/icons/bullet_arrow_up.png create mode 100644 source/dev/images/icons/bullet_black.png create mode 100644 source/dev/images/icons/bullet_blue.png create mode 100644 source/dev/images/icons/bullet_delete.png create mode 100644 source/dev/images/icons/bullet_disk.png create mode 100644 source/dev/images/icons/bullet_error.png create mode 100644 source/dev/images/icons/bullet_feed.png create mode 100644 source/dev/images/icons/bullet_go.png create mode 100644 source/dev/images/icons/bullet_green.png create mode 100644 source/dev/images/icons/bullet_key.png create mode 100644 source/dev/images/icons/bullet_orange.png create mode 100644 source/dev/images/icons/bullet_picture.png create mode 100644 source/dev/images/icons/bullet_pink.png create mode 100644 source/dev/images/icons/bullet_purple.png create mode 100644 source/dev/images/icons/bullet_red.png create mode 100644 source/dev/images/icons/bullet_star.png create mode 100644 source/dev/images/icons/bullet_toggle_minus.png create mode 100644 source/dev/images/icons/bullet_toggle_plus.png create mode 100644 source/dev/images/icons/bullet_white.png create mode 100644 source/dev/images/icons/bullet_wrench.png create mode 100644 source/dev/images/icons/bullet_yellow.png create mode 100644 source/dev/images/icons/cake.png create mode 100644 source/dev/images/icons/calculator.png create mode 100644 source/dev/images/icons/calculator_add.png create mode 100644 source/dev/images/icons/calculator_delete.png create mode 100644 source/dev/images/icons/calculator_edit.png create mode 100644 source/dev/images/icons/calculator_error.png create mode 100644 source/dev/images/icons/calculator_link.png create mode 100644 source/dev/images/icons/calendar.png create mode 100644 source/dev/images/icons/calendar_add.png create mode 100644 source/dev/images/icons/calendar_delete.png create mode 100644 source/dev/images/icons/calendar_edit.png create mode 100644 source/dev/images/icons/calendar_link.png create mode 100644 source/dev/images/icons/calendar_view_day.png create mode 100644 source/dev/images/icons/calendar_view_month.png create mode 100644 source/dev/images/icons/calendar_view_week.png create mode 100644 source/dev/images/icons/camera.png create mode 100644 source/dev/images/icons/camera_add.png create mode 100644 source/dev/images/icons/camera_delete.png create mode 100644 source/dev/images/icons/camera_edit.png create mode 100644 source/dev/images/icons/camera_error.png create mode 100644 source/dev/images/icons/camera_go.png create mode 100644 source/dev/images/icons/camera_link.png create mode 100644 source/dev/images/icons/camera_small.png create mode 100644 source/dev/images/icons/cancel.png create mode 100644 source/dev/images/icons/car.png create mode 100644 source/dev/images/icons/car_add.png create mode 100644 source/dev/images/icons/car_delete.png create mode 100644 source/dev/images/icons/cart.png create mode 100644 source/dev/images/icons/cart_add.png create mode 100644 source/dev/images/icons/cart_delete.png create mode 100644 source/dev/images/icons/cart_edit.png create mode 100644 source/dev/images/icons/cart_error.png create mode 100644 source/dev/images/icons/cart_go.png create mode 100644 source/dev/images/icons/cart_put.png create mode 100644 source/dev/images/icons/cart_remove.png create mode 100644 source/dev/images/icons/cd.png create mode 100644 source/dev/images/icons/cd_add.png create mode 100644 source/dev/images/icons/cd_burn.png create mode 100644 source/dev/images/icons/cd_delete.png create mode 100644 source/dev/images/icons/cd_edit.png create mode 100644 source/dev/images/icons/cd_eject.png create mode 100644 source/dev/images/icons/cd_go.png create mode 100644 source/dev/images/icons/chart_bar.png create mode 100644 source/dev/images/icons/chart_bar_add.png create mode 100644 source/dev/images/icons/chart_bar_delete.png create mode 100644 source/dev/images/icons/chart_bar_edit.png create mode 100644 source/dev/images/icons/chart_bar_error.png create mode 100644 source/dev/images/icons/chart_bar_link.png create mode 100644 source/dev/images/icons/chart_curve.png create mode 100644 source/dev/images/icons/chart_curve_add.png create mode 100644 source/dev/images/icons/chart_curve_delete.png create mode 100644 source/dev/images/icons/chart_curve_edit.png create mode 100644 source/dev/images/icons/chart_curve_error.png create mode 100644 source/dev/images/icons/chart_curve_go.png create mode 100644 source/dev/images/icons/chart_curve_link.png create mode 100644 source/dev/images/icons/chart_line.png create mode 100644 source/dev/images/icons/chart_line_add.png create mode 100644 source/dev/images/icons/chart_line_delete.png create mode 100644 source/dev/images/icons/chart_line_edit.png create mode 100644 source/dev/images/icons/chart_line_error.png create mode 100644 source/dev/images/icons/chart_line_link.png create mode 100644 source/dev/images/icons/chart_organisation.png create mode 100644 source/dev/images/icons/chart_organisation_add.png create mode 100644 source/dev/images/icons/chart_organisation_delete.png create mode 100644 source/dev/images/icons/chart_pie.png create mode 100644 source/dev/images/icons/chart_pie_add.png create mode 100644 source/dev/images/icons/chart_pie_delete.png create mode 100644 source/dev/images/icons/chart_pie_edit.png create mode 100644 source/dev/images/icons/chart_pie_error.png create mode 100644 source/dev/images/icons/chart_pie_link.png create mode 100644 source/dev/images/icons/clock.png create mode 100644 source/dev/images/icons/clock_add.png create mode 100644 source/dev/images/icons/clock_delete.png create mode 100644 source/dev/images/icons/clock_edit.png create mode 100644 source/dev/images/icons/clock_error.png create mode 100644 source/dev/images/icons/clock_go.png create mode 100644 source/dev/images/icons/clock_link.png create mode 100644 source/dev/images/icons/clock_pause.png create mode 100644 source/dev/images/icons/clock_play.png create mode 100644 source/dev/images/icons/clock_red.png create mode 100644 source/dev/images/icons/clock_stop.png create mode 100644 source/dev/images/icons/cog.png create mode 100644 source/dev/images/icons/cog_add.png create mode 100644 source/dev/images/icons/cog_delete.png create mode 100644 source/dev/images/icons/cog_edit.png create mode 100644 source/dev/images/icons/cog_error.png create mode 100644 source/dev/images/icons/cog_go.png create mode 100644 source/dev/images/icons/coins.png create mode 100644 source/dev/images/icons/coins_add.png create mode 100644 source/dev/images/icons/coins_delete.png create mode 100644 source/dev/images/icons/color_swatch.png create mode 100644 source/dev/images/icons/color_wheel.png create mode 100644 source/dev/images/icons/comment.png create mode 100644 source/dev/images/icons/comment_add.png create mode 100644 source/dev/images/icons/comment_delete.png create mode 100644 source/dev/images/icons/comment_edit.png create mode 100644 source/dev/images/icons/comments.png create mode 100644 source/dev/images/icons/comments_add.png create mode 100644 source/dev/images/icons/comments_delete.png create mode 100644 source/dev/images/icons/compress.png create mode 100644 source/dev/images/icons/computer.png create mode 100644 source/dev/images/icons/computer_add.png create mode 100644 source/dev/images/icons/computer_delete.png create mode 100644 source/dev/images/icons/computer_edit.png create mode 100644 source/dev/images/icons/computer_error.png create mode 100644 source/dev/images/icons/computer_go.png create mode 100644 source/dev/images/icons/computer_key.png create mode 100644 source/dev/images/icons/computer_link.png create mode 100644 source/dev/images/icons/connect.png create mode 100644 source/dev/images/icons/contrast.png create mode 100644 source/dev/images/icons/contrast_decrease.png create mode 100644 source/dev/images/icons/contrast_high.png create mode 100644 source/dev/images/icons/contrast_increase.png create mode 100644 source/dev/images/icons/contrast_low.png create mode 100644 source/dev/images/icons/control_eject.png create mode 100644 source/dev/images/icons/control_eject_blue.png create mode 100644 source/dev/images/icons/control_end.png create mode 100644 source/dev/images/icons/control_end_blue.png create mode 100644 source/dev/images/icons/control_equalizer.png create mode 100644 source/dev/images/icons/control_equalizer_blue.png create mode 100644 source/dev/images/icons/control_fastforward.png create mode 100644 source/dev/images/icons/control_fastforward_blue.png create mode 100644 source/dev/images/icons/control_pause.png create mode 100644 source/dev/images/icons/control_pause_blue.png create mode 100644 source/dev/images/icons/control_play.png create mode 100644 source/dev/images/icons/control_play_blue.png create mode 100644 source/dev/images/icons/control_repeat.png create mode 100644 source/dev/images/icons/control_repeat_blue.png create mode 100644 source/dev/images/icons/control_rewind.png create mode 100644 source/dev/images/icons/control_rewind_blue.png create mode 100644 source/dev/images/icons/control_start.png create mode 100644 source/dev/images/icons/control_start_blue.png create mode 100644 source/dev/images/icons/control_stop.png create mode 100644 source/dev/images/icons/control_stop_blue.png create mode 100644 source/dev/images/icons/controller.png create mode 100644 source/dev/images/icons/controller_add.png create mode 100644 source/dev/images/icons/controller_delete.png create mode 100644 source/dev/images/icons/controller_error.png create mode 100644 source/dev/images/icons/creditcards.png create mode 100644 source/dev/images/icons/cross.png create mode 100644 source/dev/images/icons/css.png create mode 100644 source/dev/images/icons/css_add.png create mode 100644 source/dev/images/icons/css_delete.png create mode 100644 source/dev/images/icons/css_go.png create mode 100644 source/dev/images/icons/css_valid.png create mode 100644 source/dev/images/icons/cup.png create mode 100644 source/dev/images/icons/cup_add.png create mode 100644 source/dev/images/icons/cup_delete.png create mode 100644 source/dev/images/icons/cup_edit.png create mode 100644 source/dev/images/icons/cup_error.png create mode 100644 source/dev/images/icons/cup_go.png create mode 100644 source/dev/images/icons/cup_key.png create mode 100644 source/dev/images/icons/cup_link.png create mode 100644 source/dev/images/icons/cursor.png create mode 100644 source/dev/images/icons/cut.png create mode 100644 source/dev/images/icons/cut_red.png create mode 100644 source/dev/images/icons/database.png create mode 100644 source/dev/images/icons/database_add.png create mode 100644 source/dev/images/icons/database_connect.png create mode 100644 source/dev/images/icons/database_delete.png create mode 100644 source/dev/images/icons/database_edit.png create mode 100644 source/dev/images/icons/database_error.png create mode 100644 source/dev/images/icons/database_gear.png create mode 100644 source/dev/images/icons/database_go.png create mode 100644 source/dev/images/icons/database_key.png create mode 100644 source/dev/images/icons/database_lightning.png create mode 100644 source/dev/images/icons/database_link.png create mode 100644 source/dev/images/icons/database_refresh.png create mode 100644 source/dev/images/icons/database_save.png create mode 100644 source/dev/images/icons/database_table.png create mode 100644 source/dev/images/icons/date.png create mode 100644 source/dev/images/icons/date_add.png create mode 100644 source/dev/images/icons/date_delete.png create mode 100644 source/dev/images/icons/date_edit.png create mode 100644 source/dev/images/icons/date_error.png create mode 100644 source/dev/images/icons/date_go.png create mode 100644 source/dev/images/icons/date_link.png create mode 100644 source/dev/images/icons/date_magnify.png create mode 100644 source/dev/images/icons/date_next.png create mode 100644 source/dev/images/icons/date_previous.png create mode 100644 source/dev/images/icons/delete.png create mode 100644 source/dev/images/icons/disconnect.png create mode 100644 source/dev/images/icons/disk.png create mode 100644 source/dev/images/icons/disk_multiple.png create mode 100644 source/dev/images/icons/door.png create mode 100644 source/dev/images/icons/door_in.png create mode 100644 source/dev/images/icons/door_open.png create mode 100644 source/dev/images/icons/door_out.png create mode 100644 source/dev/images/icons/drink.png create mode 100644 source/dev/images/icons/drink_empty.png create mode 100644 source/dev/images/icons/drive.png create mode 100644 source/dev/images/icons/drive_add.png create mode 100644 source/dev/images/icons/drive_burn.png create mode 100644 source/dev/images/icons/drive_cd.png create mode 100644 source/dev/images/icons/drive_cd_empty.png create mode 100644 source/dev/images/icons/drive_delete.png create mode 100644 source/dev/images/icons/drive_disk.png create mode 100644 source/dev/images/icons/drive_edit.png create mode 100644 source/dev/images/icons/drive_error.png create mode 100644 source/dev/images/icons/drive_go.png create mode 100644 source/dev/images/icons/drive_key.png create mode 100644 source/dev/images/icons/drive_link.png create mode 100644 source/dev/images/icons/drive_magnify.png create mode 100644 source/dev/images/icons/drive_network.png create mode 100644 source/dev/images/icons/drive_rename.png create mode 100644 source/dev/images/icons/drive_user.png create mode 100644 source/dev/images/icons/drive_web.png create mode 100644 source/dev/images/icons/dvd.png create mode 100644 source/dev/images/icons/dvd_add.png create mode 100644 source/dev/images/icons/dvd_delete.png create mode 100644 source/dev/images/icons/dvd_edit.png create mode 100644 source/dev/images/icons/dvd_error.png create mode 100644 source/dev/images/icons/dvd_go.png create mode 100644 source/dev/images/icons/dvd_key.png create mode 100644 source/dev/images/icons/dvd_link.png create mode 100644 source/dev/images/icons/email.png create mode 100644 source/dev/images/icons/email_add.png create mode 100644 source/dev/images/icons/email_attach.png create mode 100644 source/dev/images/icons/email_delete.png create mode 100644 source/dev/images/icons/email_edit.png create mode 100644 source/dev/images/icons/email_error.png create mode 100644 source/dev/images/icons/email_go.png create mode 100644 source/dev/images/icons/email_link.png create mode 100644 source/dev/images/icons/email_open.png create mode 100644 source/dev/images/icons/email_open_image.png create mode 100644 source/dev/images/icons/emoticon_evilgrin.png create mode 100644 source/dev/images/icons/emoticon_grin.png create mode 100644 source/dev/images/icons/emoticon_happy.png create mode 100644 source/dev/images/icons/emoticon_smile.png create mode 100644 source/dev/images/icons/emoticon_surprised.png create mode 100644 source/dev/images/icons/emoticon_tongue.png create mode 100644 source/dev/images/icons/emoticon_unhappy.png create mode 100644 source/dev/images/icons/emoticon_waii.png create mode 100644 source/dev/images/icons/emoticon_wink.png create mode 100644 source/dev/images/icons/error.png create mode 100644 source/dev/images/icons/error_add.png create mode 100644 source/dev/images/icons/error_delete.png create mode 100644 source/dev/images/icons/error_go.png create mode 100644 source/dev/images/icons/exclamation.png create mode 100644 source/dev/images/icons/eye.png create mode 100644 source/dev/images/icons/feed.png create mode 100644 source/dev/images/icons/feed_add.png create mode 100644 source/dev/images/icons/feed_delete.png create mode 100644 source/dev/images/icons/feed_disk.png create mode 100644 source/dev/images/icons/feed_edit.png create mode 100644 source/dev/images/icons/feed_error.png create mode 100644 source/dev/images/icons/feed_go.png create mode 100644 source/dev/images/icons/feed_key.png create mode 100644 source/dev/images/icons/feed_link.png create mode 100644 source/dev/images/icons/feed_magnify.png create mode 100644 source/dev/images/icons/female.png create mode 100644 source/dev/images/icons/film.png create mode 100644 source/dev/images/icons/film_add.png create mode 100644 source/dev/images/icons/film_delete.png create mode 100644 source/dev/images/icons/film_edit.png create mode 100644 source/dev/images/icons/film_error.png create mode 100644 source/dev/images/icons/film_go.png create mode 100644 source/dev/images/icons/film_key.png create mode 100644 source/dev/images/icons/film_link.png create mode 100644 source/dev/images/icons/film_save.png create mode 100644 source/dev/images/icons/find.png create mode 100644 source/dev/images/icons/flag_blue.png create mode 100644 source/dev/images/icons/flag_green.png create mode 100644 source/dev/images/icons/flag_orange.png create mode 100644 source/dev/images/icons/flag_pink.png create mode 100644 source/dev/images/icons/flag_purple.png create mode 100644 source/dev/images/icons/flag_red.png create mode 100644 source/dev/images/icons/flag_yellow.png create mode 100644 source/dev/images/icons/folder.png create mode 100644 source/dev/images/icons/folder_add.png create mode 100644 source/dev/images/icons/folder_bell.png create mode 100644 source/dev/images/icons/folder_brick.png create mode 100644 source/dev/images/icons/folder_bug.png create mode 100644 source/dev/images/icons/folder_camera.png create mode 100644 source/dev/images/icons/folder_database.png create mode 100644 source/dev/images/icons/folder_delete.png create mode 100644 source/dev/images/icons/folder_edit.png create mode 100644 source/dev/images/icons/folder_error.png create mode 100644 source/dev/images/icons/folder_explore.png create mode 100644 source/dev/images/icons/folder_feed.png create mode 100644 source/dev/images/icons/folder_find.png create mode 100644 source/dev/images/icons/folder_go.png create mode 100644 source/dev/images/icons/folder_heart.png create mode 100644 source/dev/images/icons/folder_image.png create mode 100644 source/dev/images/icons/folder_key.png create mode 100644 source/dev/images/icons/folder_lightbulb.png create mode 100644 source/dev/images/icons/folder_link.png create mode 100644 source/dev/images/icons/folder_magnify.png create mode 100644 source/dev/images/icons/folder_page.png create mode 100644 source/dev/images/icons/folder_page_white.png create mode 100644 source/dev/images/icons/folder_palette.png create mode 100644 source/dev/images/icons/folder_picture.png create mode 100644 source/dev/images/icons/folder_star.png create mode 100644 source/dev/images/icons/folder_table.png create mode 100644 source/dev/images/icons/folder_user.png create mode 100644 source/dev/images/icons/folder_wrench.png create mode 100644 source/dev/images/icons/font.png create mode 100644 source/dev/images/icons/font_add.png create mode 100644 source/dev/images/icons/font_delete.png create mode 100644 source/dev/images/icons/font_go.png create mode 100644 source/dev/images/icons/group.png create mode 100644 source/dev/images/icons/group_add.png create mode 100644 source/dev/images/icons/group_delete.png create mode 100644 source/dev/images/icons/group_edit.png create mode 100644 source/dev/images/icons/group_error.png create mode 100644 source/dev/images/icons/group_gear.png create mode 100644 source/dev/images/icons/group_go.png create mode 100644 source/dev/images/icons/group_key.png create mode 100644 source/dev/images/icons/group_link.png create mode 100644 source/dev/images/icons/heart.png create mode 100644 source/dev/images/icons/heart_add.png create mode 100644 source/dev/images/icons/heart_delete.png create mode 100644 source/dev/images/icons/help.png create mode 100644 source/dev/images/icons/hourglass.png create mode 100644 source/dev/images/icons/hourglass_add.png create mode 100644 source/dev/images/icons/hourglass_delete.png create mode 100644 source/dev/images/icons/hourglass_go.png create mode 100644 source/dev/images/icons/hourglass_link.png create mode 100644 source/dev/images/icons/house.png create mode 100644 source/dev/images/icons/house_go.png create mode 100644 source/dev/images/icons/house_link.png create mode 100644 source/dev/images/icons/html.png create mode 100644 source/dev/images/icons/html_add.png create mode 100644 source/dev/images/icons/html_delete.png create mode 100644 source/dev/images/icons/html_go.png create mode 100644 source/dev/images/icons/html_valid.png create mode 100644 source/dev/images/icons/image.png create mode 100644 source/dev/images/icons/image_add.png create mode 100644 source/dev/images/icons/image_delete.png create mode 100644 source/dev/images/icons/image_edit.png create mode 100644 source/dev/images/icons/image_link.png create mode 100644 source/dev/images/icons/images.png create mode 100644 source/dev/images/icons/information.png create mode 100644 source/dev/images/icons/ipod.png create mode 100644 source/dev/images/icons/ipod_cast.png create mode 100644 source/dev/images/icons/ipod_cast_add.png create mode 100644 source/dev/images/icons/ipod_cast_delete.png create mode 100644 source/dev/images/icons/ipod_sound.png create mode 100644 source/dev/images/icons/joystick.png create mode 100644 source/dev/images/icons/joystick_add.png create mode 100644 source/dev/images/icons/joystick_delete.png create mode 100644 source/dev/images/icons/joystick_error.png create mode 100644 source/dev/images/icons/key.png create mode 100644 source/dev/images/icons/key_add.png create mode 100644 source/dev/images/icons/key_delete.png create mode 100644 source/dev/images/icons/key_go.png create mode 100644 source/dev/images/icons/keyboard.png create mode 100644 source/dev/images/icons/keyboard_add.png create mode 100644 source/dev/images/icons/keyboard_delete.png create mode 100644 source/dev/images/icons/keyboard_magnify.png create mode 100644 source/dev/images/icons/layers.png create mode 100644 source/dev/images/icons/layout.png create mode 100644 source/dev/images/icons/layout_add.png create mode 100644 source/dev/images/icons/layout_content.png create mode 100644 source/dev/images/icons/layout_delete.png create mode 100644 source/dev/images/icons/layout_edit.png create mode 100644 source/dev/images/icons/layout_error.png create mode 100644 source/dev/images/icons/layout_header.png create mode 100644 source/dev/images/icons/layout_link.png create mode 100644 source/dev/images/icons/layout_sidebar.png create mode 100644 source/dev/images/icons/lightbulb.png create mode 100644 source/dev/images/icons/lightbulb_add.png create mode 100644 source/dev/images/icons/lightbulb_delete.png create mode 100644 source/dev/images/icons/lightbulb_off.png create mode 100644 source/dev/images/icons/lightning.png create mode 100644 source/dev/images/icons/lightning_add.png create mode 100644 source/dev/images/icons/lightning_delete.png create mode 100644 source/dev/images/icons/lightning_go.png create mode 100644 source/dev/images/icons/link.png create mode 100644 source/dev/images/icons/link_add.png create mode 100644 source/dev/images/icons/link_break.png create mode 100644 source/dev/images/icons/link_delete.png create mode 100644 source/dev/images/icons/link_edit.png create mode 100644 source/dev/images/icons/link_error.png create mode 100644 source/dev/images/icons/link_go.png create mode 100644 source/dev/images/icons/lock.png create mode 100644 source/dev/images/icons/lock_add.png create mode 100644 source/dev/images/icons/lock_break.png create mode 100644 source/dev/images/icons/lock_delete.png create mode 100644 source/dev/images/icons/lock_edit.png create mode 100644 source/dev/images/icons/lock_go.png create mode 100644 source/dev/images/icons/lock_open.png create mode 100644 source/dev/images/icons/lorry.png create mode 100644 source/dev/images/icons/lorry_add.png create mode 100644 source/dev/images/icons/lorry_delete.png create mode 100644 source/dev/images/icons/lorry_error.png create mode 100644 source/dev/images/icons/lorry_flatbed.png create mode 100644 source/dev/images/icons/lorry_go.png create mode 100644 source/dev/images/icons/lorry_link.png create mode 100644 source/dev/images/icons/magifier_zoom_out.png create mode 100644 source/dev/images/icons/magnifier.png create mode 100644 source/dev/images/icons/magnifier_zoom_in.png create mode 100644 source/dev/images/icons/male.png create mode 100644 source/dev/images/icons/map.png create mode 100644 source/dev/images/icons/map_add.png create mode 100644 source/dev/images/icons/map_delete.png create mode 100644 source/dev/images/icons/map_edit.png create mode 100644 source/dev/images/icons/map_go.png create mode 100644 source/dev/images/icons/map_magnify.png create mode 100644 source/dev/images/icons/medal_bronze_1.png create mode 100644 source/dev/images/icons/medal_bronze_2.png create mode 100644 source/dev/images/icons/medal_bronze_3.png create mode 100644 source/dev/images/icons/medal_bronze_add.png create mode 100644 source/dev/images/icons/medal_bronze_delete.png create mode 100644 source/dev/images/icons/medal_gold_1.png create mode 100644 source/dev/images/icons/medal_gold_2.png create mode 100644 source/dev/images/icons/medal_gold_3.png create mode 100644 source/dev/images/icons/medal_gold_add.png create mode 100644 source/dev/images/icons/medal_gold_delete.png create mode 100644 source/dev/images/icons/medal_silver_1.png create mode 100644 source/dev/images/icons/medal_silver_2.png create mode 100644 source/dev/images/icons/medal_silver_3.png create mode 100644 source/dev/images/icons/medal_silver_add.png create mode 100644 source/dev/images/icons/medal_silver_delete.png create mode 100644 source/dev/images/icons/money.png create mode 100644 source/dev/images/icons/money_add.png create mode 100644 source/dev/images/icons/money_delete.png create mode 100644 source/dev/images/icons/money_dollar.png create mode 100644 source/dev/images/icons/money_euro.png create mode 100644 source/dev/images/icons/money_pound.png create mode 100644 source/dev/images/icons/money_yen.png create mode 100644 source/dev/images/icons/monitor.png create mode 100644 source/dev/images/icons/monitor_add.png create mode 100644 source/dev/images/icons/monitor_delete.png create mode 100644 source/dev/images/icons/monitor_edit.png create mode 100644 source/dev/images/icons/monitor_error.png create mode 100644 source/dev/images/icons/monitor_go.png create mode 100644 source/dev/images/icons/monitor_lightning.png create mode 100644 source/dev/images/icons/monitor_link.png create mode 100644 source/dev/images/icons/mouse.png create mode 100644 source/dev/images/icons/mouse_add.png create mode 100644 source/dev/images/icons/mouse_delete.png create mode 100644 source/dev/images/icons/mouse_error.png create mode 100644 source/dev/images/icons/music.png create mode 100644 source/dev/images/icons/new.png create mode 100644 source/dev/images/icons/newspaper.png create mode 100644 source/dev/images/icons/newspaper_add.png create mode 100644 source/dev/images/icons/newspaper_delete.png create mode 100644 source/dev/images/icons/newspaper_go.png create mode 100644 source/dev/images/icons/newspaper_link.png create mode 100644 source/dev/images/icons/note.png create mode 100644 source/dev/images/icons/note_add.png create mode 100644 source/dev/images/icons/note_delete.png create mode 100644 source/dev/images/icons/note_edit.png create mode 100644 source/dev/images/icons/note_error.png create mode 100644 source/dev/images/icons/note_go.png create mode 100644 source/dev/images/icons/overlays.png create mode 100644 source/dev/images/icons/package.png create mode 100644 source/dev/images/icons/package_add.png create mode 100644 source/dev/images/icons/package_delete.png create mode 100644 source/dev/images/icons/package_go.png create mode 100644 source/dev/images/icons/package_green.png create mode 100644 source/dev/images/icons/package_link.png create mode 100644 source/dev/images/icons/page.png create mode 100644 source/dev/images/icons/page_add.png create mode 100644 source/dev/images/icons/page_attach.png create mode 100644 source/dev/images/icons/page_code.png create mode 100644 source/dev/images/icons/page_copy.png create mode 100644 source/dev/images/icons/page_delete.png create mode 100644 source/dev/images/icons/page_edit.png create mode 100644 source/dev/images/icons/page_error.png create mode 100644 source/dev/images/icons/page_excel.png create mode 100644 source/dev/images/icons/page_find.png create mode 100644 source/dev/images/icons/page_gear.png create mode 100644 source/dev/images/icons/page_go.png create mode 100644 source/dev/images/icons/page_green.png create mode 100644 source/dev/images/icons/page_key.png create mode 100644 source/dev/images/icons/page_lightning.png create mode 100644 source/dev/images/icons/page_link.png create mode 100644 source/dev/images/icons/page_paintbrush.png create mode 100644 source/dev/images/icons/page_paste.png create mode 100644 source/dev/images/icons/page_red.png create mode 100644 source/dev/images/icons/page_refresh.png create mode 100644 source/dev/images/icons/page_save.png create mode 100644 source/dev/images/icons/page_white.png create mode 100644 source/dev/images/icons/page_white_acrobat.png create mode 100644 source/dev/images/icons/page_white_actionscript.png create mode 100644 source/dev/images/icons/page_white_add.png create mode 100644 source/dev/images/icons/page_white_c.png create mode 100644 source/dev/images/icons/page_white_camera.png create mode 100644 source/dev/images/icons/page_white_cd.png create mode 100644 source/dev/images/icons/page_white_code.png create mode 100644 source/dev/images/icons/page_white_code_red.png create mode 100644 source/dev/images/icons/page_white_coldfusion.png create mode 100644 source/dev/images/icons/page_white_compressed.png create mode 100644 source/dev/images/icons/page_white_copy.png create mode 100644 source/dev/images/icons/page_white_cplusplus.png create mode 100644 source/dev/images/icons/page_white_csharp.png create mode 100644 source/dev/images/icons/page_white_cup.png create mode 100644 source/dev/images/icons/page_white_database.png create mode 100644 source/dev/images/icons/page_white_delete.png create mode 100644 source/dev/images/icons/page_white_dvd.png create mode 100644 source/dev/images/icons/page_white_edit.png create mode 100644 source/dev/images/icons/page_white_error.png create mode 100644 source/dev/images/icons/page_white_excel.png create mode 100644 source/dev/images/icons/page_white_find.png create mode 100644 source/dev/images/icons/page_white_flash.png create mode 100644 source/dev/images/icons/page_white_freehand.png create mode 100644 source/dev/images/icons/page_white_gear.png create mode 100644 source/dev/images/icons/page_white_get.png create mode 100644 source/dev/images/icons/page_white_go.png create mode 100644 source/dev/images/icons/page_white_h.png create mode 100644 source/dev/images/icons/page_white_horizontal.png create mode 100644 source/dev/images/icons/page_white_key.png create mode 100644 source/dev/images/icons/page_white_lightning.png create mode 100644 source/dev/images/icons/page_white_link.png create mode 100644 source/dev/images/icons/page_white_magnify.png create mode 100644 source/dev/images/icons/page_white_medal.png create mode 100644 source/dev/images/icons/page_white_office.png create mode 100644 source/dev/images/icons/page_white_paint.png create mode 100644 source/dev/images/icons/page_white_paintbrush.png create mode 100644 source/dev/images/icons/page_white_paste.png create mode 100644 source/dev/images/icons/page_white_php.png create mode 100644 source/dev/images/icons/page_white_picture.png create mode 100644 source/dev/images/icons/page_white_powerpoint.png create mode 100644 source/dev/images/icons/page_white_put.png create mode 100644 source/dev/images/icons/page_white_ruby.png create mode 100644 source/dev/images/icons/page_white_stack.png create mode 100644 source/dev/images/icons/page_white_star.png create mode 100644 source/dev/images/icons/page_white_swoosh.png create mode 100644 source/dev/images/icons/page_white_text.png create mode 100644 source/dev/images/icons/page_white_text_width.png create mode 100644 source/dev/images/icons/page_white_tux.png create mode 100644 source/dev/images/icons/page_white_vector.png create mode 100644 source/dev/images/icons/page_white_visualstudio.png create mode 100644 source/dev/images/icons/page_white_width.png create mode 100644 source/dev/images/icons/page_white_word.png create mode 100644 source/dev/images/icons/page_white_world.png create mode 100644 source/dev/images/icons/page_white_wrench.png create mode 100644 source/dev/images/icons/page_white_zip.png create mode 100644 source/dev/images/icons/page_word.png create mode 100644 source/dev/images/icons/page_world.png create mode 100644 source/dev/images/icons/paintbrush.png create mode 100644 source/dev/images/icons/paintcan.png create mode 100644 source/dev/images/icons/palette.png create mode 100644 source/dev/images/icons/paste_plain.png create mode 100644 source/dev/images/icons/paste_word.png create mode 100644 source/dev/images/icons/pencil.png create mode 100644 source/dev/images/icons/pencil_add.png create mode 100644 source/dev/images/icons/pencil_delete.png create mode 100644 source/dev/images/icons/pencil_go.png create mode 100644 source/dev/images/icons/phone.png create mode 100644 source/dev/images/icons/phone_add.png create mode 100644 source/dev/images/icons/phone_delete.png create mode 100644 source/dev/images/icons/phone_sound.png create mode 100644 source/dev/images/icons/photo.png create mode 100644 source/dev/images/icons/photo_add.png create mode 100644 source/dev/images/icons/photo_delete.png create mode 100644 source/dev/images/icons/photo_link.png create mode 100644 source/dev/images/icons/photos.png create mode 100644 source/dev/images/icons/picture.png create mode 100644 source/dev/images/icons/picture_add.png create mode 100644 source/dev/images/icons/picture_delete.png create mode 100644 source/dev/images/icons/picture_edit.png create mode 100644 source/dev/images/icons/picture_empty.png create mode 100644 source/dev/images/icons/picture_error.png create mode 100644 source/dev/images/icons/picture_go.png create mode 100644 source/dev/images/icons/picture_key.png create mode 100644 source/dev/images/icons/picture_link.png create mode 100644 source/dev/images/icons/picture_save.png create mode 100644 source/dev/images/icons/pictures.png create mode 100644 source/dev/images/icons/pilcrow.png create mode 100644 source/dev/images/icons/pill.png create mode 100644 source/dev/images/icons/pill_add.png create mode 100644 source/dev/images/icons/pill_delete.png create mode 100644 source/dev/images/icons/pill_go.png create mode 100644 source/dev/images/icons/plugin.png create mode 100644 source/dev/images/icons/plugin_add.png create mode 100644 source/dev/images/icons/plugin_delete.png create mode 100644 source/dev/images/icons/plugin_disabled.png create mode 100644 source/dev/images/icons/plugin_edit.png create mode 100644 source/dev/images/icons/plugin_error.png create mode 100644 source/dev/images/icons/plugin_go.png create mode 100644 source/dev/images/icons/plugin_link.png create mode 100644 source/dev/images/icons/printer.png create mode 100644 source/dev/images/icons/printer_add.png create mode 100644 source/dev/images/icons/printer_delete.png create mode 100644 source/dev/images/icons/printer_empty.png create mode 100644 source/dev/images/icons/printer_error.png create mode 100644 source/dev/images/icons/rainbow.png create mode 100644 source/dev/images/icons/report.png create mode 100644 source/dev/images/icons/report_add.png create mode 100644 source/dev/images/icons/report_delete.png create mode 100644 source/dev/images/icons/report_disk.png create mode 100644 source/dev/images/icons/report_edit.png create mode 100644 source/dev/images/icons/report_go.png create mode 100644 source/dev/images/icons/report_key.png create mode 100644 source/dev/images/icons/report_link.png create mode 100644 source/dev/images/icons/report_magnify.png create mode 100644 source/dev/images/icons/report_picture.png create mode 100644 source/dev/images/icons/report_user.png create mode 100644 source/dev/images/icons/report_word.png create mode 100644 source/dev/images/icons/resultset_first.png create mode 100644 source/dev/images/icons/resultset_last.png create mode 100644 source/dev/images/icons/resultset_next.png create mode 100644 source/dev/images/icons/resultset_previous.png create mode 100644 source/dev/images/icons/rosette.png create mode 100644 source/dev/images/icons/rss.png create mode 100644 source/dev/images/icons/rss_add.png create mode 100644 source/dev/images/icons/rss_delete.png create mode 100644 source/dev/images/icons/rss_go.png create mode 100644 source/dev/images/icons/rss_valid.png create mode 100644 source/dev/images/icons/ruby.png create mode 100644 source/dev/images/icons/ruby_add.png create mode 100644 source/dev/images/icons/ruby_delete.png create mode 100644 source/dev/images/icons/ruby_gear.png create mode 100644 source/dev/images/icons/ruby_get.png create mode 100644 source/dev/images/icons/ruby_go.png create mode 100644 source/dev/images/icons/ruby_key.png create mode 100644 source/dev/images/icons/ruby_link.png create mode 100644 source/dev/images/icons/ruby_put.png create mode 100644 source/dev/images/icons/script.png create mode 100644 source/dev/images/icons/script_add.png create mode 100644 source/dev/images/icons/script_code.png create mode 100644 source/dev/images/icons/script_code_red.png create mode 100644 source/dev/images/icons/script_delete.png create mode 100644 source/dev/images/icons/script_edit.png create mode 100644 source/dev/images/icons/script_error.png create mode 100644 source/dev/images/icons/script_gear.png create mode 100644 source/dev/images/icons/script_go.png create mode 100644 source/dev/images/icons/script_key.png create mode 100644 source/dev/images/icons/script_lightning.png create mode 100644 source/dev/images/icons/script_link.png create mode 100644 source/dev/images/icons/script_palette.png create mode 100644 source/dev/images/icons/script_save.png create mode 100644 source/dev/images/icons/server.png create mode 100644 source/dev/images/icons/server_add.png create mode 100644 source/dev/images/icons/server_chart.png create mode 100644 source/dev/images/icons/server_compressed.png create mode 100644 source/dev/images/icons/server_connect.png create mode 100644 source/dev/images/icons/server_database.png create mode 100644 source/dev/images/icons/server_delete.png create mode 100644 source/dev/images/icons/server_edit.png create mode 100644 source/dev/images/icons/server_error.png create mode 100644 source/dev/images/icons/server_go.png create mode 100644 source/dev/images/icons/server_key.png create mode 100644 source/dev/images/icons/server_lightning.png create mode 100644 source/dev/images/icons/server_link.png create mode 100644 source/dev/images/icons/server_uncompressed.png create mode 100644 source/dev/images/icons/shading.png create mode 100644 source/dev/images/icons/shape_align_bottom.png create mode 100644 source/dev/images/icons/shape_align_center.png create mode 100644 source/dev/images/icons/shape_align_left.png create mode 100644 source/dev/images/icons/shape_align_middle.png create mode 100644 source/dev/images/icons/shape_align_right.png create mode 100644 source/dev/images/icons/shape_align_top.png create mode 100644 source/dev/images/icons/shape_flip_horizontal.png create mode 100644 source/dev/images/icons/shape_flip_vertical.png create mode 100644 source/dev/images/icons/shape_group.png create mode 100644 source/dev/images/icons/shape_handles.png create mode 100644 source/dev/images/icons/shape_move_back.png create mode 100644 source/dev/images/icons/shape_move_backwards.png create mode 100644 source/dev/images/icons/shape_move_forwards.png create mode 100644 source/dev/images/icons/shape_move_front.png create mode 100644 source/dev/images/icons/shape_rotate_anticlockwise.png create mode 100644 source/dev/images/icons/shape_rotate_clockwise.png create mode 100644 source/dev/images/icons/shape_square.png create mode 100644 source/dev/images/icons/shape_square_add.png create mode 100644 source/dev/images/icons/shape_square_delete.png create mode 100644 source/dev/images/icons/shape_square_edit.png create mode 100644 source/dev/images/icons/shape_square_error.png create mode 100644 source/dev/images/icons/shape_square_go.png create mode 100644 source/dev/images/icons/shape_square_key.png create mode 100644 source/dev/images/icons/shape_square_link.png create mode 100644 source/dev/images/icons/shape_ungroup.png create mode 100644 source/dev/images/icons/shield.png create mode 100644 source/dev/images/icons/shield_add.png create mode 100644 source/dev/images/icons/shield_delete.png create mode 100644 source/dev/images/icons/shield_go.png create mode 100644 source/dev/images/icons/sitemap.png create mode 100644 source/dev/images/icons/sitemap_color.png create mode 100644 source/dev/images/icons/sound.png create mode 100644 source/dev/images/icons/sound_add.png create mode 100644 source/dev/images/icons/sound_delete.png create mode 100644 source/dev/images/icons/sound_low.png create mode 100644 source/dev/images/icons/sound_mute.png create mode 100644 source/dev/images/icons/sound_none.png create mode 100644 source/dev/images/icons/spellcheck.png create mode 100644 source/dev/images/icons/sport_8ball.png create mode 100644 source/dev/images/icons/sport_basketball.png create mode 100644 source/dev/images/icons/sport_football.png create mode 100644 source/dev/images/icons/sport_golf.png create mode 100644 source/dev/images/icons/sport_raquet.png create mode 100644 source/dev/images/icons/sport_shuttlecock.png create mode 100644 source/dev/images/icons/sport_soccer.png create mode 100644 source/dev/images/icons/sport_tennis.png create mode 100644 source/dev/images/icons/star.png create mode 100644 source/dev/images/icons/status_away.png create mode 100644 source/dev/images/icons/status_busy.png create mode 100644 source/dev/images/icons/status_offline.png create mode 100644 source/dev/images/icons/status_online.png create mode 100644 source/dev/images/icons/stop.png create mode 100644 source/dev/images/icons/style.png create mode 100644 source/dev/images/icons/style_add.png create mode 100644 source/dev/images/icons/style_delete.png create mode 100644 source/dev/images/icons/style_edit.png create mode 100644 source/dev/images/icons/style_go.png create mode 100644 source/dev/images/icons/sum.png create mode 100644 source/dev/images/icons/tab.png create mode 100644 source/dev/images/icons/tab_add.png create mode 100644 source/dev/images/icons/tab_delete.png create mode 100644 source/dev/images/icons/tab_edit.png create mode 100644 source/dev/images/icons/tab_go.png create mode 100644 source/dev/images/icons/table.png create mode 100644 source/dev/images/icons/table_add.png create mode 100644 source/dev/images/icons/table_delete.png create mode 100644 source/dev/images/icons/table_edit.png create mode 100644 source/dev/images/icons/table_error.png create mode 100644 source/dev/images/icons/table_gear.png create mode 100644 source/dev/images/icons/table_go.png create mode 100644 source/dev/images/icons/table_key.png create mode 100644 source/dev/images/icons/table_lightning.png create mode 100644 source/dev/images/icons/table_link.png create mode 100644 source/dev/images/icons/table_multiple.png create mode 100644 source/dev/images/icons/table_refresh.png create mode 100644 source/dev/images/icons/table_relationship.png create mode 100644 source/dev/images/icons/table_row_delete.png create mode 100644 source/dev/images/icons/table_row_insert.png create mode 100644 source/dev/images/icons/table_save.png create mode 100644 source/dev/images/icons/table_sort.png create mode 100644 source/dev/images/icons/tag.png create mode 100644 source/dev/images/icons/tag_blue.png create mode 100644 source/dev/images/icons/tag_blue_add.png create mode 100644 source/dev/images/icons/tag_blue_delete.png create mode 100644 source/dev/images/icons/tag_blue_edit.png create mode 100644 source/dev/images/icons/tag_green.png create mode 100644 source/dev/images/icons/tag_orange.png create mode 100644 source/dev/images/icons/tag_pink.png create mode 100644 source/dev/images/icons/tag_purple.png create mode 100644 source/dev/images/icons/tag_red.png create mode 100644 source/dev/images/icons/tag_yellow.png create mode 100644 source/dev/images/icons/telephone.png create mode 100644 source/dev/images/icons/telephone_add.png create mode 100644 source/dev/images/icons/telephone_delete.png create mode 100644 source/dev/images/icons/telephone_edit.png create mode 100644 source/dev/images/icons/telephone_error.png create mode 100644 source/dev/images/icons/telephone_go.png create mode 100644 source/dev/images/icons/telephone_key.png create mode 100644 source/dev/images/icons/telephone_link.png create mode 100644 source/dev/images/icons/television.png create mode 100644 source/dev/images/icons/television_add.png create mode 100644 source/dev/images/icons/television_delete.png create mode 100644 source/dev/images/icons/text_align_center.png create mode 100644 source/dev/images/icons/text_align_justify.png create mode 100644 source/dev/images/icons/text_align_left.png create mode 100644 source/dev/images/icons/text_align_right.png create mode 100644 source/dev/images/icons/text_allcaps.png create mode 100644 source/dev/images/icons/text_bold.png create mode 100644 source/dev/images/icons/text_columns.png create mode 100644 source/dev/images/icons/text_dropcaps.png create mode 100644 source/dev/images/icons/text_heading_1.png create mode 100644 source/dev/images/icons/text_heading_2.png create mode 100644 source/dev/images/icons/text_heading_3.png create mode 100644 source/dev/images/icons/text_heading_4.png create mode 100644 source/dev/images/icons/text_heading_5.png create mode 100644 source/dev/images/icons/text_heading_6.png create mode 100644 source/dev/images/icons/text_horizontalrule.png create mode 100644 source/dev/images/icons/text_indent.png create mode 100644 source/dev/images/icons/text_indent_remove.png create mode 100644 source/dev/images/icons/text_italic.png create mode 100644 source/dev/images/icons/text_kerning.png create mode 100644 source/dev/images/icons/text_letter_omega.png create mode 100644 source/dev/images/icons/text_letterspacing.png create mode 100644 source/dev/images/icons/text_linespacing.png create mode 100644 source/dev/images/icons/text_list_bullets.png create mode 100644 source/dev/images/icons/text_list_numbers.png create mode 100644 source/dev/images/icons/text_lowercase.png create mode 100644 source/dev/images/icons/text_padding_bottom.png create mode 100644 source/dev/images/icons/text_padding_left.png create mode 100644 source/dev/images/icons/text_padding_right.png create mode 100644 source/dev/images/icons/text_padding_top.png create mode 100644 source/dev/images/icons/text_replace.png create mode 100644 source/dev/images/icons/text_signature.png create mode 100644 source/dev/images/icons/text_smallcaps.png create mode 100644 source/dev/images/icons/text_strikethrough.png create mode 100644 source/dev/images/icons/text_subscript.png create mode 100644 source/dev/images/icons/text_superscript.png create mode 100644 source/dev/images/icons/text_underline.png create mode 100644 source/dev/images/icons/text_uppercase.png create mode 100644 source/dev/images/icons/textfield.png create mode 100644 source/dev/images/icons/textfield_add.png create mode 100644 source/dev/images/icons/textfield_delete.png create mode 100644 source/dev/images/icons/textfield_key.png create mode 100644 source/dev/images/icons/textfield_rename.png create mode 100644 source/dev/images/icons/thumb_down.png create mode 100644 source/dev/images/icons/thumb_up.png create mode 100644 source/dev/images/icons/tick.png create mode 100644 source/dev/images/icons/time.png create mode 100644 source/dev/images/icons/time_add.png create mode 100644 source/dev/images/icons/time_delete.png create mode 100644 source/dev/images/icons/time_go.png create mode 100644 source/dev/images/icons/timeline_marker.png create mode 100644 source/dev/images/icons/transmit.png create mode 100644 source/dev/images/icons/transmit_add.png create mode 100644 source/dev/images/icons/transmit_blue.png create mode 100644 source/dev/images/icons/transmit_delete.png create mode 100644 source/dev/images/icons/transmit_edit.png create mode 100644 source/dev/images/icons/transmit_error.png create mode 100644 source/dev/images/icons/transmit_go.png create mode 100644 source/dev/images/icons/tux.png create mode 100644 source/dev/images/icons/user.png create mode 100644 source/dev/images/icons/user_add.png create mode 100644 source/dev/images/icons/user_comment.png create mode 100644 source/dev/images/icons/user_delete.png create mode 100644 source/dev/images/icons/user_edit.png create mode 100644 source/dev/images/icons/user_female.png create mode 100644 source/dev/images/icons/user_go.png create mode 100644 source/dev/images/icons/user_gray.png create mode 100644 source/dev/images/icons/user_green.png create mode 100644 source/dev/images/icons/user_orange.png create mode 100644 source/dev/images/icons/user_red.png create mode 100644 source/dev/images/icons/user_suit.png create mode 100644 source/dev/images/icons/vcard.png create mode 100644 source/dev/images/icons/vcard_add.png create mode 100644 source/dev/images/icons/vcard_delete.png create mode 100644 source/dev/images/icons/vcard_edit.png create mode 100644 source/dev/images/icons/vector.png create mode 100644 source/dev/images/icons/vector_add.png create mode 100644 source/dev/images/icons/vector_delete.png create mode 100644 source/dev/images/icons/wand.png create mode 100644 source/dev/images/icons/weather_clouds.png create mode 100644 source/dev/images/icons/weather_cloudy.png create mode 100644 source/dev/images/icons/weather_lightning.png create mode 100644 source/dev/images/icons/weather_rain.png create mode 100644 source/dev/images/icons/weather_snow.png create mode 100644 source/dev/images/icons/weather_sun.png create mode 100644 source/dev/images/icons/webcam.png create mode 100644 source/dev/images/icons/webcam_add.png create mode 100644 source/dev/images/icons/webcam_delete.png create mode 100644 source/dev/images/icons/webcam_error.png create mode 100644 source/dev/images/icons/world.png create mode 100644 source/dev/images/icons/world_add.png create mode 100644 source/dev/images/icons/world_delete.png create mode 100644 source/dev/images/icons/world_edit.png create mode 100644 source/dev/images/icons/world_go.png create mode 100644 source/dev/images/icons/world_link.png create mode 100644 source/dev/images/icons/wrench.png create mode 100644 source/dev/images/icons/wrench_orange.png create mode 100644 source/dev/images/icons/xhtml.png create mode 100644 source/dev/images/icons/xhtml_add.png create mode 100644 source/dev/images/icons/xhtml_delete.png create mode 100644 source/dev/images/icons/xhtml_go.png create mode 100644 source/dev/images/icons/xhtml_valid.png create mode 100644 source/dev/images/icons/zoom.png create mode 100644 source/dev/images/icons/zoom_in.png create mode 100644 source/dev/images/icons/zoom_out.png create mode 100644 source/dev/images/logo/logo_baseline.psd create mode 100644 source/dev/images/logo/logo_rendered.png create mode 100644 source/dev/images/logo/logo_vector.ai create mode 100644 source/dev/images/placeholders/jingle_video_local.psd create mode 100644 source/dev/images/sprites/animate.psd create mode 100644 source/dev/images/sprites/archives.psd create mode 100644 source/dev/images/sprites/background.svg create mode 100644 source/dev/images/sprites/browsers.psd create mode 100644 source/dev/images/sprites/buttons.psd create mode 100644 source/dev/images/sprites/home.psd create mode 100644 source/dev/images/sprites/install.psd create mode 100644 source/dev/images/sprites/jingle.psd create mode 100644 source/dev/images/sprites/manager.psd create mode 100644 source/dev/images/sprites/me.psd create mode 100644 source/dev/images/sprites/mini.psd create mode 100644 source/dev/images/sprites/mobile.psd create mode 100644 source/dev/images/sprites/smileys.psd create mode 100644 source/dev/images/sprites/talk.psd create mode 100644 source/dev/images/sprites/welcome.psd mode change 100755 => 100644 source/favicon.ico create mode 100644 source/i18n/.htaccess create mode 100644 source/i18n/ar/LC_MESSAGES/main.mo create mode 100644 source/i18n/ar/LC_MESSAGES/main.po create mode 100644 source/i18n/bg/LC_MESSAGES/main.mo create mode 100644 source/i18n/bg/LC_MESSAGES/main.po create mode 100644 source/i18n/cs/LC_MESSAGES/main.mo create mode 100644 source/i18n/cs/LC_MESSAGES/main.po create mode 100644 source/i18n/de/LC_MESSAGES/main.mo create mode 100644 source/i18n/de/LC_MESSAGES/main.po create mode 100644 source/i18n/en/LC_MESSAGES/main.pot create mode 100644 source/i18n/eo/LC_MESSAGES/main.mo create mode 100644 source/i18n/eo/LC_MESSAGES/main.po create mode 100644 source/i18n/es/LC_MESSAGES/main.mo create mode 100644 source/i18n/es/LC_MESSAGES/main.po create mode 100644 source/i18n/et/LC_MESSAGES/main.mo create mode 100644 source/i18n/et/LC_MESSAGES/main.po create mode 100644 source/i18n/fa/LC_MESSAGES/main.mo create mode 100644 source/i18n/fa/LC_MESSAGES/main.po create mode 100644 source/i18n/fr/LC_MESSAGES/main.mo create mode 100644 source/i18n/fr/LC_MESSAGES/main.po create mode 100644 source/i18n/he/LC_MESSAGES/main.mo create mode 100644 source/i18n/he/LC_MESSAGES/main.po create mode 100644 source/i18n/hu/LC_MESSAGES/main.mo create mode 100644 source/i18n/hu/LC_MESSAGES/main.po create mode 100644 source/i18n/id/LC_MESSAGES/main.mo create mode 100644 source/i18n/id/LC_MESSAGES/main.po create mode 100644 source/i18n/it/LC_MESSAGES/main.mo create mode 100644 source/i18n/it/LC_MESSAGES/main.po create mode 100644 source/i18n/ja/LC_MESSAGES/main.mo create mode 100644 source/i18n/ja/LC_MESSAGES/main.po create mode 100644 source/i18n/lb/LC_MESSAGES/main.mo create mode 100644 source/i18n/lb/LC_MESSAGES/main.po create mode 100644 source/i18n/mn/LC_MESSAGES/main.mo create mode 100644 source/i18n/mn/LC_MESSAGES/main.po create mode 100644 source/i18n/nl/LC_MESSAGES/main.mo create mode 100644 source/i18n/nl/LC_MESSAGES/main.po create mode 100644 source/i18n/oc/LC_MESSAGES/main.mo create mode 100644 source/i18n/oc/LC_MESSAGES/main.po create mode 100644 source/i18n/pl/LC_MESSAGES/main.mo create mode 100644 source/i18n/pl/LC_MESSAGES/main.po create mode 100644 source/i18n/pt-br/LC_MESSAGES/main.mo create mode 100644 source/i18n/pt-br/LC_MESSAGES/main.po create mode 100644 source/i18n/pt/LC_MESSAGES/main.mo create mode 100644 source/i18n/pt/LC_MESSAGES/main.po create mode 100644 source/i18n/ru/LC_MESSAGES/main.mo create mode 100644 source/i18n/ru/LC_MESSAGES/main.po create mode 100644 source/i18n/sk/LC_MESSAGES/main.mo create mode 100644 source/i18n/sk/LC_MESSAGES/main.po create mode 100644 source/i18n/sv/LC_MESSAGES/main.mo create mode 100644 source/i18n/sv/LC_MESSAGES/main.po create mode 100644 source/i18n/tr/LC_MESSAGES/main.mo create mode 100644 source/i18n/tr/LC_MESSAGES/main.po create mode 100644 source/i18n/uk/LC_MESSAGES/main.mo create mode 100644 source/i18n/uk/LC_MESSAGES/main.po create mode 100644 source/i18n/zh-cn/LC_MESSAGES/main.mo create mode 100644 source/i18n/zh-cn/LC_MESSAGES/main.po create mode 100644 source/i18n/zh-tw/LC_MESSAGES/main.mo create mode 100644 source/i18n/zh-tw/LC_MESSAGES/main.po mode change 100755 => 100644 source/index.php create mode 100644 source/log/.htaccess create mode 100644 source/server/analytics.php create mode 100644 source/server/avatar-upload.php create mode 100644 source/server/bosh.php create mode 100644 source/server/captcha.php create mode 100644 source/server/desktop.php create mode 100644 source/server/download-chat.php create mode 100644 source/server/download.php create mode 100644 source/server/drawsvgchart.php create mode 100644 source/server/file-share.php create mode 100644 source/server/form-hosts.php create mode 100644 source/server/form-main.php create mode 100644 source/server/form-users.php create mode 100644 source/server/functions-advertising.php create mode 100644 source/server/functions-get.php create mode 100644 source/server/functions-manager.php create mode 100644 source/server/functions.php create mode 100644 source/server/generate-chat.php create mode 100644 source/server/geolocation.php create mode 100644 source/server/get-store.php create mode 100644 source/server/get.php create mode 100644 source/server/gettext.php create mode 100644 source/server/install.php create mode 100644 source/server/jingle.php create mode 100644 source/server/jsmin.php create mode 100644 source/server/manager.php create mode 100644 source/server/mobile-detect.php create mode 100644 source/server/mobile.php create mode 100644 source/server/music-search.php create mode 100644 source/server/post-design.php create mode 100644 source/server/post-hosts.php create mode 100644 source/server/post-main.php create mode 100644 source/server/post-store.php create mode 100644 source/server/post-users.php create mode 100644 source/server/read-design.php create mode 100644 source/server/read-hosts.php create mode 100644 source/server/read-main.php create mode 100644 source/server/register.php create mode 100644 source/server/send.php create mode 100644 source/server/srand.php create mode 100644 source/server/static.php create mode 100644 source/server/stats-svg.php create mode 100644 source/server/store-tree.php create mode 100644 source/server/upload.php create mode 100644 source/server/vars-design.php create mode 100644 source/server/vars-hosts.php create mode 100644 source/server/vars-main.php create mode 100644 source/server/vars-store.php create mode 100644 source/test/.htaccess create mode 100644 source/test/Gruntfile.js create mode 100644 source/test/README.md create mode 100644 source/test/package.json create mode 100644 source/tmp/.htaccess create mode 100644 source/tmp/archives/.gitkeep create mode 100644 source/tmp/avatar/.gitkeep create mode 100644 source/tmp/cache/.gitkeep create mode 100644 source/tmp/send/.gitkeep create mode 100644 source/tools/.htaccess create mode 100755 source/tools/extract_mini.sh diff --git a/source/AUTHORS.md b/source/AUTHORS.md old mode 100755 new mode 100644 index aa8d4b2..2b0b3bc --- a/source/AUTHORS.md +++ b/source/AUTHORS.md @@ -63,6 +63,7 @@ Translators * mbajur * mentalo * mkwm +* Natureshadow * Och.Oyuka * Otourly * piotr.moskal diff --git a/source/CHANGELOG.md b/source/CHANGELOG.md new file mode 100644 index 0000000..007cc5b --- /dev/null +++ b/source/CHANGELOG.md @@ -0,0 +1,253 @@ +Jappix Changelog +================ + +Here's the log of what has changed over the Jappix releases. + + +One, v1.0.1 (January 2014) +-------------------------- + + * Changed MAM namespace to a temporary one + * Fixed broken Jappix Mini CSS loader in some cases + * Libs update + + +One, v1.0.0 (January 2014) +-------------------------- + + * XEP-0166: Jingle + * XEP-0292: vCard4 Over XMPP + * XEP-0280: Message Carbons + * IE9, IE10, IE11 support + * Libs update + * Client code rewrite + * Directory tree re-organization + * Tested code (pass CSSLint, JSHint and PHPLint) + + +Nemesis Alpha 9, v0.9.9 (August 2013) +------------------------------------- + + * XEP-0313: Message Archive Management + * Drop support for Message Archiving (XEP-0136), outpaced by MAM (XEP-0313) + * Jappix Desktop performances improved (noticeable with big rosters) + * Fix Jappix Desktop avatar system, unable to cache avatars (thus increasing network load and delays) + * New translations added (Mongolian), and a few ones updated + + +Nemesis Alpha 8, v0.9.8 (May 2013) +---------------------------------- + + * RTL (Right-To-Left Languages) support + * Various bufixes + + +Nemesis Alpha 7, v0.9.7 (April 2013) +------------------------------------ + + * Fix overflow events in Mini + * Fix user info display bug with formatted text + * Jappix Me notification system + * Update JSJaC + * Update jQuery (v1.10.1) + + +Nemesis Alpha 6, v0.9.6 (April 2013) +------------------------------------ + + * Fix login with accented usernames + * WOFF Get API headers fixed + * Better Get API URL generator + * Fix broken Jappix Mini extraction script + * Show when user joins/exits MUC in Jappix Mini + + +Nemesis Alpha 5, v0.9.5 (March 2013) +------------------------------------ + + * Jappix Mini enhancements + * Fix Jappix over non-standard ports + * Locale detector improved + * Load more items on social channel scroll + * Fix a lot of English base language typos + * Support for XHTML microblog entries (Movim compatibility) + * Show Jappix Desktop on tablets (not mobile anymore) + * Option to disable Jappix Mini on mobile phones + * Fix broken MUC bookmarks retrieval + + +Nemesis Alpha 4, v0.9.4 (March 2013) +------------------------------------ + + * [SECURITY] Fix insafe HTML escaping + * PHP 5.4 compatibility + * Auto-populate microblog on connect + * Register API support for Metronome XMPPd + * Non-blocking PHP sessions + * Permissive geoloc selector in microblog + * Select priority more easily + * Compliancy with Atom specification (social inbox) + * Added project mirrors + + +Nemesis Alpha 3, v0.9.3 (February 2013) +--------------------------------------- + + * [SECURITY] More randomness in CAPTCHA + * Fix buggy roster filter with groups + * Add Piwik tracking feature (configurable in manager) + * Easy popup close by clicking away + * Fix cropped uploaded pictures + * Revert to old File Share API (which is far better) + * Fixes broken translations (strange UTF-8 chars due to bugged Gettext compiler) + + +Nemesis Alpha 2, v0.9.2 (January 2013) +-------------------------------------- + + * [SECURITY] Introduced the Register API (prevents register flood by spam bots) + * Reworked Storage API + * Jappix Mini code beautify + * Lighter and Web-safe font files + * Better error logging + * Fix Openfire ping request + * Typing notification in Jappix Mini + * Support for WebKit notifications + * Jappix Mini groupchat suggest + * Enhanced Download API + * Mini animated chat icon, much sexier + * IE custom font compatibility + * Legal changes + * Update licensing with real names + + +Nemesis Alpha 1, v0.9.1 (2012) +------------------------------ + + * Show an 'add to home' button on iOS devices + * Ability to suspend statistics + * Fix IE9 issue with clustering + * Show profile button in user search results + * Ability to change message font, font size and color + * Fix choppy Jappix Mini status picker + * Sounds for Safari & IE9 + * Enhance new file storage functions + * No resize for textareas + * Add a configurable legal disclaimer + * Fix a loop bug on presence if no support for sessionStorage + * Universal fonts + * Add ability to configure the node owner name & website + * HTTP authentication for LDAP + * Better notification + comments management + + +Spaco, v0.9 (2011) +------------------ + + * [SECURITY] Fix when sending files to a contact + * Better Jappix Mini performances + * Fix Jappix Mini display issues + * Connection issue fixed with BOSH API + * Open XMPP links when Jappix is ready + + +Suno, v0.8 (2011) +--------------------- + + * XEP-0066: Out of Band Data + * Switch from OpenStreetMap to Google Maps for geolocation + + +Stelo, v0.7 (2011) +------------------ + + * Lighter Jappix Mini + * Welcome popup + * Support for /me command in Jappix Mini + * Fixes in social channel + * Bigger BOSH poll interval (avoids some overactivity errors) + * Compression disabled by default in Get API + * Send chatstates in MUC + * Social notification inbox + + +Lumo, v0.6 (2011) +----------------- + + * Smoother Mini animation + * Show avatars in social channel comments + * Legacy mode for microblog comments + * Microblog updated to comply with a new version of XEP-0277 + * Fix DNS SRV issue because of a 'route' attribute on BOSH initiation + + +Ribelo, v0.5 (2011) +------------------- + + * Add support for comments in microblog + * Jappix Mini fixes and improvements + + +Lupo, v0.4 (2011) +----------------- + + * Full IE5.5 compatibility for Jappix Mini + * BOSH without cURL (if cURL unavailable) + * Handle multiple microblog attached files + * Microblog attached files thumbnails + * BOM (Byte Order Mark) filtering for Get API + * Autoplay for new YouTube HTML5 player + * Support for privacy lists pushs + * Roster-side privacy lists (make contact blocking/unblocking easy) + * Better update checker + * XEP-0144: Roster Item Exchange + * Cross domain support for Internet Explorer and legacy browsers + * Update jQuery (v1.4.4) + * TZO fix (for negative timezones, e.g.: UTC-5) + * Better language detection + * Use HTML5 or Flash for YouTube embedded videos + + +Prism, v0.3 (2011) +------------------ + + * [SECURITY] Fix JS escape bug for quotes + * [SECURITY] HTML-encode notification username + * Introduction of Jappix Mini + * Introduction of Jappix Manager + * Introduction of Jappix Install + * XEP-0050: Ad-Hoc Commands + * XEP-0136: Message Archiving + * Update Jappix logo + * Declare application language to XMPP server + * Add a buddy search tool + * Support for old/legacy vCard server implementations + * Inbox messages sorted by date + * Better music search + * Human-readable geolocation + * Gateway show/hide + * HTML5 forms + * Better notification management + * Unified chat design + * Dynamic DOM load (better performances) + * Jappix logo shown when connected (improves branding) + + +Lidar, v0.2 (2010) +------------------ + + * Introduction of Jappix Mobile + * UI redesign (from grey to black and blue) + * Social channel introduced (microblog) + + +Genesis, v0.1 (2010) +-------------------- + + * Initial version, released after private beta + * Introduction of Jappix Desktop + * Basic chat, groupchat, roster and profile features + * Basic UI + + +**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 old mode 100755 new mode 100644 diff --git a/source/COPYING_FONT.md b/source/COPYING_FONT.md old mode 100755 new mode 100644 diff --git a/source/COPYING_MINI.md b/source/COPYING_MINI.md old mode 100755 new mode 100644 diff --git a/source/INSTALL.md b/source/INSTALL.md old mode 100755 new mode 100644 index 662abb0..b073ce5 --- a/source/INSTALL.md +++ b/source/INSTALL.md @@ -10,7 +10,7 @@ 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 +* The Jappix app : https://github.com/jappix/jappix/wiki/JappixApp More ---- diff --git a/source/PROTOCOL.md b/source/PROTOCOL.md new file mode 100644 index 0000000..c9a07cb --- /dev/null +++ b/source/PROTOCOL.md @@ -0,0 +1,68 @@ +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 + + * XEP-0045: Multi-User Chat *v1.25* + * XEP-0030: Service Discovery *v2.4* + * XEP-0060: Publish-Subscribe *v1.13* + * XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH) *v1.10* + * XEP-0115: Entity Capabilities *v1.5* + * XEP-0107: User Mood *v1.2* + * XEP-0108: User Activity *v1.3* + * XEP-0118: User Tune *v1.2* + * XEP-0080: User Location *v1.7* + * XEP-0172: User Nickname *v1.1* + * XEP-0084: User Avatar *v1.1* + * XEP-0277: Microblogging over XMPP *v0.6* + * XEP-xxxx: Notification Inbox *v0.1* + * Alternate URL: http://xmpp.org/extensions/inbox/notification-inbox.html + * XEP-0203: Delayed Delivery *v2.0* + * XEP-0144: Roster Item Exchange *v1.0* + * XEP-0072: SOAP Over XMPP *v1.0* + * XEP-0085: Chat State Notifications *v2.1* + * XEP-0071: XHTML-IM *v1.5* + * XEP-0313: Message Archive Management *v0.3* + * Alternate URL: https://demo.frenchtouch.pro/valerian.saliou/xmpp/extensions/xep-0313.html + * XEP-0012: Last Activity *v2.0* + * XEP-0049: Private XML Storage *v1.2* + * XEP-0077: In-Band Registration *v2.4* + * XEP-0055: Jabber Search *v1.3* + * XEP-0050: Ad-Hoc Commands *v1.2* + * XEP-0092: Software Version *v1.1* + * XEP-0004: Data Forms *v2.9* + * XEP-0054: vcard-temp *v1.2* + * XEP-0202: Entity Time *v2.0* + * XEP-0199: XMPP Ping *v2.0* + * XEP-0184: Message Delivery Receipts *v1.2* + * XEP-0016: Privacy Lists *v1.6* + * XEP-0066: Out of Band Data *v1.5* + * XEP-0280: Message Carbons *v0.9* + * XEP-0292: vCard4 Over XMPP *v0.10* + * XEP-0166: Jingle *v1.1* + * XEP-0167: Jingle RTP Sessions *v1.1* + * XEP-0176: Jingle ICE-UDP Transport Method *v1.0* + * XEP-0215: External Service Discovery *v0.5* + * 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-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-0320: Use of DTLS-SRTP in Jingle Sessions *v0.2* + * XEP-0338: Jingle Grouping Framework *v0.1* + + +# Others + + * RFC-3264: An Offer/Answer Model with Session Description Protocol (SDP) \ No newline at end of file diff --git a/source/README.md b/source/README.md old mode 100755 new mode 100644 index f13a7f3..3741682 --- a/source/README.md +++ b/source/README.md @@ -1,5 +1,13 @@ -Jappix - An open social platform -================================ +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.frenchtouch.pro/projects/7/status.png?ref=master)](https://ci.frenchtouch.pro/projects/7?ref=master) + License ------- @@ -28,7 +36,7 @@ Links * Jappix project dev panel: https://github.com/jappix/jappix * Jappix nodes list: http://jappix.net/ * Jappix main service: https://jappix.com/ -* Jappix commercial support: http://jappix.pro/ +* Jappix commercial support: https://jappix.pro/ Mirrors @@ -37,7 +45,7 @@ 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/ -* Git read-only mirror: git clone https://code.frenchtouch.pro/jappix/jappix.git +* Development repository mirror: https://code.frenchtouch.pro/jappix/jappix MUC Links @@ -62,4 +70,4 @@ We're not on your favorite social network? Contact us and we'll do everything we One more thing... ----------------- -Have fun with Jappix, and don't hesitate to help us by reporting bugs, translating or submitting new ideas! \ No newline at end of file +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 old mode 100755 new mode 100644 diff --git a/source/VERSION b/source/VERSION old mode 100755 new mode 100644 index 3175599..a0d4ca4 --- a/source/VERSION +++ b/source/VERSION @@ -1 +1 @@ -Nemesis Alpha 9 [0.9.9] \ No newline at end of file +One [1.0.1] \ No newline at end of file diff --git a/source/app/.htaccess b/source/app/.htaccess new file mode 100644 index 0000000..a6e0b16 --- /dev/null +++ b/source/app/.htaccess @@ -0,0 +1,2 @@ +# 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 new file mode 100644 index 0000000..59677b7 --- /dev/null +++ b/source/app/bundles/anonymous.xml @@ -0,0 +1,5 @@ + + + anonymous.css + anonymous.js + diff --git a/source/app/bundles/desktop.xml b/source/app/bundles/desktop.xml new file mode 100644 index 0000000..60322d4 --- /dev/null +++ b/source/app/bundles/desktop.xml @@ -0,0 +1,5 @@ + + + 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~jingle.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~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~jingle.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 + diff --git a/source/app/bundles/httpauth.xml b/source/app/bundles/httpauth.xml new file mode 100644 index 0000000..89e8ea0 --- /dev/null +++ b/source/app/bundles/httpauth.xml @@ -0,0 +1,4 @@ + + + httpauth.js + diff --git a/source/app/bundles/install.xml b/source/app/bundles/install.xml new file mode 100644 index 0000000..f15e387 --- /dev/null +++ b/source/app/bundles/install.xml @@ -0,0 +1,5 @@ + + + main.css~install.css~images.css + + diff --git a/source/app/bundles/manager.xml b/source/app/bundles/manager.xml new file mode 100644 index 0000000..05bd545 --- /dev/null +++ b/source/app/bundles/manager.xml @@ -0,0 +1,5 @@ + + + main.css~manager.css~images.css + + diff --git a/source/app/bundles/mini.xml b/source/app/bundles/mini.xml new file mode 100644 index 0000000..1eb5d5c --- /dev/null +++ b/source/app/bundles/mini.xml @@ -0,0 +1,5 @@ + + + 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 new file mode 100644 index 0000000..459aa51 --- /dev/null +++ b/source/app/bundles/mobile.xml @@ -0,0 +1,5 @@ + + + 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 new file mode 100644 index 0000000000000000000000000000000000000000..21e0f536db43e8d24509e3848a9c4e211c7af562 GIT binary patch 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 new file mode 100644 index 0000000..c36d936 --- /dev/null +++ b/source/app/fonts/svg/ptsansbold.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/app/fonts/svg/ptsansbolditalic.svg b/source/app/fonts/svg/ptsansbolditalic.svg new file mode 100644 index 0000000..f9975f5 --- /dev/null +++ b/source/app/fonts/svg/ptsansbolditalic.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/app/fonts/svg/ptsansitalic.svg b/source/app/fonts/svg/ptsansitalic.svg new file mode 100644 index 0000000..4c595eb --- /dev/null +++ b/source/app/fonts/svg/ptsansitalic.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/app/fonts/ttf/ptsans.ttf b/source/app/fonts/ttf/ptsans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a005ea338ee7e9df266a14a3da7a266fc586ae24 GIT binary patch literal 56840 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 Y%*16V-CS-R36)XLt!q=yzN6It0j>s}#sB~S literal 0 HcmV?d00001 diff --git a/source/app/fonts/ttf/ptsansbold.ttf b/source/app/fonts/ttf/ptsansbold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..31e458830fd3609e22a6555a87570f3b1a982205 GIT binary patch literal 56292 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�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 literal 0 HcmV?d00001 diff --git a/source/app/fonts/ttf/ptsansbolditalic.ttf b/source/app/fonts/ttf/ptsansbolditalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dbc88079903d5c0907843150ccad58a779a88ed9 GIT binary patch literal 62048 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 literal 0 HcmV?d00001 diff --git a/source/app/fonts/woff/ptsansbold.woff b/source/app/fonts/woff/ptsansbold.woff new file mode 100644 index 0000000000000000000000000000000000000000..f92d6b75b6dfa93cb6b3b46693444c919fc2f889 GIT binary patch literal 28532 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 literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/animate.gif b/source/app/images/sprites/animate.gif new file mode 100644 index 0000000000000000000000000000000000000000..60b85d268a1029df6774f8f6b48e4707a854f089 GIT binary patch literal 1297 zcmZ?wbhEHb3}EnLc*ejmbLLDF6BAQYQ!_I&b8~YG3kyq2ODiiYYiny88yj0&TRS^D zdwY8a2M0$-M<*vIXJ=;@7Z+DoS2s5|cXxLW4-ZdIPcJVoZ*OlOA0J;|Uq3%Te}Dgg zfPlcjz@VU@;NakpkdV;O(6F$u@bK`6h=|C@$f&5O=;-K}n3&ku*tod3`1tsQgoMPz z#H6I8p;^z`(MjEv08%&e@e?Ck8EoSfX;+`PQJ{QUfaf`Y=r!lI(0 z;^N|xl9JNW(z3F$^78VEii*n0%BrfW>gwv6nwr|$+Pb>B`uh5YhK9z*#-^sG=H}*> zmX_Am*7o-Hj*gDb&d%=c?w+2W-rnB6zP|qc{)rPOPMtb++O%miX3Us1YnHLGF#|1u z;!hSv28Kii9groUIALJ_-;mhU+|t_C-qG3B-P7CGKVjme$y26In?7UatQKc0O=THL zc{NkJ*~`0)c$gB_u3Nv3P0eA&a(8Ws4ZC))6;LqWI+btFk)!LRT@Uuju^c;hlTgzXLmE7I=qYLpsO@<32R1S z*1>fO@44PwGI4phn(sZ=*9)zT!3V;5m87%|zPhR^v%xRJ<_k-hiI-p;?*&7nK-LIL zm8lh>3=bFc3vf7a6lNXPW}b9oXAqO-z13XH6I@R{%{sPN;mD`VTkLKOg6;vanGH)8 z%uo~(5sK)z@r3X;j#P*vISRP=u51O znD5KExk+Nl%(WbPRa1E;ZDweau$cEc>%@~Vbwx{+Yx-xJ&-OR$c(kCSU0Y(3io|J! z4(3zw3wIaEwyU*FtwXqUpvsS{mhy$(`ZX5FL5GCA(3M+tw=QrQhTVoU`rZS0Z^ z8j=OBN)z3^qgr+-Y+{`_UB#xr>4*CLhlb}$`P zwtMr`N5oFhxT!lqV8IE&b#Gpr$T;6{u|f2x%K_#8g*ioR z7TF`R^E4Mzi{`Q!5qgta0?x`B9n^NIefCtFfyIL}f9;eD9<5SxMb~Gqzmd?{sjg>q zNc)z`CC2&dZ$zHdwzDb{l;GA-l3uhn#HEvOJ;%$AAYH>lVcPz7P3hX2C9l#J^z;1U z%3UV3>B#a>S#!?N6|=llC3GT~yqTxY{B>JfBVp4sZT26QLL9p~rkvCharttnVuQ!B zPR^)(O3u3KJ-@s*ZywyyPh;;{8xO~Hx0J?*YN9Q=YdrykX| zEGd|GtWSrLWy|gr1+Eftf4JCqRoo{ro!Y>$;h?zpjzg(unglO1@E-f9bCOF!SlD5< zlXDaE(On8tOH}+7xbIw^Y_f&hB_ue>d5U#P?MaT4kx-dsz+! FYXEt-=xP7} literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/animate.png b/source/app/images/sprites/animate.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec0b19102e10b80413d74f259410aad4908b56f GIT binary patch literal 6146 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 UO0G#%_5c6?07*qoM6N<$f*5M_KmY&$ literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/archives.png b/source/app/images/sprites/archives.png new file mode 100644 index 0000000000000000000000000000000000000000..3375d6982e9e5238e1c873a401f9553806bd97f9 GIT binary patch literal 1728 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 literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/browsers.png b/source/app/images/sprites/browsers.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb3c63957de0623e63946bd9eec719928f18f82 GIT binary patch literal 10776 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 W0@#n5K70000SkW)zit<*CJIPzWsca@iV_? zTllqW%w1UtCW*hLyCThxMP~LLmTD_j_d9mqcFyK=8-81#x0NfMXFreUPOA!cj$Pa7o#2m06+*f$?_r|F&{3JAGMGuC%WHp6`7lnH~-K{hK4sJ;^pX zsVX0z>0TbW?99Dx=d!YrwP`WGF2&4wx77Oh?20Qt|5X_l$WIcLeDdc1wBNR;d!D~L ued2I>#_u;fZ+<&??OR{9=5_6wii`5AkFAXS`pH%w~v>Luet=AqhRSgup%e-9PTko%w#>Uw3Y19ET+5oW0jxYwc$}>)HA6#88Xv?A5a% z5Qt4j`>`V|}S@=>r0t?}&Z*QH)YNi1b6atH{saeb3CTH>W zn`8f+V!m|g!q2nMnG$b4KXrkN$C#Px(q`N=Y#qBd4b!@iE9de>=nKo4Td^lZ=#2HA zUaZfylasMie5w+$&kA-bUdOxYUMg{%P$kXZa^;@W{LbFqvHYDo75D`l(m5h5jPm~D zM)Q}NeCT=PW0zocqHTtikf_6wFY~5_npFdwa&CGn>YcRKqVJZOv zU6Dfiwi=o6T_+rNSd>E;XUl>?An8Jx7QfYrEjiCA`L9aLYlOxbx6#s~ycT{lcF;pw z*Q@3JFGPp0;6z;(|Fx+PDbkMJ)-@YUAZ`A=4Ea~jYjmCM?Cg-P!-Y@#6I4@zc|3)_ zZL@;Zq|{V(9RFD{ND;%wPX1CgF-$!_23cgGBrk+oIBI;mV$OWMR^@P`l`aWslHcE5 zojjr)#ZL@|-b#Cqv5ooh3?!UjiUbpnT+9GA!91ID(F}?gB>f0({ zKnrw=Sm^ww8?l)&Cmpd+@%Bq0Pqovppikdee*dca$frzOeHJ%h*WyKNmhn~&Bn;@? zP(C%60he+~eJATawjmPrDdhJAR@f-ZX6^ZH(sKd^%D;5L{LOj+xd4qw;;s+eUMx$K zachnpg**Xik^;Y&aPR5t?-=8I`Pu)-c-IpI(jawWNB!&ElRO-&gY3EsL7yi zWvD>zDJ0h@TSc`C>S)y3muLpbAPXbCHQm(a;_gBAJm7G6adU8Fk2KX#4PkncSa2ev^LWaq zPX>8q|1K)asLZN1?RJdR<0PhyV(v;_MZeO$x(eF{?*&^IcixpN0}HUdHEhTDo&uca zJ8vJOyj!ibdn4=Y%U9daJOHog$W+euTbsHf8bh}_20wKK9U0wTov1CLj#oP)l4=|6 zsZT4bOx?3ePi9}dbZK~XW2V(iyibB{8@7^%?6zt2Tg^wmW5f&U9n}p^*P@&?jzzaG zyh)((886+HYB}5r4%F8WQ3w?MF;0vORH;iN9IxsZCj2ufeA(6f@2CD zamgBW?&H$8VY?LjdHWz@c#|m?s6{71h%4Fra5nMu=bByQF?Gmj?R-9c{*+s(TsXWh zOW8RsInZh$ekWRP|#j?MnW(ABWluV0hr$%OP#av*&b zE!M5F>E9%=oX0X}xH;Pf#jU7h$$~((@mfwHZVk+fOOP%MaI<>Ea&{(2JK0ht}#}f&L}_}A7PvBQd;P1jS9(SZi$k9pwRWPDo5NS z|A^Tm2HnD{Xq^=DBsurjR^4Y}Gn{VFQ0JAW^qbt`W2yH2Xc@FYd_0P4gx}1#RuqUf z%zPkKP<85Xf1=h69bi3%pblsSEh+h2;IV%Tj{CDa~zDppG2-~Ek?CE9J=;(-ui0mZC1eOKu;T8wsmJ3HmN7=XwKVlk+ zI&P9H?K>d4q@{QrB!749aQsP2n_uVqfSAg<&}%ZvpRHr-U!?#b)myzrSTEfVx;h8rE*~HY1g!tZzXH zh{MeeIIaCLYEo4YFEMlIgOmhMRqZl92xr~C-O^fOXxK#Wp%EK|0vGluzJ>ap#kyVMz`zqh69Y$d_!Y7Q^Mt2N-iY&jH>sm2!Hwi8;SglO~yDeh@ zlLhs0D=nQms>c~VejZhC zovef=omK{Nv^2(3a4Y1f3{Zm&pLJFRi<17@Z{@0=23BRr^~UvPXX7B{2A`#nr^)s2 z0@eHV$YLnq=Co)1=%M~@zxfpzx6y09RIKCdyb`W%QKexm4mGZ}MjICllfn}*K#TRuX) z&qP#}gbS!=Kfc_BE@)oYtb502H(vM2Nkr_o3t$5!Qqi|WRBN&b<#dl=$HZ>$@@M1+ z^?@p$-_RWwKVG?)kE{`m z2_&UC%HIrX4QI%qT+bOYQhpZCX#j3KWyhhnHZo5j(Y$ znO0%6ADE52ynAQG?gMlaeW>G&(n8JMX!vl>d$-oXr7UY>qDQG^y!wPTN8r}{ftrv* zpu-eI2(+rNX5lN#T7O<~#jxEzCy#va-cd1ekryX>L9B$OM5W9w+e~N^p4PKwr#vI| zDBP^qqR6C1fKc;}xl4+>`od+!23UU6r$gFkx!uM8y(pJDys07g%lP9<9&brHUa)Y_G=td>D5YpKtqHDt7msef~sGqnoHPR>C zdK0aiBw9IQ=cr4`GW**Zhey>C&nkXfTd10Rx+*i8n!YmCL_M*h$I{(57>QZ?a3|@yN7_fv z;i-$V{_E4cgr>mlC;&%}xgH#O=9|DKZmn?I`vDC5(N5vzmGwYWH#L}ESuKP&zuZl-Ekxz|Zx~*X+h2za} zY?zTenBp_0o(-2y_CRUPl1FiJJ1?~(3bI3jaI_tA&Xn(;+2fR!c0>Z<3yX5?Z7&TO zxks7~Bf2*l8vJQjZ}zSDEG{nDLHu4*3mONzyB-j348m7-*Md{QO+TtK^HwX!MzY4K z*?de=b{7@h$10wknHkeqBH1mz^ zWRFGYW#JYCul~B;6{&>EjMK5c^gdmu5^-Ss)#!C?H+Zw-Wc)L!@t(Q)G=~1U>XZhN zf5o)!M_``uUK}X3te&4L%)L!QuthX1^PYpveUgi8 ztY51M$2x`-m;rzp+ts$w&DQW#r|A|I63FNIayKxjwWl@IqKL)_tZ1_a(f?=D_4G>=Y2_iw4%4oSZfNyk_7ehf;;MkP;*NTP)u>#KD-6kZJrqNs{xMhpH@2^42g3Lf?(i zV^o~K-WZNOz+bR5->PnWoTK3S`KpwxNI74Q_F}UV&xZQVjQEc{Ne&U%k4D6Z9izZug)`v;S#pe2}DzCK0+=2x1G&zOz>z64(4%=Uo{B}~{ZIN8Rz&p}9 zF~5w5V167@=!fl__sZ6MzaNSF1%(6f&Z zh3kRfZ(ML5l-lqRpA0%UD+Jokv-ige|4{j&fofbR(OVHtz(?akD3#vl%h~OfA%~`- zA)36W`Ee;*Exn|AphEnVaKXLnEG+dQ_a3FXPx3BdYp-CdU5};DZE*7LqZ3jSUAJ2M z(bGXCiBaour4>k>m{&$B2f0VQSo^$?gOuhqJOKX`tjr}JE2dHl@O#`k5f%78r17B1 zfS&m+c`)=kY>7P6aLro)tm&ucJMnONyn0DwXnPYRRU7Kh+#FIlqUf{}S2;d6xSBbW zK6wk7l_{Y`4o{S@HfK3}jFYX@^G_n33_P34?chaH@$DE?R2>q_>6lCJ@+%(#(EaFm zm4|7(KvLi9A6qg*`-J#Pr;c*bOnx~|*r~DfZrUku;^TZk?yqX!3M*S-y5hL$)J`kH&1k`mF z{DJcqlm}2ztO4)`gt_GH&7q!uc6TMD8Drd3yo{>9>xx0FXw1KNXDf2t61o!Al0CB2 z(|$lOZ*%m^^`6QxvZ((&6c~pchbIK`u;|BV7q>#Jurv%puFS*#Jk!eBb~}KP30*0B zA-K(-vi{-NeB>BhVB0za6&?30;t_afqSO0VYQC0)uvA&-UY8Rjl*(TO*}eZ*XrnCF z{yv9p)MDgEvKCCeANQ|EZcqEPI3BNtjuyA(hV$X%cE|mk$AoLTt1%+MkzEGUkA)N3 zZ|WtB9~4KeFGy4JVE*NfJRMMrf0nb44@e^=eXpc5E5q@V=U+&Hx%`YTnbqELUF=i1he ze8Ji@zOlPDSz2A_H8{4*|H@@5gSK-nnf$My#yZ8Ur@Q`x-}J@ZwM3&gd3m0x3Mt$d z#K84C5=(?C!&XRmpMB(IiQ!3`3oh4!lr1GP$MrA97 z+nG@8BB0pI`!P!Icp9#7(xx20>J-GcMO%*22@1z%f2<}-Emf)t+i$jL-#(up4OvtW zkJW+mIGh;s6KNC--P0>!R5U5yB$r8b{uGO7nF45-+M0|QI509xRTNqu-luycq%7h> zKq3jGYwYTsSr>i8J0cq8*Ei+#P1<0e?`_RBf*!Pt=;z-soc8b?t>lBw#1>4n*q|4 zYVF&~5?UQ~n1Ib$Q%ean_>FZ;IcBxD6x`?s7GJ9F&kSee>LmE36Tb)t*=HsG%1Bli zXVx-8iDjf!Aioj3P?MaIID=t#VNL-##Q?(qQOb@%P1ZBKT5^}>t-XeU!lwd^M#i_Q z)pgLf4##`1iJFizKZXRBe|ZD_`;CiHq`YGxZ10)wuKQ<;qh4s;CSf#l6=LRi!Q6J6oxIm(c&=fr;j@? zaT?v*jvQK7NkZ+vT^VV;skcadt#)9{vnze+-uJDkjIgF8Q8QObxd@%`1j?nrE*x#E?`=TZ5T@NMgR2zY`}#J7hY9$4gG_w zON&tV4Aoz}YY7?BIqJ7p=Dkz(GmZe#Uh1v;oJ--!a()zB*{p*cR^xK|5-2r3>%X05-%sH|(l!oVrXQO^$(F-04)H;H zZe#Q=5w|u6>0y^7ropSbfCum{et*&l0SG!H$11ycyYkkls@1mG*$U)>L+0Q=X_8*X zxsJ!!(l^@D6pm~1F9*IGL>9EFlwY%GQf%mBQ&2YYickE6)V%I9P)4zER07J7Rt?M@ zuV;1Rlc|ngtM}hwGZKypnHdek!+BvJ*1Ds?H7}kH&vzxXI&LRc0Mu|qjVFOttY6=B z2ozaa2}zfi@_KWWxpvjV&ky)W@ll@;7Gu@D(%ONS!Wjd?r{hPiKSI8RGGWpuOvvr) zE@KrlG12Drozq7co)-595pZ@(O}yZ{>do?nu7srvkgKnI3O@E6?Y=l?;&hYDjX{?6 z+*=Wru*Aw*dm4%GN=)*d4PrZp zF~)Spq4B`D05W)xfIX#TiVh5C=bgY0>?Ip~p|Xee6$nurW!^V?8u1PUl~YcScXgS! z99z}ddk=|G7!J!64TVmjw)7WW(Fi^9J*g7r*zZ{hR}NnDWo7vHe?Lb+SdTd;#f<0} zX0A?S6=@y(h^CjvjJ@(&cba0g%RyTsW#RU1L6*p3+fa^!T9c1J~v z?c&>9nrSz{NW+~6GC3SX`*7#zY)0YOk0(8SHXiK}FYg}A_Z)me^`3jt|M@ipA`9*= zPhNFsTGFp4rH&}X52zcPV;cKlq7=atlx1D@FXb=qrwXt6Rb70D?v46m5P`4h$sSrd zMz?P%9`pK1t3j)hsL^k;&d@Wg(Vna6?RiySyg!@2iV_TXm>+8a(Jazn0ys~lO*0OyzY^_0c;Y(0NW8|XSynfp`Ps{P(#f*XPZUd7|$M<^lB-Ku;kN@sOY=d z@o&ol$;;UM4RZ{S+*)0AN5%uFYeEuDAe1Q}jy|7Q*^rgRkcgP3T&I+|V}o{R-v^eK zKgV7lQoe3$S%+F2MnQYG+PH0-#5l`tDqq>vis2hkENg(pLnKo>WeHu6jo`9}9m%WW z2d3{BGp!M5OBdA%*-Drrr2D?G{cl>~7)M#Ia3MyKvaQDvJ|wdvt@{<`bb6^T8<7UF zU8ht6e96(T=LF^7+mYQti|JYHuvAdMSk>y-9`V}lo&f+G6BDivz5XnWS9Z!u1)9mWGHOESE6tU?+o#}!ZbQliJ$#JgQtHuLs|ORskAy9?8!{Ed-zs-a{LnieV0K8WOaw0lwLi>=t=ii zMg9%Th6VTSUn`X;Ys|@=@SDf0oYb@0QLd>8Iv)!b?v`7+kgxU$+R050ktwU@XP3<` zuUUB^%5CTmoR#^ja-SHPij(HuZi!JAoE0hUqj0|QI~_Ah=Tq6ryOYH5cyFb<{a~P^ zH)Ia(8|jmTF)gD4;ng{fOFMP-5)OIa*tmD{V6Vo+_&4r`RLM5>A8aql<>Q4Uy<_!0 z>OU!VZa|a{BY!ma14N3s0_~cDjv?A=NIHbWu- zapEwzZ^tGKQU&;w0$UE@B|!mT=LZMI_u}kW;RM?4C7ANHT@GC-!YOC`O}g~5^4Y7_ z$BpjB{(Z=VwZj?jxyy4DA4hDn%3zAg28cgaqkSnmQD&Mq7q_V!v_2sug>sYVTZJs1 zvpcRYP4buLlMtR-;bhV)sMA2us4JE$wQnI8-H46WMXFP`(}x$(sOE@k($!;CW#xUO z=nDMN!BRH6%b7cH0#P_eux#&f|Kz;W=6_>E0Xgu!3~&T>mQd>slTOqfh5?n6jN_Xb zKkio9yWYG(_XIH8OkSoy{>m7frJIgUNyd)%pv_JX5Gtxh_oMU&F-8Vss<&Fs6_kAg zyy}y--3zBU$uVzfcDhlJCzAZ%?Br)t<`6$i`cXnjxkSQGU-G^pZYS*9rFU4Nh<|pp z+n`Ia@PDi@w23Nw({#r%5ANWJmQ||?IZ?#KW{q&2zFQvGVP1E1{LA~W$ES9jGG3iI znn^v)*YjA8@+bU9eOiPN8TOvUX5PZ4$3WXs=E|dh@7~1u+qP$6%5M+t6(YX5yzj<) zJa5QiP=q^b7m@0ALER}YO?43*S!ZC?M-+4;ESxq=61Oz= z>a!m8R?fcBW>?-7*4`$q|3p*)FOk5U9ZSxdA-Q!wZk1PXaLsTTao#Z<O_D#nP4qx|Zol6{({(ZS-ssGCn=#zwy_r z>NvFjlCHrR`Ffz^d}kaTJTd_EdI~6Gl{t?t-nf9^6bA3Y9lK16Bc3~y1*S#ULof6` z-D;?IFv;E%Hp~dfhNH`S4tpin5$Yk$H>x@iRkGf$Ktp!=u2CP&sF%6Y^c}Wg?F=iU z$QwT5IP&xOiY@X}@LJr+#U#Obtxl-0+fF1Uq~2C#C&!^CZ0O={L#~!%b2T|O9j6_b z!RIBlGMle{+%uv|Th1|%#BAFGT+cH>&Z&x%&685q3_}+%BU+$=~!2$Qe;s zb=jOhHE5jkyZCoMixW2=N1wrp&b^%(OnVRQz$aPK&j~9Y42pjom7%9a#S!Z_dQo{m(l40*Vr$i9%U1-Oq`uVTSb;Z? zDQ>uoQ~sq+px8%yx*#d)LnO=w=w=#qHZNeWCJIx$_YpDNuqRsTw0m>>o5M(sbv z)fqL03`n?QOm>)VC*{_3BBhAN<7ef5WG3u7Ivu!PaXy^SLqfI|B_2S>6x}mp0C_^z z!v1?}f-d|nP+*<}+Wl8ndWlG8@JHrNBF0f@uDFp`*|7car1+#xU=gVudD7Ua%lk z@J{>b#6e9@$z9zTeP1iYX@(3yH02A|uH*#U>TC2jo~LJr&~(a6@K~)?$1Azw2CA3l zqRA+$+G3RlXb;hHMM1lDKw^Q7mrlI6_S~@jZXm_koaE2iq0o29MF#%7P zRVC!)+565S&3Ddo1LXAhg4arNKJ&IEYmw4jP$<*}l}dly)=4BN96WeHX_ke?rIAPNj>FI2d#q@w z{AEdUN@~aSj=cPSeKk3rm*JV3PW@^=vG{!%gfIyYORg_IH_oVh*Jh^>y42eIa^{Dv z_TC<^e|YIsrER6VeGF>(a)gYO0BV;MV!c9w`y^0B5dm@sZ4#IhOzW3!d zOBg-6d&TKPJkJ|#`puH-j~3i0Niq|Cxk400DCvIZ)a~WVzu)H9P8o*_IpJ)g?@9ZW zA;SN~YO35F7rA3t2l1<4{!z>5>MmFJsVEK{5-@Y? zkB_5U5_uXBj?p>}v+E+x%3(MRU99Tfk`iY7weNB}(pU$R)Yo{=W}#^doa~`liQ^U{ zj7Uj^&ShjStx677jo(yEP(mmQNSJ0OVWzXUlpZr-9 zIA}%OTPeuSI$BKkdNWVXJU-m+JLyn5)$-)aBii)@R%2hJFL+zA8+qHEx}IBq39A;f z=8d->Y1O|XsSyEHAEIsRsgDVFx`acg?+{In&->U0E+i?_oMXK;v-k^$flHYJe|iH! zLsv(YFA%NjDi7Wy!*;<&o@0}?dvo~_c}0n@F+gK`LWNFFu3qNg7Jv4{7R^5B$ydKN zyGZAdX~_;F4!s=GMT|_Dl2_j#s_Ec~W5b>G`kX{GR0?RNlW7WhG5MbVk(?fXT`xH% zPFAhH-MAyw7V5mhO)hY3@~Ki(H%s1Hc^G&z6(4Klw03Pr(MflC zwx@*WYDzMCp!L>YAAeZy`A184{*F|Npn=;{{;Vx*qLXomwA=|=DgCN(w`E;dd|+nH z?e)8A`PS>SpWlu1Zyh$iUkC_R05ae8Mnd0{?_r^+C{3X|R5e*M1FvxQxI@n)-u(L% zPCR4C4@$f~0Bx}+5jgQ>&fmBVsdSxv|5u#T_G{fmMG<`k4kcTYg3~-puNgi4W zBlm8~>EgvFRpyPH-R4%7*4t=N9YCN@-CotguI;(!%`^zBf~}0qB7Ousy8W2-&h=F)KF-7 z_#iXPa@!pJejPm+5;S68#iVom@eFL7K>qA#ZM4=~aolS;hC2+CUlCETAD0DMNV?-I z?qPq2BoafBIZExZ;xJmTKzbOWE$i|kJkP<#yKC)c*K^Q_r167FX%z%m=oYHReKIe( z%R$X(>?9~-m(Mg7+qzfaKZff$5KK<*pxDB9MvU5H_!0VVR;>U<9jfzk!xB)K7VLe+ zcQleV1C`^Ra>UJdhPCMZ-~;`B5(fwwseXG`mQa9nQQbeU(WeZXx9FGFW;ucQX`_uQ^9y#{ z%2kKlhkSs?g{nU|6Q%1S0Q*TajHv*i07m7ejDXR1fj{oJU!LPX4Ks_D&iw2@zwOYE zO9_ev_Bmz#ku`HJ2f;@l6WGEugIva1ZZ&E?$ha=LRONpIFgTpb9xTHbI3JfrqVcsdI$84NtN?-P&=&<(87ROSy?~$So8ypkw@## z@O@PtmlLB%eu~OWn=o8m$#aAWp3&2?b3=!A_-+akKnMzHvoH>t0Q)0MsNu#zb2%A@ zK}_GUue0&Y>XU#r(koWb8~+DVCQQWQC+PtCF!B04)W!_=EFKr28iocL&zdBA9KQ)O z9-KN;Z_g=Y)US3__?A36sYR9yUIdh65s=U*oj_uhgnjzKgj@M4pmRLXaQPC^1IY-m?Ju;{Q)xp_ihfqP9(R9ph$~=I`2ecO1u|?{4j)65EVLjbR{AfCBGU z?~&IuUhUCQ-KB$q$RV%1$6YNk#&1EOeM7Pe`t2S*`J&w$$au@hyR?&_Z*=Qjjod>? z$H+vlym|dgyK@&$sC+T=nr^?a3tXW&CS~*@FX~w!JptU$ow!$q*4qn1SF)DDT>k-q z);Z|MEAeuUK99(dBd}&SQ=>V&6f9=jV$URV1{As%!C-1k#`-E13p;oFGtDs=v<=Ge#H#4gFvaF%rFs=8z0)2%Dd>IsWJ4YdcfHI zaLsQS?Fx%T^un*kKVNI+*=YFX^q^$tR@2X+HG_@5IOEWX6QFN$tw)^Lrd~Iw#$k7z&`K5cm7PyimE2`;4Ti8!e2s(+P)GZt+{KIJ;(0Cw8= zlnggy-Q>@^hC~o!(W?}d-J(QoPU?W495ao%se2gkw`ML{P#I$==sa-^zL0mViaZ-r z>9&H;83isU{NAgk?}h&Cn2fA8)-^HtpIs@mW&#WIZ~dcz*d`*5v6lC9H9??GW}s$# z<_f4O0|l3>wfk9Y>tCv6sv;nOIOBQ%Ai%OrmatCtpZW1FuTTU~%imk>(ChD5o2VrZ z0;=nCM}Qs~*_)w|W0gQ$fMg7+(|svLAOm>C`}njMDBO>I{82On0fv@&T1+mgT!WAgpY;egEipGF^e?J!Be|LtzH#_(7)%q+M z0)nRpGIl?hWq`0I3|b7C4_t7@rD#3LoY5d*T^DvuHN<9>&}iW? zR-pzZk9xq!qh%$2q~Rjc@9%HXUIdJc3U#N0<@~?@3<5fNA3~!)QI8D>^FMrbxlO}G zqGP!=Ra(dBSB8Sg&hkKx>ks?(PdpZ8?UW=X+2*!#>w}=#X(Ls}rT=x60~_4^$&)9C zDNXFJ2;RulJ=gt>nPbjf0j=oL2hP12`^ng~b|fTpzeDate<-kne4Ff&#$X2x5T4zM zA~)!J>oFX`%ATq&gSo3fqq^+D^PlhcJ%g1Y<&As5K2vg4#`V$`Kp|$Am=v%R_JPTs zUCCb;NubUO&#a)UilWoxyt3k%6KLw$1{knUgMqyknK++ONimk0i=2S)Rg z1q*pDoKE=}GehpjOTZaNpLpcj5v71Y@RjP}#!0<(;0i84Q~9F2ad{^?@FGpuX`HwQ z_&`QhY(d9Lx||oEFcZQWp&v8izcQ#Xf&!--0B0&T1phRpj&V{gKf41C^Hh)ab3QX4 z2@)dl67)YptU;u0h~<;^6)E`sOhhG6)HpQS04^981~1}A9NzT;B;Zxr`z&Nn*f_WC zNV%=*vmYur3tM=S#gDAFF9F{^pG$83QZp}y*y<8a&%T1 zX~6N1gsUpS^(v#ue{7HZ1P~m*fmPk>o{TbH(|rn<+-yswHu%7M2aqlP&3#pNt>GdF z1cK|Ie?IqStMc2PIC*je5ZMnGnG_6j+Xkxv*yA@Y{QQ-#lD5sIksq6KviNw4B0omQ zUo6r!I&T7t&M>t_Fk}F<6)MGZ_jwrR<;> zOCSO9lxXw0mgRbF8Afg*=LOgNMDM89k$m`3@vFJ^Fl8W(xC6Y-=G=ChkY@4ogqvmq zT^EYSE{T}5j*x~)j8F_n?d^jH?Eb_pfWJVtb^m=ou>&}XC@&2V=f6iZ0)fAerthwr00$9n{k;Vs z%WSH3!%I5aQhS0K=6$_L)}U9z7eOEucR=NuNy3-6EDaf{5=;OE`mu;NsFzP+(=#Tx zl)skwf9oS4kTy%i8&pW`9wjMB(GYxg!kc0_o(H~umIm|B!qkxU zH-7DhwuFdDtNfM8jUXh-R~|;8rm$ESg+Z|`487t zyx&L1`RACq+t>tusOKz`oUZ33V(`aV0uqOt>BnG=UreCi0;3F`mk{(Uw4ZE_W%s3j zwWea)))69)bu19UdM$fZ;JD#yfQg=uHxK#yc9JFO+ZSmV90WbjiP=1f3NPkFdfi@O zda^aP|9c&?oGtGPY?J&q?ydH%jM5g;XLOy2B?ek=hDSeDkJL$=8z!bN74L`%-F9J= zq)tW`sm5f-c#Zp8H@!{%SKkF;JsAbrd@OJK>z+{HU~Zb{q1U%-BdPP<{hgXkGAejqW$C%d|yGg9QeBA!ajxSHCB=J&sq&WAwy9T7fUa{ck6~Q;Yf`I+Yg~MWQz|*lj=u|-W?HS= z6R6G-;YjX<1u}?VOHzh2ayRR`I_x9bcKtq0OzVc>{Qc(!FzN5ttDn9S1s~% z^Xm6pO(UN@_%atW3^>dG^!mp8<85*kF@Q`E1umK4{bh+a4!in)a*j z;bm(>qW_o+X|??tw}yp#PoNqt(8XhlYQ`sSEyom&y=RCn?iz|5chaMa>l-c1#!xp% zhc*5v+wtLikPHhbG^QTzt4}QS5xdnRRXA3du(jJ18P!l^I+eM9k=sZ8&2elbJNSz! z1bU31X$o7%vtU zo@*Q_vg5j0^!JL+x?TV00=>m48@!@I&&z#h_>)j{gqi+W20 zIsL5a&N~dOHaqhCMA;#|gZB#UXvMqXZL)AFMV#YbG zd(xcryxfK~8b=b9Tua2Bc~Y4b0h zR&<<|H6Yvk|G@Ks$hfZY2Hz4g-#vl9B*O%F+_`ZpOYm`ZJf?1;%%a>QXnVVaXF5e( zt^7wc_34)gSc#q(#Ect>t)l#hN2X=kQfIf-wsG%Rdf{2=!0m$HvC}4nSqjq|uNGFk zMHIgOmMXf|E6By|qo-RK`RV+V8K&yt9dJvDo}0=OISvj}rt0p0{uD!zZs|nK`b74K z86|UDR8~~GEsX!E{~K;xiGP1=z~MC^Hp;x%wwcI9R7Q zf`a?CGWo@4rj0aCv&CIzXt2^tL=PY9LCN2cqP~4BqO^8Tt~*Oy&>+{M!{MvIg3fni zA}{VTZIFVRDNrgbL%TTT+Jlzyt${s-piv9HGyHKR6f407mJ| zOIk2<|LMX?ixxd};Ng0O!7|eWSm_r?y8|>)UuPMpz1u119!++oz5MH8hmvLZ--mS$ zKH!4W3nMXiG~UsVg}x9qh2}n)-bK^(TQHoDKcfUsHM55E%zbQEKpS9XZ!yK&t!+LN}w@o5>OD`A?pPJU_p8nJuQ_SY&9QC&vyIW=1 zTg~JHNw^#$$HiHz^_)>LVY8Pcs>rr>kQI?4PulTH=|JO@Re_#L7wO(fhDUC#lVte?9>B?~); zq|)IN;+uveltulgn)yBw3Kj^9{``MHC)BHN(C{%fmh`l*LIC)Fb;DY$gp4pZ#@99N zkZKLQLPDUeJPCr!W@B+GqSTjOP?xq6(rlGQGWgk+arJf-Bv|D|NW;drhCUzQlyqo$ zzZ!x*4}$twoaFM`;NZF-Z_-9+$en%esl#ek8OJ25^j|Wjnd}dB`Ncw7oOvz!pZS%) z(CwASw)GyEUX6*w`as$=PZgzX2#^dno*(QvvNGI6r7OxYJWa+L5qwVuZ1h>B(ihWZ16%| z2Z#EM|E@l+L`+-nsFWG*&-JP}AyR3`>sGAd%Bl>UV{*Y2>WJ< z$0@?NzpnO=rB%UKFMhM9-1&tskBPUalbsGtaiWWUh?VwZeF^YkGp(<%&on`ezi2(k z+<0dKxuR9}7uv8fev=!m_3HU8E;v(D;MNCd{lO?w(dF{u989m*XY*@(MeH^<1*gl8 zpN{a@XeJ#O{RaJoY&X*v3S;45#}&d|=#nl6mp{6twA!nndELT5g5m$(D#$lw@U;7j z($il1Y7y{Te<#P9VY2(>^QrQp^ox{NcbyX>t;H9(cS7jg!^N$fiCD)7O;UxkJui?O zKDj4vyMN2T=e{Evv^`#pd!||{%Ge4cwXDHLU|_KBH(yAh*LRzX6nJjf3JSJe z$074S;q}hz!pTURR}OX`mU#uDr1E9|)P^(7rSq*F$fRKNM=HckM?nlrX~0u3*wUd9=AbBdS1hHStZG~TeCoiC1$ zv)Glhc>0}ZI8)4RWljOdUf%_)iIAn%j%)~LQ%b(}8kl@(B$~(_p}wL# zN()h_K%GhNE%wJ`%rxLDkO|0lg_T}#^s&>*tNQVC66H;msDpgqO6f-7nn{C@0|1)P7CQP$~+lW$RnnwJI0-~2^-fhu&?~*Po2eI zgR;1L%xeO9q9`BcfhM8ZfCntWqrYz9?oT4;M`K0e_!I7wgKQ1t(WV>tnBS3 zg@^sdMb@XHtw@7)S6w@P8j}u-orhl!IF8hZzwrlcKP z0*S4|0Fm6xORdcd6G@jB$;`VS>;1jS2vI8gH*!wHGibJSii&LK8sil+z{EClQ#mGU zmpOlGA86~I5^?5)i+_}a18XWqX%y@Dnm46A%OLzk-@=qV;R}mqxk@(#OA>{2f`e86 zAhGo@M%k?&hxZy|6^q?Y}}$|MQs17rhDU|QHCBw#YgV=C)NXa~TV}u-W!|ufD%Oet-P>%cFhv+3WqfK3~uG`~AxK>H63- zX&FrYh<#Ks6HzA3HTg9cgnmqOW9p}dG|cmf(|^FF->E6@gsClT5lQ`YFnI*ii>}@# zA|fQ2%m6WTU-05(PdM!uJFMLC*TX;LYgd3A4A$T8YQ;njIoT|)Hm4`TWy|HkcEO7r zPljWY0TAh@s*4soFNVFxMH1{2SbYhO38!om`3XI+F4VQDS=1+W_R+K4Om_GrAlV*P z#=3Q_vih=sP1rM-+p_C4zbQ98`u`s$wZd}uxu|tLey_uj&Vj<&j~$8>9gl$3oN7;c z&0&u9LY*0vxeEhLF(Yi&pDWt+TY<5@L&|TbeS_eiC*uq~C(lk?@Z^@H8JX~=e!6Hq zftxRhh@?v7&jz^* zQr>}fJ@JEvIq~DXXFVn?!9%zWVcLznnVGST>OzU|?rHZUY~meut3#Y$lq^>KoZ7?i z?7V2lZ8`pn;=LV+xZGH6XJ7tNNA=b_Nr;Q(g>^SKSYkRJi|1-)$T06QS7{+nzP^18 zROrM-eh{Cg~J`dATMbpD68P^5t;6j1=5mi;^TenKVo$l9?GBN@$(`m~f;mh9&UZzi} z{d`qNVrIYj`0-=B;{CBbjO>E^{2@SO4kt({IA6bx7G9Hi4`|)JhlEHZxs|Bp^URJ7 z5?&b?hN3AXa`*2q%P%O1kn$206RW88BQCJpX<(iN37jhDJ&Fy86ard`Bu}PD4!Opd z9}ECHsw_5y<G_UvKBv4kv!eYc+Yg?-cZUg1`9ji@rZZmJST}&L z`@X7Ya+x>I7w-K$5A-{5A9>08oCerACb!U~{VOT`U5i_{ZZ-P5VLxl-aLA}FF0CC~ z$#>fw0NM+>+2#cujv^LjxNNZXh z$zF!*e*!R6%)%=LANA_P*X>wso1)XNURqlFXmruyyojyHCqe+mJ?BOD78G1Pf%&RU z%g##i(G%F+n$fX+^8lpn7USt!tFj|LZ`1W6&GBP@R%iRT)2C>0h|=_}!c9i93M1rF z=1mJkvL|VADFAAaJxj9h^$3h?>#|+~P-gP5ApWWfUd>_upEH`e64ehU-(YuwAv@Mr zgnP$P9aO!kbwX!}T~R*K`| ztDE!0S7UPAv6v)^B`-AOc?DPs_ueMWp<{IuZdo5Xw?`Acgde*+H*ViM_*SsJ9#rnA zq}VOGPZ2)(`NSOLwa#;n{J-cnZ_t=AhRDP@;kU7eLEKO-XJFw#l2z0jZEnD~6ZJ^h5Kqm3R!ej`S#<+RcgPO2mW}#&&-K9LT+pj>Xp;uA^_3-dfiZ z0TG`*>!|!{fE3(q`nIl*I_UIN_)MRI-Xt9u%=9p=JyY?%tFJ{KZ#&jUA`q0w`%#Ip zcC|XZJ+c#z+xRf0+1b-g|H?8L(yh8fsz3xq2JzDV8w#r|Z#*gIqyVu8eAa&8y_C>$ z`+p*4hZ=i}>+{acG5O5ep7wFIljb4i=|6^!3O{DZWZ&H=iad6BIw|}8#)9vW9Pnn> zEFwHL3j{tFxK-E4t5YM-dd8D@$HP=}$%p*jK9q>D>2W;Un+*!5)I(fN`dhW>3{nD| zFrHBuZu?I+qH(@=B#o{7Rt>}+E|sV?qo}dg6K}+=LH+YQ&oh9ZJG9+|*PyB=0hYD{ zYYGp}m)Q8vDju#fm}MUjM?N)JB=}SKAvGPP>k{Xp-j<9=3JVT+wG$-~VBAFe9k`}T5cR6=|QjHO`M zXuBZnpDAO)v}VCK4?EPe)#;@qmtNR?XAdjp>BQC{KzxwpRugP9cz-sdqxQ0Tn^v;J z_6lt+x7yfqb!AO9A=V-@qq}CrlRs1H0329zj`={Zz_w3aj>WlQlD3-#xzw0+Kvbj^ zX2C~j;Imx0n@0(V8bf%mivcdUC!^>hSVCSZQEdiH`B}?}ho7sZU~6jx4%XTM0R7S> zIBrGH{!$<83ER!;RhvsrUp=TNL^Q$-vvj$GXnT&dn1a+gCRPvrH!8jbHM-C5?|ihq zKZ&R}#l2AG0%STe9cEqT|9OIXbT>mog8Ri$xj>i-^U&4*GK2{7PzjWz zbhx^iwwTFV@M}IyGq#D&$pWGq$MJXT7MpgNlQ4RVvuU!dm8Kh&oEvVJ_TskZIeDw4W#7*v&S1Udbzy9xA#Sq94oEo2Cvi; zbYgGPGU}^1%m^7B+DmyCY`vO2ox=-}Czy;-}Vq~}}FZb0(Imcw7 z1+OF4gzM?cczvqlazpm)QCdlMFpt>d+VDJ%ue%np=Fkj2zunNFGV!{#uUybVLTvPc5h9=x!EW zJ**q(i@SUEm-ZFXR+H0TSjER`4!(j6-@d2YQ^!$1c7z7|AWQ`N6<67p{Qcu#A2c4f zd8M>NZn5g^mv6^nZ;%&habiG|JK*wzS*Y~$B>PhaTO=koZuA`Be)%HKEp}WkN(8$4 zn95Fbbg))wMgwJOJ9@oxywcg_TXI%uJ?L6I*2|9lhu$B*UgMylRCxLHf2K6`EckNC znd44M;ZuuW1yV!Wzs1PX=B`AVhp4b*yFbQyuf3U0R@FBc3cscGdcd9RZOKQdt#&9~Q75 zIGPkkz57ep)Jt&~R>SVF*aOr=jUZh*6!fwmzs7pj-VDCB#~V6wJ8$rioECTY?8UdI z^`yc0!lYQj=QG>(B(!K3T<%-!xudLCJIhpN(yiy0RcY#(aJtQW_V$1S;0Gi&6pF(2 zJVWWn|F(Wt_3eNWbnG;yxvW7Cpw zNwqn>@B7?^Dw>PP;QS@KdgEX`FT*O<>+#J*EW+b{mQXu!xHt1&D!J!LDRolZ>Y@oh zwdwj(CL&nRcr5P0`Z;Tt-(qkKdY-NKM|wjD+Zh?N&P@$!v_Pwkub&2*3kkTBzpR+h zvfLn;)Si~L-gNwUK4s~!PikhWfqtep<^D?aFDNAY`b)C4>Rd#${$t|)s^;%YzGRSH zO^yhBgg?TN*+}YMsXcPJZ#)U^q>*B!G5;;B{Y^0Mt{uS(nLAcD3&uMNQi;A6_ugdQ zHaOuxlDXV+p>p&j{bcQ4`ux$zUYmog7*F1fA$<{%c@;)XsHgE@mdgAg&@S7t6Vf7B zkK1r>afavy;d{Qu+5+SzOut8Z8X83Rz`YE0_Y+-6i;4*bWkDh$1CTjr>cAK6=`=|g zRyvq}9>q?*8c4tGlpCMlyd>o?E+SGG(m~Zt>Uwr5{||$}8D`VQNRLAuBC>Krtmt%D zO_|+~nh^s@w&N6d652u0nUNi2nx1v&V82|&?F?&f_tWK44D=SMvO1q^z; zcSR^&NMDBj`0&npO$l?zA@BV;hM^6){+}SnjwPk1(0r#;LI;woL-qw6CEo;n?mhkK z+DjXK?=n@uJCP+RxwZ_$dYan2bm;psI}87#Gu{CQfia~y>OGAsR-z!<-se0vrFswc zRBywf(rhDWZ8(`)&=_5!q>gyfQQ4^~FOSnaY@!|L9;kn*KDu4g7vHo;M($>LcB`EY zAKxaD`rI7qY%Qko5X7#?pb4ty3l%YY-ARdCL%*>T-*2<M#Ri0F*aB?42J|&Pn>J2{dx#~>+@_gozsrEo|BhWz z{?unQs4`c@blhZ;(i<&UGILOZl8}qa_qU0N{78(=E*?MyPUlH;saXTW><{!68it*~ zLoVDuxU+hT2-@5nujdcdoE99BWg+KmTASihtNj-Q$WQ`#%ob*XG7=FWU1^M;%~@DGPGLppwlP>cpKiX^zg) z+-Mw|-p}A8<>GnB3U_5Li1b@#9pmY|7lkG+9Rgih7VDmx&YOr`JyCi2Mz|V`hse2D zP{K~DO_#i6J$y2?*(S@vs|OwZ$yZjo02`_uAuF)(^M%G2K~+9|XpVAaB^z&SPEX_! zIph3RuG@lhGg9=#oKGA7HT{eS7`LlF7ZlE`Ae>cX$*-okRO7TtQfv(67$BXqwM0yT zMGwfXHr!v%kzF0F!Jwfo`KTWEf8F-7A}u_1P-lf&+c>FolFK$DQBIHyLjJp3oW?3E ziSyE*3mTu?VhZx#0a?b4CIdl*Ryw%CBZT-I-;@$DLzOpu{?7 zioHW%vzV1Kp#3+gAy#8nm37G15?qQN$IGd&U9U%cQ@7+=@R+tP;I4rA@B~)dqFJV& zolP6RB>$oByRYzp$YV>2_M+I^B#5*eV30(H#o$S<9gwv;NZpxgJUYeeRTJ;X6>Wnc ze82@$xt}7xj1<`EkbwytbKEQyEyZ>M1 zM;cA;Pp(6*#q&PYZWUz8k0#&aG`?^$CrSeprr)X#+-frw!(DC5`XF%WQDAXhG(u8> zDhIzd`f>Ku*g@sxw+YRONmZHtt!j_xu{JAiw?wo74gb|%abBgC$IN6y!(FE!gQ_@4 z7=i4i`&szf8y8on#@hK$)#s2d-Unfx$WqBXd9sO=b6?jEtcgKqiSVb_jYdmOq6{It&-iOVl{TvwhLcL zfzO0uety{|vI{a@d8YT>ld(-bSr+6>iq=Olsf(+TzC3QGWDMRH{8lkCMFTYR2X-;C zU1nM8>T{Dd_VjUR_qahdj*}Y@gBRUN*m&)T0U@eAr|wcSTVh6n3^QPsk8z(FMTe^O zal-`qkKfjkIl5F#*l52@g4`t_8qY&bvKrXKpY5}Gii4Lyi2yE-pN)^zr=bF#PSnT~ zrKybJG7cLl?c8T0(`slV3Ka7rDHgNbDA;!kQufEP7zh3ijXz1f-@o$2g4-qI02J-7o2)iY0& z|2DZZy{kuGv$8p{0?_3xXi6b$iDIOsLt9#Tw#L`8YNl7G@zC#ejJ!!3@5;77hTC1)ZMPa8o}>jp*ZSCC)v^%;PzHJd=w-FO?P=iuJR z&S-1`0*bDV#8TVMf?^G5A*Y1JcN2{QsYFX07HGT`9uDUCf?OY!b@+M_U~_g8CVMj| z==R8z&BeGH)KDp9XN~^~1LGyd_#C16?fL-jk9e$!SDicOngkGQJ3OVK9$r*SsWqod zacxB5b{aJN$ZI3095$qG=6R~ny-83Pz(klTvgn!}22{pK#UO39b7m~#NqsCwMC4!T zXk**u^otB10^jS_mORd4)QN?eS6wDw;2={A%VHcs4a<#!aylS9U7U+)4c z;E@7D_P|}__wDfGH0t7;!z?g}>Hnenw`^?xWC%+j+rq9UJcs(ICUbb4LAD^=QflkiW#v1-r8f>@?hch%4SD zcz2!z`3mP0@8LzxF-L3g6)xPMUrr=-&*L;k&0l>l1K@}cI&<}6$V=?W6!oB#PoF*ZjIo)=2Eug#Z?(bo^DeHN}9`U3L)MC2=>xpN;zyvroL#|L5()q ziY!DmbmG)Yh<4b|S{dBFu!Tu*vy3Ssg3baly`pFUvNpbIw_s=Tk4ouThM&hAKcBBG zW{0h%QqSb>6uEzI3#DqFDb-}p|4W?~l0nlosfr{yDN>|i&3HtUE;F>8@dqsXhl)63bh&%aADZ0?^`{`P zg-LNYzz^RuhZOel(a&q}WhQHrqxVN7A{B;-cABwiz;ev3$6uBCKs2UWzLdt$_& zxS5m(XBmVM5OM#jA`0T1E2QzY_E@ozqr{*AN*6$Wh1>4@9VCoww2D(-h6Fdt&{aK(s@sEa0Z6z_t?-kXcO@wMm4 z!<`&8lRS+x;#7S<0IzoG%r(DcA=Kv92#C7#sE18dgiAt{{8?{7)y_`C%w>Rv0MO+X zoAo6T5WN@zd7ik;B)%?9hV+CBo%0;-n19FuIrhM^0f0l1{rgwO@-y7DN90$Rrhi8s zRS%A^`40E^sUdjT5kg560F9 z_k!kMm@+Pn!J5=j3altbQ?VIDE00>Wcjz;udCf;d9jf8g2 zc=a#7sREhopS}>M-PwxA2>h3_>jt%&OL{RXkqF9MdPl^#NiwJG#;!a%Y%33x zDb{cA~sS`k?<@k(dNEQ@}LC=qaRD-K~cNOfBj=XQ;$;Kv3jakU4K z=SA-XixLp}^zIm8h?`TYoTjV3?q-RF1&kRiJ{mhslUaCrzTsLG53b_|&Ov@O58=+* z-@M3-_7-?KNXO*fbaU2b?;T_b;md~aq#L9Pts}|p%6cB6GZ&T2kxalcYaa{2Sc^j} zUcSe3pnTot7y+TCxO$@M22sY47*USzGe6^33Qk=JAz<+jJ$jjEKb)y)m+f?2=GI=w zykbHi12O3zxk=Ne{=vOX8Ygc1vn(g{Zyz%x0VNo}c@6Mx=7D|(mC+gUM zDQ>yefhqlGvLz0*-BM!|(=zIxH1(~#`oPFtgG_SPYq&U{Evrm2iCYgA_8eYH^g25wtHG!P~)E}C#g zD_j`u;m$PUfTvk8Q0M;aEeX8Bo$p3Vs97dFm7jZu8__xv!5untR}_U*gY!WaOivZn z=gjjdDe}f2yyYnh4>^8S5&5JR^bd~|SeAQP{+f!cK~Y{q`3JA#w80Cp*k5=hk@t75 zH}dk}lC3CDxwkAi1hehy>bx*}eG3}Go*VwDe~-YoI7G9wW>HY1A%Mx)%bo$RRAf}V zjC9vr;@15YVk*lD;}}+txP#~uxataW)M*)$X*A#wdY^(dr=yCUmL*wEk{nEKP-MXa z|IHT)>jvz5Ai!t(4gkOw&wE!qT_VS5v+KiG^5~j%J=y?f)}KORdbXZ{GpC{)P@Ch)c!9|;Qu*j%sKzwGv4%umKsz<$#{?q z7I(VNh!`>6U_xapyWqmw$ns0lp#Xb7l4VRuZv1zd1QoA)$}yxpC%Amo_biO^ddk>o zNKBr8H15-L@LAclV6oqIm9h}O8L1?*D8+Sf`BE##X#T*a)?4x|zKpF){fXNK$QN_G z<9~qzHPAj{ffYd?3w3}90gMxfp+Tq(-N&KS*G^6x`^nRtjXq3dDk zZ+yir+QefgGbp`6)`9s6r>1qMU~oQBuH|WfafBfDOQRpY5RE~>?VvrJ=H>%}LSNBX zZ%DotT-YV=Iy^nD$1yGO-`JmPgqf?;5M@4-W$6ddhs1HlgMRkcQSh;94+W%-a3LSP zk!I$oMEIDzNoBEUOs*(A`1tV*n3v1y-{2mh*)*CS7Kb}dvwx*^Gp!}~sX8rCGG;N* z0A(s9!?-JEB%OQ3E6oczS{;eJIA77M4ZyKJQv8{F!l2oX{S`Eds{TlaK9!ypWKsEK zW5{;DZQpm1|ORcL`DNQW~HdPXP#adHiI zfR%P_ztA~2c1u1eH{*)RU_Uv4nwyt$_^%VOaI3$oRnJtG`#{xb8E3sA-LC*^+EfDp zP3HlYA7d^3;@sPssFD@f-qj;{2{AUuN>-w7Egdo%-)Zx1K9-EZ)u8O$75`VLZ34o>BBp#`G%w8jo( zxb}?$@R`y`9TsATI8#p_NJ-?CBfN8<YnH&ywWJH`5e%kg< z$=UT0%T&F_EWGhHPD^mf%~NuWSa0N`3P67_%_+sOMfibN?2+9peIL9X@3v+m5yVB{ zwcSFKt@|c_a|_7gr;p{7%p~x3FflIp6ucRUxOgR}=b$Cn+l>Hko$|oAZHVVT&Il6`LrIdRAkFPBToVCeFC^S#EP~Q{pP?#sY3eyI;7NWDyle$t?z)f=JyRHU zi%996^N{b`dAHFC1pa;B?HrdaM6H@MX)Z&VZ^|=)z#fVGq30hPZKvmSX&0@PzM? zjbJS1LUnY1XyfAl`YnCA#{FesH}N(VOR)NvII?7ndVMFql=z%rC%c18+m6u8O{uQ1X9L3O!8&fe=uDe+6Owoc|O>iKT3Bvct%9vCl)|MSI zFb8kuY~aDU5rds4<}ll>XIWvwGNs5$i+Dy;-@806DL=RIWZ`z73Ah`O^bz3Y7I#ns zTv$pVQM{35WuNA#+>sa53tPof{Ry{#!;`LZU85eSXqF6)gIxD}MC8!P50GhP=NlgL z&i2UP`4zYn0q$79c@J`lCj^}3Ofd8`Z7_3t0N`u;zSW@m=1dh=#hjVJc->@( zyg1k0_XQwGEQO_JT_DYUe7R31a5u%bv>TlPNLJOyUR<(?##NQtyoD6k?!5Es5wM!l`6 zb`S;I8*YF>#c^UZZxx)o6_A$-dH10a5HO38^EQN3$rZ-WvaP}&gQLnvmIk~HaH279 zU+}ie(SdU?+Yk}HCnyT6sRLMU@ybw&k4*1ac+wbXX1l94Gzw S48AHNVs*jpe3ixZxc>vrab45^ literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/install.png b/source/app/images/sprites/install.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f4cd267491548ccbc3c7e522d85c44c5710694 GIT binary patch literal 9980 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 H(~$oKZFmFf literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/jingle.png b/source/app/images/sprites/jingle.png new file mode 100644 index 0000000000000000000000000000000000000000..d97aba0b7c14c20db71a70e1dde6651b32a1de95 GIT binary patch literal 2060 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 literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/me.png b/source/app/images/sprites/me.png new file mode 100644 index 0000000000000000000000000000000000000000..639c83d80584bde78619f71115cbf10b74ead82e GIT binary patch literal 5071 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 literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/mini.gif b/source/app/images/sprites/mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..53a8e9989e19842a6f07b508460f1f4c18de5b69 GIT binary patch literal 4105 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 literal 0 HcmV?d00001 diff --git a/source/app/images/sprites/talk.png b/source/app/images/sprites/talk.png new file mode 100644 index 0000000000000000000000000000000000000000..80a2e04835540d127c4ce1f187bbced76b57ce1f GIT binary patch literal 47001 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 literal 0 HcmV?d00001 diff --git a/source/app/images/wait/wait-big.gif b/source/app/images/wait/wait-big.gif new file mode 100644 index 0000000000000000000000000000000000000000..0cd9591c5e64a6138d059ea741ca65a989ee3e6c GIT binary patch literal 1932 zcmYk6eNYo;0>fU44hh#bdC-905E?v5ml9IB#ygV{8a_7z+xm>Q*YNw~CAqYBq_N+)G>h0|X0Bme* zyng+9eSO_|gPEjAc{eITsqptDC=hw(`~yOz0ygj_zsa9E0f79tV2%HKWdGB-{SlZO zXTJhrenKqEy|X>-mk3YP-|>p%S~Jym?f9qZx~of|1%=1z{XCX`Xy;8{2*3UWP53T5 z+FAIHjl^*E}-#=)`Ak9F)G_^gG_q>a>HwEAa==P1CBa-1(ph6zywKbMy&J6R{KpBG9?W(f3|f( zDZOc#DCsG-a?<`FtyKtTIDrQ|&6D?2qt#=}52P!@&nF?{@pB9877BJ-Y0ELRR;=~$ z9gM4=sbtxrVIKuol0Uyv)VIi5ieyw}?fiN$L8a(cr=BlM%mWx+uHD6~!g0temja=6 zc!RKY2UG_gf@SaKvORO$*SnW#V7BhWcm0kSg-A*d$MlYUcF+JLGwz<f0!7b}gMuK^=ZDk%46;zC}hQ>upa81;{CKd>8qYJWbU) ze;AiCDrBPvot}R2qF|~&Q;Mu}N4fa;3>p(Gj}D7!kgNXUrJed)<64*-Fib7PN!_u! zPXic)@HhHYo)W3=qw13LJbRj_0^bXl*p`*>Pf#RI-OL-KUCTmw^ zey9O!*|v#9Duqd$H>)cnS9e%2oy2P%orKZ7W&&GFo?LRe^$vlX@vZKTR~}=GDkV2q zP8+&@SuF`cKBrdOrp2K~UGb`rD6n~WGb%X|Q!#Ees^V$b^f>3P-#~tBc;?Qp-I$5- zTMPKqA`wLMD#I$-H6muxR+<2!mbK^B=Wo*d{5r9J*s)cT!!?~9W(vZz9Kox{VvhA9r(`Y z%(d-fT~?b8?3vBA{3m6smZd46Ff&9v@i7rx?3kdGRYbefB=&`)n<_L}gP zWg<|L!u#))QR}aaeN( z^-X@FkK1gPzsNgh%VG~KH2E=n7uTDF>92x<)u!)u!63%=s47$ozjZMHFxe0hd2#8G zwJfr|)WMKC!_@J&*lPCP^Tx~^6VVwbIhwE(P}LFWqhQm3n$7F-dN0oneEP)0z>FR6|%Oelz136FoOZKAR_tq zCD?yWCQueV|Frq+A$o-^%popnkh{OeNz=L^e1IkRL=6g$_ku1i2p?f8zW)XW8S{BU z{A|xa+<*>7N(XDP^;BliR%Wn*nDiDE9a~hFj)@TLlzY&(ze$@k9XDB*<VPI!YGh sMdL!rq?#*fs+dGwc@Lb&rTt5(4;GcX?s(BLcmMzZ07*qoM6N<$f){OlNdN!< literal 0 HcmV?d00001 diff --git a/source/app/images/wait/wait-small.gif b/source/app/images/wait/wait-small.gif new file mode 100644 index 0000000000000000000000000000000000000000..695857584e35a7fcc3cf57b1205cc500b8b72f36 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/source/app/images/wait/wait-typing.gif b/source/app/images/wait/wait-typing.gif new file mode 100644 index 0000000000000000000000000000000000000000..22ec6bb2875022d5de41fb26eefe2012ba182303 GIT binary patch literal 151 zcmZ?wbhEHb6kuRs_{hYtY}vB&=gdHEz$7T5peeYk)-NgNQb*iXgXnNkR8?GHRlFfenha$-Bq{>7EncL7P{9T? I2dfHe0B~a?E&u=k literal 0 HcmV?d00001 diff --git a/source/app/javascripts/adhoc.js b/source/app/javascripts/adhoc.js new file mode 100644 index 0000000..125a369 --- /dev/null +++ b/source/app/javascripts/adhoc.js @@ -0,0 +1,160 @@ +/* + +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 new file mode 100644 index 0000000..f7c03d2 --- /dev/null +++ b/source/app/javascripts/anonymous.js @@ -0,0 +1,190 @@ +/* + +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 = {}; + + + /** + * 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 + 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); + + // 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/audio.js b/source/app/javascripts/audio.js new file mode 100644 index 0000000..8762abd --- /dev/null +++ b/source/app/javascripts/audio.js @@ -0,0 +1,191 @@ +/* + +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._is_supported = function() { + + is_supported = true; + + try { + if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) { + is_supported = false; + } + } catch(e) { + Console.error('Audio._is_supported', e); + } finally { + return is_supported; + } + + }; + + + /** + * 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._is_supported()) { + return false; + } + + // If the sounds are enabled + if(DataStore.getDB(Connection.desktop_hash, 'options', 'sounds') === '1') { + // If the audio elements aren't yet in the DOM + if(!Common.exists('#audio')) { + $('body').append( + '
' + + '' + + + '' + + + '' + + + '' + + + '' + + '
' + ); + } + + // 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._is_supported()) { + 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 new file mode 100644 index 0000000..67d690a --- /dev/null +++ b/source/app/javascripts/autocompletion.js @@ -0,0 +1,166 @@ +/* + +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 array with insensitivity to the case + * @public + * @param {string} a + * @param {string} b + * @return {undefined} + */ + self.caseInsensitiveSort = function(a, b) { + + try { + // Put the two strings into lower case + a = a.toLowerCase(); + b = b.toLowerCase(); + + // Process the sort + if(a > b) + return 1; + if(a < b) + return -1; + } catch(e) { + Console.error('Autocompletion.caseInsensitiveSort', e); + } + + }; + + + /** + * Creates an array with the autocompletion results + * @public + * @param {string} query + * @param {string} id + * @return {object} + */ + self.process = function(query, id) { + + var results = []; + + try { + // Replace forbidden characters in regex + query = Common.escapeRegex(query); + + // Search in the roster + $('#' + id + ' .user').each(function() { + var nick = $(this).find('.name').text(); + var regex = new RegExp('(^)' + query, 'gi'); + + if(nick.match(regex)) + results.push(nick); + }); + + // 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 vSelector = $('#' + hash + ' .message-area'); + var value = vSelector.val(); + + if(!value) { + self.reset(hash); + } + + var query = vSelector.attr('data-autocompletion-query'); + + // The autocompletion has not been yet launched + if(query === undefined) { + query = value; + vSelector.attr('data-autocompletion-query', query); + } + + // Get the pointer + var pointer = vSelector.attr('data-autocompletion-pointer'); + var i = 0; + + if(pointer) + i = parseInt(pointer); + + // We get the nickname + var nick = self.process(query, hash)[i]; + + // Shit, this is my nick! + if((nick !== undefined) && (nick.toLowerCase() == Name.getMUCNick(hash).toLowerCase())) { + // Increment + i++; + + // Get the next nick + nick = self.process(query, hash)[i]; + } + + // We quote the nick + if(nick !== undefined) { + // Increment + i++; + Utils.quoteMyNick(hash, nick); + + // Put a pointer + vSelector.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 new file mode 100644 index 0000000..1f8ea92 --- /dev/null +++ b/source/app/javascripts/avatar.js @@ -0,0 +1,282 @@ +/* + +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); + + // Write the values to the database + DataStore.setDB(Connection.desktop_hash, 'profile', 'name', names[0]); + DataStore.setDB(Connection.desktop_hash, 'profile', 'nick', names[1]); + } + + // 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'; + + // Process the checksum + 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 new file mode 100644 index 0000000..6e5366e --- /dev/null +++ b/source/app/javascripts/base64.js @@ -0,0 +1,82 @@ +// 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 new file mode 100644 index 0000000..1109a8d --- /dev/null +++ b/source/app/javascripts/board.js @@ -0,0 +1,357 @@ +/* + +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 = {}; + + + /** + * 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') { + 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; + } + } + + // Error + else { + 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; + } + } + + // No text? + if(!text) + return false; + + // Append the content + $('#board').append('
' + text + '
'); + + // Events (click and auto-hide) + $('#board .one-board.' + type + '[data-id="' + id + '"]') + + .click(function() { + self.closeThis(this); + }) + + .oneTime('5s', function() { + self.closeThis(this); + }) + + .slideDown(); + + 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 || !window.webkitNotifications) + 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!"); + + // Check for notification permission + if(window.webkitNotifications.checkPermission() === 0) { + // Create notification + var notification = window.webkitNotifications.createNotification(icon, title, content); + + // Auto-hide after a while + notification.ondisplay = function(event) { + setTimeout(function() { + event.currentTarget.cancel(); + }, 10000); + }; + + // 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.cancel(); + }; + + // Show notification + notification.show(); + + 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 { + if(!window.webkitNotifications || (window.webkitNotifications.checkPermission() === 0)) + return; + + // Ask for permission + window.webkitNotifications.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 new file mode 100644 index 0000000..2af7f0c --- /dev/null +++ b/source/app/javascripts/browser-detect.js @@ -0,0 +1,125 @@ +/* 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= max_priority || max_priority === null)) { + max_priority = cur_priority; + selected_xid = cur_xid_full; + } + } + } + } catch(e) { + Console.error('Caps.getFeatureResource', e); + } finally { + return selected_xid; + } + + }; + + + /** + * Return class scope + */ + return self; + +})(); \ No newline at end of file diff --git a/source/app/javascripts/carbons.js b/source/app/javascripts/carbons.js new file mode 100644 index 0000000..7742883 --- /dev/null +++ b/source/app/javascripts/carbons.js @@ -0,0 +1,238 @@ +/* + +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 + * @public + * @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 + * @public + * @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'); + } + } 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 new file mode 100644 index 0000000..da81394 --- /dev/null +++ b/source/app/javascripts/chat.js @@ -0,0 +1,505 @@ +/* + +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 = {}; + + + /** + * 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 specialAttributes, specialAvatar, specialName, specialCode, specialLink, specialDisabled, specialStyle, specialMAM; + + // Groupchat special code + if(type == 'groupchat') { + specialAttributes = ' data-type="groupchat"'; + specialAvatar = ''; + specialName = '

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

'; + specialCode = '

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

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

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

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

'; + specialLink = ''; + specialStyle = ''; + + // Is this a gateway? + if(xid.match(/%/)) + specialDisabled = ''; + else + specialDisabled = ' disabled=""'; + } + + // Chat (or other things?!) special code + else { + specialMAM = '
'; + specialAttributes = ' data-type="chat"'; + specialAvatar = '
'; + specialName = '

'; + specialCode = '
' + specialMAM + '
'; + specialLink = '' + + '' + + ''; + specialStyle = ' style="display: none;"'; + specialDisabled = ''; + } + + // Not a groupchat private chat, we can use the buddy add icon + if((type == 'chat') || (type == 'groupchat')) { + var addTitle; + + if(type == 'chat') + addTitle = Common._e("Add this contact to your friends"); + else + addTitle = Common._e("Add this groupchat to your favorites"); + + specialLink += ''; + } + + // IE DOM parsing bug fix + var specialStylePicker = '
' + + '' + + '
'; + + if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) + specialStylePicker = ''; + + // Append the chat HTML code + $('#page-engine').append( + '
' + + '
' + + specialAvatar + + + '
' + + '

' + nick.htmlEnc() + '

' + + specialName + + '
' + + '
' + + + specialCode + + + '
' + + '' + + + '
' + + '' + + '
' + + '
' + + '
' + ); + + // 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.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 specialClass = ' unavailable'; + var show_close = true; + + // Groupchat + if(type == 'groupchat') { + specialClass = ' 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); + + // If the user is not in our roster + 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 + $('#' + hash + ' .content').append(chat_history); + + // Filter old groups & messages + $('#' + hash + ' .one-group[data-type="user-message"]').addClass('from-history').attr('data-type', 'old-message'); + $('#' + hash + ' .user-message').removeClass('user-message').addClass('old-message'); + + // Regenerate user names + $('#' + hash + ' .one-group.' + my_hash + ' b.name').text(Name.getBuddy(Common.getXID())); + $('#' + hash + ' .one-group.' + friend_hash + ' b.name').text(Name.getBuddy(xid)); + + // Regenerate group dates + $('#' + hash + ' .one-group').each(function() { + var current_stamp = parseInt($(this).attr('data-stamp')); + $(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 inputDetect = $('#page-engine #' + hash + ' .message-area'); + + inputDetect.focus(function() { + // Clean notifications for this chat + Interface.chanCleanNotify(hash); + + // Store focus on this chat! + Interface.chat_focus_hash = hash; + }); + + inputDetect.blur(function() { + // Reset storage about focus on this chat! + if(Interface.chat_focus_hash == hash) + Interface.chat_focus_hash = null; + }); + + inputDetect.keypress(function(e) { + // Enter key + if(e.keyCode == 13) { + // Add a new line + if(e.shiftKey || e.ctrlKey) { + inputDetect.val(inputDetect.val() + '\n'); + } else { + // Send the message + Message.send(hash, 'chat'); + + // Reset the composing database entry + DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'off'); + } + + return false; + } + }); + + // 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); + } + }); + } + } + }); + + // Chatstate events + ChatState.events(inputDetect, xid, hash, 'chat'); + } catch(e) { + Console.error('Chat.create', e); + } + + }; + + + /** + * Return class scope + */ + return self; + +})(); \ No newline at end of file diff --git a/source/app/javascripts/chatstate.js b/source/app/javascripts/chatstate.js new file mode 100644 index 0000000..efbb2f5 --- /dev/null +++ b/source/app/javascripts/chatstate.js @@ -0,0 +1,242 @@ +/* + +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); + + // Chat only: Nothing in the input, user is inactive + 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 new file mode 100644 index 0000000..7274272 --- /dev/null +++ b/source/app/javascripts/common.js @@ -0,0 +1,763 @@ +/* + +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 = {}; + + + /** + * 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; + } + + }; + + + /** + * Generates the good XID + * @public + * @param {string} xid + * @param {string} type + * @return {string} + */ + self.generateXID = function(xid, type) { + + try { + // XID needs to be transformed + // .. and made lowercase (uncertain though this is the right place...) + xid = xid.toLowerCase(); + + if(xid && (xid.indexOf('@') == -1)) { + // Groupchat + if(type == 'groupchat') + return xid + '@' + HOST_MUC; + + // One-to-one chat + if(xid.indexOf('.') == -1) + return xid + '@' + HOST_MAIN; + + // It might be a gateway? + return xid; + } + + // 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); + } + + }; + + + /** + * 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)) + '@' + 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 + * @return {string} + */ + self.getXIDNick = function(aXID) { + + try { + // 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 full 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); + } + + }; + + + /** + * 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); + } + + }; + + + /** + * 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 for a regex usage + * @public + * @param {string} query + * @return {string} + */ + self.escapeRegex = function(query) { + + try { + return query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + } catch(e) { + Console.error('Common.escapeRegex', e); + } + + }; + + + /** + * 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; \ No newline at end of file diff --git a/source/app/javascripts/connection.js b/source/app/javascripts/connection.js new file mode 100644 index 0000000..4759ccf --- /dev/null +++ b/source/app/javascripts/connection.js @@ -0,0 +1,926 @@ +/* + +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; + + + /** + * 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 + oExtend = 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, oExtend); + + // Generate a resource + var random_resource = DataStore.getDB(self.desktop_hash, 'session', 'resource'); + + if(!random_resource) { + random_resource = lResource + ' (' + (new Date()).getTime() + ')'; + } + + // We retrieve what the user typed in the login inputs + oArgs = {}; + oArgs.domain = $.trim(lServer); + oArgs.username = $.trim(lNick); + oArgs.resource = random_resource; + oArgs.pass = lPass; + oArgs.secure = true; + oArgs.xmllang = XML_LANG; + + self.desktop_hash = 'jd.' + hex_md5(oArgs.username + '@' + oArgs.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(oArgs); + + // 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) { + // 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') { + 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, ''); + } + }); + } else { + try { + oArgs = {}; + + 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); + + // We retrieve what the user typed in the register inputs + oArgs = {}; + oArgs.domain = $.trim(domain); + oArgs.username = $.trim(username); + oArgs.resource = JAPPIX_RESOURCE + ' Register (' + (new Date()).getTime() + ')'; + oArgs.pass = pass; + oArgs.register = true; + oArgs.secure = true; + oArgs.xmllang = XML_LANG; + + con.connect(oArgs); + + // Show the waiting image + Interface.showGeneralWait(); + + // Change the page title + Interface.title('wait'); + } + + catch(e) { + // Logs errors + Console.error('doRegister', e); + } + } + } 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 aPath = '#home .anonymouser '; + var room = $(aPath + '.room').val(); + var nick = $(aPath + '.nick').val(); + + // If the form is 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; + } + + // We check if the form is entirely completed + else { + $(aPath + 'input[type="text"]').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('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 Jingle + Jingle.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.'); + + // 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} oExtend + * @return {undefined} + */ + self.setupCon = function(con, oExtend) { + + try { + // Setup connection handlers + con.registerHandler('message', Message.handle); + con.registerHandler('presence', Presence.handle); + con.registerHandler('iq', IQ.handle); + con.registerHandler('onconnect', self.handleConnected); + con.registerHandler('onerror', Errors.handle); + con.registerHandler('ondisconnect', self.handleDisconnected); + + // Extended handlers + oExtend = oExtend || {}; + + jQuery.each(oExtend, 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); + + // Click events + if(mode == 'normal') + $('#reconnect a.finish.cancel').click(function() { + return self.cancelReconnect(); + }); + + $('#reconnect a.finish.reconnect').click(function() { + return self.acceptReconnect(mode); + }); + + // 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--; + }); + + // 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"]'; + $(groupchats + ' .list .role').hide(); + $(groupchats + ' .one-group, ' + groupchats + ' .list .user').remove(); + $(groupchats).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...'); + } + + // Not connected, maybe a XMPP link is submitted? + 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 new file mode 100644 index 0000000..d645e54 --- /dev/null +++ b/source/app/javascripts/console.js @@ -0,0 +1,66 @@ +// 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 new file mode 100644 index 0000000..af14683 --- /dev/null +++ b/source/app/javascripts/constants.js @@ -0,0 +1,231 @@ +/* + +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_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/dataform.js b/source/app/javascripts/dataform.js new file mode 100644 index 0000000..7e0d74c --- /dev/null +++ b/source/app/javascripts/dataform.js @@ -0,0 +1,1160 @@ +/* + +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 new file mode 100644 index 0000000..e56daea --- /dev/null +++ b/source/app/javascripts/datastore.js @@ -0,0 +1,502 @@ +/* + +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 new file mode 100644 index 0000000..44e2ebd --- /dev/null +++ b/source/app/javascripts/date.js @@ -0,0 +1,402 @@ +/* + +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 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 the time for XMPP + * @public + * @param {string} location + * @return {string} + */ + self.getXMPPTime = function(location) { + + /* FROM : http://trac.jwchat.org/jsjac/browser/branches/jsjac_1.0/jsextras.js?rev=221 */ + + try { + // Initialize + var jInit = new Date(); + var year, month, day, hours, minutes, seconds; + + // Gets the UTC date + if(location == 'utc') { + year = jInit.getUTCFullYear(); + month = jInit.getUTCMonth(); + day = jInit.getUTCDate(); + hours = jInit.getUTCHours(); + minutes = jInit.getUTCMinutes(); + seconds = jInit.getUTCSeconds(); + } + + // Gets the local date + else { + year = jInit.getFullYear(); + month = jInit.getMonth(); + day = jInit.getDate(); + hours = jInit.getHours(); + minutes = jInit.getMinutes(); + seconds = jInit.getSeconds(); + } + + // Generates the date string + var jDate = year + '-'; + jDate += Common.padZero(month + 1) + '-'; + jDate += Common.padZero(day) + 'T'; + jDate += Common.padZero(hours) + ':'; + jDate += Common.padZero(minutes) + ':'; + jDate += Common.padZero(seconds) + 'Z'; + + // Returns the date string + return jDate; + } 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 + * @return {string} + */ + self.readMessageDelay = function(node) { + + try { + // Initialize + var delay, d_delay; + + // Read the delay + d_delay = jQuery(node).find('delay[xmlns="' + NS_URN_DELAY + '"]:first').attr('stamp'); + + // New delay (valid XEP) + if(d_delay) + delay = d_delay; + + // Old delay (obsolete XEP!) + else { + // Try to read the old-school delay + 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 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 new file mode 100644 index 0000000..77f4986 --- /dev/null +++ b/source/app/javascripts/datejs.js @@ -0,0 +1,104 @@ +/** + * 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 new file mode 100644 index 0000000..a74530d --- /dev/null +++ b/source/app/javascripts/discovery.js @@ -0,0 +1,240 @@ +/* + +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 new file mode 100644 index 0000000..90a387a --- /dev/null +++ b/source/app/javascripts/errors.js @@ -0,0 +1,206 @@ +/* + +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 new file mode 100644 index 0000000..36d63ec --- /dev/null +++ b/source/app/javascripts/favorites.js @@ -0,0 +1,719 @@ +/* + +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 = '#favorites '; + + $(path + '.wait, ' + path + '.fedit-terminate').hide(); + $(path + '.fedit-add').show(); + $(path + '.fsearch-oneresult').remove(); + $(path + 'input').val(''); + $(path + '.please-complete').removeClass('please-complete'); + $(path + '.fedit-nick').val(Name.getNick()); + $(path + '.fsearch-head-server, ' + path + '.fedit-server').val(HOST_MUC); + $(path + '.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} roomXID + * @param {string} roomName + * @return {boolean} + */ + self.addThis = function(roomXID, roomName) { + + try { + // Button path + var button = '#favorites .fsearch-results div[data-xid="' + escape(roomXID) + '"] a.one-button'; + + // Add a remove button instead of the add one + $(button + '.add').replaceWith('' + Common._e("Remove") + ''); + + // Click event + $(button + '.remove').click(function() { + return self.removeThis(roomXID, roomName); + }); + + // Hide the add button in the (opened?) groupchat + $('#' + hex_md5(roomXID) + ' .tools-add').hide(); + + // Add the database entry + self.display(roomXID, Common.explodeThis(' (', roomName, 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} roomXID + * @param {string} roomName + * @return {boolean} + */ + self.removeThis = function(roomXID, roomName) { + + try { + // Button path + var button = '#favorites .fsearch-results div[data-xid="' + escape(roomXID) + '"] a.one-button'; + + // Add a remove button instead of the add one + $(button + '.remove').replaceWith('' + Common._e("Add") + ''); + + // Click event + $(button + '.add').click(function() { + return self.addThis(roomXID, roomName); + }); + + // Show the add button in the (opened?) groupchat + $('#' + hex_md5(roomXID) + ' .tools-add').show(); + + // Remove the favorite + self.remove(roomXID, 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 = '#favorites .'; + + // Reset the favorites + self.reset(); + + // Show the edit/remove button, hide the others + $(favorites + 'fedit-terminate').hide(); + $(favorites + 'fedit-edit').show(); + $(favorites + 'fedit-remove').show(); + + // We retrieve the values + var xid = $(favorites + 'fedit-head-select').val(); + var data = Common.XMLFromString(DataStore.getDB(Connection.desktop_hash, 'favorites', xid)); + + // If this is not the default room + if(xid != 'none') { + // We apply the values + $(favorites + 'fedit-title').val($(data).find('name').text()); + $(favorites + 'fedit-nick').val($(data).find('nick').text()); + $(favorites + 'fedit-chan').val(Common.getXIDNick(xid)); + $(favorites + 'fedit-server').val(Common.getXIDHost(xid)); + $(favorites + 'fedit-password').val($(data).find('password').text()); + + if($(data).find('autojoin').text() == 'true') + $(favorites + '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 = '#favorites '; + + // We get the values of the current edited groupchat + var old_xid = $(favorites + '.fedit-head-select').val(); + + var title = $(favorites + '.fedit-title').val(); + var nick = $(favorites + '.fedit-nick').val(); + var room = $(favorites + '.fedit-chan').val(); + var server = $(favorites + '.fedit-server').val(); + var xid = room + '@' + server; + var password = $(favorites + '.fedit-password').val(); + var autojoin = 'false'; + + if($(favorites + '.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 + 'input[required]').each(function() { + var select = $(this); + + if(!select.val()) + $(document).oneTime(10, function() { + select.addClass('please-complete').focus(); + }); + else + select.removeClass('please-complete'); + }); + } + } + + // Must remove a favorite? + 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); + } + + }; + + + /** + * 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 = Common.XMLFromString(DataStore.storageDB.getItem(current)); + var xid = $(data).find('xid').text(); + var rName = $(data).find('name').text(); + var nick = $(data).find('nick').text(); + var password = $(data).find('password').text(); + var autojoin = $(data).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 = '#favorites .'; + var gcServer = $('.fsearch-head-server').val(); + + // We reset some things + $(path + 'fsearch-oneresult').remove(); + $(path + 'fsearch-noresults').hide(); + $(path + 'wait').show(); + + var iq = new JSJaCIQ(); + iq.setType('get'); + iq.setTo(gcServer); + + 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 = '#favorites .'; + var from = Common.fullXID(Common.getStanzaFrom(iq)); + + if(!iq || (iq.getType() != 'result')) { + Board.openThisError(3); + + $(path + '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 roomXID = $(this).attr('jid'); + var roomName = $(this).attr('name'); + + if(roomXID && roomName) { + // Escaped values + var escaped_xid = Utils.encodeOnclick(roomXID); + var escaped_name = Utils.encodeOnclick(roomName); + + // Initialize the room HTML + html += '
' + + '
' + roomName.htmlEnc() + '
' + + '' + Common._e("Join") + ''; + + // This room is yet a favorite + if(DataStore.existDB('favorites', roomXID)) + html += '' + Common._e("Remove") + ''; + else + html += '' + Common._e("Add") + ''; + + // Close the room HTML + html += '
'; + } + }); + + // Append this code to the popup + $(path + 'fsearch-results').append(html); + } + + else + $(path + 'fsearch-noresults').show(); + + Console.info('Rooms retrieved: ' + from); + } + + $(path + '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 path = '#favorites .'; + + // Keyboard events + $(path + 'fsearch-head-server').keyup(function(e) { + if(e.keyCode == 13) { + // No value? + if(!$(this).val()) + $(this).val(HOST_MUC); + + // Get the list + self.getGCList(); + } + }); + + $(path + 'fedit-line input').keyup(function(e) { + if(e.keyCode == 13) { + // Edit a favorite + if($(path + 'fedit-edit').is(':visible')) + terminateThis('edit'); + + // Add a favorite + else + terminateThis('add'); + } + }); + + // Change events + $('.fedit-head-select').change(self.edit); + + // Click events + $(path + 'room-switcher').click(function() { + $(path + 'favorites-content').hide(); + self.reset(); + }); + + $(path + 'room-list').click(function() { + $(path + 'favorites-edit').show(); + }); + + $(path + 'room-search').click(function() { + $(path + 'favorites-search').show(); + self.getGCList(); + }); + + $(path + 'fedit-add').click(function() { + return terminateThis('add'); + }); + + $(path + 'fedit-edit').click(function() { + return terminateThis('edit'); + }); + + $(path + 'fedit-remove').click(function() { + return terminateThis('remove'); + }); + + $(path + '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 new file mode 100644 index 0000000..3853e7a --- /dev/null +++ b/source/app/javascripts/features.js @@ -0,0 +1,370 @@ +/* + +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 = {}; + + + /** + * 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]; + + var cur_feature; + var features = { + // This weird selector fixes the same IE8 bug as above... + 'pep': (selector.find('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); + } + }); + + // 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(); + } + + // 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); + } + + }; + + + /** + * 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 new file mode 100644 index 0000000..6813a33 --- /dev/null +++ b/source/app/javascripts/filter.js @@ -0,0 +1,250 @@ +/* + +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 = {}; + + + /** + * 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} neutralMessage + * @param {string} nick + * @param {string} html_escape + * @return {string} + */ + self.message = function(neutralMessage, nick, html_escape) { + + try { + var filteredMessage = neutralMessage; + + // We encode the HTML special chars + if(html_escape) + filteredMessage = filteredMessage.htmlEnc(); + + // /me command + filteredMessage = filteredMessage.replace(/((^)|((.+)(>)))(\/me )([^<]+)/, nick + ' $7') + + // We replace the smilies text into images + .replace(/(:-?@)($|\s|<)/gi, self.emoteImage('angry', '$1', '$2')) + .replace(/(:-?\[)($|\s|<)/gi, self.emoteImage('bat', '$1', '$2')) + .replace(/(\(B\))($|\s|<)/g, self.emoteImage('beer', '$1', '$2')) + .replace(/((:-?D)|(XD))($|\s|<)/gi, self.emoteImage('biggrin', '$1', '$4')) + .replace(/(:-?\$)($|\s|<)/gi, self.emoteImage('blush', '$1', '$2')) + .replace(/(\(Z\))($|\s|<)/g, self.emoteImage('boy', '$1', '$2')) + .replace(/(\(W\))($|\s|<)/g, self.emoteImage('brflower', '$1', '$2')) + .replace(/((<\/3)|(\(U\)))($|\s|<)/g, self.emoteImage('brheart', '$1', '$4')) + .replace(/(\(C\))($|\s|<)/g, self.emoteImage('coffee', '$1', '$2')) + .replace(/((8-\))|(\(H\)))($|\s|<)/g, self.emoteImage('coolglasses', '$1', '$4')) + .replace(/(:'-?\()($|\s|<)/gi, self.emoteImage('cry', '$1', '$2')) + .replace(/(\(%\))($|\s|<)/g, self.emoteImage('cuffs', '$1', '$2')) + .replace(/(\]:-?>)($|\s|<)/gi, self.emoteImage('devil', '$1', '$2')) + .replace(/(\(D\))($|\s|<)/g, self.emoteImage('drink', '$1', '$2')) + .replace(/(@}->--)($|\s|<)/gi, self.emoteImage('flower', '$1', '$2')) + .replace(/((:-?\/)|(:-?S))($|\s|<)/gi, self.emoteImage('frowning', '$1', '$4')) + .replace(/(\(X\))($|\s|<)/g, self.emoteImage('girl', '$1', '$2')) + .replace(/((<3)|(\(L\)))($|\s|<)/g, self.emoteImage('heart', '$1', '$4')) + .replace(/(\(}\))($|\s|<)/g, self.emoteImage('hugleft', '$1', '$2')) + .replace(/(\({\))($|\s|<)/g, self.emoteImage('hugright', '$1', '$2')) + .replace(/(:-?{})($|\s|<)/gi, self.emoteImage('kiss', '$1', '$2')) + .replace(/(\(I\))($|\s|<)/g, self.emoteImage('lamp', '$1', '$2')) + .replace(/(:-?3)($|\s|<)/gi, self.emoteImage('lion', '$1', '$2')) + .replace(/(\(E\))($|\s|<)/g, self.emoteImage('mail', '$1', '$2')) + .replace(/(\(S\))($|\s|<)/g, self.emoteImage('moon', '$1', '$2')) + .replace(/(\(8\))($|\s|<)/g, self.emoteImage('music', '$1', '$2')) + .replace(/((=-?O)|(:-?O))($|\s|<)/gi, self.emoteImage('oh', '$1', '$4')) + .replace(/(\(T\))($|\s|<)/g, self.emoteImage('phone', '$1', '$2')) + .replace(/(\(P\))($|\s|<)/g, self.emoteImage('photo', '$1', '$2')) + .replace(/(:-?!)($|\s|<)/gi, self.emoteImage('puke', '$1', '$2')) + .replace(/(\(@\))($|\s|<)/g, self.emoteImage('pussy', '$1', '$2')) + .replace(/(\(R\))($|\s|<)/g, self.emoteImage('rainbow', '$1', '$2')) + .replace(/(:-?\))($|\s|<)/gi, self.emoteImage('smile', '$1', '$2')) + .replace(/(\(\*\))($|\s|<)/g, self.emoteImage('star', '$1', '$2')) + .replace(/(:-?\|)($|\s|<)/gi, self.emoteImage('stare', '$1', '$2')) + .replace(/(\(N\))($|\s|<)/g, self.emoteImage('thumbdown', '$1', '$2')) + .replace(/(\(Y\))($|\s|<)/g, self.emoteImage('thumbup', '$1', '$2')) + .replace(/(:-?P)($|\s|<)/gi, self.emoteImage('tongue', '$1', '$2')) + .replace(/(:-?\()($|\s|<)/gi, self.emoteImage('unhappy', '$1', '$2')) + .replace(/(;-?\))($|\s|<)/gi, self.emoteImage('wink', '$1', '$2')) + + // Text in bold + .replace(/(^|\s|>|\()((\*)([^<>'"\*]+)(\*))($|\s|<|\))/gi, '$1$2$6') + + // Italic text + .replace(/(^|\s|>|\()((\/)([^<>'"\/]+)(\/))($|\s|<|\))/gi, '$1$2$6') + + // Underlined text + .replace(/(^|\s|>|\()((_)([^<>'"_]+)(_))($|\s|<|\))/gi, '$1$2$6'); + + // Add the links + if(html_escape) { + filteredMessage = Links.apply(filteredMessage, 'desktop'); + } + + // Filter integratebox links + filteredMessage = IntegrateBox.filter(filteredMessage); + + return filteredMessage; + } catch(e) { + Console.error('Filter.message', e); + } + + }; + + + /** + * Filters a xHTML message to be displayed in Jappix + * @public + * @param {string} code + * @return {string} + */ + self.xhtml = function(code) { + + try { + // Allowed elements array + var elements = new Array( + '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' + ); + + // Allowed attributes array + var attributes = new Array( + 'accesskey', + 'alt', + 'charset', + 'cite', + 'class', + 'height', + 'href', + 'hreflang', + 'id', + 'longdesc', + 'profile', + 'rel', + 'rev', + 'src', + 'style', + 'tabindex', + 'title', + 'type', + 'uri', + 'version', + 'width', + 'xml:lang', + 'xmlns' + ); + + // Check if Filter for XHTML-IM images is enabled + if(DataStore.getDB(Connection.desktop_hash, 'options', 'no-xhtml-images') != '1') { + elements.push("img"); + } + + // Remove forbidden elements + $(code).find('html body *').each(function() { + // This element is not authorized + if(!Utils.existArrayValue(elements, (this).nodeName.toLowerCase())) + $(this).remove(); + }); + + // Remove forbidden attributes + $(code).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(attributes, cName.toLowerCase()) || ((cVal.toLowerCase()).match(/(^|"|')javascript:/))) + cSelector.removeAttr(cName); + }); + }); + + // Filter some other elements + $(code).find('a').attr('target', '_blank'); + + return $(code).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 new file mode 100644 index 0000000..59fd310 --- /dev/null +++ b/source/app/javascripts/groupchat.js @@ -0,0 +1,680 @@ +/* + +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 */ + var JOIN_SUGGEST = []; + + + /** + * 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); + + // No ID: must fix M-Link bug + if(presence.getID() === null) { + presence.setID(1); + } + + 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); + + // 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('favorites', room)) + $('#' + hash + ' .tools-add').show(); + + // The event handlers + var inputDetect = $('#' + hash + ' .message-area'); + + // Focus event + inputDetect.focus(function() { + // Clean notifications for this chat + Interface.chanCleanNotify(hash); + + // Store focus on this chat! + Interface.chat_focus_hash = hash; + }); + + // Blur event + inputDetect.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); + }); + + // Lock to the input + inputDetect.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) + inputDetect.val(inputDetect.val() + '\n'); + + // Send the message + else { + Message.send(hash, 'groupchat'); + + // Reset the composing database entry + DataStore.setDB(Connection.desktop_hash, 'chatstate', room, 'off'); + } + + return false; + } + + // 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); + } + }); + + // Chatstate events + ChatState.events(inputDetect, 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(!JOIN_SUGGEST) + return; + + // Join the chats + if(JOIN_SUGGEST.length) { + for(var g in JOIN_SUGGEST) { + Chat.checkCreate(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); + + // Click events + $('#suggest .content a.one').click(function() { + // Add/remove the active class + $(this).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() { + // Disabled? + if($(this).hasClass('disabled')) { + return false; + } + + // Store groupchats to join? + if($(this).is('.continue')) { + $('#suggest .content a.one.active').each(function() { + JOIN_SUGGEST.push($(this).attr('data-xid')); + }); + } + + // Switch to talk UI + $('#suggest').remove(); + Connection.triggerConnected(); + + return false; + }); + } else { + 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.warning('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); + } + + }; + + + /** + * Return class scope + */ + return self; + +})(); \ No newline at end of file diff --git a/source/app/javascripts/home.js b/source/app/javascripts/home.js new file mode 100644 index 0000000..024fff5 --- /dev/null +++ b/source/app/javascripts/home.js @@ -0,0 +1,476 @@ +/* + +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 = {}; + + + /** + * 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)) { + // Append it! + $(right + '.homediv.default').after('
' + code + '
'); + + // Create the attached events + switch(div) { + // Login tool + case 'loginer': + $(current + ' a.to-anonymous').click(function() { + return self.change('anonymouser'); + }); + + $(current + ' a.advanced').click(self.showAdvanced); + $(current + ' form').submit(self.loginForm); + + break; + + // Anonymous login tool + case 'anonymouser': + $(current + ' a.to-home').click(function() { + return self.change('loginer'); + }); + + $(current + ' form').submit(Connection.doAnonymous); + + // Keyup event on anonymous join's room input + $(current + ' input.room').keyup(function() { + var value = $(this).val(); + var report = current + ' .report'; + var span = report + ' span'; + + if(!value) { + $(report).hide(); + $(span).text(''); + } + + else { + $(report).show(); + $(span).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 + ' form').submit(self.registerForm); + + break; + } + } + + // 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 lPath = '#home .loginer '; + var lServer = $(lPath + '.server').val(); + var lNick = Common.nodeprep($(lPath + '.nick').val()); + var lPass = $(lPath + '.password').val(); + var lResource = $(lPath + '.resource').val(); + var lPriority = $(lPath + '.priority').val(); + var lRemember = $(lPath + '.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 rPath = '#home .registerer '; + + // Remove the success info + $(rPath + '.success').remove(); + + // Get the values + var username = Common.nodeprep($(rPath + '.nick').val()); + var domain = $(rPath + '.server').val(); + var pass = $(rPath + '.password').val(); + var spass = $(rPath + '.spassword').val(); + var captcha = $(rPath + '.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 { + $(rPath + 'input[type="text"], ' + rPath + '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