Edit uploaded package
This commit is contained in:
parent
0a1a9d2c2e
commit
d7fd61ce55
|
@ -1,111 +1,7 @@
|
||||||
<%#= encoding: utf-8 %>
|
$('#ajaxForm').ajaxForm({
|
||||||
$(document).on('click', '#ajax_form_submit', function(){
|
beforeSubmit: function(a,f,o) {
|
||||||
// $('#ajaxForm').ajaxSubmit({
|
o.dataType = 'script';
|
||||||
// beforeSubmit: function(a,f,o) {
|
},
|
||||||
// o.dataType = 'script';
|
success: function(data) {
|
||||||
// if (o.dataType == 'script') {
|
|
||||||
// o.url = o.url.split('?'); // split on GET params
|
|
||||||
// if (o.url[0].substr(-3) != '.js') o.url[0] += '.js'; // force rails to respond to respond to the request with :format = js
|
|
||||||
// o.url = o.url.join('?'); // join on GET params
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// success: function(response,status,xhr){
|
|
||||||
// alert(response);
|
|
||||||
// alert(status);
|
|
||||||
// alert(xhr);
|
|
||||||
// },
|
|
||||||
// error:function(){
|
|
||||||
// alert("error");
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
var o = {
|
|
||||||
// dataType: 'script',
|
|
||||||
dataType: 'html',
|
|
||||||
url:$("#ajaxForm").attr("action"),
|
|
||||||
beforeSubmit: function(){
|
|
||||||
var sub = true;
|
|
||||||
$("span.error").remove();
|
|
||||||
$("#dyn_error").empty();
|
|
||||||
$("#ajaxForm input").each(function(){
|
|
||||||
if($(this).val() == ""){
|
|
||||||
$("<span class='error'> *</span>").insertAfter($(this));
|
|
||||||
sub = false;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if(!sub){
|
|
||||||
$("#dyn_error").text("Cannot be empty.");
|
|
||||||
$("#dyn_error").text("<%= I18n.t('cant_empty_star') %>");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
success: function(response,status,xhr){
|
|
||||||
if(typeof tinyMCEPopup != "undefined"){
|
|
||||||
var x = response.split("#");
|
|
||||||
var returnurl = x[0],
|
|
||||||
returntitle = x[1],
|
|
||||||
returndescription = x[2];
|
|
||||||
var win = tinyMCEPopup.getWindowArg("window");
|
|
||||||
win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = returnurl;
|
|
||||||
win.document.getElementById(tinyMCEPopup.getWindowArg("alt")).value = returndescription;
|
|
||||||
win.document.getElementById(tinyMCEPopup.getWindowArg("title")).value = returntitle;
|
|
||||||
if (typeof(win.ImageDialog) != "undefined") {
|
|
||||||
// we are, so update image dimensions...
|
|
||||||
if (win.ImageDialog.getImageData)
|
|
||||||
win.ImageDialog.getImageData();
|
|
||||||
|
|
||||||
// ... and preview if necessary
|
|
||||||
if (win.ImageDialog.showPreviewImage)
|
|
||||||
win.ImageDialog.showPreviewImage(returnurl);
|
|
||||||
}
|
|
||||||
tinyMCEPopup.close();
|
|
||||||
}else{
|
|
||||||
//incase if we want to do something for quick edit file upload
|
|
||||||
// var modalvalues = "";
|
|
||||||
// var r = "";
|
|
||||||
// if(rcom.getInternetExplorerVersion() > -1){
|
|
||||||
// r = "<tr><td>" + response + "</td></tr>";
|
|
||||||
// r = r.replace("**","</td><td>");
|
|
||||||
// r = r.replace("**","</td><td>");
|
|
||||||
// r = $(r);
|
|
||||||
// modalvalues = r.find("span").attr("data-content").split("#");
|
|
||||||
// r.attr("id",r.find("span").attr("for"));
|
|
||||||
// var table=document.getElementById(modalvalues[0]);
|
|
||||||
// //var tbody = table.getElementsByTagName("tbody");
|
|
||||||
// var row = table.insertRow(table.rows.length-1);
|
|
||||||
// var c1 = row.insertCell(0),
|
|
||||||
// c2 = row.insertCell(1),
|
|
||||||
// c3 = row.insertCell(2);
|
|
||||||
// c1.innerHTML = r.find("td").eq(0).html();
|
|
||||||
// c2.innerHTML = r.find("td").eq(1).html();
|
|
||||||
// c3.innerHTML = r.find("td").eq(2).html();
|
|
||||||
// var trow = $("#bulletin_files tfoot").find("tr").eq(0);
|
|
||||||
// $("#bulletin_files tbody").append(trow);
|
|
||||||
// }else{
|
|
||||||
|
|
||||||
// response = response.replace("**","");
|
|
||||||
// response = response.replace("**","");
|
|
||||||
// r = $(response);
|
|
||||||
// modalvalues = r.find("span").attr("data-content").split("#");
|
|
||||||
// $('#' + modalvalues[0]+ ' tbody').append(r);
|
|
||||||
// }
|
|
||||||
// console.log(modalvalues[1]);
|
|
||||||
// $("#"+modalvalues[1]).modal('hide');
|
|
||||||
//$('#bulletin_files tbody').append(r);
|
|
||||||
//$(response).fadeIn();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error:function(){
|
|
||||||
alert("error");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o.dataType == 'script') {
|
|
||||||
o.url = o.url.split('?'); // split on GET params
|
|
||||||
if (o.url[0].substr(-3) != '.js') o.url[0] += '.js'; // force rails to respond to respond to the request with :format = js
|
|
||||||
o.url = o.url.join('?'); // join on GET params
|
|
||||||
}
|
}
|
||||||
$('#ajaxForm').ajaxSubmit(o);
|
|
||||||
|
|
||||||
});
|
});
|
|
@ -267,6 +267,12 @@
|
||||||
#post-body-content {
|
#post-body-content {
|
||||||
padding: 8px 0 8px 6px;
|
padding: 8px 0 8px 6px;
|
||||||
}
|
}
|
||||||
|
#post-body-content .middle {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
.filter .accordion-group {
|
.filter .accordion-group {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
border: none;
|
border: none;
|
||||||
|
|
|
@ -34,14 +34,37 @@ class Admin::DesignsController < OrbitBackendController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@design = Design.find(params[:id])
|
@design = Design.find(params[:id])
|
||||||
if @design.update_attributes(params[:design])
|
@design.update_attributes(params[:design])
|
||||||
flash[:notice] = "Successfully updated design and tasks."
|
# if @design.update_attributes(params[:design])
|
||||||
redirect_to admin_designs_url(@design)
|
# flash[:notice] = "Successfully updated design and tasks."
|
||||||
else
|
# redirect_to admin_designs_url(@design)
|
||||||
render :action => 'edit'
|
# else
|
||||||
|
# render :action => 'edit'
|
||||||
|
# end
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.js {nil}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_file
|
||||||
|
@design = Design.find(params[:id])
|
||||||
|
case params[:type]
|
||||||
|
when 'layout', 'css_default', 'css_reset'
|
||||||
|
@object = @design.send(params[:type])
|
||||||
|
when 'image', 'javascript', 'theme'
|
||||||
|
@object = @design.send(params[:type]).find(params[:object_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
Dir.mktmpdir('f_path') { |dir|
|
||||||
|
temp_file = File.new(dir + '/' + File.basename(@object.file.url), 'w+')
|
||||||
|
temp_file.write(params[:file][:content].force_encoding('UTF-8'))
|
||||||
|
@object.remove_file!
|
||||||
|
@object.file = temp_file
|
||||||
|
@object.save
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def edit_file
|
def edit_file
|
||||||
@design = Design.find(params[:id])
|
@design = Design.find(params[:id])
|
||||||
filename = params[:filename]
|
filename = params[:filename]
|
||||||
|
@ -91,6 +114,13 @@ class Admin::DesignsController < OrbitBackendController
|
||||||
end
|
end
|
||||||
redirect_to admin_designs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
|
redirect_to admin_designs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def upload_image
|
||||||
|
@design = Design.find(params[:id])
|
||||||
|
@image = @design.images.build(params[:image])
|
||||||
|
@image.save
|
||||||
|
render :layout => false
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
@ -98,7 +128,6 @@ class Admin::DesignsController < OrbitBackendController
|
||||||
Zip::ZipFile.open(file) { |zip_file|
|
Zip::ZipFile.open(file) { |zip_file|
|
||||||
design = Design.new.from_json(zip_file.read("#{zip_name}/info.json"))
|
design = Design.new.from_json(zip_file.read("#{zip_name}/info.json"))
|
||||||
Dir.mktmpdir('f_path') { |dir|
|
Dir.mktmpdir('f_path') { |dir|
|
||||||
design.build_layout
|
|
||||||
themes_entries = []
|
themes_entries = []
|
||||||
javascripts_entries = []
|
javascripts_entries = []
|
||||||
images_entries = []
|
images_entries = []
|
||||||
|
@ -106,25 +135,11 @@ class Admin::DesignsController < OrbitBackendController
|
||||||
zip_file.entries.each do |entry|
|
zip_file.entries.each do |entry|
|
||||||
case (path = entry.to_s)
|
case (path = entry.to_s)
|
||||||
when /\A(#{zip_name})\/(default\.css)\z/ #for default css
|
when /\A(#{zip_name})\/(default\.css)\z/ #for default css
|
||||||
filename = File.basename(entry.to_s)
|
design.build_css_default(:file => get_temp_file(zip_file, dir, entry))
|
||||||
temp_file = File.new(dir + '/' + filename, 'w+')
|
|
||||||
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
|
|
||||||
default_css = design.build_default_css
|
|
||||||
default_css.file = temp_file
|
|
||||||
default_css.to_save = true
|
|
||||||
when /\A(#{zip_name})\/(reset\.css)\z/ #for reset css
|
when /\A(#{zip_name})\/(reset\.css)\z/ #for reset css
|
||||||
filename = File.basename(entry.to_s)
|
design.build_css_reset(:file => get_temp_file(zip_file, dir, entry))
|
||||||
temp_file = File.new(dir + '/' + filename, 'w+')
|
|
||||||
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
|
|
||||||
reset_css = design.build_reset_css
|
|
||||||
reset_css.file = temp_file
|
|
||||||
reset_css.to_save = true
|
|
||||||
when /\A(#{zip_name})\/(layout\.html)\z/ #for layout html
|
when /\A(#{zip_name})\/(layout\.html)\z/ #for layout html
|
||||||
filename = File.basename(entry.to_s)
|
design.build_layout(:file => get_temp_file(zip_file, dir, entry))
|
||||||
temp_file = File.new(dir + '/' + filename, 'w+')
|
|
||||||
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
|
|
||||||
design.layout.file = temp_file
|
|
||||||
design.layout.to_save=true
|
|
||||||
when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/ #for themes css
|
when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/ #for themes css
|
||||||
themes_entries << entry
|
themes_entries << entry
|
||||||
when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js
|
when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js
|
||||||
|
@ -136,12 +151,7 @@ class Admin::DesignsController < OrbitBackendController
|
||||||
|
|
||||||
['themes', 'javascripts', 'images'].each do |type|
|
['themes', 'javascripts', 'images'].each do |type|
|
||||||
eval("#{type}_entries").each do |entry|
|
eval("#{type}_entries").each do |entry|
|
||||||
filename = File.basename entry.to_s
|
eval("design.#{type}").build(:file => get_temp_file(zip_file, dir, entry))
|
||||||
temp_file = File.new(dir + '/' + filename, 'w+')
|
|
||||||
temp_file.write (zip_file.read entry).force_encoding('UTF-8')
|
|
||||||
build_and_store = eval("design.#{type}").build
|
|
||||||
build_and_store.file = temp_file
|
|
||||||
build_and_store.to_save = true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
@ -149,4 +159,11 @@ class Admin::DesignsController < OrbitBackendController
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_temp_file(zip_file, dir, entry)
|
||||||
|
filename = File.basename(entry.to_s)
|
||||||
|
temp_file = File.new(dir + '/' + filename, 'w+')
|
||||||
|
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
|
||||||
|
temp_file
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -71,8 +71,8 @@ class Admin::PurchasesController < ApplicationController
|
||||||
Dir.mktmpdir('f_path') { |dir|
|
Dir.mktmpdir('f_path') { |dir|
|
||||||
|
|
||||||
build_file(orig_zip, zip_name, dir, design.layout) if design.layout
|
build_file(orig_zip, zip_name, dir, design.layout) if design.layout
|
||||||
build_file(orig_zip, zip_name, dir, design.default_css) if design.default_css
|
build_file(orig_zip, zip_name, dir, design.css_default) if design.css_default
|
||||||
build_file(orig_zip, zip_name, dir, design.reset_css) if design.reset_css
|
build_file(orig_zip, zip_name, dir, design.css_reset) if design.css_reset
|
||||||
|
|
||||||
['themes', 'javascripts', 'images'].each do |type|
|
['themes', 'javascripts', 'images'].each do |type|
|
||||||
design.send(type).each do |object|
|
design.send(type).each do |object|
|
||||||
|
|
|
@ -7,7 +7,7 @@ class SessionsController < Devise::SessionsController
|
||||||
# login_password = params[:user][:password]
|
# login_password = params[:user][:password]
|
||||||
# login_uid = params[:user][:nccu_ldap_uid]
|
# login_uid = params[:user][:nccu_ldap_uid]
|
||||||
login_password = params[:user][:password]
|
login_password = params[:user][:password]
|
||||||
login_email = params[:user][:login]
|
login_email = params[:user][:email]
|
||||||
result = false
|
result = false
|
||||||
resource = User.first(conditions:{ email: login_email })
|
resource = User.first(conditions:{ email: login_email })
|
||||||
set_flash_message(:notice, :signed_in) if is_navigational_format?
|
set_flash_message(:notice, :signed_in) if is_navigational_format?
|
||||||
|
|
|
@ -181,13 +181,13 @@ module ApplicationHelper
|
||||||
stylesheets << "<link href='/assets/bootstrap-orbit.css' rel='stylesheet' type='text/css' />\n"
|
stylesheets << "<link href='/assets/bootstrap-orbit.css' rel='stylesheet' type='text/css' />\n"
|
||||||
stylesheets << "<link href='/assets/style.css' rel='stylesheet' type='text/css' />\n"
|
stylesheets << "<link href='/assets/style.css' rel='stylesheet' type='text/css' />\n"
|
||||||
end
|
end
|
||||||
stylesheets << "<link href='#{page.design.reset_css.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.reset_css
|
stylesheets << "<link href='#{page.design.css_reset.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_reset
|
||||||
stylesheets << "<link href='/assets/bootstrap.css' rel='stylesheet' type='text/css' />\n"
|
stylesheets << "<link href='/assets/bootstrap.css' rel='stylesheet' type='text/css' />\n"
|
||||||
stylesheets << "<link href='/assets/font-awesome.css' rel='stylesheet' type='text/css' />\n"
|
stylesheets << "<link href='/assets/font-awesome.css' rel='stylesheet' type='text/css' />\n"
|
||||||
stylesheets << "<link href='/assets/orbit-bar.css' rel='stylesheet' type='text/css' />\n"
|
stylesheets << "<link href='/assets/orbit-bar.css' rel='stylesheet' type='text/css' />\n"
|
||||||
stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n"
|
stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n"
|
||||||
stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n"
|
stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n"
|
||||||
stylesheets << "<link href='#{page.design.default_css.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.default_css
|
stylesheets << "<link href='#{page.design.css_default.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_default
|
||||||
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
|
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
|
||||||
stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme
|
stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme
|
||||||
stylesheets
|
stylesheets
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class CssDefault < Stylesheet
|
||||||
|
|
||||||
|
belongs_to :design
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
class CssReset < Stylesheet
|
||||||
|
|
||||||
|
belongs_to :design
|
||||||
|
|
||||||
|
end
|
|
@ -3,25 +3,27 @@ class Design
|
||||||
include Mongoid::Timestamps
|
include Mongoid::Timestamps
|
||||||
include ParserLayout
|
include ParserLayout
|
||||||
|
|
||||||
field :title, :type => String
|
|
||||||
field :author, :type => String
|
field :author, :type => String
|
||||||
field :intro, :type => String
|
field :intro, :type => String
|
||||||
|
field :title, :type => String
|
||||||
field :version, :type => String
|
field :version, :type => String
|
||||||
|
|
||||||
|
has_one :css_default, :autosave => true, :dependent => :destroy
|
||||||
|
has_one :layout, :autosave => true, :dependent => :destroy
|
||||||
|
has_one :css_reset, :autosave => true, :dependent => :destroy
|
||||||
|
has_many :images, :autosave => true, :dependent => :destroy
|
||||||
|
has_many :javascripts, :autosave => true, :dependent => :destroy
|
||||||
has_many :pages
|
has_many :pages
|
||||||
|
has_many :themes, :autosave => true, :dependent => :destroy
|
||||||
embeds_one :layout, :cascade_callbacks => true
|
|
||||||
embeds_one :default_css, :class_name => "Stylesheet", :cascade_callbacks => true
|
accepts_nested_attributes_for :images, :allow_destroy => true
|
||||||
embeds_one :reset_css, :class_name => "Stylesheet", :cascade_callbacks => true
|
accepts_nested_attributes_for :javascripts, :allow_destroy => true
|
||||||
embeds_many :themes, :cascade_callbacks => true
|
accepts_nested_attributes_for :themes, :allow_destroy => true
|
||||||
embeds_many :javascripts, :cascade_callbacks => true
|
|
||||||
embeds_many :images, :as => :design_image, :cascade_callbacks => true
|
validates_presence_of :author, :title
|
||||||
# embeds_many :custom_images, :class_name => 'Image', :cascade_callbacks => true
|
|
||||||
|
|
||||||
validates_presence_of :title
|
|
||||||
validates_presence_of :author
|
|
||||||
|
|
||||||
after_save :parse_css_for_images
|
after_save :parse_css_for_images
|
||||||
|
|
||||||
|
|
||||||
def new_files=(*attrs)
|
def new_files=(*attrs)
|
||||||
attrs[0].map do |key,items_ary| #Loop by JSs,Themes,Imgs
|
attrs[0].map do |key,items_ary| #Loop by JSs,Themes,Imgs
|
||||||
|
@ -66,13 +68,9 @@ class Design
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def parse_css_for_images
|
def parse_css_for_images
|
||||||
if (self.default_css && self.default_css.changed)
|
self.css_default.parse_urls
|
||||||
self.default_css.parse_urls
|
|
||||||
end
|
|
||||||
self.themes.each do |theme|
|
self.themes.each do |theme|
|
||||||
if theme.changed?
|
theme.parse_urls
|
||||||
theme.parse_urls
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
parse_body_for_images(self)
|
parse_body_for_images(self)
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,14 @@ class DesignFile
|
||||||
|
|
||||||
mount_uploader :file, AssetUploader
|
mount_uploader :file, AssetUploader
|
||||||
|
|
||||||
field :to_save, :type => Boolean
|
field :name
|
||||||
field :to_destroy, :type => Boolean
|
|
||||||
|
before_save :set_name
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def set_name
|
||||||
|
self.name = self.file_identifier
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,23 @@
|
||||||
class Image < DesignFile
|
class Image
|
||||||
|
include Mongoid::Document
|
||||||
|
include Mongoid::Timestamps
|
||||||
|
|
||||||
field :in_css, :type => Boolean
|
|
||||||
field :name
|
|
||||||
field :html_id
|
field :html_id
|
||||||
field :html_class
|
field :html_class
|
||||||
|
field :in_css, :type => Boolean, :default => false
|
||||||
embedded_in :design_image, polymorphic: true
|
field :in_html, :type => Boolean, :default => false
|
||||||
|
field :name
|
||||||
|
|
||||||
mount_uploader :file, ImageUploader
|
mount_uploader :file, ImageUploader
|
||||||
end
|
|
||||||
|
belongs_to :design
|
||||||
|
|
||||||
|
before_save :set_name
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def set_name
|
||||||
|
self.name = self.file_identifier
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -1,3 +1,3 @@
|
||||||
class Javascript < DesignFile
|
class Javascript < DesignFile
|
||||||
embedded_in :design
|
belongs_to :design
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ class Layout < DesignFile
|
||||||
field :body
|
field :body
|
||||||
|
|
||||||
embeds_one :menu
|
embeds_one :menu
|
||||||
embedded_in :design
|
belongs_to :design
|
||||||
embeds_many :layout_parts
|
embeds_many :layout_parts
|
||||||
|
|
||||||
before_save :parse_layout
|
before_save :parse_layout
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class Stylesheet < DesignFile
|
class Stylesheet < DesignFile
|
||||||
embedded_in :design
|
belongs_to :design
|
||||||
mount_uploader :file_orig, AssetUploader
|
mount_uploader :file_orig, AssetUploader
|
||||||
|
|
||||||
def parse_urls
|
def parse_urls
|
||||||
|
@ -11,7 +11,9 @@ class Stylesheet < DesignFile
|
||||||
content.scan(/(?<=url)(.*?)(?=\))/){
|
content.scan(/(?<=url)(.*?)(?=\))/){
|
||||||
css_name = $1.gsub(' ','').gsub('(','')
|
css_name = $1.gsub(' ','').gsub('(','')
|
||||||
name = File.basename(css_name).gsub(/[\\\"]/, '')
|
name = File.basename(css_name).gsub(/[\\\"]/, '')
|
||||||
file_name = images.detect{ |i| i.file_identifier.eql?(name) }.file_url rescue nil
|
image = images.detect{ |i| i.file_identifier.eql?(name) } rescue nil
|
||||||
|
image.update_attribute(:in_css, true) if image
|
||||||
|
file_name = image.file_url rescue nil
|
||||||
names << [css_name, file_name]
|
names << [css_name, file_name]
|
||||||
}
|
}
|
||||||
names.each do |name|
|
names.each do |name|
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
class Theme < Stylesheet
|
class Theme < Stylesheet
|
||||||
field :name
|
|
||||||
|
|
||||||
embedded_in :design
|
belongs_to :design
|
||||||
|
|
||||||
before_save :set_name
|
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def set_name
|
def set_name
|
||||||
self.name = File.basename(self.file_identifier,".css")
|
self.name = File.basename(self.file_identifier, ".css")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,7 +24,7 @@ class ImageUploader < CarrierWave::Uploader::Base
|
||||||
# Override the directory where uploaded files will be stored.
|
# Override the directory where uploaded files will be stored.
|
||||||
# This is a sensible default for uploaders that are meant to be mounted:
|
# This is a sensible default for uploaders that are meant to be mounted:
|
||||||
def store_dir
|
def store_dir
|
||||||
"image/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
"#{model.id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Provide a default URL as a default if there hasn't been a file uploaded:
|
# Provide a default URL as a default if there hasn't been a file uploaded:
|
||||||
|
@ -48,7 +48,7 @@ class ImageUploader < CarrierWave::Uploader::Base
|
||||||
# end
|
# end
|
||||||
|
|
||||||
version :thumb do
|
version :thumb do
|
||||||
process :resize_to_fit => [200, 200]
|
process :resize_to_limit => [200, 200]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add a white list of extensions which are allowed to be uploaded.
|
# Add a white list of extensions which are allowed to be uploaded.
|
||||||
|
|
|
@ -1,60 +1,24 @@
|
||||||
<% content_for :page_specific_css do %>
|
<%= form_for @design, :url => admin_design_path(@design), :html => {:class => 'form-horizontal'}, :remote => true do |f| %>
|
||||||
<%= stylesheet_link_tag "design" %>
|
<%= f.error_messages %>
|
||||||
<% end %>
|
<div class="control-group">
|
||||||
<% content_for :page_specific_javascript do %>
|
<%= f.label :title, t('admin.title'), :class => "control-label" %>
|
||||||
<%= javascript_include_tag "design" %>
|
<div class="controls">
|
||||||
|
<%= f.text_field :title %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :author, t('admin.author'), :class => "control-label" %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_field :author %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :intro, t('admin.intro'), :class => "control-label" %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_field :intro %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<%= f.submit t('update') %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<p>
|
|
||||||
<%= f.label :title, t('admin.title') %>
|
|
||||||
<%= f.text_field :title, :class => 'text' %>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<%= f.label :author, t('admin.author') %>
|
|
||||||
<%= f.text_field :author, :class => 'text' %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<%= f.label :intro, t('admin.intro') %>
|
|
||||||
<%= f.text_field :intro, :class => 'text' %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<%= f.label "layout", t('admin.layout') %>
|
|
||||||
<% if @design.layout.blank? %>
|
|
||||||
<%= fields_for 'design[layout]' do |f| %>
|
|
||||||
<%= f.file_field :file %>
|
|
||||||
<%#= f.hidden_field :to_save, :value => true %>
|
|
||||||
<% end %>
|
|
||||||
<% else %>
|
|
||||||
<%= File.basename (@design.layout.file.url) %>
|
|
||||||
<% end %>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<%= f.label "default_css", t('admin.default_css') %>
|
|
||||||
<% if @design.default_css.blank? %>
|
|
||||||
<%= fields_for 'design[default_css]' do |f| %>
|
|
||||||
<%= f.file_field :file %>
|
|
||||||
<%#= f.hidden_field :to_save, :value => true %>
|
|
||||||
<% end %>
|
|
||||||
<% else %>
|
|
||||||
<%= File.basename (@design.default_css.file.url) rescue "" %>
|
|
||||||
<% end %>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<%= f.label :themes, t('admin.themes') %>
|
|
||||||
<ul>
|
|
||||||
<% @design.themes.each do |theme| %>
|
|
||||||
<%= render :partial => 'design_file', :object => theme, :locals => { :field_name => "themes", :f => f, :classes => "r_destroy, r_edit" } %>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
<%= render :partial => 'new_design_file', :object => @design.themes.build, :locals => { :field_name => "themes", :f => f, :classes => "r_destroy" } %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<%#= render :partial => 'design_file', :locals => { :object => @design, :field_name => "javascripts", :f => f, :classes => "r_destroy, r_edit" } %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<%#= render :partial => 'design_file', :locals => { :object => @design, :field_name => "images", :f => f, :classes => "r_destroy, r_snapshot" } %>
|
|
||||||
</p>
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<tr>
|
||||||
|
<td><%= image.name %></td>
|
||||||
|
<td><%= image_tag image.file.thumb %></td>
|
||||||
|
<td><%= number_to_human_size(image.file.file.file_length) %></td>
|
||||||
|
<td><%= image.file.url %></td>
|
||||||
|
</tr>
|
|
@ -0,0 +1,40 @@
|
||||||
|
<table id='image_list' class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="span1"><%= t(:name) %></th>
|
||||||
|
<th class="span1"><%= t(:image) %></th>
|
||||||
|
<th class="span1"><%= t(:size) %></th>
|
||||||
|
<th class="span4"><%= t(:url) %></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="tbody_assets" class="sort-holder">
|
||||||
|
<%= render :partial => 'image', :collection => @design.images %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="modal hide fade" id="imageModal" tabindex="-1" role="dialog" aria-labelledby="imageModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
|
<h3 id="imageModalLabel">Add image</h3>
|
||||||
|
</div>
|
||||||
|
<%= form_for :image, :url => upload_image_admin_design_path, :html => {:id => 'ajaxForm', :class => 'form-horizontal'}, :method => :post do |f| %>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :image, t('admin.image'), :class => "control-label" %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.file_field :file %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
||||||
|
<%= f.submit t(:add), :class => "btn btn-primary" %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-actions form-fixed pagination-right">
|
||||||
|
<button class="btn btn-primary" href="#imageModal" data-toggle="modal"><%= t(:add) %></button>
|
||||||
|
</div>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<%= form_for :file, :url => update_file_admin_design_path(:type => type, :object_id => object.id), :remote => true, :method => :post do |f| %>
|
||||||
|
<div id='post-body-content'>
|
||||||
|
<%= f.text_area :content, :class => 'middle', :value => object.file.read.force_encoding('UTF-8') %>
|
||||||
|
</div>
|
||||||
|
<div class="form-actions form-fixed pagination-right">
|
||||||
|
<button class="btn btn-primary"><%= t(:save) %></button>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
|
@ -4,10 +4,40 @@
|
||||||
|
|
||||||
<h1><%= t('admin.editing_design') %></h1>
|
<h1><%= t('admin.editing_design') %></h1>
|
||||||
|
|
||||||
<%= form_for @design, :url => admin_design_path(@design),:html => {:multipart => true} do |f| %>
|
<ul class="nav nav-tabs" id="myTab">
|
||||||
<%= f.error_messages %>
|
<li class="active"><a href="#info" data-toggle="tab"><%= t('design.info') %></a></li>
|
||||||
<%= render :partial => "form", :locals => { :f => f } %>
|
<li><a href="#layout" data-toggle="tab"><%= @design.layout.name %></a></li>
|
||||||
<p>
|
<li><a href="#css_default" data-toggle="tab"><%= @design.css_default.name %></a></li>
|
||||||
<%= f.submit t('update') %> <%= link_back %>
|
<li><a href="#css_reset" data-toggle="tab"><%= @design.css_reset.name %></a></li>
|
||||||
</p>
|
<li class="dropdown">
|
||||||
<% end %>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%= t('design.themes') %> <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<% @design.themes.each do |theme| %>
|
||||||
|
<li><a href="#<%= dom_id theme %>" data-toggle="tab"><%= theme.name %></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%= t('design.javascripts') %> <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<% @design.javascripts.each do |js| %>
|
||||||
|
<li><a href="#<%= dom_id js %>" data-toggle="tab"><%= js.name %></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#images" data-toggle="tab"><%= t('design.images') %></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="info"><%= render :partial => 'form' %></div>
|
||||||
|
<div class="tab-pane" id="layout"><%= render :partial => 'tab_form', :locals => {:type => :layout, :object => @design.layout} %></div>
|
||||||
|
<div class="tab-pane" id="css_default"><%= render :partial => 'tab_form', :locals => {:type => :css_default, :object => @design.css_default} %></div>
|
||||||
|
<div class="tab-pane" id="css_reset"><%= render :partial => 'tab_form', :locals => {:type => :css_reset, :object => @design.css_reset} %></div>
|
||||||
|
<% @design.themes.each do |theme| %>
|
||||||
|
<div class="tab-pane" id="<%= dom_id theme %>"><%= render :partial => 'tab_form', :locals => {:type => :css_reset, :object => theme} %></div>
|
||||||
|
<% end %>
|
||||||
|
<% @design.javascripts.each do |js| %>
|
||||||
|
<div class="tab-pane" id="<%= dom_id js %>"><%= render :partial => 'tab_form', :locals => {:type => :css_reset, :object => js} %></div>
|
||||||
|
<% end %>
|
||||||
|
<div class="tab-pane" id="images"><%= render :partial => 'images' %></div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
// $('.modal').modal('hide')
|
|
@ -0,0 +1,9 @@
|
||||||
|
<% if !request.xhr? %>
|
||||||
|
<textarea>
|
||||||
|
<% end %>
|
||||||
|
$('#image_list').append("<%= j render :partial => 'image', :object => @image %>");
|
||||||
|
$('#imageModal').modal('hide');
|
||||||
|
$('#ajaxForm').resetForm();
|
||||||
|
<% if !request.xhr? %>
|
||||||
|
</textarea>
|
||||||
|
<% end %>
|
|
@ -11,8 +11,8 @@
|
||||||
<p class="alert hide">You need to sign in or sign up before continuing.</p>
|
<p class="alert hide">You need to sign in or sign up before continuing.</p>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<div class="control-group clear">
|
<div class="control-group clear">
|
||||||
<%= f.label :login ,t("admin.user_new_interface.email")%>
|
<%= f.label :email ,t("admin.user_new_interface.email")%>
|
||||||
<%= f.text_field :login, :placeholder => t("admin.user_new_interface.email"), :style => "width: 330px;" %>
|
<%= f.text_field :email, :placeholder => t("admin.user_new_interface.email"), :style => "width: 330px;" %>
|
||||||
<span class="help-inline">Please correct the error</span>
|
<span class="help-inline">Please correct the error</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group clear">
|
<div class="control-group clear">
|
||||||
|
|
|
@ -58,6 +58,8 @@ Orbit::Application.routes.draw do
|
||||||
end
|
end
|
||||||
member do
|
member do
|
||||||
post 'edit_file' => 'designs#edit_file'
|
post 'edit_file' => 'designs#edit_file'
|
||||||
|
post 'update_file' => 'designs#update_file'
|
||||||
|
post 'upload_image' => 'designs#upload_image'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :infos do
|
resources :infos do
|
||||||
|
|
|
@ -22,7 +22,7 @@ module ParserLayout
|
||||||
|
|
||||||
body.css('.page_image').each do |page_image|
|
body.css('.page_image').each do |page_image|
|
||||||
image = design.images.where( file: File.basename(page_image['src']))[0]
|
image = design.images.where( file: File.basename(page_image['src']))[0]
|
||||||
image.update_attributes(:name => File.basename(page_image['src']), :html_id => page_image['id'], :html_class => page_image['class']) if image
|
image.update_attributes(:html_id => page_image['id'], :html_class => page_image['class'], :in_html => true) if image
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace :dev do
|
||||||
|
|
||||||
design = Design.new(:title => "Fraisier", :author => "Paul", :intro => "Strawberry cake")
|
design = Design.new(:title => "Fraisier", :author => "Paul", :intro => "Strawberry cake")
|
||||||
|
|
||||||
design.build_default_css(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
design.build_css_default(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
||||||
|
|
||||||
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
||||||
#
|
#
|
||||||
|
@ -89,7 +89,7 @@ namespace :dev do
|
||||||
|
|
||||||
design_1 = Design.new(:title => "Bob", :author => "Me", :intro => "Moran")
|
design_1 = Design.new(:title => "Bob", :author => "Me", :intro => "Moran")
|
||||||
|
|
||||||
design_1.build_default_css(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
design_1.build_css_default(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
||||||
|
|
||||||
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
||||||
#
|
#
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace :pages do
|
||||||
|
|
||||||
design = Design.new(:title => "Fraisier", :author => "Paul", :intro => "Strawberry cake")
|
design = Design.new(:title => "Fraisier", :author => "Paul", :intro => "Strawberry cake")
|
||||||
|
|
||||||
design.build_default_css(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
design.build_css_default(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
||||||
|
|
||||||
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
||||||
#
|
#
|
||||||
|
@ -37,7 +37,7 @@ namespace :pages do
|
||||||
|
|
||||||
design_1 = Design.new(:title => "Bob", :author => "Me", :intro => "Moran")
|
design_1 = Design.new(:title => "Bob", :author => "Me", :intro => "Moran")
|
||||||
|
|
||||||
design_1.build_default_css(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
design_1.build_css_default(:file => File.open("#{Rails.root}/lib/fraisier/default.css"))
|
||||||
|
|
||||||
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
# image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue