summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Kinkade <nkinkade@nkinka.de>2010-10-06 21:13:35 +0000
committerNathan Kinkade <nkinkade@nkinka.de>2010-10-06 21:13:35 +0000
commit7dae93afeb449193415d1537ffbd4831cb6fe88f (patch)
tree80534daddd72b51f370942ca16b483b479a6e6c2
parent46ba61da0ffd1fc15899d51bcd2a6ba70c831900 (diff)
parentea5a4e6cfed888a562216e24125d7b703393bc67 (diff)
git-pulled, but had to manuall fix some conflicts.
-rw-r--r--README39
-rw-r--r--installer/install.sql18
-rw-r--r--lib/gallery.common.css897
-rw-r--r--modules/comment/controllers/admin_manage_comments.php2
-rw-r--r--modules/digibug/controllers/digibug.php7
-rw-r--r--modules/g2_import/controllers/g2.php54
-rw-r--r--modules/gallery/controllers/admin_maintenance.php7
-rw-r--r--modules/gallery/controllers/packager.php5
-rw-r--r--modules/gallery/helpers/MY_remote.php3
-rw-r--r--modules/gallery/helpers/access.php14
-rw-r--r--modules/gallery/helpers/data_rest.php7
-rw-r--r--modules/gallery/helpers/gallery.php23
-rw-r--r--modules/gallery/helpers/gallery_installer.php7
-rw-r--r--modules/gallery/helpers/gallery_task.php7
-rw-r--r--modules/gallery/helpers/graphics.php9
-rw-r--r--modules/gallery/helpers/module.php55
-rw-r--r--modules/gallery/helpers/movie.php9
-rw-r--r--modules/gallery/libraries/InPlaceEdit.php2
-rw-r--r--modules/gallery/libraries/drivers/Cache/Database.php14
-rw-r--r--modules/gallery/models/item.php2
-rw-r--r--modules/gallery/module.info2
-rw-r--r--modules/gallery/tests/Cache_Test.php20
-rw-r--r--modules/gallery/tests/controller_auth_data.txt3
-rw-r--r--modules/gallery/tests/xss_data.txt84
-rw-r--r--modules/gallery/views/admin_advanced_settings.html.php1
-rw-r--r--modules/gallery/views/upgrader.html.php2
-rw-r--r--modules/slideshow/helpers/slideshow_theme.php2
-rw-r--r--modules/user/controllers/admin_users.php8
-rw-r--r--modules/user/models/group.php2
-rw-r--r--themes/admin_wind/css/screen.css850
-rw-r--r--themes/admin_wind/images/ico-denied-inactive.png (renamed from lib/images/ico-denied-inactive.png)bin604 -> 604 bytes
-rw-r--r--themes/admin_wind/images/ico-denied-passive.png (renamed from lib/images/ico-denied-passive.png)bin916 -> 916 bytes
-rw-r--r--themes/admin_wind/images/ico-denied.png (renamed from lib/images/ico-denied.png)bin715 -> 715 bytes
-rw-r--r--themes/admin_wind/images/ico-error.png (renamed from lib/images/ico-error.png)bin701 -> 701 bytes
-rw-r--r--themes/admin_wind/images/ico-info.png (renamed from lib/images/ico-info.png)bin778 -> 778 bytes
-rw-r--r--themes/admin_wind/images/ico-lock.png (renamed from lib/images/ico-lock.png)bin749 -> 749 bytes
-rw-r--r--themes/admin_wind/images/ico-separator-rtl.gif (renamed from lib/images/ico-separator-rtl.gif)bin106 -> 106 bytes
-rw-r--r--themes/admin_wind/images/ico-separator.gif (renamed from lib/images/ico-separator.gif)bin106 -> 106 bytes
-rw-r--r--themes/admin_wind/images/ico-success-inactive.png (renamed from lib/images/ico-success-inactive.png)bin476 -> 476 bytes
-rw-r--r--themes/admin_wind/images/ico-success-passive.png (renamed from lib/images/ico-success-passive.png)bin617 -> 617 bytes
-rw-r--r--themes/admin_wind/images/ico-success.png (renamed from lib/images/ico-success.png)bin537 -> 537 bytes
-rw-r--r--themes/admin_wind/images/ico-warning.png (renamed from lib/images/ico-warning.png)bin666 -> 666 bytes
-rw-r--r--themes/admin_wind/images/loading-large.gif (renamed from lib/images/loading-large.gif)bin8238 -> 8238 bytes
-rw-r--r--themes/admin_wind/images/loading-small.gif (renamed from lib/images/loading-small.gif)bin673 -> 673 bytes
-rw-r--r--themes/admin_wind/views/admin.html.php1
-rw-r--r--themes/wind/css/screen.css898
-rw-r--r--themes/wind/images/ico-denied-inactive.pngbin0 -> 604 bytes
-rw-r--r--themes/wind/images/ico-denied-passive.pngbin0 -> 916 bytes
-rw-r--r--themes/wind/images/ico-denied.pngbin0 -> 715 bytes
-rw-r--r--themes/wind/images/ico-error.pngbin0 -> 701 bytes
-rw-r--r--themes/wind/images/ico-info.pngbin0 -> 778 bytes
-rw-r--r--themes/wind/images/ico-lock.pngbin0 -> 749 bytes
-rw-r--r--themes/wind/images/ico-separator-rtl.gifbin0 -> 106 bytes
-rw-r--r--themes/wind/images/ico-separator.gifbin0 -> 106 bytes
-rw-r--r--themes/wind/images/ico-success-inactive.pngbin0 -> 476 bytes
-rw-r--r--themes/wind/images/ico-success-passive.pngbin0 -> 617 bytes
-rw-r--r--themes/wind/images/ico-success.pngbin0 -> 537 bytes
-rw-r--r--themes/wind/images/ico-warning.pngbin0 -> 666 bytes
-rw-r--r--themes/wind/images/loading-large.gifbin0 -> 8238 bytes
-rw-r--r--themes/wind/images/loading-small.gifbin0 -> 673 bytes
-rw-r--r--themes/wind/views/page.html.php1
61 files changed, 1917 insertions, 1138 deletions
diff --git a/README b/README
index 67efff4b..50a2475d 100644
--- a/README
+++ b/README
@@ -8,22 +8,19 @@ can easily create and share albums of photos via an intuitive
interface.
-SECURITY (& INTENDED AUDIENCE):
-This is the second (and hopefully final) release candidate of Gallery
-3.0. We're putting it out there so that we can find out if we
-overlooked any small things. We expect the final version to be
-virtually identical. You can install it on public websites and use it
-freely -- we recommend it!
-
-Note:
- - We've contracted a professional security audit, received their results
- and resolved all the issues they found.
- - You can upgrade from beta 1, but not from alpha releases.
-
-This version is intended for broad distribution. We stand ready to
-support the product and help you to make the most of it. We welcome
-theme and module developers to play with this release and start
-turning out slick new designs for our happy users.
+INTENDED AUDIENCE:
+This version is intended for anybody who has a website. We stand
+ready to support the product and help you to make the most of it. We
+welcome theme and module developers to play with this release and
+start turning out slick new designs for our happy users. If you have
+questions or problems, you can get help in the Gallery forums:
+
+ http://gallery.menalto.com/forum/96
+
+
+SECURITY:
+We've contracted a professional security audit, received their results
+and resolved all the issues they found.
Did you find a security flaw? Please email security@gallery.menalto.com
with the details and we'll fix it ASAP!
@@ -37,6 +34,14 @@ SUPPORTED CONFIGURATION:
- Database: MySQL 5 and newer.
+INSTALLING AND UPGRADING INSTRUCTIONS:
+For comprehensive instructions, The online User Guide is your best resource:
+ http://codex.gallery2.org/Gallery3:User_guide
+
+There are also simple instructions below. NOTE: You can upgrade from
+beta 1 and beyond, but not from alpha releases.
+
+
INSTALLATION VIA THE WEB:
- Point your web browser at gallery3/installer/ and follow the
instructions.
@@ -56,7 +61,7 @@ INSTALLATION FROM THE COMMAND LINE:
BUGS?
Go to http://apps.sourceforge.net/trac/gallery/ click the "login" link
and log in with your SourceForge username and password, then click the
-"new ticket" button. Mark any issues you find with the "3.0"
+"new ticket" button. Mark any issues you find with the "3.1"
milestone and we'll try to get 'em done for the next release.
diff --git a/installer/install.sql b/installer/install.sql
index 52654faf..427a3283 100644
--- a/installer/install.sql
+++ b/installer/install.sql
@@ -244,7 +244,7 @@ CREATE TABLE {modules} (
KEY `weight` (`weight`)
) AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
-INSERT INTO {modules} VALUES (1,1,'gallery',40,1);
+INSERT INTO {modules} VALUES (1,1,'gallery',41,1);
INSERT INTO {modules} VALUES (2,1,'user',3,2);
INSERT INTO {modules} VALUES (3,1,'comment',3,3);
INSERT INTO {modules} VALUES (4,1,'organize',2,4);
@@ -395,7 +395,7 @@ CREATE TABLE {vars} (
`value` text,
PRIMARY KEY (`id`),
UNIQUE KEY `module_name` (`module_name`,`name`)
-) AUTO_INCREMENT=51 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=35 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO {vars} VALUES (NULL,'gallery','active_site_theme','wind');
INSERT INTO {vars} VALUES (NULL,'gallery','active_admin_theme','admin_wind');
@@ -405,29 +405,29 @@ INSERT INTO {vars} VALUES (NULL,'gallery','resize_size','640');
INSERT INTO {vars} VALUES (NULL,'gallery','default_locale','en_US');
INSERT INTO {vars} VALUES (NULL,'gallery','image_quality','75');
INSERT INTO {vars} VALUES (NULL,'gallery','image_sharpen','15');
+INSERT INTO {vars} VALUES (NULL,'gallery','blocks_dashboard_sidebar','a:4:{i:2;a:2:{i:0;s:7:\"gallery\";i:1;s:11:\"block_adder\";}i:3;a:2:{i:0;s:7:\"gallery\";i:1;s:5:\"stats\";}i:4;a:2:{i:0;s:7:\"gallery\";i:1;s:13:\"platform_info\";}i:5;a:2:{i:0;s:7:\"gallery\";i:1;s:12:\"project_news\";}}');
+INSERT INTO {vars} VALUES (NULL,'gallery','blocks_dashboard_center','a:3:{i:6;a:2:{i:0;s:7:\"gallery\";i:1;s:7:\"welcome\";}i:7;a:2:{i:0;s:7:\"gallery\";i:1;s:12:\"photo_stream\";}i:8;a:2:{i:0;s:7:\"gallery\";i:1;s:11:\"log_entries\";}}');
+INSERT INTO {vars} VALUES (NULL,'gallery','choose_default_tookit','1');
+INSERT INTO {vars} VALUES (NULL,'gallery','date_format','Y-M-d');
+INSERT INTO {vars} VALUES (NULL,'gallery','date_time_format','Y-M-d H:i:s');
INSERT INTO {vars} VALUES (NULL,'gallery','time_format','H:i:s');
INSERT INTO {vars} VALUES (NULL,'gallery','show_credits','1');
INSERT INTO {vars} VALUES (NULL,'gallery','credits','Powered by <a href=\"%url\">%gallery_version</a>');
INSERT INTO {vars} VALUES (NULL,'gallery','simultaneous_upload_limit','5');
INSERT INTO {vars} VALUES (NULL,'gallery','admin_area_timeout','5400');
INSERT INTO {vars} VALUES (NULL,'gallery','maintenance_mode','0');
-INSERT INTO {vars} VALUES (NULL,'gallery','blocks_dashboard_sidebar','a:4:{i:2;a:2:{i:0;s:7:\"gallery\";i:1;s:11:\"block_adder\";}i:3;a:2:{i:0;s:7:\"gallery\";i:1;s:5:\"stats\";}i:4;a:2:{i:0;s:7:\"gallery\";i:1;s:13:\"platform_info\";}i:5;a:2:{i:0;s:7:\"gallery\";i:1;s:12:\"project_news\";}}');
INSERT INTO {vars} VALUES (NULL,'gallery','visible_title_length','15');
-INSERT INTO {vars} VALUES (NULL,'gallery','date_time_format','Y-M-d H:i:s');
INSERT INTO {vars} VALUES (NULL,'gallery','favicon_url','lib/images/favicon.ico');
-INSERT INTO {vars} VALUES (NULL,'gallery','date_format','Y-M-d');
-INSERT INTO {vars} VALUES (NULL,'gallery','blocks_dashboard_center','a:3:{i:6;a:2:{i:0;s:7:\"gallery\";i:1;s:7:\"welcome\";}i:7;a:2:{i:0;s:7:\"gallery\";i:1;s:12:\"photo_stream\";}i:8;a:2:{i:0;s:7:\"gallery\";i:1;s:11:\"log_entries\";}}');
INSERT INTO {vars} VALUES (NULL,'gallery','email_from','unknown@unknown.com');
INSERT INTO {vars} VALUES (NULL,'gallery','email_reply_to','unknown@unknown.com');
-INSERT INTO {vars} VALUES (NULL,'gallery','choose_default_tookit','1');
INSERT INTO {vars} VALUES (NULL,'gallery','email_line_length','70');
INSERT INTO {vars} VALUES (NULL,'gallery','email_header_separator','s:1:\"\n\";');
INSERT INTO {vars} VALUES (NULL,'gallery','show_user_profiles_to','registered_users');
INSERT INTO {vars} VALUES (NULL,'gallery','extra_binary_paths','/usr/local/bin:/opt/local/bin:/opt/bin');
-INSERT INTO {vars} VALUES (NULL,'comment','spam_caught','0');
-INSERT INTO {vars} VALUES (NULL,'comment','access_permissions','everybody');
INSERT INTO {vars} VALUES (NULL,'gallery','blocks_site_sidebar','a:4:{i:9;a:2:{i:0;s:7:\"gallery\";i:1;s:8:\"language\";}i:10;a:2:{i:0;s:4:\"info\";i:1;s:8:\"metadata\";}i:11;a:2:{i:0;s:3:\"rss\";i:1;s:9:\"rss_feeds\";}i:12;a:2:{i:0;s:3:\"tag\";i:1;s:3:\"tag\";}}');
INSERT INTO {vars} VALUES (NULL,'gallery','identity_provider','user');
INSERT INTO {vars} VALUES (NULL,'user','mininum_password_length','5');
+INSERT INTO {vars} VALUES (NULL,'comment','spam_caught','0');
+INSERT INTO {vars} VALUES (NULL,'comment','access_permissions','everybody');
INSERT INTO {vars} VALUES (NULL,'rest','allow_guest_access','0');
INSERT INTO {vars} VALUES (NULL,'slideshow','max_scale','0');
diff --git a/lib/gallery.common.css b/lib/gallery.common.css
deleted file mode 100644
index 2bb5b6e2..00000000
--- a/lib/gallery.common.css
+++ /dev/null
@@ -1,897 +0,0 @@
-/**
- * Gallery 3 commonly re-used screen styles
- *
- * Sheet organization:
- *
- * 1) Text
- * 2) Forms
- * 3) Dimension and scale
- * 4) States and interactions
- * 5) Positioning and order
- * 6) Containers/widgets
- * 7) Right to left language styles
- *
- * @todo Update .g-message-block, don't force it to 100%, bad things happen is themes when you do.
- */
-
-/** *******************************************************************
- * 1) Text
- **********************************************************************/
-
-.g-text-small {
- font-size: .8em;
-}
-
-.g-text-big {
- font-size: 1.2em;
-}
-
-.g-text-right {
- text-align: right;
-}
-
-/** *******************************************************************
- * 2) Forms
- **********************************************************************/
-
-form {
- margin: 0;
-}
-
-fieldset {
- border: 1px solid #ccc;
- padding: 0 1em .8em 1em;
-}
-
-#g-banner fieldset,
-#g-sidebar fieldset {
- border: none;
- padding: 0;
-}
-
-legend {
- font-weight: bold;
- margin: 0;
- padding: 0 .2em;
-}
-
-#g-banner legend,
-#g-sidebar legend,
-input[type="hidden"] {
- display: none;
-}
-
-input.textbox,
-input[type="text"],
-input[type="password"],
-textarea {
- border: 1px solid #e8e8e8;
- border-top-color: #ccc;
- border-left-color: #ccc;
- clear: both;
- color: #333;
- width: 50%;
-}
-
-textarea {
- height: 12em;
- width: 97%;
-}
-
-input:focus,
-input.textbox:focus,
-input[type=text]:focus,
-textarea:focus,
-option:focus {
- background-color: #ffc;
- color: #000;
-}
-
-input.checkbox,
-input[type=checkbox],
-input.radio,
-input[type=radio] {
- float: left;
- margin-right: .4em;
-}
-
-/* Form layout ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-form li {
- margin: 0;
- padding: 0 0 .2em 0;
-}
-
-form ul {
- margin-top: 0;
-}
-
-form ul ul {
- clear: both;
-}
-
-form ul ul li {
- float: left;
-}
-
-input,
-select,
-textarea {
- display: block;
- clear: both;
- padding: .2em;
-}
-
-input[type="submit"],
-input[type="reset"] {
- display: inline;
- clear: none;
- float: left;
-}
-
-/* Forms in dialogs and panels ~~~~~~~~~ */
-
-#g-dialog ul li {
- padding-bottom: .8em;
-}
-
-#g-dialog fieldset,
-#g-panel fieldset {
- border: none;
- padding: 0;
-}
-
-#g-panel legend {
- display: none;
-}
-
-input[readonly] {
- background-color: #F4F4FC;
-}
-
-#g-dialog input.textbox,
-#g-dialog input[type=text],
-#g-dialog input[type=password],
-#g-dialog textarea {
- width: 97%;
-}
-
-/* Short forms ~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.g-short-form legend,
-.g-short-form label {
- display: none;
-}
-
-.g-short-form fieldset {
- border: none;
- padding: 0;
-}
-
-.g-short-form li {
- float: left;
- margin: 0 !important;
- padding: .4em 0;
-}
-
-.g-short-form .textbox,
-.g-short-form input[type=text] {
- color: #666;
- padding: .3em .6em;
- width: 100%;
-}
-
-.g-short-form .textbox.g-error {
- border: 1px solid #f00;
- color: #f00;
- padding-left: 24px;
-}
-
-.g-short-form .g-cancel {
- display: block;
- margin: .3em .8em;
-}
-
-#g-sidebar .g-short-form li {
- padding-left: 0;
- padding-right: 0;
-}
-
-/** *******************************************************************
- * 3) Dimension and scale
- **********************************************************************/
-
-.g-one-quarter {
- width: 25%;
-}
-
-.g-one-third {
- width: 33%;
-}
-
-.g-one-half {
- width: 50%;
-}
-
-.g-two-thirds {
- width: 66%;
-}
-
-.g-three-quarters {
- width: 75%;
-}
-
-.g-whole {
- width: 100%;
-}
-
-/** *******************************************************************
- * 4) States and interactions
- **********************************************************************/
-
-.g-active,
-.g-enabled,
-.g-available,
-.g-selected,
-.g-highlight {
- font-weight: bold;
-}
-
-.g-inactive,
-.g-disabled,
-.g-unavailable,
-.g-uneditable,
-.g-locked,
-.g-deselected,
-.g-understate {
- color: #ccc;
- font-weight: normal;
-}
-
-.g-editable {
- padding: .2em .3em;
-}
-
-.g-editable:hover {
- background-color: #ffc;
- cursor: text;
-}
-
-.g-error,
-.g-info,
-.g-success,
-.g-warning {
- padding-left: 30px;
-}
-
-form li.g-error,
-form li.g-info,
-form li.g-success,
-form li.g-warning {
- background-image: none;
- padding: .3em .8em .3em 0;
-}
-
-.g-short-form li.g-error {
- padding: .3em 0;
-}
-
-form.g-error input[type="text"],
-li.g-error input[type="text"],
-form.g-error input[type="password"],
-li.g-error input[type="password"],
-form.g-error input[type="checkbox"],
-li.g-error input[type="checkbox"],
-form.g-error input[type="radio"],
-li.g-error input[type="radio"],
-form.g-error textarea,
-li.g-error textarea,
-form.g-error select,
-li.g-error select {
- border: 2px solid #f00;
- margin-bottom: .2em;
-}
-
-.g-error,
-.g-denied,
-tr.g-error td.g-error,
-#g-add-photos-status .g-error {
- background: #f6cbca url('images/ico-error.png') no-repeat .4em 50%;
- color: #f00;
-}
-
-.g-info {
- background: #e8e8e8 url('images/ico-info.png') no-repeat .4em 50%;
-}
-
-.g-success,
-.g-allowed,
-#g-add-photos-status .g-success {
- background: #d9efc2 url('images/ico-success.png') no-repeat .4em 50%;
-}
-
-tr.g-success {
- background-image: none;
-}
-
-tr.g-success td.g-success {
- background-image: url('images/ico-success.png');
-}
-
-.g-warning,
-tr.g-warning td.g-warning {
- background: #fcf9ce url('images/ico-warning.png') no-repeat .4em 50%;
-}
-
-form .g-error {
- background-color: #fff;
- padding-left: 20px;
-}
-
-.g-open {
-}
-
-.g-closed {
-}
-
-.g-installed {
- background-color: #eeeeee;
-}
-
-.g-default {
- background-color: #c5dbec;
- font-weight: bold;
-}
-
-.g-draggable {
- cursor: move;
-}
-
-.g-draggable:hover {
- border: 1px dashed #000;
-}
-
-.ui-sortable .g-target,
-.ui-state-highlight {
- background-color: #fcf9ce;
- border: 2px dotted #999;
- height: 2em;
- margin: 1em 0;
-}
-
-/* Ajax loading indicator ~~~~~~~~~~~~~~~~ */
-
-.g-loading-large,
-.g-dialog-loading-large {
- background: #e8e8e8 url('images/loading-large.gif') no-repeat center center !important;
-}
-
-.g-loading-small {
- background: #e8e8e8 url('images/loading-small.gif') no-repeat center center !important;
-}
-
-/** *******************************************************************
- * 5) Positioning and order
- **********************************************************************/
-
-.g-left {
- clear: none;
- float: left;
-}
-
-.g-right {
- clear: none;
- float: right;
-}
-
-.g-first {
-}
-
-.g-last {
-}
-
-.g-even {
- background-color: #fff;
-}
-
-.g-odd {
- background-color: #eee;
-}
-
-/** *******************************************************************
- * 6) Containers/widgets
- **********************************************************************/
-
-/* Generic block container ~~~~~~~~~~~~~~~ */
-
-.g-block {
- clear: both;
- margin-bottom: 2.5em;
-}
-
-.g-block-content {
-}
-
-/* Superfish menu overrides ~~~~~~~~~~~~~~ */
-
-.sf-menu ul {
- width: 12em;
-}
-
-ul.sf-menu li li:hover ul,
-ul.sf-menu li li.sfHover ul {
- left: 12em;
-}
-
-ul.sf-menu li li li:hover ul,
-ul.sf-menu li li li.sfHover ul {
- left: 12em;
-}
-
-/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */
-
-.ui-widget-overlay {
- background: #000;
- opacity: .7;
-}
-
-/* Buttons ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.g-button {
- display: inline-block;
- margin: 0 4px 0 0;
- padding: .2em .4em;
-}
-
-.g-button,
-.g-button:hover,
-.g-button:active {
- cursor: pointer !important;
- outline: 0;
- text-decoration: none;
- -moz-outline-style: none;
-}
-
-button {
- padding: 2px 4px 2px 4px;
-}
-
-/* jQuery UI ThemeRoller buttons ~~~~~~~~~ */
-
-.g-buttonset {
- padding-left: 1px;
-}
-
-.g-buttonset li {
- float: left;
-}
-
-.g-buttonset .g-button {
- margin: 0;
-}
-
-.ui-icon-left .ui-icon {
- float: left;
- margin-right: .2em;
-}
-
-.ui-icon-right .ui-icon {
- float: right;
- margin-left: .2em;
-}
-
-/* Rotate icon, ThemeRoller only provides one of these */
-
-.ui-icon-rotate-ccw {
- background-position: -192px -64px;
-}
-
-.ui-icon-rotate-cw {
- background-position: -208px -64px;
-}
-
-.g-progress-bar {
- height: 1em;
- width: 100%;
- margin-top: .5em;
- display: inline-block;
-}
-
-/* Status and validation messages ~~~~ */
-
-.g-message-block {
- background-position: .4em .3em;
- border: 1px solid #ccc;
- padding: 0;
-}
-
-#g-action-status {
- margin-bottom: 1em;
-}
-
-#g-action-status li,
-p#g-action-status,
-div#g-action-status {
- padding: .3em .3em .3em 30px;
-}
-
-#g-site-status li {
- border-bottom: 1px solid #ccc;
- padding: .3em .3em .3em 30px;
-}
-
-.g-module-status {
- clear: both;
- margin-bottom: 1em;
-}
-
-.g-message {
- background-position: 0 50%;
-}
-
-/* Breadcrumbs ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.g-breadcrumbs {
- clear: both;
- padding: 0 20px;
-}
-
-.g-breadcrumbs li {
- background: transparent url('images/ico-separator.gif') no-repeat scroll left center;
- float: left;
- padding: 1em 8px 1em 18px;
-}
-
-.g-breadcrumbs .g-first {
- background: none;
- padding-left: 0;
-}
-
-.g-breadcrumbs li a,
-.g-breadcrumbs li span {
- display: block;
-}
-
-#g-dialog ul.g-breadcrumbs {
- margin-left: 0;
- padding-left: 0;
-}
-
-/* Pagination ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.g-paginator {
- padding: .2em 0;
- width: 100%;
-}
-
-.g-paginator li {
- float: left;
- width: 30%;
-}
-
-.g-paginator .g-info {
- background: none;
- padding: .2em 0;
- text-align: center;
- width: 40%;
-}
-
-/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
-
-#g-dialog {
- text-align: left;
-}
-
-#g-dialog legend {
- display: none;
-}
-
-#g-dialog .g-cancel {
- margin: .4em 1em;
-}
-
-#g-panel {
- display: none;
- padding: 1em;
-}
-
-/* Inline layout ~~~~~~~~~~ */
-
-.g-inline li {
- float: left;
- margin-left: 1.8em;
- padding-left: 0 !important;
-}
-
-.g-inline li.g-first {
- margin-left: 0;
-}
-
-/** *******************************************************************
- * 7) Right to left language styles
- **********************************************************************/
-
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-.rtl .g-breadcrumbs li {
- background: transparent url('images/ico-separator-rtl.gif') no-repeat scroll right center;
- padding: 1em 18px 1em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #fff;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- left: .75em !important;
- right: auto;
- background: url('superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('superfish/images/shadow.png') no-repeat bottom left;
- padding: 0 0 9px 8px;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-
-/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .g-paginator .g-info {
- width: 35%;
-}
-
-.rtl .g-paginator .g-text-right {
- margin-left: 0;
-}
-
-.rtl .g-paginator .ui-icon-seek-end {
- background-position: -80px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-next {
- background-position: -48px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-prev {
- background-position: -32px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-first {
- background-position: -64px -160px;
-}
diff --git a/modules/comment/controllers/admin_manage_comments.php b/modules/comment/controllers/admin_manage_comments.php
index 0889dc4e..49bd85d5 100644
--- a/modules/comment/controllers/admin_manage_comments.php
+++ b/modules/comment/controllers/admin_manage_comments.php
@@ -25,7 +25,7 @@ class Admin_Manage_Comments_Controller extends Admin_Controller {
db::build()
->delete("comments")
->where("state", "IN", array("deleted", "spam"))
- ->where("updated", "<", "UNIX_TIMESTAMP() - 86400 * 7")
+ ->where("updated", "<", new Database_Expression("UNIX_TIMESTAMP() - 86400 * 7"))
->execute();
// Redirect to the appropriate queue
diff --git a/modules/digibug/controllers/digibug.php b/modules/digibug/controllers/digibug.php
index 3c2bb115..88d1ace0 100644
--- a/modules/digibug/controllers/digibug.php
+++ b/modules/digibug/controllers/digibug.php
@@ -95,16 +95,11 @@ class Digibug_Controller extends Controller {
if (!TEST_MODE) {
// Dump out the image
- header("Content-Type: $proxy->item->mime_type");
+ header("Content-Type: {$proxy->item->mime_type}");
Kohana::close_buffers(false);
$fd = fopen($file, "rb");
fpassthru($fd);
fclose($fd);
-
- // If the request was for the image and not the thumb, then delete the proxy.
- if ($type == "full") {
- $proxy->delete();
- }
}
$this->_clean_expired();
diff --git a/modules/g2_import/controllers/g2.php b/modules/g2_import/controllers/g2.php
index d260c9b4..0f51173a 100644
--- a/modules/g2_import/controllers/g2.php
+++ b/modules/g2_import/controllers/g2.php
@@ -34,38 +34,44 @@ class G2_Controller extends Controller {
$path = $input->get("path");
$id = $input->get("g2_itemId");
- if ($id) {
- // Requests by id are either core.DownloadItem or core.ShowItem requests. Later versions of
- // Gallery 2 don't specify g2_view if it's the default (core.ShowItem). And in some cases
- // (bbcode, embedding) people are using the id style URLs although URL rewriting is enabled.
- $where = array(array("g2_id", "=", $id));
- $view = $input->get("g2_view");
- if ($view) {
- $where[] = array("g2_url", "like", "%g2_view=$view%");
- } // else: Assuming that the first search hit is sufficiently good.
- } else if ($path) {
- $where = array(array("g2_url", "=", $path));
- } else {
- throw new Kohana_404_Exception();
- }
+ if ($path || $id) {
+ if ($id) {
+ // Requests by id are either core.DownloadItem or core.ShowItem requests. Later versions of
+ // Gallery 2 don't specify g2_view if it's the default (core.ShowItem). And in some cases
+ // (bbcode, embedding) people are using the id style URLs although URL rewriting is enabled.
+ $where = array(array("g2_id", "=", $id));
+ $view = $input->get("g2_view");
+ if ($view) {
+ $where[] = array("g2_url", "like", "%g2_view=$view%");
+ } // else: Assuming that the first search hit is sufficiently good.
+ } else if ($path) {
+ $where = array(array("g2_url", "IN", array($path, str_replace(" ", "+", $path))));
+ } else {
+ throw new Kohana_404_Exception();
+ }
- $g2_map = ORM::factory("g2_map")
- ->merge_where($where)
- ->find();
+ $g2_map = ORM::factory("g2_map")
+ ->merge_where($where)
+ ->find();
- if (!$g2_map->loaded()) {
- throw new Kohana_404_Exception();
- }
+ if (!$g2_map->loaded()) {
+ throw new Kohana_404_Exception();
+ }
- $item = ORM::factory("item", $g2_map->g3_id);
- if (!$item->loaded()) {
- throw new Kohana_404_Exception();
+ $item = ORM::factory("item", $g2_map->g3_id);
+ if (!$item->loaded()) {
+ throw new Kohana_404_Exception();
+ }
+ $resource_type = $g2_map->resource_type;
+ } else {
+ $item = item::root();
+ $resource_type = "album";
}
access::required("view", $item);
// Redirect the user to the new url
- switch ($g2_map->resource_type) {
+ switch ($resource_type) {
case "thumbnail":
url::redirect($item->thumb_url(true));
diff --git a/modules/gallery/controllers/admin_maintenance.php b/modules/gallery/controllers/admin_maintenance.php
index a9cc933c..7729d797 100644
--- a/modules/gallery/controllers/admin_maintenance.php
+++ b/modules/gallery/controllers/admin_maintenance.php
@@ -48,6 +48,13 @@ class Admin_Maintenance_Controller extends Admin_Controller {
$view->content->finished_tasks = ORM::factory("task")
->where("done", "=", 1)->order_by("updated", "DESC")->find_all();
print $view;
+
+ // Do some maintenance while we're in here
+ db::build()
+ ->delete("caches")
+ ->where("expiration", "<>", 0)
+ ->where("expiration", "<=", time())
+ ->execute();
}
/**
diff --git a/modules/gallery/controllers/packager.php b/modules/gallery/controllers/packager.php
index f463d0de..bd51b93c 100644
--- a/modules/gallery/controllers/packager.php
+++ b/modules/gallery/controllers/packager.php
@@ -81,11 +81,6 @@ class Packager_Controller extends Controller {
Database::instance()->query("TRUNCATE {caches}");
Database::instance()->query("TRUNCATE {sessions}");
Database::instance()->query("TRUNCATE {logs}");
- db::build()
- ->delete("vars")
- ->where("module_name", "=", "gallery")
- ->where("name", "=", "_cache")
- ->execute();
db::build()->update("users")
->set(array("password" => ""))
->where("id", "in", array(1, 2))
diff --git a/modules/gallery/helpers/MY_remote.php b/modules/gallery/helpers/MY_remote.php
index 3e13ba8d..05341330 100644
--- a/modules/gallery/helpers/MY_remote.php
+++ b/modules/gallery/helpers/MY_remote.php
@@ -63,6 +63,9 @@ class remote extends remote_Core {
* WebHelper_simple::_parseLocation logic.
*/
static function do_request($url, $method='GET', $headers=array(), $body='') {
+ if (!array_key_exists("User-Agent", $headers)) {
+ $headers["User-Agent"] = "Gallery3";
+ }
/* Convert illegal characters */
$url = str_replace(' ', '%20', $url);
diff --git a/modules/gallery/helpers/access.php b/modules/gallery/helpers/access.php
index 52a36298..1a448e4a 100644
--- a/modules/gallery/helpers/access.php
+++ b/modules/gallery/helpers/access.php
@@ -727,8 +727,18 @@ class access_Core {
fclose($fp);
}
- list ($response) = remote::do_request(url::abs_file("var/security_test/verify"));
- $works = $response == "HTTP/1.1 200 OK";
+ // Proxy our authorization headers so that if the entire Gallery is covered by Basic Auth
+ // this callback will still work.
+ $headers = array();
+ if (function_exists("apache_request_headers")) {
+ $arh = apache_request_headers();
+ if (!empty($arh["Authorization"])) {
+ $headers["Authorization"] = $arh["Authorization"];
+ }
+ }
+ list ($status, $headers, $body) =
+ remote::do_request(url::abs_file("var/security_test/verify"), "GET", $headers);
+ $works = ($status == "HTTP/1.1 200 OK") && ($body == "success");
} catch (Exception $e) {
@dir::unlink(VARPATH . "security_test");
throw $e;
diff --git a/modules/gallery/helpers/data_rest.php b/modules/gallery/helpers/data_rest.php
index 98c98894..791de9c0 100644
--- a/modules/gallery/helpers/data_rest.php
+++ b/modules/gallery/helpers/data_rest.php
@@ -72,7 +72,12 @@ class data_rest_Core {
header("Content-Type: {$item->mime_type}");
}
Kohana::close_buffers(false);
- readfile($file);
+
+ if (isset($p->encoding) && $p->encoding == "base64") {
+ print base64_encode(file_get_contents($file));
+ } else {
+ readfile($file);
+ }
// We must exit here to keep the regular REST framework reply code from adding more bytes on
// at the end or tinkering with headers.
diff --git a/modules/gallery/helpers/gallery.php b/modules/gallery/helpers/gallery.php
index ca8c92c9..b016f436 100644
--- a/modules/gallery/helpers/gallery.php
+++ b/modules/gallery/helpers/gallery.php
@@ -18,13 +18,17 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class gallery_Core {
- const VERSION = "3.0 RC2 (Santa Fe)";
+ const VERSION = "3.0 (Santa Fe)";
/**
* If Gallery is in maintenance mode, then force all non-admins to get routed to a "This site is
* down for maintenance" page.
*/
static function maintenance_mode() {
+ // @todo: we need a mechanism here to identify controllers that are still legally accessible
+ // when the entire Gallery is in maintenance mode. Perhaps a controller class function or
+ // method?
+ // https://sourceforge.net/apps/trac/gallery/ticket/1411
if (Router::$controller != "login" &&
Router::$controller != "combined" &&
module::get_var("gallery", "maintenance_mode", 0) &&
@@ -41,8 +45,12 @@ class gallery_Core {
* the login page.
*/
static function private_gallery() {
+ // @todo: we need a mechanism here to identify controllers that are still legally accessible
+ // when the entire Gallery is private. Perhaps a controller class function or method?
+ // https://sourceforge.net/apps/trac/gallery/ticket/1411
if (Router::$controller != "login" &&
Router::$controller != "combined" &&
+ Router::$controller != "digibug" &&
identity::active_user()->guest &&
!access::user_can(identity::guest(), "view", item::root()) &&
php_sapi_name() != "cli") {
@@ -140,4 +148,17 @@ class gallery_Core {
return $file_name;
}
+ /**
+ * Set the PATH environment variable to the paths specified.
+ * @param array Array of paths. Each array entry can contain a colon separated list of paths.
+ */
+ static function set_path_env($paths) {
+ $path_env = array();
+ foreach ($paths as $path) {
+ if ($path) {
+ array_push($path_env, $path);
+ }
+ }
+ putenv("PATH=" . implode(":", $path_env));
+ }
} \ No newline at end of file
diff --git a/modules/gallery/helpers/gallery_installer.php b/modules/gallery/helpers/gallery_installer.php
index 83961d6b..3d82bc69 100644
--- a/modules/gallery/helpers/gallery_installer.php
+++ b/modules/gallery/helpers/gallery_installer.php
@@ -309,7 +309,7 @@ class gallery_installer {
module::set_var("gallery", "show_user_profiles_to", "registered_users");
module::set_var("gallery", "extra_binary_paths", "/usr/local/bin:/opt/local/bin:/opt/bin");
- module::set_version("gallery", 40);
+ module::set_version("gallery", 41);
}
static function upgrade($version) {
@@ -637,6 +637,11 @@ class gallery_installer {
module::set_var("gallery", "extra_binary_paths", "/usr/local/bin:/opt/local/bin:/opt/bin");
module::set_version("gallery", $version = 40);
}
+
+ if ($version == 40) {
+ module::clear_var("gallery", "_cache");
+ module::set_version("gallery", $version = 41);
+ }
}
static function uninstall() {
diff --git a/modules/gallery/helpers/gallery_task.php b/modules/gallery/helpers/gallery_task.php
index 3b173928..d56edabb 100644
--- a/modules/gallery/helpers/gallery_task.php
+++ b/modules/gallery/helpers/gallery_task.php
@@ -84,6 +84,13 @@ class gallery_task_Core {
$ignored = $task->get("ignored", array());
$i = 0;
+
+ // If there's no work left to do, skip to the end. This can happen if we resume a task long
+ // after the work got done in some other task.
+ if (!$result->count()) {
+ $completed = $total_count;
+ }
+
foreach ($result as $row) {
if (array_key_exists($row->id, $ignored)) {
continue;
diff --git a/modules/gallery/helpers/graphics.php b/modules/gallery/helpers/graphics.php
index 2868a28d..dd521d84 100644
--- a/modules/gallery/helpers/graphics.php
+++ b/modules/gallery/helpers/graphics.php
@@ -313,11 +313,10 @@ class graphics_Core {
$toolkits->graphicsmagick->installed = false;
$toolkits->graphicsmagick->error = t("GraphicsMagick requires the <b>exec</b> function");
} else {
- $graphics_path = module::get_var("gallery", "graphics_toolkit_path", null);
- $extra_binary_paths = module::get_var("gallery", "extra_binary_paths", null);
-
- putenv("PATH=" . getenv("PATH") . (empty($graphics_path) ? "" : ":$graphics_path") .
- ":" . $extra_binary_paths);
+ gallery::set_path_env(
+ array(module::get_var("gallery", "graphics_toolkit_path"),
+ getenv("PATH"),
+ module::get_var("gallery", "extra_binary_paths")));
// @todo: consider refactoring the two segments below into a loop since they are so
// similar.
diff --git a/modules/gallery/helpers/module.php b/modules/gallery/helpers/module.php
index 7863520e..64d0d1d6 100644
--- a/modules/gallery/helpers/module.php
+++ b/modules/gallery/helpers/module.php
@@ -425,48 +425,21 @@ class module_Core {
* @return the value
*/
static function get_var($module_name, $name, $default_value=null) {
- // We cache all vars in gallery._cache so that we can load all vars at once for
- // performance.
+ // We cache vars so we can load them all at once for performance.
if (empty(self::$var_cache)) {
- $row = db::build()
- ->select("value")
- ->from("vars")
- ->where("module_name", "=", "gallery")
- ->where("name", "=", "_cache")
- ->execute()
- ->current();
- if ($row) {
- self::$var_cache = unserialize($row->value);
- } else {
- // gallery._cache doesn't exist. Create it now.
+ self::$var_cache = Cache::instance()->get("var_cache");
+ if (empty(self::$var_cache)) {
+ // Cache doesn't exist, create it now.
foreach (db::build()
->select("module_name", "name", "value")
->from("vars")
->order_by("module_name")
->order_by("name")
->execute() as $row) {
- if ($row->module_name == "gallery" && $row->name == "_cache") {
- // This could happen if there's a race condition
- continue;
- }
// Mute the "Creating default object from empty value" warning below
@self::$var_cache->{$row->module_name}->{$row->name} = $row->value;
}
- $cache = ORM::factory("var");
- $cache->module_name = "gallery";
- $cache->name = "_cache";
- $cache->value = serialize(self::$var_cache);
- try {
- $cache->save();
- } catch (Database_Exception $e) {
- // There's a potential race condition here. Don't fail if that happens because it's
- // bound to be transient and not a huge deal, but at least put something in the logs.
- if (stristr($e->getMessage(), "duplicate entry")) {
- Kohana_Log::add("error", "Failed to cache vars");
- } else {
- throw $e;
- }
- }
+ Cache::instance()->set("var_cache", self::$var_cache, array("vars"));
}
}
@@ -495,11 +468,7 @@ class module_Core {
$var->value = $value;
$var->save();
- db::build()
- ->delete("vars")
- ->where("module_name", "=", "gallery")
- ->where("name", "=", "_cache")
- ->execute();
+ Cache::instance()->delete("var_cache");
self::$var_cache = null;
}
@@ -524,11 +493,7 @@ class module_Core {
->where("name", "=", $name)
->execute();
- db::build()
- ->delete("vars")
- ->where("module_name", "=", "gallery")
- ->where("name", "=", "_cache")
- ->execute();
+ Cache::instance()->delete("var_cache");
self::$var_cache = null;
}
@@ -546,11 +511,7 @@ class module_Core {
$var->delete();
}
- db::build()
- ->delete("vars")
- ->where("module_name", "=", "gallery")
- ->where("name", "=", "_cache")
- ->execute();
+ Cache::instance()->delete("var_cache");
self::$var_cache = null;
}
diff --git a/modules/gallery/helpers/movie.php b/modules/gallery/helpers/movie.php
index 50339541..78358b6b 100644
--- a/modules/gallery/helpers/movie.php
+++ b/modules/gallery/helpers/movie.php
@@ -85,11 +85,10 @@ class movie_Core {
static function find_ffmpeg() {
if (!($ffmpeg_path = module::get_var("gallery", "ffmpeg_path")) || !file_exists($ffmpeg_path)) {
- $graphics_path = module::get_var("gallery", "graphics_toolkit_path", null);
- $extra_binary_paths = module::get_var("gallery", "extra_binary_paths", null);
-
- putenv("PATH=" . getenv("PATH") . (empty($graphics_path) ? "" : ":$graphics_path") .
- ":" . $extra_binary_paths);
+ gallery::set_path_env(
+ array(module::get_var("gallery", "graphics_toolkit_path"),
+ getenv("PATH"),
+ module::get_var("gallery", "extra_binary_paths")));
if (function_exists("exec")) {
$ffmpeg_path = exec("which ffmpeg");
}
diff --git a/modules/gallery/libraries/InPlaceEdit.php b/modules/gallery/libraries/InPlaceEdit.php
index 7e631ab9..42eb2ffe 100644
--- a/modules/gallery/libraries/InPlaceEdit.php
+++ b/modules/gallery/libraries/InPlaceEdit.php
@@ -70,7 +70,7 @@ class InPlaceEdit_Core {
public function render() {
$v = new View("in_place_edit.html");
- $v->action = url::site($this->action);
+ $v->action = $this->action;
$v->form = $this->form;
$v->errors = $this->errors;
foreach ($v->errors as $key => $error) {
diff --git a/modules/gallery/libraries/drivers/Cache/Database.php b/modules/gallery/libraries/drivers/Cache/Database.php
index 9ada52e1..b7822811 100644
--- a/modules/gallery/libraries/drivers/Cache/Database.php
+++ b/modules/gallery/libraries/drivers/Cache/Database.php
@@ -179,20 +179,6 @@ class Cache_Database_Driver extends Cache_Driver {
}
/**
- * Deletes all cache files that are older than the current time.
- */
- public function delete_expired() {
- // Delete all expired caches
- $status = db::build()
- ->delete("caches")
- ->where("expiration", "<>", 0)
- ->where("expiration", "<=", time())
- ->execute();
-
- return count($status) > 0;
- }
-
- /**
* Empty the cache
*/
public function delete_all() {
diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php
index 7bcf1f31..07f781d1 100644
--- a/modules/gallery/models/item.php
+++ b/modules/gallery/models/item.php
@@ -498,7 +498,7 @@ class Item_Model_Core extends ORM_MPTT {
$base_slug = $this->slug;
while (ORM::factory("item")
->where("parent_id", "=", $this->parent_id)
- ->where("id", "<>", $this->id)
+ ->where("id", $this->id ? "<>" : "IS NOT", $this->id)
->and_open()
->where("name", "=", $this->name)
->or_where("slug", "=", $this->slug)
diff --git a/modules/gallery/module.info b/modules/gallery/module.info
index 1155ddf7..2b684e5e 100644
--- a/modules/gallery/module.info
+++ b/modules/gallery/module.info
@@ -1,3 +1,3 @@
name = "Gallery 3"
description = "Gallery core application"
-version = 40
+version = 41
diff --git a/modules/gallery/tests/Cache_Test.php b/modules/gallery/tests/Cache_Test.php
index 4c65698a..e8d8b6f4 100644
--- a/modules/gallery/tests/Cache_Test.php
+++ b/modules/gallery/tests/Cache_Test.php
@@ -85,26 +85,6 @@ class Cache_Test extends Gallery_Unit_Test_Case {
$this->assert_equal(array($id3 => $value3), $data, "Expected id3");
}
- public function cache_delete_expired_test() {
- $id1 = md5(rand());
- $value1 = array("field1" => "value1", "field2" => "value2");
- $this->_driver->set(array($id1 => $value1), array("tag1", "tag2"), -84600);
-
- $id2 = md5(rand());
- $value2 = array("field3" => "value3", "field4" => "value4");
- $this->_driver->set(array($id2 => $value2), array("tag2", "tag3"), -846000);
-
- $id3 = md5(rand());
- $value3 = array("field5" => "value5", "field6" => "value6");
- $this->_driver->set(array($id3 => $value3), array("tag3", "tag4"), -84600);
-
- $data = $this->_driver->delete_expired();
-
- $this->assert_false($this->_driver->exists($id1), "$id1 should have been deleted");
- $this->assert_false($this->_driver->exists($id2), "$id2 should have been deleted");
- $this->assert_false($this->_driver->exists($id3), "$id3 should have been deleted");
- }
-
public function cache_delete_id_test() {
$id1 = md5(rand());
$value1 = array("field1" => "value1", "field2" => "value2");
diff --git a/modules/gallery/tests/controller_auth_data.txt b/modules/gallery/tests/controller_auth_data.txt
index 03032fd9..24170092 100644
--- a/modules/gallery/tests/controller_auth_data.txt
+++ b/modules/gallery/tests/controller_auth_data.txt
@@ -1,7 +1,6 @@
modules/comment/controllers/admin_manage_comments.php queue DIRTY_CSRF
modules/comment/helpers/comment_rss.php feed DIRTY_AUTH
modules/digibug/controllers/digibug.php print_proxy DIRTY_CSRF|DIRTY_AUTH
-modules/digibug/controllers/digibug.php close_window DIRTY_AUTH
modules/g2_import/controllers/g2.php map DIRTY_CSRF
modules/gallery/controllers/admin.php __call DIRTY_AUTH
modules/gallery/controllers/albums.php index DIRTY_AUTH
@@ -34,7 +33,7 @@ modules/search/controllers/search.php index
modules/server_add/controllers/admin_server_add.php autocomplete DIRTY_CSRF
modules/server_add/controllers/server_add.php children DIRTY_CSRF
modules/tag/controllers/admin_tags.php index DIRTY_CSRF
-modules/tag/controllers/tags.php show DIRTY_CSRF|DIRTY_AUTH
+modules/tag/controllers/tag.php __call DIRTY_CSRF|DIRTY_AUTH
modules/tag/controllers/tags.php autocomplete DIRTY_CSRF|DIRTY_AUTH
modules/user/controllers/password.php reset DIRTY_AUTH
modules/user/controllers/password.php do_reset DIRTY_CSRF|DIRTY_AUTH
diff --git a/modules/gallery/tests/xss_data.txt b/modules/gallery/tests/xss_data.txt
index 6821c963..0345df96 100644
--- a/modules/gallery/tests/xss_data.txt
+++ b/modules/gallery/tests/xss_data.txt
@@ -43,8 +43,8 @@ modules/digibug/views/digibug_form.html.php 6 DIRTY form::
modules/exif/views/exif_dialog.html.php 14 DIRTY $details[$i]["caption"]
modules/exif/views/exif_dialog.html.php 21 DIRTY $details[$i]["caption"]
modules/g2_import/views/admin_g2_import.html.php 9 DIRTY $form
-modules/gallery/views/admin_advanced_settings.html.php 21 DIRTY_ATTR text::alternate("g-odd","g-even")
-modules/gallery/views/admin_advanced_settings.html.php 22 DIRTY $var->module_name
+modules/gallery/views/admin_advanced_settings.html.php 20 DIRTY_ATTR text::alternate("g-odd","g-even")
+modules/gallery/views/admin_advanced_settings.html.php 21 DIRTY $var->module_name
modules/gallery/views/admin_block_log_entries.html.php 4 DIRTY_ATTR log::severity_class($entry->severity)
modules/gallery/views/admin_block_log_entries.html.php 8 DIRTY_JS user_profile::url($entry->user->id)
modules/gallery/views/admin_block_log_entries.html.php 10 DIRTY gallery::date_time($entry->timestamp)
@@ -58,9 +58,9 @@ modules/gallery/views/admin_block_photo_stream.html.php 6 DIRTY photo:
modules/gallery/views/admin_block_photo_stream.html.php 7 DIRTY_ATTR $photo->thumb_url()
modules/gallery/views/admin_dashboard.html.php 5 DIRTY_JS $csrf
modules/gallery/views/admin_dashboard.html.php 35 DIRTY $blocks
-modules/gallery/views/admin_graphics.html.php 24 DIRTY newView("admin_graphics_none.html")
-modules/gallery/views/admin_graphics.html.php 26 DIRTY newView("admin_graphics_$active.html",array("tk"=>$tk->$active,"is_active"=>true))
-modules/gallery/views/admin_graphics.html.php 33 DIRTY newView("admin_graphics_$id.html",array("tk"=>$tk->$id,"is_active"=>false))
+modules/gallery/views/admin_graphics.html.php 25 DIRTY newView("admin_graphics_none.html")
+modules/gallery/views/admin_graphics.html.php 27 DIRTY newView("admin_graphics_$active.html",array("tk"=>$tk->$active,"is_active"=>true))
+modules/gallery/views/admin_graphics.html.php 34 DIRTY newView("admin_graphics_$id.html",array("tk"=>$tk->$id,"is_active"=>false))
modules/gallery/views/admin_graphics_gd.html.php 2 DIRTY_ATTR $is_active?" g-selected":""
modules/gallery/views/admin_graphics_gd.html.php 2 DIRTY_ATTR $tk->installed?" g-installed-toolkit":" g-unavailable"
modules/gallery/views/admin_graphics_gd.html.php 19 DIRTY $tk->error
@@ -274,19 +274,19 @@ modules/notification/views/item_updated.html.php 20 DIRTY_JS $item-
modules/notification/views/item_updated.html.php 20 DIRTY $item->abs_url()
modules/notification/views/user_profile_notification.html.php 5 DIRTY_ATTR $subscription->id
modules/notification/views/user_profile_notification.html.php 6 DIRTY_JS $subscription->url
-modules/organize/views/organize_dialog.html.php 90 DIRTY_JS $domain
-modules/organize/views/organize_dialog.html.php 91 DIRTY_JS $access_key
-modules/organize/views/organize_dialog.html.php 92 DIRTY_JS request::protocol()
-modules/organize/views/organize_dialog.html.php 93 DIRTY_JS $file_filter
-modules/organize/views/organize_dialog.html.php 94 DIRTY_JS $sort_order
-modules/organize/views/organize_dialog.html.php 95 DIRTY_JS $sort_fields
-modules/organize/views/organize_dialog.html.php 96 DIRTY_JS $album->id
-modules/organize/views/organize_dialog.html.php 97 DIRTY_JS $selected_id
-modules/organize/views/organize_dialog.html.php 98 DIRTY_JS $rest_uri
-modules/organize/views/organize_dialog.html.php 99 DIRTY_JS $controller_uri
-modules/organize/views/organize_dialog.html.php 105 DIRTY_JS $flash_minimum_version="10.0.0"
-modules/organize/views/organize_dialog.html.php 123 DIRTY_JS $swf_uri
-modules/organize/views/organize_dialog.html.php 136 DIRTY_ATTR request::protocol()
+modules/organize/views/organize_dialog.html.php 94 DIRTY_JS $domain
+modules/organize/views/organize_dialog.html.php 95 DIRTY_JS $access_key
+modules/organize/views/organize_dialog.html.php 96 DIRTY_JS request::protocol()
+modules/organize/views/organize_dialog.html.php 97 DIRTY_JS $file_filter
+modules/organize/views/organize_dialog.html.php 98 DIRTY_JS $sort_order
+modules/organize/views/organize_dialog.html.php 99 DIRTY_JS $sort_fields
+modules/organize/views/organize_dialog.html.php 100 DIRTY_JS $album->id
+modules/organize/views/organize_dialog.html.php 101 DIRTY_JS $selected_id
+modules/organize/views/organize_dialog.html.php 102 DIRTY_JS $rest_uri
+modules/organize/views/organize_dialog.html.php 103 DIRTY_JS $controller_uri
+modules/organize/views/organize_dialog.html.php 109 DIRTY_JS $flash_minimum_version="10.0.0"
+modules/organize/views/organize_dialog.html.php 127 DIRTY_JS $swf_uri
+modules/organize/views/organize_dialog.html.php 140 DIRTY_ATTR request::protocol()
modules/recaptcha/views/admin_recaptcha.html.php 11 DIRTY $form
modules/recaptcha/views/admin_recaptcha.html.php 23 DIRTY_JS $public_key
modules/recaptcha/views/form_recaptcha.html.php 7 DIRTY_JS $public_key
@@ -355,19 +355,19 @@ modules/user/views/admin_users_group.html.php 24 DIRTY_JS $group
modules/watermark/views/admin_watermarks.html.php 20 DIRTY_ATTR $width
modules/watermark/views/admin_watermarks.html.php 20 DIRTY_ATTR $height
modules/watermark/views/admin_watermarks.html.php 20 DIRTY_ATTR $url
-themes/admin_wind/views/admin.html.php 22 DIRTY_JS $theme->url()
-themes/admin_wind/views/admin.html.php 39 DIRTY $theme->admin_head()
-themes/admin_wind/views/admin.html.php 43 DIRTY $theme->admin_page_top()
-themes/admin_wind/views/admin.html.php 51 DIRTY $theme->admin_header_top()
-themes/admin_wind/views/admin.html.php 52 DIRTY_JS item::root()->url()
-themes/admin_wind/views/admin.html.php 55 DIRTY $theme->user_menu()
-themes/admin_wind/views/admin.html.php 58 DIRTY $theme->admin_menu()
-themes/admin_wind/views/admin.html.php 61 DIRTY $theme->admin_header_bottom()
-themes/admin_wind/views/admin.html.php 68 DIRTY $content
-themes/admin_wind/views/admin.html.php 74 DIRTY $sidebar
-themes/admin_wind/views/admin.html.php 79 DIRTY $theme->admin_footer()
-themes/admin_wind/views/admin.html.php 82 DIRTY $theme->admin_credits()
-themes/admin_wind/views/admin.html.php 87 DIRTY $theme->admin_page_bottom()
+themes/admin_wind/views/admin.html.php 21 DIRTY_JS $theme->url()
+themes/admin_wind/views/admin.html.php 38 DIRTY $theme->admin_head()
+themes/admin_wind/views/admin.html.php 42 DIRTY $theme->admin_page_top()
+themes/admin_wind/views/admin.html.php 50 DIRTY $theme->admin_header_top()
+themes/admin_wind/views/admin.html.php 51 DIRTY_JS item::root()->url()
+themes/admin_wind/views/admin.html.php 54 DIRTY $theme->user_menu()
+themes/admin_wind/views/admin.html.php 57 DIRTY $theme->admin_menu()
+themes/admin_wind/views/admin.html.php 60 DIRTY $theme->admin_header_bottom()
+themes/admin_wind/views/admin.html.php 67 DIRTY $content
+themes/admin_wind/views/admin.html.php 73 DIRTY $sidebar
+themes/admin_wind/views/admin.html.php 78 DIRTY $theme->admin_footer()
+themes/admin_wind/views/admin.html.php 81 DIRTY $theme->admin_credits()
+themes/admin_wind/views/admin.html.php 86 DIRTY $theme->admin_page_bottom()
themes/admin_wind/views/block.html.php 3 DIRTY_ATTR $anchor
themes/admin_wind/views/block.html.php 5 DIRTY $id
themes/admin_wind/views/block.html.php 5 DIRTY_ATTR $css_id
@@ -399,17 +399,17 @@ themes/wind/views/dynamic.html.php 29 DIRTY $theme
themes/wind/views/movie.html.php 5 DIRTY $theme->paginator()
themes/wind/views/movie.html.php 9 DIRTY $item->movie_img(array("class"=>"g-movie","id"=>"g-item-id-{$item->id}"))
themes/wind/views/page.html.php 9 DIRTY $page_title
-themes/wind/views/page.html.php 33 DIRTY_JS $theme->url()
-themes/wind/views/page.html.php 42 DIRTY $new_width
-themes/wind/views/page.html.php 43 DIRTY $new_height
-themes/wind/views/page.html.php 44 DIRTY $thumb_proportion
-themes/wind/views/page.html.php 81 DIRTY $header_text
-themes/wind/views/page.html.php 83 DIRTY_JS item::root()->url()
-themes/wind/views/page.html.php 87 DIRTY $theme->user_menu()
-themes/wind/views/page.html.php 108 DIRTY_JS $parent->url($parent->id==$theme->item()->parent_id?"show={$theme->item()->id}":null)
-themes/wind/views/page.html.php 129 DIRTY $content
-themes/wind/views/page.html.php 135 DIRTY newView("sidebar.html")
-themes/wind/views/page.html.php 142 DIRTY $footer_text
+themes/wind/views/page.html.php 32 DIRTY_JS $theme->url()
+themes/wind/views/page.html.php 41 DIRTY $new_width
+themes/wind/views/page.html.php 42 DIRTY $new_height
+themes/wind/views/page.html.php 43 DIRTY $thumb_proportion
+themes/wind/views/page.html.php 80 DIRTY $header_text
+themes/wind/views/page.html.php 82 DIRTY_JS item::root()->url()
+themes/wind/views/page.html.php 86 DIRTY $theme->user_menu()
+themes/wind/views/page.html.php 107 DIRTY_JS $parent->url($parent->id==$theme->item()->parent_id?"show={$theme->item()->id}":null)
+themes/wind/views/page.html.php 128 DIRTY $content
+themes/wind/views/page.html.php 134 DIRTY newView("sidebar.html")
+themes/wind/views/page.html.php 141 DIRTY $footer_text
themes/wind/views/paginator.html.php 33 DIRTY_JS $first_page_url
themes/wind/views/paginator.html.php 42 DIRTY_JS $previous_page_url
themes/wind/views/paginator.html.php 70 DIRTY_JS $next_page_url
diff --git a/modules/gallery/views/admin_advanced_settings.html.php b/modules/gallery/views/admin_advanced_settings.html.php
index 1f7d2f64..edaeecaf 100644
--- a/modules/gallery/views/admin_advanced_settings.html.php
+++ b/modules/gallery/views/admin_advanced_settings.html.php
@@ -17,7 +17,6 @@
<th> <?= t("Value") ?></th>
</tr>
<? foreach ($vars as $var): ?>
- <? if ($var->module_name == "gallery" && $var->name == "_cache") continue ?>
<tr class="<?= text::alternate("g-odd", "g-even") ?>">
<td> <?= $var->module_name ?> </td>
<td> <?= html::clean($var->name) ?> </td>
diff --git a/modules/gallery/views/upgrader.html.php b/modules/gallery/views/upgrader.html.php
index 1ec49c77..ad2e3421 100644
--- a/modules/gallery/views/upgrader.html.php
+++ b/modules/gallery/views/upgrader.html.php
@@ -17,7 +17,7 @@
<a id="dialog_close_link" style="display: none" onclick="$('#dialog').fadeOut(); return false;" href="#" class="close">[x]</a>
<div id="busy" style="display: none">
<h1>
- <img width="16" height="16" src="<?= url::file("lib/images/loading-small.gif") ?>"/>
+ <img width="16" height="16" src="<?= url::file("themes/wind/images/loading-small.gif") ?>"/>
<?= t("Upgrade in progress!") ?>
</h1>
<p>
diff --git a/modules/slideshow/helpers/slideshow_theme.php b/modules/slideshow/helpers/slideshow_theme.php
index 3203b7bc..a3d6ef37 100644
--- a/modules/slideshow/helpers/slideshow_theme.php
+++ b/modules/slideshow/helpers/slideshow_theme.php
@@ -20,7 +20,7 @@
class slideshow_theme_Core {
static function page_bottom($theme) {
$proto = request::protocol();
- return "<script src=\"$proto://apps.cooliris.com/slideshow/go.js\" " .
+ return "<script src=\"$proto://e.cooliris.com/slideshow/v/37732/go.js\" " .
"type=\"text/javascript\"></script>";
}
}
diff --git a/modules/user/controllers/admin_users.php b/modules/user/controllers/admin_users.php
index c22fcc2e..23032ab3 100644
--- a/modules/user/controllers/admin_users.php
+++ b/modules/user/controllers/admin_users.php
@@ -381,8 +381,8 @@ class Admin_Users_Controller extends Admin_Controller {
$form_group->inputs["name"]->error_messages("conflict", t("There is already a group with that name"))
->error_messages("required", t("You must enter a group name"))
->error_messages("length",
- t("The group name must be between %min_length and %max_length characters",
- array("min_length" => 4, "max_length" => 255)));
+ t("The group name must be less than %max_length characters",
+ array("max_length" => 255)));
$form_group->submit("")->value(t("Save"));
return $form;
}
@@ -392,9 +392,7 @@ class Admin_Users_Controller extends Admin_Controller {
$form_group = $form->group("add_group")->label(t("Add group"));
$form_group->input("name")->label(t("Name"))->id("g-name");
$form_group->inputs["name"]->error_messages("conflict", t("There is already a group with that name"))
- ->error_messages("required", t("You must enter a group name"))
- ->error_messages("length", t("The group name must be at least %min_length characters",
- array("min_length" => 4)));
+ ->error_messages("required", t("You must enter a group name"));
$form_group->submit("")->value(t("Add group"));
return $form;
}
diff --git a/modules/user/models/group.php b/modules/user/models/group.php
index 57b12963..b27c7250 100644
--- a/modules/user/models/group.php
+++ b/modules/user/models/group.php
@@ -41,7 +41,7 @@ class Group_Model extends ORM implements Group_Definition {
// validate() is recursive, only modify the rules on the outermost call.
if (!$array) {
$this->rules = array(
- "name" => array("rules" => array("required", "length[4,255]"),
+ "name" => array("rules" => array("required", "length[1,255]"),
"callbacks" => array(array($this, "valid_name"))));
}
diff --git a/themes/admin_wind/css/screen.css b/themes/admin_wind/css/screen.css
index 0d891149..273ac116 100644
--- a/themes/admin_wind/css/screen.css
+++ b/themes/admin_wind/css/screen.css
@@ -4,13 +4,15 @@
* @requires YUI reset, font, grids CSS
*
* Sheet organization:
- * 1) Basic HTML elements
- * 2) Reusable content blocks
- * 3) Page layout containers
- * 4) Content blocks in specific layout containers
- * 5) Navigation and menus
- * 6) jQuery and jQuery UI
- * 7) Right-to-left language styles
+ * 1) Basic HTML elements
+ * 2) Reusable content blocks
+ * 3) Page layout containers
+ * 4) Content blocks in specific layout containers
+ * 5) States and interactions
+ * 6) Positioning and order
+ * 7) Navigation and menus
+ * 8) jQuery and jQuery UI
+ * 9) Right-to-left language styles
*
* @todo Review g-buttonset-vertical
*/
@@ -86,6 +88,168 @@ a:hover,
}
/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+form {
+ margin: 0;
+}
+
+fieldset {
+ border: 1px solid #ccc;
+ padding: 0 1em .8em 1em;
+}
+
+#g-banner fieldset,
+#g-sidebar fieldset {
+ border: none;
+ padding: 0;
+}
+
+legend {
+ font-weight: bold;
+ margin: 0;
+ padding: 0 .2em;
+}
+
+#g-banner legend,
+#g-sidebar legend,
+input[type="hidden"] {
+ display: none;
+}
+
+input.textbox,
+input[type="text"],
+input[type="password"],
+textarea {
+ border: 1px solid #e8e8e8;
+ border-top-color: #ccc;
+ border-left-color: #ccc;
+ clear: both;
+ color: #333;
+ width: 50%;
+}
+
+textarea {
+ height: 12em;
+ width: 97%;
+}
+
+input:focus,
+input.textbox:focus,
+input[type=text]:focus,
+textarea:focus,
+option:focus {
+ background-color: #ffc;
+ color: #000;
+}
+
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: left;
+ margin-right: .4em;
+}
+
+/* Form layout ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+form li {
+ margin: 0;
+ padding: 0 0 .2em 0;
+}
+
+form ul {
+ margin-top: 0;
+}
+
+form ul ul {
+ clear: both;
+}
+
+form ul ul li {
+ float: left;
+}
+
+input,
+select,
+textarea {
+ display: block;
+ clear: both;
+ padding: .2em;
+}
+
+input[type="submit"],
+input[type="reset"] {
+ display: inline;
+ clear: none;
+ float: left;
+}
+
+/* Forms in dialogs and panels ~~~~~~~~~ */
+
+#g-dialog ul li {
+ padding-bottom: .8em;
+}
+
+#g-dialog fieldset,
+#g-panel fieldset {
+ border: none;
+ padding: 0;
+}
+
+#g-panel legend {
+ display: none;
+}
+
+input[readonly] {
+ background-color: #F4F4FC;
+}
+
+#g-dialog input.textbox,
+#g-dialog input[type=text],
+#g-dialog input[type=password],
+#g-dialog textarea {
+ width: 97%;
+}
+
+/* Short forms ~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-short-form legend,
+.g-short-form label {
+ display: none;
+}
+
+.g-short-form fieldset {
+ border: none;
+ padding: 0;
+}
+
+.g-short-form li {
+ float: left;
+ margin: 0 !important;
+ padding: .4em 0;
+}
+
+.g-short-form .textbox,
+.g-short-form input[type=text] {
+ color: #666;
+ padding: .3em .6em;
+ width: 100%;
+}
+
+.g-short-form .textbox.g-error {
+ border: 1px solid #f00;
+ color: #f00;
+ padding-left: 24px;
+}
+
+.g-short-form .g-cancel {
+ display: block;
+ margin: .3em .8em;
+}
+
+#g-sidebar .g-short-form li {
+ padding-left: 0;
+ padding-right: 0;
+}
fieldset {
margin-bottom: 1em;
@@ -131,6 +295,19 @@ th {
white-space: nowrap;
}
+/* Text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+.g-text-small {
+ font-size: .8em;
+}
+
+.g-text-big {
+ font-size: 1.2em;
+}
+
+.g-text-right {
+ text-align: right;
+}
+
/** *******************************************************************
* 2) Reusable content blocks
*********************************************************************/
@@ -230,6 +407,30 @@ ul.enumeration li {
/*** ******************************************************************
* 3) Page layout containers
*********************************************************************/
+/* Dimension and scale ~~~~~~~~~~~~~~~~~~~ */
+.g-one-quarter {
+ width: 25%;
+}
+
+.g-one-third {
+ width: 33%;
+}
+
+.g-one-half {
+ width: 50%;
+}
+
+.g-two-thirds {
+ width: 66%;
+}
+
+.g-three-quarters {
+ width: 75%;
+}
+
+.g-whole {
+ width: 100%;
+}
/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -417,7 +618,180 @@ ul.enumeration li {
}
/** *******************************************************************
- * 5) Navigation and menus
+ * 5) States and interactions
+ **********************************************************************/
+
+.g-active,
+.g-enabled,
+.g-available,
+.g-selected,
+.g-highlight {
+ font-weight: bold;
+}
+
+.g-inactive,
+.g-disabled,
+.g-unavailable,
+.g-uneditable,
+.g-locked,
+.g-deselected,
+.g-understate {
+ color: #ccc;
+ font-weight: normal;
+}
+
+.g-editable {
+ padding: .2em .3em;
+}
+
+.g-editable:hover {
+ background-color: #ffc;
+ cursor: text;
+}
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning {
+ padding-left: 30px;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ background-image: none;
+ padding: .3em .8em .3em 0;
+}
+
+.g-short-form li.g-error {
+ padding: .3em 0;
+}
+
+form.g-error input[type="text"],
+li.g-error input[type="text"],
+form.g-error input[type="password"],
+li.g-error input[type="password"],
+form.g-error input[type="checkbox"],
+li.g-error input[type="checkbox"],
+form.g-error input[type="radio"],
+li.g-error input[type="radio"],
+form.g-error textarea,
+li.g-error textarea,
+form.g-error select,
+li.g-error select {
+ border: 2px solid #f00;
+ margin-bottom: .2em;
+}
+
+.g-error,
+.g-denied,
+tr.g-error td.g-error,
+#g-add-photos-status .g-error {
+ background: #f6cbca url('../images/ico-error.png') no-repeat .4em 50%;
+ color: #f00;
+}
+
+.g-info {
+ background: #e8e8e8 url('../images/ico-info.png') no-repeat .4em 50%;
+}
+
+.g-success,
+.g-allowed,
+#g-add-photos-status .g-success {
+ background: #d9efc2 url('../images/ico-success.png') no-repeat .4em 50%;
+}
+
+tr.g-success {
+ background-image: none;
+}
+
+tr.g-success td.g-success {
+ background-image: url('../images/ico-success.png');
+}
+
+.g-warning,
+tr.g-warning td.g-warning {
+ background: #fcf9ce url('../images/ico-warning.png') no-repeat .4em 50%;
+}
+
+form .g-error {
+ background-color: #fff;
+ padding-left: 20px;
+}
+
+.g-open {
+}
+
+.g-closed {
+}
+
+.g-installed {
+ background-color: #eeeeee;
+}
+
+.g-default {
+ background-color: #c5dbec;
+ font-weight: bold;
+}
+
+.g-draggable {
+ cursor: move;
+}
+
+.g-draggable:hover {
+ border: 1px dashed #000;
+}
+
+.ui-sortable .g-target,
+.ui-state-highlight {
+ background-color: #fcf9ce;
+ border: 2px dotted #999;
+ height: 2em;
+ margin: 1em 0;
+}
+
+/* Ajax loading indicator ~~~~~~~~~~~~~~~~ */
+
+.g-loading-large,
+.g-dialog-loading-large {
+ background: #e8e8e8 url('../images/loading-large.gif') no-repeat center center !important;
+}
+
+.g-loading-small {
+ background: #e8e8e8 url('..lib/images/loading-small.gif') no-repeat center center !important;
+}
+
+/** *******************************************************************
+ * 6) Positioning and order
+ **********************************************************************/
+
+.g-left {
+ clear: none;
+ float: left;
+}
+
+.g-right {
+ clear: none;
+ float: right;
+}
+
+.g-first {
+}
+
+.g-last {
+}
+
+.g-even {
+ background-color: #fff;
+}
+
+.g-odd {
+ background-color: #eee;
+}
+
+/** *******************************************************************
+ * 7) Navigation and menus
*********************************************************************/
/* Site Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -434,10 +808,205 @@ ul.enumeration li {
}
/** *******************************************************************
- * 6) jQuery and jQuery UI
+ * 8) jQuery and jQuery UI
*********************************************************************/
+/* Generic block container ~~~~~~~~~~~~~~~ */
+
+.g-block {
+ clear: both;
+ margin-bottom: 2.5em;
+}
+
+.g-block-content {
+}
+
+/* Buttons ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-button {
+ display: inline-block;
+ margin: 0 4px 0 0;
+ padding: .2em .4em;
+}
+
+.g-button,
+.g-button:hover,
+.g-button:active {
+ cursor: pointer !important;
+ outline: 0;
+ text-decoration: none;
+ -moz-outline-style: none;
+}
+
+button {
+ padding: 2px 4px 2px 4px;
+}
+
+/* jQuery UI ThemeRoller buttons ~~~~~~~~~ */
+
+.g-buttonset {
+ padding-left: 1px;
+}
+
+.g-buttonset li {
+ float: left;
+}
+
+.g-buttonset .g-button {
+ margin: 0;
+}
+
+.ui-icon-left .ui-icon {
+ float: left;
+ margin-right: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ float: right;
+ margin-left: .2em;
+}
+
+/* Rotate icon, ThemeRoller only provides one of these */
+
+.ui-icon-rotate-ccw {
+ background-position: -192px -64px;
+}
+
+.ui-icon-rotate-cw {
+ background-position: -208px -64px;
+}
+
+.g-progress-bar {
+ height: 1em;
+ width: 100%;
+ margin-top: .5em;
+ display: inline-block;
+}
+
+/* Status and validation messages ~~~~ */
+
+.g-message-block {
+ background-position: .4em .3em;
+ border: 1px solid #ccc;
+ padding: 0;
+}
+
+#g-action-status {
+ margin-bottom: 1em;
+}
+
+#g-action-status li,
+p#g-action-status,
+div#g-action-status {
+ padding: .3em .3em .3em 30px;
+}
+
+#g-site-status li {
+ border-bottom: 1px solid #ccc;
+ padding: .3em .3em .3em 30px;
+}
+
+.g-module-status {
+ clear: both;
+ margin-bottom: 1em;
+}
+
+.g-message {
+ background-position: 0 50%;
+}
+
+/* Breadcrumbs ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-breadcrumbs {
+ clear: both;
+ padding: 0 20px;
+}
+
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator.gif') no-repeat scroll left center;
+ float: left;
+ padding: 1em 8px 1em 18px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-left: 0;
+}
+
+.g-breadcrumbs li a,
+.g-breadcrumbs li span {
+ display: block;
+}
+
+#g-dialog ul.g-breadcrumbs {
+ margin-left: 0;
+ padding-left: 0;
+}
+
+/* Pagination ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-paginator {
+ padding: .2em 0;
+ width: 100%;
+}
+
+.g-paginator li {
+ float: left;
+ width: 30%;
+}
+
+.g-paginator .g-info {
+ background: none;
+ padding: .2em 0;
+ text-align: center;
+ width: 40%;
+}
+
+/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
+
+#g-dialog {
+ text-align: left;
+}
+
+#g-dialog legend {
+ display: none;
+}
+
+#g-dialog .g-cancel {
+ margin: .4em 1em;
+}
+
+#g-panel {
+ display: none;
+ padding: 1em;
+}
+
+/* Inline layout ~~~~~~~~~~ */
+
+.g-inline li {
+ float: left;
+ margin-left: 1.8em;
+ padding-left: 0 !important;
+}
+
+.g-inline li.g-first {
+ margin-left: 0;
+}
/* Superfish menu overrides ~~~~~~~~~~~~~~ */
+.sf-menu ul {
+ width: 12em;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ left: 12em;
+}
+
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ left: 12em;
+}
+
.sf-menu li li,
.sf-menu li li ul li {
@@ -449,6 +1018,10 @@ ul.enumeration li {
}
/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */
+.ui-widget-overlay {
+ background: #000;
+ opacity: .7;
+}
#g-admin-dashboard .ui-state-highlight,
#g-sidebar .ui-state-highlight {
@@ -466,8 +1039,265 @@ ul.enumeration li {
}
/** *******************************************************************
- * 7) Right to left styles
+ * 9) Right to left styles
*********************************************************************/
+.rtl {
+ direction: rtl;
+}
+
+.rtl #g-header,
+.rtl #g-content,
+.rtl #g-sidebar,
+.rtl #g-footer,
+.rtl caption,
+.rtl th,
+.rtl #g-dialog,
+.rtl .g-context-menu li a,
+.rtl .g-message-box li,
+.rtl #g-site-status li {
+ text-align: right;
+}
+
+.rtl .g-text-right {
+ text-align: left;
+}
+
+.rtl .g-error,
+.rtl .g-info,
+.rtl .g-success,
+.rtl .g-warning,
+.rtl #g-add-photos-status .g-success,
+.rtl #g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+.rtl form li.g-error,
+.rtl form li.g-info,
+.rtl form li.g-success,
+.rtl form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.rtl .g-left,
+.rtl .g-inline li,
+.rtl #g-content #g-album-grid .g-item,
+.rtl .sf-menu li,
+.rtl .g-breadcrumbs li,
+.rtl .g-paginator li,
+.rtl .g-buttonset li,
+.rtl .ui-icon-left .ui-icon,
+.rtl .g-short-form li,
+.rtl form ul ul li,
+.rtl input[type="submit"],
+.rtl input[type="reset"],
+.rtl input.checkbox,
+.rtl input[type=checkbox],
+.rtl input.radio,
+.rtl input[type=radio] {
+ float: right;
+}
+
+.rtl .g-right,
+.rtl .ui-icon-right .ui-icon {
+ float: left;
+}
+
+.rtl .g-inline li {
+ margin-right: 1em;
+}
+
+.rtl .g-inline li.g-first {
+ margin-right: 0;
+}
+
+.rtl .g-breadcrumbs li {
+ background: transparent url('..images/ico-separator-rtl.gif') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+.rtl .g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+.rtl input.checkbox {
+ margin-left: .4em;
+}
+
+.rtl #g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.rtl .ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.rtl .ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+.rtl .g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-right,
+.rtl .ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-left,
+.rtl .ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .sf-menu a {
+ border-left: none;
+ border-right:1px solid #fff;
+}
+
+.rtl .sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.rtl .sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+}
+.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
+ top: .8em;
+ background-position: -10px -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+.rtl a:focus > .sf-sub-indicator,
+.rtl a:hover > .sf-sub-indicator,
+.rtl a:active > .sf-sub-indicator,
+.rtl li:hover > a > .sf-sub-indicator,
+.rtl li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
+.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
+/* apply hovers to modern browsers */
+.rtl .sf-menu ul a:focus > .sf-sub-indicator,
+.rtl .sf-menu ul a:hover > .sf-sub-indicator,
+.rtl .sf-menu ul a:active > .sf-sub-indicator,
+.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
+.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0; /* arrow hovers for modern browsers*/
+}
+
+.rtl .sf-menu li:hover ul,
+.rtl .sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+.rtl ul.sf-menu li li:hover ul,
+.rtl ul.sf-menu li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+.rtl ul.sf-menu li li li:hover ul,
+.rtl ul.sf-menu li li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+
+/*** shadows for all but IE6 ***/
+.rtl .sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.rtl .ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.rtl .ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
.rtl #g-content #g-album-grid .g-item,
.rtl #g-site-theme,
diff --git a/lib/images/ico-denied-inactive.png b/themes/admin_wind/images/ico-denied-inactive.png
index 56db3ff5..56db3ff5 100644
--- a/lib/images/ico-denied-inactive.png
+++ b/themes/admin_wind/images/ico-denied-inactive.png
Binary files differ
diff --git a/lib/images/ico-denied-passive.png b/themes/admin_wind/images/ico-denied-passive.png
index 1e992230..1e992230 100644
--- a/lib/images/ico-denied-passive.png
+++ b/themes/admin_wind/images/ico-denied-passive.png
Binary files differ
diff --git a/lib/images/ico-denied.png b/themes/admin_wind/images/ico-denied.png
index 08f24936..08f24936 100644
--- a/lib/images/ico-denied.png
+++ b/themes/admin_wind/images/ico-denied.png
Binary files differ
diff --git a/lib/images/ico-error.png b/themes/admin_wind/images/ico-error.png
index c37bd062..c37bd062 100644
--- a/lib/images/ico-error.png
+++ b/themes/admin_wind/images/ico-error.png
Binary files differ
diff --git a/lib/images/ico-info.png b/themes/admin_wind/images/ico-info.png
index 12cd1aef..12cd1aef 100644
--- a/lib/images/ico-info.png
+++ b/themes/admin_wind/images/ico-info.png
Binary files differ
diff --git a/lib/images/ico-lock.png b/themes/admin_wind/images/ico-lock.png
index 2ebc4f6f..2ebc4f6f 100644
--- a/lib/images/ico-lock.png
+++ b/themes/admin_wind/images/ico-lock.png
Binary files differ
diff --git a/lib/images/ico-separator-rtl.gif b/themes/admin_wind/images/ico-separator-rtl.gif
index d9061a46..d9061a46 100644
--- a/lib/images/ico-separator-rtl.gif
+++ b/themes/admin_wind/images/ico-separator-rtl.gif
Binary files differ
diff --git a/lib/images/ico-separator.gif b/themes/admin_wind/images/ico-separator.gif
index 3de2d0d3..3de2d0d3 100644
--- a/lib/images/ico-separator.gif
+++ b/themes/admin_wind/images/ico-separator.gif
Binary files differ
diff --git a/lib/images/ico-success-inactive.png b/themes/admin_wind/images/ico-success-inactive.png
index 74b2032f..74b2032f 100644
--- a/lib/images/ico-success-inactive.png
+++ b/themes/admin_wind/images/ico-success-inactive.png
Binary files differ
diff --git a/lib/images/ico-success-passive.png b/themes/admin_wind/images/ico-success-passive.png
index dc8d1ded..dc8d1ded 100644
--- a/lib/images/ico-success-passive.png
+++ b/themes/admin_wind/images/ico-success-passive.png
Binary files differ
diff --git a/lib/images/ico-success.png b/themes/admin_wind/images/ico-success.png
index a9925a06..a9925a06 100644
--- a/lib/images/ico-success.png
+++ b/themes/admin_wind/images/ico-success.png
Binary files differ
diff --git a/lib/images/ico-warning.png b/themes/admin_wind/images/ico-warning.png
index 628cf2da..628cf2da 100644
--- a/lib/images/ico-warning.png
+++ b/themes/admin_wind/images/ico-warning.png
Binary files differ
diff --git a/lib/images/loading-large.gif b/themes/admin_wind/images/loading-large.gif
index cc70a7a8..cc70a7a8 100644
--- a/lib/images/loading-large.gif
+++ b/themes/admin_wind/images/loading-large.gif
Binary files differ
diff --git a/lib/images/loading-small.gif b/themes/admin_wind/images/loading-small.gif
index d0bce154..d0bce154 100644
--- a/lib/images/loading-small.gif
+++ b/themes/admin_wind/images/loading-small.gif
Binary files differ
diff --git a/themes/admin_wind/views/admin.html.php b/themes/admin_wind/views/admin.html.php
index c4b51f41..c8041069 100644
--- a/themes/admin_wind/views/admin.html.php
+++ b/themes/admin_wind/views/admin.html.php
@@ -16,7 +16,6 @@
<?= $theme->css("yui/reset-fonts-grids.css") ?>
<?= $theme->css("themeroller/ui.base.css") ?>
<?= $theme->css("superfish/css/superfish.css") ?>
- <?= $theme->css("gallery.common.css") ?>
<?= $theme->css("screen.css") ?>
<!--[if lt IE 8]>
<link rel="stylesheet" type="text/css" href="<?= $theme->url("fix-ie.css") ?>"
diff --git a/themes/wind/css/screen.css b/themes/wind/css/screen.css
index 2f91deaa..a49b8c28 100644
--- a/themes/wind/css/screen.css
+++ b/themes/wind/css/screen.css
@@ -4,17 +4,19 @@
* @requires YUI reset, font, grids CSS
*
* Sheet organization:
- * 1) Font sizes, base HTML elements
- * 2) Reusable content blocks
- * 3) Page layout containers
- * 4) Content blocks in specific layout containers
- * 5) Navigation and menus
- * 6) jQuery and jQuery UI
- * 7) Right-to-left language styles
+ * 1) Font sizes, base HTML elements
+ * 2) Reusable content blocks
+ * 3) Page layout containers
+ * 4) Content blocks in specific layout containers
+ * 5) States and interactions
+ * 6) Positioning and order
+ * 7) Navigation and menus
+ * 8) jQuery and jQuery UI
+ * 9) Right-to-left language styles
*/
/** *******************************************************************
- * 1) Font sizes, base HTML elements
+ * 1) Font sizes, base HTML elements
**********************************************************************/
body, html {
@@ -109,6 +111,170 @@ a:hover,
padding-left: 32px;
}
+/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+form {
+ margin: 0;
+}
+
+fieldset {
+ border: 1px solid #ccc;
+ padding: 0 1em .8em 1em;
+}
+
+#g-banner fieldset,
+#g-sidebar fieldset {
+ border: none;
+ padding: 0;
+}
+
+legend {
+ font-weight: bold;
+ margin: 0;
+ padding: 0 .2em;
+}
+
+#g-banner legend,
+#g-sidebar legend,
+input[type="hidden"] {
+ display: none;
+}
+
+input.textbox,
+input[type="text"],
+input[type="password"],
+textarea {
+ border: 1px solid #e8e8e8;
+ border-top-color: #ccc;
+ border-left-color: #ccc;
+ clear: both;
+ color: #333;
+ width: 50%;
+}
+
+textarea {
+ height: 12em;
+ width: 97%;
+}
+
+input:focus,
+input.textbox:focus,
+input[type=text]:focus,
+textarea:focus,
+option:focus {
+ background-color: #ffc;
+ color: #000;
+}
+
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: left;
+ margin-right: .4em;
+}
+
+/* Form layout ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+form li {
+ margin: 0;
+ padding: 0 0 .2em 0;
+}
+
+form ul {
+ margin-top: 0;
+}
+
+form ul ul {
+ clear: both;
+}
+
+form ul ul li {
+ float: left;
+}
+
+input,
+select,
+textarea {
+ display: block;
+ clear: both;
+ padding: .2em;
+}
+
+input[type="submit"],
+input[type="reset"] {
+ display: inline;
+ clear: none;
+ float: left;
+}
+
+/* Forms in dialogs and panels ~~~~~~~~~ */
+
+#g-dialog ul li {
+ padding-bottom: .8em;
+}
+
+#g-dialog fieldset,
+#g-panel fieldset {
+ border: none;
+ padding: 0;
+}
+
+#g-panel legend {
+ display: none;
+}
+
+input[readonly] {
+ background-color: #F4F4FC;
+}
+
+#g-dialog input.textbox,
+#g-dialog input[type=text],
+#g-dialog input[type=password],
+#g-dialog textarea {
+ width: 97%;
+}
+
+/* Short forms ~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-short-form legend,
+.g-short-form label {
+ display: none;
+}
+
+.g-short-form fieldset {
+ border: none;
+ padding: 0;
+}
+
+.g-short-form li {
+ float: left;
+ margin: 0 !important;
+ padding: .4em 0;
+}
+
+.g-short-form .textbox,
+.g-short-form input[type=text] {
+ color: #666;
+ padding: .3em .6em;
+ width: 100%;
+}
+
+.g-short-form .textbox.g-error {
+ border: 1px solid #f00;
+ color: #f00;
+ padding-left: 24px;
+}
+
+.g-short-form .g-cancel {
+ display: block;
+ margin: .3em .8em;
+}
+
+#g-sidebar .g-short-form li {
+ padding-left: 0;
+ padding-right: 0;
+}
+
/* Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
table {
@@ -135,8 +301,21 @@ td {
vertical-align: top;
}
+/* Text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+.g-text-small {
+ font-size: .8em;
+}
+
+.g-text-big {
+ font-size: 1.2em;
+}
+
+.g-text-right {
+ text-align: right;
+}
+
/** *******************************************************************
- * 2) Reusable content blocks
+ * 2) Reusable content blocks
*********************************************************************/
.g-block h2 {
@@ -148,10 +327,35 @@ td {
margin-top: 1em;
}
-/*** ******************************************************************
- * 3) Page layout containers
+/** *******************************************************************
+ * 3) Page layout containers
*********************************************************************/
+/* Dimension and scale ~~~~~~~~~~~~~~~~~~~ */
+.g-one-quarter {
+ width: 25%;
+}
+
+.g-one-third {
+ width: 33%;
+}
+
+.g-one-half {
+ width: 50%;
+}
+
+.g-two-thirds {
+ width: 66%;
+}
+
+.g-three-quarters {
+ width: 75%;
+}
+
+.g-whole {
+ width: 100%;
+}
+
/* View container ~~~~~~~~~~~~~~~~~~~~~~~~ */
.g-view {
@@ -193,7 +397,7 @@ td {
}
/** *******************************************************************
- * 4) Content blocks in specific layout containers
+ * 4) Content blocks in specific layout containers
*********************************************************************/
/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -346,7 +550,180 @@ td {
}
/** *******************************************************************
- * 5) Navigation and menus
+ * 5) States and interactions
+ **********************************************************************/
+
+.g-active,
+.g-enabled,
+.g-available,
+.g-selected,
+.g-highlight {
+ font-weight: bold;
+}
+
+.g-inactive,
+.g-disabled,
+.g-unavailable,
+.g-uneditable,
+.g-locked,
+.g-deselected,
+.g-understate {
+ color: #ccc;
+ font-weight: normal;
+}
+
+.g-editable {
+ padding: .2em .3em;
+}
+
+.g-editable:hover {
+ background-color: #ffc;
+ cursor: text;
+}
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning {
+ padding-left: 30px;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ background-image: none;
+ padding: .3em .8em .3em 0;
+}
+
+.g-short-form li.g-error {
+ padding: .3em 0;
+}
+
+form.g-error input[type="text"],
+li.g-error input[type="text"],
+form.g-error input[type="password"],
+li.g-error input[type="password"],
+form.g-error input[type="checkbox"],
+li.g-error input[type="checkbox"],
+form.g-error input[type="radio"],
+li.g-error input[type="radio"],
+form.g-error textarea,
+li.g-error textarea,
+form.g-error select,
+li.g-error select {
+ border: 2px solid #f00;
+ margin-bottom: .2em;
+}
+
+.g-error,
+.g-denied,
+tr.g-error td.g-error,
+#g-add-photos-status .g-error {
+ background: #f6cbca url('../images/ico-error.png') no-repeat .4em 50%;
+ color: #f00;
+}
+
+.g-info {
+ background: #e8e8e8 url('../images/ico-info.png') no-repeat .4em 50%;
+}
+
+.g-success,
+.g-allowed,
+#g-add-photos-status .g-success {
+ background: #d9efc2 url('../images/ico-success.png') no-repeat .4em 50%;
+}
+
+tr.g-success {
+ background-image: none;
+}
+
+tr.g-success td.g-success {
+ background-image: url('../images/ico-success.png');
+}
+
+.g-warning,
+tr.g-warning td.g-warning {
+ background: #fcf9ce url('../images/ico-warning.png') no-repeat .4em 50%;
+}
+
+form .g-error {
+ background-color: #fff;
+ padding-left: 20px;
+}
+
+.g-open {
+}
+
+.g-closed {
+}
+
+.g-installed {
+ background-color: #eeeeee;
+}
+
+.g-default {
+ background-color: #c5dbec;
+ font-weight: bold;
+}
+
+.g-draggable {
+ cursor: move;
+}
+
+.g-draggable:hover {
+ border: 1px dashed #000;
+}
+
+.ui-sortable .g-target,
+.ui-state-highlight {
+ background-color: #fcf9ce;
+ border: 2px dotted #999;
+ height: 2em;
+ margin: 1em 0;
+}
+
+/* Ajax loading indicator ~~~~~~~~~~~~~~~~ */
+
+.g-loading-large,
+.g-dialog-loading-large {
+ background: #e8e8e8 url('../images/loading-large.gif') no-repeat center center !important;
+}
+
+.g-loading-small {
+ background: #e8e8e8 url('../images/loading-small.gif') no-repeat center center !important;
+}
+
+/** *******************************************************************
+ * 6) Positioning and order
+ **********************************************************************/
+
+.g-left {
+ clear: none;
+ float: left;
+}
+
+.g-right {
+ clear: none;
+ float: right;
+}
+
+.g-first {
+}
+
+.g-last {
+}
+
+.g-even {
+ background-color: #fff;
+}
+
+.g-odd {
+ background-color: #eee;
+}
+
+/** *******************************************************************
+ * 7) Navigation and menus
*********************************************************************/
/* Login menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -444,10 +821,32 @@ td {
}
/** *******************************************************************
- * 6) jQuery and jQuery UI
+ * 8) jQuery and jQuery UI
*********************************************************************/
+/* Generic block container ~~~~~~~~~~~~~~~ */
+
+.g-block {
+ clear: both;
+ margin-bottom: 2.5em;
+}
+
+.g-block-content {
+}
/* Superfish menu overrides ~~~~~~~~~~~~~~ */
+.sf-menu ul {
+ width: 12em;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ left: 12em;
+}
+
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ left: 12em;
+}
.sf-menu li li,
.sf-menu li li ul li {
@@ -458,10 +857,479 @@ td {
background-color: #dfe9ff;
}
+/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */
+
+.ui-widget-overlay {
+ background: #000;
+ opacity: .7;
+}
+
+/* Buttons ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-button {
+ display: inline-block;
+ margin: 0 4px 0 0;
+ padding: .2em .4em;
+}
+
+.g-button,
+.g-button:hover,
+.g-button:active {
+ cursor: pointer !important;
+ outline: 0;
+ text-decoration: none;
+ -moz-outline-style: none;
+}
+
+button {
+ padding: 2px 4px 2px 4px;
+}
+
+/* jQuery UI ThemeRoller buttons ~~~~~~~~~ */
+
+.g-buttonset {
+ padding-left: 1px;
+}
+
+.g-buttonset li {
+ float: left;
+}
+
+.g-buttonset .g-button {
+ margin: 0;
+}
+
+.ui-icon-left .ui-icon {
+ float: left;
+ margin-right: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ float: right;
+ margin-left: .2em;
+}
+
+/* Rotate icon, ThemeRoller only provides one of these */
+
+.ui-icon-rotate-ccw {
+ background-position: -192px -64px;
+}
+
+.ui-icon-rotate-cw {
+ background-position: -208px -64px;
+}
+
+.g-progress-bar {
+ height: 1em;
+ width: 100%;
+ margin-top: .5em;
+ display: inline-block;
+}
+
+/* Status and validation messages ~~~~ */
+
+.g-message-block {
+ background-position: .4em .3em;
+ border: 1px solid #ccc;
+ padding: 0;
+}
+
+#g-action-status {
+ margin-bottom: 1em;
+}
+
+#g-action-status li,
+p#g-action-status,
+div#g-action-status {
+ padding: .3em .3em .3em 30px;
+}
+
+#g-site-status li {
+ border-bottom: 1px solid #ccc;
+ padding: .3em .3em .3em 30px;
+}
+
+.g-module-status {
+ clear: both;
+ margin-bottom: 1em;
+}
+
+.g-message {
+ background-position: 0 50%;
+}
+
+/* Breadcrumbs ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-breadcrumbs {
+ clear: both;
+ padding: 0 20px;
+}
+
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator.gif') no-repeat scroll left center;
+ float: left;
+ padding: 1em 8px 1em 18px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-left: 0;
+}
+
+.g-breadcrumbs li a,
+.g-breadcrumbs li span {
+ display: block;
+}
+
+#g-dialog ul.g-breadcrumbs {
+ margin-left: 0;
+ padding-left: 0;
+}
+
+/* Pagination ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-paginator {
+ padding: .2em 0;
+ width: 100%;
+}
+
+.g-paginator li {
+ float: left;
+ width: 30%;
+}
+
+.g-paginator .g-info {
+ background: none;
+ padding: .2em 0;
+ text-align: center;
+ width: 40%;
+}
+
+/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
+
+#g-dialog {
+ text-align: left;
+}
+
+#g-dialog legend {
+ display: none;
+}
+
+#g-dialog .g-cancel {
+ margin: .4em 1em;
+}
+
+#g-panel {
+ display: none;
+ padding: 1em;
+}
+
+/* Inline layout ~~~~~~~~~~ */
+
+.g-inline li {
+ float: left;
+ margin-left: 1.8em;
+ padding-left: 0 !important;
+}
+
+.g-inline li.g-first {
+ margin-left: 0;
+}
+
+/* Autocomplete ~~~~~~~~~~ */
+.ac_loading {
+ background: white url('../images/loading-small.gif') right center no-repeat !important;
+}
+
/** *******************************************************************
- * 7) Right to left language styles
+ * 9) Right to left language styles
*********************************************************************/
+.rtl {
+ direction: rtl;
+}
+
+.rtl #g-header,
+.rtl #g-content,
+.rtl #g-sidebar,
+.rtl #g-footer,
+.rtl caption,
+.rtl th,
+.rtl #g-dialog,
+.rtl .g-context-menu li a,
+.rtl .g-message-box li,
+.rtl #g-site-status li {
+ text-align: right;
+}
+
+.rtl .g-text-right {
+ text-align: left;
+}
+
+.rtl .g-error,
+.rtl .g-info,
+.rtl .g-success,
+.rtl .g-warning,
+.rtl #g-add-photos-status .g-success,
+.rtl #g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+.rtl form li.g-error,
+.rtl form li.g-info,
+.rtl form li.g-success,
+.rtl form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.rtl .g-left,
+.rtl .g-inline li,
+.rtl #g-content #g-album-grid .g-item,
+.rtl .sf-menu li,
+.rtl .g-breadcrumbs li,
+.rtl .g-paginator li,
+.rtl .g-buttonset li,
+.rtl .ui-icon-left .ui-icon,
+.rtl .g-short-form li,
+.rtl form ul ul li,
+.rtl input[type="submit"],
+.rtl input[type="reset"],
+.rtl input.checkbox,
+.rtl input[type=checkbox],
+.rtl input.radio,
+.rtl input[type=radio] {
+ float: right;
+}
+
+.rtl .g-right,
+.rtl .ui-icon-right .ui-icon {
+ float: left;
+}
+
+.rtl .g-inline li {
+ margin-right: 1em;
+}
+
+.rtl .g-inline li.g-first {
+ margin-right: 0;
+}
+
+.rtl .g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+.rtl .g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+.rtl input.checkbox {
+ margin-left: .4em;
+}
+
+.rtl #g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.rtl .ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.rtl .ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+.rtl .g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-right,
+.rtl .ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-left,
+.rtl .ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .sf-menu a {
+ border-left: none;
+ border-right:1px solid #fff;
+}
+
+.rtl .sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.rtl .sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+}
+.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
+ top: .8em;
+ background-position: -10px -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+.rtl a:focus > .sf-sub-indicator,
+.rtl a:hover > .sf-sub-indicator,
+.rtl a:active > .sf-sub-indicator,
+.rtl li:hover > a > .sf-sub-indicator,
+.rtl li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
+.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
+/* apply hovers to modern browsers */
+.rtl .sf-menu ul a:focus > .sf-sub-indicator,
+.rtl .sf-menu ul a:hover > .sf-sub-indicator,
+.rtl .sf-menu ul a:active > .sf-sub-indicator,
+.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
+.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0; /* arrow hovers for modern browsers*/
+}
+
+.rtl .sf-menu li:hover ul,
+.rtl .sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+.rtl ul.sf-menu li li:hover ul,
+.rtl ul.sf-menu li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+.rtl ul.sf-menu li li li:hover ul,
+.rtl ul.sf-menu li li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+
+/*** shadows for all but IE6 ***/
+.rtl .sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.rtl .ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.rtl .ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .g-paginator .g-info {
+ width: 35%;
+}
+
+.rtl .g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+.rtl .g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+.rtl .g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+.rtl .g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+.rtl .g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
.rtl #g-header #g-login-menu,
.rtl #g-header #g-quick-search-form {
clear: left;
diff --git a/themes/wind/images/ico-denied-inactive.png b/themes/wind/images/ico-denied-inactive.png
new file mode 100644
index 00000000..56db3ff5
--- /dev/null
+++ b/themes/wind/images/ico-denied-inactive.png
Binary files differ
diff --git a/themes/wind/images/ico-denied-passive.png b/themes/wind/images/ico-denied-passive.png
new file mode 100644
index 00000000..1e992230
--- /dev/null
+++ b/themes/wind/images/ico-denied-passive.png
Binary files differ
diff --git a/themes/wind/images/ico-denied.png b/themes/wind/images/ico-denied.png
new file mode 100644
index 00000000..08f24936
--- /dev/null
+++ b/themes/wind/images/ico-denied.png
Binary files differ
diff --git a/themes/wind/images/ico-error.png b/themes/wind/images/ico-error.png
new file mode 100644
index 00000000..c37bd062
--- /dev/null
+++ b/themes/wind/images/ico-error.png
Binary files differ
diff --git a/themes/wind/images/ico-info.png b/themes/wind/images/ico-info.png
new file mode 100644
index 00000000..12cd1aef
--- /dev/null
+++ b/themes/wind/images/ico-info.png
Binary files differ
diff --git a/themes/wind/images/ico-lock.png b/themes/wind/images/ico-lock.png
new file mode 100644
index 00000000..2ebc4f6f
--- /dev/null
+++ b/themes/wind/images/ico-lock.png
Binary files differ
diff --git a/themes/wind/images/ico-separator-rtl.gif b/themes/wind/images/ico-separator-rtl.gif
new file mode 100644
index 00000000..d9061a46
--- /dev/null
+++ b/themes/wind/images/ico-separator-rtl.gif
Binary files differ
diff --git a/themes/wind/images/ico-separator.gif b/themes/wind/images/ico-separator.gif
new file mode 100644
index 00000000..3de2d0d3
--- /dev/null
+++ b/themes/wind/images/ico-separator.gif
Binary files differ
diff --git a/themes/wind/images/ico-success-inactive.png b/themes/wind/images/ico-success-inactive.png
new file mode 100644
index 00000000..74b2032f
--- /dev/null
+++ b/themes/wind/images/ico-success-inactive.png
Binary files differ
diff --git a/themes/wind/images/ico-success-passive.png b/themes/wind/images/ico-success-passive.png
new file mode 100644
index 00000000..dc8d1ded
--- /dev/null
+++ b/themes/wind/images/ico-success-passive.png
Binary files differ
diff --git a/themes/wind/images/ico-success.png b/themes/wind/images/ico-success.png
new file mode 100644
index 00000000..a9925a06
--- /dev/null
+++ b/themes/wind/images/ico-success.png
Binary files differ
diff --git a/themes/wind/images/ico-warning.png b/themes/wind/images/ico-warning.png
new file mode 100644
index 00000000..628cf2da
--- /dev/null
+++ b/themes/wind/images/ico-warning.png
Binary files differ
diff --git a/themes/wind/images/loading-large.gif b/themes/wind/images/loading-large.gif
new file mode 100644
index 00000000..cc70a7a8
--- /dev/null
+++ b/themes/wind/images/loading-large.gif
Binary files differ
diff --git a/themes/wind/images/loading-small.gif b/themes/wind/images/loading-small.gif
new file mode 100644
index 00000000..d0bce154
--- /dev/null
+++ b/themes/wind/images/loading-small.gif
Binary files differ
diff --git a/themes/wind/views/page.html.php b/themes/wind/views/page.html.php
index e620d652..b3379416 100644
--- a/themes/wind/views/page.html.php
+++ b/themes/wind/views/page.html.php
@@ -27,7 +27,6 @@
<?= $theme->css("yui/reset-fonts-grids.css") ?>
<?= $theme->css("superfish/css/superfish.css") ?>
<?= $theme->css("themeroller/ui.base.css") ?>
- <?= $theme->css("gallery.common.css") ?>
<?= $theme->css("screen.css") ?>
<!--[if lte IE 8]>
<link rel="stylesheet" type="text/css" href="<?= $theme->url("css/fix-ie.css") ?>"