App-Alice

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

META.yml
share/commands.pl
share/log.db
share/log.sql
share/static/alice-dark.css
share/static/alice-default.css
share/static/alice.js
share/static/favicon.ico
share/static/image/alice.png
share/static/image/aquaTabClose.png
share/static/image/background-self.png
share/static/image/background.png
share/static/image/config.png
share/static/image/formatting.png
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

lib/App/Alice.pod  view on Meta::CPAN

App::Alice - an Altogether Lovely Internet Chatting Experience

=head1 SYNPOSIS

    arthur:~ leedo$ alice
    Location: http://localhost:8080/

=head1 DESCRIPTION

Alice is an IRC client that is viewed in the web browser. Alice
runs in the background maintaining connections and collecting
messages. When a browser connects, it will display the 100 most
recent messages for each channel, and update with any new messages
as they arrive.

Alice also logs messages to an SQLite database. These logs are
searchable through the web interface.

=head1 USAGE

Installation will add a new `alice` command to start the alice

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

  color: white; }

ul#tabs {
  z-index: 20; }

ul#tabs li:hover {
  cursor: default; }

ul#controls {
  z-index: 30;
  background: #444444; }

body.blurred ul#controls {
  background: #333333; }

ul#controls li {
  position: relative; }

select.select_overlay {
  display: block;
  position: absolute;
  top: 0px;
  left: 0px;
  bottom: 0px;

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

  border: none;
  padding: 0;
  margin: 0;
  opacity: 0;
  font-size: 12px; }

select#tab_overflow_overlay option.unread {
  font-weight: bold; }

li#tab_overflow_button {
  background: url(image/sprites.png) 3px -174px no-repeat; }

li#tab_overflow_button.unread {
  background: url(image/sprites.png) 3px -194px no-repeat; }

li#config_button {
  background: url(image/sprites.png) 4px -216px no-repeat; }

body {
  font-family: "Lucida Grande", Helvetica, sans-serif;
  text-rendering: optimizeLegibility;
  background: #222222; }

a:link, a:visited, a:hover, a:active {
  color: white; }

a:hover {
  text-shadow: rgba(255, 255, 255, 0.8) 0 1px 1px; }

div.window {
  position: fixed;
  top: 0px;

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

  bottom: 23px; }

div.window table {
  table-layout: fixed;
  width: 100%;
  height: 100%;
  padding: 0; }

tr.input td {
  height: 20px;
  background: #333333;
  border-bottom: 1px solid #222222;
  border-top: 1px solid #444444; }

body.blurred tr.input td {
  border-bottom: 1px solid #111111; }

tr.input form {
  display: block;
  margin: 0;
  padding: 0;
  height: auto;
  line-height: 0px; }

tr.input div {
  padding: 0 3px;
  background: black;
  margin: 3px 0;
  position: relative; }

tr.input div.editor,
tr.input textarea {
  line-height: 1.2em;
  min-height: 1.2em;
  width: 100%;
  padding: 3px 0;
  border: none;

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

  overflow: hidden;
  position: absolute;
  right: -170px;
  padding-right: 8px;
  top: -3px;
  width: 180px;
  height: 20px;
  -webkit-border-radius: 3px 0 0 3px;
  -moz-border-radius: 3px 0 0 3px;
  border-radius: 3px 0 0 3px;
  background: url(image/sprites.png) 0px -240px no-repeat black;
  z-index: 902;
  opacity: 0.2;
  -webkit-transition-property: right;
  -webkit-transition-duration: 0.3s; }

tr.input div.editor_toolbar button {
  visibility: hidden;
  display: block;
  float: left;
  color: #222222;
  line-height: 10px;
  font-size: 11px;
  margin: 0;
  padding: 4px 3px 5px 3px;
  text-align: center;
  background: none;
  cursor: pointer;
  border: none; }

tr.input div.editor_toolbar button:hover {
  color: black; }

tr.input div.editor_toolbar button.selected {
  color: yellow; }

.bold {

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


tr.input div.editor_toolbar:hover {
  opacity: 0.4;
  cursor: pointer; }

tr.input div.editor_toolbar.visible:hover {
  opacity: 1;
  cursor: inherit; }

tr.input div.editor_toolbar.visible {
  background-color: rgba(255, 255, 255, 0.6);
  background-image: none;
  right: -4px;
  -webkit-transition-property: right;
  -webkit-transition-duration: 0.3s;
  opacity: 1; }

tr.input div.editor_toolbar.visible button {
  visibility: visible; }

div.editor div,
div.editor p,

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


tr.input input.send {
  display: none; }

div#tab_container {
  position: fixed;
  bottom: 0px;
  left: 0px;
  right: 0px;
  height: 23px;
  background: #444444; }

body.blurred div#tab_container {
  background: #333333; }

ul#tabs {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 11px;
  position: relative;
  float: left;
  margin-right: 62px;
  padding-left: 3px; }

body.blurred ul#tabs li {
  background: #333333;
  color: #cccccc; }

ul#tabs li {
  float: left;
  margin: 0;
  margin-left: -1px;
  color: white;
  background: #444444; }

body.blurred ul#tabs li:first-child div.hit_area {
  border-left: 1px solid #333333; }

ul#tabs li:first-child div.hit_area {
  border-left: 1px solid #444444; }

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

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

  border-bottom: none;
  border-top: none; }

body.blurred ul#tabs li.active div.hit_area {
  border: 1px solid #111111;
  border-top: none; }

ul#tabs li.active div.hit_area {
  border: 1px solid #222222;
  border-top: none;
  background: #333333;
  height: 11px;
  padding-top: 3px;
  margin-top: -1px; }

ul#tabs li.active {
  height: 23px;
  z-index: 21; }

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

ul#tabs li:hover div.hit_area {
  background: #3a3a3a; }

ul#controls {
  position: fixed;
  bottom: 0px;
  right: 0px;
  height: 23px;
  margin: 0;
  padding: 0 18px 0 0;
  list-style: none; }

ul#controls li {
  float: right;
  margin: 0;
  padding: 0;
  height: 16px;
  width: 16px;
  padding: 4px 3px 3px 3px;
  cursor: pointer; }

ul#controls li:hover {
  background-color: #3a3a3a; }

tr.topic td {
  width: 100%;
  background: #3a3a3a;
  font-size: 11px;
  text-align: center;
  border-top: 1px solid #666666;
  border-bottom: 1px solid black;
  padding: 1px 0;
  height: 1.2em; }

tr.topic td div.topic {
  height: 1.2em;
  overflow: hidden; }

tr.topic a {
  text-decoration: none; }

div.message_wrap {
  height: 100%;
  overflow-x: hidden;
  overflow-y: auto;
  background: #222222; }

ul.messages {
  list-style: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  margin: 3px 0; }

ul.messages > li {
  font-size: 13px;
  display: block;
  position: relative;
  background-color: #111111; }

ul.messages > li:not(.consecutive) {
  clear: both; }

ul.messages li.highlight {
  border-right: 5px solid #eb2222; }

.info ul.messages li.highlight,
ul.messages li.self {
  background: #111111;
  border-right: none; }

.info ul.messages li.highlight div.msg,
ul.messages li.self div.msg {
  background: #333333; }

ul.messages li div.msg {
  background: #222222; }

ul.messages li.consecutive div.left {
  display: none; }

div.left {
  float: left;
  width: 95px;
  font-weight: bold;
  text-align: right;
  padding: 4px 0;

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

  max-height: 32px;
  float: right; }

div.left span.nickhint {
  position: absolute;
  z-index: 901;
  right: 5px;
  top: 4px;
  padding: 0 2px;
  min-width: 28px;
  background: rgba(0, 0, 0, 0.5);
  color: #fff;
  text-shadow: black 0 1px 1px;
  opacity: 0;
  -webkit-transition: opacity 0.5s ease-in-out; }

div.timehint {
  position: absolute;
  font-size: 10px;
  right: 0px;
  top: 1px;
  padding: 6px 4px 2px 4px;
  color: #cccccc;
  opacity: 0;
  text-shadow: black 0 0 3px;
  background: #222222; }

.info ul.messages li.highlight div.timehint,
li.self div.timehint {
  background: #333333; }

div.msg {
  margin-left: 100px;
  padding: 3px 5px;
  word-wrap: break-word;
  -khtml-line-break: after-white-space;
  -khtml-nbsp-mode: space;
  border-top: 1px solid #111111;
  border-left: 1px solid black; }

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

  font-size: 10px;
  line-height: 12px;
  word-wrap: normal;
  white-space: pre-wrap; }

li.monospace div.msg span[style*="bold"] {
  letter-spacing: -1px; }

ul.messages li.event {
  font-size: 11px;
  background: #333333;
  border-bottom: 1px solid #111111; }

ul.messages li.event.notice {
  background: #eb2222;
  color: #fff; }

ul.messages li.event.notice a {
  color: #fffc00;
  text-decoration: none; }

ul.messages li.event.notice a:hover {
  text-shadow: none; }

ul.messages li.event.happynotice {
  background: #3fc842;
  color: #fff; }

ul.messages li.event div.msg {
  background: none;
  border-left: none; }

ul.messages li.event div.left {
  font-weight: normal; }

ul.messages li.announce div.msg {
  color: #777;
  white-space: pre-wrap; }

ul.messages li.announce div.msg ul.avatar_grid {

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.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0px -120px no-repeat; }

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

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.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#logsearch {
  background: #eee;
  border-bottom: 1px solid #999;
  position: fixed;
  top: 0px;
  left: 0px;
  right: 0px;
  height: 28px;
  padding: 5px 0 0 0; }

div#logsearch label {
  font-size: 0.7em;

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

  right: 0px;
  overflow: auto; }

ul#logresults li {
  border-bottom: 1px solid #eee;
  padding: 0;
  font-size: 0.8em;
  cursor: pointer; }

ul#logresults div.focus:hover {
  background: #eee; }

ul#logresults li div.focus {
  background: #fff;
  padding: 5px 10px; }

ul#logresults li.context div.focus:hover {
  background: #fff; }

ul#logresults li.context ul {
  margin: 0;
  padding: 5px 10px;
  list-style: none; }

ul#logresults li.context ul li {
  border: none;
  margin: 0;
  padding: 2px 0; }

ul#logresults li.context {
  border-top: 1px solid #999;
  border-bottom: 1px solid #999;
  background: url(image/shadow-bottom.png) bottom left repeat-x, url(image/shadow-top.png) top left repeat-x #eeeeee; }

ul#logresults span.metadata {
  font-size: 0.7em;
  color: #666; }

div#help {
  position: absolute;
  z-index: 999;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  left: 20px;
  right: 20px;
  top: 25px;
  bottom: 60px;
  padding: 10px 20px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
  text-shadow: 0 0 3px rgba(0, 0, 0, 0.9); }

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

  color: red;
  font-weight: bold;
  text-align: center;
  width: 20px;
  line-height: 9px; }

div.color_picker div.toggle span#fg,
div.color_picker div.toggle span#bg {
  float: left;
  font-size: 9px;
  background: none;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
  color: white;
  text-align: center;
  padding: 2px 5px; }

div.color_picker div.toggle span#fg.active,
div.color_picker div.toggle span#bg.active {
  background: rgba(255, 255, 255, 0.6);
  color: black; }

@media screen and (max-device-width: 480px) {
  div.left {
    width: 40px !important; }

  div.msg {
    margin-left: 52px !important; }

  div.topic {
    height: 1.2em;
    overflow: hidden; }

  tr.input div {
    margin-right: 55px;
    background: none; }

  tr.input input.send {
    display: block;
    position: absolute;
    bottom: 2px;
    right: 0px;
    z-index: 999; }

  div.msg.monospace, div.msg.announce {
    line-height: 11px; } }

div.config {
  position: absolute;
  bottom: 55px;
  right: 20px;
  background: #efefef;
  padding: 10px 10px;
  z-index: 999;
  border: 10px solid rgba(0, 0, 0, 0.5);
  -webkit-border-radius: 10px;
  -moz-border-radius: 5px;
  border-radius: 5px; }

div.config div.buttons {
  clear: both; }

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


div.config ul#connections {
  list-style: none;
  position: absolute;
  top: 5px;
  bottom: 32px;
  left: 5px;
  margin: 0;
  padding: 0px;
  width: 150px;
  background: #fff;
  border-right: 1px solid #ccc;
  border-bottom: 1px solid #ccc; }

div.config ul#connections li.header {
  background: #efefef;
  text-transform: uppercase;
  color: #777;
  letter-spacing: 1px;
  font-size: 0.7em;
  cursor: default; }

div.config ul#connections li.header:hover {
  background: #efefef; }

div.config ul#connections li {
  padding: 5px 8px;
  font-size: 0.9em;
  cursor: pointer;
  border: 1px solid #fff;
  border-bottom: none; }

div.config ul#connections li:hover {
  background: #ffffcc; }

div.config ul#connections li.disconnected.active,
div.config ul#connections li.connected.active {
  background: #3875d7;
  color: #fff; }

div.config ul#connections li.disconnected {
  color: #999; }

div.config ul#connections li.connected {
  color: #222; }

body.config {
  background: #efefef; }

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

  color: black; }

ul#tabs {
  z-index: 20; }

ul#tabs li:hover {
  cursor: default; }

ul#controls {
  z-index: 30;
  background: #dddddd; }

body.blurred ul#controls {
  background: #eeeeee; }

ul#controls li {
  position: relative; }

select.select_overlay {
  display: block;
  position: absolute;
  top: 0px;
  left: 0px;
  bottom: 0px;

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

  border: none;
  padding: 0;
  margin: 0;
  opacity: 0;
  font-size: 12px; }

select#tab_overflow_overlay option.unread {
  font-weight: bold; }

li#tab_overflow_button {
  background: url(image/sprites.png) 3px -174px no-repeat; }

li#tab_overflow_button.unread {
  background: url(image/sprites.png) 3px -194px no-repeat; }

li#config_button {
  background: url(image/sprites.png) 4px -216px no-repeat; }

body {
  font-family: "Lucida Grande", Helvetica, sans-serif;
  text-rendering: optimizeLegibility;
  background: white; }

a:link, a:visited, a:hover, a:active {
  color: #0033cc; }

a:hover {
  text-shadow: rgba(0, 0, 0, 0.3) 0 1px 1px; }

div.window {
  position: fixed;
  top: 0px;

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

  bottom: 23px; }

div.window table {
  table-layout: fixed;
  width: 100%;
  height: 100%;
  padding: 0; }

tr.input td {
  height: 20px;
  background: #efefef;
  border-bottom: 1px solid #999999;
  border-top: 1px solid #aaaaaa; }

body.blurred tr.input td {
  border-bottom: 1px solid #aaaaaa; }

tr.input form {
  display: block;
  margin: 0;
  padding: 0;
  height: auto;
  line-height: 0px; }

tr.input div {
  padding: 0 3px;
  background: white;
  margin: 3px 0;
  position: relative; }

tr.input div.editor,
tr.input textarea {
  line-height: 1.2em;
  min-height: 1.2em;
  width: 100%;
  padding: 3px 0;
  border: none;

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

  overflow: hidden;
  position: absolute;
  right: -170px;
  padding-right: 8px;
  top: -3px;
  width: 180px;
  height: 20px;
  -webkit-border-radius: 3px 0 0 3px;
  -moz-border-radius: 3px 0 0 3px;
  border-radius: 3px 0 0 3px;
  background: url(image/sprites.png) 0px -240px no-repeat black;
  z-index: 902;
  opacity: 0.2;
  -webkit-transition-property: right;
  -webkit-transition-duration: 0.3s; }

tr.input div.editor_toolbar button {
  visibility: hidden;
  display: block;
  float: left;
  color: #eeeeee;
  line-height: 10px;
  font-size: 11px;
  margin: 0;
  padding: 4px 3px 5px 3px;
  text-align: center;
  background: none;
  cursor: pointer;
  border: none; }

tr.input div.editor_toolbar button:hover {
  color: white; }

tr.input div.editor_toolbar button.selected {
  color: yellow; }

.bold {

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


tr.input div.editor_toolbar:hover {
  opacity: 0.4;
  cursor: pointer; }

tr.input div.editor_toolbar.visible:hover {
  opacity: 1;
  cursor: inherit; }

tr.input div.editor_toolbar.visible {
  background-color: rgba(0, 0, 0, 0.6);
  background-image: none;
  right: -4px;
  -webkit-transition-property: right;
  -webkit-transition-duration: 0.3s;
  opacity: 1; }

tr.input div.editor_toolbar.visible button {
  visibility: visible; }

div.editor div,
div.editor p,

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


tr.input input.send {
  display: none; }

div#tab_container {
  position: fixed;
  bottom: 0px;
  left: 0px;
  right: 0px;
  height: 23px;
  background: #dddddd; }

body.blurred div#tab_container {
  background: #eeeeee; }

ul#tabs {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 11px;
  position: relative;
  float: left;
  margin-right: 62px;
  padding-left: 3px; }

body.blurred ul#tabs li {
  background: #eeeeee;
  color: #777777; }

ul#tabs li {
  float: left;
  margin: 0;
  margin-left: -1px;
  color: #333333;
  background: #dddddd; }

body.blurred ul#tabs li:first-child div.hit_area {
  border-left: 1px solid #eeeeee; }

ul#tabs li:first-child div.hit_area {
  border-left: 1px solid #dddddd; }

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

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

  border-bottom: none;
  border-top: none; }

body.blurred ul#tabs li.active div.hit_area {
  border: 1px solid #aaaaaa;
  border-top: none; }

ul#tabs li.active div.hit_area {
  border: 1px solid #999999;
  border-top: none;
  background: #efefef;
  height: 11px;
  padding-top: 3px;
  margin-top: -1px; }

ul#tabs li.active {
  height: 23px;
  z-index: 21; }

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

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

ul#controls {
  position: fixed;
  bottom: 0px;
  right: 0px;
  height: 23px;
  margin: 0;
  padding: 0 18px 0 0;
  list-style: none; }

ul#controls li {
  float: right;
  margin: 0;
  padding: 0;
  height: 16px;
  width: 16px;
  padding: 4px 3px 3px 3px;
  cursor: pointer; }

ul#controls li:hover {
  background-color: #cccccc; }

tr.topic td {
  width: 100%;
  background: #efefef;
  font-size: 11px;
  text-align: center;
  border-top: 1px solid white;
  border-bottom: 1px solid #aaaaaa;
  padding: 1px 0;
  height: 1.2em; }

tr.topic td div.topic {
  height: 1.2em;
  overflow: hidden; }

tr.topic a {
  text-decoration: none; }

div.message_wrap {
  height: 100%;
  overflow-x: hidden;
  overflow-y: auto;
  background: white; }

ul.messages {
  list-style: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  margin: 3px 0; }

ul.messages > li {
  font-size: 13px;
  display: block;
  position: relative;
  background-color: #eaeaea; }

ul.messages > li:not(.consecutive) {
  clear: both; }

ul.messages li.highlight {
  border-right: 5px solid #eb2222; }

.info ul.messages li.highlight,
ul.messages li.self {
  background: #fffbd0;
  border-right: none; }

.info ul.messages li.highlight div.msg,
ul.messages li.self div.msg {
  background: #fffbd0; }

ul.messages li div.msg {
  background: white; }

ul.messages li.consecutive div.left {
  display: none; }

div.left {
  float: left;
  width: 95px;
  font-weight: bold;
  text-align: right;
  padding: 4px 0;

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

  max-height: 32px;
  float: right; }

div.left span.nickhint {
  position: absolute;
  z-index: 901;
  right: 5px;
  top: 4px;
  padding: 0 2px;
  min-width: 28px;
  background: rgba(0, 0, 0, 0.5);
  color: #fff;
  text-shadow: black 0 1px 1px;
  opacity: 0;
  -webkit-transition: opacity 0.5s ease-in-out; }

div.timehint {
  position: absolute;
  font-size: 10px;
  right: 0px;
  top: 1px;
  padding: 6px 4px 2px 4px;
  color: #555555;
  opacity: 0;
  text-shadow: white 0 0 3px;
  background: white; }

.info ul.messages li.highlight div.timehint,
li.self div.timehint {
  background: #fffbd0; }

div.msg {
  margin-left: 100px;
  padding: 3px 5px;
  word-wrap: break-word;
  -khtml-line-break: after-white-space;
  -khtml-nbsp-mode: space;
  border-top: 1px solid #eeeeee;
  border-left: 1px solid #c1c1c1; }

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

  font-size: 10px;
  line-height: 12px;
  word-wrap: normal;
  white-space: pre-wrap; }

li.monospace div.msg span[style*="bold"] {
  letter-spacing: -1px; }

ul.messages li.event {
  font-size: 11px;
  background: #d9e7fb;
  border-bottom: 1px solid white; }

ul.messages li.event.notice {
  background: #eb2222;
  color: #fff; }

ul.messages li.event.notice a {
  color: #fffc00;
  text-decoration: none; }

ul.messages li.event.notice a:hover {
  text-shadow: none; }

ul.messages li.event.happynotice {
  background: #3fc842;
  color: #fff; }

ul.messages li.event div.msg {
  background: none;
  border-left: none; }

ul.messages li.event div.left {
  font-weight: normal; }

ul.messages li.announce div.msg {
  color: #777;
  white-space: pre-wrap; }

ul.messages li.announce div.msg ul.avatar_grid {

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.privmsg_tab div.tab_button {
  background: url(image/sprites.png) 0px -120px no-repeat; }

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

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.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#logsearch {
  background: #eee;
  border-bottom: 1px solid #999;
  position: fixed;
  top: 0px;
  left: 0px;
  right: 0px;
  height: 28px;
  padding: 5px 0 0 0; }

div#logsearch label {
  font-size: 0.7em;

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

  right: 0px;
  overflow: auto; }

ul#logresults li {
  border-bottom: 1px solid #eee;
  padding: 0;
  font-size: 0.8em;
  cursor: pointer; }

ul#logresults div.focus:hover {
  background: #eee; }

ul#logresults li div.focus {
  background: #fff;
  padding: 5px 10px; }

ul#logresults li.context div.focus:hover {
  background: #fff; }

ul#logresults li.context ul {
  margin: 0;
  padding: 5px 10px;
  list-style: none; }

ul#logresults li.context ul li {
  border: none;
  margin: 0;
  padding: 2px 0; }

ul#logresults li.context {
  border-top: 1px solid #999;
  border-bottom: 1px solid #999;
  background: url(image/shadow-bottom.png) bottom left repeat-x, url(image/shadow-top.png) top left repeat-x #eeeeee; }

ul#logresults span.metadata {
  font-size: 0.7em;
  color: #666; }

div#help {
  position: absolute;
  z-index: 999;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  left: 20px;
  right: 20px;
  top: 25px;
  bottom: 60px;
  padding: 10px 20px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
  text-shadow: 0 0 3px rgba(0, 0, 0, 0.9); }

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

  color: red;
  font-weight: bold;
  text-align: center;
  width: 20px;
  line-height: 9px; }

div.color_picker div.toggle span#fg,
div.color_picker div.toggle span#bg {
  float: left;
  font-size: 9px;
  background: none;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
  color: black;
  text-align: center;
  padding: 2px 5px; }

div.color_picker div.toggle span#fg.active,
div.color_picker div.toggle span#bg.active {
  background: rgba(0, 0, 0, 0.6);
  color: white; }

@media screen and (max-device-width: 480px) {
  div.left {
    width: 40px !important; }

  div.msg {
    margin-left: 52px !important; }

  div.topic {
    height: 1.2em;
    overflow: hidden; }

  tr.input div {
    margin-right: 55px;
    background: none; }

  tr.input input.send {
    display: block;
    position: absolute;
    bottom: 2px;
    right: 0px;
    z-index: 999; }

  div.msg.monospace, div.msg.announce {
    line-height: 11px; } }

div.config {
  position: absolute;
  bottom: 55px;
  right: 20px;
  background: #efefef;
  padding: 10px 10px;
  z-index: 999;
  border: 10px solid rgba(0, 0, 0, 0.5);
  -webkit-border-radius: 10px;
  -moz-border-radius: 5px;
  border-radius: 5px; }

div.config div.buttons {
  clear: both; }

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


div.config ul#connections {
  list-style: none;
  position: absolute;
  top: 5px;
  bottom: 32px;
  left: 5px;
  margin: 0;
  padding: 0px;
  width: 150px;
  background: #fff;
  border-right: 1px solid #ccc;
  border-bottom: 1px solid #ccc; }

div.config ul#connections li.header {
  background: #efefef;
  text-transform: uppercase;
  color: #777;
  letter-spacing: 1px;
  font-size: 0.7em;
  cursor: default; }

div.config ul#connections li.header:hover {
  background: #efefef; }

div.config ul#connections li {
  padding: 5px 8px;
  font-size: 0.9em;
  cursor: pointer;
  border: 1px solid #fff;
  border-bottom: none; }

div.config ul#connections li:hover {
  background: #ffffcc; }

div.config ul#connections li.disconnected.active,
div.config ul#connections li.connected.active {
  background: #3875d7;
  color: #fff; }

div.config ul#connections li.disconnected {
  color: #999; }

div.config ul#connections li.connected {
  color: #222; }

body.config {
  background: #efefef; }

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

  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
  scrollOffsets = document.viewport.getScrollOffsets(),
  elementOffsets = $(element).cumulativeOffset();

  if (options.offset) elementOffsets[1] += options.offset;

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

        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');

Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

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

  }

  function fontSizeSelection(fontSize) {
    this.execCommand('fontsize', false, fontSize);
  }

  function colorSelection(color) {
    this.execCommand('forecolor', false, color);
  }

  function backgroundColorSelection(color) {
    if(Prototype.Browser.Gecko) {
      this.execCommand('hilitecolor', false, color);
    } else {
      this.execCommand('backcolor', false, color);
    }
  }

  function alignSelection(alignment) {
    this.execCommand('justify' + alignment);
  }

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

     italicSelection:          italicSelection,
     italicSelected:           italicSelected,
     strikethroughSelection:   strikethroughSelection,
     indentSelection:          indentSelection,
     outdentSelection:         outdentSelection,
     toggleIndentation:        toggleIndentation,
     indentSelected:           indentSelected,
     fontSelection:            fontSelection,
     fontSizeSelection:        fontSizeSelection,
     colorSelection:           colorSelection,
     backgroundColorSelection: backgroundColorSelection,
     alignSelection:           alignSelection,
     alignSelected:            alignSelected,
     linkSelection:            linkSelection,
     unlinkSelection:          unlinkSelection,
     linkSelected:             linkSelected,
     formatblockSelection:     formatblockSelection,
     toggleOrderedList:        toggleOrderedList,
     insertOrderedList:        insertOrderedList,
     orderedListSelected:      orderedListSelected,
     toggleUnorderedList:      toggleUnorderedList,

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

    queryCommands: $H({
      link:          linkSelected,
      orderedlist:   orderedListSelected,
      unorderedlist: unorderedListSelected
    }),

    styleSelectors: $H({
      fontname:    'fontFamily',
      fontsize:    'fontSize',
      forecolor:   'color',
      hilitecolor: 'backgroundColor',
      backcolor:   'backgroundColor'
    })
  };
})(window);


if (Prototype.Browser.IE) {
  Object.extend(Selection.prototype, (function() {
    function setBookmark() {
      var bookmark = $('bookmark');
      if (bookmark) bookmark.remove();

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

    }.bind(this));
  }
});

Alice.Toolbar.ButtonSet = WysiHat.Toolbar.ButtonSets.Basic.concat(
  [
    {
      label: "Colors",
      handler: function (editor, button, toolbar) {
        var cb = function (color, fg) {
          fg ? editor.colorSelection(color) : editor.backgroundColorSelection(color)
        };
        if (toolbar.picker) {
          toolbar.picker.remove();
          toolbar.picker = undefined;
        } else {
          toolbar.picker = new Alice.Colorpicker(button, cb);
        }
      }
    },
    {

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

    }
  ]
);

Alice.Colorpicker = Class.create({
  initialize: function(button, callback) {
    var elem = new Element("div").addClassName("color_picker");

    var toggle = new Element("div").addClassName("toggle");
    var blank = new Element("span").addClassName("blank").addClassName("color");
    blank.setStyle({"background-color": "none"});
    blank.insert("⃠");
    toggle.insert('<span id="fg" class="active">fg</span><span id="bg">bg</span>');
    toggle.insert(blank);
    elem.insert(toggle);

    var colorcontainer = new Element("div").addClassName("colors");
    this.colors().each(function(color) {
      var box = new Element("span").addClassName("color");
      box.setStyle({"background-color": color});
      colorcontainer.insert(box);
    });
    elem.insert(colorcontainer);

    button.up('.window').insert(elem);
    elem.observe("mousedown", this.clicked.bind(this));

    this.elem = elem;
    this.cb = callback;
    this.fg = true;
  },

  clicked: function(e) {
    e.stop();

    var box = e.findElement("span.color");
    if (box) {
      var color = box.getStyle("background-color");
      if (color) this.cb(color, this.fg);
      return;
    }

    if (e.findElement("span#fg")) {
      this.elem.down("#bg").removeClassName("active");
      this.elem.down("#fg").addClassName("active");
      this.fg = true;
      return;
    }

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

? my ($app, $error) = @_;
<html>
  <head>
    <title>Use Alice Login</title>
    <link rel="shortcut icon" href="<?= $app->static_url("favicon.ico") ?>">
    <style type="text/css">
      body {
        text-align: center;
        font-family: Helvetica, Arial, sans-serif;
        font-size: 12px;
        background: #eee;
      }
      form {
        display: block;
        width: 150px;
        margin: 0 auto;
        text-align: left;
        background: #fff;
        border: 8px solid #ccc;
        padding: 20px;
      }
      input, label {
        display: block;
        width: 150px;
      }
      input {
        margin-bottom: 15px;
      }



( run in 1.883 second using v1.01-cache-2.11-cpan-f56aa216473 )