Merge branch 'design_team' into ldap
Conflicts: vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb
This commit is contained in:
		
						commit
						70f6c7b540
					
				| 
						 | 
				
			
			@ -0,0 +1,137 @@
 | 
			
		|||
/*!
 | 
			
		||||
 * jQuery imagesLoaded plugin v2.0.1
 | 
			
		||||
 * http://github.com/desandro/imagesloaded
 | 
			
		||||
 *
 | 
			
		||||
 * MIT License. by Paul Irish et al.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*jshint curly: true, eqeqeq: true, noempty: true, strict: true, undef: true, browser: true */
 | 
			
		||||
/*global jQuery: false */
 | 
			
		||||
 | 
			
		||||
;(function($, undefined) {
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
// blank image data-uri bypasses webkit log warning (thx doug jones)
 | 
			
		||||
var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
 | 
			
		||||
 | 
			
		||||
$.fn.imagesLoaded = function( callback ) {
 | 
			
		||||
	var $this = this,
 | 
			
		||||
		deferred = $.isFunction($.Deferred) ? $.Deferred() : 0,
 | 
			
		||||
		hasNotify = $.isFunction(deferred.notify),
 | 
			
		||||
		$images = $this.find('img').add( $this.filter('img') ),
 | 
			
		||||
		loaded = [],
 | 
			
		||||
		proper = [],
 | 
			
		||||
		broken = [];
 | 
			
		||||
 | 
			
		||||
	function doneLoading() {
 | 
			
		||||
		var $proper = $(proper),
 | 
			
		||||
			$broken = $(broken);
 | 
			
		||||
 | 
			
		||||
		if ( deferred ) {
 | 
			
		||||
			if ( broken.length ) {
 | 
			
		||||
				deferred.reject( $images, $proper, $broken );
 | 
			
		||||
			} else {
 | 
			
		||||
				deferred.resolve( $images );
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ( $.isFunction( callback ) ) {
 | 
			
		||||
			callback.call( $this, $images, $proper, $broken );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function imgLoaded( img, isBroken ) {
 | 
			
		||||
		// don't proceed if BLANK image, or image is already loaded
 | 
			
		||||
		if ( img.src === BLANK || $.inArray( img, loaded ) !== -1 ) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// store element in loaded images array
 | 
			
		||||
		loaded.push( img );
 | 
			
		||||
 | 
			
		||||
		// keep track of broken and properly loaded images
 | 
			
		||||
		if ( isBroken ) {
 | 
			
		||||
			broken.push( img );
 | 
			
		||||
		} else {
 | 
			
		||||
			proper.push( img );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// cache image and its state for future calls
 | 
			
		||||
		$.data( img, 'imagesLoaded', { isBroken: isBroken, src: img.src } );
 | 
			
		||||
 | 
			
		||||
		// trigger deferred progress method if present
 | 
			
		||||
		if ( hasNotify ) {
 | 
			
		||||
			deferred.notifyWith( $(img), [ isBroken, $images, $(proper), $(broken) ] );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// call doneLoading and clean listeners if all images are loaded
 | 
			
		||||
		if ( $images.length === loaded.length ){
 | 
			
		||||
			setTimeout( doneLoading );
 | 
			
		||||
			$images.unbind( '.imagesLoaded' );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// if no images, trigger immediately
 | 
			
		||||
	if ( !$images.length ) {
 | 
			
		||||
		doneLoading();
 | 
			
		||||
	} else {
 | 
			
		||||
		$images.bind( 'load.imagesLoaded error.imagesLoaded', function( event ){
 | 
			
		||||
			// trigger imgLoaded
 | 
			
		||||
			imgLoaded( event.target, event.type === 'error' );
 | 
			
		||||
		}).each( function( i, el ) {
 | 
			
		||||
			var src = el.src;
 | 
			
		||||
 | 
			
		||||
			// find out if this image has been already checked for status
 | 
			
		||||
			// if it was, and src has not changed, call imgLoaded on it
 | 
			
		||||
			var cached = $.data( el, 'imagesLoaded' );
 | 
			
		||||
			if ( cached && cached.src === src ) {
 | 
			
		||||
				imgLoaded( el, cached.isBroken );
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// if complete is true and browser supports natural sizes, try
 | 
			
		||||
			// to check for image status manually
 | 
			
		||||
			if ( el.complete && el.naturalWidth !== undefined ) {
 | 
			
		||||
				imgLoaded( el, el.naturalWidth === 0 || el.naturalHeight === 0 );
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// cached images don't fire load sometimes, so we reset src, but only when
 | 
			
		||||
			// dealing with IE, or image is complete (loaded) and failed manual check
 | 
			
		||||
			// webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
 | 
			
		||||
			if ( el.readyState || el.complete ) {
 | 
			
		||||
				el.src = BLANK;
 | 
			
		||||
				el.src = src;
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return deferred ? deferred.promise( $this ) : $this;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
})(jQuery);
 | 
			
		||||
 | 
			
		||||
$(document).ready(function() {
 | 
			
		||||
	$('.upload-picture').find('img').imagesLoaded(function(){
 | 
			
		||||
	    var picH = $('.upload-picture').width()/$('.upload-picture').find('img').width()*$('.upload-picture').find('img').height();
 | 
			
		||||
	    var imgMarginTop = ($('.upload-picture').height()-picH)/2;
 | 
			
		||||
	    var d = $('.upload-picture').height();
 | 
			
		||||
	    if(imgMarginTop>0){
 | 
			
		||||
	        imgMarginTop = 0;
 | 
			
		||||
	        d = picH;
 | 
			
		||||
	        $('.upload-picture').css({height:d})
 | 
			
		||||
	    }
 | 
			
		||||
	    $('.upload-picture').find('img').css({marginTop:imgMarginTop})
 | 
			
		||||
	    $('.upload-picture').each(function (i){
 | 
			
		||||
	        $(this).mouseenter(function(){
 | 
			
		||||
	            var h= picH;
 | 
			
		||||
	            $(this).stop().animate({height:h}, 500);
 | 
			
		||||
	            $(this).find('img').stop().animate({marginTop:0}, 500);
 | 
			
		||||
	        });
 | 
			
		||||
	        $(this).mouseleave(function(){
 | 
			
		||||
	            $(this).stop().animate({height:d}, 500);
 | 
			
		||||
	            $(this).find('img').stop().animate({marginTop:imgMarginTop}, 500);
 | 
			
		||||
	        });
 | 
			
		||||
	    });
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -6,10 +6,17 @@ $(document).ready(function() {
 | 
			
		|||
	$("a.preview_trigger").click(function(){
 | 
			
		||||
		$(this).after("<span id='show_preview'></span>");
 | 
			
		||||
		$.ajax({
 | 
			
		||||
			type:"put",
 | 
			
		||||
			type: 'PUT',
 | 
			
		||||
			//async : true,
 | 
			
		||||
			url:$(this).attr("href"),
 | 
			
		||||
			data:$(this).parents("form").serialize()
 | 
			
		||||
			}).done(function(){ $("#"+start_modal_with_id).modal('show');});  
 | 
			
		||||
			return false;}
 | 
			
		||||
		);
 | 
			
		||||
			contentType: 'application/javascript; charset=utf-8',
 | 
			
		||||
			data:$(this).parents("form").serialize(),
 | 
			
		||||
			success: function (msg) {
 | 
			
		||||
					$("#"+start_modal_with_id).modal('show'); },
 | 
			
		||||
			error: function(){
 | 
			
		||||
				alert("ERROR");
 | 
			
		||||
				}
 | 
			
		||||
			});  
 | 
			
		||||
			return false;
 | 
			
		||||
		});
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -66,6 +66,7 @@ textarea {
 | 
			
		|||
  margin: 0;
 | 
			
		||||
  font-size: 100%;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
  margin-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
button, input {
 | 
			
		||||
  *overflow: visible;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
/*permission-checkbox*/
 | 
			
		||||
 | 
			
		||||
.checkblock {
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	float: left;
 | 
			
		||||
	width: 200px;
 | 
			
		||||
}
 | 
			
		||||
.check[type="checkbox"]{
 | 
			
		||||
	display:none;
 | 
			
		||||
}
 | 
			
		||||
.checkbox{
 | 
			
		||||
	padding: 5px;
 | 
			
		||||
	margin: 5px 5px 10px;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	color:#777777;
 | 
			
		||||
	text-shadow: 0 1px 0px rgba(255,255,255,.4);
 | 
			
		||||
	border-radius: 3px;
 | 
			
		||||
	-moz-border-radius: 3px;
 | 
			
		||||
	-webkit-border-radius: 3px;
 | 
			
		||||
	height: 30px;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) );
 | 
			
		||||
	background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% );
 | 
			
		||||
	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf');
 | 
			
		||||
	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
 | 
			
		||||
	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
 | 
			
		||||
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
 | 
			
		||||
}
 | 
			
		||||
.checkbox .check-icon {
 | 
			
		||||
	display: none;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	width: 32px;
 | 
			
		||||
	height: 32px;
 | 
			
		||||
	background: url(<%= asset_path 'check.png' %>) no-repeat left top;
 | 
			
		||||
	right: -10px;
 | 
			
		||||
    top: 15px;
 | 
			
		||||
}
 | 
			
		||||
.checkbox .member-name {
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	font-family: helvetica;
 | 
			
		||||
	font-size: 12px;
 | 
			
		||||
	line-height: 30px;
 | 
			
		||||
	padding: 0 10px 0 40px;
 | 
			
		||||
	color: #333333;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.member-avatar {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
    width: 34px;
 | 
			
		||||
    height: 34px;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    margin-top: -2px;
 | 
			
		||||
}
 | 
			
		||||
img.member-img {
 | 
			
		||||
    max-width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.checked .check-icon {
 | 
			
		||||
	display: block;
 | 
			
		||||
}
 | 
			
		||||
.popover-inner {
 | 
			
		||||
    width: auto;
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.popover-title {
 | 
			
		||||
    display: block;
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    padding: 3px 10px;
 | 
			
		||||
}
 | 
			
		||||
.popover-content {
 | 
			
		||||
    padding: 3px 10px;
 | 
			
		||||
    color: #898989;
 | 
			
		||||
}
 | 
			
		||||
.popover-content p {
 | 
			
		||||
	font-size: 12px;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,8 +5,8 @@
 | 
			
		|||
 *= require reset
 | 
			
		||||
 *= require_self
 | 
			
		||||
 *= require message
 | 
			
		||||
 *= require style
 | 
			
		||||
 *= require bootstrap
 | 
			
		||||
 *= require style
 | 
			
		||||
 *= require bootstrap-orbit
 | 
			
		||||
 *= require list
 | 
			
		||||
 *= require widgets
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -565,7 +565,9 @@
 | 
			
		|||
    padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
.popover-content {
 | 
			
		||||
    border-radius: 3px;
 | 
			
		||||
	-webkit-border-radius: 0 0 3px 3px;
 | 
			
		||||
	-moz-border-radius: 0 0 3px 3px;
 | 
			
		||||
	border-radius: 0 0 3px 3px;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
.popover-title {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,7 @@
 | 
			
		|||
	border-radius: 0 3px 3px 0;
 | 
			
		||||
	text-align: left;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
    width: 180px;
 | 
			
		||||
    width: 193px;
 | 
			
		||||
}
 | 
			
		||||
.file-upload .upload {
 | 
			
		||||
	margin:0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ class Admin::AdBannersController < ApplicationController
 | 
			
		|||
  
 | 
			
		||||
  def realtime_preview
 | 
			
		||||
    @ad_banner = AdBanner.first(conditions: { title: params[:title] }).preview_clone
 | 
			
		||||
    @ad_banner.update_attributes(params[:ad_banner]).update_attributes(params[:ad_images])
 | 
			
		||||
    #@ad_banner.update_attributes(params[:ad_banner]).update_attributes(params[:ad_images])
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  def index
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,8 @@ class Admin::AdImagesController < ApplicationController
 | 
			
		|||
  
 | 
			
		||||
  def new
 | 
			
		||||
    @ad_image =AdImage.new 
 | 
			
		||||
    @ad_image.post_date = Date.today
 | 
			
		||||
    @ad_image.unpost_date = Date.today + 30
 | 
			
		||||
    #render :action => 'new',:url=> {:ad_banner_id => params.has_key?(:ad_banner_id)? params[:ad_banner_id],nil}
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ class AdBanner
 | 
			
		|||
  include Mongoid::MultiParameterAttributes
 | 
			
		||||
  
 | 
			
		||||
  field :title
 | 
			
		||||
  field :transition_sec,type: Integer
 | 
			
		||||
  field :transition_msec,type: Integer
 | 
			
		||||
  field :ad_fx  #TODO Design should explain
 | 
			
		||||
 | 
			
		||||
  before_save :save_or_destroy
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +13,14 @@ class AdBanner
 | 
			
		|||
  has_many :ad_images , dependent: :delete
 | 
			
		||||
  
 | 
			
		||||
  FX_TYPES = ["blindX","blindY","blindZ","cover","curtainX","curtainY","fade","fadeZoom","growX","growY","scrollUp","scrollDown","scrollLeft","scrollRight","scrollHorz","scrollVert","shuffle","slideX","slideY","toss","turnUp","turnDown","turnLeft","turnRight","uncover","wipe","zoom"]
 | 
			
		||||
attr_writer :transition_sec
 | 
			
		||||
  def transition_sec
 | 
			
		||||
    self.transition_msec/1000 rescue nil
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  def transition_sec=(sec)
 | 
			
		||||
    self.transition_msec = sec.to_i*1000
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  def preview_clone
 | 
			
		||||
    preview_banner = self.clone
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,16 +24,15 @@ class AdImage
 | 
			
		|||
 | 
			
		||||
  # validates_numericality_of :weight, greater_than_or_equal_to: 1,less_than_or_equal_to: 10
 | 
			
		||||
  # validates_format_of :out_link, with: /(http:\/\/.*|)/ ,:message => 'Need a valid URL'
 | 
			
		||||
  # validates_presence_of :post_date,:message => 'Need a valid post date'
 | 
			
		||||
  attr_reader :parse_post_date,:parse_unpost_date
 | 
			
		||||
 | 
			
		||||
  def parse_post_date=(att)
 | 
			
		||||
    self.post_date = (Date.parse att rescue nil)
 | 
			
		||||
    self.post_date = (Date.parse att.gsub(/\s+/, "") rescue nil)
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
  def parse_unpost_date=(att)
 | 
			
		||||
    self.unpost_date = (Date.parse att rescue nil)
 | 
			
		||||
    self.unpost_date = (Date.parse att.gsub(/\s+/, "") rescue nil)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
		<%= f.label :ad_fx, t('admin.ad.ab_fx') %>
 | 
			
		||||
		<%= f.select :ad_fx ,AdBanner::FX_TYPES %>
 | 
			
		||||
		<%= f.label :transition_sec, t('admin.ad.transition_sec') %>
 | 
			
		||||
		<%= f.text_field :transition_sec,:placeholder=>"3秒請輸入3000",:class=> "span3" %> <%= t("admin.ad.trans_unit_sec") %>
 | 
			
		||||
		<%= f.text_field :transition_sec,:placeholder=>t('admin.ad.sec_place_holder'),:class=> "span3" %> <%= t("admin.ad.trans_unit_sec") %>
 | 
			
		||||
		<%= f.submit t("admin.ad.update_banner") %>
 | 
			
		||||
		<%= f.submit t("cancel"),:type=>'reset' %>
 | 
			
		||||
	<div class="adbanner-list">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,11 +40,13 @@ $('#new_ad_banner_tab_but').on('shown', function (e) {
 | 
			
		|||
			$('#new-a-banner').modal({show: true});
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
<% if params[:action] == "new"  -%>
 | 
			
		||||
		 $('#new-a-banner').modal({show: true});
 | 
			
		||||
<% end -%>
 | 
			
		||||
 | 
			
		||||
$('#new-a-banner').on('hidden', function (e) {
 | 
			
		||||
	$(".nav.nav-tabs  a[id!='new_ad_banner_tab_but']:last").tab('show');
 | 
			
		||||
	$('#post-body-content').find(".nav.nav-tabs").children('li.active').removeClass("active");
 | 
			
		||||
	
 | 
			
		||||
	$('#post-body-content').find(".nav.nav-tabs").children('li[id!="new_ad_banner_tab_but"]').last().addClass("active");
 | 
			
		||||
	$('.tab-pane').find(".nav.nav-tabs").children('li[id!="new_ad_banner_tab_but"]').last().addClass("active");
 | 
			
		||||
	
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
	<%= javascript_include_tag "lib/date.format"  %>
 | 
			
		||||
	<%= javascript_include_tag "inc/modal-preview" %>
 | 
			
		||||
	<%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %>
 | 
			
		||||
	<%= javascript_include_tag "inc/jquery.imagesloaded" %>
 | 
			
		||||
	
 | 
			
		||||
<% end %>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -23,8 +24,8 @@
 | 
			
		|||
                  <div id="calendarRange">
 | 
			
		||||
                      <div class="input-append">
 | 
			
		||||
                          <span class="showDate"></span><span class="add-on btn">▼</span>
 | 
			
		||||
													<%= f.hidden_field :parse_post_date %>
 | 
			
		||||
													<%= f.hidden_field :parse_unpost_date%>
 | 
			
		||||
													<%= f.hidden_field :parse_post_date,:value => @ad_image.post_date.strftime('%Y / %m / %d') %>
 | 
			
		||||
													<%= f.hidden_field :parse_unpost_date,:value => @ad_image.unpost_date.strftime('%Y / %m / %d')%>
 | 
			
		||||
 | 
			
		||||
                      </div>
 | 
			
		||||
                      <div id="widgetCalendar">
 | 
			
		||||
| 
						 | 
				
			
			@ -77,41 +78,16 @@
 | 
			
		|||
          <div class="control-group">
 | 
			
		||||
            <div  class="upload-picture">
 | 
			
		||||
              <!--請程式務必將圖片尺寸加入到行內裡-->
 | 
			
		||||
                    <%= image_tag @ad_image.file,:width=> "456",:height=>'700' rescue ''%>
 | 
			
		||||
                    <script type="text/javascript">
 | 
			
		||||
                        var picH = $('.upload-picture').width()/$('.upload-picture').find('img').attr("width")*$('.upload-picture').find('img').attr("height")
 | 
			
		||||
                        var imgMarginTop = ($('.upload-picture').height()-picH)/2;
 | 
			
		||||
                        var d = $('.upload-picture').height();
 | 
			
		||||
                        if(imgMarginTop>0){
 | 
			
		||||
                            imgMarginTop = 0;
 | 
			
		||||
                            d = picH;
 | 
			
		||||
                            $('.upload-picture').css({height:d})
 | 
			
		||||
                        }
 | 
			
		||||
                        $('.upload-picture').find('img').css({marginTop:imgMarginTop})
 | 
			
		||||
                        $('.upload-picture').each(function (i){
 | 
			
		||||
                            $(this).mouseenter(function(){
 | 
			
		||||
                                var h= picH;
 | 
			
		||||
                                $(this).stop().animate({height:h}, 500);
 | 
			
		||||
                                $(this).find('img').stop().animate({marginTop:0}, 500);
 | 
			
		||||
                            });
 | 
			
		||||
                            $(this).mouseleave(function(){
 | 
			
		||||
                                $(this).stop().animate({height:d}, 500);
 | 
			
		||||
                                $(this).find('img').stop().animate({marginTop:imgMarginTop}, 500);
 | 
			
		||||
                            });
 | 
			
		||||
                        });
 | 
			
		||||
                    </script>
 | 
			
		||||
              <%= image_tag @ad_image.file rescue ''%>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span class="alert widgetInfo">此區塊圖片尺寸請使用580px × 225px</span>
 | 
			
		||||
            <div class="controls file-upload input-prepend">
 | 
			
		||||
              <label class="control-label add-on btn" for="input-upload">
 | 
			
		||||
								Choose file
 | 
			
		||||
									
 | 
			
		||||
								<%= f.file_field :file,:id=>"input-upload",:class => "upload", :onchange=> "document.getElementById('fu1').innerHTML = this.form.fu1.value = this.value;" %>
 | 
			
		||||
							</label>
 | 
			
		||||
							<span id="fu1" class="file-name"></span>
 | 
			
		||||
							<br>
 | 
			
		||||
 | 
			
		||||
								
 | 
			
		||||
							<input name="fu1" class="input-medium" type="text">
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -180,17 +156,12 @@
 | 
			
		|||
						
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="form-actions">
 | 
			
		||||
					<button class="btn btn-success" type="submit">Preview/預覽</button>
 | 
			
		||||
					<button class="btn btn-primary" type="submit">Submit/送出</button>
 | 
			
		||||
					<button class="btn" type="reset">Cancel/取消</button>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
			<!--Post End-->
 | 
			
		||||
				<div class="form-actions">
 | 
			
		||||
					<%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(@ad_image.ad_banner.title) ,:class=>"preview_trigger btn btn-success" rescue nil%>
 | 
			
		||||
					<%= f.submit t("submit"),:class=>"btn btn-primary" %>
 | 
			
		||||
					<%= f.submit t("cancel"),:class=>"btn ",:type => 'reset' %>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
			<!--Post End-->
 | 
			
		||||
		</form>
 | 
			
		||||
	</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,7 +7,7 @@
 | 
			
		|||
<div id="container" class="sign-in">
 | 
			
		||||
	<%= form_for :user, :url => user_session_path, :html => {:class => 'user_new form-horizontal'} do |f| %>
 | 
			
		||||
		<div class="content">
 | 
			
		||||
			<p class="notice hide">Notice</p>
 | 
			
		||||
			<p class="notice label label-warning">Notice</p>
 | 
			
		||||
			<p class="alert hide">You need to sign in or sign up before continuing.</p>
 | 
			
		||||
			<div class="main">
 | 
			
		||||
				<div class="control-group clear">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,12 +5,12 @@
 | 
			
		|||
			    <a class="brand dropdown-toggle" data-toggle="dropdown" href="#">Orbit</a>
 | 
			
		||||
			    <ul class="dropdown-menu">
 | 
			
		||||
							<li><%= link_to content_tag(:i, nil, :class => 'icons-dashboard') + t('admin.dashboard'), admin_dashboards_path %></li>
 | 
			
		||||
			        <li><a href="#"><i class="icons-content"></i><%= t('admin.content') %></a></li>
 | 
			
		||||
							<li><%= link_to content_tag(:i, nil, :class => 'icons-member') + t('admin.member'), admin_users_path %></li>
 | 
			
		||||
							<li><%= link_to content_tag(:i, nil, :class => 'icons-asset') + t('admin.asset'), admin_assets_path %></li>
 | 
			
		||||
			        <li><%#= link_to content_tag(:i, nil, :class => 'icons-content') + t('admin.content') %></li>
 | 
			
		||||
							<li><%#= link_to content_tag(:i, nil, :class => 'icons-member') + t('admin.member'), admin_users_path %></li>
 | 
			
		||||
							<li><%#= link_to content_tag(:i, nil, :class => 'icons-asset') + t('admin.asset'), admin_assets_path %></li>
 | 
			
		||||
			        <li class="divider"></li>
 | 
			
		||||
							<li><%= link_to content_tag(:i, nil, :class => 'icons-structure') + t('admin.structure'), admin_items_path %></li>
 | 
			
		||||
			        <li><a href="#"><i class="icons-plus-cube"></i><%= t('admin.add_item') %></a></li>
 | 
			
		||||
			        <li><%#= link_to content_tag(:i, nil, :class => 'icons-plus-cube') + t('admin.add_item') %></li>
 | 
			
		||||
			    </ul>
 | 
			
		||||
			</div>
 | 
			
		||||
			<ul class="nav">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ en:
 | 
			
		|||
  account_settings: Account settings
 | 
			
		||||
  add: Add
 | 
			
		||||
  back: Back
 | 
			
		||||
  browse: Browse
 | 
			
		||||
  cancel: Cancel
 | 
			
		||||
  create: Create
 | 
			
		||||
  delete: Delete
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +47,7 @@ en:
 | 
			
		|||
    action: Action
 | 
			
		||||
    ad_banner: AD Banner
 | 
			
		||||
    ad:
 | 
			
		||||
      sec_place_holder: Enter 3 if 3 sec
 | 
			
		||||
      ab_fx: FX
 | 
			
		||||
      all_banners: AdBanner list
 | 
			
		||||
      banner_best_size: Banner Best Size
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ zh_tw:
 | 
			
		|||
  account_settings: 帳號設定
 | 
			
		||||
  add: 新增
 | 
			
		||||
  back: 回上一步
 | 
			
		||||
  browse: 選擇檔案
 | 
			
		||||
  cancel: 取消
 | 
			
		||||
  create: 創建
 | 
			
		||||
  delete: 刪除
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +44,7 @@ zh_tw:
 | 
			
		|||
    action: 操作
 | 
			
		||||
    ad_banner: 廣告輪播
 | 
			
		||||
    ad:
 | 
			
		||||
      sec_place_holder: 3秒請輸入3
 | 
			
		||||
      ab_fx: 轉場特效
 | 
			
		||||
      all_banners: 輪播清單
 | 
			
		||||
      banner_best_size: Banner 尺寸
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +61,7 @@ zh_tw:
 | 
			
		|||
    add_language: 新增語言
 | 
			
		||||
    add_drop_down_item: +增加Orbit選單
 | 
			
		||||
    admin: 管理
 | 
			
		||||
    announcement: 公告系統
 | 
			
		||||
    announcement: 公告管理
 | 
			
		||||
    asset: 資產
 | 
			
		||||
    assets:
 | 
			
		||||
        file: 檔案
 | 
			
		||||
| 
						 | 
				
			
			@ -155,6 +157,7 @@ zh_tw:
 | 
			
		|||
    purchase: 購買
 | 
			
		||||
    role: 角色
 | 
			
		||||
    roles: 角色
 | 
			
		||||
    site_setting: 基本設定
 | 
			
		||||
    setup_member: 成員設置
 | 
			
		||||
    setup_translations: 語系設定
 | 
			
		||||
    setup_designs: 版型設定
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ Orbit::Application.routes.draw do
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    match 'ad_banner/:title/preivew' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put
 | 
			
		||||
    match 'ad_banner/:title/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put
 | 
			
		||||
    resources :ad_banners do 
 | 
			
		||||
        collection do
 | 
			
		||||
          match 'new_ad_image' => 'ad_images#new',:as => :new_ad_image,:via => :get
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -110,13 +110,17 @@ module ParserCommon
 | 
			
		|||
  def parse_sub_menus(body = nil, page = nil, id = nil)
 | 
			
		||||
    body.css('sub_menu').each do |sub_menu|
 | 
			
		||||
      res = ''
 | 
			
		||||
      res << "<ul>"
 | 
			
		||||
      res << "<div class='category_list'>"
 | 
			
		||||
      res << "<h3 class='h3'>#{page.i18n_variable[I18n.locale]}</h3>"
 | 
			
		||||
      res << "<ul class='list'>"
 | 
			
		||||
      page.children.each do |child|
 | 
			
		||||
        res << "<li>"
 | 
			
		||||
        res << "<a href='#{child.full_name}'>#{child.i18n_variable[I18n.locale]}</a>"
 | 
			
		||||
        res << "</li>"
 | 
			
		||||
      end
 | 
			
		||||
      res << "</ul>"
 | 
			
		||||
      res << "</h3>"
 | 
			
		||||
      res << "</div>"
 | 
			
		||||
      fragment = Nokogiri::HTML::DocumentFragment.new(body, res)
 | 
			
		||||
      sub_menu.swap(fragment)
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -91,7 +91,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
 | 
			
		|||
  # GET /bulletins/1/edit
 | 
			
		||||
  def edit
 | 
			
		||||
    @bulletin = Bulletin.find(params[:id])
 | 
			
		||||
    if @bulletin.is_rejected?
 | 
			
		||||
    if !current_user.admin? && (@bulletin.is_rejected? || @bulletin.is_checked?)
 | 
			
		||||
      redirect_to :action => :index
 | 
			
		||||
    else
 | 
			
		||||
      # @summary_variable = @bulletin.summary_variable
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@
 | 
			
		|||
			<span class="label"><%= t(:pending) %></span>
 | 
			
		||||
		<% end %>
 | 
			
		||||
		<% if bulletin.is_checked? %>
 | 
			
		||||
			<span class="label"><%= t(:checked) %></span>
 | 
			
		||||
			<span class="label"><%= t(:passed) %></span>
 | 
			
		||||
		<% end %>
 | 
			
		||||
		<% if bulletin.is_rejected? %>
 | 
			
		||||
			<span class="label"><%= t(:rejected) %></span>
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@
 | 
			
		|||
		<%= link_to bulletin.title[I18n.locale], panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category.id) rescue ''%>
 | 
			
		||||
		<div class="quick-edit">
 | 
			
		||||
			<ul class="nav nav-pills hide">
 | 
			
		||||
				<% unless bulletin.is_rejected?%>
 | 
			
		||||
				<% if current_user.admin? || (!bulletin.is_rejected? && !bulletin.is_checked?) %>
 | 
			
		||||
					<li><%= link_to t('bulletin.edit'), edit_panel_announcement_back_end_bulletin_path(bulletin) %></li>
 | 
			
		||||
					<li class="dropdown">
 | 
			
		||||
						<a href="#" data-toggle="dropdown" class="dropdown-toggle"><%= t(:quick_edit) %><b class="caret"></b></a>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,23 +4,31 @@
 | 
			
		|||
	<%= f.error_messages %>
 | 
			
		||||
	
 | 
			
		||||
	<div id="sub-wiget">
 | 
			
		||||
		<div id="widget-picture" class="widget-box widget-size-300">
 | 
			
		||||
		<div id="widget-picture" class="widget-box">
 | 
			
		||||
			<div class="widget-action clear">
 | 
			
		||||
				<a class="action"><i title="Upload pictures" class="icon-exclamation-sign icon-white tip"></i></a>
 | 
			
		||||
			</div>
 | 
			
		||||
			<h3 class="widget-title"><i class="icons-picture icons-white"></i>Picture</h3>
 | 
			
		||||
			<div class="widget-content clear">
 | 
			
		||||
				<div class="control-group">
 | 
			
		||||
           <!-- <img class="pull-left upload-picture" src="/assets/default-img.png" /> -->
 | 
			
		||||
					<div  class="upload-picture">
 | 
			
		||||
              <!--請程式務必將圖片尺寸加入到行內裡-->
 | 
			
		||||
              <% if @bulletin.image %>
 | 
			
		||||
              	<%= image_tag @bulletin.image, :width=> "456", :height=>'700' rescue ''%>
 | 
			
		||||
              <% else %>
 | 
			
		||||
              	<img class="pull-left upload-picture" src="/assets/default-img.png" />
 | 
			
		||||
              <% end %>
 | 
			
		||||
 | 
			
		||||
					<div class="controls file-upload">
 | 
			
		||||
					<label class="control-label btn" for="input-upload">
 | 
			
		||||
						Browse/選擇檔案
 | 
			
		||||
          </div>
 | 
			
		||||
					<div class="controls file-upload input-prepend">
 | 
			
		||||
					<label class="control-label add-on btn" for="input-upload">
 | 
			
		||||
						<%= t(:browse) %>
 | 
			
		||||
						<%= f.file_field :image, :id => "input-upload", :class => 'upload', :onchange => "document.getElementById('fu').innerHTML = this.form.fu.value = this.value;" %>
 | 
			
		||||
					</label>
 | 
			
		||||
					<span id='fu' class="file-name"></span>
 | 
			
		||||
					<br>
 | 
			
		||||
					<input name='fu' class="input-large" type="text">
 | 
			
		||||
					<input name='fu' class="input-medium" type="text">
 | 
			
		||||
					<br>
 | 
			
		||||
					<% if @bulletin.image.file %>
 | 
			
		||||
					  <%= f.check_box :remove_image %>
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +39,8 @@
 | 
			
		|||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		<div id="widget-date" class="widget-box widget-size-300">
 | 
			
		||||
			<div class="widget-action clear">
 | 
			
		||||
				<a href="#" class="action"><i title="Set the announcement to start and end dates" class="icon-exclamation-sign icon-white tip"></i></a>
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +208,7 @@
 | 
			
		|||
								<td style="text-align:center" colspan="4">
 | 
			
		||||
									<div id='add_bulletin_link' class="info_input bulletin_links_block">
 | 
			
		||||
										<%= hidden_field_tag 'bulletin_link_field_count', @bulletin.bulletin_links.count %>
 | 
			
		||||
										<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i> ADD/新增</span></a>
 | 
			
		||||
										<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i><%= t(:add) %></span></a>
 | 
			
		||||
									</div>
 | 
			
		||||
								</td>
 | 
			
		||||
							</tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -243,7 +253,7 @@
 | 
			
		|||
								<td style="text-align:center" colspan="4">
 | 
			
		||||
									<div id='add_bulletin_file' class="info_input bulletin_files_block">
 | 
			
		||||
										<%= hidden_field_tag 'bulletin_file_field_count', @bulletin.bulletin_files.count %>
 | 
			
		||||
										<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i> ADD/新增</span></a>
 | 
			
		||||
										<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i><%= t(:add) %></span></a>
 | 
			
		||||
									</div>
 | 
			
		||||
								</td>
 | 
			
		||||
							</tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -281,6 +291,7 @@
 | 
			
		|||
 | 
			
		||||
<% content_for :page_specific_javascript do %>
 | 
			
		||||
	<%= javascript_include_tag "bulletin_form" %>
 | 
			
		||||
	<%= javascript_include_tag "inc/jquery.imagesloaded" %>
 | 
			
		||||
	<script>
 | 
			
		||||
		$('#add_bulletin_link a.add').live('click', function(){
 | 
			
		||||
			var new_id = $(this).prev().attr('value');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@
 | 
			
		|||
				<div class="control-group">
 | 
			
		||||
					<div class="controls">
 | 
			
		||||
					<%= f.file_field :file %>
 | 
			
		||||
					<%= form_bulletin_file.file.file ? ( link_to t(:view), form_bulletin_file.file.url, {:target => '_blank', :title => t(:view)} ) : '' %>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
			</td>	
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +20,7 @@
 | 
			
		|||
							<div class="control-group">
 | 
			
		||||
								<label for="link-<%= locale %>" class="control-label"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></label>
 | 
			
		||||
								<div class="controls">
 | 
			
		||||
								<%= f.text_field locale, :id => "link-#{locale}", :class => "input-xlarge" %>
 | 
			
		||||
								<%= f.text_field locale, :id => "link-#{locale}" %>
 | 
			
		||||
								</div>
 | 
			
		||||
							</div>
 | 
			
		||||
						<% end %>
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +44,7 @@
 | 
			
		|||
							<div class="control-group">
 | 
			
		||||
								<label for="link-<%= locale %>" class="control-label"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></label>
 | 
			
		||||
								<div class="controls">
 | 
			
		||||
								<%= f.text_field locale, :id => "link-#{locale}", :class => "input-xlarge" %>
 | 
			
		||||
								<%= f.text_field locale, :id => "link-#{locale}" %>
 | 
			
		||||
								</div>
 | 
			
		||||
							</div>
 | 
			
		||||
						<% end %>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,25 +6,25 @@
 | 
			
		|||
				<a href='#' class="list-remove"><i class="icon-trash"></i></a>
 | 
			
		||||
			</th>
 | 
			
		||||
			<th class="sort span1-2 <%= is_sort_active?('status') %>">
 | 
			
		||||
				<%= link_to t('bulletin.status') + content_tag(:b, nil, :class => is_sort?('status')), panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('status'))), :class => 'js_history' %>
 | 
			
		||||
				<%= link_to (t('bulletin.status') + content_tag(:b, nil, :class => is_sort?('status'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('status'))), :class => 'js_history' %>
 | 
			
		||||
			</th>
 | 
			
		||||
			<th class="sort span1-2 <%= is_sort_active?('category') %>">
 | 
			
		||||
				<%= (link_to t('bulletin.category') + content_tag(:b, nil, :class => is_sort?('category')), panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('category'))), :class => 'js_history').html_safe %>
 | 
			
		||||
				<%= link_to (t('bulletin.category') + content_tag(:b, nil, :class => is_sort?('category'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('category'))), :class => 'js_history' %>
 | 
			
		||||
			</th>
 | 
			
		||||
			<th class="sort span7 <%= is_sort_active?('title') %>">
 | 
			
		||||
				<%= link_to t('bulletin.title') + content_tag(:b, nil, :class => is_sort?('title')), panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('title'))), :class => 'js_history' %>
 | 
			
		||||
				<%= link_to (t('bulletin.title') + content_tag(:b, nil, :class => is_sort?('title'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('title'))), :class => 'js_history' %>
 | 
			
		||||
			</th>
 | 
			
		||||
			<th class="sort span1-2 <%= is_sort_active?('postdate') %>">
 | 
			
		||||
				<%= link_to t('bulletin.start_date') + content_tag(:b, nil, :class => is_sort?('postdate')), panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('postdate'))), :class => 'js_history' %>
 | 
			
		||||
				<%= link_to (t('bulletin.start_date') + content_tag(:b, nil, :class => is_sort?('postdate'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('postdate'))), :class => 'js_history' %>
 | 
			
		||||
			</th>
 | 
			
		||||
			<th class="sort span1-2 <%= is_sort_active?('deadline') %>">
 | 
			
		||||
				<%= link_to t('bulletin.end_date') + content_tag(:b, nil, :class => is_sort?('deadline')), panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('deadline'))), :class => 'js_history' %>
 | 
			
		||||
				<%= link_to (t('bulletin.end_date') + content_tag(:b, nil, :class => is_sort?('deadline'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('deadline'))), :class => 'js_history' %>
 | 
			
		||||
			</th>
 | 
			
		||||
			<th class="sort span1-2 <%= is_sort_active?('tags') %>">
 | 
			
		||||
				<%= link_to t('bulletin.tags') + content_tag(:b, nil, :class => is_sort?('tags')), panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('tags'))), :class => 'js_history' %>
 | 
			
		||||
				<%= link_to (t('bulletin.tags') + content_tag(:b, nil, :class => is_sort?('tags'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('tags'))), :class => 'js_history' %>
 | 
			
		||||
			</th>
 | 
			
		||||
			<th class="sort span1-3 <%= is_sort_active?('update_user_id') %>">
 | 
			
		||||
				<%= link_to t('bulletin.last_modified') + content_tag(:b, nil, :class => is_sort?('update_user_id')), panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('update_user_id'))), :class => 'js_history' %>
 | 
			
		||||
				<%= link_to (t('bulletin.last_modified') + content_tag(:b, nil, :class => is_sort?('update_user_id'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('update_user_id'))), :class => 'js_history' %>
 | 
			
		||||
			</th>
 | 
			
		||||
	   </tr>
 | 
			
		||||
	</thead>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,8 +3,8 @@
 | 
			
		|||
<% end %>
 | 
			
		||||
<% content_for :page_specific_javascript do %>
 | 
			
		||||
	<%= javascript_include_tag "bootstrap"  %>
 | 
			
		||||
	<%= javascript_include_tag "inc/permission-checkbox"  %>
 | 
			
		||||
	<%= javascript_include_tag "inc/search"  %>
 | 
			
		||||
	<%#= javascript_include_tag "inc/permission-checkbox"  %>
 | 
			
		||||
	<%#= javascript_include_tag "inc/search"  %>
 | 
			
		||||
<% end %>
 | 
			
		||||
<%#= label_tag :fact_check_setting, t("announcement.bulletin.fact_check_setting") %>
 | 
			
		||||
<%= form_tag('', :remote => true)  %>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,12 @@ en:
 | 
			
		|||
  
 | 
			
		||||
  _locale: English
 | 
			
		||||
  
 | 
			
		||||
  basic: Basic
 | 
			
		||||
  picture: Piture
 | 
			
		||||
  tags: Tag
 | 
			
		||||
  link: Link
 | 
			
		||||
  file: File
 | 
			
		||||
 | 
			
		||||
  add: Add
 | 
			
		||||
  back: Back
 | 
			
		||||
  create: Create
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +29,14 @@ en:
 | 
			
		|||
  update: Update
 | 
			
		||||
  yes_: "Yes"
 | 
			
		||||
 | 
			
		||||
  hot: Hot
 | 
			
		||||
  top: Top
 | 
			
		||||
  hidden: Hidden
 | 
			
		||||
  passed: Passed
 | 
			
		||||
  pending: Pending
 | 
			
		||||
  rejected: Rejected
 | 
			
		||||
  clear: Clear
 | 
			
		||||
  
 | 
			
		||||
  announcement:
 | 
			
		||||
    sure?: Sure?
 | 
			
		||||
    campus_news: Campus News
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,12 +24,12 @@ zh_tw:
 | 
			
		|||
  update: 更新
 | 
			
		||||
  yes_: "Yes"
 | 
			
		||||
 | 
			
		||||
  is_hot: 熱門
 | 
			
		||||
  is_top: 置頂
 | 
			
		||||
  is_hidden: 隱藏
 | 
			
		||||
  is_checked: 通過
 | 
			
		||||
  is_pending: 待審核
 | 
			
		||||
  is_rejected: 不通過
 | 
			
		||||
  hot: 熱門
 | 
			
		||||
  top: 置頂
 | 
			
		||||
  hidden: 隱藏
 | 
			
		||||
  passed: 通過
 | 
			
		||||
  pending: 待審核
 | 
			
		||||
  rejected: 不通過
 | 
			
		||||
  clear: 清除
 | 
			
		||||
 | 
			
		||||
  quick_edit: 快速編輯
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue