diff options
-rw-r--r-- | lib/gallery.in_place_edit.js | 62 | ||||
-rw-r--r-- | modules/gallery/config/upload.php | 2 | ||||
-rw-r--r-- | modules/gallery/controllers/movies.php | 9 | ||||
-rw-r--r-- | modules/gallery/controllers/photos.php | 9 | ||||
-rw-r--r-- | modules/gallery/css/gallery.css | 39 | ||||
-rw-r--r-- | modules/gallery/helpers/gallery_theme.php | 1 | ||||
-rw-r--r-- | modules/gallery/libraries/InPlaceEdit.php | 88 | ||||
-rw-r--r-- | modules/gallery/models/item.php | 34 | ||||
-rw-r--r-- | modules/gallery/views/in_place_edit.html.php | 16 | ||||
-rw-r--r-- | modules/tag/controllers/admin_tags.php | 46 | ||||
-rw-r--r-- | modules/tag/helpers/tag.php | 15 | ||||
-rw-r--r-- | modules/tag/helpers/tag_theme.php | 8 | ||||
-rw-r--r-- | modules/tag/js/tag.js | 71 | ||||
-rw-r--r-- | modules/tag/views/admin_tags.html.php | 9 | ||||
-rw-r--r-- | themes/admin_wind/css/screen.css | 5 | ||||
-rw-r--r-- | themes/night_wind/css/screen.css | 5 | ||||
-rw-r--r-- | themes/wind/css/screen.css | 5 |
17 files changed, 254 insertions, 170 deletions
diff --git a/lib/gallery.in_place_edit.js b/lib/gallery.in_place_edit.js new file mode 100644 index 00000000..38c4efb1 --- /dev/null +++ b/lib/gallery.in_place_edit.js @@ -0,0 +1,62 @@ +(function($) { + $.widget("ui.gallery_in_place_edit", { + _init: function() { + var self = this; + $(self).data("parent", self.element.parent()); + this.element.click(function(event) { + event.preventDefault(); + self._show(event.currentTarget); + return false; + }); + }, + + _show: function(target) { + var self = this; + var tag_width = $(target).width(); + $(self).data("tag_width", tag_width); + + $.get(self.options.form_url.replace("__ID__", $(target).attr('rel')), function(data) { + var parent = $(target).parent(); + parent.children().hide(); + parent.append(data); + parent.find("form :text") + .width(tag_width) + .focus(); + $(".g-short-form").gallery_short_form(); + parent.find("form .g-cancel").click(function(event) { + parent.find("form").remove(); + parent.children().show(); + event.preventDefault(); + return false; + }); + self._ajaxify_edit(); + }); + + }, + + _ajaxify_edit: function() { + var self = this; + var form = $($(self).data("parent")).find("form"); + $(form).ajaxForm({ + dataType: "json", + success: function(data) { + if (data.result == "success") { + window.location.reload(); + } else { + $(form).replaceWith(data.form); + var width = $(self).data("tag_width"); + $($(self).data("parent")).find("form :text") + .width(width) + .focus(); + $(".g-short-form").gallery_short_form(); + self._ajaxify_edit(); + } + } + }); + } + }); + + $.extend($.ui.gallery_in_place_edit, { + defaults: {} + }); +})(jQuery); diff --git a/modules/gallery/config/upload.php b/modules/gallery/config/upload.php index 897ecacf..69ea7768 100644 --- a/modules/gallery/config/upload.php +++ b/modules/gallery/config/upload.php @@ -33,4 +33,4 @@ $config['create_directories'] = FALSE; /** * Remove spaces from uploaded filenames. */ -$config['remove_spaces'] = TRUE;
\ No newline at end of file +$config['remove_spaces'] = FALSE;
\ No newline at end of file diff --git a/modules/gallery/controllers/movies.php b/modules/gallery/controllers/movies.php index 01a9fc8b..6200e8b4 100644 --- a/modules/gallery/controllers/movies.php +++ b/modules/gallery/controllers/movies.php @@ -25,13 +25,14 @@ class Movies_Controller extends Items_Controller { public function _show($movie) { access::required("view", $movie); - $position = $movie->parent()->get_position($movie); + $where = array("type != " => "album"); + $position = $movie->parent()->get_position($movie, $where); if ($position > 1) { list ($previous_item, $ignore, $next_item) = - $movie->parent()->children(3, $position - 2); + $movie->parent()->children(3, $position - 2, $where); } else { $previous_item = null; - list ($next_item) = $movie->parent()->viewable()->children(1, $position); + list ($next_item) = $movie->parent()->viewable()->children(1, $position, $where); } $template = new Theme_View("page.html", "movie"); @@ -41,7 +42,7 @@ class Movies_Controller extends Items_Controller { $template->set_global("parents", $movie->parents()); $template->set_global("next_item", $next_item); $template->set_global("previous_item", $previous_item); - $template->set_global("sibling_count", $movie->parent()->viewable()->children_count()); + $template->set_global("sibling_count", $movie->parent()->viewable()->children_count($where)); $template->set_global("position", $position); $template->content = new View("movie.html"); diff --git a/modules/gallery/controllers/photos.php b/modules/gallery/controllers/photos.php index 54cd63c6..b9adfd90 100644 --- a/modules/gallery/controllers/photos.php +++ b/modules/gallery/controllers/photos.php @@ -25,13 +25,14 @@ class Photos_Controller extends Items_Controller { public function _show($photo) { access::required("view", $photo); - $position = $photo->parent()->get_position($photo); + $where = array("type != " => "album"); + $position = $photo->parent()->get_position($photo, $where); if ($position > 1) { list ($previous_item, $ignore, $next_item) = - $photo->parent()->children(3, $position - 2); + $photo->parent()->children(3, $position - 2, $where); } else { $previous_item = null; - list ($next_item) = $photo->parent()->viewable()->children(1, $position); + list ($next_item) = $photo->parent()->viewable()->children(1, $position, $where); } $template = new Theme_View("page.html", "photo"); @@ -41,7 +42,7 @@ class Photos_Controller extends Items_Controller { $template->set_global("parents", $photo->parents()); $template->set_global("next_item", $next_item); $template->set_global("previous_item", $previous_item); - $template->set_global("sibling_count", $photo->parent()->viewable()->children_count()); + $template->set_global("sibling_count", $photo->parent()->viewable()->children_count($where)); $template->set_global("position", $position); $template->content = new View("photo.html"); diff --git a/modules/gallery/css/gallery.css b/modules/gallery/css/gallery.css index a4a52155..724c50d3 100644 --- a/modules/gallery/css/gallery.css +++ b/modules/gallery/css/gallery.css @@ -1,8 +1,3 @@ -/** - * @todo Make #g-welcome-message p unecessary - * @todo Review permissions dialog, find home - */ - /* Permissions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #g-edit-permissions-form { @@ -15,7 +10,6 @@ #g-edit-permissions-form fieldset { border: 1px solid #ccc; - padding: 0; } #g-permissions .g-denied, @@ -42,59 +36,52 @@ background: #999; } +/* In-place edit ~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +#g-inplace-edit-form ul { + margin: 0; +} + /* Simple uploader ~~~~~~~~~~~~~~~~~~~~~~~ */ #g-add-photos #SWFUpload_0 { + left: 134px; position: relative; top: -200px; - left: 134px; -} - -#g-add-photos .g-breadcrumbs { - border: 0; - margin: 0; - padding-left:10px; } #g-add-photos-canvas { border: 1px solid #ccc; - margin: .5em 0 .5em 0; - width: 469px; height: 325px; + margin: .5em 0; overflow: auto; + width: 469px; } #g-add-photos button { - margin-bottom: .5em; float: right; + margin-bottom: .5em; } + #g-uploadqueue-infobar { clear: both; } #g-uploadqueue-infobar #g-cancelupload { - display: none; cursor: pointer; -} - -#g-add-photos-canvas { + display: none; } #g-add-photos-queue .progressbar { height: 4px; } -#g-add-photos-queue .title { - font-size: 1.25em; -} - #g-add-photos-queue .status { font-size: .75em; } #g-add-photos-queue .box { - margin-bottom: 8px; - padding: 4px; + padding: .2em; } #g-add-photos-queue .pending { diff --git a/modules/gallery/helpers/gallery_theme.php b/modules/gallery/helpers/gallery_theme.php index 3fcaca67..0682d4ae 100644 --- a/modules/gallery/helpers/gallery_theme.php +++ b/modules/gallery/helpers/gallery_theme.php @@ -61,6 +61,7 @@ class gallery_theme_Core { } static function admin_head($theme) { + $theme->css("gallery.css"); $theme->script("gallery.panel.js"); $session = Session::instance(); if ($session->get("debug")) { diff --git a/modules/gallery/libraries/InPlaceEdit.php b/modules/gallery/libraries/InPlaceEdit.php new file mode 100644 index 00000000..057874e3 --- /dev/null +++ b/modules/gallery/libraries/InPlaceEdit.php @@ -0,0 +1,88 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2009 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class InPlaceEdit_Core { + private $rules = array(); + private $messages = array(); + private $callback = array(); + private $initial_value; + private $action = ""; + private $errors; + private $form; + + static function factory($initial_value) { + $instance = new InPlaceEdit(); + $instance->initial_value = $initial_value; + $instance->form = array("input" => $initial_value); + $instance->errors = array("input" => ""); + + return $instance; + } + + public function add_action($action) { + $this->action = $action; + return $this; + } + + public function add_rules($rules) { + $this->rules += $rules; + return $this; + } + + public function add_messages($messages) { + $this->messages += $messages; + return $this; + } + + public function add_callback($callback) { + $this->callback = $callback; + return $this; + } + + public function validate() { + $post = Validation::factory($_POST) + ->add_callbacks("input", $this->callback); + foreach ($this->rules as $rule) { + $post->add_rules("input", $rule); + } + + $valid = $post->validate(); + $this->form = array_merge($this->form, $post->as_array()); + $this->errors = array_merge($this->errors, $post->errors()); + return $valid; + } + + public function render() { + $v = new View("in_place_edit.html"); + $v->hidden = array("csrf" => access::csrf_token()); + $v->action = url::site($this->action); + $v->form = $this->form; + $v->errors = $this->errors; + foreach ($v->errors as $key => $error) { + if (!empty($error)) { + $v->errors[$key] = $this->messages[$error]; + } + } + return $v->render(); + } + + public function value() { + return $this->form["input"]; + } +}
\ No newline at end of file diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php index fc0f0193..9735ed62 100644 --- a/modules/gallery/models/item.php +++ b/modules/gallery/models/item.php @@ -422,7 +422,7 @@ class Item_Model extends ORM_MPTT { * Find the position of the given child id in this album. The resulting value is 1-indexed, so * the first child in the album is at position 1. */ - public function get_position($child) { + public function get_position($child, $where=array()) { if ($this->sort_order == "DESC") { $comp = ">"; } else { @@ -435,18 +435,20 @@ class Item_Model extends ORM_MPTT { $count = $db->from("items") ->where("parent_id", $this->id) ->where($this->sort_column, NULL) + ->where($where) ->count_records(); if (empty($count)) { // There are no NULLs in the sort column, so we can just use it directly. - $position = $db->query(" - SELECT COUNT(*) AS position FROM {items} - WHERE `parent_id` = {$this->id} - AND `{$this->sort_column}` $comp (SELECT `{$this->sort_column}` - FROM {items} WHERE `id` = $child->id)") - ->current()->position; - - // We stopped short of our target value in the sort (notice that we're using a < comparator + $sort_column = $this->sort_column; + + $position = $db->from("items") + ->where("parent_id", $this->id) + ->where("$sort_column < ", $child->$sort_column) + ->where($where) + ->count_records(); + + // We stopped short of our target value in the sort (notice that we're using a < comparator // above) because it's possible that we have duplicate values in the sort column. An // equality check would just arbitrarily pick one of those multiple possible equivalent // columns, which would mean that if you choose a sort order that has duplicates, it'd pick @@ -454,13 +456,12 @@ class Item_Model extends ORM_MPTT { // // Fix this by doing a 2nd query where we iterate over the equivalent columns and add them to // our base value. - $result = $db->query(" - SELECT id FROM {items} - WHERE `parent_id` = {$this->id} - AND `{$this->sort_column}` = (SELECT `{$this->sort_column}` - FROM {items} WHERE `id` = $child->id) - ORDER BY `id` ASC"); - foreach ($result as $row) { + foreach ($db->from("items") + ->where("parent_id", $this->id) + ->where($sort_column, $child->$sort_column) + ->where($where) + ->orderby(array("id" => "ASC")) + ->get() as $row) { $position++; if ($row->id == $child->id) { break; @@ -484,6 +485,7 @@ class Item_Model extends ORM_MPTT { foreach ($db->select("id") ->from("items") ->where("parent_id", $this->id) + ->where($where) ->orderby($orderby) ->get() as $row) { $position++; diff --git a/modules/gallery/views/in_place_edit.html.php b/modules/gallery/views/in_place_edit.html.php new file mode 100644 index 00000000..64671d57 --- /dev/null +++ b/modules/gallery/views/in_place_edit.html.php @@ -0,0 +1,16 @@ +<?php defined("SYSPATH") or die("No direct script access.") ?> +<?= form::open($action, array("method" => "post", "id" => "g-inplace-edit-form", "class" => "g-short-form"), $hidden) ?> + <ul> + <li <? if (!empty($errors["input"])): ?> class="g-error"<? endif ?>> + <?= form::input("input", $form["input"], " class='textbox'") ?> + </li> + <li> + <?= form::submit(array("class" => "submit ui-state-default"), t("Save")) ?> + </li> + <li><a href="#" class="g-cancel"><?= t("Cancel") ?></a></li> + </ul> +<?= form::close() ?> +<? if (!empty($errors["input"])): ?> +<div id="g-inplace-edit-message" class="g-error"><?= $errors["input"] ?></div> +<? endif ?> + diff --git a/modules/tag/controllers/admin_tags.php b/modules/tag/controllers/admin_tags.php index 63f7957c..d79f697c 100644 --- a/modules/tag/controllers/admin_tags.php +++ b/modules/tag/controllers/admin_tags.php @@ -69,7 +69,9 @@ class Admin_Tags_Controller extends Admin_Controller { public function form_rename($id) { $tag = ORM::factory("tag", $id); if ($tag->loaded) { - print tag::get_rename_form($tag); + print InPlaceEdit::factory($tag->name) + ->add_action("admin/tags/rename/$id") + ->render(); } } @@ -81,25 +83,15 @@ class Admin_Tags_Controller extends Admin_Controller { kohana::show_404(); } - // Don't use a form as the form is dynamically created in the js - $post = new Validation($_POST); - $post->add_rules("name", "required", "length[1,64]"); - $valid = $post->validate(); - if ($valid) { - $new_name = $this->input->post("name"); - $new_tag = ORM::factory("tag")->where("name", $new_name)->find(); - if ($new_tag->loaded) { - $error_msg = t("There is already a tag with that name"); - $valid = false; - } - } else { - $error_msg = $post->errors(); - $error_msg = $error_msg[0]; - } + $inplaceedit = InPlaceEdit::factory($tag->name) + ->add_action("admin/tags/rename/$tag->id") + ->add_rules(array("required", "length[1,64]")) + ->add_messages(array("in_use" => t("There is already a tag with that name"))) + ->add_callback(array($this, "check_for_duplicate")); - if ($valid) { + if ($inplaceedit->validate()) { $old_name = $tag->name; - $tag->name = $new_name; + $tag->name = $inplaceedit->value(); $tag->save(); $message = t("Renamed tag %old_name to %new_name", @@ -107,16 +99,18 @@ class Admin_Tags_Controller extends Admin_Controller { message::success($message); log::success("tags", $message); - print json_encode( - array("result" => "success", - "location" => url::site("admin/tags"), - "tag_id" => $tag->id, - "new_tagname" => html::clean($tag->name))); + print json_encode(array("result" => "success")); } else { - print json_encode( - array("result" => "error", - "message" => (string) $error_msg)); + print json_encode(array("result" => "error", "form" => $inplaceedit->render())); } } + + public function check_for_duplicate(Validation $post_data, $field) { + $tag_exists = ORM::factory("tag")->where("name", $post_data[$field])->count_all(); + if ($tag_exists) { + $post_data->add_error($field, "in_use"); + } + } + } diff --git a/modules/tag/helpers/tag.php b/modules/tag/helpers/tag.php index 01972a65..feaf40c5 100644 --- a/modules/tag/helpers/tag.php +++ b/modules/tag/helpers/tag.php @@ -73,12 +73,16 @@ class tag_Core { if ($tags) { $cloud = new View("tag_cloud.html"); $cloud->max_count = $tags[0]->count; - usort($tags, array("tag_theme", "sort_by_name")); + usort($tags, array("tag", "sort_by_name")); $cloud->tags = $tags; return $cloud; } } + static function sort_by_name($tag1, $tag2) { + return strcasecmp($tag1->name, $tag2->name); + } + /** * Return all the tags for a given item. * @return array @@ -109,15 +113,6 @@ class tag_Core { return $form; } - static function get_rename_form($tag) { - $form = new Forge("admin/tags/rename/$tag->id", "", "post", array("id" => "g-rename-tag-form", "class" => "g-short-form")); - $group = $form->group("rename_tag")->label(t("Rename Tag")); - $group->input("name")->label(t("Tag name"))->value($tag->name)->rules("required|length[1,64]"); - $group->inputs["name"]->error_messages("in_use", t("There is already a tag with that name")); - $group->submit("")->value(t("Save")); - return $form; - } - static function get_delete_form($tag) { $form = new Forge("admin/tags/delete/$tag->id", "", "post", array("id" => "g-delete-tag-form")); $group = $form->group("delete_tag") diff --git a/modules/tag/helpers/tag_theme.php b/modules/tag/helpers/tag_theme.php index ac0dd016..76c0ea6b 100644 --- a/modules/tag/helpers/tag_theme.php +++ b/modules/tag/helpers/tag_theme.php @@ -21,16 +21,12 @@ class tag_theme_Core { static function head($theme) { $theme->css("jquery.autocomplete.css"); $theme->script("jquery.autocomplete.js"); - $theme->css("tag.css"); $theme->script("tag.js"); + $theme->css("tag.css"); } static function admin_head($theme) { $theme->css("tag.css"); - $theme->script("tag.js"); - } - - static function sort_by_name($tag1, $tag2) { - return strcasecmp($tag1->name, $tag2->name); + $theme->script("gallery.in_place_edit.js"); } }
\ No newline at end of file diff --git a/modules/tag/js/tag.js b/modules/tag/js/tag.js index 8cb4e571..4760084d 100644 --- a/modules/tag/js/tag.js +++ b/modules/tag/js/tag.js @@ -1,7 +1,3 @@ -$("document").ready(function() { - ajaxify_tag_form(); -}); - function ajaxify_tag_form() { $("#g-tag form").ajaxForm({ dataType: "json", @@ -15,70 +11,3 @@ function ajaxify_tag_form() { } }); } - -function closeEditInPlaceForms() { - // closes currently open inplace edit forms - if ($("#g-rename-tag-form").length) { - $("#g-action-status").remove(); - var li = $("#g-rename-tag-form").parent(); - $("#g-rename-tag-form").parent().html($("#g-rename-tag-form").parent().data("revert")); - li.height(""); - $(".g-editable", li).bind("click", editInPlace); - $(".g-dialog-link", li).gallery_dialog(); - } -} - -function str_replace(search_term, replacement, string) { - var temp = string.split(search_term); - return temp.join(replacement); -} - -function editInPlace(element) { - closeEditInPlaceForms(); - - // create edit form - var tag_id = $(this).attr('rel'); - var tag_name = $(this).html(); - var tag_width = $(this).width(); - $(this).parent().data("revert", $(this).parent().html()); - var form = '<form id="g-rename-tag-form" method="post" class="g-short-form" '; - form += 'action="' + TAG_RENAME_URL.replace('__ID__', tag_id) + '">'; - form += '<input name="csrf" type="hidden" value="' + csrf_token + '" />'; - form += '<ul>'; - form += '<li><input id="name" name="name" type="text" class="textbox" value="' + - str_replace('"', """, tag_name) + '" /></li>'; - form += '<li><input type="submit" class="submit ui-state-default" value="' + save_i18n + '" /></li>'; - form += '<li><a href="#" class="g-cancel">' + cancel_i18n + '</a></li>'; - form += '</ul>'; - form += '</form>'; - - // add edit form - $(this).parent().html(form); - $("#g-rename-tag-form #name") - .width(tag_width) - .focus(); - $(".g-short-form").gallery_short_form(); - $("#g-rename-tag-form .g-cancel").bind("click", closeEditInPlaceForms); - - ajaxify_editInPlaceForm = function() { - $("#g-rename-tag-form").ajaxForm({ - dataType: "json", - success: function(data) { - if (data.result == "success") { - closeEditInPlaceForms(); // close form - $(".g-tag[rel=" + data.tag_id + "]").text(data.new_tagname); // update tagname - window.location.reload(); - } else if (data.result == "error") { - $("#g-rename-tag-form #name") - .addClass("g-error") - .focus(); - var message = "<ul id=\"g-action-status\" class=\"g-message-block\">"; - message += "<li class=\"g-error\">" + data.message + "</li>"; - message += "</ul>"; - $("#g-tag-admin").before(message); - } - } - }); - }; - ajaxify_editInPlaceForm(); -} diff --git a/modules/tag/views/admin_tags.html.php b/modules/tag/views/admin_tags.html.php index 10d7921a..b637a7f1 100644 --- a/modules/tag/views/admin_tags.html.php +++ b/modules/tag/views/admin_tags.html.php @@ -1,18 +1,15 @@ <?php defined("SYSPATH") or die("No direct script access.") ?> <script type="text/javascript"> - var TAG_RENAME_URL = <?= html::js_string(url::site("admin/tags/rename/__ID__")) ?>; $("document").ready(function() { // using JS for adding link titles to avoid running t() for each tag $("#g-tag-admin .g-tag-name").attr("title", <?= t("Click to edit this tag")->for_js() ?>); $("#g-tag-admin .g-delete-link").attr("title", $(".g-delete-link:first span").html()); // In-place editing for tag admin - $(".g-editable").bind("click", editInPlace); + $(".g-editable").gallery_in_place_edit({ + form_url: <?= html::js_string(url::site("admin/tags/form_rename/__ID__")) ?> + }); }); - // make some values available within tag.js - var csrf_token = "<?= $csrf ?>"; - var save_i18n = <?= html::js_string(t("save")->for_html_attr()) ?>; - var cancel_i18n = <?= html::js_string(t("cancel")->for_html_attr()) ?>; </script> <? $tags_per_column = $tags->count()/5 ?> diff --git a/themes/admin_wind/css/screen.css b/themes/admin_wind/css/screen.css index 87879ecb..cd83b110 100644 --- a/themes/admin_wind/css/screen.css +++ b/themes/admin_wind/css/screen.css @@ -368,6 +368,11 @@ th { padding: .3em .8em; } +/* In-line editting ~~~~~~~~~~~~~~~~~~~~~ */ +#g-inplace-edit-message { + background-color: #FFF; +} + /** ******************************************************************* * 5) Navigation and menus *********************************************************************/ diff --git a/themes/night_wind/css/screen.css b/themes/night_wind/css/screen.css index b95cfc72..2286b26e 100644 --- a/themes/night_wind/css/screen.css +++ b/themes/night_wind/css/screen.css @@ -455,6 +455,11 @@ li.g-error select { padding-top: 1em; } +/* In-line editting ~~~~~~~~~~~~~~~~~~~~~ */ +#g-inplace-edit-message { + background-color: #FFF; +} + /** ******************************************************************* * 5) Navigation and menus *********************************************************************/ diff --git a/themes/wind/css/screen.css b/themes/wind/css/screen.css index 1fc5fa65..8c466bd8 100644 --- a/themes/wind/css/screen.css +++ b/themes/wind/css/screen.css @@ -299,6 +299,11 @@ td { padding-top: 1em; } +/* In-line editting ~~~~~~~~~~~~~~~~~~~~~ */ +#g-inplace-edit-message { + background-color: #FFF; +} + /** ******************************************************************* * 5) Navigation and menus *********************************************************************/ |