Changeset 1388
- Timestamp:
- 03/05/07 13:17:00 (2 years ago)
- Files:
-
- feedmelinks/aim/bot/klaus.pl (modified) (1 diff)
- feedmelinks/folder.php (modified) (1 diff)
- feedmelinks/lib/FeedMeLinks/Bot.pm (modified) (17 diffs)
- feedmelinks/modules/my-recent.inc.php (modified) (1 diff)
- feedmelinks/modules/utils.inc.php (modified) (8 diffs)
- feedmelinks/modules/view-link.inc.php (modified) (2 diffs)
- feedmelinks/search-as-xml.php (modified) (4 diffs)
- feedmelinks/search.php (modified) (1 diff)
- feedmelinks/style/main.css (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
feedmelinks/aim/bot/klaus.pl
r1359 r1388 17 17 $aimbot->signon( "cityoflinks", "fuzzlebuzzle" ); 18 18 19 open( ICON, "48x48heart.gif" ) || die("can't open icon file: $!");20 binmode( ICON );21 my @icon = <ICON>; #Read the file into an array22 $aimbot->set_icon( @icon );23 print "attempting to load icon...\n";24 close( ICON );25 $aimbot->commit_buddylist();19 #open( ICON, "48x48heart.gif" ) || die("can't open icon file: $!"); 20 #binmode( ICON ); 21 #my @icon = <ICON>; #Read the file into an array 22 #$aimbot->set_icon( @icon ); 23 #print "attempting to load icon...\n"; 24 #close( ICON ); 25 #$aimbot->commit_buddylist(); 26 26 27 27 # global feedmelinks/folder.php
r1387 r1388 373 373 if( !$condensed ) { 374 374 ?> 375 <?= makeEditLink( $id ) ?>376 375 <?= makeDeleteLink( $id ) ?> 377 376 <input type="checkbox" name="<?= $id ?>" onChange="updateSelectedTotal(this);" /> feedmelinks/lib/FeedMeLinks/Bot.pm
r1360 r1388 1 1 #!/usr/local/bin/perl 2 2 package FeedMeLinks::Bot; 3 #use strict;3 use strict; 4 4 5 5 require Encode; … … 33 33 sub handle_response { 34 34 my ($aim, $sender, $message, $away, $sessions_ref ) = @_; 35 35 36 my $user; 36 37 # AIM often wraps seemingly plaintext messages with shouty <HTML><FONT>...</FONT></HTML> crap. this strips that 37 38 $message = strip_html( $message ); 39 log_mesg( \*LOG, "debug", "command: $message" ); 38 40 39 41 print "handle_resopnse can see site = $site\n"; 40 42 41 43 # init user 42 43 44 my $fml_username = is_user_validated( $sender ); 44 45 $fml_username .= ""; # type coerce 45 46 if( ! $fml_username ) { 46 $sessions_ref->{"$sender"} = build_empty_session( );47 if( ! $sessions_ref->{ $sender }->{ "seen_welcome" }) {47 $sessions_ref->{"$sender"} = build_empty_session( $sender ); 48 if( $sessions_ref->{ $sender }{ "seen_welcome" } != 1 ) { 48 49 $aim->send_im($sender, h("<b>Hi! I am the Feed Me Links bot!</b>\nTo get started, you can type <b>links</b>, <b>help</b>, or click <b><a href='$site/set-up/IM?aim=$sender'>activate</a></b> to set up your account.") ); 49 $sessions_ref->{ $sender } ->{ "seen_welcome" } = 1;50 $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 50 51 } 51 52 } else { 52 if( $sessions_ref->{ $sender }->{ "seen_welcome" } == 0 ) { 53 log_mesg( \*LOG, "session", "authenticated session for $sender" ); 54 if( $sessions_ref->{ $sender }{ "seen_welcome" } == 0 ) { 53 55 $aim->send_im( $sender, "Welcome back, " . get_dude() . "!" ); 54 $sessions_ref->{ $sender }->{ "seen_welcome" } = 1; 56 $sessions_ref->{"$sender"} = build_authenticated_session( $fml_username ); 57 $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 55 58 } 56 $sessions_ref->{"$sender"} = build_authenticated_session( $fml_username );57 59 } 58 60 … … 70 72 my $name = get_title_for_url( $url ); 71 73 my $name = $name ? $name : $url; 72 my $encoded_name = $name; 73 $encoded_name =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; 74 my $encoded_url = $url; 75 $encoded_url =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; 76 print "< $sender adding $url as $name\n"; 74 my $encoded_name = encode( $name ); 75 my $encoded_url = encode( $url ); 76 log_mesg( \*LOG, "add link", "$sender adding $url as $name" ); 77 77 78 78 my $response = $sessions_ref->{$sender}->{"proxy"}->get( "$site/api/add?url=$encoded_url&name=$encoded_name", []); … … 86 86 $link_id =~ s/.*com\///; 87 87 print "< FML server gave us link ID: $link_id\n"; 88 89 # set our session state 88 90 $sessions_ref->{$sender}->{"last_link"} = $link_id; 89 91 $sessions_ref->{$sender}->{"last_action"} = "added_link"; 92 $sessions_ref->{$sender}->{"added_tags"} = 0; 93 $sessions_ref->{$sender}->{"renamed"} = 0; 94 95 log_mesg( \*LOG, "set last_link hash thing to : " . $sessions_ref->{$sender}->{"last_link"} ); 96 90 97 $aim->send_im($sender, h("<b>Added</b>:\n<a href='$info'>$name</a>" )); 91 $aim->send_im($sender, h(" (coming soon) Want to tag it? Just start typing; separate tags with commas." ));98 $aim->send_im($sender, h("To add tags, just type them, separated by tags\nTo rename it, type it: <em>new name...</em>" )); 92 99 } else { 93 $aim->send_im($sender, h("<b>Oops, the server screwed something up!</b>\n$info" )); 100 if( $info =~ m/Duplicate/ ) { 101 $aim->send_im($sender, h("<b>$info</b>" )); 102 } else { 103 $aim->send_im($sender, h("<b>Oops, the server screwed something up!</b>\n$info" )); 104 } 105 log_mesg( \*LOG, "error:add link", "$sender adding $url as $name" ); 94 106 } 95 96 # FIXME: next action: tag / rename97 107 98 108 } else { 99 109 # FIXME: should search and say "NN people have added this link -- click activate to add it" 110 log_mesg( \*LOG, "error:add link", "un-authenticated add request from $sender for $message" ); 100 111 $aim->send_im($sender, h("That looks like a link! To add links via IM, just <b><a href='$site/set-up/IM?aim=$sender'>activate your account</a></b> by clicking." )); 101 112 } … … 109 120 $aim_validation_phrase =~ s/<.*$//; 110 121 $claimed_fml_username =~ s/,.+$//; 111 print "claimed_fml_username: $claimed_fml_username\n"; 112 print "aim_validation_phrase: $aim_validation_phrase\n"; 122 #print "claimed_fml_username: $claimed_fml_username\n"; 123 #print "aim_validation_phrase: $aim_validation_phrase\n"; 124 log_mesg( \*LOG, "validate", "$sender requesting validation with $message" ); 113 125 114 126 print "$site/api/backroom/get_im_validation_phrase_for_user&user=$claimed_fml_username\n"; … … 154 166 155 167 my $response = $www->get( "$site/usr/" . substr( $u, 0, 1 ) . "/$u/contacts.xml", []); 156 $xp = XML::XPath->new(xml => $response->content);168 my $xp = XML::XPath->new(xml => $response->content); 157 169 my $peeps = $xp->find("/fml"); 158 170 # FIXME: peeps list here for sharing 159 171 160 172 } elsif( $message =~ m/version/ ) { 173 log_mesg( \*LOG, "version", " $sender" ); 161 174 $aim->send_im($sender, get_version()); 162 175 163 176 } elsif( $message =~ m/(links|recent)/ ) { 177 log_mesg( \*LOG, "recent", " $sender" ); 164 178 $aim->send_im($sender, "recent links here, soon! (not finished yet, sorry"); 165 179 … … 167 181 log_mesg( \*LOG, "log test", " $message from $sender" ); 168 182 169 } elsif( $message =~ m/(recent|new)/ ) {170 $aim->send_im($sender, "(soon!) show the last 10 links");171 172 183 } elsif( $message =~ m/help/ || $message =~ m/commands/ || $message =~ m/\?/ ) { 184 log_mesg( \*LOG, "help", " $sender" ); 173 185 174 186 $aim->send_im($sender, "<b>Instructions</b>: … … 176 188 177 189 } elsif( $message =~ m/status/ ) { 190 log_mesg( \*LOG, "status", " $sender" ); 178 191 $aim->send_im($sender, "<b>DEBUG DUMP</b>:\nsender: $sender\nmessage: $message" ); 179 192 $aim->send_im($sender, Dumper( $sessions_ref )); … … 181 194 182 195 } elsif( $message =~ m/credits/ ) { 196 log_mesg( \*LOG, "credits", " $sender" ); 183 197 $aim->send_im($sender, h("by <b><a href='http://jm3.net'>John Manoogian III / jm3</a></b>")); 184 198 185 } elsif( $sessions_ref->{$sender}->{"last_link"} && $sessions_ref->{$sender}->{"last_action"} eq "added_link" ) { 199 } elsif( $sessions_ref->{$sender}->{"last_link"} && $sessions_ref->{$sender}->{"renamed"} == 0 && $message =~ m/rename(:| )/ ) { 200 $sessions_ref->{$sender}->{"last_action"} = "rename"; 201 $sessions_ref->{$sender}->{"renamed"} = 1; 202 my $link = $sessions_ref->{$sender}{"last_link"}; # convenience var 203 log_mesg( \*LOG, "rename", " $message from $sender" ); 204 205 my $name = $message; 206 $name =~ s/^rename(:|\s+)(\s*)?//; 207 my $pretty_name = $name; 208 $name = encode( $name ); 209 210 # HACK: not sure why the proxy's credential'ed password isn't being passed in, but passing it on the URL works. whatever. 211 my $url = "$site/api/rename/" . $sessions_ref->{$sender}{"fml_username"} . "&id=$link&name=$name&password=" . encode($sessions_ref->{$sender}{"fml_password"}); 212 log_mesg( \*LOG, "debug", " $url" ); 213 my $response = $sessions_ref->{$sender}->{"proxy"}->get( $url , []); 214 my $xp = XML::XPath->new(xml => $response->content); 215 my $response_code = "" . XML::XPath->new(xml => $response->content)->findnodes('/rest/response/@code'); 216 if( $response_code == "success" ) { 217 $aim->send_im($sender, h("Thanks! We renamed <a href='$site/$link'><b>$pretty_name</b></a>.")); 218 } else { 219 $aim->send_im($sender, h("<b>Oops, the server screwed something up!</b>\n$response_code" )); 220 } 221 log_mesg( \*LOG, "debug", "response: $response_code renaming $link to $message" ); 222 223 } elsif( $sessions_ref->{$sender}->{"last_link"} && $sessions_ref->{$sender}->{"added_tags"} == 0 ) { 186 224 $sessions_ref->{$sender}->{"last_action"} = "added_tags"; 187 $aim->send_im($sender, "Mmm, looks like tagz!"); 225 $sessions_ref->{$sender}->{"added_tags"} = 1; 226 $aim->send_im($sender, "Mmm, TAGS! Let me add those for you..."); 227 log_mesg( \*LOG, "tagging", " $message from $sender" ); 228 229 my $tags = $message; 230 $tags =~ s/, /,/g; 231 $tags = encode( $tags ); 232 # HACK: not sure why the proxy's credential'ed password isn't being passed in, but passing it on the URL works. whatever. 233 my $url = "$site/api/add_tags/" . $sessions_ref->{$sender}{"fml_username"} . "&id=" . $sessions_ref->{$sender}{"last_link"} . "&tags=$tags&password=" . encode($sessions_ref->{$sender}{"fml_password"}); 234 my $response = $sessions_ref->{$sender}->{"proxy"}->get( $url , []); 235 my $response_code = "" . XML::XPath->new(xml => $response->content)->findnodes('/rest/response/@code'); # HACK: string type coercion 236 log_mesg( \*LOG, "debug", "response: $response_code adding adding $tags with URL $url" );; 237 if( $response_code == "success" ) { 238 my $tag_noun = "tag"; 239 if( $tags =~ m/,/ ) { 240 $tag_noun .= "s"; 241 } 242 $tag_noun .= " <b>$message</b>"; 243 $aim->send_im($sender, h("Thanks! We added the tags <b>$message</b> to <a href='$site/" . $sessions_ref->{$sender}->{"last_link"} . "'>your link</a>")); 244 } 188 245 189 246 } else { 190 $aim->send_im($sender, "I'm up in your AIM, feed me some links. (type <b>?</b> for help)"); 191 247 log_mesg( \*LOG, "search", "$message by $sender" ); 248 $aim->send_im($sender, "<b>Hm, let me search for that on Feed Me Links</b>:\n(searching)"); 249 250 my $search_term = $message; 251 $search_term =~ s/^search(:|\s+)(\s*)?//; 252 my $url = "http://www.feedmelinks.com/search-as-xml?q=$search_term"; 253 log_mesg( \*LOG, "debug", " $url" ); 254 255 my $response = $sessions_ref->{$sender}->{"proxy"}->get( $url, []); 256 my $nodes = XML::XPath->new(xml => $response->content)->findnodes("/rest/response/link"); 257 #my $nodes = XML::XPath->new(xml => $response->content)->findnodes("/rest/response/link/name/text()"); 258 my $message = "" . XML::XPath->new(xml => $response->content)->findnodes("/rest/response/message"); 259 my $response_code = "" . XML::XPath->new(xml => $response->content)->findnodes("/rest/response/\@code"); 260 if( $response_code == "success" ) { 261 my $summary = ""; 262 my $max = 3; 263 my $c = 0; 264 foreach my $link_node ($nodes->get_nodelist) { 265 if( $c < $max ) { 266 $summary .= 267 "<a href='" 268 . $link_node->findnodes( "url/text()" ) 269 . "'>" 270 . $link_node->findnodes( "name/text()" ) 271 . "</a>, "; 272 log_mesg( \*LOG, XML::XPath::XMLParser::as_string($link_node)); 273 }; 274 ++ $c; 275 } 276 log_mesg( \*LOG, "debug", "summary: $summary" ); 277 log_mesg( \*LOG, scalar( $nodes->get_nodelist) . " links found" ); 278 log_mesg( \*LOG, "search", "found $message" ); 279 $aim->send_im($sender, "<b>$message</b> (<a href='$site/search?q=$search_term'>view all matches</a>)\nincluding: $summary"); 280 } 192 281 } 193 282 … … 196 285 197 286 sub is_user_validated { 198 log_mesg( \*LOG, "debug", " is_user_validated() - why is bri getting kicked off?" );287 log_mesg( \*LOG, "debug", " is_user_validated() - no users with \@ signs?" ); 199 288 my $sender = shift; 200 289 my $response = $www->get( "$site/api/backroom/is_im_account_known&user=$sender" , []); … … 216 305 217 306 sub build_empty_session { 218 print "> building UNauthenticated session for $sender\n"; 307 my $sender = $_[0]; 308 log_mesg( \*LOG, "session", "building empty session for $sender" ); 219 309 return { 220 'last_link' => 'none yet', 221 'last_action' => '', 310 'last_link' => 0, 311 'last_action' => '', 312 'added_tags' => 0, 313 'renamed' => 0, 222 314 'fml_username' => "", 223 315 'fml_password' => "", … … 237 329 print "> using url: $site/api/backroom/getPasswdForUser&user=$u\n"; 238 330 my $response = $www->get( "$site/api/backroom/getPasswdForUser&user=$u", []); 239 $xp = XML::XPath->new(xml => $response->content);331 my $xp = XML::XPath->new(xml => $response->content); 240 332 my $p = "" . $xp->getNodeText("/rest/response"); 241 print "< got password: '$p'\n";333 log_mesg( \*LOG, "debug", "got password $p" ); 242 334 243 335 my $session = { 244 'last_link' => 'none yet', 245 'last_action' => '', 336 'last_link' => 0, 337 'last_action' => '', 338 'added_tags' => 0, 339 'renamed' => 0, 246 340 'fml_username' => $u, 247 341 'fml_password' => $p, … … 260 354 "www." . FeedMeLinks::Environment::get_domain() . ":80", 261 355 'Feed_Me_Links_XML_API', 356 # FIXME: are we doing something wrong? tags is failing with no authroization... 262 357 $u => $p 263 358 ); … … 267 362 sub get_title_for_url { 268 363 my $url = $_[0]; 269 ($fh, $file) = mkstemp( "fml_aim_pagetitle_url_XXXX" );364 my ($fh, $file) = mkstemp( "fml_aim_pagetitle_url_XXXX" ); 270 365 271 366 my $ua = LWP::UserAgent->new(); … … 309 404 "dude", 310 405 "bro", 406 "baby", 407 "brother", 408 "fellow linkster", 409 "digital citizen", 311 410 "bro-ham" 312 411 ); … … 333 432 334 433 sub get_date { 335 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);434 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); 336 435 $year += 1900; 337 436 $mon += 1; … … 347 446 } 348 447 448 sub encode { 449 my $s = $_[0]; 450 $s =~ s/([^A-Za-z0-9-_\.,|])/sprintf("%%%02X", ord($1))/seg; 451 return $s; 452 } 453 349 454 1; # modules must return a true value 350 455 feedmelinks/modules/my-recent.inc.php
r1334 r1388 61 61 <?= makeLink( $id, "/t/$id", urldecode( mysql_result($q,$i,"name")), $url, "", "" ) ?> 62 62 <?= makePermaLink( $id ) ?> 63 <?php echo "\n"; ?> <div style="text-align: right;"> in:64 <?php $cats = getShortCategoriesForLinkAsHTML( $id, $u, 0, 0 ); ?> <?= $cats ? " $cats" : "(" . getUnCattedName() . ")" ?>63 <?php echo "\n"; ?> <div style="text-align: right;"> 64 <?php $cats = getShortCategoriesForLinkAsHTML( $id, $u, 0, 0 ); ?> <?= $cats ? "in: $cats" : "(<a href='/f/unfiled'>" . getUnCattedName() . "</a>)" ?> 65 65 66 66 <?php feedmelinks/modules/utils.inc.php
r1375 r1388 25 25 if( !( $u && $id && $name )) 26 26 return; 27 return run_query( getQuery( "edit_name", $name, $id, $u )); 27 run_query( getQuery( "edit_name", $name, $id, $u )); 28 return mysql_affected_rows(); 28 29 } 29 30 … … 988 989 if( $u != getOwnerForLink( $newLinkID )) { 989 990 log_mesg_to( "[failed tag hijacking attempt] $u, $newLinkID", "security" ); 990 return " FAILED";991 return "failed"; 991 992 } 992 993 # if we were called with a big list of possible tags, use that, … … 1066 1067 } 1067 1068 } 1068 return $q;1069 return $q; 1069 1070 } 1070 1071 … … 1390 1391 } 1391 1392 1392 # strips slashes, and converts special characters to HTML equivalents for string defined in $var 1393 function o( $s ){ 1394 $chars = array( 1393 function get_entities() { 1394 return array( 1395 1395 128 => '€', 1396 1396 130 => '‚', … … 1420 1420 158 => 'ž', 1421 1421 159 => 'Ÿ'); 1422 } 1423 1424 # strips slashes, and converts special characters to HTML equivalents for string defined in $var 1425 function o( $s ){ 1426 $chars = get_entities(); 1422 1427 return hateration( unicode_fix( str_replace(array_map('chr', array_keys($chars)), $chars, htmlentities(stripslashes($s))))); 1423 1428 } … … 2710 2715 2711 2716 function getUnCattedName() { 2712 return "no t tagged";2717 return "no tags"; 2713 2718 } 2714 2719 … … 4304 4309 4305 4310 function makeEditLink( $id ) { 4306 %><a title=" Edit this link" href="javascript:openEdit('<%= $id %>');"><img src="img/edit_entry_16.png" valign="middle" height="16" width="16" alt="edit" border="0" /></a><%4311 %><a title="View Info" href="/<?= $id ?>"><img src="img/edit_entry_16.png" valign="middle" height="16" width="16" alt="edit" border="0" /></a><% 4307 4312 } 4308 4313 … … 4320 4325 function makeAJAXEditLink( $type, $label ) { 4321 4326 $label = $label ? $label : "Rename this link"; 4322 %><input type="button" class="editor <%= $type %>" src="/img/icons/edit.png"4327 %><input type="button" class="editor <%= $type %>" src="/img/icons/edit.png" 4323 4328 height="26" width="26" hspace="5" value="<%= $label %>" border="0" /></a><% 4324 4329 } feedmelinks/modules/view-link.inc.php
r1352 r1388 70 70 71 71 <div ftype="name" fid="<%= $l %>"> 72 <a class="biglink" title="<%= $name %>" href="/t/<%= $l %>"><%= $name %></a> <% if( $owned ) {makeAJAXEditLink( "name", "Rename this link" );} %>72 <a class="biglink" title="<%= $name %>" href="/t/<%= $l %>"><%= $name %></a> <% if( $owned ) {makeAJAXEditLink( "name", "Rename" );} %> 73 73 <% if( $owned ) { %> 74 74 <label>Make <?= $private ? "public" : "private" ?>: <%= makeAJAXToggle( "link_privacy", $l, $isPrivate ) %></label> … … 89 89 <%= insertBigThumb( $link ) %> 90 90 <div ftype="url" fid="<%= $l %>"> 91 <a title="<%= $link %>" href="/t/<%= $l %>"><%= $displayLink %></a> <% if( $owned ) {makeAJAXEditLink( "url", "Edit thisURL" ); } %>91 <a title="<%= $link %>" href="/t/<%= $l %>"><%= $displayLink %></a> <% if( $owned ) {makeAJAXEditLink( "url", "Edit URL" ); } %> 92 92 </div> 93 93 feedmelinks/search-as-xml.php
r1352 r1388 28 28 %> 29 29 <<%= "?" %>xml version='1.0' encoding="UTF-8" standalone='yes'?> 30 <response type="search"> 31 <meta> 32 Search <%= $my ? "My Links" : "Feed Me Links" %> <%= $q ? "for '$q'" : "" %> 33 </meta> 30 <rest> 31 <request>Search <%= $my ? "My Links" : "Feed Me Links" %> <%= $q ? "for '$q'" : "" %> 32 </request> 34 33 <% 35 34 if( $searchTerm ) { … … 48 47 $numRows = mysql_num_rows($q); 49 48 %> 50 <meta><%= $numRows %> matches from <%= number_format( $totalNumLinks ) %> links</meta> 49 <response code="<?= $numRows != 0 ? "success" : "failed" ?>" matches="<?= $numRows ?>"> 50 <message><%= $numRows %> matches from <%= number_format( $totalNumLinks ) %> links</message> 51 51 <% 52 52 if( $numRows ) { … … 71 71 %> 72 72 <url><%= $url %></url> 73 <name><%= html_entity_decode( $name) %></name>73 <name><%= preg_replace( "/&([^a])/", "&\\1", unicode_fix( $name )) %></name> 74 74 <% 75 75 $cats = $cats ? "$cats" : "by $userid"; 76 #echo $cats;77 76 %> 78 77 </link> … … 124 123 } 125 124 %> 126 </response> 125 </response> 126 </rest> 127 127 128 128 <% feedmelinks/search.php
r1352 r1388 147 147 <% } else { %> 148 148 149 <%= makeEditLink( $id ) %>150 149 <%= makeDeleteLink( $id ) %> 151 150 feedmelinks/style/main.css
r1387 r1388 7 7 input, textarea, select { margin: 2px } 8 8 input, select { vertical-align: middle } 9 input[type=button], input[type=submit], input[type=reset] { 9 10 button, input.button, input[type=button], input[type=submit], input[type=reset] { 10 11 font-size: 10px; 11 12 background: #eee; … … 14 15 padding: .1em .5em; 15 16 } 16 input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover {17 button:hover, input.button:hover, input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover { 17 18 background: #333; 18 } 19 input[type=button][disabled], input[type=submit][disabled], 19 color: #ffffff; 20 } 21 button[disabled], input.button:disabled, input[type=button][disabled], input[type=submit][disabled], 20 22 .cancel, input[type=reset][disabled] { 21 23 background: #f6f6f6; … … 23 25 color: #999; 24 26 } 25 26 27 /* end stealing */ 28 29 OLDBUTTON { 30 background-color: #FF6600; 31 color: white; 32 font-family: inherit; 33 padding: 0px; 34 margin: 0px; 35 font-size: 9px; 36 } 37 38 medbutton, input.medbutton { 39 background-color: #FF6600; 40 color: white; 41 font-family: inherit; 42 padding: 3px; 43 margin: 1px; 44 font-size: 10px; 45 } 46 47 bigbutton, input.bigbutton { 48 background-color: #FF6600; 49 color: white; 50 font-family: inherit; 51 padding: 0.4em; 52 margin: 0px; 53 font-size: 14px;; 54 } 55 56 .renameable { 57 background-color: #FFFFD3; 58 font-size: 14px; 59 color: #222222; 60 padding: 4px; 61 } 27 62 28 63 .progress { … … 171 206 font-size: 12px; 172 207 color: red; 173 }174 175 button, input.button {176 background-color: #FF6600;177 color: white;178 font-family: inherit;179 padding: 0px;180 margin: 0px;181 font-size: 9px;182 }183 184 medbutton, input.medbutton {185 background-color: #FF6600;186 color: white;187 font-family: inherit;188 padding: 3px;189 margin: 1px;190 font-size: 10px;191 }192 193 bigbutton, input.bigbutton {194 background-color: #FF6600;195 color: white;196 font-family: inherit;197 padding: 0.4em;198 margin: 0px;199 font-size: 14px;;200 }201 202 button:hover, input.button:hover {203 background-color: #FF0000;204 208 } 205 209