view release on metacpan or search on metacpan
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;
}