refinerycms-images 2.1.5 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/refinery/admin/images_controller.rb +62 -49
- data/app/helpers/refinery/admin/images_helper.rb +6 -6
- data/app/models/refinery/image.rb +16 -61
- data/app/models/refinery/thumbnail_dimensions.rb +97 -0
- data/app/views/refinery/admin/images/_actions.html.erb +6 -7
- data/app/views/refinery/admin/images/_form.html.erb +30 -12
- data/app/views/refinery/admin/images/_grid_view.html.erb +9 -16
- data/app/views/refinery/admin/images/_list_view.html.erb +4 -4
- data/app/views/refinery/admin/images/_list_view_image.html.erb +24 -15
- data/app/views/refinery/admin/images/index.html.erb +3 -3
- data/app/views/refinery/admin/images/insert.html.erb +1 -1
- data/config/locales/ca.yml +44 -0
- data/config/locales/cs.yml +5 -0
- data/config/locales/de.yml +5 -0
- data/config/locales/en.yml +4 -0
- data/config/locales/fr.yml +4 -0
- data/config/locales/it.yml +4 -14
- data/config/locales/nl.yml +1 -1
- data/config/routes.rb +1 -1
- data/db/migrate/20140814073957_add_title_and_alt_to_refinery_images.rb +8 -0
- data/db/migrate/20150430171341_translate_refinery_images.rb +22 -0
- data/lib/generators/refinery/images/templates/config/initializers/refinery/images.rb.erb +2 -5
- data/lib/refinery/images.rb +4 -1
- data/lib/refinery/images/configuration.rb +4 -6
- data/lib/refinery/images/dragonfly.rb +38 -27
- data/lib/refinery/images/engine.rb +2 -3
- data/license.md +1 -1
- data/refinerycms-images.gemspec +6 -3
- data/spec/factories/image.rb +6 -2
- data/spec/features/refinery/admin/images_spec.rb +49 -136
- data/spec/lib/generators/refinery/images/images_generator_spec.rb +1 -1
- data/spec/lib/refinery/images/dragonfly_spec.rb +34 -0
- data/spec/models/refinery/image_spec.rb +81 -43
- data/spec/models/refinery/thumbnail_dimensions_spec.rb +18 -0
- data/spec/support/shared contexts/admin_images_tab.rb +17 -0
- data/spec/support/shared contexts/many_images.rb +5 -0
- data/spec/support/shared contexts/no_images.rb +3 -0
- data/spec/support/shared contexts/one_image.rb +3 -0
- data/spec/support/shared contexts/visual_editor_add_image.rb +31 -0
- data/spec/support/shared examples/image_deleter.rb +31 -0
- data/spec/support/shared examples/image_editor.rb +3 -0
- data/spec/support/shared examples/image_indexer.rb +118 -0
- data/spec/support/shared examples/image_inserter.rb +53 -0
- data/spec/support/shared examples/image_previewer.rb +41 -0
- data/spec/support/shared examples/image_translator.rb +31 -0
- data/spec/support/shared examples/image_uploader.rb +37 -0
- data/spec/support/spec_helper.rb +19 -0
- data/test.html +126 -0
- metadata +64 -9
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
describe ThumbnailDimensions, type: :model do
|
5
|
+
subject(:dimensions) { described_class.new(geometry, 500, 375) }
|
6
|
+
|
7
|
+
describe '#scale' do
|
8
|
+
context 'when no width is supplied' do
|
9
|
+
let(:geometry) { 'x225>' }
|
10
|
+
|
11
|
+
it 'scales by height factor' do
|
12
|
+
expect(dimensions.width).to eq 300
|
13
|
+
expect(dimensions.height).to eq 225
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
shared_context 'admin images tab' do
|
2
|
+
|
3
|
+
let(:open_upload_dialog) { find('a', text: ::I18n.t('create_new_image', scope: 'refinery.admin.images.actions')).trigger(:click) }
|
4
|
+
let(:select_upload) {}
|
5
|
+
let(:initialize_context) {}
|
6
|
+
let(:index_in_frame) {false}
|
7
|
+
let(:dialog_frame_id) {'dialog_iframe'}
|
8
|
+
let(:initial_path) { refinery.admin_images_path(view: %w(grid list).sample) }
|
9
|
+
|
10
|
+
let(:index_item_selector) {'#records li'}
|
11
|
+
let(:gridview_img_selector) {' > img'}
|
12
|
+
let(:gridview_title_selector) {'[tooltip]'}
|
13
|
+
let(:gridview_alt_selector) {'[alt]'}
|
14
|
+
let(:listview_title_selector) {' > span.title'}
|
15
|
+
let(:listview_filename_selector) {' > span.preview'}
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
shared_context 'Visual Editor - add image' do
|
2
|
+
|
3
|
+
let(:page_for_image) {
|
4
|
+
page = Refinery::Page.create :title => "Add Image to me"
|
5
|
+
# we need page parts so that there's a visual editor
|
6
|
+
Refinery::Pages.default_parts.each_with_index do |default_page_part, index|
|
7
|
+
page.parts.create(:title => default_page_part, :slug => default_page_part, :body => nil, :position => index)
|
8
|
+
end
|
9
|
+
page
|
10
|
+
}
|
11
|
+
|
12
|
+
let(:initialize_context) {click_on('Add Image') }
|
13
|
+
|
14
|
+
let(:open_upload_dialog) {}
|
15
|
+
let(:select_upload) {choose(::I18n.t('new_image', :scope => 'refinery.admin.images.insert')) }
|
16
|
+
|
17
|
+
let(:initial_path) { refinery.edit_admin_page_path(page_for_image) }
|
18
|
+
|
19
|
+
# let(:target_image) { find(:xpath, "//img[@title='Beach']")}
|
20
|
+
# let(:url){target_image["data-#{size}"]}
|
21
|
+
|
22
|
+
let(:index_in_frame) {true}
|
23
|
+
let(:dialog_frame_id) {'dialog_frame'}
|
24
|
+
let(:index_item_selector) {'#existing_image_area_content ul li img'}
|
25
|
+
let(:title_attribute_selector) {'[title]'}
|
26
|
+
let(:alt_attribute_selector) {'[alt]'}
|
27
|
+
|
28
|
+
let(:image_title_selector) {|title| '//img[@alt="' << title << '"]'}
|
29
|
+
let(:image_size_selector) {|size| '//a[@href="#' << size << '"]'}
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
shared_examples_for 'deletes an image' do
|
2
|
+
before do
|
3
|
+
raise "please set let(:initial_path)" if initial_path.blank?
|
4
|
+
ensure_on(initial_path)
|
5
|
+
end
|
6
|
+
|
7
|
+
let(:image_count) {[Refinery::Image.count, Refinery::Images.pages_per_admin_index].min}
|
8
|
+
let(:deleting_an_image) {
|
9
|
+
-> {
|
10
|
+
first("#records li").click_link(::I18n.t('delete', scope: 'refinery.admin.images'))
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
it 'has a delete image link for each image' do
|
15
|
+
expect(page).to have_selector('#records.images li a.confirm-delete', count: image_count)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "removes an image" do
|
19
|
+
expect(deleting_an_image).to change(Refinery::Image, :count).by(-1)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'says the image has been removed' do
|
23
|
+
image_title = page.has_selector?('#image_grid') ? find("#image_grid li:first").first("img")[:title] :
|
24
|
+
find("#image_list li:first").first("span.title").text
|
25
|
+
|
26
|
+
expect(image_title).to be_present
|
27
|
+
|
28
|
+
first(".images_list li:first").click_link(::I18n.t('delete', scope: 'refinery.admin.images'))
|
29
|
+
expect(page).to have_content(::I18n.t('destroyed', scope: 'refinery.crudify', what: "'#{image_title}'"))
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
shared_examples_for 'indexes images' do
|
2
|
+
|
3
|
+
let(:image_count) {[Refinery::Image.count, Refinery::Images.pages_per_admin_index].min}
|
4
|
+
|
5
|
+
before do
|
6
|
+
raise "please set let(:initial_path)" if initial_path.blank?
|
7
|
+
ensure_on(initial_path)
|
8
|
+
initialize_context
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'shows all the images', js: true do
|
12
|
+
if index_in_frame
|
13
|
+
page.within_frame(dialog_frame_id) do
|
14
|
+
expect(page).to have_selector(index_item_selector, count: image_count)
|
15
|
+
end
|
16
|
+
else
|
17
|
+
expect(page).to have_selector(index_item_selector, count: image_count)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end # image index
|
22
|
+
|
23
|
+
shared_examples_for 'shows list and grid views' do
|
24
|
+
|
25
|
+
let(:image_count) {[Refinery::Image.count, Refinery::Images.pages_per_admin_index].min}
|
26
|
+
|
27
|
+
before do
|
28
|
+
raise "please set let(:initial_path)" if initial_path.blank?
|
29
|
+
ensure_on(initial_path)
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when in grid view" do
|
33
|
+
|
34
|
+
before { ensure_on(current_path + "?view=grid") }
|
35
|
+
|
36
|
+
it 'shows the images with thumbnails', js: true do
|
37
|
+
expect(page).to have_selector(index_item_selector << gridview_img_selector, count: image_count)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'makes the title attribute of each image available', js: true do
|
41
|
+
expect(page).to have_selector(index_item_selector << gridview_img_selector << gridview_title_selector, count: image_count)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'makes the alt attribute of each image available', js: true do
|
45
|
+
expect(page).to have_selector(index_item_selector << gridview_img_selector << gridview_alt_selector, count: image_count)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'has an option to switch to list view' do
|
49
|
+
expect(page).to have_content(::I18n.t('switch_to', view_name: 'list', scope: 'refinery.admin.images.index.view'))
|
50
|
+
end
|
51
|
+
|
52
|
+
end # grid view
|
53
|
+
|
54
|
+
context "when in list view" do
|
55
|
+
|
56
|
+
before do
|
57
|
+
ensure_on(current_path + "?view=list")
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'makes the title attribute of each image available', js: true do
|
61
|
+
expect(page).to have_selector(index_item_selector << listview_title_selector, count: image_count)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'makes the filename of each image available' do
|
65
|
+
expect(page).to have_selector(index_item_selector << listview_filename_selector, count: image_count)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'has an option to switch to grid view' do
|
69
|
+
ensure_on(current_path + '?view=list')
|
70
|
+
|
71
|
+
expect(page).to have_content(::I18n.t('switch_to', view_name: 'grid', scope: 'refinery.admin.images.index.view'))
|
72
|
+
end
|
73
|
+
|
74
|
+
end # list view
|
75
|
+
end
|
76
|
+
|
77
|
+
shared_examples_for 'paginates the list of images' do
|
78
|
+
|
79
|
+
let(:image_count) {[Refinery::Image.count, Refinery::Images.pages_per_admin_index].min}
|
80
|
+
|
81
|
+
before do
|
82
|
+
raise "please set let(:initial_path)" if initial_path.blank?
|
83
|
+
ensure_on(initial_path)
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'pagination', unless: Refinery::Image.count <= 2 do
|
87
|
+
before {
|
88
|
+
Refinery::Images.pages_per_admin_index = 2
|
89
|
+
Refinery::Images.pages_per_dialog_that_have_size_options = 2 }
|
90
|
+
|
91
|
+
it 'divides the index into pages' do
|
92
|
+
expect(page).to have_selector("div.pagination em.current")
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'when on the first page' do
|
96
|
+
it 'shows a link for the next page' do
|
97
|
+
ensure_on(current_path + '?from_page=1&page=1')
|
98
|
+
expect(page).to have_selector("a.next_page[rel='next']")
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'has disabled the previous page link' do
|
102
|
+
expect(page).to have_selector('.previous_page.disabled')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'when on the last page' do
|
107
|
+
it 'shows a link for the previous page' do
|
108
|
+
ensure_on(current_path + '?from_page=1&page=2')
|
109
|
+
expect(page).to have_selector("a.previous_page[rel='prev start']")
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'has disabled the next link' do
|
113
|
+
expect(page).to have_selector('.next_page.disabled')
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end # pagination
|
118
|
+
end # image index
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
shared_examples 'inserts images' do
|
3
|
+
before do
|
4
|
+
raise "please set let(:initial_path)" if initial_path.blank?
|
5
|
+
ensure_on(initial_path)
|
6
|
+
end
|
7
|
+
|
8
|
+
def select_and_insert_image(title, size='medium')
|
9
|
+
page.within_frame(dialog_frame_id) do
|
10
|
+
within '#existing_image_area_content' do
|
11
|
+
find(:xpath, "//img[@alt=\"#{title}\"]").click
|
12
|
+
find(:xpath, "//a[@href=\"##{size}\"]").click
|
13
|
+
find(:xpath, '//input[@id="submit_button"]').click
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'resize the image' do
|
19
|
+
pending
|
20
|
+
# it 'inserts an image of the selected size', js: true do
|
21
|
+
# click_on('Add Image')
|
22
|
+
# select_and_insert_image('Beach','large')
|
23
|
+
# sleep 10
|
24
|
+
# puts page.html
|
25
|
+
# page.within_frame(find(:xpath, '//iframe[contains(@id,"WYMeditor")]')) do
|
26
|
+
# expect(page).to have_selector('img[title="Beach"][data-rel*="450x450"]')
|
27
|
+
# end
|
28
|
+
# end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when all images are available' do
|
32
|
+
pending
|
33
|
+
# it 'inserts the image into the page', js: true do
|
34
|
+
# click_on('Add Image')
|
35
|
+
# select_and_insert_image('Beach')
|
36
|
+
# expect(page).to have_image(url)
|
37
|
+
# end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when images are filtered by a search" do
|
41
|
+
pending
|
42
|
+
|
43
|
+
# before do
|
44
|
+
# fill_in "search", :with => "Beach"
|
45
|
+
# click_button "Search"
|
46
|
+
# end
|
47
|
+
# it 'inserts the image into the page', js: true do
|
48
|
+
# click_on('Add Image')
|
49
|
+
# select_and_insert_image('Beach')
|
50
|
+
# expect(page).to have_image(url)
|
51
|
+
# end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
def preview_image
|
2
|
+
preview_window = window_opened_by do
|
3
|
+
image_url
|
4
|
+
find(:linkhref, image_url).click
|
5
|
+
end
|
6
|
+
|
7
|
+
page.within_window preview_window do
|
8
|
+
expect(page).to have_image(image_url)
|
9
|
+
end
|
10
|
+
preview_window.close
|
11
|
+
end
|
12
|
+
|
13
|
+
shared_examples 'shows an image preview' do
|
14
|
+
before do
|
15
|
+
raise "please set let(:initial_path)" if initial_path.blank?
|
16
|
+
ensure_on(initial_path)
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:image_url) {first(:xpath, "//a[@class='preview_icon']")[:href]}
|
20
|
+
|
21
|
+
context "when in list view" do
|
22
|
+
before do
|
23
|
+
ensure_on(current_path + "?view=list")
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'displays the image in a new window', js: true do
|
27
|
+
preview_image()
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
context "when in grid view" do
|
33
|
+
before do
|
34
|
+
ensure_on(current_path + "?view=grid")
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'displays the image in a new window', js: true do
|
38
|
+
preview_image
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
shared_examples 'translates an image' do
|
2
|
+
before do
|
3
|
+
allow(Refinery::I18n).to receive(:frontend_locales).and_return([:en, :fr])
|
4
|
+
ensure_on(initial_path)
|
5
|
+
end
|
6
|
+
|
7
|
+
context "when in list view" do
|
8
|
+
before do
|
9
|
+
ensure_on(current_path + "?view=list")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "can have a second locale added to it" do
|
13
|
+
expect(page).to have_content("Beach")
|
14
|
+
expect(page).to have_selector("a[href='/refinery/images/#{image.id}/edit']")
|
15
|
+
|
16
|
+
click_link "Edit this image"
|
17
|
+
|
18
|
+
within "#switch_locale_picker" do
|
19
|
+
click_link "FR"
|
20
|
+
end
|
21
|
+
|
22
|
+
fill_in "Title", :with => "Titre de la première image"
|
23
|
+
fill_in "Alt", :with => "Texte alternatif de la première image"
|
24
|
+
|
25
|
+
click_button "Save"
|
26
|
+
|
27
|
+
expect(page).to have_content("'Titre de la première image' was successfully updated.")
|
28
|
+
expect(Refinery::Image.translation_class.count).to eq(1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
shared_examples 'uploads images' do
|
2
|
+
before do
|
3
|
+
raise "please set let(:initial_path)" if initial_path.blank?
|
4
|
+
ensure_on(initial_path)
|
5
|
+
initialize_context
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:uploading_an_image) {
|
9
|
+
->{
|
10
|
+
open_upload_dialog
|
11
|
+
page.within_frame(dialog_frame_id) do
|
12
|
+
select_upload
|
13
|
+
attach_file 'image_image', image_path
|
14
|
+
fill_in 'image_image_title', with: 'Image With Dashes'
|
15
|
+
fill_in 'image_image_alt', with: "Alt description for image"
|
16
|
+
click_button ::I18n.t('save', scope: 'refinery.admin.form_actions')
|
17
|
+
end
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
context 'when the image type is acceptable' do
|
22
|
+
let(:image_path) {Refinery.roots('refinery/images').join("spec/fixtures/image-with-dashes.jpg")}
|
23
|
+
it 'the image is uploaded', :js => true do
|
24
|
+
expect(uploading_an_image).to change(Refinery::Image, :count).by(1)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when the image type is not acceptable' do
|
29
|
+
let(:image_path) {Refinery.roots('refinery/images').join("spec/fixtures/cape-town-tide-table.pdf")}
|
30
|
+
it 'the image is rejected', :js => true do
|
31
|
+
expect(uploading_an_image).to_not change(Refinery::Image, :count)
|
32
|
+
page.within_frame(dialog_frame_id) do
|
33
|
+
expect(page).to have_content(::I18n.t('incorrect_format', :scope => 'activerecord.errors.models.refinery/image'))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Capybara
|
2
|
+
class Session
|
3
|
+
def has_image?(src)
|
4
|
+
has_xpath?("//img[contains(@src,'#{src}')]")
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
add_selector(:linkhref) do
|
9
|
+
xpath {|href| ".//a[@href='#{href}']"}
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def ensure_on(path)
|
14
|
+
visit(path) unless current_path == path
|
15
|
+
end
|
16
|
+
|
17
|
+
RSpec.configure do |c|
|
18
|
+
c.alias_it_should_behave_like_to :it_has_behaviour, 'has behaviour:'
|
19
|
+
end
|
data/test.html
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
|
3
|
+
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
|
4
|
+
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
|
5
|
+
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
|
6
|
+
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
|
7
|
+
<!--[if (gt IE 9)|!(IE)]><!-->
|
8
|
+
<html lang="en" class="no-js">
|
9
|
+
<!--<![endif]-->
|
10
|
+
|
11
|
+
<head>
|
12
|
+
<meta charset='utf-8' />
|
13
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
14
|
+
<meta refinerycms='3.0.0' />
|
15
|
+
<title>Company Name - Refinery</title>
|
16
|
+
|
17
|
+
<link rel="stylesheet" media="screen" href="/assets/refinery/refinery.css" />
|
18
|
+
<link rel="stylesheet" media="screen" href="/assets/wymeditor.css" />
|
19
|
+
<link rel="stylesheet" media="screen" href="/assets/wymeditor/skins/refinery/skin.css" />
|
20
|
+
|
21
|
+
<script type="text/javascript" >
|
22
|
+
var refinery = window.refinery || {};
|
23
|
+
refinery.current_admin_locale = 'en';
|
24
|
+
</script>
|
25
|
+
<script src="/assets/admin.js"></script><script src="/assets/refinery/refinery.js"></script><script src="/assets/refinery/application.js"></script>
|
26
|
+
<script src="/assets/refi
|
27
|
+
nery/wymeditor.js"></script>
|
28
|
+
<script src="/assets/wymeditor/lang/en.js"></script>
|
29
|
+
<script src="/assets/wymeditor/skins/refinery/skin.js"></script>
|
30
|
+
|
31
|
+
</head>
|
32
|
+
|
33
|
+
<body class="index en">
|
34
|
+
<div id='site_bar'>
|
35
|
+
<div id='site_bar_content' class='clearfix'>
|
36
|
+
|
37
|
+
<div id='editor_switch'>
|
38
|
+
<a data-no-turbolink="true" href="/">Switch to your website</a>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<a id="site_bar_refinery_cms_logo" target="_blank" href="http://refinerycms.com"> <span>Refinery CMS™</span> </a>
|
42
|
+
<div id='site_bar_branding'>
|
43
|
+
<span id='site_bar_company_name'> Company Name </span>
|
44
|
+
|
45
|
+
<a id="logout" href="/refinery/logout">Log out</a>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
|
50
|
+
<div id='tooltip_container'></div>
|
51
|
+
<div id="admin_container" class="clearfix">
|
52
|
+
<header id="header">
|
53
|
+
<nav id="menu">
|
54
|
+
<a id="plugin_refinery_users" href="/refinery/users">Users</a>
|
55
|
+
<a class="active" id="plugin_refinery_images" href="/refinery/images">Images</a>
|
56
|
+
<a id="plugin_refinery_files" href="/refinery/resources">Files</a>
|
57
|
+
<a id="plugin_refinery_pages" href="/refinery/pages">Pages</a>
|
58
|
+
|
59
|
+
<a id="menu_reorder" title="Reorder menu" class=" reorder_icon" href=""></a>
|
60
|
+
<a id="menu_reorder_done" title="i18n: Reorder Done" class=" reorder_done_icon hidden" href=""></a>
|
61
|
+
|
62
|
+
</nav>
|
63
|
+
|
64
|
+
</header>
|
65
|
+
<div id="page_container">
|
66
|
+
<div id="page">
|
67
|
+
<div id="content" class="clearfix">
|
68
|
+
<div id="flash_container">
|
69
|
+
<noscript>
|
70
|
+
<div class='flash flash_error'>
|
71
|
+
For full functionality of this page it is necessary to enable JavaScript.
|
72
|
+
Here are the
|
73
|
+
<a target="_blank" href="http://www.enable-javascript.com">instructions for how to enable JavaScript in your web browser</a>
|
74
|
+
</div>
|
75
|
+
</noscript>
|
76
|
+
|
77
|
+
</div>
|
78
|
+
<section id="records" class="images">
|
79
|
+
|
80
|
+
<div class="pagination_container">
|
81
|
+
|
82
|
+
<div class="clearfix pagination_frame frame_center">
|
83
|
+
<h3>March 04, 2015</h3>
|
84
|
+
<ul class='images_list'>
|
85
|
+
<li id="sortable_1" class="clearfix record on">
|
86
|
+
<span class="title"> Beach </span>
|
87
|
+
<span class='alt'> <a title="Title: Beach Alt text: Beach" class=" info_icon" href="#"></a> </span>
|
88
|
+
|
89
|
+
<span class="preview"> </span>
|
90
|
+
<span class="actions"> <a title="View this image <br/><em>Opens in a new window</em>" class=" preview_icon" target="_blank" href="/system/images/W1siZiIsIjIwMTUvMDMvMDQvNmhleWpqcDJvZF9iZWFjaC5q
|
91
|
+
cGVnIl1d/beach.jpeg?sha=9fd966feb5fd57e4"></a> <a title="Edit this image" class=" edit_icon" href="/refinery/images/1/edit"></a> <a data-confirm="Are you sure you want to remove 'Beach'?" title="Remove this image forever" class=" delete_icon cancel confirm-delete" rel="nofollow" data-method
|
92
|
+
="delete" href="/refinery/images/1"></a> </span>
|
93
|
+
</li>
|
94
|
+
|
95
|
+
</ul>
|
96
|
+
</div>
|
97
|
+
|
98
|
+
</div>
|
99
|
+
|
100
|
+
</section>
|
101
|
+
<section id="actions">
|
102
|
+
<ul>
|
103
|
+
<li>
|
104
|
+
<form method='GET' action='/refinery/images' class='search_form'>
|
105
|
+
<input id="search" type="search" name="search" title="Put here a string of at least 3 characters containing what you are looking for." />
|
106
|
+
|
107
|
+
<input type="submit" value="Search" />
|
108
|
+
</form>
|
109
|
+
|
110
|
+
</li>
|
111
|
+
<li>
|
112
|
+
<a title="Add new image" class=" add_icon" href="/refinery/images/new?dialog=true">Add new image</a>
|
113
|
+
</li>
|
114
|
+
<li>
|
115
|
+
<a title="Switch to grid view" class=" switch_view_grid_icon" href="/refinery/images?view=grid">Switch to grid view</a>
|
116
|
+
</li>
|
117
|
+
</ul>
|
118
|
+
|
119
|
+
</section>
|
120
|
+
|
121
|
+
</div>
|
122
|
+
</div>
|
123
|
+
</div>
|
124
|
+
</div>
|
125
|
+
</body>
|
126
|
+
</html>
|