javascript/theme2.js
author |
Mahlon E. Smith <mahlon@martini.nu> |
|
Thu, 29 Oct 2009 15:27:35 -0700 |
changeset 3 |
1b5eb968d2c4 |
parent 1 |
1ae1a79094fa
|
permissions |
-rw-r--r-- |
* Use a 'user block' character instead of a 'body block' for the settings line,
as suggested by David J. Patrick <djp@linuxcaffe.ca>.
* Ignore all user blocks (wrapped or otherwise.)
* Display body (not wrapped) text as 'pre' in css.
diff --git a/Apache/OTL.pm b/Apache/OTL.pm
--- a/Apache/OTL.pm
+++ b/Apache/OTL.pm
@@ -1,7 +1,7 @@
#
# VimOutliner (OTL) XHTML pretty printer for mod_perl2/apache2.
#
-# Copyright (c) 2006, Mahlon E. Smith <mahlon@martini.nu>
+# Copyright (c) 2006-2009, Mahlon E. Smith <mahlon@martini.nu>
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
@@ -40,7 +40,7 @@
sub handler
{
- my $VERSION = '0.5';
+ my $VERSION = '0.6';
my $ID = '$Id$';
my $r = shift;
my $t0 = Time::HiRes::gettimeofday;
@@ -70,7 +70,10 @@
percent => qr/(\[.\]) (\d+)%/,
todo => qr/(\[_\]) /,
done => qr/(\[X\]) /,
- comment => qr/^(?:\t+)?:(.+)/,
+ user => qr/^(?:\t+)?\<(.+)/,
+ user_wrap => qr/^(?:\t+)?\>(.+)/,
+ body_wrap => qr/^(?:\t+)?:(.+)/,
+ body => qr/^(?:\t+)?;(.+)/,
time => qr/(\d{2}:\d{2}:\d{2})/,
date => qr/(\d{2,4}-\d{2}-\d{2})/,
subitem => qr/^\t(?!\t)/,
@@ -104,8 +107,8 @@
# get optional settings and otl title
{
my $settings = shift @blocks;
- if ($settings =~ $re{comment}) {
- %opt = map { split /=/ } split /\s?:/, $settings;
+ if ($settings =~ $re{user}) {
+ %opt = map { split /=/ } split /\s?:/, $1;
}
# if the first group wasn't a comment,
@@ -116,6 +119,10 @@
}
}
+ # Now that we have tried to detect settings,
+ # remove any level 0 blocks that are user data.
+ @blocks = grep { $_ !~ /^[\<\>]/ } @blocks;
+
# GET args override settings
$opt{$_} = $get->{$_} foreach keys %$get;
@@ -133,7 +140,7 @@
<!--
generated by otl_handler $VERSION
Mahlon E. Smith <mahlon\@martini.nu>
- http://www.martini.nu/
+ http://projects.martini.nu/apache-otl/
Get VimOutliner at: http://www.vimoutliner.org/
-->
@@ -195,13 +202,18 @@
foreach my $block ( sort { sorter(\%opt, \%re) } @blocks ) {
# separate outline items
- my @lines = grep { $_ !~ /$re{'hideline'}/ } split /\n/, $block;
+ my @lines;
+ foreach my $line ( split /\n/, $block ) {
+ push @lines, $line unless $line =~ $re{hideline} ||
+ $line =~ $re{user} || $line =~ $re{user_wrap};
+ }
+
my $data = [];
# build structure and get item counts
my ( $subs, $comments, $subsubs ) = ( 0, 0, 0 );
foreach ( @lines ) {
- if (/$re{comment}/) {
+ if (/$re{body_wrap}/) {
$comments++;
}
elsif (/$re{subitem}/) {
@@ -245,9 +257,10 @@
}
my $li_class = '>';
- $li_class = ' class="todo">' if $line =~ s#$re{todo}##;
- $li_class = ' class="done">' if $line =~ s#$re{done}##;
- $li_class = ' class="comment">' if $line =~ s#$re{comment}#$1#;
+ $li_class = ' class="todo">' if $line =~ s#$re{todo}##;
+ $li_class = ' class="done">' if $line =~ s#$re{done}##;
+ $li_class = ' class="comment_pre">' if $line =~ s#$re{body}#$1#;
+ $li_class = ' class="comment">' if $line =~ s#$re{body_wrap}#$1#;
if ( $next_level == $level || $next_level == 0 ) {
$r->print( "$in<li" . $li_class . "$line</li>\n" );
diff --git a/README b/README
--- a/README
+++ b/README
@@ -45,8 +45,9 @@
---------------------------------------------------------------------
Settings for the otl_handler are stored on the first line of the otl
-files themselves, prefixed by a colon. See the sample.otl for an
-example settings line. All settings are entirely optional.
+files themselves, prefixed by the 'user no wrap' character, '<'. See
+the sample.otl for an example settings line. All settings are entirely
+optional.
title
Type: string
diff --git a/sample.otl b/sample.otl
--- a/sample.otl
+++ b/sample.otl
@@ -1,4 +1,4 @@
-:title=Sample OTL list :counts=1 :timer=1 :style=styles/theme1.css :legend=1 :last_mod=1
+<:title=Sample OTL list :counts=1 :timer=1 :style=styles/theme1.css :legend=1 :last_mod=1
: Theme examples:
: <a href="sample.otl">basic</a> <a href="sample.otl?counts=0&style=styles/theme2.css&legend=0&js=/javascript/jquery.js,/javascript/theme2.js">advanced</a> <a href="sample.otl?counts=0&style=styles/theme3.css&legend=0&timer=0&js=/javascript/jquery.js,/javascript/theme3.js&sort=1">advanced2</a>
diff --git a/styles/theme1.css b/styles/theme1.css
--- a/styles/theme1.css
+++ b/styles/theme1.css
@@ -37,6 +37,13 @@
font-family: sans;
}
+.comment_pre
+{
+ font-style: normal;
+ font-family: courier;
+ white-space: pre;
+}
+
.counts
{
margin-left: 10px;
diff --git a/styles/theme2.css b/styles/theme2.css
--- a/styles/theme2.css
+++ b/styles/theme2.css
@@ -131,6 +131,13 @@
border-right: 1px solid #666;
}
+.comment_pre
+{
+ font-style: normal;
+ font-family: courier;
+ white-space: pre;
+}
+
.comment:hover
{
border-top: 1px solid #aaa;
diff --git a/styles/theme3.css b/styles/theme3.css
--- a/styles/theme3.css
+++ b/styles/theme3.css
@@ -88,6 +88,13 @@
margin-bottom: 3px;
}
+#content .comment_pre
+{
+ font-style: normal;
+ font-family: courier;
+ white-space: pre;
+}
+
#content
{
position: absolute;
$(document).ready(function(){
// slide everything open on new page
$(".outline:hidden").slideToggle("slow", function(){
$(".percent:hidden").fadeIn("slow");
});
// re-activate links (the event is stomped on by the li event)
$(".outline a").click(function(){ window.location.href = this });
// highlight clicked items
$("li").not("[ul]").click(function(){ $(this).toggleClass("selected") });
// add line numbers
var line_counter = 0;
$("li").each(function(){
var str = '<span class="linenum">' + ++line_counter + ':</span>';
$(this).prepend(str);
});
// attach folds
$(".outline ul li").toggle(
// hide
function(){
if ( $(this).children("ul").size() == 0 ) return;
$(this).children("ul").slideUp("slow");
$(this).find(".linenum").addClass("linenum-folded");
},
// show
function(){
$(this).children("ul").slideDown("slow");
$(this).find(".linenum").removeClass("linenum-folded");
}
);
});