From 14fcc22bea87af74a8fadefdb6be4388f82c52f6 Mon Sep 17 00:00:00 2001 From: root <root@rivolta.investici.org> Date: Tue, 7 Dec 2010 02:04:04 +0000 Subject: [PATCH] Add theme monotone --- wp-content/themes/monotone/404.php | 11 + wp-content/themes/monotone/_license.txt | 280 ++++++++++++++ wp-content/themes/monotone/_readme.txt | 19 + wp-content/themes/monotone/archive.php | 75 ++++ wp-content/themes/monotone/comments.php | 114 ++++++ wp-content/themes/monotone/csscolor.php | 423 ++++++++++++++++++++++ wp-content/themes/monotone/footer.php | 18 + wp-content/themes/monotone/functions.php | 285 +++++++++++++++ wp-content/themes/monotone/header.php | 43 +++ wp-content/themes/monotone/htaccess.txt | 14 + wp-content/themes/monotone/images/rss.png | Bin 0 -> 1201 bytes wp-content/themes/monotone/index.php | 27 ++ wp-content/themes/monotone/page.php | 14 + wp-content/themes/monotone/post.php | 28 ++ wp-content/themes/monotone/rtl.css | 78 ++++ wp-content/themes/monotone/screenshot.png | Bin 0 -> 31380 bytes wp-content/themes/monotone/search.php | 32 ++ wp-content/themes/monotone/searchform.php | 5 + wp-content/themes/monotone/sidebar.php | 0 wp-content/themes/monotone/single.php | 15 + wp-content/themes/monotone/style.css | 146 ++++++++ wp-content/themes/monotone/thumb.php | 183 ++++++++++ 22 files changed, 1810 insertions(+) create mode 100755 wp-content/themes/monotone/404.php create mode 100644 wp-content/themes/monotone/_license.txt create mode 100644 wp-content/themes/monotone/_readme.txt create mode 100755 wp-content/themes/monotone/archive.php create mode 100755 wp-content/themes/monotone/comments.php create mode 100755 wp-content/themes/monotone/csscolor.php create mode 100755 wp-content/themes/monotone/footer.php create mode 100755 wp-content/themes/monotone/functions.php create mode 100755 wp-content/themes/monotone/header.php create mode 100644 wp-content/themes/monotone/htaccess.txt create mode 100755 wp-content/themes/monotone/images/rss.png create mode 100755 wp-content/themes/monotone/index.php create mode 100755 wp-content/themes/monotone/page.php create mode 100755 wp-content/themes/monotone/post.php create mode 100755 wp-content/themes/monotone/rtl.css create mode 100644 wp-content/themes/monotone/screenshot.png create mode 100755 wp-content/themes/monotone/search.php create mode 100755 wp-content/themes/monotone/searchform.php create mode 100755 wp-content/themes/monotone/sidebar.php create mode 100755 wp-content/themes/monotone/single.php create mode 100755 wp-content/themes/monotone/style.css create mode 100755 wp-content/themes/monotone/thumb.php diff --git a/wp-content/themes/monotone/404.php b/wp-content/themes/monotone/404.php new file mode 100755 index 000000000..01a8e8a61 --- /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 000000000..b5fcfa6e7 --- /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 000000000..96020832a --- /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 000000000..9e96191fd --- /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 000000000..e7997fca9 --- /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 000000000..9155b2667 --- /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 000000000..e8e838a91 --- /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 000000000..5cfcd6135 --- /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 000000000..af2e268e5 --- /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 000000000..40057c36f --- /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 GIT binary patch literal 1201 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}k|nMYCBgY=CFO}lsSJ)O z`AMk?p1FzXsX?iUDV2pMQ*9U+Sb{xW978H@?Fql>rR*rO*Yj5Do!*Y<7zcL25|P?Y zX^oDiCVsvjX8+pmKREtlS+l{Z7tIm@@;wWZ0s<ckeYf4=KX<jL)>YZu^hYrot0u2o zSN!VE(p54`ZajGKz<m1Yt8*t!dSuAc{3w&3pTDHISh%L9=8vU`$&=~-t>YT^cf6}E zE8AvnYAVY7^54IIsSSr6{gzLzzWL>Tne>}4UqsHT%eAvk-0*qoiT*!-YV_IW&Y5%J z?%lh~8y1)EzRRMcBk_Ny!tRL5?GxJa^79unJmS^6y}H_#mzUR(*{=Of#7>qIr%ow3 zcFot<)7x>BS?1f9FGqMKlJ1o;GqTTL&9HUr)+?7T35mMgzJ0r-qQc|!>C+`8C13m> zWEeF5z1kqdVG)|9t*xi`EG$0$e3y=n&V^H_xQ?H8KbXo~#^U?^WAwC%6CKyCU29@s z;80pxTF<H%T5znZ%zE0CDK2Nvp1pGa{`n<#OnnQU>%4gJ;>ES_4VyPR+s*Hnp7*f0 zrs2RAqlezB)~s2wd9$&Vz5RC9zJEV|-t=(@fAs0oB&US}tW1obe*fi}G<){x)#1J= z!c(VDzkKzoX!;b{g2_zpmrB{$*x4;RdeoKg&YnFsY+-BHtm$bMk^C%XQMHaU%<#gE z8y<1%r>i$H6&yZxjIH^!p~A+UJ3Z&lojYanWMS7uYuEN3dT6kA?b@R(?#z{84E(RW zCg#cYx2L)lh>D5^mX?}+pCG~ectX?b*RR*OR8>`pbWWNi6crnrsucEMQbVx*<or~J z#6-of-@XNfhl@`>9I+#*q-4ssZ{K_*mBhq_?@Vbc^YpO){`ITtlH)1K$;oqcS2?<} zEEC<KazM|)HRzzCVGZAZ=d{&d4s#j)ymn12Ha>o{Pypk)ptTDYG^C}c`#w;ZI$^>G zCkB2k#)c*qH5Y}0(+z$^`P&}h{>CnFz<h>;_Vj6U=A2pCy)&fXOJ`^2#@GegM#jd@ z%F4<UH#eEE$gf&Br>3rM-uBX~Sy@>=4>s}LP*OPl=KcHP120upty*Q_AXsoC^7*r8 zi|$RIHm%5P<%9QZiZwjX9$h%FcTJ6k0f)ui4VouU1{#(+ulzTG$z%JnWol{-hpt?{ zeAuzMzxkj-{?S#TAt4*AKgd0|o04x^oTJUKt*Z2JzKHls@0^gZbhe*y>Kf-7zlmO0 zJ!{LBEn7Gkl%(HvxH{<jc%+Kjs4>p?x6veLYgX=YzLimFX=zVvy*7lto$z29%ax4j zJN0>Y?%T2@W#`gW44?kry&EgcxWlo@+lJX(Z1v<bPoAi_8{0Wukd={{ao}Uz)DW|k z2aX(ZX;G<~Bm6{S&XLC42fJD}<(Bp^X<X^px>V`b@@30(x_N$m{8;GSl+nQ{=*+18 zE^CIzthtkWu2##&@LOzMsIf4r%d&p=vgOO2m9F1CR9~a`SN_2Xqrx2@J9j_SuVj^L zyRu`>qhpJ-1o;bgh=DWLgn9bQC*IyzW}9EXcVo@5uQm)fufF~%&&bBGdEJhg_J3b( RXJBAp@O1TaS?83{1OP)@Hn{)* literal 0 HcmV?d00001 diff --git a/wp-content/themes/monotone/index.php b/wp-content/themes/monotone/index.php new file mode 100755 index 000000000..1eb22216d --- /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 000000000..5365aa98b --- /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 000000000..8feccb8ef --- /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 000000000..daa5bbacf --- /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 GIT binary patch literal 31380 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 literal 0 HcmV?d00001 diff --git a/wp-content/themes/monotone/search.php b/wp-content/themes/monotone/search.php new file mode 100755 index 000000000..6e39b553e --- /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 000000000..22820834f --- /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 000000000..e69de29bb diff --git a/wp-content/themes/monotone/single.php b/wp-content/themes/monotone/single.php new file mode 100755 index 000000000..82391eecf --- /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 000000000..c48d21b31 --- /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 000000000..a418cb397 --- /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 -- GitLab