From e51496abf9938622057cdc80dac9dba99b7cc55b Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Fri, 6 Aug 2010 14:29:42 -0700 Subject: [PATCH] Initial commit of the themeroller module. It takes an upload of the zip file produced by jqueryui.com/themeroller and generates a theme based on the color schema contained in the zip file. Still fairly experimental --- .../controllers/admin_themeroller.php | 180 ++++ .../data/admin_views/admin.html.php | 87 ++ .../data/admin_views/block.html.php | 18 + .../data/admin_views/pager.html.php | 44 + modules/themeroller/data/css/fix-ie.css | 53 ++ modules/themeroller/data/js/admin_ui.init.js | 62 ++ modules/themeroller/data/js/site_ui.init.js | 122 +++ .../data/masks/admin_thumbnail/thumbnail.png | Bin 0 -> 3672 bytes .../thumbnail_bgColorContent.png | Bin 0 -> 8118 bytes .../thumbnail_bgColorDefault.png | Bin 0 -> 2785 bytes .../thumbnail_bgColorHeader.png | Bin 0 -> 3662 bytes .../thumbnail_borderColorDefault.png | Bin 0 -> 1943 bytes .../admin_thumbnail/thumbnail_fcActive.png | Bin 0 -> 782 bytes .../admin_thumbnail/thumbnail_fcDefault.png | Bin 0 -> 14003 bytes .../admin_thumbnail/thumbnail_fcHeader.png | Bin 0 -> 3563 bytes .../css/themeroller/ui-icons_mask_256x240.png | Bin 0 -> 8151 bytes .../data/masks/images/avatar_mask.png | Bin 0 -> 1656 bytes .../data/masks/images/ico-album_mask.png | Bin 0 -> 453 bytes .../masks/images/ico-denied-active_mask.png | Bin 0 -> 496 bytes .../masks/images/ico-denied-inactive_mask.png | Bin 0 -> 496 bytes .../masks/images/ico-denied-passive_mask.png | Bin 0 -> 496 bytes .../data/masks/images/ico-error_mask.png | Bin 0 -> 631 bytes .../data/masks/images/ico-help_mask.png | Bin 0 -> 711 bytes .../data/masks/images/ico-info_mask.png | Bin 0 -> 669 bytes .../data/masks/images/ico-lock_mask.png | Bin 0 -> 741 bytes .../data/masks/images/ico-print_mask.png | Bin 0 -> 918 bytes .../masks/images/ico-separator-rtl_mask.png | Bin 0 -> 210 bytes .../data/masks/images/ico-separator_mask.png | Bin 0 -> 206 bytes .../masks/images/ico-success-active_mask.png | Bin 0 -> 380 bytes .../images/ico-success-inactive_mask.png | Bin 0 -> 1316 bytes .../masks/images/ico-success-passive_mask.png | Bin 0 -> 1316 bytes .../masks/images/ico-view-comments_mask.png | Bin 0 -> 723 bytes .../masks/images/ico-view-fullsize_mask.png | Bin 0 -> 1088 bytes .../images/ico-view-slideshow-rtl_mask.png | Bin 0 -> 969 bytes .../masks/images/ico-view-slideshow_mask.png | Bin 0 -> 976 bytes .../data/masks/images/ico-warning_mask.png | Bin 0 -> 594 bytes .../masks/images/select-photos-backg_mask.png | Bin 0 -> 1339 bytes .../data/masks/site_thumbnail/thumbnail.png | Bin 0 -> 22930 bytes .../thumbnail_bgColorContent.png | Bin 0 -> 3773 bytes .../thumbnail_bgColorDefault.png | Bin 0 -> 1855 bytes .../thumbnail_bgColorHeader.png | Bin 0 -> 2390 bytes .../site_thumbnail/thumbnail_fcDefault.png | Bin 0 -> 3651 bytes .../thumbnail_iconColorHover.png | Bin 0 -> 831 bytes modules/themeroller/data/views/album.html.php | 42 + modules/themeroller/data/views/block.html.php | 10 + .../themeroller/data/views/dynamic.html.php | 29 + modules/themeroller/data/views/movie.html.php | 19 + .../data/views/no_sidebar.html.php | 6 + modules/themeroller/data/views/page.html.php | 151 +++ .../themeroller/data/views/paginator.html.php | 87 ++ modules/themeroller/data/views/photo.html.php | 38 + .../themeroller/data/views/sidebar.html.php | 16 + modules/themeroller/helpers/themeroller.php | 181 ++++ .../themeroller/helpers/themeroller_event.php | 27 + .../helpers/themeroller_installer.php | 35 + .../themeroller/helpers/themeroller_task.php | 220 +++++ modules/themeroller/module.info | 3 + .../themeroller/views/admin_screen.css.php | 622 +++++++++++++ .../views/admin_themeroller_progress.html.php | 64 ++ .../views/admin_themeroller_upload.html.php | 65 ++ modules/themeroller/views/site_screen.css.php | 864 ++++++++++++++++++ modules/themeroller/views/theme.info.php | 8 + 62 files changed, 3053 insertions(+) create mode 100755 modules/themeroller/controllers/admin_themeroller.php create mode 100644 modules/themeroller/data/admin_views/admin.html.php create mode 100644 modules/themeroller/data/admin_views/block.html.php create mode 100644 modules/themeroller/data/admin_views/pager.html.php create mode 100644 modules/themeroller/data/css/fix-ie.css create mode 100644 modules/themeroller/data/js/admin_ui.init.js create mode 100644 modules/themeroller/data/js/site_ui.init.js create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail.png create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorContent.png create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorDefault.png create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorHeader.png create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail_borderColorDefault.png create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail_fcActive.png create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail_fcDefault.png create mode 100755 modules/themeroller/data/masks/admin_thumbnail/thumbnail_fcHeader.png create mode 100644 modules/themeroller/data/masks/css/themeroller/ui-icons_mask_256x240.png create mode 100644 modules/themeroller/data/masks/images/avatar_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-album_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-denied-active_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-denied-inactive_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-denied-passive_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-error_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-help_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-info_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-lock_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-print_mask.png create mode 100755 modules/themeroller/data/masks/images/ico-separator-rtl_mask.png create mode 100755 modules/themeroller/data/masks/images/ico-separator_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-success-active_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-success-inactive_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-success-passive_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-view-comments_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-view-fullsize_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-view-slideshow-rtl_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-view-slideshow_mask.png create mode 100644 modules/themeroller/data/masks/images/ico-warning_mask.png create mode 100644 modules/themeroller/data/masks/images/select-photos-backg_mask.png create mode 100755 modules/themeroller/data/masks/site_thumbnail/thumbnail.png create mode 100755 modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorContent.png create mode 100755 modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorDefault.png create mode 100755 modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorHeader.png create mode 100755 modules/themeroller/data/masks/site_thumbnail/thumbnail_fcDefault.png create mode 100755 modules/themeroller/data/masks/site_thumbnail/thumbnail_iconColorHover.png create mode 100644 modules/themeroller/data/views/album.html.php create mode 100644 modules/themeroller/data/views/block.html.php create mode 100644 modules/themeroller/data/views/dynamic.html.php create mode 100644 modules/themeroller/data/views/movie.html.php create mode 100644 modules/themeroller/data/views/no_sidebar.html.php create mode 100644 modules/themeroller/data/views/page.html.php create mode 100644 modules/themeroller/data/views/paginator.html.php create mode 100644 modules/themeroller/data/views/photo.html.php create mode 100644 modules/themeroller/data/views/sidebar.html.php create mode 100644 modules/themeroller/helpers/themeroller.php create mode 100644 modules/themeroller/helpers/themeroller_event.php create mode 100644 modules/themeroller/helpers/themeroller_installer.php create mode 100644 modules/themeroller/helpers/themeroller_task.php create mode 100755 modules/themeroller/module.info create mode 100644 modules/themeroller/views/admin_screen.css.php create mode 100644 modules/themeroller/views/admin_themeroller_progress.html.php create mode 100755 modules/themeroller/views/admin_themeroller_upload.html.php create mode 100644 modules/themeroller/views/site_screen.css.php create mode 100644 modules/themeroller/views/theme.info.php diff --git a/modules/themeroller/controllers/admin_themeroller.php b/modules/themeroller/controllers/admin_themeroller.php new file mode 100755 index 00000000..89a9a57e --- /dev/null +++ b/modules/themeroller/controllers/admin_themeroller.php @@ -0,0 +1,180 @@ +form, $v->errors) = $this->_get_upload_form(); + $v->is_writable = is_writable(THEMEPATH); + $v->action = "admin/themeroller/form_create"; + $submit_class = "ui-state-default ui-corner-all submit g-left"; + + if ($v->not_writable = !is_writable(THEMEPATH)) { + $submit_class .= " ui-state-disabled"; + } + $v->submit_class = $submit_class; + $v->script_data = array( + "g3sid" => Session::instance()->id(), + "user_agent" => Input::instance()->server("HTTP_USER_AGENT"), + "csrf" => access::csrf_token()); + json::reply(array("html" => (string) $v)); + } + + public function form_create() { + $theme_name = Session::instance()->get_once("theme_name"); + json::reply(array("html" => (string) $this->_get_theme_form($theme_name))); + } + + public function upload() { + access::verify_csrf(); + + //list ($v->form, $v->errors) = $this->_get_upload_form(); + + $validation = new Validation(array_merge($_POST, $_FILES)); + $validation->add_rules("zip_file", "upload::valid", "upload::required", "upload::type[zip]"); + $validation->add_rules("is_admin", "chars[0,1]"); + $validation->add_callbacks("zip_file", array($this, "_unload_zip")); + if ($validation->validate()) { + $session = Session::instance(); + $themeroller_name = $session->get("themeroller_name"); + $is_admin = $validation["is_admin"]; + $counter = 0; + $theme_name_generated = ($is_admin ? "admin_" : "") . $themeroller_name; + while (file_exists(THEMEPATH . "$theme_name_generated/theme.info")) { + $counter++; + $theme_name_generated = "{$theme_name_generated}_{$counter}"; + } + + $theme_name = strtolower(strtr($theme_name_generated, " ", "_")); + $session->set("theme_name", $theme_name); + $session->set("themeroller_is_admin", $is_admin); + print "FILEID: {$validation["zip_file"]["tmp_name"]}"; + } else { + header("HTTP/1.1 400 Bad Request"); + print "ERROR: " . t("Invalid zip archive"); + } + } + + public function create() { + access::verify_csrf(); + + $form = $this->_get_theme_form(); + if ($form->validate()) { + $session = Session::instance(); + $extract_path = $session->get_once("theme_extract_path"); + $v = new View("admin_themeroller_progress.html"); + + $task_def = Task_Definition::factory() + ->callback("themeroller_task::create_theme") + ->description(t("Generate theme from a themeroller archive")) + ->name(t("Generate theme")); + + $v->task = task::create($task_def, + array("path" => $extract_path, + "original_name" => $form->theme->original->value, + "theme_name" => $form->theme->theme_name->value, + "display_name" => $form->theme->display_name->value, + "description" => $form->theme->description->value, + "is_admin" => $session->get("themeroller_is_admin"))); + + json::reply(array("html" => (string) $v)); + } else { + json::reply(array("result" => "error", "html" => (string) $form)); + } + } + + /** + * Run the task of creating the theme + */ + static function run($task_id) { + access::verify_csrf(); + + $task = ORM::factory("task", $task_id); + if (!$task->loaded() || $task->owner_id != identity::active_user()->id) { + access::forbidden(); + } + + $task = task::run($task_id); + + // Prevent the JavaScript code from breaking by forcing a period as + // decimal separator for all locales with sprintf("%F", $value). + json::reply(array("done" => (bool)$task->done, + "status" => (string)$task->status, + "percent_complete" => sprintf("%F", $task->percent_complete))); + } + + static function _is_theme_defined($name) { + $theme_name = strtolower(strtr($name->value, " ", "_")); + if (file_exists(THEMEPATH . "$theme_name/theme.info")) { + $name->add_error("conflict", 1); + } + } + + public function _unload_zip(Validation $post, $field) { + $zipfile = $post["zip_file"]["tmp_name"]; + if (false !== ($extract_path = themeroller::extract_zip_file($zipfile))) { + $theme_name = themeroller::get_theme_name($extract_path); + if (!empty($theme_name)) { + Session::instance()->set("themeroller_name", $theme_name); + } else { + Kohana_Log::add("error", "zip file: css directory not found"); + $post->add_error($field, "invalid zipfile"); + } + } else { + Kohana_Log::add("error", "zip file: open failed"); + $post->add_error($field, "invalid zipfile"); + } + if (file_exists($zipfile)) { + unlink($zipfile); + } + } + + private function _get_theme_form($theme_name=null) { + $form = new Forge("admin/themeroller/create", "", "post", array("id" => "g-themeroller-create-form")); + $form_group = $form->group("theme")->label(t("Create theme")); + $original_name = $form_group->hidden("original"); + $name_field = $form_group->input("theme_name")->label(t("Theme Name"))->id("g-name") + ->rules("required") + ->callback("Admin_Themeroller_Controller::_is_theme_defined") + ->error_messages("conflict", t("There is already a theme with that name")) + ->error_messages("required", t("You must enter a theme name")); + $display_name = $form_group->input("display_name")->label(t("Display Name")) + ->id("g-display-name") + ->rules("required") + ->error_messages("required", t("You must enter a theme display name")); + if (!empty($theme_name)) { + $name_field->value($theme_name); + $display_name->value(ucwords(t("%name theme", array("name" => $theme_name)))); + $original_name->hidden("original")->value(Session::instance()->get("themeroller_name")); + } + $form_group->textarea("description")->label(t("Description")) + ->id("g-description") + ->rules("required") + ->error_messages("required", t("You must enter a theme description name")); + $form_group->submit("")->value(t("Create")); + + return $form; + } + + private function _get_upload_form() { + $form = array("zip_file" => "", "is_admin" => ""); + $errors = array_fill_keys(array_keys($form), ""); + return array($form, $errors); + } +} \ No newline at end of file diff --git a/modules/themeroller/data/admin_views/admin.html.php b/modules/themeroller/data/admin_views/admin.html.php new file mode 100644 index 00000000..f9ef18c7 --- /dev/null +++ b/modules/themeroller/data/admin_views/admin.html.php @@ -0,0 +1,87 @@ + + + + + + + <? if ($page_title): ?> + <?= t("Gallery Admin: %page_title", array("page_title" => $page_title)) ?> + <? else: ?> + <?= t("Admin dashboard") ?> + <? endif ?> + + " type="image/x-icon" /> + + css("yui/reset-fonts-grids.css") ?> + css("themeroller/ui.base.css") ?> + css("superfish/css/superfish.css") ?> + css("gallery.common.css") ?> + css("screen.css") ?> + + + script("jquery.js") ?> + script("jquery.form.js") ?> + script("jquery-ui.js") ?> + script("gallery.common.js") ?> + + + script("gallery.ajax.js") ?> + script("gallery.dialog.js") ?> + script("superfish/js/superfish.js") ?> + script("ui.init.js") ?> + + admin_head() ?> + + + body_attributes() ?>> + admin_page_top() ?> + +
+ +
+ + site_status() ?> +
+ admin_header_top() ?> + + user_menu() ?> + + + + admin_header_bottom() ?> +
+
+
+
+
+ messages() ?> + +
+
+
+ +
+ +
+ +
+ +
+ admin_page_bottom() ?> + + diff --git a/modules/themeroller/data/admin_views/block.html.php b/modules/themeroller/data/admin_views/block.html.php new file mode 100644 index 00000000..d1d2d088 --- /dev/null +++ b/modules/themeroller/data/admin_views/block.html.php @@ -0,0 +1,18 @@ + + + + + diff --git a/modules/themeroller/data/admin_views/pager.html.php b/modules/themeroller/data/admin_views/pager.html.php new file mode 100644 index 00000000..5fff5845 --- /dev/null +++ b/modules/themeroller/data/admin_views/pager.html.php @@ -0,0 +1,44 @@ + + + diff --git a/modules/themeroller/data/css/fix-ie.css b/modules/themeroller/data/css/fix-ie.css new file mode 100644 index 00000000..ac100da4 --- /dev/null +++ b/modules/themeroller/data/css/fix-ie.css @@ -0,0 +1,53 @@ +/** + * Fix display in IE 6, 7 + */ + +#g-banner { + z-index: 2; + zoom: 1; +} + +#g-sidebar { + overflow: hidden; +} + +#g-photo, +#g-movie { + zoom: 1; +} + +#g-photo .g-context-menu, +#g-movie .g-context-menu { + width: 240px; +} + +input.submit { + clear: none !important; + display: inline !important; +} + +.g-short-form input[type='submit'] { + line-height: 1em; + padding: .38em .3em; +} + +#g-add-tag-form input.textbox { + width: 110px !important; +} + +#g-add-tag-form input[type='submit'] { + padding: .3em 0 !important; +} + +#g-dialog .g-cancel { + display: inline-block !important; + float: none !important; +} + +.g-paginator .g-text-right { + width: 29%; +} + +.g-paginator .ui-icon-right { + width: 60px; +} diff --git a/modules/themeroller/data/js/admin_ui.init.js b/modules/themeroller/data/js/admin_ui.init.js new file mode 100644 index 00000000..4ed912f8 --- /dev/null +++ b/modules/themeroller/data/js/admin_ui.init.js @@ -0,0 +1,62 @@ +/** + * Initialize jQuery UI and Gallery Plugins + * @todo Move ui-corner-all assignments to theme admin views + */ + +$(document).ready(function(){ + + // Initialize Superfish menus + $("#g-site-admin-menu .g-menu").hide().addClass("sf-menu"); + $("#g-site-admin-menu .g-menu").superfish({ + delay: 500, + animation: { + opacity: "show", + height: "show" + }, + pathClass: "g-selected", + speed: "fast" + }).show(); + + // Initialize status message effects + $("#g-action-status li").gallery_show_message(); + + // Initialize modal dialogs + $(".g-dialog-link").gallery_dialog(); + + // Initialize short forms + $(".g-short-form").gallery_short_form(); + + // Initialize ajax links + $(".g-ajax-link").gallery_ajax(); + + // Initialize panels + $(".g-panel-link").gallery_panel(); + + if ($("#g-photo-stream").length) { + // Vertically align thumbs in photostream + $(".g-item").gallery_valign(); + } + + // Apply jQuery UI button css to submit inputs + $("input[type=submit]:not(.g-short-form input)").addClass("ui-state-default ui-corner-all"); + + // Round view menu buttons + if ($("#g-admin-comments-menu").length) { + $("#g-admin-comments-menu ul").removeClass("g-menu"); + $("#g-admin-comments-menu").addClass("g-buttonset"); + $("#g-admin-comments-menu a").addClass("g-button ui-state-default"); + $("#g-admin-comments-menu ul li:first a").addClass("ui-corner-left"); + $("#g-admin-comments-menu ul li:last a").addClass("ui-corner-right"); + } + + // Round corners + $(".g-selected").addClass("ui-corner-all"); + $(".g-available .g-block").addClass("ui-corner-all"); + $(".g-unavailable").addClass("ui-corner-all"); + + // Remove titles for menu options since we're displaying that text anyway + $(".sf-menu a, .sf-menu li").removeAttr("title"); + + // Initialize button hover effect + $.fn.gallery_hover_init(); +}); diff --git a/modules/themeroller/data/js/site_ui.init.js b/modules/themeroller/data/js/site_ui.init.js new file mode 100644 index 00000000..a4fc0e2f --- /dev/null +++ b/modules/themeroller/data/js/site_ui.init.js @@ -0,0 +1,122 @@ +/** + * Initialize jQuery UI and Gallery Plugins + */ + +$(document).ready(function() { + + // Initialize Superfish menus (hidden, then shown to address IE issue) + $("#g-site-menu .g-menu").hide().addClass("sf-menu"); + $("#g-site-menu .g-menu").superfish({ + delay: 500, + animation: { + opacity:'show', + height:'show' + }, + pathClass: "g-selected", + speed: 'fast' + }).show(); + + // Initialize status message effects + $("#g-action-status li").gallery_show_message(); + + // Initialize dialogs + $(".g-dialog-link").gallery_dialog(); + + // Initialize short forms + $(".g-short-form").gallery_short_form(); + + // Apply jQuery UI icon, hover, and rounded corner styles + $("input[type=submit]:not(.g-short-form input)").addClass("ui-state-default ui-corner-all"); + if ($("#g-view-menu").length) { + $("#g-view-menu ul").removeClass("g-menu").removeClass("sf-menu"); + $("#g-view-menu a").addClass("ui-icon"); + } + + // Apply jQuery UI icon and hover styles to context menus + if ($(".g-context-menu").length) { + $(".g-context-menu li").addClass("ui-state-default"); + $(".g-context-menu a").addClass("g-button ui-icon-left"); + $(".g-context-menu a").prepend(""); + $(".g-context-menu a span").each(function() { + var iconClass = $(this).parent().attr("class").match(/ui-icon-.[^\s]+/).toString(); + $(this).addClass(iconClass); + }); + } + + // Remove titles for menu options since we're displaying that text anyway + $(".sf-menu a, .sf-menu li").removeAttr("title"); + + // Album and search results views + if ($("#g-album-grid").length) { + // Set equal height for album items and vertically align thumbnails/metadata + $('.g-item').equal_heights().gallery_valign(); + + // Initialize thumbnail hover effect + $(".g-item").hover( + function() { + // Insert a placeholder to hold the item's position in the grid + var placeHolder = $(this).clone().attr("id", "g-place-holder"); + $(this).after($(placeHolder)); + // Style and position the hover item + var position = $(this).position(); + $(this).css("top", position.top).css("left", position.left); + $(this).addClass("g-hover-item"); + // Initialize the contextual menu + $(this).gallery_context_menu(); + // Set the hover item's height + $(this).height("auto"); + var context_menu = $(this).find(".g-context-menu"); + var adj_height = $(this).height() + context_menu.height(); + if ($(this).next().height() > $(this).height()) { + $(this).height($(this).next().height()); + } else if ($(this).prev().height() > $(this).height()) { + $(this).height($(this).prev().height()); + } else { + $(this).height(adj_height); + } + }, + function() { + // Reset item height and position + if ($(this).next().height()) { + var sib_height = $(this).next().height(); + } else { + var sib_height = $(this).prev().height(); + } + if ($.browser.msie && $.browser.version >= 8) { + sib_height = sib_height + 1; + } + $(this).css("height", sib_height); + $(this).css("position", "relative"); + $(this).css("top", 0).css("left", 0); + // Remove the placeholder and hover class from the item + $(this).removeClass("g-hover-item"); + $("#g-place-holder").remove(); + } + ); + } + + // Photo/Item item view + if ($("#g-photo,#g-movie").length) { + // Ensure the resized image fits within its container + $("#g-photo,#g-movie").gallery_fit_photo(); + + // Initialize context menus + $("#g-photo,#g-movie").hover(function(){ + $(this).gallery_context_menu(); + }); + + // Add scroll effect for links to named anchors + $.localScroll({ + queue: true, + duration: 1000, + hash: true + }); + + $(this).find(".g-dialog-link").gallery_dialog(); + $(this).find(".g-ajax-link").gallery_ajax(); + } + + // Initialize button hover effect + $.fn.gallery_hover_init(); + +}); diff --git a/modules/themeroller/data/masks/admin_thumbnail/thumbnail.png b/modules/themeroller/data/masks/admin_thumbnail/thumbnail.png new file mode 100755 index 0000000000000000000000000000000000000000..801976ba1519cc7e2b02d58083f557aa0fd2d9be GIT binary patch literal 3672 zcmds4=Q|q?*S6J&QAF)(jo3xe^ru$Us=fDCd&eqjv^6VssjWth1hLgFeo9oNHnr7? z2n{u2yq@QJ|A_Z`Kiua&_xWHunXY9b;cfTo73;Vpl^Md%%h+t`-T zjkzV_KtpvEqPlU;-CIHCs;r|-M1)ACxpW}E)l_~O7J)=WbOZkZ@vv`|^KFq0^1>Wq z zp|OLz24K)PBBnow@8w7D`H$Ws8D5$*E=w79=RN5Fg$>d%tP(Bn;|iVpx7q?sKTi&V zLjqeyer`o8Wr{AASLifqlEx5KyMOKcG+($I!jrojrBJE)H0YOvbP*4oP=YF zFXo%^ec|+j(5~<(uVLTHWWP0gmgRhL%;m`dT-p`-`1qQz(OCq>4~86l%Z!TJUAbP{ z!Rr-WoV4i`cKe}FD?NUbhWBU)N--$wRi4yh+ndGl`t{#+1>3sEyG4YdcUvu~0vY}; zlkoOO?cA(t($~04)vav&2FCA19NR$?4-*{6i4|O-hSiFrPRwu|3V1q%GPNjwOxf^? zMjinEts?<)adnutVh3Hi825cHx1qI)X`e`o2^3@Njj9C`6vzMWTyLw)?&av}$hF=0 zB3b<_U2U!n*(nJsF^Zr1Mr`seZ85ODH}0N+8yN53iDs=+0=g%;oq7O5r|!XlZ1;Q> z*V%|$Fn;ivYUt7X5u%0#dba1G2P>l{}B{gB+u#7W<{qvh@ zc!l!b;?#p>{L6}q&*dF)S4cUDy7tEeyPxOuby_^OSH8Qe^y6AaD`CbLGwE*)w>5I6 z=9tp8Whye%;8_%{v`bQE9KEjz>tZ=WP21wO*{`Bb5zSYKVogG-JP51U@N%IsQiEC+ z%$M1s`jZt?aoy9;LUZ)Rr7llrRTHp zXn@*R`A}mP&+_v+s6{e+KFItOemofaq#=ZaloW1W+!TzCX7-Q;v6uPW8>KdI07avm zSnPs-olZnP+L_+r*(sE}kJeY^RsY;zCCo@eDG8Q@mY9XAVJ0}~OWHb_Y_NdCubvb4 zQu}@6w!~1MTC~+%Wb>E;=2Gmsx{Vp+830yL6eCv*7-X0@e`xfo@ zo$>C;$(674HmTUFzEVocG2oK*C6t-&)*WGFxC$sUFXju~I@$ zJdgaI#A{G)7Hhp*X zCUoD#F+I^S!i$Wt7?5HhvHk$!4UjwzmMK-(R4d~I_Se2r`WW!BMi|Lt8*dU39pvT< zP39_NJc+ST@a5LdI^L*KFXYQ7Bqi2Om5Z}8ytS>~S(!?ZdP_I`QR?iM zsd;VE&^Vf^t?X`kRp4@TRt~f9{)05-RGrY7vZ$Bz&Wx=IDCkTa!@{7aw~oW$fURn5 zP{LO(+V6&R2_q$Xp)bPti3klcC*&vsIiP^&UM`*GdF7m3!wS#-bDOyh1xvS@a6nt`uL26c6F`*k2$0xPu z#eBihZq5&>g7($uJ~tEPPsLPC({Zq0zsLo{Z2K4H*$Ez1kh@cP)1i=?l+e{QwGU#n z6+TDNSwL5zi>EG#{MK)VLcz3l0PWvTY3U%m`)#}ou-miU`Xlvzz>v6iQkaBMSv{Q7 zAWFs=Au{~XR`oe|bAlnpa)gEIiGeNbKYLW#e`WMQSfNV*@l`fatap2X(o#?>Ho+<) z8j7hJ^DEwn#+vntaS$KJ`N zykd#)tXQ9bW{2*tQq%qgmxycIK`5(1qbAKV7YHW|k%#vC+2;mECb8*j;!iw<8R){c z014GFW5$}m2m6f)HX=y}P=UeN;K3L7@*HgkRcsyhfc!A^2wd!Rm6Os(h>|D^RnCuh z8a63&{3NsV84mu@UfCE1=KASmn{wW*m=(|XABImulxluf!dp`uEA&`0&EJh^#@swbxRzClOOU{Xh!FXQG|jv=~q@lk1+ICWz;tgL;&RMJ0cEuR6| zcZ%=Ycq?dQmwQ(ELON&0Oxcan^97Zy&%Zg34i#GAUyLxt7!ZiKQh$1Cp6eOPrytqwo5<`vLq|xpweOO;N6pC2{?=fWcbHjbN& zXh#~av%u|&maCSDEjNSX1i>OU`Sb6I@nIC_W#s35jjRm+s9!xtDf%ro@_;BcV)TR? zPS0Aqt`rx#|70qlwm}V|&hMRs}X?c+zJ`9fEj-R literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorContent.png b/modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorContent.png new file mode 100755 index 0000000000000000000000000000000000000000..85d5dda68048cce951f677f07afac5346200da77 GIT binary patch literal 8118 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 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorDefault.png b/modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorDefault.png new file mode 100755 index 0000000000000000000000000000000000000000..e4ba7bd136710c9a313ecf69c0ddf9e027b02500 GIT binary patch literal 2785 zcmeHJ={wuo7XC>jC1NP5LP}~@LqlpRB`H-(Rns++qMgPOv4AVRmmVHbrrbmM9u>3KDLh=Kpdyjc zh?96oU7kD5%rVK8k$f9)(>6Bf_59Gthe@ZRRaVL3wUzC`kAiyjlc${GUO(qn?@O6J z|K+$xTQkF#KVKc2R9s?o;hKh6T7-J93}pXLWJvL`$c6j$1$kj9Q2|{m!s%IxyXMfj zGQNc=^9MOqug#*o5~h;mAiDE08DDdx1%x`c_hQGPwYsT<86FgA=Bf&8vd8p-CDz> zuJp_z5h(~JP>Mamyv~&NsMCvIX^%HD#5Z`gBSptcYFvn(KKV(C?1weUhHGXyvxf#^ zTuHtDuBi@Nc#w$YPn~#U++@d{C>1g73O3P*uJgs*&&hm#8+`X-%Eq`Lqp(rK+;7<) zr6>)!S)#5n+oU)r*3VD<)^40$nZA^M0l)(+h^K&+{=lyzrfK3Ffpy%J%v2b*wXRhs zq))!4=yCQPO*Y{G3q+DjR9#PQUQ)91*+`E(KmA7Rv|0AQuVsp8>_re;GrHo z;6VFsk*u_rD&`7FMQ|#xmR?6e9RVPEk!yATkV%PSbbV2zV4||2ihssJg;&q*cBFyJ z=vg!yQvK;by;A&tV98=nO>j+v@cq(Mdzq4M!0W|bw`ixhp?)g!iIn{N zlj;;5P!hNrYX(AVE|+}%2{CSzSTL7S^{d8rcoPwjuY$BW z|KEh!PVDFksdDU_*$t^B?|Hj%M|Cj|Xy{!8Sgc#!$A|o(q4y%H0X}4kfgT&!SAQ~U zj1OhYK`$qiPGY2Y5K-Ns@p1{Jd$%+ORxx&!Te1<{D}$m&Rjj?Dpm`)CN#-6_cS+>P zg>rK3Cu670<_pDptBY}M2?py+wV#a-lxh7e$NTP>bbeibpz>|Y_{u&?%ZE#ejGp#*VfpSJjq%-bDAwo~Y$Es$1b;^n{8vtTX%6SWq8UP;@ce zdz-A+7L(Gu%rDD9s9R15L^>Swyny9m#Kr7R#{qk*Y?gBU=z(&nU6oay|TVZbJbsd z->}Z3NESgy=#_8!KmBC!9#)-n&F!8rSTa{Q<&~BRk5tnh{h&zcd)Nr(!^mmGJuK|A zpH#>@0OI#fE>dU^fH-iZ>aem2K(%tukKsLpZq&%&3}A&^yYGHi9ph*^RXg>`9tC2LPb@>uB7diG;d(RdkW$d1 z>QnQuQK7JDj1^Qt7xe5zX?ULH7q?Gw@_9!oV9`Y(;?`+urKN3up&)4j-O(c~NP5!> zQV zI5z5HrWKb^i$RknEWeiY-dbsiG`WpKD|r7go3h}u9Lh#xl9fqSTPA%?hPXu8>L;As zJ)%?|)Z>2M4`TgeXojDK@7oOQ3N_8Fn32eC&lD%p%^)YYusURG<}r6iB;b^DD7Ei~R6$Pw z%5Rj5Ie^N?Bq}y=K)CyBH~fUL3`7R<`W-OYFo3Zel5v>R@Ab$Xr#pC+kDe~h&JQk=}OJYrN4Z07zu(lWvc|TCV`iz}L^=Y4se**!h@YVnT literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorHeader.png b/modules/themeroller/data/masks/admin_thumbnail/thumbnail_bgColorHeader.png new file mode 100755 index 0000000000000000000000000000000000000000..fba00029cae26d31644458b9b21b916d48572a6b GIT binary patch literal 3662 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 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/admin_thumbnail/thumbnail_borderColorDefault.png b/modules/themeroller/data/masks/admin_thumbnail/thumbnail_borderColorDefault.png new file mode 100755 index 0000000000000000000000000000000000000000..e38bb48d5ca181f2fb6886e05812d37a3691f263 GIT binary patch literal 1943 zcmb7_YgAI{8pjd0x-rEqhnc((Z3{{pHNr^CR5oFNnt92xt5hmoEJaPRq!iCM*lkSB zmX}Bq9VZDh%?vYd6qc7#JCls5O;V;zSy-B7$Jyu0taUz}bv``rvwrV~=lMUEcfDCb zfgDS7J97*MW69&PLr~v=ng}#S&)Ydodej*ugm73GWe;f_1wepoLNJ(`pBK#SH9;8{ z$K9TQ!Qk8fV@8_T%1HFmHqkdcF*G(hF?nx%6eeiz!J~<;fxcVdBsW)vD}#4>?ga*8 zX2xS9TSR-_UiOM5`P!rz6T_F>l(4gNxoVcHE7yqP52zejENLd*ud%b)W8R4KE@oSj zUF0lDWBy}5yB^2J#TNlUMahF%%P!fZ;_JX*kyvnaY^Y#N9!3$2%!*!%lcJL*N83!M zzKq{*o-7wQ2qWWTi4s_r~tFN=i-^{Pygb{q?PSQ%N=jdIP;Nzgb`Zo9NTT0e>@7YA%gq25ZeN9ByOa2!f)YsR*EVK-eb(u_qxk_{K6>3j*{Hr2 zV=C0n`R}I+b8N1-yURaWfiF{+_i;Q|Q&e@9AYD?tdX-$5(fvO7d_G)Z}|}>1R&X1tOJnJ*%}?J7>^wH-~|Y*LR8B2!n7x zq1)b>TG{aCj;4fGdcc9}Xm~ov;Xk(su~z<2A=8(sUm<&a%b1LIAP+R$JE&y<4jcYu z9kiqaT9_X`5kl=Yb>J3`23EV^U@6rx&_B1u1KCqteDd>P#5_Z;naXt+jFjy(+$U5~ zXn|KOPzjOy8lF0z<3I~1)W?^m!NWlzL1zJo@*uc;^Dr0=8fyHbqO+){7vEB=Zl_ky z>K?Y%CKVa((E>Vm8tp2vuKEehaB_aEJ1SQ<;z@G9a;13M3#c3a=7_wD9gZcFNDfj< zc8_p5Ef89|apclE?xDQA)@8d{g*KCbGayu*xyT5QU%mjjYsE0}0|!8ZzI|veqTrSS zLYxs{p*MDoq@msp*@Yu4K8vR6GCi^53$e+5=FiFgDJzyXDUX`(;?z^*h?WviXOOg6 zQ-~=OZ_!F90N`BxRC{oTtaepKcKr%a*9AuiPKCy$_L`_UN5kZPh3B5o_Y-?L*{c&m zeXFh6_i0bS>%cyuE>rTUG?TI7$otxDkoaY_-yi-iHP>Qnjv-8ABcPXNURS!QMG-h5 zUU)|M&lU>qfHqfpB_n`zQ}Y{dcyPjAs^)K`Hcs}lXcg>SzIkQ zE>$`|)nCHIZvEJq+qVSOdBM_g=z~87nKQ`iIzX5kY3!FgM_@wD>z!QaSTKZEqS0uy znF_5=_o~z99hvlRgKFq^ z-uzs8rkV{^efL5gc&(otdHArt?57halBZ`D&!@rE(6+FoXy}_;N01*aV_>HQo>m-x z+*N?wqn|1Yj!PXrB9NJN!BmYs;)m52%a(T3%??scG(<@v*s$#O&teOI=K_8hdsT*` zXg~^w$yEwGfI!<{i==%9{*B5XKnY9^*}WBz5aar9OwZJudLL}+ub3LVo1B+A*1EnZ zan1P6&U>25bzY9TwbJ&M#-7YBc+5?Dd*;hp3&BXyGHu2UGvPz(FX7S9G`tn3wrI1U z=Q%1n35$#NyF|fUxx{(p%4Wf_EFA^3!FEU2u8g?4XP=9U%kG1>cHFj20S5>J0|TFH zW}a7?)cn|%0@?VYL$w5n5EJS%#)2$7lesa?mi^#dB^#aA65~zoQ2_Mch^|n6&Wv7T zuopj^DSOje8sIrodAFLpXvHzzVCsXUcd=9EVmq5t#c*z?w zDsUaMBn>0UCZhr4F<3gb3#K1sQ&|{zV4AdUpMJz`(#%=jq}YQW5v|g146wqXg@NEaTqUrkY$!J=Vv?XO``p<<&N2rY(-aiU09R5weyzKWVVCf`}zMouQ4|6V_;-r;Sf-8XrMCVgLGr}=H}07w(q8u z?Q#@I2`_(q>e$-kYoG2u_m|0TF8nmTYT}uwo5PenZF8L9iZVC7Ps%&zq19d loHXz;)q`+w8(6RUfmt}oZtu#YUqLCJ!PC{xWt~$(699=b&K3Xw literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/admin_thumbnail/thumbnail_fcDefault.png b/modules/themeroller/data/masks/admin_thumbnail/thumbnail_fcDefault.png new file mode 100755 index 0000000000000000000000000000000000000000..450d826bacd0630c50baa4acee2cef8c019cfc36 GIT binary patch literal 14003 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 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/admin_thumbnail/thumbnail_fcHeader.png b/modules/themeroller/data/masks/admin_thumbnail/thumbnail_fcHeader.png new file mode 100755 index 0000000000000000000000000000000000000000..8c3dd3a535c7220eb0c18117918b8b22d86b8be6 GIT binary patch literal 3563 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 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/css/themeroller/ui-icons_mask_256x240.png b/modules/themeroller/data/masks/css/themeroller/ui-icons_mask_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..e941eda537bfcfaa8c1ee4585871f4f6960d6e66 GIT binary patch literal 8151 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 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/avatar_mask.png b/modules/themeroller/data/masks/images/avatar_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..96c7e42703e512380dad100b88db482de2ddb024 GIT binary patch literal 1656 zcmV-;28a2HP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000ib000ib0l1NC?EnA(8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt z{NMlp1<6T7K~z{rt(Rv{)JqhHc|mVWlOia+cT_rT=v`Wn-n$W`2t=yV0vJLQX&?6Z ze@-&@LgF>MdN(=Q*_l&+r_8L2i<6(o$jI^H;$j&Z8j{7uMOj{6mVto*DK9S<>uk?S zb2M3FvpP%^q`|Fy094Ra;R3{x&>lj;2O^rqt78WMYpFdZFHk(b2f`E^Yj|2n+ z==rl}&m<=&N2;o-{vRhoLqqqvySv5H(^Fo)d@0s%jU3}%US4XP-#8Qz5h1a$vAWma z-;c9)$3pxKS6Nw^q^GA#Vq&5sBqV6`!2bUIds$sw)gok#L)1lle7ri5mX;t8!C zIXS7&l7A>JE>3g3w6rAQ;o%zf+S;1#;bc)!k-UEWTK6X=CjQ<549(8Y3TdDgR#sNz z)2C08l$4~A;tdAMX7bz8(xN#S^ieu>b zBL|4Mt*uSli&kUWVaP-Z+!%nU0Xl@USFc`a2e`SpsVq9s<+Kx}rKM6*QleE)b<+)I z9xw}toEnIUiP3dbRFoR8uC7)&WI%;Ax}0`^mTPZs*Pf>B$SZJWWMt?tq9f=K_E=l@ zfS!$wjcLTlFdxu?E~gzJItma3TwPuD`@@G1+G-fU38IgVj@ClNLC)ZTmlS{iI?&~m z13^JSHUlM5K#bz;?QPlL-P4p;a z3`4993h=;-48}m{ePXHNSO675Cvn@v>z4BoJWZH&QpxSB5F{AShL3& zJn$leECq}%0y5}f3!939^}5MnkZ|Qf& z6+G}FgDg7GMLIzi8wCXgnkK7$+FYy$rhQ~&@v8O3(H zUDqfF;`8%!IXykq$l=4FnS96^Vmh)93d{vk#Eto+6@iWy3{g{52L}ggi03$G6c&Ur z^4{0ir_diA9m(L}pdx@%d_$%_nwy&yAtL7eNL_HX|8f{vt@yi*YU^zCVBdEbx5$_Dvzi zxH*Ft8GbW4sR5@Q`2PL77A5}!A)JBeYYcD|-`?KJ-QAsD$LukdF$kH##svKF;9v&VvLW}@2T|qIeudnME z<^1yUQtJQ|=p5z==R8sl4-d6X&(6-|=H})<9ry|Nq>-|IKiiN10000!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z;_sg8IR|$ zNC65;mbgZg1m~xflqVLYG6W=M=9TFAxrQi|8S9zqnR<5pdBDKHDCX(n7-Hc+ck=!| zR|kos`T9yqEGK*I1+_${ripU3vVUOEYK>ZXxkA{#=zj9#+MdnlRA%om<|Drzh1PA;gQ8LoAV2b4gSWQp2@_~#BkZ9QBVJ&Rxrc)=fZ~#8tUA+4t%fuQp>;V z&cV=S3^CVTua_;J?ihO=rWI(UYhVLJ>$1!)XP5oTtOpkVd0GFVOz8GD*UKhJ z@~c)kMNT{MIi^I^b>a`JZMog=N@B&WnD?bJd~a?r@fB=Sv^g*QJ6VFw#8=pgIqKiU c|B;9EL)AGr-I+h61A~#l)78&qol`;+0F}Y0=l}o! literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-denied-active_mask.png b/modules/themeroller/data/masks/images/ico-denied-active_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5b9cdb881fc0e1d8a36407424c757d93e62ffa GIT binary patch literal 496 zcmVpF8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE;UJt{NMlp0c}Y{K~y+Tt&@j}!cY)J{Q|LI5Q4p6??w{~vHSl&beA*mHoB+_ z%LXp*WioT`w4_r1{iM@rb-P`y*K2Jy8$%RD8V-lbWHS1wS1y+=u-EIUSS%`+%c)Q( z2zw9&+U<6#*XyrIa0reAJT@bW^njXwVmh6wQmN>8JZe6lCj_uot5w5b zFtAbpS-CqW1c*&06P-?{gn%wnGpUY7BR;$Ye#_<3O1xgL3Bh)|wML=-8v)ruaJ$_S z0%lDxwbN;o-2B~%4In`MPXrkE`@Lm>0yBSHB6sIxQs?v8e7={84P!|NhJ=PWMS>_1 zFn|2+_q#3G(^kUFk`TzYF+!%`(tZr4*)LZbCuYou=mjGKi^amaj`G`J$4F{4i8?Qr mi!}>Sb3UK{{4@RK&;9}zy98q9)*s6N0000pF8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE;UJt{NMlp0c}Y{K~y+Tt&@j}!cY)J{Q|LI5Q4p6??w{~vHSl&beA*mHoB+_ z%LXp*WioT`w4_r1{iM@rb-P`y*K2Jy8$%RD8V-lbWHS1wS1y+=u-EIUSS%`+%c)Q( z2zw9&+U<6#*XyrIa0reAJT@bW^njXwVmh6wQmN>8JZe6lCj_uot5w5b zFtAbpS-CqW1c*&06P-?{gn%wnGpUY7BR;$Ye#_<3O1xgL3Bh)|wML=-8v)ruaJ$_S z0%lDxwbN;o-2B~%4In`MPXrkE`@Lm>0yBSHB6sIxQs?v8e7={84P!|NhJ=PWMS>_1 zFn|2+_q#3G(^kUFk`TzYF+!%`(tZr4*)LZbCuYou=mjGKi^amaj`G`J$4F{4i8?Qr mi!}>Sb3UK{{4@RK&;9}zy98q9)*s6N0000pF8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE;UJt{NMlp0c}Y{K~y+Tt&@j}!cY)J{Q|LI5Q4p6??w{~vHSl&beA*mHoB+_ z%LXp*WioT`w4_r1{iM@rb-P`y*K2Jy8$%RD8V-lbWHS1wS1y+=u-EIUSS%`+%c)Q( z2zw9&+U<6#*XyrIa0reAJT@bW^njXwVmh6wQmN>8JZe6lCj_uot5w5b zFtAbpS-CqW1c*&06P-?{gn%wnGpUY7BR;$Ye#_<3O1xgL3Bh)|wML=-8v)ruaJ$_S z0%lDxwbN;o-2B~%4In`MPXrkE`@Lm>0yBSHB6sIxQs?v8e7={84P!|NhJ=PWMS>_1 zFn|2+_q#3G(^kUFk`TzYF+!%`(tZr4*)LZbCuYou=mjGKi^amaj`G`J$4F{4i8?Qr mi!}>Sb3UK{{4@RK&;9}zy98q9)*s6N0000N2bPDNB8 zb~7$DE;UJt{NMlp0rW{kK~y+TtyA0TDPa`-L95lWp?f5NQmOQ)R4Uw85(ILwSnTETctELCg3V?Fbi>AO zw}VQh0>9r6&1Un}Znys?L7+U5NZh?%F9VYU8dPGFN~Iu^$$(m|hF~xVy^ehsP{ah{wg+c)|8VxiW4H%EdBZ&Y%5Gbd^;b1^fQ6wN>u~>w1xePv^ z56J0kHWMTQ{NPQ@7=>9C6-5F9R;yL0)oOqxg2iHi#bWW62=L`wr_(WY(JCp*WHJ_m zfLI>1S}my8>#X3_YV{$&OoGeh0=L^OStUh!XD}ET5Sxc?w+rEL7y^L+Y`5D_gifb3 zA^`1Nv`UI%1Oj67(C_!bWHP~MG=lwp|0!`W7|3~^zf%W#y9a;EV=|d=)9Lg@Js6Efwr|lo9x^bS%?x}z9$)A4`TJ>{&*$87xqOfs<#alo ztOp`P0YKp6dcA%Jiz`{L*NV+%!|!%G0dqdl?i1|_m&=8}-EP1CO#kv{{{i&QSaPxX R*6siR002ovPDHLkV1kf04c7nw literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-help_mask.png b/modules/themeroller/data/masks/images/ico-help_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef8611a04622d674be22e9cbbfaccdb44726c GIT binary patch literal 711 zcmV;&0yzDNP)pF8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE;UJt{NMlp0z^qfK~y+Tty5b|Dq$4uEfFFSq`VO-X=Yx!XrbbRf@Xq21|ngK zNRntbLqi>V=tcC+3MsYdcg?f@0j1Z~w?8<_0qNmz1{U+p%-(D7wf3Hch5vn-OeTZb zY!)mQi@3G5HMZGoV~4{b?(FOcdwY9^U+b}?nAK_>t*)*@sZ>Iv(Qv3#DrmJ@cs!nw z&*zKHC9&J>vF+{c$;!$K3U26BA0KmqySqEw-`}HLE_1M8)M_=<>vish z(P+fe)6+}>)6;OdTwsfXVzD?)TwY#=OeTXM2pmK}lVGDnyWO6d$XeDjeM7c^VB_Q+ zP*o<4gOVGK2AJ7kyMj)qGkke@nT?UmU_r6R$HxhciGot86doQPcN2bPDNB8 zb~7$DE;UJt{NMlp0vbs~K~y+Tty9TrDgh7-p5kYy_z7Z^1Q%Qq5Q3V63yKSh2BJ|D z6QVP&DB?j6UKA0b;Ym!ve~RNpU>|eA0NSDvB1sE4deFq7Sic7wA<|+!ug{J zc6AmCg~P+c1E^FgxVyUpkH-T(pAQ@k2k7;BaJ${m@AnVAUhhwlkB<*IlD94(NhXu=3YZSOy}dDB zUS3$>^Yim8fYEHob(hP<0u&h)%H?v9N~M4%1KtH-#Jt}9{XHy~%kv7IPDjKT*>UPl zWVKoi5{ZOYP%4#BEEX9=#+6CnY+|?Dl@A7kEoE-CT6tvZis=9v4CQhe@EZ9p$fwn6 zwMCp`Bs0e2v2!+?9Rh&>9}$^JBjbJWT9goZv|g_dNdEa6F&Yxt)oL{!)o3&_=n|XF zCXsi4C4WaUpU)K-kw7M4@g7Ng{HJFD@%zX0FJJZ-D}Qr-t$}!g00000NkvXXu0mjf Dci|m9 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-lock_mask.png b/modules/themeroller/data/masks/images/ico-lock_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..f14d037b3d832b70e95ee725590e538336c56ebf GIT binary patch literal 741 zcmVN2bPDNB8 zb~7$DE;UJt{NMlp0%A!-K~y+TZByM!YGDxVCh)H;f6BB>MGzw*%Al+?@h?pfH44*; zG)*Z|DNPg=y)b;49-!N9dxNOE^Bn7ZGjNpjY#8?b*fVR^w`R@M)Yx-zaiK`3)7|Uq z>-S71^O?)#J`07y`~CfWw^S-A#`AxjQ>oPE<>lp%*Xza3&JMP>xA}c|c!+pBj;E)m zpIWW9`CkxGthlr4t~cpz8PgaddQq zySuw@L3#D@@o~CRsZ3X^)zx~v{^$Js95**N==FNl2>@~5H|kEEMOXWHLaWuX3;H-a zJ43(Uf13cv=kp(XdwUR_Q7)Gy;|bkvS0Xy&^z;;i!QkW9f0xSzp*jR*2+9Zq0tg0! z2!%q3L?Vbrqg?p<`bx#XbkowfYX0!1K=}JpW zOH4bFNWf?`;^gFn&j$wwSX^A>@eTowkB>1oHwU}j4zt+9t*O}O^RYg{SR(+sCyBMSwS{mv%sP;%c6WD~HWg8h*b`<*0K(EE0J12JhCqnP z%*+grjz%bzN_j%0JW;2KP>6jP0f_ZwV`Q^g2uBW=hy)ZH2(mCyZZsMYmS!UfXEMNF X3XN6hxJJ&@00000NkvXXu0mjfB!p4p literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-print_mask.png b/modules/themeroller/data/masks/images/ico-print_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..9f702d07945dcc969d1d12cadff24d9309ffeaf3 GIT binary patch literal 918 zcmV;H18Mw;P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000id000id0mpBsWB>pF8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt z{NMlp0_RCYK~zXf-B!zLB0&_*!l=Y(NQe)_2ifGch?0dwjELY`M8t#y5)j-Z1A$4D zQ80oA(M2}dD2RwC;;+n?%w{&T%<4{`B2{#^uZ-Qyz%(4Hy6WC@PFMG>uC=u#*W=?O z&4FE=D#h97#V^xYIuBwgNP%cH3Ul9P7%9YJv8nhEj-^@)1Go{B$wUB5*=#l#d6)22 zg6jk5zi(}Au^4&0E=G#QBCW5l)Asf@!^Xx2yLUJolt?7#{{Ef;eT-oaF+3jk;Lx@l zQg*pqrp?Vw@_0M~J3BjUY!)ylk3|ePG#jZ_t7Ny^>G=3~B_J0ZnvJ}?ypYf5qqDQK zm4IAue9DOQF~uZ&Ur?&^N?7YSG-JY~bo1lz@NlZ^)McypJv5;$HzG`2TwKuQf+nJ)fVS)78}#1NsK|X|3>hH se+u1Sjn=b>Zr{j1H=^h9aZ!c-24#7QvELt^ng9R*07*qoM6N<$f;tDG4FCWD literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-separator-rtl_mask.png b/modules/themeroller/data/masks/images/ico-separator-rtl_mask.png new file mode 100755 index 0000000000000000000000000000000000000000..1635f422186d38b93f8d4347bfe18864de62ce96 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4v7|ftIx;Y9?C1WI$O`0h7I;J! zGcfQS0%1l`4X*~Epk#?_L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish+84*PjPKMgE>H zjv*Ss$q5TAKYaT1OJ7s-XS|2Ui+Tr#1NCdfnnX^XIME>5+S-~Jo|2LALw<=sij$8I zPnoO1V@EDgQPG241+zNVNE|!%(rs3|NEa)^?KWu#0k1qhpwSGTu6{1-oD!Mf4v7|ftIx;Y9?C1WI$O`0h7I;J! zGcfQS0%1l`4X*~Epk#?_L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish+84*PjPKMc$q+ zjv*Ss$q5n_0s;ab;ypZG>|e6vNxi=Q`u`QNB4T3S;+>qB)^sd*G-HOu4ku@4=QnE2 vJ}i;?s;aHGt0qW0hOJt$LZD1Jv`K_vzkp0v+96etgBUzr{an^LB{Ts5TEjgO literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-success-active_mask.png b/modules/themeroller/data/masks/images/ico-success-active_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..90cdfacb205823653f41346cb76e59c85e0e79f7 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?(3p^r= z85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkFg)(D3Q$179u0Iceihg>! zIEGmGU!CO1)nXvx!rIQT<&n+XTxo*ofu8?4xq>?Fq z!K9bx@D7bnCm1Yk`jk&@+Veg%bZWsq1D=zGbKWwy8y;Tude*W`t3$iiZFVZqvq%UQ zV99ASW-5uDe)f5#-Jy&?5!Y*3BCgSn8r|JYd9$8bpIOhCdVob%7 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-success-inactive_mask.png b/modules/themeroller/data/masks/images/ico-success-inactive_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..becd378ad5920482ed8f857938d676a47ae7504e GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLlJfk$L90|Vb- z5N14{zaj-FC|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%Pri_2&UlQKzSiV~9p@ zZU0H8Lkc`Df_JnO^Oi7W#;*GN-`{0H=xX-jYU4;XrGHa?Xx~WgxyVM{>~Bub;kN7RdScY<+y!cb0my<@XzErbYoB#o+1c=d#Wz Gp$P!*@_I!8 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-success-passive_mask.png b/modules/themeroller/data/masks/images/ico-success-passive_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..becd378ad5920482ed8f857938d676a47ae7504e GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLlJfk$L90|Vb- z5N14{zaj-FC|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%Pri_2&UlQKzSiV~9p@ zZU0H8Lkc`Df_JnO^Oi7W#;*GN-`{0H=xX-jYU4;XrGHa?Xx~WgxyVM{>~Bub;kN7RdScY<+y!cb0my<@XzErbYoB#o+1c=d#Wz Gp$P!*@_I!8 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-view-comments_mask.png b/modules/themeroller/data/masks/images/ico-view-comments_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..884dcaf4f5446381abc0762156e044d27ca49b19 GIT binary patch literal 723 zcmeAS@N?(olHy`uVBq!ia0vp^NlB zSEK+1B}-f*N`mv#O3D+9QW*jgGxJLH{9Hp6%8d0)^-Mjx{ybn{U{djPaSZYBK0EDX zR+6Jg8*`UZ2e+U|x~q6sN8XWEfr6)Y`VSi(^>j2TSu9e}@XP&G`O9;b!?c$rlh3~V z#jRyBrCa*KChmVnAKnYTU%tBQk)6$-{KXeDY&QK#P;_N{9T?S~w)v;=T)+Aa>`Rmq z8Z|q&MClgojCoSFdn${Lf$GGv-M(`D?SJa_PikOYrgG_J$qok#nPpXb{kBH+uDYt_ zzcgrJ(atl$T2og<=zJ34VmvG8DmgWdf8NhhD2-Ok3d;lLD^w!@0{@;hVR zJyS{mIl)M(_s6xA&5^2%K!Z|jAWEwHF* zJ`&0hrGE2m*&iKC89td^-!H!`3DaYY{Ps0v`)$RKzw?9yEam!-@ZFyO`RAXS=~D%w tkB2qRySZaEOUk~@h2@+bG0~6oWf>x`&i2~17?`LSJYD@<);T3K0RTr(FmV6? literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-view-fullsize_mask.png b/modules/themeroller/data/masks/images/ico-view-fullsize_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7055580ead5429de7b078d90edfd80938dcaf1 GIT binary patch literal 1088 zcmV-G1i$-004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000id000id0mpBsWB>pF8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt z{NMlp1CdEYK~zXf)mGO^BvBAm$B2SC4d$G4PNO2C4=RGQ<_8fIf-mNPVwzDz5k=8I z@GJJom;Dl9VZY&QpMq|jVY+Xxx-2_z=;`iTRp-_{RnvO z3vJO`K|ui`BO?(J5rOdVa6wpD7(zos;cz$*5)vW^4h|M*PL2QiJFeq;+UY*%FF!w@ z8+=m|+1S`XY-}vz;^J%}B_##(^Yh@H5|EUXWD5%m3%I_%2CsH( z=$kQ=M0R#|ker;1^z?KkhK7cOM0zog@uIyp^KB67#<$>!RY9yXhj!q zARqM27)m0ir>96vOf)5;J1;9M!{y~A#>U13%8tGnLrH|YVq+>VFSi7>u)Dh}1PG1;Ha3+VeKUqZWP5x2I~$8X zZf(o##X1lQKqu(Y&<<>h6ZpP!?-x!F|Yx^SbTqowQ(BHRtr#BRv8%LSYT z6dJGD+1WA|sD6^FtgJ*$O^txrI668KBEgsCT-rgcADhdq^4FNGYI4C0B+}sqLoSa~FbrnvhQ_5Zi4noE-h;T>jp0%~LBCz`U zdNejR;_mKFrX~NsM@vf!78e)c^?F5YB*5cfAK_8j1*bD(7)0oZ8R5fn8bnw^JerY_5dpg*v9hv)`}=!5KR=t|<>kfly_K!@?w58n-wYxwA)aej zSC>rB?(S}|N%i*jN|&6Nn84)Zq%^DP>1nA79udVzTkYrkD14e3kAT&|N@2Qm!TM{4 zlB zSEK+1B}-f*N`mv#O3D+9QW*jgGxJLH{9Hp6%8d0)^-Mjx{ybn{V3zW9aSZYBejD!V zy(m${muIn%GWV%|J2AzGOKK_wmz6j|m^L;oWNKCrbWvKW0{hsER#~m&AUC%57k!AQ=cqZDC|?PgZ=&9=X37)%S!zC|NU;C!^Vi1%^xl^edW9m_4|`W z#M$tpFGAVYp09IVeDS{C^zL7b8IHjhuh)7n73%HjF*uMaP*YKH}O zMqf?ucXxBonlmS*!CT2>dIkpv^AvD0 z^&PqNI_&wgXBqkV{j08Or5Z`zx^d%y!Ye+IZQ?I$?c_mr`TO|Xu$>wB`pp}irI#~z z?c293M$i3Y#T;i3fl@J$iP0-VGz2&d4ybZiOk27tf5s~cuk=8cZjW1k`OFy}khPDQCdcWB zE#AD@cpu-l@89?HEMS`$8gr%(?N#qnX=^i+D8-X3JMN1USXfLi&-}~{&Q_jjmrM}=Rq!Z zc6KiFPuq3%=uuZIE2~ZNA7AN!9sKj>%{p~Z%pE*Tq`_A#xr@6l}UuatP>f*`mkEdr#z6t*;wm;<` Z1MA+!B^{#nvw&HN!PC{xWt~$(69DXgwm<*? literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-view-slideshow_mask.png b/modules/themeroller/data/masks/images/ico-view-slideshow_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..55c24a0fddc71d65fe58591c01e78277f8b143ec GIT binary patch literal 976 zcmeAS@N?(olHy`uVBq!ia0vp^NlB zSEK+1B}-f*N`mv#O3D+9QW*jgGxJLH{9Hp6%8d0)^-Mjx{ybn{U{>^WaSZYBemniP zdrqOqac|AoDS9RQZBkw=nx67vX?us)5^i@_LDfkiTAn7cE=qwfzb*e#Wl?{!vSZ%) z+g6_=*W|9BKhx^io+F*>zi!>1U3oocZGV_3K47H9Feb+Lx|geQNUgMA%2JzjyB~UaXv%kr8k} zmt)S6Wr3VVR#sZx-rkeEmZl^oI$Bv-#rW^BKL=77XO|cpJeeua@j+>6>BP1?M-F2% zGqu;RUl-NY>0Q2j`O>|6@2bvT){0xW|8{jzk&>>iF4qp$M&leQQ@Iv{grcILZQHj$ zee=fW*zx100X4@gzzVCXwAQX&3sP8Y<-0hIE2%LpJ^kyI&nw;C-0sM12K(gb(bg?n zw}L|89BZ1?*UbuI8HI&`>*xRdTPrCg)%6VQkJG2UWf=;%nVy@>cKbVBA?5(f!!tg< zzOJ9aMqIr*m4}B%18Bs(8#g2}U(9EH*!1+9%8@f?dS)k!t-o;p?a@8!*ZTuQvtVEN zWuNWq54<{Zq$MXe_vKwi=KOi@ z{QUK=d(R&PyXN-o=$CKagn&YI`lQS&KbU(NPM<#g>qP(el*eEP-Mu^4#M~SlJ5fO|#K*=?oi|Tz`Aqk1UEwd@f3vf(ae2=Jv`1WAeE0X0&z>!-`yanI+~_4x|Fz}E z<>lqS>T-i(HzY&^o+{?gpTBg`A}3I)ICSWc$L4u4+Mr{v)(&PXD literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/ico-warning_mask.png b/modules/themeroller/data/masks/images/ico-warning_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..e2763911077fcd290d161d7e1fbf65c5b8ed902d GIT binary patch literal 594 zcmV-Y0N2bPDNB8 zb~7$DE;UJt{NMlp0nbT9K~y+TwUWDQVo?yr)$0qqh(rWIMT?-|yAnYV1m9Q12cllY z7g&ge2x1`?7D@!`dKki(LmW8u-$GYRkd3ENy8xkwLq5?bXG$7 z_wkO3?DzX0s(QVC%^nC^troZ3?RL@c_c0s}F&>XGolY^I&#_!Cv0ksS*=(@e?MRHn g;c$KOVVz2N2N{yy%CAY0YXATM07*qoM6N<$g2xW|V*mgE literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/images/select-photos-backg_mask.png b/modules/themeroller/data/masks/images/select-photos-backg_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..98924888137a1ad199475a11346fbd34463d4174 GIT binary patch literal 1339 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 Zo$7FwX_Vx}-^yehT}^$BIyJkf{{dXa4Ql`Z literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorContent.png b/modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorContent.png new file mode 100755 index 0000000000000000000000000000000000000000..63d4ffa465239c688c867a60f8c393688a49bbae GIT binary patch literal 3773 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 O5@2a&Yg%jU9rs@p9iY(w literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorDefault.png b/modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorDefault.png new file mode 100755 index 0000000000000000000000000000000000000000..e3c6adb65f4ae77e1255c7babbe7f71ad9a270bd GIT binary patch literal 1855 zcmeAS@N?(olHy`uVBq!ia0vp^CxEzzgAGVpPJH$RNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%=PdAuEM{QfI}E~%$MaXD00kvWTq8(8}wpWiV~U%G15VdJF!b#K)Y1d7<+&3}CGp{VUfJLPZdKJYUs zvXuObpZ)ltRa1)$)2TWB42~AE0yi2MnhIVZsEr@`XOK z+a@N3hbIN_mh-l)J{vLj*_BL3wyU>PyQ+J4Ts<-O%vVf)=?zFRvV z|2JPLZ!Oro%4)%nJfU0H!$VE?Y>7<1&bl*@z3y%YfA5`>dvcFiRBLTL_cND2UHsV9 zqLM`Uv$h^R?IP}?{TcP{qWfR3D=Lj={TbB$f3Gh~hTJ#)DZjTbk_(r=bn@|+hk1P~ zpZ|~h_)*N|x38tW=D#~md3&FIvASISt8#Lsz>*D#$&PVXA0O_j6?$^pj{8#s--Xt$ zZ1$@!?2eZHs_cLC?%2UBxkIN*{#G5G+I3sh|IcjmUycIzu0HO6TsYaV{^j@XlE3Tb zUVY(bdvDnV?K3YNkDjf1=Xo@^OZv<1Z$`VE7Dj)$C0n(}y+2%2F4V?2&i%7|{Bp6p zs0rQ2t9QGdw_kQauK#?c$94X`51KC7iW`-dgpf3%+8V>#whVT=^(f_Q~<%+1FoRuguqcb@5C7kj+> zapmjXv9`xk=AMjQxAS})chcNDe5#+#Pju$j-ujcf@v7nf@AE;uXOvVQmX z#oOO(Vqj#^WSFQqZ8}4fPJaH%H6-&J7d2&Uy3GBiQ&ZuBB-2t>%f-f1HwtoyC%$yleo4d|Y`(js@7&#t<%jjLvGFtu{b(Q@?L zwOHhq{$+=Rg)DxZ3VE!1o)&dZ+^@kjS0E+u=q5gv7$%NKLdy1C3{5UuXD7vu@+`8kqEp)=%!&hZ5$}axVD)eHm z0{7CxNgr7RRQ_==Bq%d+9QxUCfQ<#1$NihnDTAtndxiE#XZ@UbeUIl3yWh%AJHE_6 ry{ErYFy-9yM>4bP0l+XkK#+?r9 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorHeader.png b/modules/themeroller/data/masks/site_thumbnail/thumbnail_bgColorHeader.png new file mode 100755 index 0000000000000000000000000000000000000000..70d8e93e97c96f4dffbdc8dcc5a7b54a5822c23a GIT binary patch literal 2390 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 literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/masks/site_thumbnail/thumbnail_iconColorHover.png b/modules/themeroller/data/masks/site_thumbnail/thumbnail_iconColorHover.png new file mode 100755 index 0000000000000000000000000000000000000000..3a27fb6d1acb8851483822ce0ad9495fdc99625a GIT binary patch literal 831 zcmeAS@N?(olHy`uVBq!ia0vp^CxEzzgAGVpPJH$RNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%=PdAuEM{QfI}E~%$MaXD00kvWTq8kHnuhw%04uKjNLq3A)uwC|ovc^H{kI0O_N8W^a{m>|>m$azah zt(@+?FK#!}B+}J)-;q2!O>XhdCmI=E5BMAJWR@o{zcOEId)wDbZ*QM@lDqpx^pBnA zos}n4G}dg5Ub}^D=5B*ud)^<9pF6$3V!gl`QR%j8^!t*He(esASh=?PEtBIZdRtKOarWo59Ytk-x6G-KVW5d8sUB*>)xZz_ ajrsR7{e8EvSULgIH-o3EpUXO@geCx>a>rl* literal 0 HcmV?d00001 diff --git a/modules/themeroller/data/views/album.html.php b/modules/themeroller/data/views/album.html.php new file mode 100644 index 00000000..de196be0 --- /dev/null +++ b/modules/themeroller/data/views/album.html.php @@ -0,0 +1,42 @@ + + +
+ album_top() ?> +

title) ?>

+
description)) ?>
+
+ +
    + + $child): ?> + + is_album()): ?> + + +
  • + thumb_top($child) ?> + + thumb_img(array("class" => "g-thumbnail")) ?> + + thumb_bottom($child) ?> + context_menu($child, "#g-item-id-{$child->id} .g-thumbnail") ?> +

    + title) ?>

    + +
  • + + + admin || access::can("add", $item)): ?> + id") ?> +
  • Add some.", + array("attrs" => html::mark_clean("href=\"$addurl\" class=\"g-dialog-link\""))) ?>
  • + +
  • + + +
+album_bottom() ?> + +paginator() ?> diff --git a/modules/themeroller/data/views/block.html.php b/modules/themeroller/data/views/block.html.php new file mode 100644 index 00000000..699d7c22 --- /dev/null +++ b/modules/themeroller/data/views/block.html.php @@ -0,0 +1,10 @@ + + + + +
+

+
+ +
+
diff --git a/modules/themeroller/data/views/dynamic.html.php b/modules/themeroller/data/views/dynamic.html.php new file mode 100644 index 00000000..a8a4d362 --- /dev/null +++ b/modules/themeroller/data/views/dynamic.html.php @@ -0,0 +1,29 @@ + +
+
+ dynamic_top() ?> +
+

+
+ +
    + $child): ?> +
  • "> + thumb_top($child) ?> + + photo + +

    title) ?>

    + thumb_bottom($child) ?> + +
  • + +
+dynamic_bottom() ?> + +paginator() ?> diff --git a/modules/themeroller/data/views/movie.html.php b/modules/themeroller/data/views/movie.html.php new file mode 100644 index 00000000..158857db --- /dev/null +++ b/modules/themeroller/data/views/movie.html.php @@ -0,0 +1,19 @@ + +
+ photo_top() ?> + + paginator() ?> + +
+ resize_top($item) ?> + movie_img(array("class" => "g-movie", "id" => "g-item-id-{$item->id}")) ?> + resize_bottom($item) ?> +
+ +
+

title) ?>

+
description)) ?>
+
+ + photo_bottom() ?> +
diff --git a/modules/themeroller/data/views/no_sidebar.html.php b/modules/themeroller/data/views/no_sidebar.html.php new file mode 100644 index 00000000..a9eb0e3e --- /dev/null +++ b/modules/themeroller/data/views/no_sidebar.html.php @@ -0,0 +1,6 @@ + +
    +
  • +
    "> +
  • +
diff --git a/modules/themeroller/data/views/page.html.php b/modules/themeroller/data/views/page.html.php new file mode 100644 index 00000000..9f94b04f --- /dev/null +++ b/modules/themeroller/data/views/page.html.php @@ -0,0 +1,151 @@ + + + + + + + <? if ($page_title): ?> + <?= $page_title ?> + <? else: ?> + <? if ($theme->item()): ?> + <? if ($theme->item()->is_album()): ?> + <?= t("Browse Album :: %album_title", array("album_title" => $theme->item()->title)) ?> + <? elseif ($theme->item()->is_photo()): ?> + <?= t("Photo :: %photo_title", array("photo_title" => $theme->item()->title)) ?> + <? else: ?> + <?= t("Movie :: %movie_title", array("movie_title" => $theme->item()->title)) ?> + <? endif ?> + <? elseif ($theme->tag()): ?> + <?= t("Browse Tag :: %tag_title", array("tag_title" => $theme->tag()->name)) ?> + <? else: /* Not an item, not a tag, no page_title specified. Help! */ ?> + <?= t("Gallery") ?> + <? endif ?> + <? endif ?> + + " type="image/x-icon" /> + css("yui/reset-fonts-grids.css") ?> + css("superfish/css/superfish.css") ?> + css("themeroller/ui.base.css") ?> + css("gallery.common.css") ?> + css("screen.css") ?> + + page_type == "collection"): ?> + + + + + + + script("jquery.js") ?> + script("jquery.form.js") ?> + script("jquery-ui.js") ?> + script("gallery.common.js") ?> + + + script("gallery.ajax.js") ?> + script("gallery.dialog.js") ?> + script("superfish/js/superfish.js") ?> + script("jquery.localscroll.js") ?> + script("ui.init.js") ?> + + head() they get combined */ ?> + page_subtype == "photo"): ?> + script("jquery.scrollTo.js") ?> + script("gallery.show_full_size.js") ?> + page_subtype == "movie"): ?> + script("flowplayer.js") ?> + + + head() ?> + + + body_attributes() ?>> + page_top() ?> +
+ site_status() ?> +
+
+ + + + + + user_menu() ?> + header_top() ?> + + + + + + header_bottom() ?> +
+ + item() && !empty($parents)): ?> + + +
+
+
+
+
+ messages() ?> + +
+
+
+
+ page_subtype != "login"): ?> + + +
+
+ +
+ page_bottom() ?> + + diff --git a/modules/themeroller/data/views/paginator.html.php b/modules/themeroller/data/views/paginator.html.php new file mode 100644 index 00000000..5034c965 --- /dev/null +++ b/modules/themeroller/data/views/paginator.html.php @@ -0,0 +1,87 @@ + + + +
    +
  • + + + + + + + + + + + + + + + + + +
  • + +
  • + + + $first_visible_position, + "to_number" => $last_visible_position, + "count" => $total)) ?> + + $position, "total" => $total)) ?> + + + + +
  • + +
  • + + + + + + + + + + + + + + + + + +
  • +
diff --git a/modules/themeroller/data/views/photo.html.php b/modules/themeroller/data/views/photo.html.php new file mode 100644 index 00000000..f8b5511c --- /dev/null +++ b/modules/themeroller/data/views/photo.html.php @@ -0,0 +1,38 @@ + + +item())): ?> + + + + +
+ photo_top() ?> + + paginator() ?> + + + +
+

title) ?>

+
description)) ?>
+
+ + photo_bottom() ?> +
diff --git a/modules/themeroller/data/views/sidebar.html.php b/modules/themeroller/data/views/sidebar.html.php new file mode 100644 index 00000000..086d1359 --- /dev/null +++ b/modules/themeroller/data/views/sidebar.html.php @@ -0,0 +1,16 @@ + +sidebar_top() ?> +
+ + album_menu() ?> + + photo_menu() ?> + + movie_menu() ?> + + tag_menu() ?> + +
+ +sidebar_blocks() ?> +sidebar_bottom() ?> diff --git a/modules/themeroller/helpers/themeroller.php b/modules/themeroller/helpers/themeroller.php new file mode 100644 index 00000000..35ca62fc --- /dev/null +++ b/modules/themeroller/helpers/themeroller.php @@ -0,0 +1,181 @@ +open($zipfile) === true) { + $extract_path = VARPATH . trim($zipfile, "/") . ".d"; + Session::instance()->set("theme_extract_path", $extract_path); + $zip->extractTo($extract_path); + $zip->close(); + return $extract_path; + } else { + return false; + } + } + + static function recursive_directory_delete($path) { + if (is_dir($path)) { + $objects = scandir($path); + foreach ($objects as $object) { + if ($object[0] != ".") { + $object_path = "$path/$object"; + if (filetype($object_path) == "dir") { + self::recursive_directory_delete($object_path); + } else { + unlink($object_path); + } + } + } + } + } + + static function get_theme_name($extract_path) { + $theme_name = null; + if ($handle = opendir($extract_path . "/css")) { + while (false !== ($file = readdir($handle))) { + if ($file[0] !== ".") { + $theme_name = basename($file); + break; + } + } + if (empty($theme_name)) { + Kohana_Log::add("error", "zip file: no theme name"); + $post->add_error($field, "invalid zipfile"); + } + closedir($handle); + } + + return $theme_name; + } + + static function get_theme_parameters($original_name, $css_path, $is_admin) { + $parameters = array(); + $css_files = glob("$css_path/css/$original_name/jquery*.css"); + $css_contents = file_get_contents($css_files[0]); + $parameters["colors"] = $parameters["icons"] = array(); + if (preg_match("/[?|&](.*)/", $css_contents, $matches)) { + if (preg_match_all("/&{0,1}(\w+)=([a-zA-Z0-9\-_\%\.,]*)/", $matches[1], $colors, PREG_SET_ORDER)) { + foreach ($colors as $color) { + $parameters["colors"][$color[1]] = $color[2]; + if (strpos($color[1], "icon") === 0) { + $parameters["icons"][] = $color[2]; + } + } + } + } + $parameters["js"] = $is_admin ? glob(MODPATH . "themeroller/data/js/admin_*.js") : + glob(MODPATH . "themeroller/data/js/site_*.js"); + $parameters["standard_css"] = glob(MODPATH . "themeroller/data/css/*.css"); + $parameters["masks"] = glob(MODPATH . "themeroller/data/masks/images/*.png"); + $parameters["icon_mask"] = MODPATH . "themeroller/data/masks/css/themeroller/ui-icons_mask_256x240.png"; + $parameters["views"] = $is_admin ? glob(MODPATH . "themeroller/data/admin_views/*.html.php") : + glob(MODPATH . "themeroller/data/views/*.html.php"); + $parameters["css_files"] = $css_files; + $parameters["images"] = + glob("$css_path/development-bundle/themes/$original_name/images/ui-bg*.png"); + $thumb_dir = $is_admin ? "admin_thumbnail" : "site_thumbnail"; + $parameters["thumbnail"] = MODPATH . "themeroller/data/masks/$thumb_dir/thumbnail.png"; + $parts = glob(MODPATH . "themeroller/data/masks/$thumb_dir/thumbnail_*.png"); + $parameters["thumbnail_parts"] = array(); + foreach ($parts as $thumb_file) { + if (preg_match("/thumbnail_(.*)\.png$/", $thumb_file, $matches)) { + $parameters["thumbnail_parts"][] = array("file" => $thumb_file, + "color" => $parameters["colors"][$matches[1]]); + } + } + + return $parameters; + } + + static function generate_image($mask_file, $color, $target_dir, $replace_with="") { + $output = $target_dir . str_replace("mask", $replace_with, basename($mask_file)); + $mask = imagecreatefrompng($mask_file); + $image = imagecreatetruecolor(imagesx($mask), imagesy($mask)); + $icon_color = self::_rgb(hexdec($color)); + + $transparent = imagecolorallocatealpha($image, + $icon_color['red'], $icon_color['green'], $icon_color['blue'], 127); + imagefill($image, 0, 0, $transparent); + imagefilter($mask, IMG_FILTER_EDGEDETECT); + + for ($y=0; $y < imagesy($mask); $y++) { + for ($x=0; $x < imagesx($mask); $x++) { + $pixel_color = imagecolorsforindex($mask, imagecolorat($mask, $x, $y)); + $mask_color = self::_grayscale_pixel($pixel_color); + $mask_alpha = 127 - (floor($mask_color["red"] / 2) * (1 - ($pixel_color["alpha"] / 127))); + $new_color = imagecolorallocatealpha($image, + $icon_color['red'], $icon_color['green'], $icon_color['blue'], $mask_alpha); + imagesetpixel($image, $x, $y, $new_color); + } + } + + imagesavealpha($image, true); + imagealphablending($image, false); + imagepng($image, $output); + imagedestroy($image); + imagedestroy($mask); + } + + static function generate_thumbnail($base, $parts, $target) { + $image = imagecreatefrompng($base); + + $transparent = imagecolorallocatealpha($image, 0, 0, 0, 127); + imagefill($image, 0, 0, $transparent); + + $width = imagesx($image); + $height = imagesy($image); + + foreach ($parts as $thumb_part) { + $color = self::_rgb(hexdec($thumb_part["color"])); + $image_part = imagecreatefrompng($thumb_part["file"]); + for ($y=0; $y < imagesy($image_part); $y++) { + for ($x=0; $x < imagesx($image_part); $x++) { + $pixel_color = imagecolorsforindex($image_part, imagecolorat($image_part, $x, $y)); + $new_color = imagecolorallocatealpha($image, + $color['red'], $color['green'], $color['blue'], $pixel_color["alpha"]); + imagesetpixel($image, $x, $y, $new_color); + } + } + imagedestroy($image_part); + } + + //$new_width = 200; + //$new_height = floor($height * $new_width / $width); + + //$resized = imagecreatetruecolor($new_width, $new_height); + //imagecopyresampled($resized, $image, 0, 0, 0, 0,$new_width, $new_height, $width, $height); + imagesavealpha($image, true); + imagealphablending($image, false); + imagepng($image, $target); + imagedestroy($image); + } + + private static function _rgb($color) { + $r = ($color >> 16) & 0xff; + $g = ($color >> 8) & 0xff; + $b = $color & 0xff; + return array("red" => $r, "green" => $g, "blue" => $b, "alpha" => 0); + } + + private static function _grayscale_pixel($color) { + $gray = round(($color['red'] * 0.299) + ($color['green'] * 0.587) + ($color['blue'] * 0.114)); + return array("red" => $gray, "green" => $gray, "blue" => $gray, "alpha" => 0); + } +} diff --git a/modules/themeroller/helpers/themeroller_event.php b/modules/themeroller/helpers/themeroller_event.php new file mode 100644 index 00000000..302ed4b9 --- /dev/null +++ b/modules/themeroller/helpers/themeroller_event.php @@ -0,0 +1,27 @@ +get("appearance_menu") + ->append(Menu::factory("dialog") + ->id("themeroller") + ->label(t("Import themeroller")) + ->url(url::site("admin/themeroller/form_upload"))); + } +} diff --git a/modules/themeroller/helpers/themeroller_installer.php b/modules/themeroller/helpers/themeroller_installer.php new file mode 100644 index 00000000..5b59a982 --- /dev/null +++ b/modules/themeroller/helpers/themeroller_installer.php @@ -0,0 +1,35 @@ +get("mode", "init"); + $start = microtime(true); + $theme_name = $task->get("theme_name"); + $is_admin = $task->get("is_admin", false); + $theme_path = THEMEPATH . "$theme_name/"; + $parameters = $task->get("parameters"); + $completed = $task->get("completed", 0); + switch ($mode) { + case "init": + $views = glob(MODPATH . "themeroller/data/views/*.html.php"); + $task->set("mode", "create_directory"); + $parameters = themeroller::get_theme_parameters($task->get("original_name"), + $task->get("path"), + $is_admin); + $task->set("total_activites", + 7 // number of directories to create + + 3 // screen.css, theme.info, thumbnail + + count($parameters["standard_css"]) // number of standard css to copy + + count($parameters["views"]) // number of views to copy + + count($parameters["js"]) // number of javascript files to copy + + count($parameters["masks"]) // number of images to generate + + count($parameters["icons"]) // number of icon images to generate + + count($parameters["css_files"]) // number of css files + + count($parameters["images"])); // number of image files to copy + + $task->status = t("Starting up"); + break; + case "create_directory": + $completed = $task->get("completed"); + foreach (array("", "css", "css/themeroller", "css/themeroller/images", "images", + "js", "views") as $dir) { + $path = "{$theme_path}$dir"; + $completed++; + if (!file_exists($path)) { + mkdir($path); + chmod($path, 0755); + } + } + $task->status = t("Directory created"); + $task->set("mode", "copy_views"); + break; + case "copy_views": + $task->status = t("Copying views"); + while (!empty($parameters["views"]) && microtime(true) - $start < 1.5) { + $view = array_shift($parameters["views"]); + $target = "{$theme_path}views/" . basename($view); + if (!file_exists($target)) { + copy($view, $target); + } + $completed++; + } + + if (empty($parameters["views"])){ + $task->status = t("Views copied"); + $task->set("mode", "copy_themeroller_images"); + } + break; + case "copy_themeroller_images": + $task->status = t("Copying themeroller images"); + while (!empty($parameters["images"]) && microtime(true) - $start < 1.5) { + $image = array_shift($parameters["images"]); + $target = "{$theme_path}css/themeroller/images/" . basename($image); + if (!file_exists($target)) { + copy($image, $target); + } + $completed++; + } + + if (empty($parameters["views"])){ + $task->status = t("Themeroller images copied"); + $task->set("mode", "copy_css"); + } + break; + case "copy_css": + $task->status = t("Copying themeroller css"); + $target = "{$theme_path}css/themeroller/ui.base.css"; + copy($parameters["css_files"][0], $target); + $completed++; + $task->status = t("Themeroller css copied"); + $task->set("mode", "generate_images"); + break; + case "generate_images": + $task->status = t("Generating gallery images"); + $target_dir = "{$theme_path}images/"; + $colors = $task->get("colors"); + $image_color = $colors["iconColorHover"]; + while (!empty($parameters["masks"]) && microtime(true) - $start < 1.5) { + $mask = array_shift($parameters["masks"]); + themeroller::generate_image($mask, $image_color, $target_dir); + $completed++; + } + if (empty($parameters["masks"])) { + $task->set("mode", "generate_icons"); + $task->status = t("Gallery images generated"); + } + break; + case "generate_icons": + $task->status = t("Generating icons"); + $target_dir = "{$theme_path}css/themeroller/images/"; + while (!empty($parameters["icons"]) && microtime(true) - $start < 1.5) { + $color = array_shift($parameters["icons"]); + themeroller::generate_image($parameters["icon_mask"], $color, $target_dir, $color); + $completed++; + } + if (empty($parameters["icons"])) { + $task->set("mode", "copy_standard_css"); + $task->status = t("Icons generated"); + } + break; + case "copy_standard_css": + $task->status = t("Copying standard css"); + while (!empty($parameters["standard_css"]) && microtime(true) - $start < 1.5) { + $css = array_shift($parameters["standard_css"]); + $target = "{$theme_path}css/" . basename($css); + if (!file_exists($target)) { + copy($css, $target); + } + $completed++; + } + + if (empty($parameters["standard_css"])){ + $task->status = t("Standard css copied"); + $task->set("mode", "copy_javascript"); + } + break; + case "copy_javascript": + $task->status = t("Copying javascript"); + while (!empty($parameters["js"]) && microtime(true) - $start < 1.5) { + $js = array_shift($parameters["js"]); + $target = "{$theme_path}js/" . str_replace(array("admin_", "site_"), "", basename($js)); + if (!file_exists($target)) { + copy($js, $target); + } + $completed++; + } + + if (empty($parameters["js"])){ + $task->status = t("Javascript copied"); + $task->set("mode", "generate_screen_css"); + } + break; + case "generate_screen_css": + $file = "{$theme_path}/css/screen.css"; + $v = new View(($is_admin ? "admin" : "site") . "_screen.css"); + $v->display_name = $task->get("display_name"); + foreach ($parameters["colors"] as $color => $value) { + $v->$color = $value; + } + ob_start(); + print $v->render(); + file_put_contents($file, ob_get_contents()); + ob_end_clean(); + $completed++; + $task->status = t("Screen css generated"); + $task->set("mode", "generate_thumbnail"); + break; + case "generate_thumbnail": + themeroller::generate_thumbnail($parameters["thumbnail"], + $parameters["thumbnail_parts"], + "{$theme_path}thumbnail.png"); + $task->status = t("Thumbnail generated"); + $task->set("mode", "generate_theme_info"); + $completed++; + break; + case "generate_theme_info": + $file = "{$theme_path}/theme.info"; + $v = new View("theme.info"); + $v->display_name = $task->get("display_name"); + $v->description = $task->get("description"); + $v->user_name = identity::active_user()->name; + $v->is_admin = $is_admin; + ob_start(); + print $v->render(); + file_put_contents($file, ob_get_contents()); + ob_end_clean(); + $completed++; + $task->status = t("Theme info generated"); + $task->set("mode", "done"); + break; + case "done": + themeroller::recursive_directory_delete($task->get("path")); + $display_name = $task->get("display_name"); + $task->done = true; + $task->state = "success"; + $task->percent_complete = 100; + $completed = $task->get("total_activites"); + message::info(t("Successfully generated: %name", array("name" => $display_name))); + } + $task->set("completed", $completed); + $task->set("parameters", $parameters); + $task->percent_complete = ($completed / $task->get("total_activites")) * 100; + } + +} \ No newline at end of file diff --git a/modules/themeroller/module.info b/modules/themeroller/module.info new file mode 100755 index 00000000..0e50286e --- /dev/null +++ b/modules/themeroller/module.info @@ -0,0 +1,3 @@ +name = "Theme generator" +description = "Use a JQuery UI theme to create a Gallery3 Theme" +version = 1 diff --git a/modules/themeroller/views/admin_screen.css.php b/modules/themeroller/views/admin_screen.css.php new file mode 100644 index 00000000..d41fc6a4 --- /dev/null +++ b/modules/themeroller/views/admin_screen.css.php @@ -0,0 +1,622 @@ +/** + * Gallery 3 Admin Redmond Theme Screen Styles + * + * @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) Module color overrides + * 8) States and interactions + * 9) Right-to-left language styles + * + * @todo Review g-buttonset-vertical + */ + +/** ******************************************************************* + * 1) Basic HTML elements + **********************************************************************/ +html { + color: #2e6e9e; /* fcDefault; */ +} + +body, html { + background-color: #dfeffc; /* bgColorDefault */ + font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; /* ffDefault */ + font-size: 13px/1.231; /* fsDefault/ gallery_line_height */ +} + +p { + margin-bottom: 1em; +} + +em { + font-style: oblique; +} + +h1, h2, h3, h4, h5, strong, th { + font-weight: bold; +} + +h1 { + font-size: 1.7em; +} + +#g-dialog h1 { + font-size: 1.1em; +} + +h2 { + font-size: 1.4em; +} + +#g-sidebar .g-block h2 { + font-size: 1.2em; +} + +#g-sidebar .g-block li { + margin-bottom: .6em; +} + +h3 { + font-size: 1.2em; +} + +/* Links ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +a, +.g-menu a, +#g-dialog a, +.g-button, +.g-button:active { + color: #2e6e9e !important; /* fcDefault; */ + text-decoration: none; + -moz-outline-style: none; +} + +a:hover, +.g-button:hover, +a.ui-state-hover, +input.ui-state-hover, +button.ui-state-hover { + color: #1d5987 !important; /* fcHover */ + text-decoration: none; + -moz-outline-style: none; +} + +a:hover, +#g-dialog a:hover { + text-decoration: underline; +} + +.g-menu a:hover { + text-decoration: none; +} + +/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +fieldset { + margin-bottom: 1em; +} + +#g-content form ul li { + padding: .4em 0; +} + +#g-dialog form { + width: 270px; +} + +#g-dialog fieldset { + margin-bottom: 0; +} + +/* Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +table { + width: 100%; +} + +#g-content table { + margin: .6em 0 2em 0; +} + +caption, +th { + text-align: left; +} + +th, +td { + border: none; + border-bottom: 1px solid #aaaaaa; /* borderColorContent */ + padding: .5em; + vertical-align: middle; +} + +th { + vertical-align: bottom; + white-space: nowrap; +} + +.g-even { + background-color: #fcfdfd; /* bgColorContent */ +} + +.g-odd { + background-color: #dfeffc; /* bgColorDefault */ +} + +/** ******************************************************************* + * 2) Reusable content blocks + *********************************************************************/ + +.g-block, +#g-content #g-admin-dashboard .g-block { + border: 1px solid #aaaaaa; /* borderColorContent */ + padding: 1em; +} + +.g-block h2 { + padding: .3em .8em; +} + +.g-block-content { + margin-top: 1em; +} + +#g-content .g-block { + border: none; + padding: 0; +} + +#g-sidebar .g-block-content { + padding: 0; +} + +#g-content .g-selected, +#g-content .g-available .g-block { + border: 1px solid #aaaaaa; /* borderColorContent */ + padding: .8em; +} + +.g-selected img, +.g-available .g-block img { + float: left; + margin: 0 1em 1em 0; +} + +.g-selected { + background: #f5f8f9 ; /* bgColorActive */ +} + +.g-available .g-installed-toolkit:hover { + cursor: pointer; + background: #fcfdfd; /* bgColorContent */ +} + +.g-available .g-button { + width: 96%; +} + +.g-selected .g-button { + display: none; +} + +.g-unavailable { + border-color: #ffffff; /* fcHeader; */; + opacity: 0.4; +} + +.g-info td { + background-color: transparent; + background-image: none; +} + +.g-success td { + background-color: transparent; + background-image: none; +} + +.g-error td { + background-color: #cd0a0a /* borderColorError */; + color: #cd0a0a /* fcError */; + background-image: none; +} + +.g-warning td { + background-color: #fcf9ce; + background-image: none; +} + +.g-module-status.g-info, +#g-log-entries .g-info, +.g-module-status.g-success, +#g-log-entries .g-success { + background-color: #fcfdfd /* bgColorContent */; +} + +/*** ****************************************************************** + * 3) Page layout containers + *********************************************************************/ + +/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-header #g-login-menu { + margin-top: 1em; + float: right; +} + +/* View container ~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.g-view { + background-color: #fcfdfd; /* bgColorContent */ + border: 1px solid #a6c9e2; /* borderColorContent */ + border-bottom: none; + min-width: 974px !important; +} + +/* Layout containers ~~~~~~~~~~~~~~~~~~~~~ */ + +#g-header { + background-color: #5c9ccc; /* bgColorHeader */ + border-bottom: 1px solid #4297d7; /* borderColorHeader */ + color: #ffffff; /* fcHeader */ + font-size: .8em; + margin-bottom: 20px; + padding: 0 20px; + position: relative; +} + +#g-content { + font-size: 1.1em; + padding: 0 2em; + width: 96%; +} + +#g-sidebar { + background-color: #fff; + font-size: .9em; + padding: 0 20px; + width: 220px; +} + +#g-footer { + background-color: #5c9ccc; /* bgColorHeader */ + border-top: 1px solid #4297d7; /* borderColorHeader */ + color: #ffffff; /* fcHeader */ + font-size: .8em; + margin-top: 20px; + padding: 10px 20px; +} + +/** ******************************************************************* + * 4) Content blocks in specific layout containers + *********************************************************************/ + +/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-header #g-logo { + background: transparent url('../../../lib/images/logo.png') no-repeat 0 .5em; + color: #ffffff /* fcHeader */ !important; + display: block; + height: 65px; + padding-top: 5px; + width: 105px; +} + +#g-header #g-logo:hover { + color: #1d5987 !important; /* fcHover */ + text-decoration: none; +} + +#g-content .g-block h2 { + background-color: transparent; + padding-left: 0; +} + +#g-sidebar .g-block-content { + padding-left: 1em; +} + +.g-block .ui-dialog-titlebar { + margin: -1em -1em 0; +} + +#g-sidebar .g-block h2 { + background: none; +} + +/* Photo stream ~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-photo-stream { +} + +#g-photo-stream .g-block-content ul { + border-right: 1px solid #e8e8e8; + height: 135px; + overflow: auto; + overflow: -moz-scrollbars-horizontal; /* for FF */ + overflow-x: scroll; /* scroll horizontal */ + overflow-y: hidden; /* Hide vertical*/ +} + +#g-content #g-photo-stream .g-item { + background-color: #dfeffc; /* bgColorDefault */ + border: 1px solid #e8e8e8; + border-right-color: #ccc; + border-bottom-color: #ccc; + float: left; + height: 90px; + overflow: hidden; + text-align: center; + width: 90px; +} + +#g-content .g-item { + background-color: #dfeffc; /* bgColorDefault */ + border: 1px solid #e8e8e8; + border-right-color: #ccc; + border-bottom-color: #ccc; + height: 90px; + padding: 14px 8px; + text-align: center; + width: 90px; +} + +/* Graphics settings ~~~~~~~~~~~~~~~~~~~~~ */ + +#g-admin-graphics .g-available .g-block { + clear: none; + float: left; + margin-right: 1em; + width: 30%; +} + +/* Appearance settings ~~~~~~~~~~~~~~~~~~~ */ + +#g-site-theme, +#g-admin-theme { + float: left; + width: 48%; +} + +#g-site-theme { + margin-right: 1em; +} + +/* Block admin ~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.g-admin-blocks-list { + float: left; + margin: 0 2em 2em 0; + width: 30%; +} + +.g-admin-blocks-list div:last-child { + border: .1em solid; + height: 100%; +} + +.g-admin-blocks-list ul { + height: 98%; + margin: .1em .1em; + padding: .1em; +} + +.g-admin-blocks-list ul li.g-draggable { + background-color: #dfeffc; /* bgColorDefault */ + margin: .5em; + padding: .3em .8em; +} + +/* In-line editing ~~~~~~~~~~~~~~~~~~~~~~ */ +#g-in-place-edit-message { + background-color: #fcfdfd; /* bgColorContent */ +} + +/* Theme options ~~~~~~~~~~~~~~~~~~~~~~~~ */ +#g-theme-options-form { + border: 1px solid #aaaaaa; /* borderColorContent */ +} +#g-theme-options-form-tabs { + border: none !important; +} +#g-theme-options-form fieldset { + border: none; +} + +.ui-tabs .ui-tabs-nav li a { + padding: 0 1em; +} + +.ui-tabs .ui-tabs-nav li a.g-error { + background: none no-repeat scroll 0 0 transparent; + color: #cd0a0a !important; /* fcError */ +} + +/** ******************************************************************* + * 5) Navigation and menus + *********************************************************************/ + +/* Site Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-site-admin-menu { + bottom: 0; + font-size: 1.2em; + left: 140px; + position: absolute; +} + +#g-site-admin-menu ul { + margin-bottom: 0; +} + +/** ******************************************************************* + * 6) jQuery and jQuery UI + *********************************************************************/ + +/* Superfish menu overrides ~~~~~~~~~~~~~~ */ +.sf-menu a { + border-left:1px solid #a6c9e2; /* borderColorContent */ +} + +.sf-menu li, +.sf-menu li li, +.sf-menu li li ul li { + background-color: #dfeffc; /* bgColorDefault */ +} + +.sf-menu li:hover { + background-color: #d0e5f5; /* bgColorHover */ +} + +.sf-menu li:hover, +.sf-menu li.sfHover, +.sf-menu a:focus, +.sf-menu a:hover, +.sf-menu a:active { + background-color: #d0e5f5 !important; /* bgColorHover */ +} + +.sf-sub-indicator { + background-image: url("themeroller/images/ui-icons_2e83ff_256x240.png"); + height: 16px; + width: 16px; +} + +a > .sf-sub-indicator { + background-position: -64px -16px !important; + top: 0.6em; +} + +.sf-menu ul a > .sf-sub-indicator { + background-position: -32px -16px !important; +} + +/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-admin-dashboard .ui-state-highlight, +#g-sidebar .ui-state-highlight { + height: 2em; + margin-bottom: 1em; +} + +.g-buttonset-vertical a { + width: 8em !important; +} + +#g-admin-dashboard .ui-dialog-titlebar, +#g-admin-dashboard-sidebar .ui-dialog-titlebar { + padding: .2em .4em; +} + +/** ******************************************************************* + * 7) Module color overrides + *********************************************************************/ + +/* User admin form ~~~~~~~~~~~~~~~~~~~~~~~~~ */ +#g-user-admin-list .g-admin { + color: #2e6e9e !important; /* fcDefault; */ + font-weight: bold; +} + +.g-group { + border: 1px solid #aaaaaa !important; /* borderColorContent */ +} + +.g-group h4 { + background-color: #dfeffc !important; /* bgColorDefault */ + border-bottom: 1px dashed #2e6e9e !important; /* fcDefault; */ +} + +.g-default-group h4, +.g-default-group .g-user { + color: #2e6e9e !important; /* fcDefault; */ +} + +/** ******************************************************************* + * 8) States and interactions + *********************************************************************/ + +.g-draggable:hover { + border: 1px dashed #fbec88; /* bgColorHighlight */ +} + +.ui-sortable .g-target, +.ui-state-highlight { + background-color: #fbec88; /* bgColorHighlight */ + border: 2px dotted #fad42e; /* borderColorHighlight */ +} + +/** ******************************************************************* + * 9) Right to left styles + *********************************************************************/ + +.rtl #g-content #g-album-grid .g-item, +.rtl #g-site-theme, +.rtl #g-admin-theme, +.rtl .g-selected img, +.rtl .g-available .g-block img, +.rtl #g-content #g-photo-stream .g-item, +.rtl li.g-group, +.rtl #g-server-add-admin { + float: right; +} + +.rtl #g-admin-graphics .g-available .g-block { + float: right; + margin-left: 1em; + margin-right: 0em; +} + +.rtl #g-site-admin-menu { + left: auto; + right: 150px; +} + +.rtl #g-header #g-login-menu { + float: left; +} + +.rtl #g-header #g-login-menu li { + margin-left: 0; + padding-left: 0; + padding-right: 1.2em; +} + +.rtl .g-selected img, +.rtl .g-available .g-block img { + margin: 0 0 1em 1em; +} + +/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.rtl .sf-menu a { + border-right:1px solid #fff; +} + +.rtl .sf-sub-indicator { + background: url("themeroller/images/ui-icons_2e83ff_256x240.png") no-repeat -96px -16px; /* 8-bit indexed alpha png. IE6 gets solid image only */ +} + +/*** shadows for all but IE6 ***/ +.rtl .sf-shadow ul { + background: url('../images/superfish-shadow.png') no-repeat bottom left; + 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; +} diff --git a/modules/themeroller/views/admin_themeroller_progress.html.php b/modules/themeroller/views/admin_themeroller_progress.html.php new file mode 100644 index 00000000..8bfd05ab --- /dev/null +++ b/modules/themeroller/views/admin_themeroller_progress.html.php @@ -0,0 +1,64 @@ + + +
+
+

name ?>

+
+
+ +
+
+ + +
+
diff --git a/modules/themeroller/views/admin_themeroller_upload.html.php b/modules/themeroller/views/admin_themeroller_upload.html.php new file mode 100755 index 00000000..b3cc86ec --- /dev/null +++ b/modules/themeroller/views/admin_themeroller_upload.html.php @@ -0,0 +1,65 @@ + + + + +
+

+ "get", "id" => "g-themeroller-form")) ?> +
+
    +
  • + +
  • + +
  • + +
  • +
  • + "is_admin", + "id" => "g-themeroller-is-admin")) ?> + +
  • +
  • + "zip_file", + "id" => "g-themeroller-zip", + "accept" => "application/zip, multipart/x-zip")) ?> + + + +
  • +
+
+ +
diff --git a/modules/themeroller/views/site_screen.css.php b/modules/themeroller/views/site_screen.css.php new file mode 100644 index 00000000..5f5350f2 --- /dev/null +++ b/modules/themeroller/views/site_screen.css.php @@ -0,0 +1,864 @@ + +/** + * Gallery 3 Screen Styles + * + * @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) Forms + * 8) States and interactions + * 9) Right-to-left language styles + */ + +/** ******************************************************************* + * 1) Font sizes, base HTML elements + **********************************************************************/ +html { + color: #; +} + +body, html { + background-color: #; + font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; /* ffDefault */ + font-size: 13px/1.231; /* fsDefault/ gallery_line_height */ +} + +p { + margin-bottom: 1em; +} + +em { + font-style: oblique; +} + +h1, h2, h3, h4, h5, strong, th { + font-weight: bold; +} + +h1 { + font-size: 1.7em; +} + +#g-dialog h1 { + font-size: 1.1em; +} + +h2 { + font-size: 1.4em; +} + +#g-sidebar .g-block h2 { + font-size: 1.2em; +} + +#g-sidebar .g-block li { + margin-bottom: .6em; +} + +#g-content, +#g-site-menu, +h3 { + font-size: 1.2em; +} + +#g-sidebar, +.g-breadcrumbs { + font-size: .9em; +} + +#g-banner, +#g-footer, +.g-message { + font-size: .8em; +} + +#g-album-grid .g-item, +#g-item #g-photo, +#g-item #g-movie { + font-size: .7em; +} + +/* Links ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +a, +.g-menu a, +#g-dialog a, +.g-button, +.g-button:active { + color: # !important; /* fcDefault; */ + cursor: pointer !important; + text-decoration: none; + -moz-outline-style: none; +} + +a:hover, +.g-button:hover, +a.ui-state-hover, +input.ui-state-hover, +button.ui-state-hover { + color: # !important; /* fcHover */ + text-decoration: none; + -moz-outline-style: none; +} + +a:hover, +#g-dialog a:hover { + text-decoration: underline; +} + +.g-menu a:hover { + text-decoration: none; +} + +#g-dialog #g-action-status li { + width: 400px; + white-space: normal; + padding-left: 32px; +} + +/* Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +table { + width: 100%; +} + +#g-content table { + margin: 1em 0; +} + +caption, +th { + text-align: left; +} + +th, +td { + border: none; + border-bottom: 1px solid #; + padding: .5em; +} + +td { + vertical-align: top; +} + +.g-even { + background-color: #; +} + +.g-odd { + background-color: #; +} + +/** ******************************************************************* + * 2) Reusable content blocks + *********************************************************************/ + +.g-block h2 { + background-color: #; + padding: .3em .8em; +} + +.g-block-content { + margin-top: 1em; +} + +/*** ****************************************************************** + * 3) Page layout containers + *********************************************************************/ + +/* View container ~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.g-view { + background-color: #; + border: 1px solid #; + border-bottom: none; +} + +/* Layout containers ~~~~~~~~~~~~~~~~~~~~~ */ + +#g-header { + margin-bottom: 1em; +} + +#g-banner { + background-color: #; + border-bottom: 1px solid #; + color: #; + min-height: 5em; + padding: 1em 20px; + position: relative; +} + +#g-content { + padding-left: 20px; + position: relative; + width: 696px; +} + +#g-sidebar { + padding: 0 20px; + width: 220px; +} + +#g-footer { + background-color: #; + border-top: 1px solid #; + margin-top: 20px; + padding: 10px 20px; + color: #; +} + +/* Status and validation messages ~~~~ */ + +.g-message-block { + border: 1px solid #; +} + +#g-site-status li { + border-bottom: 1px solid #; +} + +/* Breadcrumbs ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.g-breadcrumbs li { + background: transparent url('../images/ico-separator.png') no-repeat scroll left center; +} + +.g-breadcrumbs .g-first { + background: none; +} + +/* Pagination ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.g-paginator { +} + +.g-paginator li { +} + +.g-paginator .g-info { + background: none; +} + +/* 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; +} + +/** ******************************************************************* + * 4) Content blocks in specific layout containers + *********************************************************************/ + +/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-banner #g-quick-search-form { + clear: right; + float: right; + margin-top: 1em; +} + +#g-banner #g-quick-search-form input[type='text'] { + width: 17em; +} + +#g-content .g-block h2 { + background-color: transparent; + padding-left: 0; +} + +/* Sidebar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-sidebar .g-block-content { + padding-left: 1em; +} + +#g-sidebar #g-image-block { + overflow: hidden; +} + +/* Album content ~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-content #g-album-grid { + margin: 1em 0; + position: relative; + z-index: 1; +} + +#g-content #g-album-grid .g-item { + background-color: #; + border: 1px solid #; + float: left; + padding: .6em 8px; + position: relative; + text-align: center; + width: 213px; + z-index: 1; +} + +#g-content #g-album-grid .g-item h2 { + margin: 5px 0; +} + +#g-content .g-photo h2, +#g-content .g-item .g-metadata { + display: none; + margin-bottom: .6em; +} + +#g-content #g-album-grid .g-album { + background-color: #; +} + +#g-content #g-album-grid .g-album h2 span.g-album { + background: transparent url('../images/ico-album.png') no-repeat top left; + display: inline-block; + height: 16px; + margin-right: 5px; + width: 16px; +} + +#g-content #g-album-grid .g-hover-item { + border: 1px solid #; + position: absolute !important; + z-index: 1000 !important; +} + +#g-content .g-hover-item h2, +#g-content .g-hover-item .g-metadata { + display: block; +} + +#g-content #g-album-grid #g-place-holder { + position: relative; + visibility: hidden; + z-index: 1; +} + +/* Search results ~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-content #g-search-results { + margin-top: 1em; + padding-top: 1em; +} + +/* Individual photo content ~~~~~~~~~~~~~~ */ + +#g-item { + position: relative; + width: 100%; +} + +#g-item #g-photo, +#g-item #g-movie { + padding: 2.2em 0; + position: relative; +} + +#g-item img.g-resize, +#g-item a.g-movie { + display: block; + margin: 0 auto; +} + +/* Footer content ~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-footer #g-credits li { + padding-right: 1.2em; +} + +/* In-line editing ~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-in-place-edit-message { + background-color: #; +} + +/** ******************************************************************* + * 5) Navigation and menus + *********************************************************************/ + +/* Login menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-banner #g-login-menu { + color: #; + float: right; +} + +#g-banner #g-login-menu li { + padding-left: 1.2em; +} + +/* Site Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-site-menu { + bottom: 0; + left: 140px; + position: absolute; +} + +#g-site-menu ul { + margin-bottom: 0 !important; +} + +/* Context Menu ~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.g-context-menu { + background-color: #; + bottom: 0; + left: 0; + position: absolute; +} + +.g-item .g-context-menu { + display: none; + margin-top: 2em; + width: 100%; +} + +#g-item .g-context-menu ul { + display: none; +} + +.g-context-menu li { + border-left: none; + border-right: none; + border-bottom: none; +} + +.g-context-menu li a { + display: block; + line-height: 1.6em; +} + +.g-hover-item .g-context-menu { + display: block; +} + +.g-hover-item .g-context-menu li { + text-align: left; +} + +.g-hover-item .g-context-menu a:hover { + text-decoration: none; +} + +/* View Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-view-menu { + margin-bottom: 1em; +} + +#g-view-menu a { + background-repeat: no-repeat; + background-position: 50% 50%; + height: 28px !important; + width: 43px !important; +} + +#g-view-menu #g-slideshow-link { + background-image: url('../images/ico-view-slideshow.png'); +} + +#g-view-menu .g-fullsize-link { + background-image: url('../images/ico-view-fullsize.png'); +} + +#g-view-menu #g-comments-link { + background-image: url('../images/ico-view-comments.png'); +} + +#g-view-menu #g-print-digibug-link { + background-image: url('../images/ico-print.png'); +} + +/** ******************************************************************* + * 6) jQuery and jQuery UI + *********************************************************************/ + +/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */ + +.ui-widget-overlay { + background: #; + opacity: .7; +} + +/* Rotate icon, ThemeRoller only provides one of these */ + +.ui-icon-rotate-ccw { + background-position: -192px -64px; +} + +.ui-icon-rotate-cw { + background-position: -208px -64px; +} + +/* Superfish menu overrides ~~~~~~~~~~~~~~ */ +.sf-menu a { + border-left:1px solid #; +} + +.sf-menu li, +.sf-menu li li, +.sf-menu li li ul li { + background-color: #; +} + +.sf-menu li:hover { + background-color: #; +} + +.sf-menu li:hover, +.sf-menu li.sfHover, +.sf-menu a:focus, +.sf-menu a:hover, +.sf-menu a:active { + background-color: # !important; +} + +.sf-sub-indicator { + background-image: url("themeroller/images/ui-icons_2e83ff_256x240.png"); + height: 16px; + width: 16px; +} + +a > .sf-sub-indicator { + background-position: -64px -16px !important; + top: 0.6em; +} + +.sf-menu ul a > .sf-sub-indicator { + background-position: -32px -16px !important; +} + +/** ******************************************************************* + * 7) Forms + *********************************************************************/ +fieldset { + border: 1px solid #; +} + +legend { + font-weight: bold; + color: #; +} + +input.textbox, +input[type="text"], +input[type="password"], +textarea { + border: 1px solid #; + border-top-color: #; + border-left-color: #; + color: #; +} + +input:focus, +input.textbox:focus, +input[type=text]:focus, +textarea:focus, +option:focus { + background-color: #; + color: #; +} + +/* Forms in dialogs and panels ~~~~~~~~~ */ + +label, +input[readonly] { + background-color: #; + color: #; /* fcDefault; */ +} + +/* Short forms ~~~~~~~~~~~~~~~~~~~~~~~ */ + +.g-short-form .textbox, +.g-short-form input[type=text] { + color: #; +} + +.g-short-form .textbox.g-error { + border: 1px solid #; + color: #; +} + +/** ******************************************************************* + * 8) 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: #; + font-weight: normal; +} + +.g-editable:hover { + background-color: #; +} + +form li.g-error, +form li.g-info, +form li.g-success, +form li.g-warning { + background-image: none; +} + + +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 #; +} + +.g-error, +.g-denied, +tr.g-error td.g-error, +#g-add-photos-status .g-error { + background: # url('../images/ico-error.png') no-repeat .4em 50%; + color: #; +} + +.g-info { + background: # url('../images/ico-info.png') no-repeat .4em 50%; +} + +.g-success, +.g-allowed, +#g-add-photos-status .g-success { + background: # 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: # url('../images/ico-warning.png') no-repeat .4em 50%; +} + +form .g-error { + background-color: #; +} + +.g-default { + background-color: #; + font-weight: bold; +} + +.g-draggable:hover { + border: 1px dashed #; +} + +.ui-sortable .g-target, +.ui-state-highlight { + background-color: #; + border: 2px dotted #; +} + +/* Ajax loading indicator ~~~~~~~~~~~~~~~~ */ + +.g-loading-large, +.g-dialog-loading-large { + background: # url('../images/loading-large.gif') no-repeat center center !important; +} + +.g-loading-small { + background: # url('../images/loading-small.gif') no-repeat center center !important; +} + +/** ******************************************************************* + * 9) Right to left language styles + *********************************************************************/ + +.rtl #g-header #g-login-menu, +.rtl #g-header #g-quick-search-form { + clear: left; + float: left; +} + +.rtl #g-header #g-login-menu li { + margin-left: 0; + padding-left: 0; + padding-right: 1.2em; +} + +.rtl #g-site-menu { + left: auto; + right: 150px; +} + +.rtl #g-view-menu #g-slideshow-link { + background-image: url('../images/ico-view-slideshow-rtl.png'); +} + +.rtl #g-sidebar .g-block-content { + padding-right: 1em; + padding-left: 0; +} + +.rtl #g-footer #g-credits li { + padding-left: 1.2em !important; + padding-right: 0; +} + +.rtl .g-breadcrumbs li { + background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center; +} + +.rtl .g-breadcrumbs .g-first { + background: none; +} + +/* 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-right:1px solid #; +} + +.rtl .sf-sub-indicator { + background: url("themeroller/images/ui-icons_2e83ff_256x240.png") no-repeat -96px -16px; /* 8-bit indexed alpha png. IE6 gets solid image only */ +} + +/*** shadows for all but IE6 ***/ +.rtl .sf-shadow ul { + background: url('../images/superfish-shadow.png') no-repeat bottom left; + 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; +} diff --git a/modules/themeroller/views/theme.info.php b/modules/themeroller/views/theme.info.php new file mode 100644 index 00000000..939e4ae7 --- /dev/null +++ b/modules/themeroller/views/theme.info.php @@ -0,0 +1,8 @@ + +name = "" +description = "" +version = 1 +author = "" +site = "" +admin = "" +