Alice

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

META.yml
MYMETA.yml
share/buffer.db
share/buffer.sql
share/static/alice-dark.css
share/static/alice-default.css
share/static/alice-solarized.css
share/static/alice.js
share/static/beep.mp3
share/static/favicon.ico
share/static/image/alice.png
share/static/image/aquaTabClose.png
share/static/image/arrow.png
share/static/image/background-self.png
share/static/image/background.png
share/static/image/config.png
share/static/image/external.png
share/static/image/formatting.png
share/static/image/loading.gif
share/static/image/logo.png
share/static/image/logo2x.png
share/static/image/logo2x.txt
share/static/image/overflow-active.png
share/static/image/overflow.png
share/static/image/pause.png
share/static/image/play.png
share/static/image/privateChatTab.png
share/static/image/privateChatTabNewMessage.png
share/static/image/roomTab.png
share/static/image/roomTabDisabled.png
share/static/image/roomTabNewHighlightMessage.png
share/static/image/roomTabNewMessage.png
share/static/image/shadow-bottom.png
share/static/image/shadow-top.png
share/static/image/slider-right.png
share/static/image/slider.png
share/static/image/smartTranscriptTab.png
share/static/image/smartTranscriptTabActivity.png
share/static/image/speech.png
share/static/image/sprites.png
share/static/image/terminal.png
share/static/WebSocketMain.swf
share/templates/alice_menu.html
share/templates/avatargrid.html
share/templates/config.html
share/templates/event.html
share/templates/help.html
share/templates/index_footer.html
share/templates/index_head.html
share/templates/join.html
share/templates/login.html

lib/Alice/IRC.pm  view on Meta::CPAN


use AnyEvent;
use AnyEvent::IRC::Client;
use AnyEvent::IRC::Util qw/parse_irc_msg/;
use List::MoreUtils qw/any/;
use Digest::MD5 qw/md5_hex/;
use Any::Moose;
use Encode;

my $email_re = qr/([^<\s]+@[^\s>]+\.[^\s>]+)/;
my $image_re = qr/(https?:\/\/\S+(?:jpe?g|png|gif))/i;

{
  no warnings;

  # YUCK!!!
  *AnyEvent::IRC::Connection::_feed_irc_data = sub {
    my ($self, $line) = @_;
    my $m = parse_irc_msg (decode ("utf8", $line));
    $self->event (read => $m);
    $self->event ('irc_*' => $m);

share/static/alice-dark.css  view on Meta::CPAN

  width: 24px;
  height: 24px;
  z-index: 905; }

div#join_button {
  position: absolute;
  bottom: 0px;
  right: 12px;
  width: 24px;
  height: 24px;
  background: url(image/sprites.png) -32px -36px no-repeat;
  cursor: pointer; }

div#join_button:hover {
  background: url(image/sprites.png) -32px -56px no-repeat; }

div#tab_bar div#tabset_dropdown {
  position: absolute;
  bottom: 0px;
  left: 0px;
  background: url(image/sprites.png) -29px 4px no-repeat;
  opacity: 1;
  cursor: pointer; }

div#tab_bar div#tabset_dropdown:hover {
  background: url(image/sprites.png) -29px -16px no-repeat; }

div#tab_bar .dropdown.active {
  opacity: 1;
  cursor: pointer; }

div#tab_menu_left {
  position: absolute;
  left: 24px;
  bottom: 0px;
  border-right: 1px solid #222222; }

share/static/alice-dark.css  view on Meta::CPAN


div#tab_menu_right ul {
  right: -1px;
  left: auto; }

.dropdown li.selectedset,
.dropdown li.unread {
  font-weight: bold; }

.tab_menu.active {
  background: url(image/sprites.png) 4px -275px no-repeat; }

#tab_menu_left.tab_menu.active {
  background: url(image/sprites.png) -29px -275px no-repeat; }

.tab_menu:hover,
.tab_menu.open {
  background: url(image/sprites.png) 4px -175px no-repeat; }

#tab_menu_left.tab_menu:hover,
#tab_menu_left.tab_menu.open {
  background: url(image/sprites.png) -29px -175px no-repeat; }

.tab_menu.unread {
  background: url(image/sprites.png) 4px -195px no-repeat; }

#tab_menu_left.tab_menu.unread {
  background: url(image/sprites.png) -29px -195px no-repeat; }

.tab_menu.highlight {
  background: url(image/sprites.png) 4px -236px no-repeat; }

#tab_menu_left.tab_menu.highlight {
  background: url(image/sprites.png) -29px -236px no-repeat; }

div#config_menu {
  top: 0px;
  left: 0px;
  height: 17px;
  border: #fff;
  border: 1px solid #999999;
  border-bottom: 1px solid #333333;
  border-right: 1px solid #333333;
  cursor: pointer;
  position: absolute;
  z-index: 902;
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAaCAYAAAADiYpyAAADG0lEQVRYw+2ZS0hVURSGr9qVBipGDysaZUIRRQ9u70FlgwYZFTRp0ItIgqKixEERBE2i6A1FWUjSKKGoBiVZEEnRw8oKa9KLoIcQZWqW5teg/8DicM6596gHruiBhey19tp7r+/svfY61xgQGxBiAxAiBpEJtLpkRn...
  background-color: #555555;
  background-size: 33px 13px;
  width: 50px; }

div#config_menu > ul {
  margin-left: -1px; }

@media screen and (-webkit-device-pixel-ratio: 2) {
  div#config_menu {
    top: 0px;
    left: 0px;
    height: 17px;
    border: #fff;
    border: 1px solid #999999;
    border-bottom: 1px solid #333333;
    border-right: 1px solid #333333;
    cursor: pointer;
    position: absolute;
    z-index: 902;
    background: url(image/logo2x.png) center center no-repeat;
    -webkit-background-size: 33px 13px;
    background-color: #555555;
    width: 53px; } }
div#config_menu ul ul {
  left: 100%;
  right: auto;
  margin-left: -2px; }

div#config_menu.open,
div#config_menu:hover {

share/static/alice-dark.css  view on Meta::CPAN

  right: 0px; }

div#nicklist_toggle {
  position: absolute;
  text-align: center;
  width: 0px;
  height: 50px;
  margin-top: -25px;
  top: 50%;
  right: 15px;
  background: url(image/slider.png) center center no-repeat;
  background-color: #444444;
  border: 1px solid #222222;
  -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
  -webkit-transition-property: opacity, width;
  -webkit-transition-duration: 0.3s, 0.2s;
  -webkit-transition-timing-function: ease-in-out;
  -moz-transition-property: opacity, width;
  -moz-transition-duration: 0.3s, 0.2s;
  -moz-transition-timing-function: ease-in-out;
  border-radius: 2px;
  color: white;
  font-size: 14px;
  z-index: 902;
  cursor: pointer;
  opacity: 0; }

div#nicklist_toggle:hover {
  background-color: #3a3a3a; }

div#windows.nicklist div#nicklist_toggle {
  background-image: url(image/slider-right.png); }

div#nicklist_toggle.visible,
div#nicklist_toggle:hover,
div#nicklist_toggle:active {
  opacity: 1;
  width: 12px; }

div#windows.nicklist div#nicklist_toggle {
  right: 135px; }

share/static/alice-dark.css  view on Meta::CPAN

  width: 5000px;
  -webkit-transition: left 0.25s ease-in-out;
  -moz-transition: left 0.25s ease-in-out; }

div#tab_bar {
  bottom: 0px;
  left: 0px;
  right: 0px;
  height: 25px;
  position: absolute;
  background: url(image/sprites.png) 0px -300px repeat-x #444444; }

div#tabs_container {
  position: absolute;
  top: 0px;
  bottom: 0px;
  right: 60px;
  left: 48px;
  overflow: hidden; }

ul#tabs li {
  float: left;
  margin: 0;
  margin-left: -1px;
  color: white;
  background: url(image/sprites.png) 0px -300px repeat-x #444444;
  opacity: 1 !important; }

ul#tabs li.hidden {
  display: none; }

ul#tabs li.visible {
  display: block; }

ul#tabs li div.hit_area {
  border: 1px solid #222222;

share/static/alice-dark.css  view on Meta::CPAN

ul#tabs li.active {
  height: 25px;
  z-index: 903;
  background: #444444; }

ul#tabs li.active:hover div.hit_area {
  background: #333333; }

ul#tabs li:hover div.hit_area {
  background: #3a3a3a;
  background: url(image/sprites.png) 0px -300px repeat-x #3a3a3a; }

div#topic {
  position: absolute;
  top: 0px;
  left: 0px;
  right: 0px;
  background: #3a3a3a;
  text-align: center;
  border-top: 1px solid #666666;
  border-bottom: 1px solid #333333;

share/static/alice-dark.css  view on Meta::CPAN

  color: white;
  text-decoration: none; }

div.tab_button {
  width: 16px;
  height: 16px;
  float: left;
  margin-right: 6px; }

li.channel_tab div.tab_button {
  background: url(image/sprites.png) 0px -80px no-repeat; }

li.loading.channel_tab div.tab_button {
  background: url(image/sprites.png) -38px -80px no-repeat; }

li.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0px -120px no-repeat; }

li.loading.privmsg_tab div.tab_button {
  background: url(image/sprites.png) -38px -140px no-repeat; }

li.info_tab div.tab_button {
  background: url(image/sprites.png) 0px 0px no-repeat; }

li.loading.info_tab div.tab_button {
  background: url(image/sprites.png) -39px -160px no-repeat; }

ul#tabs li.disabled.channel_tab div.tab_button:hover,
ul#tabs li.active div.tab_button:hover {
  background: url(image/sprites.png) 1px -260px no-repeat; }

ul#tabs li.unread.channel_tab div.tab_button {
  background: url(image/sprites.png) 0px -20px no-repeat; }

ul#tabs li.highlight.privmsg_tab div.tab_button,
ul#tabs li.unread.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0 -100px no-repeat; }

ul#tabs li.highlight.channel_tab div.tab_button {
  background: url(image/sprites.png) 0 -40px no-repeat; }

ul#tabs li.disabled.channel_tab div.tab_button {
  background: url(image/sprites.png) 0 -60px no-repeat; }

div#help {
  position: absolute;
  z-index: 980;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  left: 20px;
  right: 20px;
  top: 25px;
  bottom: 60px;

share/static/alice-dark.css  view on Meta::CPAN

  bottom: auto; }

.dropdown.bottom > ul ul {
  bottom: -1px;
  top: auto; }

.dropdown li.separate-bottom {
  border-bottom: 1px solid #3a3a3a; }

.dropdown li.submenu {
  background: url(image/arrow.png) center right no-repeat; }

.dropdown li.submenu:hover {
  background: url(image/arrow.png) #3a3a3a center right no-repeat; }

.dropdown > ul li.submenu:hover ul {
  display: block; }

body > div.copybuffer {
  overflow: hidden;
  position: absolute;
  top: -500px;
  height: 1px; }

share/static/alice-default.css  view on Meta::CPAN

  width: 24px;
  height: 24px;
  z-index: 905; }

div#join_button {
  position: absolute;
  bottom: 0px;
  right: 12px;
  width: 24px;
  height: 24px;
  background: url(image/sprites.png) -32px -36px no-repeat;
  cursor: pointer; }

div#join_button:hover {
  background: url(image/sprites.png) -32px -56px no-repeat; }

div#tab_bar div#tabset_dropdown {
  position: absolute;
  bottom: 0px;
  left: 0px;
  background: url(image/sprites.png) -29px 4px no-repeat;
  opacity: 1;
  cursor: pointer; }

div#tab_bar div#tabset_dropdown:hover {
  background: url(image/sprites.png) -29px -16px no-repeat; }

div#tab_bar .dropdown.active {
  opacity: 1;
  cursor: pointer; }

div#tab_menu_left {
  position: absolute;
  left: 24px;
  bottom: 0px;
  border-right: 1px solid #999999; }

share/static/alice-default.css  view on Meta::CPAN


div#tab_menu_right ul {
  right: -1px;
  left: auto; }

.dropdown li.selectedset,
.dropdown li.unread {
  font-weight: bold; }

.tab_menu.active {
  background: url(image/sprites.png) 4px -275px no-repeat; }

#tab_menu_left.tab_menu.active {
  background: url(image/sprites.png) -29px -275px no-repeat; }

.tab_menu:hover,
.tab_menu.open {
  background: url(image/sprites.png) 4px -175px no-repeat; }

#tab_menu_left.tab_menu:hover,
#tab_menu_left.tab_menu.open {
  background: url(image/sprites.png) -29px -175px no-repeat; }

.tab_menu.unread {
  background: url(image/sprites.png) 4px -195px no-repeat; }

#tab_menu_left.tab_menu.unread {
  background: url(image/sprites.png) -29px -195px no-repeat; }

.tab_menu.highlight {
  background: url(image/sprites.png) 4px -236px no-repeat; }

#tab_menu_left.tab_menu.highlight {
  background: url(image/sprites.png) -29px -236px no-repeat; }

div#config_menu {
  top: 0px;
  left: 0px;
  height: 17px;
  border: #fff;
  border: 1px solid #cccccc;
  border-bottom: 1px solid #555555;
  border-right: 1px solid #555555;
  cursor: pointer;
  position: absolute;
  z-index: 902;
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAaCAYAAAADiYpyAAADG0lEQVRYw+2ZS0hVURSGr9qVBipGDysaZUIRRQ9u70FlgwYZFTRp0ItIgqKixEERBE2i6A1FWUjSKKGoBiVZEEnRw8oKa9KLoIcQZWqW5teg/8DicM6596gHruiBhey19tp7r+/svfY61xgQGxBiAxAiBpEJtLpkRn...
  background-color: #999999;
  background-size: 33px 13px;
  width: 50px; }

div#config_menu > ul {
  margin-left: -1px; }

@media screen and (-webkit-device-pixel-ratio: 2) {
  div#config_menu {
    top: 0px;
    left: 0px;
    height: 17px;
    border: #fff;
    border: 1px solid #cccccc;
    border-bottom: 1px solid #555555;
    border-right: 1px solid #555555;
    cursor: pointer;
    position: absolute;
    z-index: 902;
    background: url(image/logo2x.png) center center no-repeat;
    -webkit-background-size: 33px 13px;
    background-color: #999999;
    width: 53px; } }
div#config_menu ul ul {
  left: 100%;
  right: auto;
  margin-left: -2px; }

div#config_menu.open,
div#config_menu:hover {

share/static/alice-default.css  view on Meta::CPAN

  right: 0px; }

div#nicklist_toggle {
  position: absolute;
  text-align: center;
  width: 0px;
  height: 50px;
  margin-top: -25px;
  top: 50%;
  right: 15px;
  background: url(image/slider.png) center center no-repeat;
  background-color: #dddddd;
  border: 1px solid #999999;
  -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
  -webkit-transition-property: opacity, width;
  -webkit-transition-duration: 0.3s, 0.2s;
  -webkit-transition-timing-function: ease-in-out;
  -moz-transition-property: opacity, width;
  -moz-transition-duration: 0.3s, 0.2s;
  -moz-transition-timing-function: ease-in-out;
  border-radius: 2px;
  color: #222222;
  font-size: 14px;
  z-index: 902;
  cursor: pointer;
  opacity: 0; }

div#nicklist_toggle:hover {
  background-color: #cccccc; }

div#windows.nicklist div#nicklist_toggle {
  background-image: url(image/slider-right.png); }

div#nicklist_toggle.visible,
div#nicklist_toggle:hover,
div#nicklist_toggle:active {
  opacity: 1;
  width: 12px; }

div#windows.nicklist div#nicklist_toggle {
  right: 135px; }

share/static/alice-default.css  view on Meta::CPAN

  width: 5000px;
  -webkit-transition: left 0.25s ease-in-out;
  -moz-transition: left 0.25s ease-in-out; }

div#tab_bar {
  bottom: 0px;
  left: 0px;
  right: 0px;
  height: 25px;
  position: absolute;
  background: url(image/sprites.png) 0px -300px repeat-x #dddddd; }

div#tabs_container {
  position: absolute;
  top: 0px;
  bottom: 0px;
  right: 60px;
  left: 48px;
  overflow: hidden; }

ul#tabs li {
  float: left;
  margin: 0;
  margin-left: -1px;
  color: #222222;
  background: url(image/sprites.png) 0px -300px repeat-x #dddddd;
  opacity: 1 !important; }

ul#tabs li.hidden {
  display: none; }

ul#tabs li.visible {
  display: block; }

ul#tabs li div.hit_area {
  border: 1px solid #999999;

share/static/alice-default.css  view on Meta::CPAN

ul#tabs li.active {
  height: 25px;
  z-index: 903;
  background: #dddddd; }

ul#tabs li.active:hover div.hit_area {
  background: #efefef; }

ul#tabs li:hover div.hit_area {
  background: #cccccc;
  background: url(image/sprites.png) 0px -300px repeat-x #cccccc; }

div#topic {
  position: absolute;
  top: 0px;
  left: 0px;
  right: 0px;
  background: #efefef;
  text-align: center;
  border-top: 1px solid white;
  border-bottom: 1px solid #aaaaaa;

share/static/alice-default.css  view on Meta::CPAN

  color: black;
  text-decoration: none; }

div.tab_button {
  width: 16px;
  height: 16px;
  float: left;
  margin-right: 6px; }

li.channel_tab div.tab_button {
  background: url(image/sprites.png) 0px -80px no-repeat; }

li.loading.channel_tab div.tab_button {
  background: url(image/sprites.png) -38px -80px no-repeat; }

li.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0px -120px no-repeat; }

li.loading.privmsg_tab div.tab_button {
  background: url(image/sprites.png) -38px -140px no-repeat; }

li.info_tab div.tab_button {
  background: url(image/sprites.png) 0px 0px no-repeat; }

li.loading.info_tab div.tab_button {
  background: url(image/sprites.png) -39px -160px no-repeat; }

ul#tabs li.disabled.channel_tab div.tab_button:hover,
ul#tabs li.active div.tab_button:hover {
  background: url(image/sprites.png) 1px -260px no-repeat; }

ul#tabs li.unread.channel_tab div.tab_button {
  background: url(image/sprites.png) 0px -20px no-repeat; }

ul#tabs li.highlight.privmsg_tab div.tab_button,
ul#tabs li.unread.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0 -100px no-repeat; }

ul#tabs li.highlight.channel_tab div.tab_button {
  background: url(image/sprites.png) 0 -40px no-repeat; }

ul#tabs li.disabled.channel_tab div.tab_button {
  background: url(image/sprites.png) 0 -60px no-repeat; }

div#help {
  position: absolute;
  z-index: 980;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  left: 20px;
  right: 20px;
  top: 25px;
  bottom: 60px;

share/static/alice-default.css  view on Meta::CPAN

  bottom: auto; }

.dropdown.bottom > ul ul {
  bottom: -1px;
  top: auto; }

.dropdown li.separate-bottom {
  border-bottom: 1px solid #cccccc; }

.dropdown li.submenu {
  background: url(image/arrow.png) center right no-repeat; }

.dropdown li.submenu:hover {
  background: url(image/arrow.png) #cccccc center right no-repeat; }

.dropdown > ul li.submenu:hover ul {
  display: block; }

body > div.copybuffer {
  overflow: hidden;
  position: absolute;
  top: -500px;
  height: 1px; }

share/static/alice-solarized.css  view on Meta::CPAN

  width: 24px;
  height: 24px;
  z-index: 905; }

div#join_button {
  position: absolute;
  bottom: 0px;
  right: 12px;
  width: 24px;
  height: 24px;
  background: url(image/sprites.png) -32px -36px no-repeat;
  cursor: pointer; }

div#join_button:hover {
  background: url(image/sprites.png) -32px -56px no-repeat; }

div#tab_bar div#tabset_dropdown {
  position: absolute;
  bottom: 0px;
  left: 0px;
  background: url(image/sprites.png) -29px 4px no-repeat;
  opacity: 1;
  cursor: pointer; }

div#tab_bar div#tabset_dropdown:hover {
  background: url(image/sprites.png) -29px -16px no-repeat; }

div#tab_bar .dropdown.active {
  opacity: 1;
  cursor: pointer; }

div#tab_menu_left {
  position: absolute;
  left: 24px;
  bottom: 0px;
  border-right: 1px solid #44555a; }

share/static/alice-solarized.css  view on Meta::CPAN


div#tab_menu_right ul {
  right: -1px;
  left: auto; }

.dropdown li.selectedset,
.dropdown li.unread {
  font-weight: bold; }

.tab_menu.active {
  background: url(image/sprites.png) 4px -275px no-repeat; }

#tab_menu_left.tab_menu.active {
  background: url(image/sprites.png) -29px -275px no-repeat; }

.tab_menu:hover,
.tab_menu.open {
  background: url(image/sprites.png) 4px -175px no-repeat; }

#tab_menu_left.tab_menu:hover,
#tab_menu_left.tab_menu.open {
  background: url(image/sprites.png) -29px -175px no-repeat; }

.tab_menu.unread {
  background: url(image/sprites.png) 4px -195px no-repeat; }

#tab_menu_left.tab_menu.unread {
  background: url(image/sprites.png) -29px -195px no-repeat; }

.tab_menu.highlight {
  background: url(image/sprites.png) 4px -236px no-repeat; }

#tab_menu_left.tab_menu.highlight {
  background: url(image/sprites.png) -29px -236px no-repeat; }

div#config_menu {
  top: 0px;
  left: 0px;
  height: 17px;
  border: #fff;
  border: 1px solid #93a1a1;
  border-bottom: 1px solid #002b36;
  border-right: 1px solid #002b36;
  cursor: pointer;
  position: absolute;
  z-index: 902;
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAaCAYAAAADiYpyAAADG0lEQVRYw+2ZS0hVURSGr9qVBipGDysaZUIRRQ9u70FlgwYZFTRp0ItIgqKixEERBE2i6A1FWUjSKKGoBiVZEEnRw8oKa9KLoIcQZWqW5teg/8DicM6596gHruiBhey19tp7r+/svfY61xgQGxBiAxAiBpEJtLpkRn...
  background-color: #657b83;
  background-size: 33px 13px;
  width: 50px; }

div#config_menu > ul {
  margin-left: -1px; }

@media screen and (-webkit-device-pixel-ratio: 2) {
  div#config_menu {
    top: 0px;
    left: 0px;
    height: 17px;
    border: #fff;
    border: 1px solid #93a1a1;
    border-bottom: 1px solid #002b36;
    border-right: 1px solid #002b36;
    cursor: pointer;
    position: absolute;
    z-index: 902;
    background: url(image/logo2x.png) center center no-repeat;
    -webkit-background-size: 33px 13px;
    background-color: #657b83;
    width: 53px; } }
div#config_menu ul ul {
  left: 100%;
  right: auto;
  margin-left: -2px; }

div#config_menu.open,
div#config_menu:hover {

share/static/alice-solarized.css  view on Meta::CPAN

  right: 0px; }

div#nicklist_toggle {
  position: absolute;
  text-align: center;
  width: 0px;
  height: 50px;
  margin-top: -25px;
  top: 50%;
  right: 15px;
  background: url(image/slider.png) center center no-repeat;
  background-color: #586e75;
  border: 1px solid transparent;
  -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
  -webkit-transition-property: opacity, width;
  -webkit-transition-duration: 0.3s, 0.2s;
  -webkit-transition-timing-function: ease-in-out;
  -moz-transition-property: opacity, width;
  -moz-transition-duration: 0.3s, 0.2s;
  -moz-transition-timing-function: ease-in-out;
  border-radius: 2px;
  color: white;
  font-size: 14px;
  z-index: 902;
  cursor: pointer;
  opacity: 0; }

div#nicklist_toggle:hover {
  background-color: #4b5e64; }

div#windows.nicklist div#nicklist_toggle {
  background-image: url(image/slider-right.png); }

div#nicklist_toggle.visible,
div#nicklist_toggle:hover,
div#nicklist_toggle:active {
  opacity: 1;
  width: 12px; }

div#windows.nicklist div#nicklist_toggle {
  right: 135px; }

share/static/alice-solarized.css  view on Meta::CPAN

  width: 5000px;
  -webkit-transition: left 0.25s ease-in-out;
  -moz-transition: left 0.25s ease-in-out; }

div#tab_bar {
  bottom: 0px;
  left: 0px;
  right: 0px;
  height: 25px;
  position: absolute;
  background: url(image/sprites.png) 0px -300px repeat-x #586e75; }

div#tabs_container {
  position: absolute;
  top: 0px;
  bottom: 0px;
  right: 60px;
  left: 48px;
  overflow: hidden; }

ul#tabs li {
  float: left;
  margin: 0;
  margin-left: -1px;
  color: white;
  background: url(image/sprites.png) 0px -300px repeat-x #586e75;
  opacity: 1 !important; }

ul#tabs li.hidden {
  display: none; }

ul#tabs li.visible {
  display: block; }

ul#tabs li div.hit_area {
  border: 1px solid transparent;

share/static/alice-solarized.css  view on Meta::CPAN

ul#tabs li.active {
  height: 25px;
  z-index: 903;
  background: #586e75; }

ul#tabs li.active:hover div.hit_area {
  background: #657b83; }

ul#tabs li:hover div.hit_area {
  background: #4b5e64;
  background: url(image/sprites.png) 0px -300px repeat-x #4b5e64; }

div#topic {
  position: absolute;
  top: 0px;
  left: 0px;
  right: 0px;
  background: #839496;
  text-align: center;
  border-top: 1px solid #93a1a1;
  border-bottom: 1px solid #073642;

share/static/alice-solarized.css  view on Meta::CPAN

  color: #073642;
  text-decoration: none; }

div.tab_button {
  width: 16px;
  height: 16px;
  float: left;
  margin-right: 6px; }

li.channel_tab div.tab_button {
  background: url(image/sprites.png) 0px -80px no-repeat; }

li.loading.channel_tab div.tab_button {
  background: url(image/sprites.png) -38px -80px no-repeat; }

li.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0px -120px no-repeat; }

li.loading.privmsg_tab div.tab_button {
  background: url(image/sprites.png) -38px -140px no-repeat; }

li.info_tab div.tab_button {
  background: url(image/sprites.png) 0px 0px no-repeat; }

li.loading.info_tab div.tab_button {
  background: url(image/sprites.png) -39px -160px no-repeat; }

ul#tabs li.disabled.channel_tab div.tab_button:hover,
ul#tabs li.active div.tab_button:hover {
  background: url(image/sprites.png) 1px -260px no-repeat; }

ul#tabs li.unread.channel_tab div.tab_button {
  background: url(image/sprites.png) 0px -20px no-repeat; }

ul#tabs li.highlight.privmsg_tab div.tab_button,
ul#tabs li.unread.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0 -100px no-repeat; }

ul#tabs li.highlight.channel_tab div.tab_button {
  background: url(image/sprites.png) 0 -40px no-repeat; }

ul#tabs li.disabled.channel_tab div.tab_button {
  background: url(image/sprites.png) 0 -60px no-repeat; }

div#help {
  position: absolute;
  z-index: 980;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  left: 20px;
  right: 20px;
  top: 25px;
  bottom: 60px;

share/static/alice-solarized.css  view on Meta::CPAN

  bottom: auto; }

.dropdown.bottom > ul ul {
  bottom: -1px;
  top: auto; }

.dropdown li.separate-bottom {
  border-bottom: 1px solid #4b5e64; }

.dropdown li.submenu {
  background: url(image/arrow.png) center right no-repeat; }

.dropdown li.submenu:hover {
  background: url(image/arrow.png) #4b5e64 center right no-repeat; }

.dropdown > ul li.submenu:hover ul {
  display: block; }

body > div.copybuffer {
  overflow: hidden;
  position: absolute;
  top: -500px;
  height: 1px; }

share/static/alice.js  view on Meta::CPAN

      });
    }
  }

})();

var Alice = { };

Object.extend(Alice, {
  RE: {
    img: /^http[^\s]*\.(?:jpe?g|gif|png|bmp|svg)[^\/]*$/i,
    audio: /^http[^\s]*\.(?:wav|mp3|ogg|aiff?|m4[ar])[^\/]*$/i,
    url: /(https?:\/\/[^\s<"]*)/ig
  },

  cleanupCopy: function(node) {
    if (!node.select("li.message").length) return;

    var lines = [];
    node.select("li.message").each(function(line) {
      var left = line.down("div.left span.nick");

share/static/alice.js  view on Meta::CPAN

        title: message.subject,
        description: message.body,
        priority: 1,
        sticky: false,
        identifier: message.msgid
      });
    }
    else if (window.webkitNotifications) {
      if (window.webkitNotifications.checkPermission() == 0) {
        var popup = window.webkitNotifications.createNotification(
          "http://static.usealice.org/image/alice.png",
          message.subject,
          message.body
        );

        popup.ondisplay = function() {
          setTimeout(function () {popup.cancel();}, 5000);
        };

        popup.show();
      }

share/static/alice.js  view on Meta::CPAN

  isSpecialKey: function(keyCode) {
    var special_keys = [
			16,27,9,32,13,8,145,20,144,19,45,36,46,35,33,34,37,38,39,
			40,17,18,91,112,113,114,115,116,117,118,119,120,121,122,123,
      224
		];
		return special_keys.indexOf(keyCode) > -1;
  },

  playAudio: function(image, audio) {
    image.src = '/static/image/pause.png';
    if (! audio) {
      var url = image.nextSibling.href;
      audio = new Audio(url);
      audio.addEventListener('ended', function () {
        image.src = '/static/image/play.png';
        image.onclick = function () { Alice.playAudio(image, audio) };
      });
    }
    audio.play();
    image.onclick = function() {
      audio.pause();
      this.src = '/static/image/play.png';
      this.onclick = function () { Alice.playAudio(this, audio) };
    };
  },

  joinChannel: function() {
    var network = $('join_network').value;
    var channel = $('join_channel').value;
    if (!network || !channel) {
      alert("Must select a channel and network!");
      return;

share/static/alice.js  view on Meta::CPAN

      }
    });

    if (alice.isMobile) return;

    alice.addFilters([
      function(msg, win) {
        msg.select("a").filter(function(a) {
          return Alice.RE.audio.match(a.href);
        }).each(function(a) {
          var img = new Element("IMG", {"class": "audio", src: "/static/image/play.png"});
          img.onclick = function(){ Alice.playAudio(img) };
          a.insert({before: img})
        });
      },
      function (msg, win) {
        if (alice.options.images == "show") {
          var matches = msg.select("a").inject(0, function(acc, a) {
            var oembed = alice.oembeds.find(function(service) {
              return service.match(a.href);
            });

share/templates/index_head.html  view on Meta::CPAN

? my ($app, @windows) = @_;
? my $titlewin = @windows > 1 ? $windows[1] : $windows[0];
<!DOCTYPE html>
<html>
  <head>
    <title><?= $titlewin->title ?></title>
    <script type="text/javascript" src="<?= $app->static_url("alice.js") ?>?v=4"></script>
    <link rel="shortcut icon" href="<?= $app->static_url("favicon.ico") ?>">
    <link type="text/css" rel="stylesheet" href="<?= $app->static_url("alice-".$app->config->style.".css") ?>?v=5" />
    <link type="text/css" rel="stylesheet" href="https://noembed.com/noembed.css" />
    <link rel="apple-touch-icon" href="<?= $app->static_url("image/alice.png") ?>" />
    <link rel="apple-touch-startup-image" href="<?= $app->static_url("image/alice.png") ?>" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
  </head>
  <body>
    <img style="position:absolute;top:-100px;left:-100px" src="<?= $app->static_url("image/sprites.png") ?>" />

    <div class="dropdown top" id="config_menu">
      <?= $_mt->render_file("alice_menu.html", $app) ?>
    </div>

    <div id="topic">No topic set.</div>
    <div id="windows" class="compact-scroll">
      <div id="nicklist_toggle"></div>

share/templates/login.html  view on Meta::CPAN

        font-size: 16px;
        margin-bottom: 0;
        margin-top: 30px;
      }
      .error {
        color: #d00b0b;
        display: block;
        margin-top: 15px;
      }
    </style>
    <link rel="apple-touch-icon" href="<?= $app->static_url("image/alice.png") ?>" />
    <link rel="apple-touch-startup-image" href="<?= $app->static_url("image/alice.png") ?>" />
    <meta name="viewport" content="width=device-width; initial-scale=1; maximum-scale=1" />
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
  </head>
  <body>
    <form action="/login" method="post">
      <input type="hidden" name="dest" value="<?= $dest || "/" ?>" />

      <label for="username">User Name:</label>
      <input type="text" name="username" value="" id="username" />



( run in 2.125 seconds using v1.01-cache-2.11-cpan-df04353d9ac )