spreefinery_themes 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/images/jstree/file.png +0 -0
- data/app/assets/images/jstree/folder.png +0 -0
- data/app/assets/javascripts/code_mirror_manager.coffee +105 -0
- data/app/assets/javascripts/editor.coffee +3 -0
- data/app/assets/javascripts/files_manager.coffee +41 -0
- data/app/assets/javascripts/jstree_manager.coffee +177 -0
- data/app/assets/javascripts/themes.coffee +21 -0
- data/app/assets/stylesheets/editor.css +40 -0
- data/app/assets/stylesheets/themes.css +50 -0
- data/app/controllers/refinery/themes/admin/editor_controller.rb +73 -0
- data/app/controllers/refinery/themes/admin/themes_controller.rb +60 -0
- data/app/controllers/refinery/themes/theme_controller.rb +12 -0
- data/app/decorators/action_view_decorator.rb +6 -0
- data/app/decorators/application_controller_decorator.rb +7 -0
- data/app/decorators/base_controller_decorator.rb +4 -0
- data/app/decorators/drops_decorator.rb +33 -0
- data/app/decorators/liquid_strainer_decorator.rb +23 -0
- data/app/decorators/refinery_admin_pages_controller_decorator.rb +6 -0
- data/app/decorators/refinery_pages_controller_decorator.rb +17 -0
- data/app/decorators/refinery_sessions_controller_decorator.rb +3 -0
- data/app/decorators/spree_base_controller_decorator.rb +3 -0
- data/app/decorators/spree_checkout_controller_decorator.rb +42 -0
- data/app/decorators/template_renderer_decorator.rb +25 -0
- data/app/helpers/refinery/themes/admin/themes_helper.rb +9 -0
- data/app/liquid/blocks/capture_variable.rb +36 -0
- data/app/liquid/blocks/content_for.rb +55 -0
- data/app/liquid/blocks/rss.rb +27 -0
- data/app/liquid/blocks/with_scope.rb +55 -0
- data/app/liquid/drops/address_drop.rb +5 -0
- data/app/liquid/drops/country_drop.rb +5 -0
- data/app/liquid/drops/form_builder_drop.rb +15 -0
- data/app/liquid/drops/image_drop.rb +5 -0
- data/app/liquid/drops/line_item_drop.rb +41 -0
- data/app/liquid/drops/menu_item_drop.rb +17 -0
- data/app/liquid/drops/option_type_drop.rb +5 -0
- data/app/liquid/drops/option_value_drop.rb +3 -0
- data/app/liquid/drops/order_drop.rb +19 -0
- data/app/liquid/drops/page_drop.rb +5 -0
- data/app/liquid/drops/page_part_drop.rb +18 -0
- data/app/liquid/drops/post_category_drop.rb +5 -0
- data/app/liquid/drops/post_comment_drop.rb +5 -0
- data/app/liquid/drops/post_drop.rb +21 -0
- data/app/liquid/drops/product_drop.rb +81 -0
- data/app/liquid/drops/product_property_drop.rb +5 -0
- data/app/liquid/drops/property_drop.rb +5 -0
- data/app/liquid/drops/role_drop.rb +5 -0
- data/app/liquid/drops/spree_money_drop.rb +10 -0
- data/app/liquid/drops/state_drop.rb +6 -0
- data/app/liquid/drops/taxon_drop.rb +24 -0
- data/app/liquid/drops/taxonomy_drop.rb +6 -0
- data/app/liquid/drops/user_drop.rb +22 -0
- data/app/liquid/drops/variant_drop.rb +24 -0
- data/app/liquid/filters/filters.rb +128 -0
- data/app/liquid/filters/protected.rb +28 -0
- data/app/liquid/filters/rails_filters.rb +73 -0
- data/app/liquid/tags/rails_tags.rb +63 -0
- data/app/liquid/tags/refinery_tags.rb +33 -0
- data/app/liquid/tags/spree_tags.rb +164 -0
- data/app/models/file_manager.rb +206 -0
- data/app/models/refinery/themes/theme.rb +79 -0
- data/app/views/refinery/admin/_dialog_success.html.erb +5 -0
- data/app/views/refinery/shared/_menu_branch.html.erb +30 -0
- data/app/views/refinery/shared/_pages_menu.html.erb +14 -0
- data/app/views/refinery/themes/admin/editor/_editor_actions.html.erb +9 -0
- data/app/views/refinery/themes/admin/editor/file.html.erb +50 -0
- data/app/views/refinery/themes/admin/editor/index.html.erb +15 -0
- data/app/views/refinery/themes/admin/editor/upload_file.html.erb +16 -0
- data/app/views/refinery/themes/admin/shared/_actions.html.erb +19 -0
- data/app/views/refinery/themes/admin/shared/_theme_assets.html.erb +6 -0
- data/app/views/refinery/themes/admin/themes/index.html.erb +58 -0
- data/app/views/refinery/themes/admin/themes/upload.html.erb +17 -0
- data/app/views/spree/products/_variants.html.erb +19 -0
- data/config/initializers/liquid_engine.rb +8 -0
- data/config/initializers/refinery/core.rb +4 -0
- data/config/initializers/refinery/pages.rb +9 -0
- data/config/locales/en.yml +14 -0
- data/config/routes.rb +42 -0
- data/lib/action_view/template/handlers/liquid.rb +88 -0
- data/lib/editable.rb +26 -0
- data/lib/hash.rb +5 -0
- data/lib/liquid/base_drop.rb +62 -0
- data/lib/spreefinery/engine.rb +46 -0
- data/lib/spreefinery_themes.rb +21 -0
- data/readme.md +27 -0
- metadata +178 -0
Binary file
|
Binary file
|
@@ -0,0 +1,105 @@
|
|
1
|
+
#= require codemirror/codemirror
|
2
|
+
#= require codemirror/util/simple-hint
|
3
|
+
#= require codemirror/util/dialog
|
4
|
+
#= require codemirror/util/searchcursor
|
5
|
+
#= require codemirror/util/search
|
6
|
+
#= require codemirror/util/javascript-hint
|
7
|
+
#= require codemirror/util/overlay
|
8
|
+
#= require codemirror/util/formatting
|
9
|
+
#= require codemirror/util/closetag
|
10
|
+
#= require codemirror/mode/css/css
|
11
|
+
#= require codemirror/mode/xml/xml
|
12
|
+
#= require codemirror/mode/liquid/liquid
|
13
|
+
#= require codemirror/mode/javascript/javascript
|
14
|
+
#= require codemirror/mode/yaml/yaml
|
15
|
+
#= require codemirror/mode/htmlmixed/htmlmixed
|
16
|
+
#= require codemirror/mode/htmlembedded/htmlembedded
|
17
|
+
# require codemirror/mode/scheme/scheme
|
18
|
+
|
19
|
+
#= require_self
|
20
|
+
|
21
|
+
class @CodeMirrorManager
|
22
|
+
constructor: (@text_area_id, @mode) ->
|
23
|
+
@editor = CodeMirror.fromTextArea(document.getElementById(@text_area_id),
|
24
|
+
lineNumbers: true
|
25
|
+
extraKeys:
|
26
|
+
F11: (cm) ->
|
27
|
+
setFullScreen cm, not isFullScreen(cm)
|
28
|
+
Esc: (cm) ->
|
29
|
+
setFullScreen cm, false if isFullScreen(cm)
|
30
|
+
"Ctrl-Space": "autocomplete"
|
31
|
+
mode: @mode
|
32
|
+
tabMode: "indent"
|
33
|
+
autoCloseTags: true
|
34
|
+
)
|
35
|
+
#@editor.on "change", =>
|
36
|
+
#$('#file_content').val(CodeMirrorManager.editor.getValue())
|
37
|
+
#clearTimeout delay
|
38
|
+
#delay = setTimeout(@updatePreview, 300)
|
39
|
+
|
40
|
+
#setTimeout @updatePreview, 300
|
41
|
+
|
42
|
+
CodeMirror.commands.autocomplete = (cm) ->
|
43
|
+
CodeMirror.simpleHint cm, CodeMirror.javascriptHint
|
44
|
+
|
45
|
+
CodeMirror.on window, "resize", ->
|
46
|
+
showing = document.body.getElementsByClassName("CodeMirror-fullscreen")[0]
|
47
|
+
return unless showing
|
48
|
+
showing.CodeMirror.getWrapperElement().style.height = winHeight() + "px"
|
49
|
+
|
50
|
+
CodeMirrorManager.editor = @editor
|
51
|
+
|
52
|
+
|
53
|
+
#TODO auto-detect the language
|
54
|
+
# function looksLikeScheme(code) {
|
55
|
+
# return !/^\s*\(\s*function\b/.test(code) && /^\s*[;\(]/.test(code);
|
56
|
+
# }
|
57
|
+
updatePreview: =>
|
58
|
+
#TODO auto-detect the language
|
59
|
+
# @editor.setOption("mode", looksLikeScheme(@editor.getValue()) ? "scheme" : "javascript");
|
60
|
+
previewFrame = document.getElementById('preview')
|
61
|
+
preview = previewFrame.contentDocument or previewFrame.contentWindow.document
|
62
|
+
preview.open()
|
63
|
+
preview.write @editor.getValue()
|
64
|
+
preview.close()
|
65
|
+
|
66
|
+
@selectTheme: ->
|
67
|
+
input = document.getElementById('select')
|
68
|
+
theme = input.options[input.selectedIndex].innerHTML
|
69
|
+
@editor.setOption "theme", theme
|
70
|
+
choice = document.location.search and decodeURIComponent(document.location.search.slice(1))
|
71
|
+
if choice
|
72
|
+
input.value = choice
|
73
|
+
@editor.setOption "theme", choice
|
74
|
+
|
75
|
+
@getSelectedRange: ->
|
76
|
+
from: @editor.getCursor(true)
|
77
|
+
to: @editor.getCursor(false)
|
78
|
+
|
79
|
+
@autoFormatSelection: ->
|
80
|
+
range = @getSelectedRange()
|
81
|
+
@editor.autoFormatRange range.from, range.to
|
82
|
+
|
83
|
+
@commentSelection: (isComment) ->
|
84
|
+
range = @getSelectedRange()
|
85
|
+
@editor.commentRange isComment, range.from, range.to
|
86
|
+
|
87
|
+
isFullScreen: (cm) ->
|
88
|
+
/\bCodeMirror-fullscreen\b/.test cm.getWrapperElement().className
|
89
|
+
|
90
|
+
winHeight: ->
|
91
|
+
window.innerHeight or (document.documentElement or document.body).clientHeight
|
92
|
+
|
93
|
+
@setFullScreen: (cm, full) ->
|
94
|
+
wrap = cm.getWrapperElement()
|
95
|
+
if full
|
96
|
+
wrap.className += " CodeMirror-fullscreen"
|
97
|
+
wrap.style.height = winHeight() + "px"
|
98
|
+
document.documentElement.style.overflow = "hidden"
|
99
|
+
else
|
100
|
+
wrap.className = wrap.className.replace(" CodeMirror-fullscreen", "")
|
101
|
+
wrap.style.height = ""
|
102
|
+
document.documentElement.style.overflow = ""
|
103
|
+
cm.refresh()
|
104
|
+
|
105
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class @FilesManager
|
2
|
+
constructor: ->
|
3
|
+
$(".mmenu input").click ->
|
4
|
+
switch @id
|
5
|
+
when "add_default", "add_folder"
|
6
|
+
$("#jsTree").jstree "create", null, "last",
|
7
|
+
attr:
|
8
|
+
rel: @id.toString().replace("add_", "")
|
9
|
+
when "search"
|
10
|
+
$("#jsTree").jstree "search", document.getElementById("text").value
|
11
|
+
when "refresh"
|
12
|
+
$("#code").html('')
|
13
|
+
$('#jsTree').jstree('refresh',-1);
|
14
|
+
else
|
15
|
+
$("#jsTree").jstree @id
|
16
|
+
|
17
|
+
@initHandlers = ->
|
18
|
+
$("#file_submit").click ->
|
19
|
+
$("#form_for_file").submit()
|
20
|
+
|
21
|
+
$("#form_for_file").submit ->
|
22
|
+
$('#file_content').val(CodeMirrorManager.editor.getValue())
|
23
|
+
FilesManager.saveFile()
|
24
|
+
false
|
25
|
+
|
26
|
+
|
27
|
+
@saveFile = ->
|
28
|
+
$.ajax
|
29
|
+
url: "/refinery/themes/editor/save_file"
|
30
|
+
type: "POST"
|
31
|
+
beforeSend: (request) ->
|
32
|
+
$("#spinner").show()
|
33
|
+
$("#file_submit").hide()
|
34
|
+
|
35
|
+
data: $.param($("#form_for_file").serializeArray())
|
36
|
+
dataType: "html"
|
37
|
+
success: (D) ->
|
38
|
+
$("#code").html(D)
|
39
|
+
FilesManager.initHandlers()
|
40
|
+
$.jGrowl "File successfully saved!",
|
41
|
+
life: 5000
|
@@ -0,0 +1,177 @@
|
|
1
|
+
#= require jstree/jquery.jstree
|
2
|
+
|
3
|
+
class @JstreeManager
|
4
|
+
constructor: ->
|
5
|
+
@tree = $("#jsTree")
|
6
|
+
@buildTree()
|
7
|
+
@tree
|
8
|
+
|
9
|
+
uploadFile = (obj) ->
|
10
|
+
iframe = $("<iframe id='dialog_iframe' frameborder='0' marginheight='0' marginwidth='0' border='0'></iframe>")
|
11
|
+
iframe.corner "8px" unless $.browser.msie
|
12
|
+
iframe.dialog
|
13
|
+
title: "Upload New File"
|
14
|
+
modal: true
|
15
|
+
resizable: false
|
16
|
+
autoOpen: true
|
17
|
+
open: onOpenDialog
|
18
|
+
close: onCloseDialog
|
19
|
+
iframe.attr "src", "/refinery/themes/editor/upload_file?app_dialog=true&dialog=true&path="+obj.attr("fullpath")
|
20
|
+
|
21
|
+
buildTree: ->
|
22
|
+
@tree.jstree(
|
23
|
+
plugins: ["themes", "json_data", "ui", "crrm", "cookies", "dnd", "search", "types", "contextmenu"]
|
24
|
+
contextmenu:
|
25
|
+
items:
|
26
|
+
upload:
|
27
|
+
label: "Upload File"
|
28
|
+
action: (obj) -> uploadFile obj
|
29
|
+
_class: "upload_file"
|
30
|
+
create:
|
31
|
+
separator_before: false
|
32
|
+
separator_after: true
|
33
|
+
label: "Create"
|
34
|
+
action: false
|
35
|
+
submenu:
|
36
|
+
create_file:
|
37
|
+
seperator_before: false
|
38
|
+
seperator_after: false
|
39
|
+
label: "File"
|
40
|
+
action: (obj) -> this.create(obj, "last", {"attr" : {"rel" : "default"}})
|
41
|
+
create_folder:
|
42
|
+
seperator_before: false
|
43
|
+
seperator_after: false
|
44
|
+
label: "Folder"
|
45
|
+
action: (obj) -> this.create(obj, "last", {"attr" : { "rel" : "folder"}})
|
46
|
+
themes:
|
47
|
+
url: "/assets/jstree/themes/apple/style.css"
|
48
|
+
json_data:
|
49
|
+
ajax:
|
50
|
+
url: "/refinery/themes/editor/list"
|
51
|
+
type: "POST"
|
52
|
+
data: (n) ->
|
53
|
+
fullpath: (if n.attr then n.attr("fullpath") else "")
|
54
|
+
search:
|
55
|
+
ajax:
|
56
|
+
url: "/refinery/themes/editor/search"
|
57
|
+
data: (str) ->
|
58
|
+
search_str: str
|
59
|
+
types:
|
60
|
+
max_depth: -2
|
61
|
+
max_children: -2
|
62
|
+
valid_children: ["drive"]
|
63
|
+
types:
|
64
|
+
default:
|
65
|
+
valid_children: "none"
|
66
|
+
icon:
|
67
|
+
image: "/assets/jstree/file.png"
|
68
|
+
folder:
|
69
|
+
valid_children: ["default", "folder"]
|
70
|
+
icon:
|
71
|
+
image: "/assets/jstree/folder.png"
|
72
|
+
drive:
|
73
|
+
valid_children: ["default", "folder"]
|
74
|
+
icon:
|
75
|
+
image: "/assets/jstree/root.png"
|
76
|
+
start_drag: false
|
77
|
+
move_node: false
|
78
|
+
delete_node: false
|
79
|
+
remove: false
|
80
|
+
).bind("select_node.jstree", (e, data) ->
|
81
|
+
if data.rslt.obj.attr("rel") is "default"
|
82
|
+
$.ajax
|
83
|
+
async: false
|
84
|
+
type: "POST"
|
85
|
+
url: "/refinery/themes/editor/file"
|
86
|
+
beforeSend: (request) ->
|
87
|
+
return true
|
88
|
+
data:
|
89
|
+
fullpath: data.rslt.obj.attr("fullpath")
|
90
|
+
success: (result) ->
|
91
|
+
if result
|
92
|
+
$("#code").html result
|
93
|
+
FilesManager.initHandlers()
|
94
|
+
$.jGrowl data.rslt.obj.attr("fullpath") + " was loaded.",
|
95
|
+
life: 5000
|
96
|
+
else
|
97
|
+
$.jGrowl result.notice,
|
98
|
+
life: 5000
|
99
|
+
|
100
|
+
).bind("create.jstree", (e, data) ->
|
101
|
+
$.post "/refinery/themes/editor/add",
|
102
|
+
fullpath: data.rslt.parent.attr("fullpath")
|
103
|
+
title: data.rslt.name
|
104
|
+
type: data.rslt.obj.attr("rel"),
|
105
|
+
(result) ->
|
106
|
+
if result.status
|
107
|
+
$(data.rslt.obj).attr "fullpath", result.fullpath
|
108
|
+
$("#jsTree").jstree "rename_node", $(data.rslt.obj), result.node_name
|
109
|
+
$.jGrowl result.notice,
|
110
|
+
life: 5000
|
111
|
+
else
|
112
|
+
$.jstree.rollback data.rlbk
|
113
|
+
$.jGrowl result.notice,
|
114
|
+
life: 5000
|
115
|
+
|
116
|
+
).bind("remove.jstree", (e, data) ->
|
117
|
+
if (confirm("Are you sure?"))
|
118
|
+
$.ajax
|
119
|
+
async: false
|
120
|
+
type: "POST"
|
121
|
+
url: "/refinery/themes/editor/delete"
|
122
|
+
data:
|
123
|
+
fullpath: data.rslt.obj.attr("fullpath")
|
124
|
+
type: data.rslt.obj.attr("rel")
|
125
|
+
|
126
|
+
success: (result) ->
|
127
|
+
if result.status
|
128
|
+
data.inst.refresh()
|
129
|
+
$.jGrowl result.notice,
|
130
|
+
life: 5000
|
131
|
+
else
|
132
|
+
$.jstree.rollback data.rlbk
|
133
|
+
$.jGrowl result.notice,
|
134
|
+
life: 5000
|
135
|
+
else
|
136
|
+
$.jstree.rollback data.rlbk
|
137
|
+
|
138
|
+
).bind("rename.jstree", (e, data) ->
|
139
|
+
$.ajax
|
140
|
+
async: true
|
141
|
+
type: "POST"
|
142
|
+
url: "/refinery/themes/editor/rename"
|
143
|
+
data:
|
144
|
+
fullpath: data.rslt.obj.attr("fullpath")
|
145
|
+
new_name: data.rslt.new_name
|
146
|
+
type: data.rslt.obj.attr("rel")
|
147
|
+
|
148
|
+
success: (result) ->
|
149
|
+
if result.status
|
150
|
+
$(data.rslt.obj).attr "fullpath", result.fullpath
|
151
|
+
$("#jsTree").jstree "rename_node", $(data.rslt.obj), result.node_name
|
152
|
+
$.jGrowl result.notice,
|
153
|
+
life: 5000
|
154
|
+
|
155
|
+
else
|
156
|
+
$.jstree.rollback data.rlbk
|
157
|
+
$.jGrowl result.notice,
|
158
|
+
life: 5000
|
159
|
+
|
160
|
+
).bind "move_node.jstree", (e, data) ->
|
161
|
+
data.rslt.o.each (i) ->
|
162
|
+
$.ajax
|
163
|
+
async: false
|
164
|
+
type: "POST"
|
165
|
+
url: "/refinery/themes/editor/move"
|
166
|
+
data:
|
167
|
+
fullpath: $(this).attr("fullpath")
|
168
|
+
ref: data.rslt.np.attr("fullpath")
|
169
|
+
title: data.rslt.name
|
170
|
+
copy: (if data.rslt.cy then 1 else 0)
|
171
|
+
|
172
|
+
success: (result) ->
|
173
|
+
unless result.status
|
174
|
+
$.jstree.rollback data.rlbk
|
175
|
+
else
|
176
|
+
$(data.rslt.oc).attr "fullpath", "node_" + result.fullpath
|
177
|
+
data.inst.refresh data.inst._get_parent(data.rslt.oc) if data.rslt.cy and $(data.rslt.oc).children("UL").length
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#= require jquery.cookie
|
2
|
+
# require jquery.hotkeys
|
3
|
+
#= require jquery.jgrowl_minimized
|
4
|
+
#= require fancybox/jquery.fancybox
|
5
|
+
#= require jstree_manager
|
6
|
+
#= require files_manager
|
7
|
+
#= require code_mirror_manager
|
8
|
+
#= require_self
|
9
|
+
|
10
|
+
class @Themes
|
11
|
+
@resetToDefaultTheme = (url) ->
|
12
|
+
if (confirm("Are you sure?"))
|
13
|
+
window.location = url
|
14
|
+
|
15
|
+
$ ->
|
16
|
+
$(".fancybox").fancybox
|
17
|
+
openEffect: "elastic"
|
18
|
+
closeEffect: "elastic"
|
19
|
+
helpers:
|
20
|
+
title:
|
21
|
+
type: "inside"
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#jsTree li a {
|
2
|
+
background: none;
|
3
|
+
border: none;
|
4
|
+
display: inline;
|
5
|
+
padding: 0;
|
6
|
+
}
|
7
|
+
|
8
|
+
#jsTree li {
|
9
|
+
margin-top: 0;
|
10
|
+
}
|
11
|
+
|
12
|
+
#jsTree ul {
|
13
|
+
margin: 0;
|
14
|
+
padding: 0;
|
15
|
+
}
|
16
|
+
|
17
|
+
iframe#preview {
|
18
|
+
width: 100%;
|
19
|
+
margin-top: 20px;
|
20
|
+
height: 400px;
|
21
|
+
}
|
22
|
+
|
23
|
+
.cm-liquid-tag {
|
24
|
+
color: #32273f;
|
25
|
+
background: #ead9ff;
|
26
|
+
}
|
27
|
+
|
28
|
+
.cm-liquid-variable {
|
29
|
+
color: #29739b;
|
30
|
+
background: #c2e0f0;
|
31
|
+
}
|
32
|
+
|
33
|
+
.CodeMirror-fullscreen {
|
34
|
+
display: block;
|
35
|
+
position: absolute;
|
36
|
+
top: 0;
|
37
|
+
left: 0;
|
38
|
+
width: 100%;
|
39
|
+
z-index: 9999;
|
40
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/*
|
2
|
+
*= require fancybox/jquery.fancybox
|
3
|
+
*= require jquery.jgrowl
|
4
|
+
*= require codemirror/codemirror
|
5
|
+
*= require codemirror/util/simple-hint
|
6
|
+
*= require codemirror/util/dialog.css
|
7
|
+
*= require codemirror/theme/neat
|
8
|
+
*= require codemirror/theme/elegant
|
9
|
+
*= require codemirror/theme/erlang-dark
|
10
|
+
*= require codemirror/theme/night
|
11
|
+
*= require codemirror/theme/monokai
|
12
|
+
*= require codemirror/theme/cobalt
|
13
|
+
*= require codemirror/theme/eclipse
|
14
|
+
*= require codemirror/theme/rubyblue
|
15
|
+
*= require codemirror/theme/lesser-dark
|
16
|
+
*= require codemirror/theme/xq-dark
|
17
|
+
*= require codemirror/theme/ambiance
|
18
|
+
*= require codemirror/theme/blackboard
|
19
|
+
*= require codemirror/theme/vibrant-ink
|
20
|
+
*= require codemirror/theme/solarized
|
21
|
+
*= require codemirror/theme/twilight
|
22
|
+
*= require_self
|
23
|
+
*/
|
24
|
+
|
25
|
+
#records table tr td {
|
26
|
+
padding-top: 20px;
|
27
|
+
}
|
28
|
+
|
29
|
+
a.fancybox {
|
30
|
+
text-align: center;
|
31
|
+
border-bottom: none !important;
|
32
|
+
}
|
33
|
+
|
34
|
+
a.fancybox-close {
|
35
|
+
border-bottom: none !important;
|
36
|
+
}
|
37
|
+
|
38
|
+
.screenshot {
|
39
|
+
width: 100%;
|
40
|
+
}
|
41
|
+
|
42
|
+
.fullwidth {
|
43
|
+
width: 98%;
|
44
|
+
}
|
45
|
+
|
46
|
+
.theme-info {
|
47
|
+
display: inline-block;
|
48
|
+
vertical-align: top;
|
49
|
+
padding-left: 20px;
|
50
|
+
}
|