filemanager and some update for file uploader . added file uploader to kernel
This commit is contained in:
		
							parent
							
								
									3328a41b55
								
							
						
					
					
						commit
						f920a4f6ba
					
				| 
						 | 
				
			
			@ -26,10 +26,11 @@ CKEDITOR.editorConfig = function( config ) {
 | 
			
		|||
	// config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images';
 | 
			
		||||
	// config.filebrowserUploadUrl = '/uploader/upload.php';
 | 
			
		||||
 | 
			
		||||
	config.filebrowserBrowseUrl = "<%= Rails.application.routes.url_helpers.file_upload_admin_assets_path %>"
 | 
			
		||||
  	config.filebrowserUploadUrl = "<%= Rails.application.routes.url_helpers.file_upload_admin_assets_path %>"
 | 
			
		||||
	config.filebrowserBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path %>";
 | 
			
		||||
	config.filebrowserImageBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path %>?type=images&module_app_id=<%= ModuleApp.first(conditions: {title: 'Asset'}).id.to_s %>";
 | 
			
		||||
  	// config.filebrowserUploadUrl = "<%= Rails.application.routes.url_helpers.file_upload_admin_assets_path %>";
 | 
			
		||||
 | 
			
		||||
	config.contentsCss  = '/orbit_4.0.1/assets/javascripts/lib/ckeditor/plugins/stylesheetparser/samples/assets/sample.css';
 | 
			
		||||
	// config.contentsCss  = '/orbit_4.0.1/assets/javascripts/lib/ckeditor/plugins/stylesheetparser/samples/assets/sample.css';
 | 
			
		||||
	
 | 
			
		||||
	// Load from a list of definitions.
 | 
			
		||||
	// config.stylesSet = [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,17 @@ class Admin::AssetsController < OrbitBackendController
 | 
			
		|||
  before_filter :setup_vars
 | 
			
		||||
  
 | 
			
		||||
  def index
 | 
			
		||||
    @assets = (params[:sort] || @filter) ? get_sorted_and_filtered("asset") : Asset.all.page(params[:page]).per(10)
 | 
			
		||||
    @assets = (params[:sort] || @filter) ? get_sorted_and_filtered("asset") : Asset.all.desc(:created_at).page(params[:page]).per(10)
 | 
			
		||||
    if params[:type] == "images"
 | 
			
		||||
      @assets = @assets.where(:content_type => /^image/)
 | 
			
		||||
    end
 | 
			
		||||
    @tag = ModuleTag.new
 | 
			
		||||
 | 
			
		||||
    @module_app = ModuleApp.find(params[:module_app_id]) rescue nil
 | 
			
		||||
    raise ModuleAppError, 'Can not find ModuleApp' if @module_app.nil?
 | 
			
		||||
    @module_app_id = @module_app.id rescue nil 
 | 
			
		||||
    
 | 
			
		||||
   render :layout => "assets" 
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  def show
 | 
			
		||||
| 
						 | 
				
			
			@ -95,11 +105,31 @@ class Admin::AssetsController < OrbitBackendController
 | 
			
		|||
    redirect_to assets_url(:filter => params[:filter], :direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def delete_files
 | 
			
		||||
    @files = params[:files]
 | 
			
		||||
    @files.each do |file|
 | 
			
		||||
      asset = Asset.find(file)
 | 
			
		||||
      asset.destroy
 | 
			
		||||
    end
 | 
			
		||||
    @assets = (params[:sort] || @filter) ? get_sorted_and_filtered("asset") : Asset.all.desc(:created_at).page(params[:page]).per(10)
 | 
			
		||||
    if params[:type] == "images"
 | 
			
		||||
      @assets = @assets.where(:content_type => /^image/)
 | 
			
		||||
    end
 | 
			
		||||
    # render :json =>{"success"=>true}.to_json
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def file_upload
 | 
			
		||||
    @asset = Asset.new
 | 
			
		||||
    @asset_categories = AssetCategory.all
 | 
			
		||||
    @tags = get_tags
 | 
			
		||||
    render :layout => false
 | 
			
		||||
    @files = params['files']
 | 
			
		||||
    a = Array.new
 | 
			
		||||
    @files.each do |file|
 | 
			
		||||
      @asset = current_user.assets.new
 | 
			
		||||
      @asset.data = file
 | 
			
		||||
      @asset.title_translations = {:en => file.original_filename, :zh_tw => file.original_filename}
 | 
			
		||||
      # @asset.title_translations[:zh_tw] = file.original_filename
 | 
			
		||||
      @asset.save!
 | 
			
		||||
      a << {"url"=>@asset.data.url}
 | 
			
		||||
    end
 | 
			
		||||
    render :json=>{"files"=>a}.to_json
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def file_select
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,13 +5,16 @@ class Asset
 | 
			
		|||
  include OrbitTag::Taggable
 | 
			
		||||
 | 
			
		||||
  mount_uploader :data, FileAssetUploader
 | 
			
		||||
  before_save :update_asset_attributes
 | 
			
		||||
 | 
			
		||||
  field :filename
 | 
			
		||||
  field :description, localize: true
 | 
			
		||||
  field :title, localize: true
 | 
			
		||||
  field :content_type
 | 
			
		||||
  field :file_size
 | 
			
		||||
  
 | 
			
		||||
  validates :title, :at_least_one => true
 | 
			
		||||
  validates :description, :at_least_one => true
 | 
			
		||||
 | 
			
		||||
  validates_presence_of :data
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +25,14 @@ class Asset
 | 
			
		|||
 | 
			
		||||
  protected
 | 
			
		||||
 
 | 
			
		||||
  
 | 
			
		||||
  def update_asset_attributes
 | 
			
		||||
    if data.present? && data_changed?
 | 
			
		||||
      self.content_type = data.file.content_type
 | 
			
		||||
      self.file_size = data.file.size
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def clean_tags
 | 
			
		||||
    self.tagged_ids.delete('')
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
class Ckeditor::Asset
 | 
			
		||||
  include Ckeditor::Orm::Mongoid::AssetBase
 | 
			
		||||
 | 
			
		||||
  delegate :url, :current_path, :size, :content_type, :filename, :to => :data
 | 
			
		||||
  
 | 
			
		||||
  validates_presence_of :data
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
class Ckeditor::AttachmentFile < Ckeditor::Asset
 | 
			
		||||
  mount_uploader :data, CkeditorAttachmentFileUploader, :mount_on => :data_file_name
 | 
			
		||||
 | 
			
		||||
  def url_thumb
 | 
			
		||||
    @url_thumb ||= Ckeditor::Utils.filethumb(filename)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
class Ckeditor::Picture < Ckeditor::Asset
 | 
			
		||||
  mount_uploader :data, CkeditorPictureUploader, :mount_on => :data_file_name
 | 
			
		||||
 | 
			
		||||
  def url_content
 | 
			
		||||
    url(:content)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ class User
 | 
			
		|||
  has_one :desktop, :autosave => true, :dependent => :destroy
 | 
			
		||||
  has_one :facebook, :autosave => true, :dependent => :destroy
 | 
			
		||||
  has_many :other_accounts, :autosave => true, :dependent => :destroy
 | 
			
		||||
  has_many :assets, as: :assetable
 | 
			
		||||
  # has_many :journals, :autosave => true, :dependent => :destroy
 | 
			
		||||
  # has_many :papers, :autosave => true, :dependent => :destroy
 | 
			
		||||
  has_and_belongs_to_many :sub_role_tags
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,23 @@
 | 
			
		|||
<tr id="asset_<%= asset.id %>" class="with_action">
 | 
			
		||||
	<td><%= check_box_tag 'to_delete[]', asset.id, false, :class => "checkbox_in_list" %></td>
 | 
			
		||||
	<td><%= asset.title rescue nil %></td>
 | 
			
		||||
	<td>
 | 
			
		||||
		<%= check_box_tag 'files[]', asset.id, false, :class => "checkbox_in_list" %>
 | 
			
		||||
		<input type="hidden" value="<%= asset.data.url %>" id="url_<%= asset.id %>" />
 | 
			
		||||
		<% @site_valid_locales.each_with_index do |locale, i| %>
 | 
			
		||||
			<input type="hidden" value="<%= asset.description_translations[locale] rescue nil %>" id="<%= locale %>_desc_<%= asset.id %>" />
 | 
			
		||||
			<input type="hidden" value="<%= asset.title_translations[locale] rescue nil %>" id="<%= locale %>_title_<%= asset.id %>" />
 | 
			
		||||
		<% end %>
 | 
			
		||||
	</td>
 | 
			
		||||
	<td><%= asset.title_translations[I18n.locale.to_s] rescue nil %></td>
 | 
			
		||||
	<!-- <td>
 | 
			
		||||
		<i class="icons-pictures img-peview" rel="popover" data-content="<img src='<%= asset.data.url %>' />" data-original-title="<%= asset.data.filename %>"></i>
 | 
			
		||||
		<div class="quick-edit">
 | 
			
		||||
			<ul class="nav nav-pills hide">
 | 
			
		||||
				<li><%= link_to t(:edit), edit_admin_asset_path(asset), :remote => true, :class => 'edit'  %></li>
 | 
			
		||||
				<li class="dropdown"><%= link_to t(:delete_), admin_asset_path(asset), :confirm => t('sure?'), :method => :delete, :class => 'delete' %></li>
 | 
			
		||||
				<li><%#= link_to t(:edit), edit_admin_asset_path(asset), :remote => true, :class => 'edit'  %></li>
 | 
			
		||||
				<li class="dropdown"><%#= link_to t(:delete_), admin_asset_path(asset), :confirm => t('sure?'), :method => :delete, :class => 'delete' %></li>
 | 
			
		||||
			</ul>
 | 
			
		||||
		</div>
 | 
			
		||||
	</td>
 | 
			
		||||
	<td><%= asset.data.file.content_type rescue nil %></td>
 | 
			
		||||
	</td> -->
 | 
			
		||||
	<!-- <td><%#= asset.data.file.content_type rescue nil %></td> -->
 | 
			
		||||
	<td><%= number_to_human_size(asset.data.file.file_length) rescue nil %></td>
 | 
			
		||||
	<td><%= asset.description rescue nil %></td>
 | 
			
		||||
	<td>
 | 
			
		||||
| 
						 | 
				
			
			@ -22,10 +29,7 @@
 | 
			
		|||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
	</td>
 | 
			
		||||
	<td>
 | 
			
		||||
		<a href="#" class="editform">Edit</a>
 | 
			
		||||
	</td>
 | 
			
		||||
</tr>
 | 
			
		||||
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
    $('.img-peview').popover({
 | 
			
		||||
            delay: { show: 100, hide: 300 }
 | 
			
		||||
    });
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
 | 
			
		||||
$("#tbody_assets").html("<%= j render :partial => 'asset', :collection => @assets %>");
 | 
			
		||||
$("#asset_pagination").html("<%= j paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
 | 
			
		||||
| 
						 | 
				
			
			@ -1,30 +1,482 @@
 | 
			
		|||
<%= render 'filter' %>
 | 
			
		||||
<style>
 | 
			
		||||
/* File Upload */
 | 
			
		||||
#upload-panel {
 | 
			
		||||
	clear: both;
 | 
			
		||||
}
 | 
			
		||||
#upload-panel iframe {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	border: none;
 | 
			
		||||
}
 | 
			
		||||
#fileupload {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	clear: both;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	margin: 40px 0 15px;
 | 
			
		||||
	height: 254px;
 | 
			
		||||
	border: 1px solid #d4d4d4;
 | 
			
		||||
	border-radius: 4px;
 | 
			
		||||
	background-color: #FDFDFD;
 | 
			
		||||
	/*-webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, .15) inset;
 | 
			
		||||
			box-shadow: 0px 0px 10px rgba(0, 0, 0, .15) inset;*/
 | 
			
		||||
}
 | 
			
		||||
#fileupload table {
 | 
			
		||||
	margin: 0;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-buttonbar .navbar {
 | 
			
		||||
	margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-buttonbar .navbar .add-photo {
 | 
			
		||||
	border: none;
 | 
			
		||||
	border-right: 1px solid #d4d4d4;
 | 
			
		||||
	background-color: transparent;
 | 
			
		||||
	padding: 10px 15px 10px;
 | 
			
		||||
	color: #777777;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
	text-shadow: 0 1px 0 #ffffff;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-buttonbar .navbar .add-photo:hover {
 | 
			
		||||
	color: #333333;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
	background-color: #EDEDED;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-buttonbar .navbar .fileinput-button {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-buttonbar .navbar .fileinput-button input {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	font-size: 23px;
 | 
			
		||||
	opacity: 0;
 | 
			
		||||
	-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
 | 
			
		||||
	filter: alpha(opacity=0);
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	-webkit-transform: translate(-300px, 0) scale(4);
 | 
			
		||||
	   -moz-transform: translate(-300px, 0) scale(4);
 | 
			
		||||
		-ms-transform: translate(-300px, 0) scale(4);
 | 
			
		||||
		 -o-transform: translate(-300px, 0) scale(4);
 | 
			
		||||
			transform: translate(-300px, 0) scale(4);
 | 
			
		||||
	direction: ltr;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-buttonbar .navbar-inner {
 | 
			
		||||
	border-width: 0 0 1px;
 | 
			
		||||
	border-radius: 4px 4px 0 0;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#fileupload .fileupload-progress .progress {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	margin-bottom: 0;
 | 
			
		||||
	height: 5px;
 | 
			
		||||
	border-radius: 0;
 | 
			
		||||
	background-color: transparent;
 | 
			
		||||
	background-image: none;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-progress .progress-success.progress-striped .bar {
 | 
			
		||||
	background-color: #0088CC;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-progress .progress-extended {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 1px;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	padding-right: 15px;
 | 
			
		||||
	color: #0088CC;
 | 
			
		||||
	text-align: right;
 | 
			
		||||
	text-shadow: 0 1px 0 #ffffff;
 | 
			
		||||
	letter-spacing: -0.1em;
 | 
			
		||||
	font-size: 12px;
 | 
			
		||||
	font-family: 'Varela Round', sans-serif;
 | 
			
		||||
	line-height: 40px;
 | 
			
		||||
}
 | 
			
		||||
#fileupload .fileupload-buttonbar {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	z-index: 3;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #dropzone {
 | 
			
		||||
	margin: 15px 10px 10px;
 | 
			
		||||
	padding: 30px;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	font-size: 2em;
 | 
			
		||||
	font-family: 'Raleway';
 | 
			
		||||
	line-height: 1.2em;
 | 
			
		||||
	color: #e4e4e4;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #dropzone div[data-icons] {
 | 
			
		||||
	font-size: 4em;
 | 
			
		||||
	height: 70px;
 | 
			
		||||
	padding-top: 30px;
 | 
			
		||||
	text-shadow: 0px -1px 0px #ececec;
 | 
			
		||||
	color: #f5f5f5;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #dropzone.drop {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 37px;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
	border: 2px dashed #0088CC;
 | 
			
		||||
	border-radius: 10px;
 | 
			
		||||
	color: #0088CC;
 | 
			
		||||
	background-color: #FFFFFF;
 | 
			
		||||
	z-index: 0;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #dropzone.fade {
 | 
			
		||||
	opacity: .3;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #dropzone.in {
 | 
			
		||||
	opacity: .7;
 | 
			
		||||
	z-index: 2;
 | 
			
		||||
	border-color: #faa732;
 | 
			
		||||
	color: #faa732;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #dropzone.drop div[data-icons] {
 | 
			
		||||
	text-shadow: 0px -1px 0px #0c5f80;
 | 
			
		||||
	color: #0088CC;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #dropzone.in div[data-icons] {
 | 
			
		||||
	text-shadow: 0px -1px 0px #a28a10;
 | 
			
		||||
	color: #faa732;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	z-index: 1;
 | 
			
		||||
	height: 209px;
 | 
			
		||||
	margin: 2px 0;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .pane {
 | 
			
		||||
	margin-right: 2px;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .files {
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	padding: 10px 14px 10px 10px;
 | 
			
		||||
	list-style: none;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .files > li {
 | 
			
		||||
	padding: 10px;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .files > li:nth-child(even) {
 | 
			
		||||
	background-color: #e9e9e9;
 | 
			
		||||
	border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .files ul {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	list-style: none;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .files ul li {
 | 
			
		||||
	float: left;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .files ul li.action-bnt {
 | 
			
		||||
	float: right;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .preview {
 | 
			
		||||
	width: 80px;
 | 
			
		||||
	min-height: 1px;
 | 
			
		||||
	margin-right: 10px;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .name {
 | 
			
		||||
	width: 150px;
 | 
			
		||||
	max-width: 250px;
 | 
			
		||||
	margin-left: 15px;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .progress {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	left: -5px;
 | 
			
		||||
	right: -5px;
 | 
			
		||||
	bottom: -5px;
 | 
			
		||||
	margin-bottom: 0;
 | 
			
		||||
	height: 5px;
 | 
			
		||||
	box-shadow: none;
 | 
			
		||||
	background-color: transparent;
 | 
			
		||||
	background-image: none;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .size {
 | 
			
		||||
	width: 80px;
 | 
			
		||||
}
 | 
			
		||||
#fileupload #file-list .action-bnt {
 | 
			
		||||
	text-align: right;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
<ul class="nav nav-tabs  module-nav">
 | 
			
		||||
  <li class="active">
 | 
			
		||||
    <a href="#filemanager" data-toggle="tab">File Manager</a>
 | 
			
		||||
  </li>
 | 
			
		||||
  <li><a href="#upload" data-toggle="tab">Upload</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
<div class="tab-pane fade in active" id="filemanager">
 | 
			
		||||
	<a href="<%= admin_module_tags_path(:module_app_id => @module_app_id.to_s) %>"> Tag Management </a>
 | 
			
		||||
	<div id="panel_l" style="width:200px;float:left;margin:5px 5px 5px 5px;">
 | 
			
		||||
		preview is here
 | 
			
		||||
	</div>
 | 
			
		||||
	<div id="panel_r" class="tab-pane fade in active" style="width: 1200px;" >
 | 
			
		||||
		<table id="asset_sort_list" class="table main-list">
 | 
			
		||||
			<thead>
 | 
			
		||||
				<tr>
 | 
			
		||||
			      <th class="span1"></th>
 | 
			
		||||
      <th class="span4"></th>
 | 
			
		||||
      <th class="span1-2"></th>
 | 
			
		||||
      <th class="span1-2"></th>
 | 
			
		||||
      <th class="span1-2"></th>
 | 
			
		||||
      <th class="span1-2"></th>
 | 
			
		||||
      <th class="span1-2"></th>
 | 
			
		||||
			      <th class="span4">Name</th>
 | 
			
		||||
			      <th class="span1-2">Size</th>
 | 
			
		||||
			      <th class="span1-2">Description</th>
 | 
			
		||||
			      <th class="span2">Tags</th>
 | 
			
		||||
			      <th class="span1">Action</th>
 | 
			
		||||
				</tr>
 | 
			
		||||
			</thead>
 | 
			
		||||
			<tbody id="tbody_assets" class="sort-holder">
 | 
			
		||||
				<%= render :partial => 'asset', :collection => @assets %>
 | 
			
		||||
			</tbody>
 | 
			
		||||
		</table>
 | 
			
		||||
 | 
			
		||||
	</div>
 | 
			
		||||
	<div class="form-actions form-fixed pagination-right">
 | 
			
		||||
	<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:add), new_admin_asset_path, :remote => true, :class => 'btn btn-primary pull-right' %>
 | 
			
		||||
		<button class="btn btn-primary" id="insert_btn" style="display:none;">Insert</button>
 | 
			
		||||
		<button class="btn btn-primary" id="delete_btn" style="display:none;">Delete</button>
 | 
			
		||||
		<div id="asset_pagination" class="paginationFixed">
 | 
			
		||||
			<%= paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]}, :remote => true %>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="tab-pane fade" id="upload">
 | 
			
		||||
	 <form action="<%= file_upload_admin_assets_path %>", id='fileupload'>
 | 
			
		||||
    <!-- Redirect browsers with JavaScript disabled to the origin page -->
 | 
			
		||||
    <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
 | 
			
		||||
    <div class="fileupload-buttonbar">
 | 
			
		||||
      <div class="navbar">
 | 
			
		||||
        <div class="navbar-inner">
 | 
			
		||||
          <ul class="nav">
 | 
			
		||||
            <li>
 | 
			
		||||
              <div class="fileinput-button add-photo">
 | 
			
		||||
                <i class="icon-plus icon-white"></i>
 | 
			
		||||
                <span>Add files...</span>
 | 
			
		||||
                <input type="file" name="files[]" multiple>
 | 
			
		||||
              </div>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li>
 | 
			
		||||
              <button type="submit" class="start add-photo">
 | 
			
		||||
                <i class="icon-upload icon-white"></i>
 | 
			
		||||
                <span>Start upload</span>
 | 
			
		||||
              </button>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li>
 | 
			
		||||
              <button type="reset" class="cancel add-photo">
 | 
			
		||||
                <i class="icon-ban-circle icon-white"></i>
 | 
			
		||||
                <span>Cancel upload</span>
 | 
			
		||||
              </button>
 | 
			
		||||
            </li>
 | 
			
		||||
            <!-- <li>
 | 
			
		||||
              <button type="button" class="delete">
 | 
			
		||||
                <i class="icons-trash icon-white"></i>
 | 
			
		||||
                <span>Delete</span>
 | 
			
		||||
              </button>
 | 
			
		||||
            </li> -->
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <!-- The global progress information -->
 | 
			
		||||
      <div class="fileupload-progress">
 | 
			
		||||
          <!-- The global progress bar -->
 | 
			
		||||
          <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
 | 
			
		||||
              <div class="bar" style="width:0%;"></div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <!-- The extended global progress information -->
 | 
			
		||||
          <div class="progress-extended"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- Drop Zone -->
 | 
			
		||||
    <div id="dropzone" class="drop">
 | 
			
		||||
      <div data-icons=""></div>
 | 
			
		||||
      Drop files here
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- The loading indicator is shown during file processing -->
 | 
			
		||||
    <div class="fileupload-loading"></div>
 | 
			
		||||
    <!-- The table listing the files available for upload/download -->
 | 
			
		||||
    <div id="file-list" class="nano">
 | 
			
		||||
      <div class="content">
 | 
			
		||||
        <ul role="presentation" class="files clearfix">
 | 
			
		||||
        </ul>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </form>
 | 
			
		||||
</div>
 | 
			
		||||
<div id="editform" class="modal hide fade">
 | 
			
		||||
  <div class="modal-header">
 | 
			
		||||
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 | 
			
		||||
    <h3>Modal header</h3>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="modal-body">
 | 
			
		||||
    <p>One fine body…</p>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="modal-footer">
 | 
			
		||||
    <a href="#" class="btn" data-dismiss="modal">Close</a>
 | 
			
		||||
    <a href="#" class="btn btn-primary">Save changes</a>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<% content_for :page_specific_javascript do %>
 | 
			
		||||
	<%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %>
 | 
			
		||||
	<%= javascript_include_tag "inc/modal-preview" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/vendor/jquery.ui.widget.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/tmpl.min.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/load-image.min.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/canvas-to-blob.min.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/jquery.iframe-transport.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/jquery.fileupload.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/jquery.fileupload-fp.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/jquery.fileupload-ui.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/drop-zone.js" %>
 | 
			
		||||
<% end %>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
!function ($) {
 | 
			
		||||
    $.fn.checkListLength = function (param){
 | 
			
		||||
        _defaultSettings = {
 | 
			
		||||
            onlyOne: null,
 | 
			
		||||
        };
 | 
			
		||||
        _set = $.extend(_defaultSettings, param);
 | 
			
		||||
        $this = this;
 | 
			
		||||
        $li = this.children('li');
 | 
			
		||||
        $dropzone = $('#dropzone');
 | 
			
		||||
        if(($li.length - _set.onlyOne) == 0) {
 | 
			
		||||
		    $('#dropzone').fadeIn(300);
 | 
			
		||||
		} else {
 | 
			
		||||
		    $('#dropzone').fadeOut(300);
 | 
			
		||||
		};
 | 
			
		||||
		$('#file-list').nanoScroller({ scrollTop: 0, iOSNativeScrolling: true });
 | 
			
		||||
    }
 | 
			
		||||
}(window.jQuery);
 | 
			
		||||
$(function () {
 | 
			
		||||
    'use strict';
 | 
			
		||||
    // Initialize the jQuery File Upload widget:
 | 
			
		||||
    $('#fileupload').fileupload({
 | 
			
		||||
        maxFileSize: 5000000,
 | 
			
		||||
        acceptFileTypes: /(\.|\/)(gif|jpe?g|png|pdf|doc|docx|ppt|pptx|xls|xlsx)$/i,
 | 
			
		||||
        dropZone: $('#dropzone'),
 | 
			
		||||
        headers:{
 | 
			
		||||
            'X-CSRF-Token': $('meta[name="csrf-token"]').attr("content")
 | 
			
		||||
        }
 | 
			
		||||
    }).bind('fileuploadstop', function (e, data) {
 | 
			
		||||
    	window.location.reload();
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
$(document).ready(function(){
 | 
			
		||||
	var insertBtn = $("#insert_btn"),
 | 
			
		||||
		deleteBtn = $("#delete_btn"),
 | 
			
		||||
		url = null;
 | 
			
		||||
 | 
			
		||||
	$("#asset_sort_list").on(clickEvent,"input[type=checkbox]",function(){
 | 
			
		||||
		if($("input[type=checkbox]:checked").length == 1){
 | 
			
		||||
			url = window.location.protocol + "//" + window.location.host + $("#url_" + $("input[type=checkbox]:checked").val()).val();
 | 
			
		||||
			insertBtn.show();
 | 
			
		||||
		}else{
 | 
			
		||||
			insertBtn.hide();
 | 
			
		||||
			url = null;
 | 
			
		||||
		}
 | 
			
		||||
		if($("input[type=checkbox]:checked").length)
 | 
			
		||||
			deleteBtn.show();
 | 
			
		||||
		else
 | 
			
		||||
			deleteBtn.hide();
 | 
			
		||||
	})
 | 
			
		||||
	insertBtn.bind(clickEvent,function(){
 | 
			
		||||
		var alt_text = $("#"+language+"_desc_"+$("input[type=checkbox]:checked").val()).val();
 | 
			
		||||
		alt_text = (alt_text ? alt_text : "This is alt text");
 | 
			
		||||
		if(url){
 | 
			
		||||
			window.opener.CKEDITOR.tools.callFunction( funcNum, url, function() {
 | 
			
		||||
			    var element,
 | 
			
		||||
			        dialog = this.getDialog();
 | 
			
		||||
			    if ( dialog.getName() == 'image' ) {
 | 
			
		||||
			        element = dialog.getContentElement( 'info', 'txtAlt' );
 | 
			
		||||
			        if ( element )
 | 
			
		||||
			            element.setValue( alt_text );
 | 
			
		||||
			    }
 | 
			
		||||
			});
 | 
			
		||||
			window.close();
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
	deleteBtn.bind( clickEvent,function(){
 | 
			
		||||
		var items_to_delete = [],
 | 
			
		||||
			type = getUrlParam("type");
 | 
			
		||||
		$("input[type=checkbox]:checked").each(function(){
 | 
			
		||||
			items_to_delete.push($(this).val());
 | 
			
		||||
		})
 | 
			
		||||
		$.post("<%= delete_files_admin_assets_path %>",{"files":items_to_delete,"type":type},function(){
 | 
			
		||||
			deleteBtn.hide();
 | 
			
		||||
		})
 | 
			
		||||
	})
 | 
			
		||||
	$("#asset_sort_list").on(clickEvent,".editform",function(){
 | 
			
		||||
		$("#editform").modal("show");
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	function getUrlParam( paramName ) {
 | 
			
		||||
	    var reParam = new RegExp( '(?:[\?&]|&)' + paramName + '=([^&]+)', 'i' ) ;
 | 
			
		||||
	    var match = window.location.search.match(reParam) ;
 | 
			
		||||
 | 
			
		||||
	    return ( match && match.length > 1 ) ? match[ 1 ] : null ;
 | 
			
		||||
	}
 | 
			
		||||
	var funcNum = getUrlParam( 'CKEditorFuncNum' ),
 | 
			
		||||
		t = getUrlParam('CKEditor').split("_"),
 | 
			
		||||
		language = t[t.length-1];
 | 
			
		||||
 | 
			
		||||
	language = (language == "tw" ? "zh_tw" : language); 
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
</script>
 | 
			
		||||
<script id="template-upload" type="text/x-tmpl">
 | 
			
		||||
    {% for (var i=0, file; file=o.files[i]; i++) { %}
 | 
			
		||||
      <li class="template-upload fade">
 | 
			
		||||
        <ul class="clearfix">
 | 
			
		||||
            <li class="action-bnt">
 | 
			
		||||
              {% if (o.files.valid && !i) { %}
 | 
			
		||||
                <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
 | 
			
		||||
                  <div class="bar" style="width:0%;"></div>
 | 
			
		||||
                </div>
 | 
			
		||||
                {% if (!o.options.autoUpload) { %}
 | 
			
		||||
                  <button class="btn btn-primary start">
 | 
			
		||||
                    <i class="icon-upload icon-white"></i>
 | 
			
		||||
                  </button>
 | 
			
		||||
                {% } %}
 | 
			
		||||
              {% } %}
 | 
			
		||||
              {% if (!i) { %}
 | 
			
		||||
                <button class="btn btn-warning cancel">
 | 
			
		||||
                  <i class="icon-ban-circle icon-white"></i>
 | 
			
		||||
                </button>
 | 
			
		||||
              {% } %}
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="preview pull-left"><span class="fade"></span></li>
 | 
			
		||||
            <li class="name-size">
 | 
			
		||||
              <p>{%=file.name%}</p>
 | 
			
		||||
              {% if (file.error) { %}
 | 
			
		||||
                <p class="error"><span class="label label-important">Error</span> {%=file.error%}</p>
 | 
			
		||||
              {% } else if (o.files.valid && !i) { %}
 | 
			
		||||
                <p class="label label-info">{%=o.formatFileSize(file.size)%}</p>
 | 
			
		||||
              {% } %}
 | 
			
		||||
            </li>
 | 
			
		||||
          </ul>
 | 
			
		||||
      </li>
 | 
			
		||||
    {% } %}
 | 
			
		||||
  </script>
 | 
			
		||||
  <!-- The template to display files available for download -->
 | 
			
		||||
<script id="template-download" type="text/x-tmpl">
 | 
			
		||||
  {% for (var i=0, file; file=o.files[i]; i++) { %}
 | 
			
		||||
    <li class="template-download fade">
 | 
			
		||||
      <ul class="clearfix">
 | 
			
		||||
        {% if (file.error) { %}
 | 
			
		||||
          <li class="name-size">
 | 
			
		||||
            <p>{%=file.name%}</p>
 | 
			
		||||
            <p class="error"><span class="label label-important">Error</span> {%=file.error%}</p>
 | 
			
		||||
          </li>
 | 
			
		||||
        {% } else { %}
 | 
			
		||||
          <li class="preview">
 | 
			
		||||
            {% if (file.thumbnail_url) { %}
 | 
			
		||||
              <a href="{%=file.url%}" title="{%=file.name%}" data-gallery="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
 | 
			
		||||
            {% } %}
 | 
			
		||||
          </li>
 | 
			
		||||
          <li class="name-size">
 | 
			
		||||
            <p><a href="{%=file.url%}" title="{%=file.name%}" data-gallery="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a></p>
 | 
			
		||||
            <p ><span class="label label-success">Success</span> File uploaded successfully!</p>
 | 
			
		||||
            <p class="label label-info">{%=o.formatFileSize(file.size)%}</p>
 | 
			
		||||
          </li>
 | 
			
		||||
        {% } %}
 | 
			
		||||
      </ul>
 | 
			
		||||
    </li>
 | 
			
		||||
  {% } %}
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +0,0 @@
 | 
			
		|||
$("#delete_all").attr("action", "<%= delete_admin_assets_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>");
 | 
			
		||||
$("#sort_headers").html("<%= j render 'sort_headers' %>");
 | 
			
		||||
$("#tbody_assets").html("<%= j render :partial => 'asset', :collection => @assets %>");
 | 
			
		||||
$("#asset_pagination").html("<%= j paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
 | 
			
		||||
| 
						 | 
				
			
			@ -3,7 +3,6 @@
 | 
			
		|||
    <input id="filter-input" class="search-query input-medium" type="text" placeholder="<%= t('search.tags') %>" value="">
 | 
			
		||||
  </div>
 | 
			
		||||
<% end %>
 | 
			
		||||
 | 
			
		||||
<div id="tags_index">
 | 
			
		||||
  <%= render 'index' %>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
<!DOCTYPE HTML>
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
	<title><%= @title || APP_CONFIG['orbit'] %></title>
 | 
			
		||||
	<%#= render 'layouts/meta' %>
 | 
			
		||||
	<%#= render 'layouts/google_font' %>
 | 
			
		||||
	<%= stylesheet_link_tag "back_end" %>
 | 
			
		||||
  <%= yield :page_specific_css %>
 | 
			
		||||
	<%= render 'layouts/ie_html5_fix' %>
 | 
			
		||||
	<%= javascript_include_tag "back_end" %>
 | 
			
		||||
	<%= yield :page_specific_javascript %>
 | 
			
		||||
	<%= csrf_meta_tag %>
 | 
			
		||||
</head>
 | 
			
		||||
<body id="dashboards">
 | 
			
		||||
	<section>
 | 
			
		||||
    <div >
 | 
			
		||||
     <!--  <div id="filter" class="topnav clearfix">
 | 
			
		||||
      </div> -->
 | 
			
		||||
    	<%= yield %>
 | 
			
		||||
  </section>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,8 +27,9 @@ Orbit::Application.routes.draw do
 | 
			
		|||
    mount Resque::Server.new, :at => "/resque"
 | 
			
		||||
    resources :assets do   
 | 
			
		||||
      collection do
 | 
			
		||||
        get 'file_upload'
 | 
			
		||||
        post 'file_upload'
 | 
			
		||||
        get 'delete'
 | 
			
		||||
        post 'delete_files'
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    resources :asset_categories
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Asset
 | 
			
		|||
    module_label 'module_name.asset'
 | 
			
		||||
    base_url File.expand_path File.dirname(__FILE__)    
 | 
			
		||||
    
 | 
			
		||||
    taggable
 | 
			
		||||
    # side_bar do
 | 
			
		||||
    #   head_label_i18n  'module_name.asset',:icon_class=>"icons-landscape"
 | 
			
		||||
    #   available_for [:admin,:guest,:manager,:sub_manager]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +0,0 @@
 | 
			
		|||
//https://github.com/blueimp/jQuery-File-Upload
 | 
			
		||||
$(function () {
 | 
			
		||||
    'use strict';
 | 
			
		||||
    // Initialize the jQuery File Upload widget:
 | 
			
		||||
    $('#fileupload').fileupload({
 | 
			
		||||
        maxFileSize: 5000000,
 | 
			
		||||
        acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
 | 
			
		||||
        dropZone: $('#dropzone'),
 | 
			
		||||
        headers:{
 | 
			
		||||
            'X-CSRF-Token': $('meta[name="csrf-token"]').attr("content")
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,18 @@
 | 
			
		|||
    }
 | 
			
		||||
}(window.jQuery);
 | 
			
		||||
 | 
			
		||||
$(function () {
 | 
			
		||||
    'use strict';
 | 
			
		||||
    // Initialize the jQuery File Upload widget:
 | 
			
		||||
    $('#fileupload').fileupload({
 | 
			
		||||
        maxFileSize: 5000000,
 | 
			
		||||
        acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
 | 
			
		||||
        dropZone: $('#dropzone'),
 | 
			
		||||
        headers:{
 | 
			
		||||
            'X-CSRF-Token': $('meta[name="csrf-token"]').attr("content")
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
$(function() {
 | 
			
		||||
	var $container = $('.gallery'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -165,7 +165,6 @@
 | 
			
		|||
<% content_for :page_specific_javascript do %>
 | 
			
		||||
  <%= javascript_include_tag "jquery.masonry.min.js" %>
 | 
			
		||||
  <%= javascript_include_tag "jquery.lite.image.resize.js" %>
 | 
			
		||||
  <%= javascript_include_tag "gallery" %>
 | 
			
		||||
  <%= javascript_include_tag "lib/checkbox.card" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/vendor/jquery.ui.widget.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/tmpl.min.js" %>
 | 
			
		||||
| 
						 | 
				
			
			@ -175,8 +174,8 @@
 | 
			
		|||
  <%= javascript_include_tag "file-upload/jquery.fileupload.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/jquery.fileupload-fp.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/jquery.fileupload-ui.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/main.js" %>
 | 
			
		||||
  <%= javascript_include_tag "file-upload/drop-zone.js" %>
 | 
			
		||||
  <%= javascript_include_tag "gallery" %>
 | 
			
		||||
<% end %>
 | 
			
		||||
 <!-- The template to display files available for upload -->
 | 
			
		||||
<script id="template-upload" type="text/x-tmpl">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue