From 969185ad24321279995e3564e0c1b20feedb0280 Mon Sep 17 00:00:00 2001 From: albert Date: Thu, 26 May 2011 19:10:08 -0400 Subject: [PATCH] work --- Gemfile | 2 +- app/assets/javascripts/notes.js | 700 ++++++++++-------- app/assets/javascripts/posts.js | 36 +- app/assets/stylesheets/application.css.scss | 269 +++---- app/controllers/wiki_pages_controller.rb | 2 +- app/logical/post_sets/post.rb | 8 +- app/models/artist.rb | 2 +- app/models/forum_post.rb | 2 +- app/presenters/wiki_page_presenter.rb | 9 + app/views/layouts/default.html.erb | 7 +- app/views/posts/index.html.erb | 35 +- .../posts/partials/common/_search.html.erb | 2 +- .../posts/partials/index/_posts.html.erb | 9 + app/views/static/site_map.html.erb | 50 +- app/views/wiki_pages/_excerpt.html.erb | 19 + config/danbooru_local_config.rb | 2 +- config/initializers/inflections.rb | 16 +- public/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes public/images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes public/images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes public/images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes public/images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes public/images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes public/images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes public/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes public/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes public/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes public/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes public/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../smoothness/jquery-ui-1.8.5.custom.css | 34 +- 31 files changed, 629 insertions(+), 575 deletions(-) create mode 100644 app/views/posts/partials/index/_posts.html.erb create mode 100644 app/views/wiki_pages/_excerpt.html.erb create mode 100755 public/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 public/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 public/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 public/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 public/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 public/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 public/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 public/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 public/images/ui-icons_222222_256x240.png create mode 100755 public/images/ui-icons_2e83ff_256x240.png create mode 100755 public/images/ui-icons_454545_256x240.png create mode 100755 public/images/ui-icons_888888_256x240.png create mode 100755 public/images/ui-icons_cd0a0a_256x240.png diff --git a/Gemfile b/Gemfile index c9d209bf6..f0365f7df 100644 --- a/Gemfile +++ b/Gemfile @@ -20,4 +20,4 @@ gem "mechanize" gem "nokogiri" gem "meta_search" gem "will_paginate", :git => "git://github.com/wantful/will_paginate.git" -gem "silent-postgres" \ No newline at end of file +gem "silent-postgres" diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 456dc7329..687eef0db 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -1,347 +1,395 @@ -(function() { - Danbooru.Note = function() {} - - Danbooru.Note.initialize_all = function() { - $("#note-container").width($("#image").width()); - $("#note-container").height($("#image").height()); +Danbooru.Note = { + Box: { + create: function(id) { + var $inner_border = $('
'); + $inner_border.addClass("note-box-inner-border"); + $inner_border.css({opacity: 0.7}); + + var $note_box = $('
'); + $note_box.addClass("note-box"); + $note_box.data("id", id); + $note_box.attr("data-id", id); + $note_box.draggable({containment: "parent"}); + $note_box.resizable({ + containment: "parent", + handles: "se" + }); + $note_box.append($inner_border); + Danbooru.Note.Box.bind_events($note_box); + + return $note_box; + }, - $("a#translate").click(function(e) { - e.preventDefault(); - Danbooru.Note.create(1); - }); - } - - Danbooru.Note.prototype.getElement = function(name, unwrap) { - var element = $("#note-" + name + "-" + this.id); + bind_events: function($note_box) { + $note_box.bind( + "dragstart resizestart", + function(e) { + var $note_box_inner = $(e.currentTarget); + Danbooru.Note.dragging = true; + Danbooru.Note.clear_timeouts(); + Danbooru.Note.Body.hide_all(); + } + ) + + $note_box.bind( + "resize", + function(e) { + var $note_box_inner = $(e.currentTarget); + Danbooru.Note.Box.resize_inner_border($note_box_inner); + } + ); + + $note_box.bind( + "dragstop resizestop", + function(e) { + Danbooru.Note.dragging = false; + } + ); + + $note_box.bind( + "mouseover mouseout", + function(e) { + if (Danbooru.Note.dragging) { + return; + } + + var $note_box_inner = $(e.currentTarget); + if (e.type === "mouseover") { + Danbooru.Note.Body.show($note_box_inner.data("id")); + } else if (e.type === "mouseout") { + Danbooru.Note.Body.hide($note_box_inner.data("id")); + } + } + ); + }, - if (unwrap) { - return element[0]; - } else { - return element; - } - } - - Danbooru.Note.prototype.getBox = function(unwrap) { - return this.getElement("box", unwrap); - } - - Danbooru.Note.prototype.getImage = function(unwrap) { - return this.getElement("image", unwrap); - } - - Danbooru.Note.prototype.getBody = function(unwrap) { - return this.getElement("body", unwrap); - } - - Danbooru.Note.prototype.getCorner = function(unwrap) { - return this.getElement("corner", unwrap); - } - - Danbooru.Note.prototype.initialize = function(id, is_new, raw_body) { - if (Note.debug) { - console.debug("Note#initialize (id=%d)", id); - } + resize_inner_border: function($note_box) { + var $inner_border = $note_box.find("div.note-box-inner-border"); + $inner_border.css({ + height: $note_box.height() - 2, + width: $note_box.width() - 2 + }); + }, - this.id = id; - this.is_new = is_new; - - // Cache the dimensions - this.fullsize = { - left: this.getBox().offset().left, - top: this.getBox().offset().top, - width: this.getBox().width(), - height: this.getBox().height() - } + scale: function($note_box) { + var $image = $("#image"); + var original_width = parseFloat($image.data("width")); + var original_height = parseFloat($image.data("height")); + var ratio = $image.width() / original_width; + + if (ratio < 1) { + var scaled_width = original_width * ratio; + var scaled_height = original_height * ratio; + var scaled_top = $note_box.offset().top * ratio; + var scaled_left = $note_box.offset().left * ratio; + $note_box.css({ + top: scaled_top, + left: scaled_left, + width: scaled_width, + height: scaled_height + }); + } + }, - // Store the original values (in case the user clicks Cancel) - this.old = { - raw_body: raw_body, - formatted_body: this.getBody().html() - } - - for (p in this.fullsize) { - this.old[p] = this.fullsize[p]; - } - - // Make the note translucent - if (is_new) { - this.getBox().css({opacity: 0.2}); - } else { - this.getBox().css({opacity: 0.5}); - } - - if (is_new && raw_body == '') { - this.bodyfit = true; - this.getBody().css({height: 100}); - } - - // Attach the event listeners - this.getBox().mousedown(this.dragStart); - this.getBox().mouseout(this.bodyHideTimer); - this.getBox().mouseover(this.bodyShow); - this.getCorner().mousedown(this.resizeStart); - this.getBody().mouseover(this.bodyShow); - this.getBody().mouseout(this.bodyHideTimer); - this.getBody().click(this.showEditBox); - - this.adjustScale(); - } - - // Returns the raw text value of this note - Danbooru.Note.prototype.textValue = function() { - if (Note.debug) { - console.debug("Note#textValue (id=%d)", this.id); - } - - return this.old.raw_body.trim(); - } - - // Removes the edit box - Danbooru.Note.prototype.hideEditBox = function(e) { - if (Note.debug) { - console.debug("Note#hideEditBox (id=%d)", this.id) - } - - var id = $("#edit-box").data("id"); - - if (id != null) { - $("#edit-box").unbind(); - $("#note-save-" + id).unbind(); - $("#note-cancel-" + id).unbind(); - $("#note-remove-" + id).unbind(); - $("#note-history-" + id).unbind(); - $("#edit-box").remove(); - } - } - - // Shows the edit box - Danbooru.Note.prototype.showEditBox = function(e) { - if (Note.debug) { - console.debug("Note#showEditBox (id=%d)", this.id); - } - - this.hideEditBox(e); - - var insertionPosition = this.getInsertionPosition(); - var top = insertionPosition[0]; - var left = insertionPosition[1]; - html += '
'; - html += '
'; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += '
'; - html += '
'; - $("#note-container").append(html); - $('#edit-box').data("id", this.id); - $("#edit-box").mousedown(this.editDragStart); - $("#note-save-" + this.id).click(this.save); - $("#note-cancel-" + this.id).click(this.cancel); - $("#note-remove-" + this.id).click(this.remove); - $("#note-history-" + this.id).click(this.history) - $("#edit-box-text").focus(); - } - - // Shows the body text for the note - Danbooru.Note.prototype.bodyShow = function(e) { - if (Note.debug) { - console.debug("Note#bodyShow (id=%d)", this.id); - } - - if (this.dragging) { - return; - } - - if (this.hideTimer) { - this.hideTimer.clear(); - } - - if (Note.noteShowingBody == this) { - return; - } - - if (Note.noteShowingBody) { - Note.noteShowingBody.bodyHide(); - } - - Note.noteShowingBody = this; - - if (Note.zindex >= 9) { - /* don't use more than 10 layers (+1 for the body, which will always be above all notes) */ - Note.zindex = 0; - for (var i=0; i< Note.all.length; ++i) { - Note.all[i].getBox().css({zIndex: 0}); + descale: function($note_box) { + var $image = $("#image"); + var original_width = parseFloat($image.data("width")); + var original_height = parseFloat($image.data("height")); + var ratio = $image.width() / original_width; + + if (ratio < 1) { + var scaled_width = original_width * ratio; + var scaled_height = original_height * ratio; + var scaled_top = $note_box.offset().top * ratio; + var scaled_left = $note_box.offset().left * ratio; + $note_box.css({ + top: scaled_top, + left: scaled_left, + width: scaled_width, + height: scaled_height + }); } } - - this.getBox().css({zIndex: ++Note.zindex}); - this.getBody().css({zIndex: 10, top: 0, left: 0}); - var dw = document.documentElement.scrollWidth; - this.getBody().css({visibility: "hidden", display: "block"}); - if (!this.bodyfit) { - this.getBody().css({height: "auto", minWidth: 140}); - var w = this.getBody(true).offsetWidth; - var h = this.getBody(true).offsetHeight; - var lo = null; - var hi = null; - var x = null; - var last = null; - if (this.getBody(true).scrollWidth <= this.getBody(true).clientWidth) { - /* for short notes (often a single line), make the box no wider than necessary */ - // scroll test necessary for Firefox - lo = 20; - hi = w; + }, - do { - x = (lo+hi)/2 - this.getBody().css({minWidth: x}); - if (this.getBody(true).offsetHeight > h) { - lo = x; - } else { - hi = x; - } - } while ((hi - lo) > 4); - if (this.getBody(true).offsetHeight > h) { - this.getBody().css({minWidth: hi}); - } + Body: { + create: function(id) { + var $note_body = $('
'); + $note_body.addClass("note-body"); + $note_body.data("id", id); + $note_body.attr("data-id", id); + $note_body.hide(); + Danbooru.Note.Body.bind_events($note_body); + return $note_body; + }, + + initialize: function($note_body) { + var $note_box = $("#note-container div.note-box[data-id=" + $note_body.data("id") + "]"); + $note_body.css({ + top: $note_box.position().top + $note_box.height() + 5, + left: $note_box.position().left + }); + Danbooru.Note.Body.bound_position($note_body); + }, + + bound_position: function($note_body) { + var doc_width = $(window).width(); + if ($note_body.offset().left + $note_body.width() > doc_width) { + $note_body.css({ + // 30 is a magic number to factor in width of the scroll bar + left: $note_body.position().left - 30 - ($note_body.offset().left + $note_body.width() - doc_width) + }); + } + }, + + show: function(id) { + if (Danbooru.Note.editing) { + return; + } + + Danbooru.Note.Body.hide_all(); + Danbooru.Note.clear_timeouts(); + var $note_body = $("#note-container div.note-body[data-id=" + id + "]"); + $note_body.show(); + Danbooru.Note.Body.initialize($note_body); + }, + + hide: function(id) { + var $note_body = $("#note-container div.note-body[data-id=" + id + "]"); + Danbooru.Note.timeouts.push($.timeout(250).done(function() {$note_body.hide();})); + }, + + hide_all: function() { + $(".note-body").hide(); + }, + + resize: function($note_body) { + var w = $note_body.width(); + var h = $note_body.height(); + var golden_ratio = 1.6180339887; + + while (w / h < golden_ratio) { + w = w * 1.025; + h = h / 1.025; } - if ($.browser.msie) { - // IE7 adds scrollbars if the box is too small, obscuring the text - if (this.getBody(true).offsetHeight < 35) { - this.getBody().css({minHeight: 35}); - } - - if (this.getBody(true).offsetWidth < 47) { - this.getBody().css({minWidth: 47}); - } + while (w / h > golden_ratio) { + w = w / 1.025; + h = h * 1.025; } - this.bodyfit = true; + + $note_body.css({ + width: w, + height: "auto" + }); + }, + + set_text: function($note_body, text) { + $note_body.html(text); + Danbooru.Note.Body.resize($note_body); + Danbooru.Note.Body.bound_position($note_body); + }, + + bind_events: function($note_body) { + $note_body.mouseover(function(e) { + var $note_body_inner = $(e.currentTarget); + Danbooru.Note.Body.show($note_body_inner.data("id")); + }); + + $note_body.mouseout(function(e) { + var $note_body_inner = $(e.currentTarget); + Danbooru.Note.Body.hide($note_body_inner.data("id")); + }); + + $note_body.click(function(e) { + var $note_body_inner = $(e.currentTarget); + Danbooru.Note.Edit.show($note_body_inner); + }) } - this.getBody().css({ - top: this.getBox(true).offsetTop + this.getBox(true).clientHeight + 5 + }, + + Edit: { + show: function($note_body) { + if (Danbooru.Note.editing) { + return; + } + + $(".note-box").resizable("disable"); + $(".note-box").draggable("disable"); + + $textarea = $(''); + $textarea.css({ + width: "100%", + height: "10em" + }); + + if ($note_body.html() !== "Click to edit") { + $textarea.val($note_body.html()); + } + + $dialog = $('
'); + $dialog.append($textarea); + $dialog.data("id", $note_body.data("id")); + $dialog.dialog({ + modal: true, + width: 300, + dialogClass: "note-edit-dialog", + title: "Edit note", + buttons: { + "Save": Danbooru.Note.Edit.save, + "Cancel": Danbooru.Note.Edit.cancel, + "Delete": Danbooru.Note.Edit.delete, + "History": Danbooru.Note.Edit.history + } + }); + $dialog.bind("dialogclose", function() { + Danbooru.Note.editing = false; + $(".note-box").resizable("enable"); + $(".note-box").draggable("enable"); + }); + Danbooru.Note.editing = true; + }, + + save: function() { + var $this = $(this); + var $textarea = $this.find("textarea"); + var id = $this.data("id"); + var $note_body = $("#note-container .note-body[data-id=" + id + "]"); + var $note_box = $("#note-container .note-box[data-id=" + id + "]"); + var text = $textarea.val(); + Danbooru.Note.Body.set_text($note_body, text); + $this.dialog("close"); + $note_box.find(".note-box-inner-border").removeClass("unsaved"); + console.log("save %d", id); + }, + + cancel: function() { + $(this).dialog("close"); + }, + + delete: function() { + var $this = $(this); + var id = $this.data("id"); + console.log("delete %d", id); + $("#note-container .note-box[data-id=" + id + "]").remove(); + $("#note-container .note-body[data-id=" + id + "]").remove(); + $(this).dialog("close"); + }, + + history: function() { + var $this = $(this); + var id = $this.data("id"); + console.log("history %d", id); + $(this).dialog("close"); + } + }, + + TranslationMode: { + start: function() { + $("#note-container").click(Danbooru.Note.TranslationMode.create_note); + $("#translate-button").one("click", Danbooru.Note.TranslationMode.stop).html("Click on image"); + }, + + stop: function() { + $("#note-container").unbind("click"); + $("#translate-button").one("click", Danbooru.Note.TranslationMode.start).html("Translate"); + }, + + create_note: function(e) { + var offset = $("#image").offset(); + Danbooru.Note.new(e.pageX - offset.left, e.pageY - offset.top); + Danbooru.Note.TranslationMode.stop(); + } + }, + + Image: { + resize: function() { + var $image = $("#image"); + var max_width = parseInt($("meta[name=max-image-width]").attr("content")); + var current_width = $image.width(); + var current_height = $image.height(); + if (current_width > max_width) { + var ratio = max_width / current_width; + $image.attr("ratio", ratio); + $image.width(current_width * ratio).height(current_height * ratio).attr("resized", "1"); + } + }, + + reset_size: function() { + var $image = $("#image"); + $image.width($image.data("width")).height($image.data("height")).attr("resized", "0"); + } + }, + + id: "x", + dragging: false, + editing: false, + timeouts: [], + pending: {}, + + scale: function() { + var $image = $("#image"); + if ($image.attr("ratio")) { + + } + }, + + add: function(id, x, y, w, h, text) { + var $note_box = Danbooru.Note.Box.create(id); + var $note_body = Danbooru.Note.Body.create(id); + + $note_box.css({ + left: x, + top: y, + width: w, + height: h }); - - // keep the box within the document's width - var l = 0; - var e = this.getBox(true); - do { - l += e.offsetLeft - } while (e = e.offsetParent); - l += this.getBody(true).offsetWidth + 10 - dw; - if (l > 0) { - this.getBody().css({left: this.getBox(true).offsetLeft - l}); - } else { - this.getBody().css({left: this.getBox(true).offsetLeft}); - } - this.getBody().css({visibility: "visible"}); - } - - Danbooru.Note.prototype.bodyHideTimer = function(e) { - if (Note.debug) { - console.debug("Note#bodyHideTimer (id=%d)", this.id); - } - this.hideTimer = $.timeout(250).done(this.bodyHide); - } - - // Start dragging the note - Danbooru.Note.prototype.dragStart = function(e) { - if (Note.debug) { - console.debug("Note#dragStart (id=%d)", this.id); - } - $(document).mousemove(this.drag); - $(document).mouseup(this.dragStop); - $(document).select(function(e) {e.preventDefault();}); - - this.cursorStartX = e.pageX; - this.cursorStartY = e.pageY; - this.boxStartX = this.getBox().offset().left; - this.boxStartY = this.getBox().offset().top; - this.boundsX = new ClipRange(5, this.getImage(true).clientWidth - this.getBox(true).clientWidth - 5); - this.boundsY = new ClipRange(5, this.getImage(true).clientHeight - this.getBox(true).clientHeight - 5); - this.dragging = true; - this.bodyHide(); - } + $("div#note-container").append($note_box); + $("div#note-container").append($note_body); + Danbooru.Note.Box.scale($note_box); + Danbooru.Note.Box.resize_inner_border($note_box); + Danbooru.Note.Body.set_text($note_body, text); + }, - // Stop dragging the note - Danbooru.Note.prototype.dragStop = function(e) { - if (Note.debug) { - console.debug("Note#dragStop (id=%d)", this.id); - } - - $(document).unbind(); - - this.cursorStartX = null; - this.cursorStartY = null; - this.boxStartX = null; - this.boxStartY = null; - this.boundsX = null; - this.boundsY = null; - this.dragging = false; - - this.bodyShow(); - } - - Danbooru.Note.prototype.ratio = function() { - return this.getImage().width() / parseFloat(this.getImage().data("original-width")); - } - - // Scale the notes for when the image gets resized - Danbooru.Note.prototype.adjustScale = function() { - if (Note.debug) { - console.debug("Note#adjustScale (id=%d)", this.id); - } - - var ratio = this.ratio(); - this.getBox().css({ - left: this.fullsize.left * ratio, - top: this.fullsize.top * ratio, - width: this.fullsize.width * ratio, - height: this.fullsize.height * ratio + new: function(x, y) { + var $note_box = Danbooru.Note.Box.create(Danbooru.Note.id); + var $note_body = Danbooru.Note.Body.create(Danbooru.Note.id); + $note_box.offset({ + top: y, + left: x }); - } + $note_box.find(".note-box-inner-border").addClass("unsaved"); + $note_body.html("Click to edit"); + $("div#note-container").append($note_box); + $("div#note-container").append($note_body); + Danbooru.Note.Box.resize_inner_border($note_box); + Danbooru.Note.id += "x"; + }, - // Update the note's position as it gets dragged - Danbooru.Note.prototype.drag = function(e) { - var left = this.boxStartX + e.pageX - this.cursorStartX; - var top = this.boxStartY + e.pageY - this.cursorStartY; - left = this.boundsX.clip(left); - top = this.boundsY.clip(top); - this.getBox().css({left: left, top: top}); - var ratio = this.ratio(); - this.fullsize.left = left / ratio; - this.fullsize.top = top / ratio; - - e.preventDefault(); - } - - // Start dragging the edit box - Danbooru.Note.prototype.editDragStart = function(e) { - if (Note.debug) { - console.debug("Note#editDragStart (id=%d)", this.id); - } + clear_timeouts: function() { + $.each(Danbooru.Note.timeouts, function(i, v) { + v.clear(); + }); - var node = e.element().nodeName; - if (node != 'FORM' && node != 'DIV') { - return - } - - document.observe("mousemove", this.editDrag.bindAsEventListener(this)) - document.observe("mouseup", this.editDragStop.bindAsEventListener(this)) - document.observe("selectstart", function() {return false}) - - this.elements.editBox = $('edit-box'); - this.cursorStartX = e.pointerX() - this.cursorStartY = e.pointerY() - this.editStartX = this.elements.editBox.offsetLeft - this.editStartY = this.elements.editBox.offsetTop - this.dragging = true + Danbooru.Note.timeouts = []; } -})(); +} $(document).ready(function() { - Danbooru.Note.initialize_all(); + if ($("#c-posts #a-show").size > 0) { + Danbooru.Note.Image.resize(); + $("#translate-button").one("click", Danbooru.Note.TranslationMode.start); + $("#note-container").width($("#image").width()).height($("#image").height()); + // $(document).bind("keydown", "ctrl+n", Danbooru.Note.TranslationMode.start); + + $("#toggle-resize").click(function() { + var $image = $("#image"); + if ($image.attr("resized") === "1") { + Danbooru.Note.Image.reset_size(); + } else { + Danbooru.Note.Image.resize(); + } + }); + } }); diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index 5d16c70f2..8db9f7247 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -166,38 +166,22 @@ Danbooru.Post = {}; Danbooru.Post.initialize_all = function() { - this.initialize_tag_and_wiki_menu(); - this.initialize_tag_list(); this.initialize_post_sections(); + this.initialize_wiki_page_excerpt(); } - Danbooru.Post.initialize_tag_list = function() { - $("#tag-box a.search-inc-tag").click(function(e) { - $("#tags").val($("#tags").val() + " " + $(e.target).parent("li").data("tag-name")); - return false; - }); - - $("#tag-box a.search-exl-tag").click(function(e) { - $("#tags").val($("#tags").val() + " -" + $(e.target).parent("li").data("tag-name")); - return false; - }); - } - - Danbooru.Post.initialize_tag_and_wiki_menu = function() { - $("#tag-and-wiki-box h1 a").click(function(e) { - $("#tag-box").hide(); - $("#wiki-box").hide(); - $("#tag-and-wiki-box menu li").toggleClass("active"); - var name = e.target.hash; - $(name).show(); - e.stopPropagation(); - return false; + Danbooru.Post.initialize_wiki_page_excerpt = function() { + $("#close-wiki-page-excerpt").click(function() { + $("#wiki-page-excerpt").remove(); + Danbooru.j_alert("Notice", "You can reenable the wiki excerpt by clearing your cookies."); + Danbooru.Cookie.put("hide-wiki-page-excerpt", "1"); }); - $("#tag-and-wiki-box menu li:first-child").addClass("active"); - $("#wiki-box").hide(); + if (Danbooru.Cookie.get("hide-wiki-page-excerpt") === "1") { + $("#wiki-page-excerpt").remove(); + } } - + Danbooru.Post.initialize_post_sections = function() { $("#post-sections li a").click(function(e) { $("#comments").hide(); diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/stylesheets/application.css.scss index ddcccecf5..6e4958832 100644 --- a/app/assets/stylesheets/application.css.scss +++ b/app/assets/stylesheets/application.css.scss @@ -2,28 +2,61 @@ $link_color: #006FFA; $link_hover_color: #9093FF; +$h1_size: 2em; +$h2_size: 1.5em; +$h3_size: 1.16667em; +$h1_padding: 1.25em 0; +$h2_padding: 1.45833em 0; +$h3_padding: 1.51785em 0; -.blacklisted { - display: none !important; +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; } -body, div, h1, h2, h3, h4, h5, h6, p, ul, li, dd, dt, header, aside { - font-family: Verdana, Geneva, sans-serif; - line-height: 1.25em; -} - -body { - font-size: 87.5%; -} - -h1, h2, h3, h4 { - font-family: Tahoma; - line-height: 1em; -} +/*** BEGIN CUSTOM STYLES ***/ body { + font-family: Verdana, Helvetica, sans-serif; padding: 1em 2em; margin: 0; + line-height: 1.25em; } article, section { @@ -74,28 +107,40 @@ dt { font-weight: bold; } +h1, h2, h3 { + font-family: Tahoma; + font-weight: bold; + line-height: 1.25em; +} + h1 { - font-size: 2.1818em; + font-size: $h1_size; } -h2 { - font-size: 1.9091em; +h2 { + font-size: $h2_size; } -h3 { - font-size: 1.6364em; +h3 { + font-size: $h3_size; } -h4 { - font-size: 1.4545em; -} +div.prose { + h1, h2, h3 { + line-height: 1em; + } + + h1 { + padding: $h1_padding; + } -h5 { - font-size: 1.2727em; -} + h2 { + padding: $h2_padding; + } -h6 { - font-size: 1.090em; + h3 { + padding: $h3_padding; + } } header { @@ -228,14 +273,18 @@ div#page { aside#sidebar { width: 20%; float: left; - + h1 { - font-size: 1.2em; + font-size: $h3_size; } ul { list-style-type: none; } + + input[type=text] { + width: 10em; + } } aside#sidebar > section { @@ -253,6 +302,7 @@ div.clearfix { clear: both; } + /*** Paginator ***/ div.paginator { display: block; @@ -294,14 +344,6 @@ div.paginator { } -/*** Header ***/ - -body > header > h1 { - font-size: 3em; - font-family: Tahoma, Helvetica, sans-serif; -} - - /*** Dialog Boxes ***/ div.ui-dialog { ul { @@ -542,65 +584,21 @@ div#c-posts { margin-left: 1em; } - section#tag-and-wiki-box { - padding: 0; - - menu { - li { - display: inline-block; - } - - li.active a { - color: #000; - } - } - - div#tag-box { - h2 { - display: none; - } - - li { - list-style-type: none; - } - } - - div#wiki-box { - h2 { - display: none; - } - } - } - - section#content > h1 { - display: none; + h1 { + font-size: $h3_size; } - section#content { - section > h2 { - display: none; - } - - menu#post-sections { - margin-bottom: 1em; - - li { - font-size: 1.1em; - font-weight: bold; - } - - li.active a { - color: black; - } - } - - section#edit { - fieldset { - label { - display: inline; - } - } - } + div#wiki-page-excerpt { + position: relative; + width: 40em; + padding-right: 1em; + } + + span#close-wiki-page-excerpt { + position: absolute; + top: 0; + right: 0; + cursor: pointer; } } @@ -783,9 +781,6 @@ div#c-forum-topics { } div#a-show { - h1#forum-topic-title { - font-size: 2.1818em; - } } span.info { @@ -867,15 +862,13 @@ div#note-container { position: absolute; div.note-body { - background: #FFE; - border: 1px solid black; - max-width: 300px; - min-width: 140px; - min-height: 10px; position: absolute; - padding: 5px; + border: 1px solid black; + background: white; + min-width: 5em; + min-height: 1em; cursor: pointer; - overflow: auto; + padding: 4px; p.tn { font-size: 0.8em; @@ -885,41 +878,49 @@ div#note-container { div.note-box { position: absolute; - border: 1px solid black; - width: 150px; - height: 150px; + border: 1px solid white; + min-width: 100px; + min-height: 100px; cursor: move; background: #FFE; - div.note-corner { - background: black; - width: 7px; - height: 7px; - position: absolute; - bottom: 0; - right: 0; - cursor: se-resize; + div.note-box-inner-border { + border: 1px solid black; + background: white; + } + + div.note-box-inner-border.unsaved { + border: 1px solid red; } } - div.unsaved { - background: #FFF; - border: 1px solid red; - - div.note-corner { - background: red; - } + div.note-edit-dialog { + font-size: 70%; } } -div#jquery-test div.note { - background: #FFE; - border: 1px solid black; - max-width: 300px; - min-width: 140px; - min-height: 10px; - position: absolute; - padding: 5px; - cursor: pointer; - overflow: auto; -} \ No newline at end of file + +/*** Site Map ***/ +div#c-static { + div#a-site-map { + width: 80em; + + h1 { + display: none; + } + + section { + width: 20em; + float: left; + + h1 { + display: block; + font-size: $h3_size; + } + + ul { + margin-bottom: 1.5em; + } + } + } +} diff --git a/app/controllers/wiki_pages_controller.rb b/app/controllers/wiki_pages_controller.rb index 5e223e7ef..dab1e768b 100644 --- a/app/controllers/wiki_pages_controller.rb +++ b/app/controllers/wiki_pages_controller.rb @@ -5,7 +5,7 @@ class WikiPagesController < ApplicationController before_filter :normalize_search_params, :only => [:index] def new - @wiki_page = WikiPage.new + @wiki_page = WikiPage.new(params[:wiki_page]) respond_with(@wiki_page) end diff --git a/app/logical/post_sets/post.rb b/app/logical/post_sets/post.rb index f5a31d554..37dd01530 100644 --- a/app/logical/post_sets/post.rb +++ b/app/logical/post_sets/post.rb @@ -40,8 +40,8 @@ module PostSets def load_associations if is_single_tag? - @wiki_page = WikiPage.find_by_title(tags) - @artist = Artist.find_by_name(tags) + @wiki_page = ::WikiPage.titled(tags).first + @artist = ::Artist.find_by_name(tags) end end @@ -61,6 +61,10 @@ module PostSets def tag_array @tag_array ||= Tag.scan_query(tags) end + + def tag + tag_array.first + end def validate validate_page diff --git a/app/models/artist.rb b/app/models/artist.rb index 6560b1510..7f0f55a3e 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -14,7 +14,7 @@ class Artist < ActiveRecord::Base attr_accessible :name, :url_string, :other_names, :group_name, :wiki_page_attributes, :notes scope :url_match, lambda {|string| where(["id in (?)", Artist.find_all_by_url(string).map(&:id)])} scope :other_names_match, lambda {|string| where(["other_names_index @@ to_tsquery('danbooru', ?)", Artist.normalize_name(string)])} - search_method :url_match, :other_names_match + search_methods :url_match, :other_names_match module UrlMethods module ClassMethods diff --git a/app/models/forum_post.rb b/app/models/forum_post.rb index 1747822fa..cdca4a6fc 100644 --- a/app/models/forum_post.rb +++ b/app/models/forum_post.rb @@ -8,7 +8,7 @@ class ForumPost < ActiveRecord::Base validates_presence_of :body, :creator_id validate :validate_topic_is_unlocked scope :body_matches, lambda {|body| where(["text_index @@ plainto_tsquery(?)", body])} - search_method :body_matches + search_methods :body_matches def self.new_reply(params) if params[:topic_id] diff --git a/app/presenters/wiki_page_presenter.rb b/app/presenters/wiki_page_presenter.rb index dee7b05fd..41746f3b9 100644 --- a/app/presenters/wiki_page_presenter.rb +++ b/app/presenters/wiki_page_presenter.rb @@ -1,4 +1,13 @@ class WikiPagePresenter + attr_reader :wiki_page + + def initialize(wiki_page) + @wiki_page = wiki_page + end + + def excerpt + wiki_page.body.split(/\r\n|\r|\n/).first + end # Produce a formatted page that shows the difference between two versions of a page. def diff(other_version) diff --git a/app/views/layouts/default.html.erb b/app/views/layouts/default.html.erb index 4669a0021..4f7b51057 100644 --- a/app/views/layouts/default.html.erb +++ b/app/views/layouts/default.html.erb @@ -13,15 +13,16 @@ <% if flash[:notice] =~ /error/ %> <% end %> + <%= auto_discovery_link_tag :atom, posts_path(:format => "atom", :tags => params[:tags]) %> - - + <%= stylesheet_link_tag "application", :media => "screen" %> + <%= javascript_include_tag "application" %> <%= Danbooru.config.custom_html_header_content %> <%= yield :html_header %>
-

<%= Danbooru.config.app_name %>

+

<%= link_to Danbooru.config.app_name, "/" %>

-
+ +
    -
  • Comments

  • +
  • Comments

  • <%= link_to("Help", wiki_pages_path(:title => "help:comments")) %>
  • <%= link_to("Listing", comments_path) %>
  • <%= link_to("Trac", "http://trac.donmai.us") %>
    -
  • Forum

  • +
  • Forum

  • <%= link_to("Help", wiki_pages_path(:title => "help:forum")) %>
  • <%= link_to("Listing", forum_topics_path) %>
    -
  • Wiki

  • +
  • Wiki

  • <%= link_to("Help", wiki_pages_path(:title => "help:wiki")) %>
  • <%= link_to("Listing", wiki_pages_path) %>
  • <%= link_to("Recent Changes", wiki_page_versions_path) %>
-
-
+ +
    -
  • Users

  • +
  • Users

  • <%= link_to("Help", wiki_pages_path(:title => "help:users")) %>
  • <%= link_to("Bans", bans_path) %>
  • <%= link_to("Listing", users_path) %>
  • <% unless CurrentUser.nil? %>
  • <%= link_to("Profile", user_path(CurrentUser.user)) %>
  • <% end %> -
  • <%= link_to("Feedback", user_feedback_path) %>
  • +
  • <%= link_to("Feedback", user_feedback_index_path) %>
  • <%= link_to("Settings", edit_user_path(CurrentUser.user)) %>
  • <%= link_to("Signup", new_user_path) %>
  • <%= link_to("Terms of Service", terms_of_service_path) %>
<% if CurrentUser.is_admin? %>
    -
  • Admin

  • +
  • Admin

  • <%= link_to("Edit User", admin_users_edit_path) %>
  • <%= link_to("Janitor Trials", janitor_trials_path) %>
  • <%= link_to("IP Bans", ip_bans_path) %>
<% end %> -
+
\ No newline at end of file diff --git a/app/views/wiki_pages/_excerpt.html.erb b/app/views/wiki_pages/_excerpt.html.erb new file mode 100644 index 000000000..5622f08ab --- /dev/null +++ b/app/views/wiki_pages/_excerpt.html.erb @@ -0,0 +1,19 @@ + + +
+ +

Wiki

+ + <% if wiki_page %> +
+ <%= format_text(wiki_page.presenter.excerpt) %> + +

Read the <%= link_to "full article", wiki_page_path(wiki_page.id) %>.

+
+ <% else %> +

There is currently no wiki page for the tag "<%= tag %>". You can <%= link_to "create one", new_wiki_page_path(:wiki_page => {:title => tag}) %>.

+ <% end %> +
diff --git a/config/danbooru_local_config.rb b/config/danbooru_local_config.rb index ac91e61e0..a9d5b9e24 100644 --- a/config/danbooru_local_config.rb +++ b/config/danbooru_local_config.rb @@ -2,7 +2,7 @@ module Danbooru class CustomConfiguration < Configuration # Define your custom overloads here def app_name - "." + "Lorem" end def posts_per_page diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 9e8b0131f..e9c87618f 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -1,10 +1,6 @@ -# Be sure to restart your server when you modify this file. - -# Add new inflection rules using the following format -# (all these examples are active by default): -# ActiveSupport::Inflector.inflections do |inflect| -# inflect.plural /^(ox)$/i, '\1en' -# inflect.singular /^(ox)en/i, '\1' -# inflect.irregular 'person', 'people' -# inflect.uncountable %w( fish sheep ) -# end +ActiveSupport::Inflector.inflections do |inflect| + # inflect.plural /^(ox)$/i, '\1en' + # inflect.singular /^(ox)en/i, '\1' + # inflect.irregular 'person', 'people' + inflect.uncountable %w( user_feedback ) +end diff --git a/public/images/ui-bg_flat_0_aaaaaa_40x100.png b/public/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`XL$V_;zTl2TN~z`#)L>EalY(fIb9A>#oB z0S3bZ`zM)4s+63#z$ean)A;imdFy!gdmEalY(fIb9A>#oB z0fvo1|L4hb@|Yi(pmAc>%%5`K?(@yz2y2>}pc=tRT}nEuo8^e6(RDut1_lOCS3j3^ HP6T{ZhhoGv@`x3wGGB#6Gd=msl|6Q}m>dY6qMonj9rKh373vHNTznKhW#v b6Skvs1lR&2PiQePFfe$!`njxgN@xNAU9c$Q literal 0 HcmV?d00001 diff --git a/public/images/ui-bg_glass_65_ffffff_1x400.png b/public/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}um)5S5wqWA4-MLq@v zk;50>-v56_Ta2@-<;Nn@!^0^^e{ywV8$> literal 0 HcmV?d00001 diff --git a/public/images/ui-bg_glass_75_dadada_1x400.png b/public/images/ui-bg_glass_75_dadada_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}uy)5S5wqBptX)030+ zYHVz5ZGlNsBvjjUKfb+fuF*YlqF{4EQj$}e;*J{~jo;5`7<%;x-QZw2p3He?!Ow?` Q3=9kmp00i_>zopr0DRvgbN~PV literal 0 HcmV?d00001 diff --git a/public/images/ui-bg_glass_75_e6e6e6_1x400.png b/public/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..86c2baa655eac8539db34f8d9adb69ec1226201c GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u))5S5wqWA4-LoNmd z0p^2y|NLKFc_8#w1V__Wk6DSckA4$y;CL9lt2#9FZ7I9Mq(1YO4>H27Oq?HYxJ-9r QU|?YIboFyt=akR{0FXu_ssI20 literal 0 HcmV?d00001 diff --git a/public/images/ui-bg_glass_95_fef1ec_1x400.png b/public/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..4443fdc1a156babad4336f004eaf5ca5dfa0f9ab GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u!)5S5wqWA52L#_q` z2Iq_O@BH7^q`>-ErNjBU)5%XiBoEih89HdD#vf~)oZxBkLbp*h`G>E;{7bL6mrl{- Z?@;3B+Q-}B!@$76;OXk;vd$@?2>|+vCeZ)@ literal 0 HcmV?d00001 diff --git a/public/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/public/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 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 B0@(ln literal 0 HcmV?d00001 diff --git a/public/images/ui-icons_2e83ff_256x240.png b/public/images/ui-icons_2e83ff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 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 BWu5>4 literal 0 HcmV?d00001 diff --git a/public/images/ui-icons_454545_256x240.png b/public/images/ui-icons_454545_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..59bd45b907c4fd965697774ce8c5fc6b2fd9c105 GIT binary patch literal 4369 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 BAu9j? literal 0 HcmV?d00001 diff --git a/public/images/ui-icons_888888_256x240.png b/public/images/ui-icons_888888_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..6d02426c114be4b57aabc0a80b8a63d9e56b9eb6 GIT binary patch literal 4369 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 BV=({# literal 0 HcmV?d00001 diff --git a/public/images/ui-icons_cd0a0a_256x240.png b/public/images/ui-icons_cd0a0a_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..2ab019b73ec11a485fa09378f3a0e155194f6a5d GIT binary patch literal 4369 zcmeAS@N?(olHy`uVBq!ia0y~yU}RumVEDkn%)r2K!_(_00|Ud`0G|-oGh93)2fgNV zOJ-nT@GA-O3ucfIFk;~d*xx);Pbs9pAuT~l=q!(djhK^%mt2&ZL6A(btpYd35Bov-qqi;by&anjU<>vQhUb+gN>o0ySt$>T2r1AnWhi(^Q| zoVT&PNw>ENvYqr;^|WP@Zgu9HC~vFu&y#Ypujj3urMvQSiRbmN_x=~MHLw)gD=4^b zQn~#j#oLZa<(-|}L2HI7Q%{{Zaf4YT;7wHP+(isGirKD(t#8Os6q&&oT)Df&fS-lg zb-O{W$4*V%4`L6ViIs3?H@waNe`l3<0sj;hkr?@)bLST*G`!c77MSYVZO*Z9Ki4b) z&FMT^Vb*nD0#ffi;&rOnAf)w4SjSeSs%@5OsnHR~)tWo&IaMWw#-rMh) zFYUOwn_+*;wtDd!mhY++rc4BbjmLL<^e8x9C=l*&4vpukFCiltvjGme^4q= zyerP3@$qM4kz2O!7QGZxYEAn8#8fWASwz~wOMc?qz8%i(tCsv~2zj~gJ(KyK`d?-< z!QnHpFn;5|O;=10^Q?5xDdIf3@Z`!>E}vIxZU|xiSToOmPOFH+Q!al$UBRm}PyIc~ z$+Gd=c@?W$wP)t-;v2_2EJ{g;New>^FX}HMl3V zfTN()XW|U&bUBqv4;{?TZEyJ^&eh`0%$^{1>Myh1h5fq~95NKHE`It)$Xi$-tRYWO zROqNu;xeVx{oFrQ1#+6C9rPH>I#u)=KZM48xhBBlF3x_!ijiG8VQ#{LNeT_6O>06* zyjKd!+^c&abF}+#)PlP|O=Uv%?C(^)mi^{y#esG6`%j(#fg9O(-o(bRX}t-&c|dM9 zug<0RZq`e$o!VBJm~h|nkMKTQ!`fBZbS}Ml=RpDOcwyfq8e+`9b1v+2oyX_j@~e?c zfhSDmcZi`=#MiHklNgg0>2}rFJ1AU9`+U{uenioOZ>s7Jmv%Zb#q9Fj@^Gh@PHkI* zlT-4;&oOLaTpv#r^&VWlm?J~uQf!Imi8pbpBtHu-ti5ymsAT@R>&xylK^6fBoC!H$4IgcHTuS0Wn9uiEW5y*>UrATxpM? z>g3!0qQ63#d^fFqp|`PiC(E=C41w~-&p2LvY}lqJ?RR4{`;*7D466lY7HaOD{=u%{ zJL~T!|8yUfHzrK)e>FX^`G>&t!(#ijiz`(gH#}iHRU+H|W4h)YzcoqqZf}5KeVrNc@sZZKfj* zK!?thruAESxz4tEt~jdax%&04oC6$^f=mL;2{9!PqHPpdUO3BVmMk=};6L!w5_)^Kh!&p0`?Y7;4 zlV^)6mVE5I`}c@&K~2>UYo`N`kN1mOKTO(Ky1u)Jsps$fWTq9~joaq`k}xS*z$P#K zrRu;$L)kX>I++EV{@oW$=<9F0G3)S8=2zYiP72p>o|$6D`fKm)g`3v517Bek1D5$F9+FQ#YlgYN_?+k|Dmjx579bFFWy!rdjom`7NtAojDe778h z9E#0%9TfV&DmQ(FN7{h*X76GxW}lTaDap15uK#I=eGIX zP^-QD&51MgsieeAjZZ~3UkXn&hE*0_U@dag(%OIb#(Dwfs&rW}?=8^N8dq^&id$8SQ;m-&9bMOZSD_q&zwwcGe(zRDzwUs#>w)+O>wlRZVtaMTaB|_Ng~g83%1^$dr)eY->TF3k=6H2E}745GMjmPC-V%u1GlHEJvjPPy#1Hxw*9?V3>j5# z1gfjov)+Go-F{Bat;5%MOx0FfTvYuxYlq)N;Rl;`uj60v%;b+I&#lvk6IS>!KJV^n z(A&#>`~KRF1uP0b|GYlF`1t=n>!$YKdB`_?^71clGz&Sm7>Uid|Gw$t-@HA>9t}ws zq|f|FcwZ}UL*e`MwTJ%cB}|j}_?1nz@mK%yHwA@}hQCvp;*)+~J^jA)yZO(5soH*L zzs9?L6K~sgSL2mSV~B9`A0562hwu6D)iV3|%q#l+GdIArdsofIxq=lhx|XsV_9VCd z?y695aZFkOPAjqr9qh||HQ2>BzB1pl<$|B9%lkT;vKUTPoiD$c?$6R^Y@Id#aKVqm z{2ye4o(tZquVd4XJ8<*P$(+5d(s>1sdFP%nFF7gQKl_-06kohB+m5}f1r4qqms*@7 zY{JYf*E|2$iP!OL|GzDKk+g!}K=h<<__<|SH|29by?XuP!p2J{`{v8!aMcv0GCgM9 z^XxHi*NN2v2~N6O+Be?)S0<{L`QqoZ-k|(@6}4?#uQcb~e8@6ERXKru@r9=LAX8^i zS;k$fB>Np%_81kH?l{<*xVN9-ffPq^WTo-$=eAjisrmJuug&MzefqjqPikR-C|iyr z+ui%;nip{;2>H)Fula^?GH2X+yLsn*t6p+m_@-^ba!m61NvDVuy}rY~RsT+xo$Ywd zyl?B}^B=aY4!E9DZ_z1Su;#ywnfX^CbA3s)vEaV>cv$Vz1__F%x?9Xxifrk zkYD@8?P=8Sy^W7sk80k%E4#}O79tgNq{Qu5T#zxboCCrAl$6gEBE@vO*tM4@RUVYqf z_wkRryOUM?H=q0h_Wpco)P&k{bkqeL)DWVEX993;QVpn zYC@v3M&Als)udOA`45cFoUxT%+jcK+&Zi}YKRC1Iw97fopOn91Z?KA3p489B50vN5 z6+N3fnc*(;43S^9nR8wl928DIb?g0d@!q>9{$03qH`DUyx7sWD@}8|X`8ZeH{kg92 zaY*~D*iQ`Ms(OdNwR326p1#rgEVk-)%!i78uC&cJzbVD$Z@8{rDsaBB2y0WVe zlvz8zW;p9?e66i~UPJkcpnCau6c?SZ_<4dCqmyZ1+NO1bRQ zdeJ{seb@3{X*~TTSL?s7vQMOL?ZwYLkALMpVB`{?{o%cRMCd(hod@-^7+S;BwS|9k zvo+L*%~yLb?X@H5)%B>@hs)QBFSlB}^!)WIXEt@_zn69Iw+Zi>clU(D)5c2PZzg-z z-YWe({U1;7@`SM4liAA!7{9H)*rojaZ&iRp;0#_rJ0t!7f2)_pr?q$o|v$`PvvWVw%_|E>T>#QmtUCQ(`N$z zD%&Lvm@~|M!?)E4kIBR+XpgdOC~B*T8q%-RGHq%kOK@{KdD6fpOvaP#&*s@*gJ5V4smM zJ(F3--{F^#!To)rff{c=9e5(rC}2G=>Fdrlk~7M`PJVEnoyE%ZI_EFHp7NjrPyhLu z-theNty10lw5)yYrk!k7mYuoxk6qi_yH0EQ#cO9}qEqim@H@$AVwEC1J1PE?v zJluP-n*ZB>=F6XCRTv(z+?YPS_S@SOw}wamzZC4hSfi@wlHw+?W4qnVzrT0ax_@h^ zzR!N=`)&tNYt+r{*s{Po^E?!GatW=vD!xnX&41>%##~b`lyWlt__@#bTmB*D9ecN* zs(Zy)R=K-&VXo-!@+zAf=3hmpzR!~nu>4VUEIj-F+mDTPDc>`y)`mXWt94FHXJc)I$ztaD0e0sx7+ BCo}*6 literal 0 HcmV?d00001 diff --git a/vendor/assets/stylesheets/smoothness/jquery-ui-1.8.5.custom.css b/vendor/assets/stylesheets/smoothness/jquery-ui-1.8.5.custom.css index 2c4e166e0..8a5a8f592 100755 --- a/vendor/assets/stylesheets/smoothness/jquery-ui-1.8.5.custom.css +++ b/vendor/assets/stylesheets/smoothness/jquery-ui-1.8.5.custom.css @@ -59,26 +59,26 @@ .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(/images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } .ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(/images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } .ui-widget-header a { color: #222222; } /* Interaction states ----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(/images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(/images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(/images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(/images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(/images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } @@ -89,14 +89,14 @@ ----------------------------------*/ /* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } +.ui-icon { width: 16px; height: 16px; background-image: url(/images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(/images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(/images/ui-icons_222222_256x240.png); } +.ui-state-default .ui-icon { background-image: url(/images/ui-icons_888888_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(/images/ui-icons_454545_256x240.png); } +.ui-state-active .ui-icon {background-image: url(/images/ui-icons_454545_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(/images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(/images/ui-icons_cd0a0a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } @@ -291,8 +291,8 @@ .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } /* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* +.ui-widget-overlay { background: #aaaaaa url(/images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(/images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* * jQuery UI Resizable @VERSION * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)