diff --git a/wp-content/themes/monotone/404.php b/wp-content/themes/monotone/404.php new file mode 100755 index 0000000000000000000000000000000000000000..01a8e8a617e65e66fcfb87d1a513ee3dc511fb35 --- /dev/null +++ b/wp-content/themes/monotone/404.php @@ -0,0 +1,11 @@ +<?php get_header(); ?> + + <div id="content" class="narrowcolumn"> + + <h2 class="center">Error 404 - Not Found</h2> + + </div> + +<?php get_sidebar(); ?> + +<?php get_footer(); ?> \ No newline at end of file diff --git a/wp-content/themes/monotone/_license.txt b/wp-content/themes/monotone/_license.txt new file mode 100644 index 0000000000000000000000000000000000000000..b5fcfa6e7a5343eec02d2d25805773efbdf65121 --- /dev/null +++ b/wp-content/themes/monotone/_license.txt @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + diff --git a/wp-content/themes/monotone/_readme.txt b/wp-content/themes/monotone/_readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..96020832a52fe6ab15211eb79671b2b6000c5ee8 --- /dev/null +++ b/wp-content/themes/monotone/_readme.txt @@ -0,0 +1,19 @@ +Monotone Version 1.1 + +Theme Installation: + +1) Copy the folder named "monotone" to your wp-content/themes/ directory. +2) Login to the Wordpress administration area and click "Design" +3) Activate the theme! + + +Thumb.php and .htaccess Installation: + +1) Move htaccess.txt and thumb.php to your site's root folder (the one where xmlrpc.php and the wp-admin folder live). +2) Rename htaccess.txt to .htaccess OR copy the lines out of .htaccess and append them to your current .htaccess file. +3) Make a folder with world writable permissions (probably 0777) called "cache" in your site's root directory. This is so thumb.php can cache the images it generates. +3) Everything should work. + +Monotone was a collaboration between eight6 (http://eight6.com) and Automattic (http://automattic.com). + +All future updates to the theme will be available at http://monotonedemo.wordpress.com \ No newline at end of file diff --git a/wp-content/themes/monotone/archive.php b/wp-content/themes/monotone/archive.php new file mode 100755 index 0000000000000000000000000000000000000000..9e96191fd324a3eff0c84d92da48bb7a03f793e8 --- /dev/null +++ b/wp-content/themes/monotone/archive.php @@ -0,0 +1,75 @@ +<?php get_header(); rewind_posts(); ?> +<div class="archive"> + +<ul id="filters"> + <li>Filter by:</li> + <li> +<select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'> + <option value=""><?php echo attribute_escape(__('Select Month')); ?></option> + <?php wp_get_archives('type=monthly&format=option&show_post_count=1'); ?> </select> +</li> +<li> +<?php wp_dropdown_categories('show_option_none=Select Category'); ?> + +<script type="text/javascript"><!-- + var dropdown = document.getElementById("cat"); + function onCatChange() { + if ( dropdown.options[dropdown.selectedIndex].value > 0 ) { + location.href = "<?php echo get_option('home'); +?>/?cat="+dropdown.options[dropdown.selectedIndex].value; + } + } + dropdown.onchange = onCatChange; +--></script> +</li> +</ul> + + <?php + query_posts($query_string.'&posts_per_page=24'); + if (have_posts()) : ?> + + <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?> + <?php /* If this is a category archive */ if (is_category()) { ?> + <h2>Archive for the ‘<?php single_cat_title(); ?>’ Category</h2> + <?php /* If this is a tag archive */ } elseif( is_tag() ) { ?> + <h2>Posts Tagged ‘<?php single_tag_title(); ?>’</h2> + <?php /* If this is a daily archive */ } elseif (is_day()) { ?> + <h2>Archive for <?php the_time('F jS, Y'); ?></h2> + <?php /* If this is a monthly archive */ } elseif (is_month()) { ?> + <h2>Archive for <?php the_time('F, Y'); ?></h2> + <?php /* If this is a yearly archive */ } elseif (is_year()) { ?> + <h2>Archive for <?php the_time('Y'); ?></h2> + <?php /* If this is an author archive */ } elseif (is_author()) { ?> + <h2>Author Archive</h2> + <?php /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?> + <h2>Blog Archives</h2> + <?php } ?> + + + <div class="nav"> + <div class="prev"><?php next_posts_link('« Older Entries') ?></div> + <div class="next"><?php previous_posts_link('Newer Entries »') ?></div> + </div> +<ul class="thumbnails"> + <?php while (have_posts()) : the_post(); ?> + + <li id="post-<?php the_ID(); ?>"> + <a href="<?php the_permalink() ?>" title="Link to <?php the_title_attribute(); ?>"><?php the_thumbnail(); ?></a> + </li> + + <?php endwhile; ?> +</ul> +<div class="nav"> + <div class="prev"><?php next_posts_link('« Older Entries') ?></div> + <div class="next"><?php previous_posts_link('Newer Entries »') ?></div> +</div> + + <?php else : ?> + + <h2 class="center">Not Found</h2> + <?php include (TEMPLATEPATH . '/searchform.php'); ?> + + <?php endif; ?> +</div> + +<?php get_footer(); ?> diff --git a/wp-content/themes/monotone/comments.php b/wp-content/themes/monotone/comments.php new file mode 100755 index 0000000000000000000000000000000000000000..e7997fca928d77e1a7ebe14b52030d82b9380bbe --- /dev/null +++ b/wp-content/themes/monotone/comments.php @@ -0,0 +1,114 @@ +<?php // Do not delete these lines + if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) + die ('Please do not load this page directly. Thanks!'); + + if (!empty($post->post_password)) { // if there's a password + if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie + ?> + + <p class="nocomments">This post is password protected. Enter the password to view comments.</p> + + <?php + return; + } + } + + /* This variable is for alternating comment background */ + $oddcomment = 'class="alt" '; +?> + +<!-- You can start editing here. --> + +<?php if ($comments) : ?> + <h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to “<?php the_title(); ?>”</h3> + + <ol class="commentlist"> + <?php foreach ($comments as $comment) : ?> + <li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>"> + <div class="gravatar"><?php echo get_avatar( $comment, 32 ); ?></div> + <div class="metadata"> + <a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date('j M Y') ?> at <?php comment_time() ?></a> + <cite><?php comment_author_link() ?></cite> + <?php edit_comment_link('edit','<br />',''); ?> + </div> + <div class="content"> + + <?php if ($comment->comment_approved == '0') : ?> + <p><em>Your comment is awaiting moderation.</em></p> + <?php endif; ?> + <?php comment_text() ?> + </div> + <div class="clear"></div> + </li> + + <?php + /* Changes every other comment to a different class */ + $oddcomment = ( empty( $oddcomment ) ) ? 'class="alt" ' : ''; + ?> + + <?php endforeach; /* end for each comment */ ?> + + </ol> + + <?php else : // this is displayed if there are no comments so far ?> + + <?php if ('open' == $post->comment_status) : ?> + <!-- If comments are open, but there are no comments. --> + + <?php else : // comments are closed ?> + <!-- If comments are closed. --> + <p class="nocomments">Comments are closed.</p> + + <?php endif; ?> +<?php endif; ?> + + +<?php if ('open' == $post->comment_status) : ?> + +<h3 id="respond">Leave a Reply</h3> + +<?php if ( get_option('comment_registration') && !$user_ID ) : ?> +<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p> +<?php else : ?> + +<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> + +<?php if ( $user_ID ) : ?> + +<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Logout »</a></p> + +<?php else : ?> + +<p><label for="author"><span><strong>Name</strong> <?php if ($req) echo "<small>(required)</small>"; ?></span></label> <input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" /> +</p> + +<p> + + <label for="email"><span><strong>Mail</strong> <small>(<?php if ($req) echo "required, ";?>not published)</small></span></label> + + <input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" /> +</p> + +<p> + <label for="url"><span><strong>Website</strong></span></label> + <input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" /> +</p> + +<?php endif; ?> + +<!--<p><small><strong>XHTML:</strong> You can use these tags: <code><?php echo allowed_tags(); ?></code></small></p>--> + +<p> + <label for="comment"><strong>Comment</strong></label> + <textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p> + +<div><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" /> +<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" /> +</div> +<?php do_action('comment_form', $post->ID); ?> + +</form> +</div> +<?php endif; // If registration required and not logged in ?> + +<?php endif; // if you delete this the sky will fall on your head ?> diff --git a/wp-content/themes/monotone/csscolor.php b/wp-content/themes/monotone/csscolor.php new file mode 100755 index 0000000000000000000000000000000000000000..9155b2667e4e9e6f37309d0409f0ab254c6630e7 --- /dev/null +++ b/wp-content/themes/monotone/csscolor.php @@ -0,0 +1,423 @@ +<?php +/* + csscolor.php + Copyright 2004 Patrick Fitzgerald + http://www.barelyfitz.com/projects/csscolor/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + +define('CSS_COLOR_ERROR', 100); + +class CSS_Color +{ + //================================================== + //==PARAMETERS====================================== + //================================================== + + // $this->bg = array of CSS color values + // $this->bg[0] is the bg color + // $this->bg['+1'..'+5'] are lighter colors + // $this->bg['-1'..'-5'] are darker colors + var $bg = array(); + + // $this->fg = array of foreground colors. + // Each color corresponds to a background color. + var $fg = array(); + + // brightDiff is the minimum brightness difference + // between the background and the foreground. + // Note: you should not change this directly, + // instead use setBrightDiff() and getBrightDiff() + var $minBrightDiff = 128; + + // colorDiff is the minimum color difference + // between the background and the foreground. + // Note: you should not change this directly, + // instead use setColorDiff() and getColorDiff() + var $minColorDiff = 100; + + //================================================== + //==CONSTRUCTOR===================================== + //================================================== + + function CSS_Color($bgHex, $fgHex='') + { + // This is the constructor method for the class, + // which is called when a new object is created. + + // Initialize this PEAR object so I can + // use the PEAR error return mechanism + + // Initialize the palette + $this->setPalette($bgHex, $fgHex); + } + + //================================================== + //==METHODS========================================= + //================================================== + + //-------------------------------------------------- + function setPalette($bgHex, $fgHex = '') + { + // Initialize the color palettes + + // If a foreground color was not specified, + // just use the background color. + if (!$fgHex) { + $fgHex = $bgHex; + } + + // Clear the existing palette + $this->bg = array(); + $this->fg = array(); + + // Make sure we got a valid hex value + if (!$this->isHex($bgHex)) { + error_log("background color '$bgHex' is not a hex color value"); + return false; + } + + // Set the bg color + $this->bg[0] = $bgHex; + + $this->bg['+1'] = $this->lighten($bgHex, .85); + $this->bg['+2'] = $this->lighten($bgHex, .75); + $this->bg['+3'] = $this->lighten($bgHex, .5); + $this->bg['+4'] = $this->lighten($bgHex, .25); + $this->bg['+5'] = $this->lighten($bgHex, .1); + + $this->bg['-1'] = $this->darken($bgHex, .85); + $this->bg['-2'] = $this->darken($bgHex, .75); + $this->bg['-3'] = $this->darken($bgHex, .5); + $this->bg['-4'] = $this->darken($bgHex, .25); + $this->bg['-5'] = $this->darken($bgHex, .1); + + // Make sure we got a valid hex value + if (!$this->isHex($fgHex)) { + $this->raiseError("background color '$bgHex' is not a hex color value", + __FUNCTION__, __LINE__); + return false; + } + + // Set up the foreground colors + $this->fg[0] = $this->calcFG( $this->bg[0], $fgHex); + $this->fg['+1'] = $this->calcFG( $this->bg['+1'], $fgHex); + $this->fg['+2'] = $this->calcFG( $this->bg['+2'], $fgHex); + $this->fg['+3'] = $this->calcFG( $this->bg['+3'], $fgHex); + $this->fg['+4'] = $this->calcFG( $this->bg['+4'], $fgHex); + $this->fg['+5'] = $this->calcFG( $this->bg['+5'], $fgHex); + $this->fg['-1'] = $this->calcFG( $this->bg['-1'], $fgHex); + $this->fg['-2'] = $this->calcFG( $this->bg['-2'], $fgHex); + $this->fg['-3'] = $this->calcFG( $this->bg['-3'], $fgHex); + $this->fg['-4'] = $this->calcFG( $this->bg['-4'], $fgHex); + $this->fg['-5'] = $this->calcFG( $this->bg['-5'], $fgHex); + } + + //-------------------------------------------------- + function lighten($hex, $percent) + { + return $this->mix($hex, $percent, 255); + } + + //-------------------------------------------------- + function darken($hex, $percent) + { + return $this->mix($hex, $percent, 0); + } + + //-------------------------------------------------- + function mix($hex, $percent, $mask) + { + + // Make sure inputs are valid + if (!is_numeric($percent) || $percent < 0 || $percent > 1) { + $this->raiseError("percent=$percent is not valid", + __FUNCTION__, __LINE__); + return false; + } + + if (!is_int($mask) || $mask < 0 || $mask > 255) { + $this->raiseError("mask=$mask is not valid", + __FUNCTION__, __LINE__); + return false; + } + + $rgb = $this->hex2RGB($hex); + if (!is_array($rgb)) { + // hex2RGB will raise an error + return false; + } + + for ($i=0; $i<3; $i++) { + $rgb[$i] = round($rgb[$i] * $percent) + round($mask * (1-$percent)); + + // In case rounding up causes us to go to 256 + if ($rgb[$i] > 255) { + $rgb[$i] = 255; + } + + } + return $this->RGB2Hex($rgb); + } + + //-------------------------------------------------- + function hex2RGB($hex) + { + // + // Given a hex color (rrggbb or rgb), + // returns an array (r, g, b) with decimal values + // If $hex is not the correct format, + // returns false. + // + // example: + // $d = hex2RGB('#abc'); + // if (!$d) { error } + + // Regexp for a valid hex digit + $d = '[a-fA-F0-9]'; + + // Make sure $hex is valid + if (preg_match("/^($d$d)($d$d)($d$d)\$/", $hex, $rgb)) { + + return array( + hexdec($rgb[1]), + hexdec($rgb[2]), + hexdec($rgb[3]) + ); + } + if (preg_match("/^($d)($d)($d)$/", $hex, $rgb)) { + + return array( + hexdec($rgb[1] . $rgb[1]), + hexdec($rgb[2] . $rgb[2]), + hexdec($rgb[3] . $rgb[3]) + ); + } + + $this->raiseError("cannot convert hex '$hex' to RGB", __FUNCTION__, __LINE__); + return false; + } + + //-------------------------------------------------- + function RGB2Hex($rgb) + { + // Given an array(rval,gval,bval) consisting of + // decimal color values (0-255), returns a hex string + // suitable for use with CSS. + // Returns false if the input is not in the correct format. + // Example: + // $h = RGB2Hex(array(255,0,255)); + // if (!$h) { error }; + + // Make sure the input is valid + if(!$this->isRGB($rgb)) { + $this->raiseError("RGB value is not valid", __FUNCTION__, __LINE__); + return false; + } + + $hex = ""; + for($i=0; $i < 3; $i++) { + + // Convert the decimal digit to hex + $hexDigit = dechex($rgb[$i]); + + // Add a leading zero if necessary + if(strlen($hexDigit) == 1) { + $hexDigit = "0" . $hexDigit; + } + + // Append to the hex string + $hex .= $hexDigit; + } + + // Return the complete hex string + return $hex; + } + + //-------------------------------------------------- + function isHex($hex) + { + // Returns true if $hex is a valid CSS hex color. + // The "#" character at the start is optional. + + // Regexp for a valid hex digit + $d = '[a-fA-F0-9]'; + + // Make sure $hex is valid + if (preg_match("/^#?$d$d$d$d$d$d\$/", $hex) || + preg_match("/^#?$d$d$d\$/", $hex)) { + return true; + } + return false; + } + + //-------------------------------------------------- + function isRGB($rgb) + { + // Returns true if $rgb is an array with three valid + // decimal color digits. + + if (!is_array($rgb) || count($rgb) != 3) { + return false; + } + + for($i=0; $i < 3; $i++) { + + // Get the decimal digit + $dec = intval($rgb[$i]); + + // Make sure the decimal digit is between 0 and 255 + if (!is_int($dec) || $dec < 0 || $dec > 255) { + return false; + } + } + + return true; + } + + //-------------------------------------------------- + function calcFG($bgHex, $fgHex) + { + // Given a background color $bgHex and a foreground color $fgHex, + // modifies the foreground color so it will have enough contrast + // to be seen against the background color. + // + // The following parameters are used: + // $this->minBrightDiff + // $this->minColorDiff + + // Loop through brighter and darker versions + // of the foreground color. + // The numbers here represent the amount of + // foreground color to mix with black and white. + foreach (array(1, 0.75, 0.5, 0.25, 0) as $percent) { + + $darker = $this->darken($fgHex, $percent); + $lighter = $this->lighten($fgHex, $percent); + + $darkerBrightDiff = $this->brightnessDiff($bgHex, $darker); + $lighterBrightDiff = $this->brightnessDiff($bgHex, $lighter); + + if ($lighterBrightDiff > $darkerBrightDiff) { + $newFG = $lighter; + $newFGBrightDiff = $lighterBrightDiff; + } else { + $newFG = $darker; + $newFGBrightDiff = $darkerBrightDiff; + } + $newFGColorDiff = $this->colorDiff($bgHex, $newFG); + + if ($newFGBrightDiff >= $this->minBrightDiff && + $newFGColorDiff >= $this->minColorDiff) { + break; + } + } + + return $newFG; + } + + //-------------------------------------------------- + function getMinBrightDiff() + { + return $this->minBrightDiff; + } + function setMinBrightDiff($b, $resetPalette = true) + { + $this->minBrightDiff = $b; + if ($resetPalette) { + $this->setPalette($this->bg[0],$this->fg[0]); + } + } + + //-------------------------------------------------- + function getMinColorDiff() + { + return $this->minColorDiff; + } + function setMinColorDiff($d, $resetPalette = true) + { + $this->minColorDiff = $d; + if ($resetPalette) { + $this->setPalette($this->bg[0],$this->fg[0]); + } + } + + //-------------------------------------------------- + function brightness($hex) + { + // Returns the brightness value for a color, + // a number between zero and 178. + // To allow for maximum readability, the difference between + // the background brightness and the foreground brightness + // should be greater than 125. + + $rgb = $this->hex2RGB($hex); + if (!is_array($rgb)) { + // hex2RGB will raise an error + return false; + } + + return( (($rgb[0] * 299) + ($rgb[1] * 587) + ($rgb[2] * 114)) / 1000 ); + } + + //-------------------------------------------------- + function brightnessDiff($hex1, $hex2) + { + // Returns the brightness value for a color, + // a number between zero and 178. + // To allow for maximum readability, the difference between + // the background brightness and the foreground brightness + // should be greater than 125. + + $b1 = $this->brightness($hex1); + $b2 = $this->brightness($hex2); + if (is_bool($b1) || is_bool($b2)) { + return false; + } + return abs($b1 - $b2); + } + + //-------------------------------------------------- + function colorDiff($hex1, $hex2) + { + // Returns the contrast between two colors, + // an integer between 0 and 675. + // To allow for maximum readability, the difference between + // the background and the foreground color should be > 500. + + $rgb1 = $this->hex2RGB($hex1); + $rgb2 = $this->hex2RGB($hex2); + + if (!is_array($rgb1) || !is_array($rgb2)) { + // hex2RGB will raise an error + return -1; + } + + $r1 = $rgb1[0]; + $g1 = $rgb1[1]; + $b1 = $rgb1[2]; + + $r2 = $rgb2[0]; + $g2 = $rgb2[1]; + $b2 = $rgb2[2]; + + return(abs($r1-$r2) + abs($g1-$g2) + abs($b1-$b2)); + } + +} + +?> diff --git a/wp-content/themes/monotone/footer.php b/wp-content/themes/monotone/footer.php new file mode 100755 index 0000000000000000000000000000000000000000..e8e838a91f97d6797a8096601fc749b255275715 --- /dev/null +++ b/wp-content/themes/monotone/footer.php @@ -0,0 +1,18 @@ + <div id="footer"> + <?php get_sidebar(); ?> + <!-- If you'd like to support WordPress, having the "powered by" link somewhere on your blog is the best way; it's our only promotion or advertising. --> + <p class="info"> + <a href="<?php bloginfo('rss2_url'); ?>"><img src="<?php bloginfo('stylesheet_directory'); ?>/images/rss.png" alt="RSS" /></a> + <a href="http://wordpress.com/" rel="generator">Get a free blog at WordPress.com</a> + <!-- <?php echo get_num_queries(); ?> queries. <?php timer_stop(1); ?> seconds. --> + </p> + <?php include (TEMPLATEPATH . '/searchform.php'); ?> + </div> + + </div> + </div> +</div> + +<?php wp_footer(); ?> +</body> +</html> diff --git a/wp-content/themes/monotone/functions.php b/wp-content/themes/monotone/functions.php new file mode 100755 index 0000000000000000000000000000000000000000..5cfcd6135fdd10f6e6ca2ff82799955539c22a89 --- /dev/null +++ b/wp-content/themes/monotone/functions.php @@ -0,0 +1,285 @@ +<?php + +// define widths +define('MIN_WIDTH', 560); +define('MAX_WIDTH', 840); + +function partial($file) { include $file.'.php'; } + +// filters and actions +add_action('wp_head', header_function); +add_filter('the_content',image_scrape); +add_action('publish_post', image_setup); +add_action('publish_page', image_setup); + +function header_function() { + global $vertical; + if(!is_single() && is_home() && !is_archive()) query_posts("what_to_show=posts&posts_per_page=1"); + if(!is_archive() && !is_search()) : ?> + <style type="text/css" media="screen"> + <?php + while ( have_posts() ) : the_post(); + // ececute the specific stylesheet + print_stylesheet(); + // determine if an image is vertical or not + if(is_vertical(the_image_url(true))) { $vertical = true; } + endwhile; rewind_posts(); ?> + </style> + <?php endif; +} + +// remove image tag from post_content for display +function image_scrape($entry) { + // don't scrape the image for the feed + if (is_feed()) { return $entry; } + + //remove image tag + $entry = preg_replace('/<img [^>]*src=(\"|\').+?(\1)[^>]*\/*>/','', $entry); + + //remove any empty tags left by the scrape. + $entry = str_replace('<p> </p>', '', $entry); + $entry = preg_replace( '|<([a-z]+)[^>]*>\s*</\1>|i', '', $entry ); + $entry = preg_replace( '|<([a-z]+)[^>]*>\s*</\1>|i', '', $entry ); + $entry = preg_replace( '|<([a-z]+)[^>]*>\s*</\1>|i', '', $entry ); + return $entry; +} + +// this resets post meta +function reset_colors($post) { + delete_post_meta($post->ID, 'image_md5'); + delete_post_meta($post->ID, 'image_url'); + delete_post_meta($post->ID, 'image_size'); + delete_post_meta($post->ID, 'image_tag'); + + delete_post_meta($post->ID, 'image_color_base'); + delete_post_meta($post->ID, 'image_colors'); + delete_post_meta($post->ID, 'image_colors_bg'); + delete_post_meta($post->ID, 'image_colors_fg'); +} + +function image_setup($postid) { + global $post; + $post = get_post($postid); + + // get url + if ( !preg_match('/<img ([^>]*)src=(\"|\')(.+?)(\2)([^>\/]*)\/*>/', $post->post_content, $matches) ) { + reset_colors($post); + return false; + } + + // url setup + $post->image_url = $matches[3]; + + if ( !$post->image_url = preg_replace('/\?w\=[0-9]+/','', $post->image_url) ) + return false; + + $post->image_url = clean_url( $post->image_url, 'raw' ); + $previous_md5 = get_post_meta($post->ID, 'image_md5', true); + $previous_url = get_post_meta($post->ID, 'image_url', true); + + if ( ( md5($post->image_tag) != $previous_md5 ) or ( $post->image_url != $previous_url ) ) { + reset_colors($post); + + add_post_meta($post->ID, 'image_url', $post->image_url); + add_post_meta($post->ID, 'image_md5', md5($post->image_tag)); + + //image tag setup + $extra = $matches[1].' '.$matches[5]; + $extra = preg_replace('/width=(\"|\')[0-9]+(\1)/','', $extra); + $extra = preg_replace('/height=(\"|\')[0-9]+(\1)/','', $extra); + $width = (is_vertical($post->image_url)) ? MIN_WIDTH : MAX_WIDTH; + + + delete_post_meta($post->ID, 'image_tag'); + add_post_meta($post->ID, 'image_tag', '<img src="'.$post->image_url.'?w='.$width.'" '.$extra.' />'); + + // get colors + get_all_colors($post); + return false; + } + + return true; +} + +function is_vertical($url) { + if(preg_match('/(jpg|jpeg|jpe|JPEG|JPG|png|PNG|gif|GIF)/',$url)) { + global $post; + $size = get_post_meta($post->ID, 'image_size', true); + if ( !$size ) { + $size = getimagesize($url); + add_post_meta($post->ID, 'image_size', $size); + } + $post->image_width = $size[0]; + if($size) { + if($size[0] == $size[1]) return true; + if($size[0] < $size[1]) return true; + if($size[0] < MIN_WIDTH) return true; + } + return false; + } + return false; +} + +function the_image($return = null) { + global $post; + $tag = get_post_meta($post->ID, 'image_tag', true); + if(!$tag) { + image_setup($post->ID); + $tag = get_post_meta($post->ID, 'image_tag', true); + } + $tag = preg_replace('/width=(\"|\')[0-9]+(\1)/','', $tag); + $tag = preg_replace('/height=(\"|\')[0-9]+(\1)/','', $tag); + if($return) return $tag; /*else*/ echo $tag; +} + +function the_image_url($return = null) { + global $post; + $tag = get_post_meta($post->ID, 'image_url', true); + if(!$tag) { + image_setup($post->ID); + $tag = get_post_meta($post->ID, 'image_url', true); + } + if($return) return $tag; /*else*/ echo $tag; +} + +function the_thumbnail() { + global $post; + $src = preg_replace('/\?w\=[0-9]+/','?w=125', the_image(true)); + $src = '<div class="image thumbnail">'.$src.'</div>'; + echo $src; +} + +function get_all_colors($post) { + //pull from DB + $base->bg = get_post_meta($post->ID, 'image_colors_bg',true); + $base->fg = get_post_meta($post->ID, 'image_colors_fg',true); + + // show return variable if full + if($base->bg != '' && $base->fg != '') { + return $base; + } else { + // else, get the colors + include_once("csscolor.php"); + $base = new CSS_Color(base_color($post)); + //set bg + $bg = $base->bg; + //set fg + $fg = $base->fg; + if( add_post_meta($post->ID, 'image_colors_bg', $bg, false) + && add_post_meta($post->ID, 'image_colors_fg', $fg, false)) return $base; + } +} + +function print_stylesheet() { + global $post; + $color = get_all_colors($post); + ?> + #page { + background-color:#<?php echo $color->bg['-1']; ?>; + color:#<?php echo $color->fg['-2']; ?>; + } + + a,a:link, a:visited { + color: #<?php echo $color->fg['-3']; ?>; + } + + a:hover, a:active { + color: #<?php echo $color->bg['+2']; ?>; + } + + h1, h1 a, h1 a:link, h1 a:visited, h1 a:active { + color: #<?php echo $color->fg['0']; ?>; + } + h1 a:hover { + color:#<?php echo $color->bg['+2']; ?>; + } + .navigation a, .navigation a:link, + .navigation a:visited, .navigation a:active { + + color: #<?php echo $color->fg['0']; ?>; + } + h1:hover, h2:hover, h3:hover, h4:hover, h5:hover h6:hover, + .navigation a:hover { + color:#<?php echo $color->fg['-2']; ?>; + } + + .description, + h3#respond, + #comments, + h2, h2 a, h2 a:link, h2 a:visited, h2 a:active, + h3, h3 a, h3 a:link, h3 a:visited, h3 a:active, + h4, h4 a, h4 a:link, h4 a:visited, h4 a:active, + h5, h5 a, h5 a:link, h5 a:visited, h5 a:active, + h6, h6 a, h6 a:link, h6 a:visited, h6 a:active { + /* Use the corresponding foreground color */ + color: #<?php echo $color->fg['-1']; ?>; + border-color: #<?php echo $color->bg['+3']; ?>; + border-bottom: #<?php echo $color->bg['+3']; ?>; + } + + #postmetadata, #commentform p, .commentlist li, #post, #postmetadata .sleeve, #post .sleeve, + #content { + color: #<?php echo $color->fg['-2']; ?>; + border-color: #<?php echo $color->fg['-2']; ?>; + } <?php +} + +function base_color($post) { + + $url = get_post_meta($post->ID, 'image_url', true); + + // get the image name + $imgname = trim($url); + + // create a working image + $im = imagecreatefromjpeg($imgname); + + $height = imagesy($im); + $top = $height - 400; + $width = imagesx($im); + + // sample five points in the image, based on rule of thirds and center + $rgb = array(); + + $topy = round($height / 3); + $bottomy = round(($height / 3) * 2); + $leftx = round($width / 3); + $rightx = round(($width / 3) * 2); + $centery = round($height / 2); + $centerx = round($width / 2); + + $rgb[1] = imagecolorat($im, $leftx, $topy); + $rgb[2] = imagecolorat($im, $rightx, $topy); + $rgb[3] = imagecolorat($im, $leftx, $bottomy); + $rgb[4] = imagecolorat($im, $rightx, $bottomy); + $rgb[5] = imagecolorat($im, $centerx, $centery); + + // extract each value for r, g, b + $r = array(); + $g = array(); + $b = array(); + $hex = array(); + + $ct = 0; $val = 50; + + // process points + for ($i = 1; $i <= 5; $i++) { + $r[$i] = ($rgb[$i] >> 16) & 0xFF; + $g[$i] = ($rgb[$i] >> 8) & 0xFF; + $b[$i] = $rgb[$i] & 0xFF; + + // find darkest color + $tmp = $r[$i] + $g[$i] + $b[$i]; + + if ($tmp < $val) { + $val = $tmp; + $ct = $i; + } + $hex[$i] = rgbhex($r[$i],$g[$i],$b[$i]); + } + return $hex[3]; +} + +function rgbhex($red, $green, $blue) { return sprintf('%02X%02X%02X', $red, $green, $blue); } + +?> diff --git a/wp-content/themes/monotone/header.php b/wp-content/themes/monotone/header.php new file mode 100755 index 0000000000000000000000000000000000000000..af2e268e5002f91d3c57fd329092de3cacae0197 --- /dev/null +++ b/wp-content/themes/monotone/header.php @@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> + +<head profile="http://gmpg.org/xfn/11"> +<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> + +<title><?php wp_title('«', true, 'right'); ?> <?php if ( is_single() ) { ?> Blog Archive « <?php } ?><?php bloginfo('name'); ?></title> + +<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- leave this for stats --> + +<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" /> +<link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>" /> +<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" /> + +<!--[if IE]> +<style type="text/css"> + body { font-size:12px; } +</style> +<![endif]--> + +<?php wp_head(); ?> +</head> +<body<?php +global $vertical; +//set vertical class or archive class, if needed +if($vertical && !is_archive() && !is_search()) { echo ' class="vertical"'; } +if(is_archive() or is_search()) echo ' class="archive"'; +?>> + +<div id="page"> + +<div id="header"> + <h1><a href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1> + <div class="description"><?php bloginfo('description'); ?></div> + + <ul id="menu"> + <li><a href="<?php bloginfo('url'); ?>/<?php echo mysql2date('Y', get_lastpostdate('blog')); ?>/">archive</a></li> + <li><a href="<?php bloginfo('url'); ?>/about/">about</a></li> + </ul> +</div> + +<div id="content"> + <div class="sleeve"> diff --git a/wp-content/themes/monotone/htaccess.txt b/wp-content/themes/monotone/htaccess.txt new file mode 100644 index 0000000000000000000000000000000000000000..40057c36f5cded6a19e32e94e115f682645ef60d --- /dev/null +++ b/wp-content/themes/monotone/htaccess.txt @@ -0,0 +1,14 @@ +RewriteEngine On +RewriteCond %{QUERY_STRING} ^.*(w|h|f)\=.*$ +RewriteRule ^(wp\-content\/uploads\/.*\.)(jpg|JPG|jpeg|png|PNG|gif|GIF)$ /thumb.php?image=$1$2 [QSA,L] + +# BEGIN WordPress +<IfModule mod_rewrite.c> +RewriteEngine On +RewriteBase / +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /index.php [L] +</IfModule> + +# END WordPress diff --git a/wp-content/themes/monotone/images/rss.png b/wp-content/themes/monotone/images/rss.png new file mode 100755 index 0000000000000000000000000000000000000000..9d8e3e23c8f6eef532efb6046559578b7d8a1103 Binary files /dev/null and b/wp-content/themes/monotone/images/rss.png differ diff --git a/wp-content/themes/monotone/index.php b/wp-content/themes/monotone/index.php new file mode 100755 index 0000000000000000000000000000000000000000..1eb22216de1c8bdc98eb71f12c1d6bcfd5027e50 --- /dev/null +++ b/wp-content/themes/monotone/index.php @@ -0,0 +1,27 @@ +<?php get_header(); ?> + +<?php if (have_posts()) : while (have_posts()) : the_post(); ?> + <?php $wp_query->is_single = 1; + if(is_home()) $wp_query->is_single = 0; ?> + <div class="image"> + <div class="nav prev"><?php next_post_link('%link','‹') ?></div> + <?php the_image(); ?> + <div class="nav next"><?php if(is_home()) $wp_query->is_single = 1; previous_post_link('%link','›'); if(is_home()) $wp_query->is_single = 0; ?></div> + </div> + <?php partial('post'); ?> + +<?php endwhile; else : ?> + + <h2>Not Found</h2> + <p>Sorry, but you are looking for something that isn't here.</p> + <?php include (TEMPLATEPATH . "/searchform.php"); ?> +<?php endif; ?> + +<?php $wp_query->is_single = 1; ?> + +<div class="navigation"> + <div class="prev"><?php next_post_link('%link', '&lsaquo' ) ?></div> + <div class="next"><?php previous_post_link('%link','›') ?></div> +</div> + +<?php get_footer(); ?> diff --git a/wp-content/themes/monotone/page.php b/wp-content/themes/monotone/page.php new file mode 100755 index 0000000000000000000000000000000000000000..5365aa98bcabe7790ee9d971383b05d8a74a630d --- /dev/null +++ b/wp-content/themes/monotone/page.php @@ -0,0 +1,14 @@ +<?php get_header(); ?> +<?php if (have_posts()) : while (have_posts()) : the_post(); ?> + <div class="image"> + <div class="nav prev"><?php next_post_link('%link','‹') ?></div> + <?php the_image(); ?> + <div class="nav next"><?php if(is_home()) $wp_query->is_single = 1; previous_post_link('%link','›'); if(is_home()) $wp_query->is_single = 0; ?></div> + </div> + <?php partial('post'); ?> +<?php endwhile; else : ?> + <h2 class="center">Not Found</h2> + <p class="center">Sorry, but you are looking for something that isn't here.</p> + <?php include (TEMPLATEPATH . "/searchform.php"); ?> +<?php endif; ?> +<?php get_footer(); ?> \ No newline at end of file diff --git a/wp-content/themes/monotone/post.php b/wp-content/themes/monotone/post.php new file mode 100755 index 0000000000000000000000000000000000000000..8feccb8ef32a26f93c89bb65ae8d1b3f7bbe1396 --- /dev/null +++ b/wp-content/themes/monotone/post.php @@ -0,0 +1,28 @@ +<div id="container"> +<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> + +<div id="postmetadata"> + <div class="sleeve"> + <p>By: <cite><?php the_author(); ?></cite></p> + <p><small><a href="<?php echo get_month_link(get_the_time('Y'), get_the_time('m')); ?>"><?php the_time('M d Y') ?></a></small></p> + <p><?php the_tags('tags: ', ', ', '<br />'); ?></p> + + <p>Category: <?php the_category(', ') ?></p> + <p><?php edit_post_link('Edit This Post', '', ''); ?></p> + <p><?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p> + </div> +</div> +<div id="post"> + <div class="sleeve"> + <?php the_content('Read the rest of this entry »'); ?> + </div> +</div> + +<?php if(is_single()) { ?> +<div class="navigation"> + <div class="prev"><?php next_post_link('%link', '‹') ?></div> + <div class="next"><?php previous_post_link('%link', '›') ?></div> +</div> +<?php comments_template(); +} ?> +</div> \ No newline at end of file diff --git a/wp-content/themes/monotone/rtl.css b/wp-content/themes/monotone/rtl.css new file mode 100755 index 0000000000000000000000000000000000000000..daa5bbacf8892901c4a4a390d0af4c0c0be54699 --- /dev/null +++ b/wp-content/themes/monotone/rtl.css @@ -0,0 +1,78 @@ +/* Based on Arabic (RTL) version of Kubrick theme, converted by Serdal (Serdal.com) */ + +.narrowcolumn, .alignleft, .widecolumn .smallattachment { float: right; } +.alignright, #commentform #submit { float: left; } + +#page, .post, #wp-calendar #prev a { text-align: right; } + +body, #commentform p { font-family: 'Geeza Pro', Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } + +small { font-family: 'Geeza Pro', Tahoma, Arial, Helvetica, Sans-Serif; } + +h1, h2, h3 { font-family: 'Al Bayan', 'Traditional Arabic', 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; } + +#sidebar h2 { font-family: 'Al Bayan', 'Traditional Arabic', 'Lucida Grande', Verdana, Sans-Serif; } + +.commentlist li, #commentform input, #commentform textarea { font-family: 'Geeza Pro', Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } + +#sidebar { font-family: 'Geeza Pro', Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } + +#wp-calendar caption { font-family: 'Geeza Pro', Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } + +acronym, abbr, span.caps { letter-spacing: normal; } + +#header { margin: 0 1px 0 0; } + +.narrowcolumn { padding: 0 45px 20px 0; } + +.widecolumn { margin: 5px 150px 0 0; } + +.widecolumn .smallattachment { margin: 5px 0px 5px 5px; } + +.postmetadata { clear: right; } + +img.alignright { margin: 0 7px 2px 0; } + +img.alignleft { margin: 0 0 2px 7px; } + +.entry ol { padding: 0 35px 0 0; } + +#sidebar ul ul, #sidebar ul ol { margin: 5px 10px 0 0; } + +#sidebar ul ul ul, #sidebar ul ol { margin: 0 10px 0 0; } + +#commentform input { margin: 5px 0 1px 5px; } + +.commentlist p { margin: 10px 0 10px 5px; } + +html>body .entry li { margin: 7px 10px 8px 0; } + +html>body .entry ul { + margin-left: auto; + margin-right: 0px; + padding: 0 30px 0 0; +} + +#sidebar { + margin-left: auto; + margin-right: 545px; +} + +#wp-calendar #prev a, html>body .entry ul { + padding-left: 0; + padding-right: 10px; +} + +blockquote { + border-left: 0; + border-right: 5px solid #ddd; + padding-left: 0; + padding-right: 20px; + margin: 15px 10px 0 30px; +} + +#wp-calendar #next a { + padding-right: 0; + padding-left: 10px; + text-align: left; +} diff --git a/wp-content/themes/monotone/screenshot.png b/wp-content/themes/monotone/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e8ba243671d2895ad569a03642dcdbed8730f0 Binary files /dev/null and b/wp-content/themes/monotone/screenshot.png differ diff --git a/wp-content/themes/monotone/search.php b/wp-content/themes/monotone/search.php new file mode 100755 index 0000000000000000000000000000000000000000..6e39b553eef5c700c2c9326bd6bca2ce3d02df87 --- /dev/null +++ b/wp-content/themes/monotone/search.php @@ -0,0 +1,32 @@ +<?php get_header(); rewind_posts(); ?> +<div class="search"> + + <?php if (have_posts()) : ?> + <h2>Search Results</h2> + <div class="nav"> + <div class="prev"><?php next_posts_link('« Older Entries') ?></div> + <div class="next"><?php previous_posts_link('Newer Entries »') ?></div> + </div> + <ul class="thumbnails"> + <?php while (have_posts()) : the_post(); ?> + + <li id="post-<?php the_ID(); ?>"> + <a href="<?php the_permalink() ?>" title="Link to <?php the_title_attribute(); ?>"><?php the_thumbnail(); ?></a> + </li> + + <?php endwhile; ?> + </ul> + <div class="nav"> + <div class="prev"><?php next_posts_link('« Older Entries') ?></div> + <div class="next"><?php previous_posts_link('Newer Entries »') ?></div> + </div> + + <?php else : ?> + + <h2>Not Found</h2> + <?php include (TEMPLATEPATH . '/searchform.php'); ?> + + <?php endif; ?> +</div> + +<?php get_footer(); ?> diff --git a/wp-content/themes/monotone/searchform.php b/wp-content/themes/monotone/searchform.php new file mode 100755 index 0000000000000000000000000000000000000000..22820834f5e45354264f2d78b915192833ee174a --- /dev/null +++ b/wp-content/themes/monotone/searchform.php @@ -0,0 +1,5 @@ +<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/"> +<div><input type="text" value="<?php the_search_query(); ?>" name="s" id="s" /> +<input type="submit" id="searchsubmit" value="Search" /> +</div> +</form> diff --git a/wp-content/themes/monotone/sidebar.php b/wp-content/themes/monotone/sidebar.php new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/wp-content/themes/monotone/single.php b/wp-content/themes/monotone/single.php new file mode 100755 index 0000000000000000000000000000000000000000..82391eecf82db68ecfaf6d4fcaac069347b768aa --- /dev/null +++ b/wp-content/themes/monotone/single.php @@ -0,0 +1,15 @@ +<?php get_header(); ?> +<?php if (have_posts()) : while (have_posts()) : the_post(); ?> + <div class="image"> + <div class="nav prev"><?php next_post_link('%link') ?></div> + <?php the_image(); ?> + <div class="nav next"><?php previous_post_link('%link') ?></div> + </div> + + <?php partial('post'); ?> +<?php endwhile; else : ?> + <h2 class="center">Not Found</h2> + <p class="center">Sorry, but you are looking for something that isn't here.</p> + <?php include (TEMPLATEPATH . "/searchform.php"); ?> +<?php endif; ?> +<?php get_footer(); ?> diff --git a/wp-content/themes/monotone/style.css b/wp-content/themes/monotone/style.css new file mode 100755 index 0000000000000000000000000000000000000000..c48d21b31a8b064e9e836d4133a238d453df4006 --- /dev/null +++ b/wp-content/themes/monotone/style.css @@ -0,0 +1,146 @@ +/* +Theme Name:Monotone +Theme URI:http://monotonedemo.wordpress.com/ +Description:A photo blogging theme. Colors change to match the photo. +Version:1.1 +Author:Noel Jackson / eight6 +Author URI:http://eight6.com +Tags:photoblogging,one column,fixed width,custom colors +*/ +/* -------------------------------------------------------------- +* Resets default browser CSS. +Based on work by Eric Meyer:* meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/ +-------------------------------------------------------------- */ +html,body,div,span,applet,object,iframe, +h1,h2,h3,h4,h5,h6,p,blockquote,pre, +a,abbr,acronym,address,big,cite,code, +del,dfn,em,font,img,ins,kbd,q,s,samp, +small,strike,strong,sub,sup,tt,var, +dl,dt,dd,ol,ul,li, +fieldset,form,label,legend, +table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;} +/* remember to define focus styles! */ +:focus{outline:0;} +body{line-height:1;color:black;background:white;} +ol,ul{list-style:none;} +/* tables still need 'cellspacing="0"' in the markup */ +table{border-collapse:separate;border-spacing:0;} +caption,th,td{text-align:left;font-weight:normal;} +blockquote:before,blockquote:after, +q:before,q:after{content:"";} +blockquote,q{quotes:"" "";} +/* Tables still need 'cellspacing="0"' in the markup. */ +table{border-collapse:separate;border-spacing:0;} +caption,th,td{text-align:left;font-weight:400;} +/* Remove possible quote marks (") from <q>,<blockquote>. */ +blockquote:before,blockquote:after,q:before,q:after{content:"";} +blockquote,q{quotes:"" "";} +a img{border:none;} +/************* END RESET RELOADED *************************/ +body{font:normal 75%/1.6em "Lucida Sans","Lucida Grande","Trebuchet MS",Georgia,Helvetica,sans-serif;color:#444;background-color:white;} +a,a:link,a:visited,a:active{color:#333;text-decoration:none;} +a:hover{color:#666;} +h1,h2,h3,h4,h5,h6{ font-family:"Lucida Fax",Georgia,Helvetica,sans-serif; } +h2{ font-size:1.5em;line-height:1;font-weight:bold;margin-bottom:.25em;color #333; } +h2,h2 a,h2 a:link,h2 a:visited,h2 a:active{ color:#6c6c6c;font-weight:bold;text-decoration:none;letter-spacing:-.02em; } +h2 a:hover{} +h3{line-height:1em;padding-bottom:5px;font-size:1.2em;font-weight:bold;color:#6e6e6e;} +h4{} +ul, dl, ol { margin-left: 20px; } +li { list-style: square; } +strong{font-weight:bold;} +blockquote,em, cite, q {font-style:italic;} +/* Structure */ +#page{width:840px;margin:0px auto 35px auto;background-color:white;} +.archive #page{width:820px;} +.vertical #page{width:560px;} +/* Header */ +#header{clear:both;} +h1{font-size:1.5em;line-height:2.666em;float:left;letter-spacing:-.02em;margin-left:10px;} +h1 a,h1 a:link,h1 a:visited,h1 a:active{color:#333;text-decoration:none;font-weight:bold;} +h1 a:hover{} +.archive h1{margin-left:0;} +.description{float:left;line-height:4em;margin-left:1em;font-style:italic;padding-left:1em;color:#444;} +#menu{float:right;margin-right:10px;} +.archive #menu{margin-right:0;} +#menu li{display:block;float:left;} +#menu li a,#menu li a:link,#menu li a:visited,#menu li a:active{height:4em;line-height:4em;display:block;float:left;font-weight:normal;letter-spacing:normal;margin-left:10px;text-transform:uppercase;} +#menu li.first a{border-left:0;} + +/* Content */ +#content{clear:both;} +#content .sleeve{margin:0;} +.vertical #container{clear:both;margin:0 0 0 10px;} +#content h2{color:#333;margin-left:210px;margin-top:10px;} +.archive #content h2{margin-left:0;margin-bottom:10px;} +.image{float:left;text-align:center;position:relative;width:840px;} +.image img{margin:0;padding:0 0 10px 0;} +.vertical .image{width:560px;clear:both;float:none;} +.thumbnails{margin:0 auto;width:860px;margin-left:-5px;clear:both;} +.thumbnails li{float:left;display:block;width:133px;height:85px;margin-left:5px;margin-bottom:5px;list-style:none;} +a .thumbnail,a:link .thumbnail,a:visited .thumbnail,a:active .thumbnail{float:left;display:block;width:133px;height:85px;background:#c4c4c4;text-align:left;} +a:hover .thumbnail{background:#919191;} +.thumbnail{float:left;display:block;width:133px;height:85px;} +.thumbnail img{max-width:123px;margin:5px 5px 0 5px;padding:0 0 5px 0;max-height:75px;border:0;} +#container{clear:both;margin:0 0 0 10px;padding-top:5px;} + +/* Post Layout */ +#post{float:left;margin:0 20px 0 0;width:340px;border-top:1px solid #ccc;font-size:1.1em;} +.vertical #post{margin:0;} +#post .sleeve{border-top:2px solid #ccc;padding:10px;display:block;position:none;} +#postmetadata .sleeve{padding:10px;} +#postmetadata,.commentlist li .metadata{font-size:.92em;line-height:1.45em;width:200px;float:left;border-top:1px solid #ccc;} +#postmetadata cite, +#postmetadata small{clear:both;} +#post p{margin-bottom:1.5em;} +.navigation{font-family:"Courier New","Lucida Grande",Tahoma,"Trebuchet MS",sans-serif;width:260px;font-size:100px;line-height:.5em;float:left;} +.vertical .navigation{margin:0px;width:540px;} +.navigation div{float:left;display:block;width:50%;} +.navigation div.prev{text-align:left;} +.navigation div.next{float:right;text-align:right;} +.vertical .navigation div.prev{text-align:right;} +.vertical .navigation div.next{float:right;text-align:left;} + +/* Comments list */ +.commentlist{clear:both;width:540px;} +.commentlist li{border-bottom:1px solid #ccc;} +.commentlist li .metadata{border:0;margin:10px 0;width:148px;float:left;} +.commentlist li .gravatar{float:left;width:32px;margin:10px;} +.commentlist li cite, +.commentlist li small{font-weight:bold;clear:both;display:block;} +.commentlist li .content{padding:10px;float:left;clear:right;width:287px;} +.commentlist li .clear{clear:both;} +#content .commentlist .comment p{font-weight:normal ;} + +/* Comment Form */ +h3#respond,h3#comments{width:530px;margin:0;padding:0 0 5px 10px;clear:both;border-bottom:1px solid #afb1b2;padding-top:20px;} +#comments{border-bottom:2px solid #afb1b2;} +#commentform{width:540px;margin-bottom:10px;} +#commentform p{padding:10px;} +#commentform small{display:inline;} +#commentform .sleeve{margin:10px;} +#commentform label{width:200px;display:block;float:left;font-size:.96em;line-height:2em;} +#commentform label{margin:0px;margin-bottom:10px;} +#commentform p input{float:left;margin:0;border:none;width:310px;padding:3px;margin-bottom:10px;} +#commentform input#submit{width:15em;height:2em;margin-left:10px;} +#commentform textarea,#commentform input{font-family:"Lucida Grande",Tahoma,"Trebuchet MS";font-size:1.2em;} +#commentform p{clear:both;border-top:1px solid #ccc;line-height:1.6em;} +#commentform textarea{:10px;width:520px;} + +/* Footer */ +#footer{clear:both;height:42px;padding-top:20px;margin:0px 10px 0px 10px;width:820px;} +.archive #footer{margin:0;} +.vertical #footer{width:540px;} +#footer .info{clear:both;float:left;width:50%;height:32px;display:block;line-height:32px;position:relative;padding-left:42px;} +#footer .info img{position:absolute;margin-left:-42px;} +#searchform{float:right;} +#searchform #s{width:150px;} +.archive{margin:0 auto;} +#filters{clear:both;height:2em;margin-bottom:1em; margin-left: 0;} +#filters li{ list-style: none; margin-left: 0; float:left;margin-right:2em;} +a:hover .nav_over{background-color:#afb1b2;} +.image .nav{position:absolute;width:50%;height:100%;z-index:1000;} +.image .nav a,.image .nav a:link,.image .nav a:visited,.image .nav a:active{width:100%;height:100%;display:block;position:absolute;text-indent:-1000em;} +.prev{left:0;width:50%;} +.next{top:0;left:50%;width:50%;} +.nav_over{position:absolute;top:50%;margin-top:-1em;display:block;z-index:1000;color:#fff;width:1em;height:1em;line-height:1em;text-align:center;font-size:2em;} diff --git a/wp-content/themes/monotone/thumb.php b/wp-content/themes/monotone/thumb.php new file mode 100755 index 0000000000000000000000000000000000000000..a418cb397890408eecfc4f87701e00ce3d7a9b71 --- /dev/null +++ b/wp-content/themes/monotone/thumb.php @@ -0,0 +1,183 @@ +<?php +/* +Thumby v 0.1, GPL 2, http://eight6.com/projects/thumby/ + +Created by Noel Jackson (http://eight6.com) for PhotoStack (http://photostack.org). + +A simple class that creates and caches a thumbnail of the specified size for the specified image. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +$cache = $_SERVER['DOCUMENT_ROOT'].'/cache/'; + +$image_request = $_REQUEST['image']; +if(get_magic_quotes_gpc()) $image_request = stripslashes($_REQUEST['image']); + +new Thumby($image_request, $cache, (int) $_REQUEST["w"], (int) ($_REQUEST["h"]), isset($_REQUEST['f']) ); + +class Thumby { + +function not_found() { + header("HTTP/1.0 404 Not Found"); + echo 'File not found.'; + exit; +} + +function Thumby($image, $pathto_cache, $max_width = 1200, $max_height = 1200, $force_size = 0) { + if($force_size = '') $force_size = 0; + if($max_width == 0) $max_width = 1200; + if($max_height == 0) $max_height = 1200; + + // If you know what you're doing, you can set this to "im" for ImageMagick, make sure to change $convert_path below + $software = 'gd'; + $gal_path = $_SERVER['DOCUMENT_ROOT']; + $ext = strtolower(pathinfo($image, PATHINFO_EXTENSION)); + $extensions = explode(",", 'jpg,jpe,jpeg,png,gif'); + $image_path = $gal_path.'/'.$image; + + if( strpos($image, './') or !in_array($ext, $extensions) or !file_exists($image_path)) + $this->not_found(); + + $thumb_path = $pathto_cache.$max_width."x".$max_height.($force_size?"f":"").strtr("-$gallery-$image",":/?\\","----"); + $imageModified = @filemtime($image_path); + $thumbModified = @filemtime($thumb_path); + + switch($ext) { + case 'gif' : header("Content-type: image/gif"); break; + case 'png' : header("Content-type: image/png"); break; + default: header("Content-type: image/jpeg"); break; + } + //if thumbnail is newer than image then output cached thumbnail and exit + if($imageModified<$thumbModified) { + header("Last-Modified: ".gmdate("D, d M Y H:i:s",$thumbModified)." GMT"); + readfile($thumb_path); + exit; + } else { + $this->make_thumb($image_path, $thumb_path, $max_width, $max_height, $force_size); + } +} + +function make_thumb($image_path, $thumb_path, $max_width = 1200, $max_height = 1200, $force_size, $software="gd2", $convert_path = null) { + + $convert_path = '/opt/local/bin/convert'; + + $thumbQuality = 95; + list($image_width, $image_height, $image_type) = GetImageSize($image_path); + + //if aspect ratio is to be constrained set crop size + if($force_size) { + $newAspect = $max_width/$max_height; + $oldAspect = $image_width/$image_height; + + if($newAspect > $oldAspect) { + $cropWidth = $image_width; + $cropHeight = round($oldAspect/$newAspect * $image_height); + } else { + $cropWidth = round($newAspect/$oldAspect * $image_width); + $cropHeight = $image_height; + } + //else crop size is image size + } else { + $cropWidth = $image_width; + $cropHeight = $image_height; + } + + //set cropping offset + $cropX = floor(($image_width-$cropWidth)/2); + $cropY = floor(($image_height-$cropHeight)/2); + + //compute width and height of thumbnail to create + if($cropWidth >= $max_width && ($cropHeight < $max_height || ($cropHeight > $max_height && round($cropWidth/$cropHeight * $max_height) > $max_width))) { + $thumbWidth = $max_width; + $thumbHeight = round($cropHeight/$cropWidth * $max_width); + } elseif($cropHeight >= $max_height) { + $thumbWidth = round($cropWidth/$cropHeight * $max_height); + $thumbHeight = $max_height; + } else { + //image is smaller than required dimensions so output it and exit + readfile($image_path); + exit; + } + + switch($software) { + case "im" : //use ImageMagick + // hack for square thumbs; + if(($thumbWidth == $thumbHeight) or $force_size) { + $thumbsize = $thumbWidth; + if($image_height > $image_width) { + $cropY = -($thumbsize / 2); + $cropX = 0; + $thumbcommand = "{$thumbsize}x"; + } else { + $cropY = -($thumbsize / 2); + $cropX = 0; + $thumbcommand = "x{$thumbsize}"; + } + } else { + $thumbcommand = $thumbWidth.'x'.$thumbHeight; + } + $cmd = '"'.$convert_path.'"'; + if($force_size) $cmd .= " -gravity center -crop {$thumbWidth}x{$thumbHeight}!+0+0"; + $cmd .= " -resize {$thumbcommand}"; + if($image_type == 2) $cmd .= " -quality $thumbQuality"; + $cmd .= " -interlace Plane"; + $cmd .= ' +profile "*"'; + $cmd .= ' '.escapeshellarg($image_path).' '.escapeshellarg($thumb_path); + exec($cmd); + readfile($thumb_path); + exit; + break; + + case "gd2" : + default : //use GD by default + //read in image as appropriate type + switch($image_type) { + case 1 : $image = ImageCreateFromGIF($image_path); break; + case 3 : $image = ImageCreateFromPNG($image_path); break; + case 2 : + default: $image = ImageCreateFromJPEG($image_path); break; + } + + //create blank truecolor image + $thumb = ImageCreateTrueColor($thumbWidth,$thumbHeight); + + //resize image with resampling + ImageCopyResampled( $thumb, $image, 0, 0, $cropX, $cropY, $thumbWidth, $thumbHeight, $cropWidth, $cropHeight); + + //set image interlacing + ImageInterlace($thumb, $this->config->progressive_thumbs); + + //output image of appropriate type + switch($image_type) { + case 1 : + //GIF images are output as PNG + case 3 : + ImagePNG($thumb,$thumb_path); + break; + case 2 : + default: + ImageJPEG($thumb,$thumb_path,$thumbQuality); + break; + } + ImageDestroy($image); + ImageDestroy($thumb); + readfile($thumb_path); + + } + } +} +?> \ No newline at end of file