refactoring (rename modules, clean code, remove useless files, ...etc) + improve the inline editor module (locale picker + better ui workflow)
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 492 B |
BIN
app/assets/images/locomotive/inline_editor/back.png
Normal file
After Width: | Height: | Size: 780 B |
Before Width: | Height: | Size: 235 B |
Before Width: | Height: | Size: 525 B |
@ -23,10 +23,12 @@
|
|||||||
return this.replace(/\s/g, sep).replace(alphaNumRegexp, '').replace(avoidDuplicateRegexp, sep).toLowerCase()
|
return this.replace(/\s/g, sep).replace(alphaNumRegexp, '').replace(avoidDuplicateRegexp, sep).toLowerCase()
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addParameterToURL = function(key, value) { // code from http://stackoverflow.com/questions/486896/adding-a-parameter-to-the-url-with-javascript
|
window.addParameterToURL = function(key, value, context) { // code from http://stackoverflow.com/questions/486896/adding-a-parameter-to-the-url-with-javascript
|
||||||
|
if (typeof context == 'undefined') context = document;
|
||||||
|
|
||||||
key = encodeURIComponent(key); value = encodeURIComponent(value);
|
key = encodeURIComponent(key); value = encodeURIComponent(value);
|
||||||
|
|
||||||
var kvp = document.location.search.substr(1).split('&');
|
var kvp = context.location.search.substr(1).split('&');
|
||||||
|
|
||||||
var i = kvp.length; var x; while(i--) {
|
var i = kvp.length; var x; while(i--) {
|
||||||
x = kvp[i].split('=');
|
x = kvp[i].split('=');
|
||||||
@ -41,7 +43,7 @@
|
|||||||
if (i < 0) { kvp[kvp.length] = [key,value].join('='); }
|
if (i < 0) { kvp[kvp.length] = [key,value].join('='); }
|
||||||
|
|
||||||
//this will reload the page, it's likely better to store this until finished
|
//this will reload the page, it's likely better to store this until finished
|
||||||
document.location.search = kvp.join('&');
|
context.location.search = kvp.join('&');
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addJavascript = function(doc, src, options) {
|
window.addJavascript = function(doc, src, options) {
|
||||||
|
@ -11,59 +11,24 @@ class Locomotive.Views.InlinEditor.ApplicationView extends Backbone.View
|
|||||||
|
|
||||||
@iframe = @$('#page iframe')
|
@iframe = @$('#page iframe')
|
||||||
|
|
||||||
|
_.bindAll(@, '_$')
|
||||||
|
|
||||||
@toolbar_view = new Locomotive.Views.InlinEditor.ToolbarView(target: @iframe)
|
@toolbar_view = new Locomotive.Views.InlinEditor.ToolbarView(target: @iframe)
|
||||||
|
|
||||||
render: ->
|
render: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
@decorate_iframe()
|
@enable_iframe_autoheight()
|
||||||
|
|
||||||
set_page: (attributes) ->
|
@toolbar_view.render()
|
||||||
@page = new Locomotive.Models.Page(attributes)
|
|
||||||
|
|
||||||
window.foo = @page
|
enable_iframe_autoheight: ->
|
||||||
|
|
||||||
@toolbar_view.model = @page
|
|
||||||
|
|
||||||
if @$('#toolbar .inner .toolbar-view').size() == 0
|
|
||||||
@$('#toolbar .inner').html(@toolbar_view.render().el) # first time we render it
|
|
||||||
else
|
|
||||||
@toolbar_view.refresh()
|
|
||||||
|
|
||||||
decorate_iframe: ->
|
|
||||||
iframe = @iframe
|
iframe = @iframe
|
||||||
|
|
||||||
iframe.load =>
|
iframe.load =>
|
||||||
# add js / css
|
console.log('iframe loading')
|
||||||
doc = iframe[0].contentWindow.document
|
|
||||||
window.addStylesheet doc, '/assets/locomotive/aloha/css/aloha.css'
|
|
||||||
window.addJavascript doc, '/assets/locomotive/utils/aloha_settings.js'
|
|
||||||
window.addJavascript doc, '/assets/locomotive/aloha/lib/aloha.js',
|
|
||||||
'data-aloha-plugins': 'common/format,common/highlighteditables,common/list,common/link,common/undo,common/paste'
|
|
||||||
onload: =>
|
|
||||||
console.log('loading target iframe')
|
|
||||||
|
|
||||||
# wake up the toolbar
|
|
||||||
@toolbar_view.enable()
|
|
||||||
|
|
||||||
# keep the user in the admin mode
|
|
||||||
_$ = iframe[0].contentWindow.Aloha.jQuery
|
|
||||||
_$('a').each ->
|
|
||||||
link = _$(this)
|
|
||||||
url = link.attr('href')
|
|
||||||
if url != '#' && /^(www|http)/.exec(url) == null && /(\/_edit)$/.exec(url) == null
|
|
||||||
url = '/index' if url == '/'
|
|
||||||
if url.indexOf('?') > 0
|
|
||||||
link.attr('href', url.replace('?', '/_edit?'))
|
|
||||||
else
|
|
||||||
link.attr('href', "#{url}/_edit")
|
|
||||||
|
|
||||||
link.bind 'click', ->
|
|
||||||
window.history.pushState('Object', 'Title', link.attr('href').replace('_edit', '_admin'))
|
|
||||||
|
|
||||||
# notify the toolbar about changes
|
|
||||||
iframe[0].contentWindow.Aloha.bind 'aloha-editable-deactivated', (event, editable) =>
|
|
||||||
@toolbar_view.notify editable.editable
|
|
||||||
|
|
||||||
|
if @_$('meta[name=inline-editor]').size() > 0
|
||||||
# bind the resize event. When the iFrame's size changes, update its height
|
# bind the resize event. When the iFrame's size changes, update its height
|
||||||
iframe_content = iframe.contents().find('body')
|
iframe_content = iframe.contents().find('body')
|
||||||
iframe_content.resize ->
|
iframe_content.resize ->
|
||||||
@ -74,3 +39,56 @@ class Locomotive.Views.InlinEditor.ApplicationView extends Backbone.View
|
|||||||
|
|
||||||
# Resize the iFrame immediately.
|
# Resize the iFrame immediately.
|
||||||
iframe_content.resize()
|
iframe_content.resize()
|
||||||
|
else
|
||||||
|
@toolbar_view.show_status('disabled', true).hide_editing_mode_block()
|
||||||
|
|
||||||
|
# keep the user in the admin mode
|
||||||
|
@enhance_iframe_links()
|
||||||
|
|
||||||
|
set_page: (attributes) ->
|
||||||
|
console.log('set_page')
|
||||||
|
|
||||||
|
@page = new Locomotive.Models.Page(attributes)
|
||||||
|
|
||||||
|
@toolbar_view.model = @page
|
||||||
|
|
||||||
|
@enhance_iframe()
|
||||||
|
|
||||||
|
@toolbar_view.refresh()
|
||||||
|
|
||||||
|
enhance_iframe: ->
|
||||||
|
_window = @iframe[0].contentWindow
|
||||||
|
_window.Aloha.settings.locale = window.locale
|
||||||
|
|
||||||
|
# set main window title
|
||||||
|
window.document.title = _window.document.title
|
||||||
|
|
||||||
|
# keep the user in the admin mode
|
||||||
|
@enhance_iframe_links _window.Aloha.jQuery
|
||||||
|
|
||||||
|
# notify the toolbar about changes
|
||||||
|
_window.Aloha.bind 'aloha-editable-deactivated', (event, editable) =>
|
||||||
|
@toolbar_view.notify editable.editable
|
||||||
|
|
||||||
|
enhance_iframe_links: (_jQuery) ->
|
||||||
|
|
||||||
|
toolbar_view = @toolbar_view
|
||||||
|
_jQuery ||= @_$
|
||||||
|
|
||||||
|
_jQuery('a').each ->
|
||||||
|
link = _jQuery(this)
|
||||||
|
url = link.attr('href')
|
||||||
|
if url? && url != '#' && /^(www|http)/.exec(url) == null && /(\/_edit)$/.exec(url) == null
|
||||||
|
url = '/index' if url == '/'
|
||||||
|
if url.indexOf('?') > 0
|
||||||
|
link.attr('href', url.replace('?', '/_edit?'))
|
||||||
|
else
|
||||||
|
link.attr('href', "#{url}/_edit")
|
||||||
|
|
||||||
|
link.bind 'click', ->
|
||||||
|
toolbar_view.show_status 'loading'
|
||||||
|
window.history.pushState('Object', 'Title', link.attr('href').replace('_edit', '_admin'))
|
||||||
|
|
||||||
|
_$: (selector) ->
|
||||||
|
$(selector, @iframe[0].contentWindow.document)
|
||||||
|
|
||||||
|
@ -2,25 +2,23 @@ Locomotive.Views.InlinEditor ||= {}
|
|||||||
|
|
||||||
class Locomotive.Views.InlinEditor.ToolbarView extends Backbone.View
|
class Locomotive.Views.InlinEditor.ToolbarView extends Backbone.View
|
||||||
|
|
||||||
tagName: 'div'
|
el: '#toolbar .inner'
|
||||||
|
|
||||||
className: 'toolbar-view'
|
|
||||||
|
|
||||||
events:
|
events:
|
||||||
'change .editing-mode input[type=checkbox]': 'toggle_editing_mode'
|
'change .editing-mode input[type=checkbox]': 'toggle_editing_mode'
|
||||||
'click .back a': 'back'
|
'click .back a': 'back'
|
||||||
'click .element-actions a.save': 'save_modifications'
|
'click .element-actions a.save': 'save_changes'
|
||||||
'click .element-actions a.cancel': 'cancel_modifications'
|
'click .element-actions a.cancel': 'cancel_changes'
|
||||||
|
|
||||||
initialize: ->
|
|
||||||
super
|
|
||||||
|
|
||||||
render: ->
|
render: ->
|
||||||
super
|
super
|
||||||
$(@el).html(ich.toolbar(@model.toJSON()))
|
|
||||||
|
console.log('render toolbar')
|
||||||
|
|
||||||
@enable_editing_mode_checkbox()
|
@enable_editing_mode_checkbox()
|
||||||
|
|
||||||
|
@enable_content_locale_picker()
|
||||||
|
|
||||||
@
|
@
|
||||||
|
|
||||||
notify: (aloha_editable) ->
|
notify: (aloha_editable) ->
|
||||||
@ -34,7 +32,19 @@ class Locomotive.Views.InlinEditor.ToolbarView extends Backbone.View
|
|||||||
|
|
||||||
@$('.element-actions').show()
|
@$('.element-actions').show()
|
||||||
|
|
||||||
save_modifications: (event) ->
|
@hide_editing_mode_block()
|
||||||
|
|
||||||
|
show_status: (status, growl) ->
|
||||||
|
growl ||= false
|
||||||
|
|
||||||
|
message = @$('h1').attr("data-#{status}-status")
|
||||||
|
@$('h1').html(message).removeClass().addClass(status)
|
||||||
|
|
||||||
|
$.growl('error', message) if growl
|
||||||
|
|
||||||
|
@
|
||||||
|
|
||||||
|
save_changes: (event) ->
|
||||||
event.stopPropagation() & event.preventDefault()
|
event.stopPropagation() & event.preventDefault()
|
||||||
|
|
||||||
previous_attributes = _.clone @model.attributes
|
previous_attributes = _.clone @model.attributes
|
||||||
@ -43,10 +53,11 @@ class Locomotive.Views.InlinEditor.ToolbarView extends Backbone.View
|
|||||||
success: (model, response, xhr) =>
|
success: (model, response, xhr) =>
|
||||||
model.attributes = previous_attributes
|
model.attributes = previous_attributes
|
||||||
@$('.element-actions').hide()
|
@$('.element-actions').hide()
|
||||||
|
@show_editing_mode_block()
|
||||||
error: (model, xhr) =>
|
error: (model, xhr) =>
|
||||||
@$('.element-actions').hide()
|
@$('.element-actions').hide()
|
||||||
|
|
||||||
cancel_modifications: (event) ->
|
cancel_changes: (event) ->
|
||||||
event.stopPropagation() & event.preventDefault()
|
event.stopPropagation() & event.preventDefault()
|
||||||
@options.target[0].contentWindow.location.href = @options.target[0].contentWindow.location.href
|
@options.target[0].contentWindow.location.href = @options.target[0].contentWindow.location.href
|
||||||
|
|
||||||
@ -54,10 +65,12 @@ class Locomotive.Views.InlinEditor.ToolbarView extends Backbone.View
|
|||||||
event.stopPropagation() & event.preventDefault()
|
event.stopPropagation() & event.preventDefault()
|
||||||
window.location.href = @model.get('edit_url')
|
window.location.href = @model.get('edit_url')
|
||||||
|
|
||||||
enable: ->
|
show_editing_mode_block: ->
|
||||||
@options.target[0].contentWindow.Aloha.settings.locale = window.locale;
|
|
||||||
@$('.editing-mode').show()
|
@$('.editing-mode').show()
|
||||||
|
|
||||||
|
hide_editing_mode_block: ->
|
||||||
|
@$('.editing-mode').hide()
|
||||||
|
|
||||||
toggle_editing_mode: (event) ->
|
toggle_editing_mode: (event) ->
|
||||||
return if @editable_elements() == null
|
return if @editable_elements() == null
|
||||||
|
|
||||||
@ -77,16 +90,43 @@ class Locomotive.Views.InlinEditor.ToolbarView extends Backbone.View
|
|||||||
on_label_color: '#fff'
|
on_label_color: '#fff'
|
||||||
off_label_color: '#bbb'
|
off_label_color: '#bbb'
|
||||||
|
|
||||||
|
enable_content_locale_picker: ->
|
||||||
|
_window = @options.target[0].contentWindow
|
||||||
|
link = @$('#content-locale-picker-link')
|
||||||
|
picker = $('#content-locale-picker')
|
||||||
|
|
||||||
|
return if picker.size() == 0
|
||||||
|
|
||||||
|
link.bind 'click', (event) ->
|
||||||
|
event.stopPropagation() & event.preventDefault()
|
||||||
|
picker.toggle()
|
||||||
|
|
||||||
|
picker.find('li').bind 'click', (event) =>
|
||||||
|
current = @get_locale_attributes(link)
|
||||||
|
selected = @get_locale_attributes($(event.target).closest('li'))
|
||||||
|
|
||||||
|
@set_locale_attributes(link, selected)
|
||||||
|
@set_locale_attributes($(event.target).closest('li'), current)
|
||||||
|
|
||||||
|
picker.toggle()
|
||||||
|
|
||||||
|
window.addParameterToURL 'content_locale', selected[1], _window.document
|
||||||
|
|
||||||
|
get_locale_attributes: (context) ->
|
||||||
|
[context.find('img').attr('src'), context.find('span.text').html()]
|
||||||
|
|
||||||
|
set_locale_attributes: (context, values) ->
|
||||||
|
context.find('img').attr('src', values[0])
|
||||||
|
context.find('span.text').html(values[1])
|
||||||
|
|
||||||
refresh: ->
|
refresh: ->
|
||||||
console.log('refreshing toolbar...')
|
console.log('refreshing toolbar...')
|
||||||
|
|
||||||
@$('h1').html(@model.get('title'))
|
@$('h1').html(@model.get('title')).removeClass()
|
||||||
|
|
||||||
if @$('.editing-mode input[type=checkbox]').is(':checked')
|
if @$('.editing-mode input[type=checkbox]').is(':checked')
|
||||||
@$('.editing-mode div.switchArea').trigger('click')
|
@$('.editing-mode div.switchArea').trigger('click')
|
||||||
|
|
||||||
@$('.element-actions').hide()
|
@$('.element-actions').hide()
|
||||||
|
|
||||||
|
@show_editing_mode_block()
|
||||||
remove: ->
|
|
||||||
super
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
@import "compass/css3/images";
|
@import "compass/css3/images";
|
||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "helpers";
|
@import "locomotive/shared/helpers";
|
||||||
@import "buttons";
|
@import "buttons";
|
||||||
|
|
||||||
@mixin box-header {
|
@mixin box-header {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/images";
|
@import "compass/css3/images";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "helpers";
|
@import "locomotive/shared/helpers";
|
||||||
@import "box";
|
@import "box";
|
||||||
|
|
||||||
/* ___ boxes ___ */
|
/* ___ boxes ___ */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
@import "helpers";
|
@import "locomotive/shared/helpers";
|
||||||
|
|
||||||
.CodeMirror {
|
.CodeMirror {
|
||||||
@include default-input-style;
|
@include default-input-style;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/images";
|
@import "compass/css3/images";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "helpers";
|
@import "locomotive/shared/helpers";
|
||||||
|
|
||||||
ul.content-assets {
|
ul.content-assets {
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/images";
|
@import "compass/css3/images";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
|
@import "locomotive/shared/helpers";
|
||||||
@import "buttons";
|
@import "buttons";
|
||||||
@import "helpers";
|
|
||||||
|
|
||||||
.ui-widget-overlay {
|
.ui-widget-overlay {
|
||||||
background: #000;
|
background: #000;
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "compass/css3/box-shadow";
|
@import "compass/css3/box-shadow";
|
||||||
|
@import "locomotive/shared/helpers";
|
||||||
@import "buttons";
|
@import "buttons";
|
||||||
@import "helpers";
|
|
||||||
@import "box";
|
@import "box";
|
||||||
|
|
||||||
#editable-elements {
|
#editable-elements {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/images";
|
@import "compass/css3/images";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "helpers";
|
@import "locomotive/shared/helpers";
|
||||||
@import "buttons";
|
@import "buttons";
|
||||||
|
|
||||||
form.formtastic {
|
form.formtastic {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/images";
|
@import "compass/css3/images";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "helpers";
|
@import "locomotive/shared/helpers";
|
||||||
|
|
||||||
#panel {
|
#panel {
|
||||||
.inner {
|
.inner {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
@import "compass/css3/border-radius";
|
@import "compass/css3/border-radius";
|
||||||
@import "compass/css3/images";
|
@import "compass/css3/images";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "helpers";
|
@import "locomotive/shared/helpers";
|
||||||
@import "buttons";
|
@import "buttons";
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
@ -4,204 +4,3 @@
|
|||||||
#{$vside}: $vvalue;
|
#{$vside}: $vvalue;
|
||||||
#{$hside}: $hvalue;
|
#{$hside}: $hvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ___ icons ___ */
|
|
||||||
|
|
||||||
|
|
||||||
// @import "compass/css3";
|
|
||||||
// @import "compass/css3/border-radius";
|
|
||||||
// @import "compass/css3/images";
|
|
||||||
// @import "compass/css3/text-shadow";
|
|
||||||
//
|
|
||||||
// @mixin clearfix {
|
|
||||||
// &:after {
|
|
||||||
// content: ".";
|
|
||||||
// display: block;
|
|
||||||
// height: 0;
|
|
||||||
// clear: both;
|
|
||||||
// visibility: hidden;
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin reset {
|
|
||||||
// padding: 0px;
|
|
||||||
// margin: 0px;
|
|
||||||
// list-style: none;
|
|
||||||
//
|
|
||||||
// a {
|
|
||||||
// text-decoration: none;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin absolute-position($vside, $vvalue, $hside, $hvalue, $display: block) {
|
|
||||||
// display: $display;
|
|
||||||
// position: absolute;
|
|
||||||
// #{$vside}: $vvalue;
|
|
||||||
// #{$hside}: $hvalue;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /* ___ shadows ___ */
|
|
||||||
//
|
|
||||||
// @mixin box-shadow-with-inset($color_top, $color_bottom: $color_top) {
|
|
||||||
// $color_bottom: $color_top !default;
|
|
||||||
// @include box-shadow($color_top 0 1px 0 0 inset, $color_bottom 0 1px 0 0);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin no-box-shadow($important: false) {
|
|
||||||
// @if $important == true {
|
|
||||||
// $important: " !important"; }
|
|
||||||
// @else {
|
|
||||||
// $important: ""; }
|
|
||||||
//
|
|
||||||
// box-shadow: none $important;
|
|
||||||
// -moz-box-shadow: none $important;
|
|
||||||
// -webkit-box-shadow: none $important;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin popup-box {
|
|
||||||
// @include border-radius(4px);
|
|
||||||
// @include box-shadow(rgba(255, 255, 255, 0.17) 0 1px 0 0 inset, rgba(0, 0, 0, 0.41) 3px 3px 5px 0);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /* ___ icons ___ */
|
|
||||||
//
|
|
||||||
// @mixin icon($where, $width, $height, $enabled: false, $top: 0, $left: 0) {
|
|
||||||
// position: relative;
|
|
||||||
// width: $width;
|
|
||||||
// height: $height;
|
|
||||||
// line-height: $height + 1;
|
|
||||||
// @if $enabled == true {
|
|
||||||
// background-position: -#{$width} $where; }
|
|
||||||
// @else {
|
|
||||||
// background-position: 0 $where; }
|
|
||||||
// top: $top;
|
|
||||||
// left: $left;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin menu-contents-icon($enabled: false) {
|
|
||||||
// @include icon(-64px, 16px, 12px, $enabled, 10px);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin menu-assets-icon($enabled: false) {
|
|
||||||
// @include icon(-48px, 20px, 16px, $enabled, 11px);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin menu-settings-icon($enabled: false) {
|
|
||||||
// @include icon(-32px, 14px, 13px, $enabled, 11px);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /* ___ colors ___ */
|
|
||||||
//
|
|
||||||
// @mixin menu-color($color) {
|
|
||||||
// $color-index: 1;
|
|
||||||
// @if $color == green { $color-index: 1; }
|
|
||||||
// @if $color == black { $color-index: 2; }
|
|
||||||
// @if $color == blue { $color-index: 3; }
|
|
||||||
// @if $color == orange { $color-index: 4; }
|
|
||||||
// @if $color == red { $color-index: 5; }
|
|
||||||
//
|
|
||||||
// z-index: 999;
|
|
||||||
//
|
|
||||||
// a {
|
|
||||||
// background-position: right -39px * $color-index;
|
|
||||||
//
|
|
||||||
// span {
|
|
||||||
// color: #fff;
|
|
||||||
// text-shadow: none;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// & > span { background-position: -40px * $color-index -39px; }
|
|
||||||
//
|
|
||||||
// &.first > span { background-position: -18px * $color-index 0px; }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin black-submenu {
|
|
||||||
// & > ul {
|
|
||||||
// background: #23242b image-url("locomotive/menu/submenu/black-bg.png") repeat-x 0 0;
|
|
||||||
// border-color: rgba(255, 255, 255, 0.2);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// & > ul > li > a, & > .action a {
|
|
||||||
// border: 1px solid rgba(0, 0, 0, 0.2);
|
|
||||||
// border-top: 1px solid rgba(0, 0, 0, 0.1);
|
|
||||||
// border-bottom: 1px solid rgba(0, 0, 0, 0.6);
|
|
||||||
// @include box-shadow-with-inset(rgba(255, 255, 255, 0.1));
|
|
||||||
// @include background-image(linear-gradient(#303138, #1e1e24));
|
|
||||||
//
|
|
||||||
// &.on, &:active {
|
|
||||||
// border: 1px solid rgba(0, 0, 0, 0.4);
|
|
||||||
// border-top: 1px solid rgba(0, 0, 0, 0.6);
|
|
||||||
// @include background-image(linear-gradient(#1e1e24, #212229));
|
|
||||||
// @include box-shadow-with-inset(rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.2));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// & > .action {
|
|
||||||
// background-image: image-url("locomotive/menu/submenu/black-action-border.png") !important;
|
|
||||||
//
|
|
||||||
// a:hover {
|
|
||||||
// border: 1px solid rgba(255, 255, 255, 0.5);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin green-submenu {
|
|
||||||
// & > ul {
|
|
||||||
// background-color: #2e9a7d;
|
|
||||||
// & > li > a {
|
|
||||||
// @include background-image(linear-gradient(#258c70, #13604b));
|
|
||||||
//
|
|
||||||
// &.on, &:active {
|
|
||||||
// @include background-image(linear-gradient(#195e4b, #166d55));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin blue-submenu {
|
|
||||||
// & > ul {
|
|
||||||
// background-color: #2579ae;
|
|
||||||
// & > li > a {
|
|
||||||
// @include background-image(linear-gradient(#1f6ea1, #135179));
|
|
||||||
//
|
|
||||||
// &.on, &:active {
|
|
||||||
// @include background-image(linear-gradient(#13496c, #175b88));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin orange-submenu {
|
|
||||||
// & > ul {
|
|
||||||
// background-color: #ed8102;
|
|
||||||
// & > li > a {
|
|
||||||
// @include background-image(linear-gradient(#e07a02, #a25804));
|
|
||||||
//
|
|
||||||
// &.on, &:active {
|
|
||||||
// @include background-image(linear-gradient(#965201, #9d5603));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin red-submenu {
|
|
||||||
// & > ul {
|
|
||||||
// background-color: #d23c45;
|
|
||||||
// & > li > a {
|
|
||||||
// @include background-image(linear-gradient(#b63e45, #89272d));
|
|
||||||
//
|
|
||||||
// &.on, &:active {
|
|
||||||
// @include background-image(linear-gradient(#7b292e, #972e35));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @mixin submenu-color($color) {
|
|
||||||
// @if $color == black { @include black-submenu; }
|
|
||||||
// @if $color == green { @include green-submenu; }
|
|
||||||
// @if $color == blue { @include blue-submenu; }
|
|
||||||
// @if $color == orange { @include orange-submenu; }
|
|
||||||
// @if $color == red { @include red-submenu; }
|
|
||||||
// }
|
|
@ -1,4 +1,4 @@
|
|||||||
@import "picker";
|
@import "locomotive/shared/picker";
|
||||||
|
|
||||||
#sites-picker {
|
#sites-picker {
|
||||||
|
|
||||||
|
@ -4,6 +4,6 @@
|
|||||||
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
||||||
*= require locomotive/blueprint/screen.css
|
*= require locomotive/blueprint/screen.css
|
||||||
*= require locomotive/toggle.css
|
*= require locomotive/toggle.css
|
||||||
*= require locomotive/shared/growl.css
|
*= require_tree ./shared
|
||||||
*= require_tree ./inline_editor
|
*= require_tree ./inline_editor
|
||||||
*/
|
*/
|
@ -0,0 +1,70 @@
|
|||||||
|
@import "compass/css3/images";
|
||||||
|
@import "compass/css3/opacity";
|
||||||
|
@import "compass/css3/box-shadow";
|
||||||
|
@import "compass/css3/text-shadow";
|
||||||
|
@import "compass/css3/border-radius";
|
||||||
|
|
||||||
|
@mixin button {
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
height: 22px;
|
||||||
|
line-height: 22px;
|
||||||
|
|
||||||
|
margin: 0 5px;
|
||||||
|
padding: 0 14px;
|
||||||
|
|
||||||
|
@include border-radius(14px);
|
||||||
|
@include background-image(linear-gradient(#303138, #1e1e24));
|
||||||
|
@include box-shadow(rgba(255, 255, 255, 0.1) 0 1px 0 0 inset, rgba(255, 255, 255, 0.1) 0 1px 0 0);
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.6);
|
||||||
|
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
text-decoration: none;
|
||||||
|
@include single-text-shadow(rgba(0, 0, 0, 1), 1px, 1px, 1px);
|
||||||
|
|
||||||
|
em {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
background: transparent image-url("locomotive/menu/icons.png") no-repeat 0 0px;
|
||||||
|
height: 11px;
|
||||||
|
width: 11px;
|
||||||
|
top: 2px;
|
||||||
|
left: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.5);
|
||||||
|
border-top: 1px solid rgba(255, 255, 255, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.on, &:active {
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.4);
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.6);
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||||||
|
@include background-image(linear-gradient(#1e1e24, #212229));
|
||||||
|
@include box-shadow(rgba(0, 0, 0, 0) 0 1px 0 0 inset, rgba(255, 255, 255, 0.2) 0 1px 0 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.blue {
|
||||||
|
@include single-text-shadow(rgba(0, 0, 0, 0.6), 1px, 1px, 1px);
|
||||||
|
|
||||||
|
@include background-image(linear-gradient(#2abaf1, #228dda));
|
||||||
|
@include box-shadow(rgba(255, 255, 255, 0.4) 0 1px 0 0 inset, rgba(127, 177, 211, 0.3) 0 1px 0 0);
|
||||||
|
border: 1px solid rgba(13, 56, 87, 1);
|
||||||
|
border-top: 1px solid rgba(13, 56, 87, 1);
|
||||||
|
border-bottom: 1px solid rgba(13, 56, 87, 1);
|
||||||
|
|
||||||
|
&.on, &:active {
|
||||||
|
@include box-shadow(rgba(0, 0, 0, 0) 0 1px 0 0 inset, rgba(255, 255, 255, 0.2) 0 1px 0 0);
|
||||||
|
@include background-image(linear-gradient(#26a1e9, #26a1e9));
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.5);
|
||||||
|
border-top: 1px solid rgba(255, 255, 255, 0.4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
body {
|
body {
|
||||||
position: relative;
|
position: relative;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
// overflow: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#page {
|
#page {
|
||||||
@ -14,3 +13,9 @@ body {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#content-locale-picker {
|
||||||
|
position: fixed;
|
||||||
|
top: 46px;
|
||||||
|
right: 70px;
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
@import "compass/css3/opacity";
|
@import "compass/css3/opacity";
|
||||||
@import "compass/css3/box-shadow";
|
@import "compass/css3/box-shadow";
|
||||||
@import "compass/css3/text-shadow";
|
@import "compass/css3/text-shadow";
|
||||||
@import "compass/css3/border-radius";
|
@import "buttons";
|
||||||
|
|
||||||
#toolbar {
|
#toolbar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@ -46,11 +46,22 @@
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
@include single-text-shadow(#000, 0px, 1px, 0px);
|
@include single-text-shadow(#000, 0px, 1px, 0px);
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
font-style: italic;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.loading, &.disabled {
|
||||||
|
top: -1px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.col {
|
.col {
|
||||||
float: right;
|
float: right;
|
||||||
|
|
||||||
|
height: 50px;
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
|
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
@ -64,14 +75,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lang {
|
||||||
|
#content-locale-picker-link {
|
||||||
|
@include button;
|
||||||
|
|
||||||
|
top: 7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.back {
|
.back {
|
||||||
a {
|
a {
|
||||||
color: #1F82BC;
|
position: relative;
|
||||||
@include single-text-shadow(#000, 0px, 1px, 0px);
|
top: 9px;
|
||||||
text-decoration: none;
|
|
||||||
&:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,70 +105,7 @@
|
|||||||
|
|
||||||
.element-actions {
|
.element-actions {
|
||||||
.button {
|
.button {
|
||||||
display: inline-block;
|
@include button;
|
||||||
|
|
||||||
height: 22px;
|
|
||||||
line-height: 22px;
|
|
||||||
|
|
||||||
margin: 0 5px;
|
|
||||||
padding: 0 14px;
|
|
||||||
|
|
||||||
@include border-radius(14px);
|
|
||||||
@include background-image(linear-gradient(#303138, #1e1e24));
|
|
||||||
@include box-shadow(rgba(255, 255, 255, 0.1) 0 1px 0 0 inset, rgba(255, 255, 255, 0.1) 0 1px 0 0);
|
|
||||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.6);
|
|
||||||
|
|
||||||
text-decoration: none;
|
|
||||||
// font-size: 13px;
|
|
||||||
|
|
||||||
color: #fff;
|
|
||||||
font-size: 12px;
|
|
||||||
@include single-text-shadow(rgba(0, 0, 0, 1), 1px, 1px, 1px);
|
|
||||||
|
|
||||||
em {
|
|
||||||
display: inline-block;
|
|
||||||
position: relative;
|
|
||||||
background: transparent image-url("locomotive/menu/icons.png") no-repeat 0 0px;
|
|
||||||
height: 11px;
|
|
||||||
width: 11px;
|
|
||||||
top: 2px;
|
|
||||||
left: -5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border: 1px solid rgba(255, 255, 255, 0.5);
|
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
&.on, &:active {
|
|
||||||
border: 1px solid rgba(0, 0, 0, 0.4);
|
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.6);
|
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
|
||||||
@include background-image(linear-gradient(#1e1e24, #212229));
|
|
||||||
@include box-shadow(rgba(0, 0, 0, 0) 0 1px 0 0 inset, rgba(255, 255, 255, 0.2) 0 1px 0 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
&.save {
|
|
||||||
@include single-text-shadow(rgba(0, 0, 0, 0.6), 1px, 1px, 1px);
|
|
||||||
|
|
||||||
@include background-image(linear-gradient(#2abaf1, #228dda));
|
|
||||||
@include box-shadow(rgba(255, 255, 255, 0.4) 0 1px 0 0 inset, rgba(127, 177, 211, 0.3) 0 1px 0 0);
|
|
||||||
border: 1px solid rgba(13, 56, 87, 1);
|
|
||||||
border-top: 1px solid rgba(13, 56, 87, 1);
|
|
||||||
border-bottom: 1px solid rgba(13, 56, 87, 1);
|
|
||||||
|
|
||||||
&.on, &:active {
|
|
||||||
@include box-shadow(rgba(0, 0, 0, 0) 0 1px 0 0 inset, rgba(255, 255, 255, 0.2) 0 1px 0 0);
|
|
||||||
@include background-image(linear-gradient(#26a1e9, #26a1e9));
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border: 1px solid rgba(255, 255, 255, 0.5);
|
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // .button
|
} // .button
|
||||||
} // .element-actions
|
} // .element-actions
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
|
list-style: none;
|
||||||
margin: 1px 0 0 0;
|
margin: 1px 0 0 0;
|
||||||
|
|
||||||
li {
|
li {
|
@ -2,8 +2,9 @@ module Locomotive
|
|||||||
class BaseController < ApplicationController
|
class BaseController < ApplicationController
|
||||||
|
|
||||||
include Locomotive::Routing::SiteDispatcher
|
include Locomotive::Routing::SiteDispatcher
|
||||||
|
include Locomotive::ActionController::LocaleHelpers
|
||||||
include Locomotive::ActionController::Helpers
|
include Locomotive::ActionController::SectionHelpers
|
||||||
|
include Locomotive::ActionController::UrlHelpers
|
||||||
|
|
||||||
layout '/locomotive/layouts/application'
|
layout '/locomotive/layouts/application'
|
||||||
|
|
||||||
|
@ -3,8 +3,9 @@ module Locomotive
|
|||||||
class BaseController < ApplicationController
|
class BaseController < ApplicationController
|
||||||
|
|
||||||
include Locomotive::Routing::SiteDispatcher
|
include Locomotive::Routing::SiteDispatcher
|
||||||
|
include Locomotive::ActionController::LocaleHelpers
|
||||||
include Locomotive::ActionController::Helpers
|
include Locomotive::ActionController::SectionHelpers
|
||||||
|
include Locomotive::ActionController::UrlHelpers
|
||||||
|
|
||||||
before_filter :require_site
|
before_filter :require_site
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ module Locomotive
|
|||||||
class PagesController < ApplicationController
|
class PagesController < ApplicationController
|
||||||
|
|
||||||
include Locomotive::Routing::SiteDispatcher
|
include Locomotive::Routing::SiteDispatcher
|
||||||
|
|
||||||
include Locomotive::Render
|
include Locomotive::Render
|
||||||
|
include Locomotive::ActionController::LocaleHelpers
|
||||||
|
|
||||||
before_filter :require_site
|
before_filter :require_site
|
||||||
|
|
||||||
@ -12,6 +12,10 @@ module Locomotive
|
|||||||
|
|
||||||
before_filter :validate_site_membership, :only => [:show_toolbar]
|
before_filter :validate_site_membership, :only => [:show_toolbar]
|
||||||
|
|
||||||
|
before_filter :set_ui_locale, :only => :show_toolbar
|
||||||
|
|
||||||
|
before_filter :set_locale, :only => [:show, :edit]
|
||||||
|
|
||||||
def show_toolbar
|
def show_toolbar
|
||||||
render :layout => false
|
render :layout => false
|
||||||
end
|
end
|
||||||
@ -25,6 +29,17 @@ module Locomotive
|
|||||||
render_locomotive_page
|
render_locomotive_page
|
||||||
end
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def set_ui_locale
|
||||||
|
::I18n.locale = current_locomotive_account.locale rescue Locomotive.config.default_locale
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_locale
|
||||||
|
self.set_current_content_locale
|
||||||
|
::I18n.locale = ::Mongoid::Fields::I18n.locale
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
@ -3,8 +3,7 @@
|
|||||||
= render '/locomotive/theme_assets/picker'
|
= render '/locomotive/theme_assets/picker'
|
||||||
= render 'editable_elements'
|
= render 'editable_elements'
|
||||||
|
|
||||||
- if @page.persisted?
|
- content_for :backbone_view_data do
|
||||||
- content_for :backbone_view_data do
|
|
||||||
:plain
|
:plain
|
||||||
{ page: #{@page.to_presenter.as_json_for_html_view.to_json} }
|
{ page: #{@page.to_presenter.as_json_for_html_view.to_json} }
|
||||||
|
|
||||||
|
@ -29,22 +29,6 @@
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
%script{ :type => 'text/html', :id => 'toolbar' }
|
|
||||||
|
|
||||||
%h1 {{title}}
|
|
||||||
|
|
||||||
.back.col
|
|
||||||
= link_to t('.buttons.back'), '#', :class => 'button back'
|
|
||||||
|
|
||||||
.editing-mode.col{ :style => 'display: none' }
|
|
||||||
%label= t('.editing_mode')
|
|
||||||
= check_box_tag 'edit', '1', false
|
|
||||||
|
|
||||||
.element-actions.col{ :style => 'display: none' }
|
|
||||||
%label= t('.save_modifications')
|
|
||||||
= link_to t('.buttons.confirm'), '#', :class => 'button save'
|
|
||||||
= link_to t('.buttons.cancel'), '#', :class => 'button cancel'
|
|
||||||
|
|
||||||
%body
|
%body
|
||||||
#page
|
#page
|
||||||
%iframe{ :src => request.fullpath.gsub('_admin', '_edit'), :scrolling => 'no', :frameborder => '0' }
|
%iframe{ :src => request.fullpath.gsub('_admin', '_edit'), :scrolling => 'no', :frameborder => '0' }
|
||||||
@ -52,5 +36,24 @@
|
|||||||
#toolbar
|
#toolbar
|
||||||
.background
|
.background
|
||||||
.inner
|
.inner
|
||||||
|
%h1{ :class => 'loading', :'data-disabled-status' => t('.statuses.disabled'), :'data-loading-status' => t('.statuses.loading') }= t('.statuses.loading')
|
||||||
|
|
||||||
|
.back.col
|
||||||
|
= link_to image_tag('locomotive/inline_editor/back.png'), '#', :class => 'button back', :title => t('.buttons.back'), :alt => t('.buttons.back')
|
||||||
|
|
||||||
|
- if current_site.locales.size > 1
|
||||||
|
.lang.col
|
||||||
|
%label= t('.labels.lang')
|
||||||
|
= render '/locomotive/shared/locale_picker_link'
|
||||||
|
|
||||||
|
.editing-mode.col
|
||||||
|
%label= t('.labels.editing_mode')
|
||||||
|
= check_box_tag 'edit', '1', false
|
||||||
|
|
||||||
|
.element-actions.col{ :style => 'display: none' }
|
||||||
|
%label= t('.labels.save_changes')
|
||||||
|
= link_to t('.buttons.confirm'), '#', :class => 'button blue save'
|
||||||
|
= link_to t('.buttons.cancel'), '#', :class => 'button cancel'
|
||||||
|
|
||||||
|
= render_cell 'locomotive/content_locale_picker', :show, :site => current_site, :locale => current_content_locale
|
||||||
|
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
= link_to '#', :id => 'content-locale-picker-link', :class => 'button' do
|
||||||
|
%span.hand
|
||||||
|
|
||||||
|
|
||||||
|
= image_tag "locomotive/icons/flags/#{current_content_locale}.png", :class => 'flag'
|
||||||
|
|
||||||
|
%span.text= current_content_locale
|
@ -4,10 +4,11 @@
|
|||||||
|
|
||||||
- if current_site.locales.size > 1
|
- if current_site.locales.size > 1
|
||||||
.action
|
.action
|
||||||
= link_to '#', :id => 'content-locale-picker-link', :class => 'button' do
|
= render 'locomotive/shared/locale_picker_link'
|
||||||
%span.hand
|
/ = link_to '#', :id => 'content-locale-picker-link', :class => 'button' do
|
||||||
|
/ %span.hand
|
||||||
|
/
|
||||||
= image_tag "locomotive/icons/flags/#{current_content_locale}.png", :class => 'flag'
|
/
|
||||||
|
/ = image_tag "locomotive/icons/flags/#{current_content_locale}.png", :class => 'flag'
|
||||||
%span.text= current_content_locale
|
/
|
||||||
|
/ %span.text= current_content_locale
|
@ -306,8 +306,13 @@ en:
|
|||||||
public:
|
public:
|
||||||
pages:
|
pages:
|
||||||
show_toolbar:
|
show_toolbar:
|
||||||
save_modifications: "Save modifications: "
|
statuses:
|
||||||
|
loading: "Loading...."
|
||||||
|
disabled: "Inline Editor disabled"
|
||||||
|
labels:
|
||||||
|
save_changes: "Save changes: "
|
||||||
editing_mode: "Editing mode: "
|
editing_mode: "Editing mode: "
|
||||||
|
lang: "Lang: "
|
||||||
buttons:
|
buttons:
|
||||||
back: Return to back-office
|
back: Return to back-office
|
||||||
confirm: Confirm
|
confirm: Confirm
|
||||||
|
9
doc/TODO
@ -75,14 +75,15 @@ x edit my site
|
|||||||
x rack
|
x rack
|
||||||
x iframe
|
x iframe
|
||||||
(- remove inline-editor tag)
|
(- remove inline-editor tag)
|
||||||
- save editable elements
|
x save editable elements
|
||||||
- notification (growl)
|
x notification (growl)
|
||||||
|
x change page
|
||||||
- i18n
|
- i18n
|
||||||
- change page
|
|
||||||
- aloha:
|
- aloha:
|
||||||
|
x remove sidebar
|
||||||
- i18n
|
- i18n
|
||||||
- insert image
|
- insert image
|
||||||
- remove sidebar
|
|
||||||
|
|
||||||
|
|
||||||
- bugs:
|
- bugs:
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
require 'locomotive/action_controller/helpers'
|
require 'locomotive/action_controller/locale_helpers'
|
||||||
|
require 'locomotive/action_controller/section_helpers'
|
||||||
|
require 'locomotive/action_controller/url_helpers'
|
||||||
require 'locomotive/action_controller/responder'
|
require 'locomotive/action_controller/responder'
|
||||||
require 'locomotive/action_controller/public_responder'
|
require 'locomotive/action_controller/public_responder'
|
@ -1,89 +0,0 @@
|
|||||||
module Locomotive
|
|
||||||
module ActionController
|
|
||||||
module Helpers
|
|
||||||
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
helper_method :current_site_public_url, :switch_to_site_url, :public_page_url, :current_content_locale
|
|
||||||
end
|
|
||||||
|
|
||||||
module InstanceMethods
|
|
||||||
|
|
||||||
# ___ locales ___
|
|
||||||
|
|
||||||
def current_content_locale
|
|
||||||
::Mongoid::Fields::I18n.locale
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_current_content_locale
|
|
||||||
if params[:content_locale].present?
|
|
||||||
session[:content_locale] = params[:content_locale]
|
|
||||||
end
|
|
||||||
|
|
||||||
unless current_site.locales.include?(session[:content_locale])
|
|
||||||
session[:content_locale] = current_site.default_locale
|
|
||||||
end
|
|
||||||
|
|
||||||
::Mongoid::Fields::I18n.locale = session[:content_locale]
|
|
||||||
(current_site.locales || []).each do |locale|
|
|
||||||
::Mongoid::Fields::I18n.fallbacks_for(locale, current_site.locale_fallbacks(locale))
|
|
||||||
end
|
|
||||||
|
|
||||||
logger.debug "*** content locale = #{session[:content_locale]} / #{::Mongoid::Fields::I18n.locale}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_back_office_locale
|
|
||||||
::I18n.locale = current_locomotive_account.locale rescue Locomotive.config.default_locale
|
|
||||||
end
|
|
||||||
|
|
||||||
def sections(key = nil)
|
|
||||||
if !key.nil? && key.to_sym == :sub
|
|
||||||
@locomotive_sections[:sub] || self.controller_name.dasherize
|
|
||||||
else
|
|
||||||
@locomotive_sections[:main]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# ___ site/page urls builder ___
|
|
||||||
|
|
||||||
def current_site_public_url
|
|
||||||
request.protocol + request.host_with_port
|
|
||||||
end
|
|
||||||
|
|
||||||
def switch_to_site_url(site, options = {})
|
|
||||||
options = { :fullpath => true, :protocol => true }.merge(options)
|
|
||||||
|
|
||||||
url = "#{site.subdomain}.#{Locomotive.config.domain}"
|
|
||||||
url += ":#{request.port}" if request.port != 80
|
|
||||||
|
|
||||||
url = File.join(url, request.fullpath) if options[:fullpath]
|
|
||||||
url = "http://#{url}" if options[:protocol]
|
|
||||||
url
|
|
||||||
end
|
|
||||||
|
|
||||||
def public_page_url(page, options = {})
|
|
||||||
if content = options.delete(:content)
|
|
||||||
File.join(current_site_public_url, page.fullpath.gsub('content_type_template', ''), content._slug)
|
|
||||||
else
|
|
||||||
File.join(current_site_public_url, page.fullpath)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
module ClassMethods
|
|
||||||
|
|
||||||
def sections(main, sub = nil)
|
|
||||||
before_filter do |c|
|
|
||||||
sub = sub.call(c) if sub.respond_to?(:call)
|
|
||||||
sections = { :main => main, :sub => sub }
|
|
||||||
c.instance_variable_set(:@locomotive_sections, sections)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
42
lib/locomotive/action_controller/locale_helpers.rb
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
module Locomotive
|
||||||
|
module ActionController
|
||||||
|
module LocaleHelpers
|
||||||
|
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
included do
|
||||||
|
helper_method :current_content_locale
|
||||||
|
end
|
||||||
|
|
||||||
|
module InstanceMethods
|
||||||
|
|
||||||
|
def current_content_locale
|
||||||
|
::Mongoid::Fields::I18n.locale
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_current_content_locale
|
||||||
|
if params[:content_locale].present?
|
||||||
|
session[:content_locale] = params[:content_locale]
|
||||||
|
end
|
||||||
|
|
||||||
|
unless current_site.locales.include?(session[:content_locale])
|
||||||
|
session[:content_locale] = current_site.default_locale
|
||||||
|
end
|
||||||
|
|
||||||
|
::Mongoid::Fields::I18n.locale = session[:content_locale]
|
||||||
|
(current_site.locales || []).each do |locale|
|
||||||
|
::Mongoid::Fields::I18n.fallbacks_for(locale, current_site.locale_fallbacks(locale))
|
||||||
|
end
|
||||||
|
|
||||||
|
logger.debug "*** content locale = #{session[:content_locale]} / #{::Mongoid::Fields::I18n.locale}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_back_office_locale
|
||||||
|
::I18n.locale = current_locomotive_account.locale rescue Locomotive.config.default_locale
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
33
lib/locomotive/action_controller/section_helpers.rb
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
module Locomotive
|
||||||
|
module ActionController
|
||||||
|
module SectionHelpers
|
||||||
|
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
module InstanceMethods
|
||||||
|
|
||||||
|
def sections(key = nil)
|
||||||
|
if !key.nil? && key.to_sym == :sub
|
||||||
|
@locomotive_sections[:sub] || self.controller_name.dasherize
|
||||||
|
else
|
||||||
|
@locomotive_sections[:main]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
module ClassMethods
|
||||||
|
|
||||||
|
def sections(main, sub = nil)
|
||||||
|
before_filter do |c|
|
||||||
|
sub = sub.call(c) if sub.respond_to?(:call)
|
||||||
|
sections = { :main => main, :sub => sub }
|
||||||
|
c.instance_variable_set(:@locomotive_sections, sections)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
40
lib/locomotive/action_controller/url_helpers.rb
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
module Locomotive
|
||||||
|
module ActionController
|
||||||
|
module UrlHelpers
|
||||||
|
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
included do
|
||||||
|
helper_method :current_site_public_url, :switch_to_site_url, :public_page_url
|
||||||
|
end
|
||||||
|
|
||||||
|
module InstanceMethods
|
||||||
|
|
||||||
|
def current_site_public_url
|
||||||
|
request.protocol + request.host_with_port
|
||||||
|
end
|
||||||
|
|
||||||
|
def switch_to_site_url(site, options = {})
|
||||||
|
options = { :fullpath => true, :protocol => true }.merge(options)
|
||||||
|
|
||||||
|
url = "#{site.subdomain}.#{Locomotive.config.domain}"
|
||||||
|
url += ":#{request.port}" if request.port != 80
|
||||||
|
|
||||||
|
url = File.join(url, request.fullpath) if options[:fullpath]
|
||||||
|
url = "http://#{url}" if options[:protocol]
|
||||||
|
url
|
||||||
|
end
|
||||||
|
|
||||||
|
def public_page_url(page, options = {})
|
||||||
|
if content = options.delete(:content)
|
||||||
|
File.join(current_site_public_url, page.fullpath.gsub('content_type_template', ''), content._slug)
|
||||||
|
else
|
||||||
|
File.join(current_site_public_url, page.fullpath)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -6,53 +6,20 @@ module Liquid
|
|||||||
def render(context)
|
def render(context)
|
||||||
if context.registers[:current_locomotive_account] && context.registers[:inline_editor]
|
if context.registers[:current_locomotive_account] && context.registers[:inline_editor]
|
||||||
%{
|
%{
|
||||||
|
<meta content="true" name="inline-editor" />
|
||||||
|
<link href="/assets/locomotive/aloha/css/aloha.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="/assets/locomotive/utils/aloha_settings.js"></script>
|
||||||
|
<script type="text/javascript" src="/assets/locomotive/aloha/lib/aloha.js" data-aloha-plugins="common/format,common/highlighteditables,common/list,common/link,common/undo,common/paste"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
Aloha.ready(function() \{
|
||||||
window.parent.application_view.set_page(#{context.registers[:page].to_presenter.as_json_for_html_view.to_json});
|
window.parent.application_view.set_page(#{context.registers[:page].to_presenter.as_json_for_html_view.to_json});
|
||||||
|
\});
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
''
|
''
|
||||||
end
|
end
|
||||||
|
|
||||||
# if context.registers[:current_locomotive_account]
|
|
||||||
# output = %{
|
|
||||||
# <meta name="locale" content="#{context.registers[:current_locomotive_account].locale}" />
|
|
||||||
# <meta name="page-fullpath" content="/#{context.registers[:page].fullpath}" />
|
|
||||||
# <meta name="edit-page-url" content="#{context.registers[:controller].send(:edit_page_url, context.registers[:page])}" />
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# if context.registers[:inline_editor]
|
|
||||||
# controller = context.registers[:controller]
|
|
||||||
#
|
|
||||||
# output << %{
|
|
||||||
# <meta name="page-url" content="#{context.registers[:controller].send(:page_url, context.registers[:page], :json)}" />
|
|
||||||
# <meta name="page-elements-count" content="#{context.registers[:page].editable_elements.size}" />
|
|
||||||
#
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/aloha/aloha.js"></script>
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Format/plugin.js"></script>
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table/plugin.js"></script>
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.List/plugin.js"></script>
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link/plugin.js"></script>
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.HighlightEditables/plugin.js"></script>
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# if controller.send(:protect_against_forgery?)
|
|
||||||
# output << %(<meta name="csrf-param" content="#{Rack::Utils.escape_html(controller.send(:request_forgery_protection_token))}"/>\n<meta name="csrf-token" content="#{Rack::Utils.escape_html(controller.send(:form_authenticity_token))}"/>).html_safe
|
|
||||||
# end
|
|
||||||
# else
|
|
||||||
# output << %{
|
|
||||||
# <script src="/javascripts/admin/jquery.js" type="text/javascript"></script>
|
|
||||||
# <script src="/javascripts/admin/plugins/cookie.js" type="text/javascript"></script>
|
|
||||||
# }
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# output << %{
|
|
||||||
# <script src="/javascripts/admin/rails.js" type="text/javascript"></script>
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/inline_editor_toolbar.js"></script>
|
|
||||||
# <script type="text/javascript" src="/javascripts/admin/inline_editor.js"></script>
|
|
||||||
# <link href="/stylesheets/admin/inline_editor.css" media="screen" rel="stylesheet" type="text/css" />
|
|
||||||
# }
|
|
||||||
# end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -30,10 +30,10 @@
|
|||||||
|
|
||||||
settings = $.extend({
|
settings = $.extend({
|
||||||
on_label : 'Yes',
|
on_label : 'Yes',
|
||||||
on_label_color : '#cccccc',
|
on_label_color : '#333333',
|
||||||
on_bg_color : '#8FE38D',
|
on_bg_color : '#8FE38D',
|
||||||
off_label : 'No',
|
off_label : 'No',
|
||||||
off_label_color : '#333333',
|
off_label_color : '#cccccc',
|
||||||
off_bg_color: '#F8837C',
|
off_bg_color: '#F8837C',
|
||||||
skin_dir : "skin/",
|
skin_dir : "skin/",
|
||||||
bypass_skin : false,
|
bypass_skin : false,
|
||||||
|