Compare commits

..

95 Commits

Author SHA1 Message Date
chris f8bb0bba56 Display de page contexts in the mobile version as set in structure 2013-10-08 18:10:55 +08:00
Spen 47b8b3e277 announcement init sorting fix 2013-10-07 15:33:50 +08:00
chris ecc3581106 Domain absolute url for tinymce files 2013-09-30 15:25:06 +08:00
Matthew K. Fu JuYuan 6d4d3ccfd4 for some reason can_display has been remove from announcement init. add it back. 2013-09-23 16:29:22 +08:00
Harry Bomrah 141b708392 widget code rewritten for gallery master branch 2013-09-16 11:22:56 +08:00
chris d5dc3ef793 Fix for user and role relationship (from role and sub-role side) 2013-09-13 15:02:31 +08:00
Spen b3366b48a1 announcement add new widget bulletins_and_links 2013-09-13 13:39:39 +08:00
saurabhbhatia 36e7e3d3e8 Fixed Locale settings for location navigation 2013-09-13 12:44:13 +08:00
saurabhbhatia 06c2240d34 Categories working tested and added link to sidebar
Conflicts:
	Gemfile
	config/mongoid.yml
2013-09-13 12:43:42 +08:00
Harry Bomrah c4e8ed96a9 location category 2013-09-13 12:40:18 +08:00
chris 8ad015af7f Remove before filter in user.rb in addition to the previous fix (Fix for user and role relationship) 2013-09-13 11:56:57 +08:00
chris 1857ad428c Fix for user and role relationship
Conflicts:
	lib/tasks/migrate.rake
2013-09-12 15:35:53 +08:00
Matt K. Fu 134b639465 fix announcement language 2013-09-09 17:35:22 +08:00
Matt K. Fu 45136f915d fix news default widget shows un-checked bulletins. 2013-09-09 11:14:31 +08:00
Matt K. Fu 2c3924d92c fix kaminari 2013-09-04 16:38:52 +08:00
Matt K. Fu 41b562d3f7 fix zip by limit version number 2013-09-04 15:20:55 +08:00
Matt K. Fu 4074ac677d fix rake zip 2013-09-04 10:36:16 +08:00
Matthew K. Fu JuYuan e1c57c6843 fixed default widget for tags 2013-09-03 16:17:45 +08:00
Matthew K. Fu JuYuan 915ea066d6 fixing bulletin default widget 2013-09-02 17:24:28 +08:00
Matt K. Fu e7aa7ea1fa added sorting DSL 2013-09-02 16:33:50 +08:00
Matt K. Fu 1ccfd6e48c fix sorting for default widget 2013-08-30 16:52:46 +08:00
Matt K. Fu 23516277f3 fix default widget query 2013-08-30 10:15:18 +08:00
Matt K. Fu 87bc2852b3 fix variable 2013-08-29 18:08:33 +08:00
Matt K. Fu 27b86b078a fix counter for recording request. 2013-08-28 17:56:03 +08:00
Matt K. Fu 8f393e1079 fix template for solar error. gitingore 2013-08-28 10:37:19 +08:00
Matt K. Fu 353039dcd0 fix script 2013-08-27 18:37:09 +08:00
Matt K. Fu d8dd68b4df fixing setting template and site init scripts 2013-08-27 17:28:33 +08:00
Matt K. Fu aa8523c8cf fix counter eval 2013-08-27 16:07:58 +08:00
Matt K. Fu 69ef8fa747 fix dash broad counter 2013-08-27 15:59:17 +08:00
Matt K. Fu 473baa9b95 add backup job 2013-08-27 15:59:17 +08:00
Matt K. Fu 1592aaff89 add option to logrotate for conversional policy. 2013-08-27 15:59:17 +08:00
Matt K. Fu 030d994180 make rake task more easier for service team 2013-08-27 15:59:17 +08:00
Matt K. Fu a88ad35641 add log rotate into site build procedure. 2013-08-27 15:59:17 +08:00
Matthew K. Fu JuYuan a63193dc65 logrotate template 2013-08-27 15:59:16 +08:00
Matt K. Fu 452bddb587 let site builder can enter rescue's worker 2013-08-27 15:59:16 +08:00
Matt K. Fu 371485e420 add handily task for service team 2013-08-27 15:59:16 +08:00
Matt K. Fu 69b3625861 add production pid log folder in case sold error 2013-08-27 15:59:16 +08:00
Matt K. Fu 72d1427854 fix erb for pass argument and paths 2013-08-27 15:59:16 +08:00
Matthew K. Fu JuYuan 079b9145c3 move all *.god to *.erb so the God init won't go wrong 2013-08-27 15:59:16 +08:00
Matt K. Fu 3102a46219 remove useless setting for solar 2013-08-27 15:59:16 +08:00
Matt K. Fu 653a098ab6 fix solr setting 2013-08-27 15:59:16 +08:00
Matt K. Fu 426edea485 add god to watch solr service 2013-08-27 15:59:16 +08:00
Matt K. Fu 2e5b2555c6 from now on the rescue namespace will be decided by site object field: resque_namespace 2013-08-27 15:59:16 +08:00
Matt K. Fu 2593707d8c fix rescue scheduler space error 2013-08-27 15:59:15 +08:00
saurabhbhatia b20955579e Cleaned Up ask module for master 2013-08-27 14:29:59 +08:00
saurabhbhatia 1ebda22f0e Updated with loader
Conflicts:
	vendor/built_in_modules/ask/app/views/panel/ask/back_end/ask_acknowledgements/index.html.erb
	vendor/built_in_modules/ask/app/views/panel/ask/front_end/ask_questions/index.html.erb
2013-08-27 14:29:53 +08:00
saurabhbhatia c511aeb8de Removed logging statements 2013-08-27 14:29:47 +08:00
saurabhbhatia 26d3a89d30 Updated ask module with custom acknowledgement working 2013-08-27 14:29:39 +08:00
saurabhbhatia 91f80a0952 Deleted ask 2013-08-27 14:29:28 +08:00
saurabhbhatia f333fe9e21 Added custom acknowledgement to ask 2013-08-27 14:29:22 +08:00
saurabhbhatia 33f256bd16 Fix mailing redirect
Conflicts:
	vendor/built_in_modules/ask/init.rb
	vendor/built_in_modules/ask_new/app/controllers/panel/ask/front_end/ask_questions_controller.rb
	vendor/built_in_modules/ask_new/app/views/panel/ask/front_end/ask_questions/thank_you.html.erb
	vendor/built_in_modules/ask_new/config/routes.rb
2013-08-19 13:03:49 +08:00
saurabhbhatia fde9fd7ffe Deleted Unnecessary Old code in ask module and video 2013-08-15 12:12:38 +08:00
saurabhbhatia d977b83d06 Updated captcha, mailing function working 2013-08-15 11:50:28 +08:00
saurabhbhatia a1eae7543e Updated ask module with a new captcha plugin 2013-08-15 11:50:21 +08:00
saurabhbhatia 8d9bf62909 final mongoid fix 2013-07-31 14:22:40 +08:00
saurabhbhatia 2f480c31bf Fixed mongoid 2013-07-31 13:54:29 +08:00
saurabhbhatia 19d33f78bd Updated Video with frontend widget and backend widget working 2013-07-31 13:52:24 +08:00
saurabhbhatia 37c91664d3 Updated with video widget 2013-07-31 13:52:22 +08:00
saurabhbhatia eb853f773d Updated video cleaned up the ui 2013-07-31 13:52:19 +08:00
saurabhbhatia d701d9d6ad Updated videos module with widget initiation 2013-07-31 13:52:10 +08:00
saurabhbhatia 75eeec737c Video and Channel Fetching now working 2013-07-31 13:52:07 +08:00
saurabhbhatia 36c3635bbb add youtube videos module 2013-07-31 13:52:05 +08:00
chris fa1c731ad3 Remove registerable 2013-07-30 18:24:05 +08:00
Harry Bomrah 2c24e788b0 fixed frontend 2013-07-23 18:32:24 +08:00
chris 26a8be2f0f Fix bulletins_controller.rb missing 'end' 2013-07-19 19:52:44 +08:00
chris fa51d16879 Remove space causing error in rake 2013-07-19 19:23:25 +08:00
chris ceff21fd1f Fix migrate.rake 2013-07-19 19:15:45 +08:00
Harry Bomrah 1357124f6f backend theater for ie fixed 2013-07-19 18:40:19 +08:00
Harry Bomrah 8c3fb43bf5 theater view fixed in IE 2013-07-19 18:40:09 +08:00
chris 71e8b3c042 Change get_item
Add category and tags to default widget link to object
2013-07-19 18:39:13 +08:00
Spen b37643147f mail_cron add send_mail_now and mail cron log fix 2013-07-19 17:18:48 +08:00
Spen ec57cbff1c ntue mail cron & log filter fix 2013-07-19 17:18:34 +08:00
Spen 7d6df11873 email send cron & send logs for any apps 2013-07-19 17:01:54 +08:00
Matt K. Fu 8043573370 fix delay impressionist for tags and pages 2013-07-19 17:00:38 +08:00
chris f025c98ffa Fix sorted_tags_for_cloud: it's now using the cloud_view_count 2013-07-19 01:52:36 +08:00
chris 3a91c92bf7 Fix visitor count. Mapping the session and making sure they were unique using rails was way slower than doing it with a mongoid query 2013-07-19 01:20:51 +08:00
Harry Bomrah b1d8a87256 frontend gallery fix 2013-07-18 21:22:23 +08:00
chris c7ac4e2485 Set tinymce-rails version to 3.5.8.3 2013-07-18 20:53:05 +08:00
chris 3467868607 Fix missing tagged_ids in some taggable objects and add a rake task for it 2013-07-18 14:05:21 +08:00
Matt K. Fu ceac2b842c fix impression page counter 2013-07-18 12:04:37 +08:00
chris c763817ebf Fix web link front end index and widget index 2013-07-17 17:54:34 +08:00
chris 3c3bba514a Fix get_item and more link in front end 2013-07-17 11:36:20 +08:00
Spen 837dc3ea7b announcement init default_widget add a style & field 2013-07-17 11:31:38 +08:00
Matt K. Fu ea5d89e0e1 make announcement widget amount start from 1 2013-07-16 18:19:20 +08:00
Matt K. Fu aea15fa622 add class to default widget if row data is hot or top 2013-07-16 17:41:22 +08:00
Matthew K. Fu JuYuan c1316f72a0 remove new design button 2013-07-15 17:10:30 +08:00
Matthew K. Fu JuYuan d996b91b54 preview by default widget 2013-07-15 17:09:48 +08:00
Spen 07b3857465 archive app Category Authorization fix 2013-06-26 17:44:31 +08:00
Spen 8751b15385 archive app add Module Authorization & Category Authorization 2013-06-26 15:35:35 +08:00
Matt K. Fu 6a40a9555a fix query for un-permitted category use 2013-06-26 12:28:14 +08:00
Matt K. Fu 869f3b6815 fix object de-authorize failed. 2013-06-26 12:28:00 +08:00
Harry Bomrah 465d417c35 fixed updated method of events.. was having week error when updating events 2013-06-26 12:27:23 +08:00
Harry Bomrah eaf7577810 small syntax error missed out yesterday fixed. 2013-06-26 12:26:52 +08:00
Harry Bomrah 22358bd862 Small change for creating events when calendar is not selected 2013-06-26 12:26:24 +08:00
Harry Bomrah 300de76c3a Calendar fixed... all views fixed plus event loading fixed and also agenda view fixed. 2013-06-26 12:25:58 +08:00
592 changed files with 7441 additions and 6114 deletions

4
.gitignore vendored
View File

@ -14,7 +14,9 @@ public/uploads/**/*
solr/data solr/data
tmp/**/* tmp/**/*
uploads/**/* uploads/**/*
config/*.god
log/*.gz
tmp/restart.txt
*.swp *.swp
*.pid *.pid
*.lck *.lck

12
Gemfile
View File

@ -14,7 +14,11 @@ gem 'execjs'
gem 'jquery-rails', '2.1.4' gem 'jquery-rails', '2.1.4'
gem 'jquery-ui-rails' gem 'jquery-ui-rails'
gem "select2-rails", '3.3.1' gem "select2-rails", '3.3.1'
gem 'kaminari', :git => 'git://github.com/amatsuda/kaminari.git' gem 'kaminari'
gem "acts_as_unvlogable"
gem 'youtube_it'
gem 'gotcha'
# gem "memcached", "~> 1.4.3" # gem "memcached", "~> 1.4.3"
# gem "memcache-client" # gem "memcache-client"
@ -35,7 +39,7 @@ gem 'resque-scheduler' # job scheduling
gem 'resque-restriction' gem 'resque-restriction'
#gem 'rb-readline' #gem 'rb-readline'
# gem 'ruby-debug19' # gem 'ruby-debug19'
gem 'rubyzip' gem 'rubyzip','0.9.9'
gem 'sunspot_mongo' gem 'sunspot_mongo'
gem 'sunspot_solr' gem 'sunspot_solr'
@ -46,14 +50,14 @@ gem 'sinatra'
gem 'sprockets' gem 'sprockets'
gem 'social-share-button' gem 'social-share-button'
gem 'tinymce-rails' gem 'tinymce-rails', '3.5.8.3'
gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux") gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux")
gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux") gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux")
gem 'mongoid-encryptor', :require => 'mongoid/encryptor' gem 'mongoid-encryptor', :require => 'mongoid/encryptor'
gem 'rb-readline','~> 0.4.2' if RUBY_PLATFORM.downcase.include?("linux") gem 'rb-readline','~> 0.4.2' if RUBY_PLATFORM.downcase.include?("linux")
gem "impressionist", :git => 'git://github.com/charlotte-ruby/impressionist.git' gem "impressionist",'1.2.0'
#gem 'contacts' #gem 'contacts'
#gem 'event-calendar', :require => 'event_calendar'#, :git => 'git://github.com/elevation/event_calendar.git' #gem 'event-calendar', :require => 'event_calendar'#, :git => 'git://github.com/elevation/event_calendar.git'

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -10,11 +10,10 @@
//= require jquery.form //= require jquery.form
//= require jquery.tinyscrollbar //= require jquery.tinyscrollbar
//= require jquery.miniColors.min //= require jquery.miniColors.min
//= require select2
//= require bootstrap //= require bootstrap
//= require orbitdesktopAPI //= require orbitdesktopAPI
//= require orbitTimeline //= require orbitTimeline
//= require orbitdesktop //= require orbitdesktop
//= require jquery.gridster //= require jquery.gridster
//= require jquery.isotope.min
//= require desktop/books_pages //= require desktop/books_pages
//= require select2

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -8,37 +8,32 @@ var orbitDesktopAPI = function(){
//msg (string) : message to display //msg (string) : message to display
//type (string : success, imp, alert //type (string : success, imp, alert
//time (int) : duration for notification in seconds //time (int) : duration for notification in seconds
var $notify = $('#orbitnote'), var $notify = $("#orbitnote");
ani_method = { direction: 'up',easing: 'easeInOutQuint' }, var img, n_height;
img, n_height;
if(!type)type=""; if(!type)type="";
switch(type){ switch(type){
case "alert": case "alert":
img = "exclamation-sign"; img = "note_alert.png";
break; break;
case "imp": case "imp":
img = "warning-sign"; img = "note_imp.png";
break; break;
case "success": case "success":
img = "ok"; img = "note_success.png";
break; break;
default: default:
img = "exclamation-sign"; img = "note_alert.png";
break; break;
} }
if( !time || time > 20) time = 5000; else time = time*1000; $notify.find("img#note_img").attr("src",o.notifyImgPath+img);
$notify.find(".note_message").html(msg);
var sign = '<div class="note_type"><span class="sign icon-'+ img +'"></span></div>', n_height = $notify.outerHeight();
message = '<div class="note_message">'+ msg +'</div>', if(!time)time=5000; else time=time*1000;
item = '<div class="note_holder admbg">'+ sign + message +'</div>'; $notify
.css({'top':-n_height, 'display':'block', 'opacity':0})
$(item) .animate({top:0,opacity:1},200)
.prependTo($notify)
.stop(1,1)
.toggle('slide', ani_method, 300)
.delay(time) .delay(time)
.toggle('slide', ani_method, 800); .animate({top:-n_height,opacity:0},200);
$notify.find('.note_holder:hidden').remove();
}; };
this.executeFunc = function(func,callbackFn){ this.executeFunc = function(func,callbackFn){
//takes 2 arguments //takes 2 arguments
@ -72,7 +67,7 @@ var orbitDesktopAPI = function(){
this.changeWallpaper = function(wallpaper){ this.changeWallpaper = function(wallpaper){
//takes 1 parameter //takes 1 parameter
//wallpaper (string): takes wallpaper and sets the wallpaper //wallpaper (string): takes wallpaper and sets the wallpaper
$("#thmbackground").attr("src",o.wallpaperPath+wallpaper); $("img#thmbackground").attr("src",o.wallpaperPath+wallpaper);
o.saveWallpaper(wallpaper); o.saveWallpaper(wallpaper);
}; };
this.confirm = function(settings,callbackfn){ this.confirm = function(settings,callbackfn){
@ -116,35 +111,29 @@ var orbitDesktopAPI = function(){
}) })
return tempArray; return tempArray;
}; };
this.appWindow = function(options,callbackfn){ this.appWindow = function(settings,callbackfn){
//takes set of arguments as array and gives callback //takes set of arguments as array and gives callback
//settings.method (string) : like open and close //settings.method (string) : like open and close
//settings.title (string) : the window title //settings.title (string) : the window title
//settings.extUrl (boolean) : true for opening external url else false //settings.extUrl (boolean) : true for opening external url else false
//settings.appid (string) : appid.. user can use this appid to open or close or refresh the window //settings.appid (string) : appid.. user can use this appid to open or close or refresh the window
//settings.url (string) : it is the url if you want to force external url to open in appwindow... you have to pass extURL in appid if you want to open externalurl //settings.url (string) : it is the url if you want to force external url to open in appwindow... you have to pass extURL in appid if you want to open externalurl
var settings = { if(typeof settings == "undefined")settings = {};
method : "open",
extUrl : true,
title : "New Window"
}
$.extend(settings,options);
if(!settings.appid){ if(!settings.appid){
o.notify("Invalid AppID.","imp",3); o.notify("Invalid AppID.","imp",3);
return; return;
} }
var isWindow = ($("div.app_frame[data-app="+settings.appid+"]").length > 0 ? $("div.app_frame[data-app="+settings.appid+"]") : null); if(!settings.method)settings.method = "open";
if(isWindow){ if(!settings.extUrl)settings.extUrl = true;
o.minimizeBarManager.maximize(isWindow);
return;
}
if(settings.method == 'open'){ if(settings.method == 'open'){
var appurl = "http://www.rulingcom.com"; var appurl = "http://www.rulingcom.com";
o.windowcounter++; o.windowcounter++;
if(!settings.title)settings.title = "New Window "+o.windowcounter;
if(settings.extUrl){ if(settings.extUrl){
if(settings.url){ if(settings.url){
if(settings.url.substr(0,4)!="http")settings.url = "http://"+settings.url; if(settings.url.substr(0,4)!="http")settings.url = "http://"+settings.url;
console.log(settings.url)
var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)"); var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)");
if(urlregex.test(settings.url)) if(urlregex.test(settings.url))
appurl = settings.url; appurl = settings.url;
@ -158,64 +147,20 @@ var orbitDesktopAPI = function(){
return; return;
} }
} }
var whtml = $('<div id="app_frame_'+o.windowcounter+'" class="thmc2 app_frame" data-app="'+settings.appid+'" data-title="'+ settings.title +'"><div class="app_frame_header"><div class="dtitle hh2 hp"><span class="thmtxth">'+settings.title+'</span></div><span class="icon-remove hh2 hp thmtxt"></span><span class="icon-minus hh2 hp thmtxt"></span></div><div id="holder_'+o.windowcounter+'" class="app_holder clear"><iframe src="'+appurl+'" frameborder="0" scrolling="auto"></iframe></div></div>'); var whtml =$('<div id="app_frame_'+o.windowcounter+'" class="thmc2 app_frame" data-app="'+settings.appid+'"><div id="content"><div id="header" class="hh3"><div class="dtitle hh3 hp" style="text-transform:capitalize;"><span class="thmtxth">'+settings.title+'</span></div><span class="icon-remove hh3 hp thmtxt"></span></div><div id="holder_'+o.windowcounter+'" class="app_holder"><iframe src="'+appurl+'" frameborder="0" scrolling="auto"></iframe><div class="clear"></div></div></div></div>');
$("body").append(whtml).css('overflow','hidden'); $(o.contentHolder).append(whtml);
var parentwindow = $("#app_frame_"+o.windowcounter); var parentwindow = $(o.contentHolder).find("div#app_frame_"+o.windowcounter);
var app_holder_height = parentwindow.height() - 60; var app_holder_height = parentwindow.height() - 72;
var app_holder_width = parentwindow.width(); var app_holder_width = parentwindow.width();
parentwindow.find("iframe").attr({"height":app_holder_height}); parentwindow.find("iframe").attr({"height":app_holder_height,"width":app_holder_width});
parentwindow.find(".app_holder").height(app_holder_height); parentwindow.find("div.app_holder").height(app_holder_height);
parentwindow.find(".icon-remove").click(function(){ parentwindow.find("span.icon-remove").click(function(){
o.appWindow.close(parentwindow); parentwindow.remove();
});
parentwindow.find(".icon-minus").click(function(){
o.appWindow.minimize(parentwindow);
}) })
} }
this.appWindow.close = function(win){
win.remove();
$('body').attr('style','');
}
this.appWindow.minimize = function(win){
o.minimizeBarManager.minimize(win);
var minimizeBar = $('#minimizebar'),
minimizeHeight = minimizeBar.height();
minimizeBar
.stop(1,1)
.delay(2000)
.animate({
//'bottom': -minimizeHeight
'opacity': 0
}, 900, 'easeInOutQuint');
minimizeBar.on({
mouseenter: function(){
$(this)
.stop(1,1)
.animate({
'opacity': 1
}, 900, 'easeInOutQuint');
},
mouseleave: function(){
$(this)
.stop(1,1)
.delay(2000)
.animate({
//'bottom': -minimizeHeight
'opacity': 0
}, 900, 'easeInOutQuint');
}
});
}
if(typeof callbackfn=="function"){ if(typeof callbackfn=="function"){
callbackfn.call(this,parentwindow); callbackfn.call(this);
} }
return parentwindow;
}; };
this.toolPopup = function(settings){ this.toolPopup = function(settings){
if(settings == "destroy"){ if(settings == "destroy"){

View File

@ -15,6 +15,11 @@ function load_tinymce() {
theme_advanced_statusbar_location : "bottom", theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true, theme_advanced_resizing : true,
// Domain Absolute URLs
relative_urls : false,
remove_script_host : false,
document_base_url: window.location.protocol + '//' + window.location.host,
// Skin options // Skin options
skin : "o2k7", skin : "o2k7",
skin_variant : "silver", skin_variant : "silver",

View File

@ -0,0 +1,6 @@
$(".attributes").append('<%= escape_javascript(render :partial=>"attribute_field",:locals=>{:attribute_field=>@attribute_field,:attribute_field_counter=>@attribute_field_counter} )%>');
$(".dataType").change(function () {
$(this).parents("legend").next("div").find("div[class^='type']").addClass("hide");
$(this).parents("legend").next("div").find("."+$(this).find("option:selected").attr("ref")).removeClass("hide");
})

View File

@ -5,3 +5,4 @@
*= require_self *= require_self
*= require social-share-button *= require social-share-button
*/ */

View File

@ -8,10 +8,6 @@ $gray: #ddd;
font-family: "Source Sans Pro", Arial, sans-serif; font-family: "Source Sans Pro", Arial, sans-serif;
font-size: #{$font-size}px; font-size: #{$font-size}px;
} }
@mixin font-icon($font-size) {
font-family: "FontAwesome";
font-size: #{$font-size}px;
}
@mixin transition-type($property, $sec) { @mixin transition-type($property, $sec) {
-webkit-transition: #{$property} #{$sec}s ease; -webkit-transition: #{$property} #{$sec}s ease;
-moz-transition: #{$property} #{$sec}s ease; -moz-transition: #{$property} #{$sec}s ease;

View File

@ -1,4 +1,4 @@
.noSelect, .noSelect * { .noSelect {
-webkit-touch-callout: none; -webkit-touch-callout: none;
-webkit-user-select: none; -webkit-user-select: none;
-khtml-user-select: none; -khtml-user-select: none;
@ -50,14 +50,6 @@
width: 384px; } width: 384px; }
.s_grid_row .s_grid_12 { .s_grid_row .s_grid_12 {
width: 420px; } width: 420px; }
.s_grid_row .s_grid_13 {
width: 456px; }
.s_grid_row .s_grid_14 {
width: 492px; }
.s_grid_row .s_grid_15 {
width: 528px; }
.s_grid_row .s_grid_16 {
width: 564px; }
.s_grid_row:last-child { .s_grid_row:last-child {
margin-bottom: 0; } margin-bottom: 0; }
.s_grid_row .s_grid_h_1 { .s_grid_row .s_grid_h_1 {
@ -101,7 +93,7 @@
left: 0; left: 0;
top: 60px; top: 60px;
font-size: 15px; font-size: 15px;
min-width: 120px; width: 120px;
border: solid 2px #dddddd; border: solid 2px #dddddd;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
/* webkit */ /* webkit */
@ -136,7 +128,7 @@
font-size: 15px; font-size: 15px;
line-height: 36px; } line-height: 36px; }
.s_menu li { .s_menu li {
border-top: solid 1px #eaeaea; } border-top: solid 1px #dddddd; }
.s_menu li:first-child { .s_menu li:first-child {
border: none; } border: none; }
.s_menu a { .s_menu a {
@ -146,23 +138,31 @@
.s_tab { .s_tab {
font-size: 15px; font-size: 15px;
line-height: 36px; } line-height: 36px; }
.s_tab ul {
overflow: hidden; } .s_tab ul {
.s_tab li { overflow: hidden; }
float: left; }
.s_tab a { .s_tab li {
display: block; } float: left; }
.s_tab .admbg {
background-color: #f0f0f0; } .s_tab a {
display: block; }
.s_tab .admbg {
background-color: #f0f0f0; }
.st_c { .st_c {
display: none; } display: none; }
.st_c:first-child {
display: block; }
/* simple form */ /* simple form */
.s_form { .s_form {
font-size: 15px; } font-size: 15px; }
.s_form label { .s_form label {
font-size: 13px; font-size: 13px;
font-weight: bold;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
width: 100px; width: 100px;
@ -172,9 +172,6 @@
line-height: 32px; } line-height: 32px; }
.s_form input[type=text], .s_form input[type=text],
.s_form input[type=password], .s_form input[type=password],
.s_form input[type=submit],
.s_form input[type=reset],
.s_form input[type=button],
.s_form select { .s_form select {
height: 32px; height: 32px;
margin-top: 0; margin-top: 0;
@ -205,6 +202,7 @@
.s_form input[type=text]:focus, .s_form input[type=text]:focus,
.s_form input[type=password]:focus, .s_form input[type=password]:focus,
.s_form textarea:focus { .s_form textarea:focus {
background-color: #f7f7f7;
border-color: #c4c4c4; } border-color: #c4c4c4; }
.s_form textarea { .s_form textarea {
resize: none; } resize: none; }
@ -220,10 +218,9 @@
.s_form .s_table td { .s_form .s_table td {
vertical-align: middle; } vertical-align: middle; }
.s_form .s_table thead th { .s_form .s_table thead th {
border-bottom: solid 1px #eee; } border-bottom: solid 1px #eeeeee; }
/* simple select */ .check_box_g {
.s_select_g {
padding: 4px 8px; padding: 4px 8px;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
/* webkit */ /* webkit */
@ -235,89 +232,22 @@
/* ie */ /* ie */
box-sizing: border-box; box-sizing: border-box;
/* css3 */ } /* css3 */ }
.s_select_g li { .check_box_g li {
margin: 0 6px 6px 0; margin: 0 6px 6px 0;
padding: 0; } padding: 0; }
.s_select_g li, .check_box_g li,
.s_select_g li > * { .check_box_g li > * {
display: inline-block; display: inline-block;
vertical-align: middle; } vertical-align: middle; }
.s_select_g label { .check_box_g label {
width: auto; width: auto;
margin: 0; } margin: 0; }
.s_select_g > label { .check_box_g > label {
font-size: 15px; font-size: 15px;
display: block; display: block;
padding: 4px 0; } padding: 4px 0; }
.s_select_g li label { .check_box_g li label {
padding-left: 4px; padding-left: 4px; }
cursor: pointer; }
.s_select_g li label:before {
display: inline-block;
vertical-align: middle;
width: 14px;
height: 14px;
line-height: 14px;
text-align: center;
margin-right: 6px;
content: '';
border: solid 1px #c4c4c4; }
.s_select_g input[type=checkbox],
.s_select_g input[type=radio] {
display: none; }
.s_select_g input[type=checkbox]:checked + label:before, .s_select_g input[type=radio]:checked + label:before {
background-color: #444444;
border-color: #444444;
color: #fff;
font-family: "FontAwesome";
font-size: 12px; }
.s_select_g input[type=checkbox]:checked + label:before {
content: "\f00c"; }
.s_select_g input[type=radio] + label:before {
border-radius: 8px; }
.s_select_g input[type=radio]:checked + label:before {
content: "\f111";
font-size: 9px;
-webkit-text-size-adjust: none; }
/* simple switch */
.s_switch {
overflow: hidden; }
.s_switch .s_switch_status {
font-size: 1.5em;
line-height: 20px;
height: 20px;
float: left;
margin-right: 60px; }
.s_switch .s_switch_switcher {
display: block;
float: right;
position: relative;
width: 48px;
height: 20px;
overflow: hidden; }
.s_switch .s_switch_switcher input[type=checkbox] {
width: 144px;
height: 20px;
margin: 0;
position: absolute;
top: 0;
left: -96px; }
.s_switch .s_switch_switcher input[type=checkbox] + .s_switch_toggle {
display: block;
position: absolute;
left: -2px;
top: -2px;
width: 16px;
height: 20px;
background-color: #000;
border: solid 2px #fff;
cursor: pointer;
-webkit-transition: left 0.3s ease;
-moz-transition: left 0.3s ease;
transition: left 0.3s ease; }
.s_switch .s_switch_switcher input[type=checkbox]:checked + .s_switch_toggle {
left: 30px; }
/* tool bar */ /* tool bar */
.toolbar { .toolbar {
@ -325,7 +255,7 @@
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
position: relative; position: relative;
z-index: 99; } z-index: 9; }
.toolbar .sdm, .toolbar .fn_g { .toolbar .sdm, .toolbar .fn_g {
display: inline-block; display: inline-block;
vertical-align: top; } vertical-align: top; }
@ -352,21 +282,16 @@
width: auto; width: auto;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
position: relative; position: relative; }
z-index: 10; }
.tinycanvas .overview { .tinycanvas .overview {
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
width: 100%; min-width: 100%;
height: 100%; } height: 100%; }
.tinycanvas .overview:after {
content: "";
display: table;
width: 100%; }
.tinycanvas .overview > .column { .tinycanvas .overview > .column {
float: left; float: left;
border-right: solid 1px #eee; border-right: solid 1px #eeeeee;
padding: 0 12px 0 0; padding: 0 12px 0 0;
margin: 0 12px 0 0; margin: 0 12px 0 0;
height: 100%; } height: 100%; }
@ -422,7 +347,7 @@
width: 6px; } width: 6px; }
.tinycanvas .scrollbar { .tinycanvas .scrollbar {
position: absolute; position: absolute;
z-index: 11; z-index: 9;
visibility: hidden; visibility: hidden;
opacity: 0; opacity: 0;
-webkit-transition: opacity 0.3s ease; -webkit-transition: opacity 0.3s ease;
@ -433,7 +358,7 @@
visibility: visible; } visibility: visible; }
.tinycanvas .scrollbar.sb_h { .tinycanvas .scrollbar.sb_h {
left: 0; left: 0;
bottom: 0; bottom: -6px;
height: 6px; } height: 6px; }
.tinycanvas .scrollbar.sb_v { .tinycanvas .scrollbar.sb_v {
right: 0; right: 0;

View File

@ -1,6 +1,6 @@
@import "desktop-helper"; @import "desktop-helper";
.noSelect, .noSelect * { .noSelect {
@include no-select; @include no-select;
} }
@ -19,11 +19,9 @@
margin-left: 0; margin-left: 0;
} }
} }
// fixed width column with 12px gutter // fixed width column
// 276px width for 8 columns // full width 420px
// 420px width for 12 columns @for $i from 1 through 12 {
// 564px width for 16 columns
@for $i from 1 through 16 {
.s_grid_#{$i} { .s_grid_#{$i} {
width: 36px * $i - 12px; width: 36px * $i - 12px;
} }
@ -40,7 +38,6 @@
height: 44px * $j - 12px; height: 44px * $j - 12px;
} }
} }
} }
/* simple dropdown menu */ /* simple dropdown menu */
@ -61,7 +58,7 @@
left: 0; left: 0;
top: 60px; top: 60px;
font-size: 15px; font-size: 15px;
min-width: 120px; width: 120px;
border: solid 2px $gray; border: solid 2px $gray;
@include box-sizing; @include box-sizing;
@ -95,7 +92,7 @@
line-height: 36px; line-height: 36px;
li { li {
border-top: solid 1px lighten($gray, 5%); border-top: solid 1px $gray;
} }
li:first-child { li:first-child {
border: none; border: none;
@ -109,25 +106,27 @@
.s_tab { .s_tab {
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
ul {
overflow: hidden;
}
li {
float: left;
}
a {
display: block;
}
.admbg {
background-color: #f0f0f0;
}
} }
.stb_h {} .stb_h {}
.stb_v {} .stb_v {}
.s_tab ul {
overflow: hidden;
}
.s_tab li {
float: left;
}
.s_tab a {
display: block;
}
.s_tab .admbg {
background-color: #f0f0f0;
}
.st_c { .st_c {
display: none; display: none;
} }
.st_c:first-child {
display: block;
}
/* simple form */ /* simple form */
.s_form { .s_form {
@ -136,6 +135,7 @@
// basic style // basic style
label { label {
font-size: 13px; font-size: 13px;
font-weight: bold;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
width: 100px; width: 100px;
@ -148,9 +148,6 @@
} }
input[type=text], input[type=text],
input[type=password], input[type=password],
input[type=submit],
input[type=reset],
input[type=button],
select { select {
height: 32px; height: 32px;
margin-top: 0; margin-top: 0;
@ -172,7 +169,7 @@
@include box-sizing; @include box-sizing;
&:focus { &:focus {
// background-color: lighten($gray, 10%); background-color: lighten($gray, 10%);
border-color: darken($gray, 10%); border-color: darken($gray, 10%);
} }
} }
@ -201,8 +198,8 @@
} }
} }
/* simple select */
.s_select_g { .check_box_g {
padding: 4px 8px; padding: 4px 8px;
// border: solid 1px $gray; // border: solid 1px $gray;
@include box-sizing; @include box-sizing;
@ -227,87 +224,6 @@
} }
li label { li label {
padding-left: 4px; padding-left: 4px;
cursor: pointer;
&:before {
display: inline-block;
vertical-align: middle;
width: 14px;
height: 14px;
line-height: 14px;
text-align: center;
margin-right: 6px;
content: '';
border: solid 1px darken($gray, 10%);
}
}
input[type=checkbox],
input[type=radio]
{
display: none;
}
input[type=checkbox]:checked + label:before, input[type=radio]:checked + label:before {
background-color: darken($gray, 60%);
border-color: darken($gray, 60%);
color: #fff;
@include font-icon(12);
}
input[type=checkbox]:checked + label:before {
content: "\f00c";
}
input[type=radio] + label:before {
border-radius: 8px;
}
input[type=radio]:checked + label:before {
content: "\f111";
font-size: 9px;
-webkit-text-size-adjust: none;
}
}
/* simple switch */
.s_switch {
overflow: hidden;
.s_switch_status {
font-size: 1.5em;
line-height: 20px;
height: 20px;
float: left;
margin-right: 60px;
}
.s_switch_switcher {
display: block;
float: right;
position: relative;
width: 48px;
height: 20px;
overflow: hidden;
input[type=checkbox] {
width: 144px;
height: 20px;
margin: 0;
position: absolute;
top: 0;
left: -96px;
+ .s_switch_toggle {
display: block;
position: absolute;
left: -2px;
top: -2px;
width: 16px;
height: 20px;
background-color: #000;
border: solid 2px #fff;
cursor: pointer;
@include transition-type(left,0.3);
}
&:checked + .s_switch_toggle {
left: 30px;
}
}
} }
} }
@ -317,7 +233,7 @@
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
position: relative; position: relative;
z-index: 99; z-index: 9;
.sdm, .fn_g { .sdm, .fn_g {
display: inline-block; display: inline-block;
@ -352,21 +268,14 @@
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
z-index: 10;
} }
.overview { .overview {
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
width: 100%; min-width: 100%;
height: 100%; height: 100%;
&:after {
content: "";
display: table;
width: 100%;
}
> .column { > .column {
float: left; float: left;
border-right: solid 1px #eee; border-right: solid 1px #eee;
@ -420,7 +329,7 @@
} }
.scrollbar { .scrollbar {
position: absolute; position: absolute;
z-index: 11; z-index: 9;
visibility: hidden; visibility: hidden;
opacity: 0; opacity: 0;
@include transition-type(opacity, 0.3); @include transition-type(opacity, 0.3);
@ -431,7 +340,7 @@
} }
&.sb_h { &.sb_h {
left: 0; left: 0;
bottom: 0; bottom: -6px;
height: 6px; height: 6px;
} }
&.sb_v { &.sb_v {

View File

@ -72,12 +72,6 @@ a:focus {
content: ''; content: '';
clear: both; } clear: both; }
.valign:before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle; }
.o-loading { .o-loading {
font-size: 13px; } font-size: 13px; }
.fullsize .o-loading { .fullsize .o-loading {
@ -86,17 +80,14 @@ a:focus {
font-size: 20px; } font-size: 20px; }
#thmbackground { #thmbackground {
min-height: 100%;
min-width: 980px;
width: 100%; width: 100%;
height: 100%; height: auto;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
z-index: -1; z-index: -1; }
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover; }
#bgover { #bgover {
position: fixed; position: fixed;
@ -130,14 +121,13 @@ a:focus {
background-color: #fff; } background-color: #fff; }
.admbg2 { .admbg2 {
background-color: #dddddd; } background-color: #ddd; }
.admtxt { .admtxt {
color: #666; } color: #666; }
a.admtxt.admbg2:hover { .admtxt:hover {
color: #fff; color: #666; }
background-color: #aaaaaa; }
.hfn { .hfn {
font-size: 15px; font-size: 15px;
@ -157,15 +147,6 @@ a.admtxt.admbg2:hover {
.ini_input:focus { .ini_input:focus {
outline: none; } outline: none; }
.text_ofl {
overflow: hidden; }
.text_ofl span {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis; }
/* - Opacity */ /* - Opacity */
.op00 { .op00 {
opacity: 0; } opacity: 0; }
@ -257,15 +238,7 @@ a.admtxt.admbg2:hover {
.element { .element {
margin: 0 12px 12px 0; margin: 0 12px 12px 0;
float: left; float: left;
position: relative; position: relative; }
cursor: pointer;
-webkit-transition: all 0.2s ease;
-moz-transition: all 0.2s ease;
transition: all 0.2s ease; }
.element:active {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92); }
.group { .group {
float: left; float: left;
@ -273,14 +246,12 @@ a.admtxt.admbg2:hover {
/* desktop layout */ /* desktop layout */
#container { #container {
padding: 48px 0 0 156px; padding: 48px 0 0 156px; }
min-width: 800px; }
#header { #header {
padding: 0 0 12px 0; padding: 0 0 12px 0;
height: 72px; min-width: 800px;
position: relative; height: 72px; }
z-index: 2; }
#side { #side {
width: 60px; width: 60px;
@ -289,13 +260,12 @@ a.admtxt.admbg2:hover {
margin-right: 96px; margin-right: 96px;
top: 120px; top: 120px;
left: 0; left: 0;
z-index: 13; } z-index: 11; }
#holder { #holder {
height: 516px; height: 516px;
width: auto; width: auto;
position: relative; position: relative; }
z-index: 1; }
#rwidget { #rwidget {
height: 516px; } height: 516px; }
@ -368,59 +338,37 @@ a.admtxt.admbg2:hover {
/* panel */ /* panel */
#panel_l { #panel_l {
background-color: #f7f7f7; background-color: #f0f0f0;
float: left; } float: left; }
#panel_r { #panel_r {
background-color: #fff;
margin-left: 252px; margin-left: 252px;
position: relative; position: relative; }
width: auto; }
/* Desktop Notification */ /* Desktop Notification */
#orbitnote { #orbitnote {
position: fixed; position: fixed;
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -200px; margin-left: -206px;
z-index: 99999; z-index: 99999;
width: 400px; width: 400px;
-webkit-transition: height 2s ease; padding: 0 6px 6px 6px;
-moz-transition: height 2s ease; background-color: #000;
transition: height 2s ease; } background-color: rgba(0, 0, 0, 0.6); }
#orbitnote .note_holder { #orbitnote .note_holder {
background-color: #f3f3f3;
border: solid 1px white;
border-top: none;
overflow: hidden; overflow: hidden;
padding: 36px; padding: 24px 24px; }
border: solid 2px #dddddd;
border-top: 0;
display: none; }
#orbitnote .note_holder .note_type { #orbitnote .note_holder .note_type {
display: inline-block; float: left; }
vertical-align: middle; #orbitnote .note_holder .note_type img {
width: 60px; display: block; }
height: 60px;
color: #fff; }
#orbitnote .note_holder .note_type .sign {
display: block;
font-size: 40px;
width: 40px;
height: 40px;
padding: 10px;
border-radius: 30px;
text-align: center; }
#orbitnote .note_holder .note_type .sign.icon-ok {
background-color: #5BB75B; }
#orbitnote .note_holder .note_type .sign.icon-exclamation-sign {
background-color: #DA4F49; }
#orbitnote .note_holder .note_type .sign.icon-warning-sign {
background-color: #FAA732; }
#orbitnote .note_holder .note_message { #orbitnote .note_holder .note_message {
color: #333; color: #333;
display: inline-block; margin: 10px 0 0 48px;
vertical-align: middle;
word-wrap: break-word;
width: 240px;
margin: 0 0 0 20px;
font-size: 15px; } font-size: 15px; }
/* Desktop Dialogue */ /* Desktop Dialogue */
@ -430,8 +378,7 @@ a.admtxt.admbg2:hover {
height: 100%; height: 100%;
left: 0; left: 0;
top: 0; top: 0;
z-index: 12; z-index: 12; }
display: none; }
#orbitdiag .tile { #orbitdiag .tile {
background-color: #000; } background-color: #000; }
#orbitdiag .diag_holder { #orbitdiag .diag_holder {
@ -455,7 +402,7 @@ a.admtxt.admbg2:hover {
font-size: 15px; font-size: 15px;
line-height: 36px; } line-height: 36px; }
#orbitdiag .diag_holder .diag_holder_inner .diag_btn:hover { #orbitdiag .diag_holder .diag_holder_inner .diag_btn:hover {
outline: solid 2px #fff; } outline: solid 2px white; }
/* Tile */ /* Tile */
.appname { .appname {
@ -488,7 +435,7 @@ a.admtxt.admbg2:hover {
height: 60px; height: 60px;
margin: 0 auto; margin: 0 auto;
position: relative; } position: relative; }
[data-sizex="1"] .appicon, .w1.h1 .appicon { [data-sizex="1"] .appicon {
margin-top: 24px; } margin-top: 24px; }
#sections .appicon { #sections .appicon {
width: 30px; width: 30px;
@ -533,11 +480,6 @@ a.admtxt.admbg2:hover {
cursor: move; cursor: move;
overflow: hidden; } overflow: hidden; }
.gs_w.dragging {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92); }
/* header drop menu */ /* header drop menu */
.sdm_mdr .sdm_o { .sdm_mdr .sdm_o {
top: 36px; } top: 36px; }
@ -553,7 +495,7 @@ a.admtxt.admbg2:hover {
cursor: pointer; } cursor: pointer; }
.theme_thumb, .stock_wallpaper img { .theme_thumb, .stock_wallpaper img {
border: solid 1px #fff; border: solid 1px white;
width: 120px; width: 120px;
margin: 0 auto; } margin: 0 auto; }
@ -606,9 +548,8 @@ a.admtxt.admbg2:hover {
padding: 24px 0; padding: 24px 0;
margin-top: 12px; margin-top: 12px;
overflow: hidden; overflow: hidden;
border-top: solid 1px #eee; } border-top: solid 1px #eeeeee;
.s_action .setting_btn { background-color: #fff; }
margin-left: 12px; }
.setting_btn { .setting_btn {
display: block; display: block;
@ -618,76 +559,28 @@ a.admtxt.admbg2:hover {
text-align: center; text-align: center;
border: 0; } border: 0; }
/* Apps Manager */ .group_search {
#app_info {
float: left; float: left;
width: 420px; margin-right: 36px; }
height: 516px;
margin-right: 36px;
display: none; }
#app_info .app_info_header {
height: 120px;
margin: -12px -12px 12px -12px;
position: relative;
background-color: #f7f7f7;
-webkit-box-sizing: border-box;
/* webkit */
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
#app_info .app_info_header > * {
height: 100%; }
#app_info .app_info_header .app_info_icon {
display: block;
margin: 0 auto;
margin-top: 30px;
-webkit-box-sizing: border-box;
/* webkit */
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
#app_info .app_info_header .app_info_name {
display: inline-block;
vertical-align: middle;
font-size: 2em;
width: 300px;
word-wrap: break-word; }
#app_info .app_info_header .panel_close {
position: absolute;
right: 12px;
top: 12px;
font-size: 20px; }
#app_info .app_info_list {
line-height: 1.5em;
overflow: hidden; }
#app_info .app_info_list label {
color: #aaaaaa; }
#app_list {
float: left; }
#app_list .element > * {
cursor: pointer; }
.search_result { .search_result {
float: left; float: left;
overflow: hidden; } margin-right: 24px;
.search_result .message { max-width: 340px; }
font-size: 15px;
word-wrap: break-word; } .g_sep {
.search_result .message b { width: 12px;
font-size: 20px; border-left: solid 1px white;
display: block; -webkit-box-sizing: border-box;
margin-top: 12px; } /* webkit */
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
.grp { .grp {
height: 528px; height: 528px;
@ -715,10 +608,9 @@ a.admtxt.admbg2:hover {
overflow: hidden; } overflow: hidden; }
.list_t_title { .list_t_title {
padding-bottom: 6px; margin-bottom: 6px;
color: #000; color: #333;
font-size: 15px; font-size: 15px; }
line-height: 1.3em; }
.list_t_des { .list_t_des {
line-height: 1.5em; line-height: 1.5em;
@ -726,34 +618,153 @@ a.admtxt.admbg2:hover {
margin-bottom: 4px; margin-bottom: 4px;
font-size: 13px; } font-size: 13px; }
.list_item_function { .list_item_function a {
position: absolute; display: inline-block;
right: 0; padding: 4px;
bottom: -30px; font-size: 11px;
width: 100%; -webkit-text-size-adjust: none; }
height: 30px;
line-height: 30px; /* Journal Papers */
text-align: right; [page-name="journal_p_list"] .list_t_item .inner {
-webkit-transition: all 0.3s ease; padding-left: 30px; }
-moz-transition: all 0.3s ease; [page-name="journal_p_list"] .list_item_action {
transition: all 0.3s ease; } font-size: 12px;
.list_item_function a { float: left;
display: inline-block; margin-left: -30px; }
vertical-align: top; [page-name="journal_p_list"] .list_item_action a {
margin-left: 4px; display: block;
padding: 0 6px; width: 20px;
font-size: 11px; height: 20px;
-webkit-text-size-adjust: none; } line-height: 20px;
.list_item_function a :first-child { margin: 1px 1px 6px 1px; }
margin-left: 0; } [page-name="journal_p_list"] .list_item_action .icon-star-empty {
.datalist_item:hover .list_item_function { color: #999;
bottom: 0; } font-size: 20px; }
[page-name="journal_p_list"] .list_item_action .icon-star {
color: #faa732;
font-size: 20px; }
[page-name="journal_p_list"] .list_item_action .icon-check-empty {
color: #999;
font-size: 20px; }
[page-name="journal_p_list"] .list_item_action .icon-check {
color: #333;
font-size: 20px; }
[page-name="journal_p_list"] .file_view .list_t_des {
overflow: hidden; }
[page-name="journal_p_list"] .file_view .file {
float: left;
width: 120px;
height: 50px;
padding: 6px;
margin: 1px;
position: relative;
-webkit-box-sizing: border-box;
/* webkit */
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
[page-name="journal_p_list"] .file_view .file:hover {
background-color: #f7f7f7; }
[page-name="journal_p_list"] .file_view .file img {
width: 38px;
height: 38px;
position: absolute;
left: 6px;
top: 6px; }
[page-name="journal_p_list"] .file_view .file .filetitle {
display: block;
width: 100%;
height: 38px;
padding-left: 40px;
overflow: hidden;
-webkit-box-sizing: border-box;
/* webkit */
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
/* Journal Paper Add */
#paper_add .s_grid_con {
float: left;
height: 456px;
margin-left: 12px;
padding-left: 12px;
border-left: solid 1px #eeeeee; }
#paper_add .s_grid_con:first-child {
margin-left: 0;
padding-left: 0;
border: none; }
#paper_add .f_w {
width: 336px; }
#paper_add label {
margin-right: 0; }
/* Journal Journal list */
[page-name="journal_p_journal"] .datalist_item .inner {
padding-left: 30px; }
[page-name="journal_p_journal"] .list_item_action {
font-size: 12px;
float: left;
margin-left: -30px; }
[page-name="journal_p_journal"] .list_item_action i {
color: #999;
font-size: 20px;
display: block;
width: 20px;
height: 20px;
line-height: 20px;
margin: 1px 1px 6px 1px; }
[page-name="journal_p_journal"] .list_t_desc {
font-family: Arial, sans-serif;
font-size: 12px;
color: #999; }
/* Journal Co-Author */
[page-name="journal_p_coauthor"] .list_t_item {
height: 110px; }
[page-name="journal_p_coauthor"] .list_item_function a {
display: inline-block;
padding: 4px;
font-family: Arial, sans-serif;
font-size: 11px;
-webkit-text-size-adjust: none; }
[page-name="journal_p_coauthor"] .info {
font-family: Arial, sans-serif; }
[page-name="journal_p_coauthor"] .info li {
margin-bottom: 8px;
color: #999; }
[page-name="journal_p_coauthor"] .info .name {
font-size: 18px;
line-height: 24px;
color: #333; }
/* Journal Co-Author Relationship*/
[page-name="journal_p_coauthor_relation"] .edit_co_author_relation {
/*margin-left: -10px;*/ }
[page-name="journal_p_coauthor_relation"] .form_space {
margin-bottom: 10px;
font-size: 18px;
font-family: Arial, sans-serif; }
/* Journal New Co-Author */
#new_co_author label {
margin-right: 0; }
/* App */ /* App */
.app_frame { .app_frame {
margin: 60px 0 48px 156px; margin: 48px 96px 48px 156px;
min-width: 800px; min-width: 800px;
min-height: 576px; min-height: 588px;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@ -764,40 +775,17 @@ a.admtxt.admbg2:hover {
background-color: #fff; background-color: #fff;
position: absolute; position: absolute;
width: 100%; } width: 100%; }
.app_frame .app_holder iframe { .app_frame #header .icon-remove {
width: 100%; } display: block;
.app_frame .app_frame_header { float: right;
height: 60px; } line-height: 60px;
.app_frame .app_frame_header .icon-remove, .app_frame .app_frame_header .icon-minus { font-size: 20px;
display: block; cursor: pointer; }
float: right;
line-height: 60px;
font-size: 20px;
cursor: pointer; }
/* Minimize Section */
#minimizebar {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
z-index: 14; }
#minimizebar .minimize {
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 36px;
font-size: 15px;
float: left; }
#minimizebar .minimize .icon-remove {
float: right;
line-height: 36px; }
/*Tooltip popup */ /*Tooltip popup */
.desktop_toolpopup { .desktop_toolpopup {
position: absolute; position: absolute;
z-index: 10; z-index: 10px;
display: none; display: none;
padding: 12px; padding: 12px;
cursor: default; cursor: default;

View File

@ -68,12 +68,6 @@ a:focus { outline: none; }
content: ''; content: '';
clear: both; clear: both;
} }
.valign:before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
.o-loading { .o-loading {
font-size: 13px; font-size: 13px;
// font-weight: normal; // font-weight: normal;
@ -86,17 +80,14 @@ a:focus { outline: none; }
} }
} }
#thmbackground { #thmbackground {
min-height: 100%;
min-width: 980px;
width: 100%; width: 100%;
height: 100%; height: auto;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
z-index: -1; z-index: -1;
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
} }
#bgover { #bgover {
position: fixed; position: fixed;
@ -122,12 +113,9 @@ a:focus { outline: none; }
/* Desktop Global Style */ /* Desktop Global Style */
.admbg { background-color: #fff; } .admbg { background-color: #fff; }
.admbg2 { background-color: $gray; } .admbg2 { background-color: #ddd; }
.admtxt { color: #666; } .admtxt { color: #666; }
a.admtxt.admbg2:hover { .admtxt:hover { color: #666; }
color: #fff;
background-color: darken($gray, 20%);
}
.hfn { .hfn {
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
@ -142,17 +130,6 @@ a.admtxt.admbg2:hover {
border: 0; border: 0;
} }
.ini_input:focus { outline: none; } .ini_input:focus { outline: none; }
.text_ofl {
overflow: hidden;
span {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}
}
/* - Opacity */ /* - Opacity */
@for $i from 0 through 10 { @for $i from 0 through 10 {
@ -189,15 +166,7 @@ a.admtxt.admbg2:hover {
margin: 0 12px 12px 0; margin: 0 12px 12px 0;
float: left; float: left;
position: relative; position: relative;
cursor: pointer;
@include transition-type(all,0.2);
&:active {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92);
} }
}
.group{ .group{
float: left; float: left;
margin-right: 24px; margin-right: 24px;
@ -206,13 +175,11 @@ a.admtxt.admbg2:hover {
/* desktop layout */ /* desktop layout */
#container { #container {
padding: 48px 0 0 156px; padding: 48px 0 0 156px;
min-width: 800px;
} }
#header { #header {
padding: 0 0 12px 0; padding: 0 0 12px 0;
min-width: 800px;
height: 72px; height: 72px;
position: relative;
z-index: 2;
} }
#side { #side {
width: 60px; width: 60px;
@ -221,13 +188,12 @@ a.admtxt.admbg2:hover {
margin-right: 96px; margin-right: 96px;
top: 120px; top: 120px;
left: 0; left: 0;
z-index: 13; z-index: 11;
} }
#holder { #holder {
height: 516px; height: 516px;
width: auto; width: auto;
position: relative; position: relative;
z-index: 1;
} }
#rwidget { #rwidget {
height: 516px; height: 516px;
@ -316,14 +282,12 @@ a.admtxt.admbg2:hover {
} }
/* panel */ /* panel */
#panel_l { #panel_l {
background-color: lighten($gray, 10%); background-color: #f0f0f0;
float: left; float: left;
} }
#panel_r { #panel_r {
background-color: #fff;
margin-left: 252px; margin-left: 252px;
position: relative; position: relative;
width: auto;
} }
/* Desktop Notification */ /* Desktop Notification */
@ -331,46 +295,30 @@ a.admtxt.admbg2:hover {
position: fixed; position: fixed;
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -200px; margin-left: -206px;
z-index: 99999; z-index: 99999;
width: 400px; width: 400px;
@include transition-type(height,2); padding: 0 6px 6px 6px;
background-color: #000;
background-color: rgba(0,0,0,0.6);
.note_holder { .note_holder {
background-color: #f3f3f3;
border: solid 1px #fff;
border-top: none;
overflow: hidden; overflow: hidden;
padding: 36px; padding: 24px 24px;
border: solid 2px $gray;
border-top: 0;
display: none;
.note_type { .note_type {
display: inline-block; float: left;
vertical-align: middle;
width: 60px;
height: 60px;
color: #fff;
.sign { img {
display: block; display: block;
font-size: 40px;
width: 40px;
height: 40px;
padding: 10px;
border-radius: 30px;
text-align: center;
&.icon-ok { background-color: #5BB75B; }
&.icon-exclamation-sign { background-color: #DA4F49; }
&.icon-warning-sign { background-color: #FAA732; }
} }
} }
.note_message { .note_message {
color: #333; color: #333;
display: inline-block; margin: 10px 0 0 48px;
vertical-align: middle;
word-wrap: break-word;
width: 240px;
margin: 0 0 0 20px;
font-size: 15px; font-size: 15px;
// font-weight: normal; // font-weight: normal;
} }
@ -385,7 +333,6 @@ a.admtxt.admbg2:hover {
left: 0; left: 0;
top: 0; top: 0;
z-index: 12; z-index: 12;
display: none;
.tile { .tile {
background-color: #000; background-color: #000;
@ -464,7 +411,7 @@ a.admtxt.admbg2:hover {
margin: 0 auto; margin: 0 auto;
position: relative; position: relative;
[data-sizex="1"] &, .w1.h1 & { [data-sizex="1"] & {
margin-top: 24px; margin-top: 24px;
} }
#sections & { #sections & {
@ -513,11 +460,11 @@ a.admtxt.admbg2:hover {
cursor: move; cursor: move;
overflow: hidden; overflow: hidden;
} }
.gs_w.dragging { // .app.gs_w:active {
-webkit-transform: scale(0.92); // -webkit-transform: scale(0.9);
-moz-transform: scale(0.92); // -moz-transform: scale(0.9);
transform: scale(0.92); // transform: scale(0.9);
} // }
/* header drop menu */ /* header drop menu */
.sdm_mdr .sdm_o { top: 36px; } .sdm_mdr .sdm_o { top: 36px; }
@ -599,11 +546,7 @@ a.admtxt.admbg2:hover {
margin-top: 12px; margin-top: 12px;
overflow: hidden; overflow: hidden;
border-top: solid 1px #eee; border-top: solid 1px #eee;
// background-color: #fff; background-color: #fff;
.setting_btn {
margin-left: 12px;
}
} }
.setting_btn { .setting_btn {
display: block; display: block;
@ -615,74 +558,21 @@ a.admtxt.admbg2:hover {
border: 0; border: 0;
} }
/* Apps Manager */
#app_info { .group_search{
float: left; float: left;
width: 420px;
height: 516px;
margin-right: 36px; margin-right: 36px;
display: none;
.app_info_header {
height: 120px;
margin: -12px -12px 12px -12px;
position: relative;
background-color: lighten($gray, 10%);
@include box-sizing;
> * {
height: 100%;
}
.app_info_icon {
display: block;
margin: 0 auto;
margin-top: 30px;
@include box-sizing;
}
.app_info_name {
display: inline-block;
vertical-align: middle;
font-size: 2em;
width: 300px;
word-wrap: break-word;
}
.panel_close {
position: absolute;
right: 12px;
top: 12px;
font-size: 20px;
}
}
.app_info_list {
line-height: 1.5em;
overflow: hidden;
label {
color: darken($gray, 20%);
}
}
}
#app_list {
float: left;
.element > * {
cursor: pointer;
}
} }
.search_result{ .search_result{
float: left; float: left;
overflow: hidden; margin-right: 24px;
max-width: 340px;
.message { }
font-size: 15px; .g_sep {
word-wrap: break-word; width: 12px;
border-left: solid 1px #fff;
b { @include box-sizing;
font-size: 20px;
display: block;
margin-top: 12px;
}
}
} }
@ -706,14 +596,11 @@ a.admtxt.admbg2:hover {
} }
/* list item */ /* list item */
.list_t_item { .list_t_item { overflow: hidden; }
overflow: hidden;
}
.list_t_title { .list_t_title {
padding-bottom: 6px; margin-bottom: 6px;
color: #000; color: #333;
font-size: 15px; font-size: 15px;
line-height: 1.3em;
// font-weight: normal; // font-weight: normal;
} }
.list_t_des { .list_t_des {
@ -722,38 +609,164 @@ a.admtxt.admbg2:hover {
margin-bottom: 4px; margin-bottom: 4px;
font-size: 13px; font-size: 13px;
} }
.list_item_function { .list_item_function a {
position: absolute; display: inline-block;
right: 0; padding: 4px;
bottom: -30px; font-size: 11px;
width: 100%; -webkit-text-size-adjust: none;
height: 30px; }
line-height: 30px;
text-align: right;
@include transition-type(all,0.3);
a { /* Journal Papers */
display: inline-block; [page-name="journal_p_list"] {
vertical-align: top; .list_t_item .inner { padding-left: 30px; }
margin-left: 4px; .list_item_action {
padding: 0 6px; font-size: 12px;
font-size: 11px; float: left;
-webkit-text-size-adjust: none; margin-left: -30px;
:first-child { a {
margin-left: 0; display: block;
width: 20px;
height: 20px;
line-height: 20px;
margin: 1px 1px 6px 1px;
} }
.icon-star-empty { color: #999; font-size: 20px; }
.icon-star { color: #faa732; font-size: 20px; }
.icon-check-empty { color: #999; font-size: 20px; }
.icon-check { color: #333; font-size: 20px; }
} }
.datalist_item:hover & {
bottom: 0; .file_view {
.list_t_des {
overflow: hidden;
}
.file {
float: left;
width: 120px;
height: 50px;
padding: 6px;
margin: 1px;
position: relative;
@include box-sizing;
&:hover {
background-color: lighten($gray, 10%);
}
img {
width: 38px;
height: 38px;
position: absolute;
left: 6px;
top: 6px;
}
.filetitle {
display: block;
width: 100%;
height: 38px;
padding-left: 40px;
overflow: hidden;
@include box-sizing;
}
}
} }
} }
/* Journal Paper Add */
#paper_add {
.s_grid_con {
float: left;
height: 456px;
margin-left: 12px;
padding-left: 12px;
border-left: solid 1px #eee;
&:first-child {
margin-left: 0;
padding-left: 0;
border: none;
}
}
.f_w { width: 336px; }
label { margin-right: 0; }
}
/* Journal Journal list */
[page-name="journal_p_journal"] {
.datalist_item .inner {
padding-left: 30px;
}
.list_item_action {
font-size: 12px;
float: left;
margin-left: -30px;
}
.list_item_action i {
color: #999;
font-size: 20px;
display: block;
width: 20px;
height: 20px;
line-height: 20px;
margin: 1px 1px 6px 1px;
}
.list_t_desc {
font-family: Arial, sans-serif;
font-size: 12px;
color: #999;
}
}
/* Journal Co-Author */
[page-name="journal_p_coauthor"] {
.list_t_item {
height: 110px;
}
.list_item_function {}
.list_item_function a {
display: inline-block;
padding: 4px;
font-family: Arial, sans-serif;
font-size: 11px;
-webkit-text-size-adjust: none;
}
.info {
font-family: Arial, sans-serif;
}
.info li {
margin-bottom: 8px;
color: #999;
}
.info .name {
font-size: 18px;
line-height: 24px;
color: #333;
}
}
/* Journal Co-Author Relationship*/
[page-name="journal_p_coauthor_relation"]{
.edit_co_author_relation {
/*margin-left: -10px;*/
}
.form_space {
margin-bottom: 10px;
font-size: 18px;
font-family: Arial, sans-serif;
}
}
/* Journal New Co-Author */
#new_co_author label {
margin-right: 0;
}
/* App */ /* App */
.app_frame { .app_frame {
margin: 60px 0 48px 156px; margin: 48px 96px 48px 156px;
min-width: 800px; min-width: 800px;
min-height: 576px; min-height: 588px;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@ -765,55 +778,20 @@ a.admtxt.admbg2:hover {
background-color: #fff; background-color: #fff;
position: absolute; position: absolute;
width: 100%; width: 100%;
iframe {
width: 100%;
}
} }
.app_frame_header{ #header .icon-remove {
height: 60px; display: block;
float: right;
.icon-remove, .icon-minus { line-height: 60px;
display: block; font-size: 20px;
float: right;
line-height: 60px;
font-size: 20px;
cursor: pointer;
}
}
}
/* Minimize Section */
#minimizebar {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
z-index: 14;
.minimize {
cursor: pointer; cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 36px;
font-size: 15px;
float: left;
.icon-remove {
float: right;
line-height: 36px;
}
}
> :first-child {
// margin-top: 48px;
} }
} }
/*Tooltip popup */ /*Tooltip popup */
.desktop_toolpopup { .desktop_toolpopup {
position: absolute; position: absolute;
z-index: 10; z-index: 10px;
display: none; display: none;
padding: 12px; padding: 12px;
cursor: default; cursor: default;

View File

@ -1,10 +1,10 @@
@media only screen and (min-width: 1240px){ @media only screen and (min-width: 1240px){
/*#panel_r.pw { width: 800px; }*/ #panel_r.pw { width: 800px; }
} }
@media only screen and (min-width: 1900px){ @media only screen and (min-width: 1900px){
/*#panel_r.pw { width: 1400px; }*/ #panel_r.pw { width: 1400px; }
} }

View File

@ -271,7 +271,7 @@ disabled look for disabled choices in the results dropdown
.select2-container.select2-container-disabled .select2-choice { .select2-container.select2-container-disabled .select2-choice {
background-color: #f4f4f4; background-color: #f4f4f4;
background-image: none; background-image: none;
border: 1px solid #ddd; border: 1px solid #dddddd;
cursor: default; } cursor: default; }
.select2-container.select2-container-disabled .select2-choice div { .select2-container.select2-container-disabled .select2-choice div {
@ -326,7 +326,7 @@ disabled look for disabled choices in the results dropdown
background: white url("select2/spinner.gif") no-repeat 100% !important; } background: white url("select2/spinner.gif") no-repeat 100% !important; }
.select2-default { .select2-default {
color: #999 !important; } color: #999999 !important; }
.select2-container-multi .select2-choices .select2-search-choice { .select2-container-multi .select2-choices .select2-search-choice {
padding: 3px 5px 3px 18px; padding: 3px 5px 3px 18px;
@ -374,12 +374,12 @@ disabled look for disabled choices in the results dropdown
.select2-container-multi.select2-container-disabled .select2-choices { .select2-container-multi.select2-container-disabled .select2-choices {
background-color: #f4f4f4; background-color: #f4f4f4;
background-image: none; background-image: none;
border: 1px solid #ddd; border: 1px solid #dddddd;
cursor: default; } cursor: default; }
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
padding: 3px 5px 3px 5px; padding: 3px 5px 3px 5px;
border: 1px solid #ddd; border: 1px solid #dddddd;
background-image: none; background-image: none;
background-color: #f4f4f4; } background-color: #f4f4f4; }

View File

@ -155,7 +155,7 @@ Version: 3.3.1 Timestamp: Wed Feb 20 09:57:22 PST 2013
} }
.select2-search input.select2-active { .select2-search input.select2-active {
background: #fff url('select2/spinner.gif') no-repeat 100%; background: #fff image-url('select2-spinner.gif') no-repeat 100%;
} }
.select2-container-active .select2-choice, .select2-container-active .select2-choice,
@ -273,7 +273,7 @@ disabled look for disabled choices in the results dropdown
} }
.select2-more-results.select2-active { .select2-more-results.select2-active {
background: #f4f4f4 url('select2/spinner.gif') no-repeat 100%; background: #f4f4f4 image-url('select2-spinner.gif') no-repeat 100%;
} }
.select2-more-results { .select2-more-results {
@ -352,7 +352,7 @@ disabled look for disabled choices in the results dropdown
} }
.select2-container-multi .select2-choices .select2-search-field input.select2-active { .select2-container-multi .select2-choices .select2-search-field input.select2-active {
background: #fff url('select2/spinner.gif') no-repeat 100% !important; background: #fff image-url('select2-spinner.gif') no-repeat 100% !important;
} }
.select2-default { .select2-default {

View File

@ -0,0 +1,38 @@
class Admin::MailCronLogsController < OrbitBackendController
layout "new_admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
# @mail_cron_logs = MailCronLog.all.desc(:created_at).page(params[:page_main] ).per('20')
@mail_cron_logs = (params[:sort]) ? get_sorted_and_filtered("mail_cron_log") : get_viewable("mail_cron_log")
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @mail_crons }
format.js
end
end
def destroy
@mail_cron_log = MailCronLog.find(params[:id])
@mail_cron_log.destroy
respond_to do |format|
format.html { redirect_to(admin_mail_cron_logs_url) }
# format.xml { head :ok }
format.js
end
end
def delete
if params[:ids]
mail_cron_logs = MailCronLog.any_in(:_id => params[:ids]).destroy_all
end
redirect_to admin_mail_cron_logs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
end

View File

@ -0,0 +1,126 @@
class Admin::MailCronsController < OrbitBackendController
layout "new_admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
# @mail_crons = MailCron.all.asc(:mail_sentdate).page(params[:page_main] ).per('20')
@mail_crons = (params[:sort]) ? get_sorted_and_filtered("mail_cron") : get_viewable("mail_cron")
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @mail_crons }
format.js
end
end
def show
end
def new
@mail_cron = MailCron.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @mail_cron }
end
end
def create
@mail_cron = MailCron.new(params[:mail_cron])
@mail_cron.create_user_id = current_user.id
@mail_cron.update_user_id = current_user.id
respond_to do |format|
if @mail_cron.save
format.html { redirect_to(admin_mail_crons_url) }
format.xml { render :xml => @mail_cron, :status => :created, :location => @mail_cron }
else
format.html { render :action => "new" }
format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
end
end
end
def edit
@mail_cron = MailCron.find(params[:id])
end
def update
@datas = MailCron.where(:mail_sentdate.lte => Time.now, :mail_sent => false)
@datas.each do |mail_data|
@mail_j = 0
@read_mails = Array.new
@mails = mail_data.mail_to.split(",")
@mails.each do |send_mail|
@read_mails << send_mail
@mail_j += 1
if 0 == @mail_j % 30
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
if !@read_mails.join(',').blank?
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
@mail_cron = MailCron.find(params[:id])
@mail_cron.update_user_id = current_user.id
respond_to do |format|
if @mail_cron.update_attributes(params[:mail_cron])
format.html { redirect_to(admin_mail_crons_url) }
format.js { render 'toggle_enable' }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@mail_cron = MailCron.find(params[:id])
@mail_cron.destroy
respond_to do |format|
format.html { redirect_to(admin_mail_crons_url) }
# format.xml { head :ok }
format.js
end
end
def delete
if params[:ids]
mail_crons = MailCron.any_in(:_id => params[:ids]).destroy_all
end
redirect_to admin_mail_crons_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
protected
end

View File

@ -11,23 +11,21 @@ class DefaultWidgetController< OrbitWidgetController
end end
def query_for_default_widget def query_for_default_widget
@ori_class_name = @default_widget["query"].split('.')[0]
@ori_class_name = @default_widget["query"].split('.')[0] @result = eval(@default_widget["query"])
result = nil
result_objects = nil
if !params["tag_id"].blank? if !params["tag_id"].blank?
if params["category_id"].blank? #has tag no cate if params["category_id"].blank? #has tag no cate
result = @ori_class_name.constantize.where(:tagged_ids.in => params["tag_id"]) @result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
else #has tag and cate else #has tag and cate
result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'], :tagged_ids.in => params['tag_id'])") @result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
@result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
end end
elsif params["category_id"].blank? #no tag no cate elsif params["category_id"].blank? #no tag no cate
result = eval(@default_widget["query"])
else #no tag has cate else #no tag has cate
result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'])")
@result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
end end
result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate) eval("@result.#{@default_widget[:sorting_query]}")
end end
def search_result def search_result
@ -40,9 +38,13 @@ class DefaultWidgetController< OrbitWidgetController
def default_widget def default_widget
@search = params["search_query"].blank? ? false : true @search = params["search_query"].blank? ? false : true
if !params[:id].blank? if !params[:id].blank? and !params["clicked_field_name"].blank?
clicked_field_name = params["clicked_field_name"].to_sym clicked_field_name = params["clicked_field_name"].to_sym
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})") redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})")
elsif !params[:id].blank? and params["preview"]
clicked_field_name = :title
@preview_pages = @page_part.module_app.widget_fields_link_method.find_all{|t| t[1].has_key?(:preview)}.collect{|t| t[0]}
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {preview: true,inner: #{params[:inner] || true},clicked_field_name: '#{@preview_pages.first.to_s}'})")
else else
@tag_class = nil @tag_class = nil
@default_widget = @page_part.module_app.get_default_widget @default_widget = @page_part.module_app.get_default_widget
@ -91,9 +93,9 @@ class DefaultWidgetController< OrbitWidgetController
end end
def get_category_field_name def get_category_field_name
@ori_class_name = @ori_class_name.constantize @ori_class_name = @ori_class_name.constantize unless @ori_class_name.is_a? Class
@ori_class_name.fields.each_key do |key| @ori_class_name.fields.each_key do |key|
return key if key.include?('category_id') return key.to_s if key.include?('category_id')
end end
nil nil
end end

View File

@ -1,49 +0,0 @@
class DesktopAppsController < OrbitBackendController
require "net/http"
require "uri"
require 'zip/zip'
def index
@desktopapps = DesktopApp.all
end
def upload
if !params[:desktop_app].nil?
temp_file = Tempfile.new("temp_file");
original_file = params[:desktop_app][:package_file]
temp_file.write(original_file.read.force_encoding("UTF-8"))
temp_file.rewind
filename = File.basename(original_file.original_filename,".zip")
unzip_app(temp_file,filename)
temp_file.close
end
end
def unzip_app(file, zip_name)
Zip::ZipFile.open(file) { |zip_file|
da = DesktopApp.new.from_json(zip_file.read("#{zip_name}/settings.json"))
Dir.mktmpdir('f_path') { |dir|
images_entries = []
zip_file.entries.each do |entry|
case (path = entry.to_s)
when /\A(#{zip_name})\/(images)\/.*((\.jpg)|(\.png)|(\.gif))\z/ #for img
images_entries << entry
end
end
images_entries.each do |image|
da.images.build(:file => get_temp_file(zip_file,dir,image))
end
}
da.save
}
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

View File

@ -31,7 +31,7 @@ class DesktopController< ApplicationController
render :layout => false render :layout => false
end end
def get_themes def themes
@themes = DesktopTheme.all @themes = DesktopTheme.all
# raise @themes.inspect # raise @themes.inspect
render "desktop/settings/themes", :layout => false render "desktop/settings/themes", :layout => false
@ -42,7 +42,6 @@ class DesktopController< ApplicationController
end end
def connections def connections
@url = "http://fb.tp.rulingcom.com/login?callback=http://harry.tp.rulingcom.com/facebook/register_fb?user="+current_user.id.to_s
render "desktop/settings/connections", :layout => false render "desktop/settings/connections", :layout => false
end end
@ -108,19 +107,18 @@ class DesktopController< ApplicationController
def getgroups def getgroups
@section = Section.find(params["sectionid"]) @section = Section.find(params["sectionid"])
@groups = @section.groups @groups = @section.groups
gr = Array.new gr = Array.new
@groups.each do |group| @groups.each do |group|
a = Array.new a = Array.new
@t = group.tiles t = group.tiles
t.each do |tile|
@t.each do |tile|
data_content = "" data_content = ""
jsfile = [] jsfile = []
cssfile = "" cssfile = ""
shape = "w1 h1" shape = "w1 h1"
link = ""
icon= ""
fullsize = false fullsize = false
link = ""
if tile.data_category == "widget" if tile.data_category == "widget"
widge = DesktopWidget.find(tile.desktop_widget_id.to_s) widge = DesktopWidget.find(tile.desktop_widget_id.to_s)
# data_content = widge.widget_layout.file # data_content = widge.widget_layout.file
@ -129,17 +127,21 @@ class DesktopController< ApplicationController
cssfile = widge.css_default.file.as_json[:file] cssfile = widge.css_default.file.as_json[:file]
shape = widge.shape shape = widge.shape
title = widge.name title = widge.name
icon = widge.images.where(:name => widge.icon).first.file.url
# binding.pry # binding.pry
fullsize = widge.fullsize if not widge.fullsize.nil?
fullsize = widge.fullsize
end
else else
app = DesktopApp.find(tile.desktop_app_id.to_s) data_content = tile.data_content
title = app.name title = tile.title
link = app.url case data_content
icon = app.images.where(:name => app.icon).first.file.url when "envocab"
link = "http://www.english-vocabulary.eu/"
when "wikibooks"
link = "http://www.wikibooks.org"
end
end end
gr << {"id"=>tile.id,"data_category"=>tile.data_category,"data_content"=>data_content,"js"=>jsfile,"css"=>cssfile,"shape"=>shape,"position"=>tile.position,"row"=>tile.row,"column"=>tile.column, "title"=>title,"fullsize"=>fullsize,"link"=>link,"icon"=>icon} gr << {"id"=>tile.id,"data_category"=>tile.data_category,"data_content"=>data_content,"js"=>jsfile,"css"=>cssfile,"shape"=>shape,"position"=>tile.position,"row"=>tile.row,"column"=>tile.column, "title"=>title,"fullsize"=>fullsize,"link"=>link}
end end
@ -150,11 +152,9 @@ class DesktopController< ApplicationController
def widget_layout def widget_layout
widget = DesktopWidget.find(params[:id]) widget = DesktopWidget.find(params[:id])
# link = '<link href="'+widget.css_default.file.to_s+'" media="screen" rel="stylesheet" type="text/css" />' link = '<link href="'+widget.css_default.file.to_s+'" media="screen" rel="stylesheet" type="text/css" />'
css = widget.css_default.content;
css = "<style>" + css + "</style>"
content = widget.widget_layout.body content = widget.widget_layout.body
dhtml = css + content dhtml = link + content
render :text => dhtml.html_safe render :text => dhtml.html_safe
end end
@ -195,46 +195,6 @@ class DesktopController< ApplicationController
render :json=>a.to_json render :json=>a.to_json
end end
def getapplistforManager
@dwss = DesktopWidget.all
@dapps = DesktopApp.all
@tiles = Array.new
desktop = Desktop.find(params['desktopid'])
sections = desktop.sections
sections.each do |section|
groups = section.groups
groups.each do |group|
@tiles += group.tiles
end
end
@validtiles = Array.new
@allWidgets = Array.new
@dwss.each do |dw|
@id = dw.id
@validtiles = @tiles.select{|t| t.desktop_widget_id == @id}
@sections = Array.new
@validtiles.each do |vt|
grp = Group.find(vt.group_id)
sec = Section.find(grp.section_id);
@sections << {"id"=>sec.id,"name"=>sec.name}
end
@allWidgets << {"id"=>dw.id, "data_category"=> "widget","title" => dw.name, "version" => dw.version, "author"=>dw.author, "last_update"=>dw.updated_at, "icon"=>dw.images.where(:name=>dw.icon).first.file.url, "text_color" => dw.text_color, "background" => dw.bg_color, "sections" => @sections}
end
validtiles = Array.new
@dapps.each do |da|
@id = da.id
@validtiles = @tiles.select{|t| t.desktop_app_id == @id}
@sections = Array.new
@validtiles.each do |vt|
grp = Group.find(vt.group_id)
sec = Section.find(grp.section_id);
@sections << {"id"=>sec.id,"name"=>sec.name}
end
@allWidgets << {"id"=>da.id, "data_category"=> "app","title" => da.name, "version" => da.version, "author"=>da.author, "last_update"=>da.updated_at, "icon"=>da.images.where(:name=>da.icon).first.file.url, "sections" => @sections}
end
render :json=>@allWidgets.to_json
end
def newpositions def newpositions
@newpositions = params[:newpositions] @newpositions = params[:newpositions]
@ -277,47 +237,4 @@ class DesktopController< ApplicationController
render :xml=>feed render :xml=>feed
end end
def appactivation
@group = Section.find(params[:section_id]).groups.first
@type = params[:type]
if @type == "widget"
@widget = DesktopWidget.find(params[:id])
status = params[:status]
case status
when "true"
tile = Tile.new(data_category: "widget", position: 8, desktop_widget_id: @widget.id)
@group.tiles+=[tile]
@group.save
when "false"
tile = @group.tiles.where("desktop_widget_id"=>@widget.id).first
if tile != nil
tile.destroy
end
end
end
if @type == "app"
@app = DesktopApp.find(params[:id])
status = params[:status]
case status
when "true"
tile = Tile.new(data_category: "app", position: 8, desktop_app_id: @app.id)
@group.tiles+=[tile]
@group.save
when "false"
tile = @group.tiles.where("desktop_app_id"=>@app.id).first
if tile != nil
tile.destroy
end
end
end
b = Array.new
b = {"success"=>"true"}
render :json=>b.to_json
end
end end

View File

@ -1,86 +0,0 @@
class DesktopThemesController < OrbitBackendController
require "net/http"
require "uri"
require 'zip/zip'
def index
@desktopThemes = DesktopTheme.all
end
def destroy
dt = DesktopTheme.find(params[:id])
dt.destroy
redirect_to desktop_theme_path
end
def upload
if !params[:desktop_theme].nil?
temp_file = Tempfile.new("temp_file")
original_file = params[:desktop_theme][:package_file]
#if original_file.content_type == 'application/zip'
temp_file.write(original_file.read.force_encoding('UTF-8'))
temp_file.rewind
filename = File.basename(original_file.original_filename,".zip")
unzip_widget(temp_file, filename)
#else
# flash[:error] = "Upload file should be in zip format"
#end
temp_file.close
end
end
def edit
@dw = DesktopWidget.find(params[:id])
end
def unzip_widget(file, zip_name)
Zip::ZipFile.open(file) { |zip_file|
dt = DesktopTheme.new.from_json(zip_file.read("#{zip_name}/settings.json"))
Dir.mktmpdir('f_path') { |dir|
images_entries = []
zip_file.entries.each do |entry|
case (path = entry.to_s)
when /\A(#{zip_name})\/(theme\.css)\z/
#for default css
dt.build_css_default(:file => get_temp_file(zip_file, dir, entry))
when /\A(#{zip_name})\/(background)\/.*((\.jpg)|(\.png)|(\.gif))\z/ #for img
images_entries << entry
end
end
images_entries.each do |image|
dt.images.build(:file => get_temp_file(zip_file,dir,image))
end
}
dt.save
}
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
def settings
if params[:id] == "custom"
@id = DesktopTheme.first.id.to_s
else
@id = params[:id]
end
dt = DesktopTheme.find(@id)
if !dt.nil?
dt['css'] = dt.css_default.file.url
dt['background'] = dt.images.where(:name=>dt.background).first.file.url
end
icons = DesktopTheme::ICONS
dt['icons'] = icons
render :json => dt.to_json
end
end

View File

@ -4,7 +4,6 @@ class DesktopWidgetsController < OrbitBackendController
require 'zip/zip' require 'zip/zip'
def index def index
@desktopWidgets = DesktopWidget.all
end end
def upload def upload
@ -22,19 +21,6 @@ class DesktopWidgetsController < OrbitBackendController
temp_file.close temp_file.close
end end
end end
def edit
@dw = DesktopWidget.find(params[:id])
end
def update
@dw = DesktopWidget.find(params[:id])
if(params[:desktop_widget])
@imagefile = params[:desktop_widget][:image]
@dw.images.build(:file => @imagefile)
@dw.save
end
redirect_to action: "index"
end
def unzip_widget(file, zip_name) def unzip_widget(file, zip_name)
Zip::ZipFile.open(file) { |zip_file| Zip::ZipFile.open(file) { |zip_file|

View File

@ -1,31 +0,0 @@
require "net/http"
require "uri"
require 'json'
class FacebookController< ApplicationController
def register_fb
user = User.find(params[:user])
if !user.facebook
user.build_facebook(fb_identifier: params[:identifier],connected: true)
user.save!
end
render :json=>{"success"=>true,"user"=>user.facebook.fb_identifier}.to_json
end
def get_friends
@url = "http://fb.tp.rulingcom.com/get_friends?identifier=" + current_user.facebook.fb_identifier
uri = URI.parse(@url)
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
friends = response.body
friends = JSON.parse(friends)
output = Array.new
friends.each do |friend|
output << friend['name']
end
render :json=>{"count"=>friends.count,"friends"=>output}.to_json
end
end

View File

@ -43,7 +43,7 @@ class MobileController < ApplicationController
def page def page
@page_title = t('mobile.page') @page_title = t('mobile.page')
@page_contexts = PageContext.where(:archived => false).page(params[:page_main]).per(15) @page_contexts = get_sorted_page_from_structure
end end
def page_content def page_content
@ -57,4 +57,12 @@ class MobileController < ApplicationController
@no_footer = true if request.path =~ /app/ @no_footer = true if request.path =~ /app/
end end
def get_sorted_page_from_structure
page_contexts = Item.structure_ordered_items.inject([]){ |pages, page|
pages << page.page_contexts.where(archived: false).limit(1)[0] if page.is_a?(Page) && !page.page_contexts.blank?
pages
}
Kaminari.paginate_array(page_contexts).page(params[:page]).per(15)
end
end end

View File

@ -7,4 +7,10 @@ class OrbitFrontendComponentController< ApplicationController
@app_title = request.fullpath.split('/')[2] @app_title = request.fullpath.split('/')[2]
end end
def delay_impressionist(item)
user_id = current_user.nil? ? nil : current_user.id
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
end
end end

View File

@ -45,28 +45,12 @@ class PagesController < ApplicationController
#end #end
end end
def convert_array_param(key,array)
array.collect{|t| "#{key}[]=#{t}"}.join("&")
end
def index_from_link def index_from_link
url = "/#{@item.path}" url = "/#{@item.path}"
options = '' options = ''
options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank? options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
if params[:category_id].is_a? Array options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id',params[:category_id])}" unless params[:category_id].blank?
elsif params[:category_id].is_a? String
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
end
if params[:tag_id].is_a? Array
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id',params[:tag_id])}" unless params[:tag_id].blank?
elsif params[:category_id].is_a? String
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank?
end
options << "#{options.blank? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank? options << "#{options.blank? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank?
options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank? options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank?
uri = URI::escape(url + options) uri = URI::escape(url + options)
@ -78,8 +62,8 @@ class PagesController < ApplicationController
url = "/#{@item.path}" url = "/#{@item.path}"
options = '' options = ''
options << "#{options.blank? ? '?' : '&'}id=#{params[:id]}" unless params[:id].blank? options << "#{options.blank? ? '?' : '&'}id=#{params[:id]}" unless params[:id].blank?
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank? options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank? options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}preview=#{params[:preview]}" unless params[:preview].blank? options << "#{options.blank? ? '?' : '&'}preview=#{params[:preview]}" unless params[:preview].blank?
options << "#{options.blank? ? '?' : '&'}controller_action=#{params[:controller_action]}" unless params[:controller_action].blank? options << "#{options.blank? ? '?' : '&'}controller_action=#{params[:controller_action]}" unless params[:controller_action].blank?
options << "#{options.blank? ? '?' : '&'}clicked_field_name=#{params[:clicked_field_name]}" unless params[:clicked_field_name].blank? options << "#{options.blank? ? '?' : '&'}clicked_field_name=#{params[:clicked_field_name]}" unless params[:clicked_field_name].blank?
@ -98,23 +82,43 @@ class PagesController < ApplicationController
elsif params[:same_page_id] elsif params[:same_page_id]
@item = Item.find(params[:same_page_id]) @item = Item.find(params[:same_page_id])
else else
category_ids = params[:category_id].is_a?(Array) ? params[:category_id] : [params[:category_id]] category_ids = Array(params[:category_id]) unless params[:category_id].nil?
tag_ids = params[:tag_id].is_a?(Array) ? params[:tag_id] : [params[:tag_id]] tag_ids = Array(params[:tag_id]) unless params[:tag_id].nil?
module_app = ModuleApp.first(:conditions => {:key => params[:app_name]}) module_app = ModuleApp.first(:conditions => {:key => params[:app_name]})
default_query = { is_published: true, module_app_id: module_app.id, :app_frontend_url.in => [params[:app_action], 'default_widget'] }
specific_categories = { :category => category_ids }
in_categories = { :category.in => category_ids }
nil_categories = { :category.in => [nil, []] }
specific_tags = { :tag => tag_ids }
in_tags = { :tag.in => tag_ids }
nil_tags = { :tag.in => [nil, []] }
if !category_ids.blank? && !tag_ids.blank? if !category_ids.blank? && !tag_ids.blank?
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => tag_ids}) @item = Item.where(default_query.merge(specific_categories).merge(specific_tags)).first
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => [nil, []]}) unless @item @item = Item.where(default_query.merge(specific_categories).merge(in_tags)).first unless @item
@item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(specific_tags).merge(in_categories)).first unless @item
@item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(in_tags)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
elsif !category_ids.blank? elsif !category_ids.blank?
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :category.in => category_ids).any_in(tag: [nil, []]).first @item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first
@item = Item.where(default_query.merge(specific_categories)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(in_categories)).first unless @item
elsif !tag_ids.blank? elsif !tag_ids.blank?
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :tag.in => tag_ids).any_in(category: [nil, []]).first @item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first
@item = Item.where(default_query.merge(specific_tags)).first unless @item
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
@item = Item.where(default_query.merge(in_tags)).first unless @item
end end
@item = Item.find(params[:orig_page]) unless @item || params[:orig_page].blank? @item = Item.find(params[:orig_page]) unless @item || params[:orig_page].blank?
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).all_of("tag" => {"$in" => [nil, []]},"category" => { "$in" => [nil, []]}).first unless @item @item = Item.where(default_query.merge(nil_categories).merge(nil_tags)).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: 'default_widget').first unless @item @item = Item.where(default_query).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).first unless @item
end end
raise PageError,'Missing Frontend Page' if @item.nil? raise PageError, 'Missing Frontend Page' if @item.nil?
end end
def save_from_no_lang_for_page def save_from_no_lang_for_page

View File

@ -1,5 +1,5 @@
module ApplicationHelper module ApplicationHelper
include OrbitApp::Module::VisitorCounter
FLASH_NOTICE_KEYS = [:error, :notice, :warning] FLASH_NOTICE_KEYS = [:error, :notice, :warning]
@ -7,8 +7,9 @@ module ApplicationHelper
request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?') request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
end end
def delayed_impressionist(object) def delayed_impressionist(item)
# Resque.enqueue_at(1.minute.from_now,DelayedImpressionist,object) user_id = current_user.nil? ? nil : current_user.id
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
end end
def check_user_role_enable(attribute_fields) def check_user_role_enable(attribute_fields)
@ -242,25 +243,27 @@ module ApplicationHelper
"#{t(:view_count)}: #{object.view_count}" "#{t(:view_count)}: #{object.view_count}"
end end
def display_visitors(options={}) # def display_visitors(options={})
Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count # # Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
end # impressions = Impression.where(options).and(:referrer.ne => nil)
# impressions.map{|i| i[:session_hash]}.uniq.count
# end
def display_visitors_today # def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end # end
def display_visitors_this_week # def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end # end
def display_visitors_this_month # def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end # end
def display_visitors_this_year # def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
end # end
def display_date_time(object) def display_date_time(object)
object.strftime("%Y-%m-%d %H:%M") object.strftime("%Y-%m-%d %H:%M")
@ -311,4 +314,8 @@ module ApplicationHelper
link_to title, params.merge({direction: direction, sort: column, sort_options: column}), {:class => "#{css_class} sortable", :remote => options[:remote]} link_to title, params.merge({direction: direction, sort: column, sort_options: column}), {:class => "#{css_class} sortable", :remote => options[:remote]}
end end
def convert_array_param(key, array)
Array(array).collect{|t| "#{key}[]=#{t}"}.join("&")
end
end end

View File

@ -3,6 +3,13 @@ module DefaultWidgetHelper
I18n.t("#{@page_part.module_app.key}.default_widget.#{field}") I18n.t("#{@page_part.module_app.key}.default_widget.#{field}")
end end
def get_top_hot_class(row_data)
class_attr = []
class_attr << 'data_is_hot' if( row_data.is_hot? rescue false )
class_attr << 'data_is_top' if( row_data.is_top? rescue false)
return class_attr.join(" ")
end
def link_to_field(row_data,field, switch, options=nil) def link_to_field(row_data,field, switch, options=nil)
method_ary = @page_part.module_app.widget_fields_link_method method_ary = @page_part.module_app.widget_fields_link_method
field = field.to_sym field = field.to_sym
@ -77,4 +84,13 @@ module DefaultWidgetHelper
content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class]) content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class])
end end
end end
def get_row_category(row_data)
row_data.send("#{row_data.class.to_s.underscore}_category_id") rescue nil
end
def get_row_tags(row_data)
row_data.tagged_ids rescue nil
end
end end

View File

@ -2,16 +2,24 @@ class BackupServer
@queue = :high @queue = :high
def self.perform() def self.perform()
#CronMail.time_check("Going to backup Orbit").deliver
dbhost = Mongoid.config.database.connection.primary.join ':' dbhost = Mongoid.config.database.connection.primary.join ':'
dbname = Mongoid.config.database.name dbname = Mongoid.config.database.name
archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath
dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M") dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M")
%x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ] %x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ]
%x[rm #{archive_db_list_path}] Dir.foreach('tmp') do |item|
%x[ls #{Rails.root}/tmp/#{dbname}* | du -h --max-depth=1 --block-size=1M |sort -h >> #{archive_db_list_path}] date_str = item.to_s.gsub("#{dbname}-",'')
OrbitLogger.info "DB backup done Path:#{dbdirectory}" next if not date_str.match(/\d{4}-\d{2}-\d{2}-\d{2}-\d{2}/)
if Date.parse(date_str).to_time < Site.first.backup_keep_for_days.days.ago
OrbitLogger.info "Deleting #{date_str}"
%x[rm -rf tmp/#{item}]
end
end
%x[rm -f #{archive_db_list_path}]
%x[cd tmp ; ls -l |grep #{dbname} | awk '{print $8}'|xargs du -h --block-size=1M --max-depth=0 |sort -h >> #{archive_db_list_path}]
OrbitLogger.info "DB backup done Path:#{dbdirectory}"
end end
end end

View File

@ -1,36 +1,21 @@
class DashboardCounter < Resque::Plugins::RestrictionJob class DashboardCounter < Resque::Plugins::RestrictionJob
extend OrbitApp::Module::VisitorCounterEval
@queue = :high @queue = :high
def self.perform(*args) def self.perform(*args)
site = Site.first site = Site.first
obj = new(*args) obj = new(*args)
site.dashboard_counter[:visitors_this_week] = obj.display_visitors_this_week site.visitor_counters[:total] = display_visitors
site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month site.visitor_counters[:today] = display_visitors_today
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year site.visitor_counters[:this_week] = display_visitors_this_week
site.visitor_counters[:this_month] = display_visitors_this_month
site.visitor_counters[:this_year] = display_visitors_this_year
site.save site.save
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}" OrbitLogger.info "DashboardCounter done #{site.visitor_counters.to_s}"
end
#Notice this is mainly used at user dashbroad. however the code there is currentlly using realtime evaluation.
def display_visitors(options={}) #and the site model will need a field call dashboard_counter to complete this job.
impressions = Impression.where(options).and(:referrer.ne => nil)
impressions.map{|i| i[:session_hash]}.uniq.count
end
def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
end end
end end

View File

@ -1,7 +1,51 @@
class DelayedImpressionist class DelayedImpressionist
@queue = :low def self.before_filter(*args)
def self.perform(object) return
impressionist(object) end
true
end include ImpressionistController::InstanceMethods
@queue = :low
def initialize(request,controller_name,action_name,user,obj)
@controller_name = controller_name
@action_name = action_name
@user = User.find user unless user.nil?
@request = request
end
def self.perform(*args)
arg = args[0]
@request= DelayImpressionistRequest.new
@request.restore(arg["request"])
obj = eval("#{arg["class"]}.find '#{arg['obj']['_id']}'")
# imp = new(@request,arg["controller_name"],arg["action_name"],arg["user"],obj)
new_impression = obj.impressions.build(:user_id=>arg["user"],:controller_name=>arg["controller_name"],:action_name=>arg["action_name"],:ip_address=>@request.remote_ip,:referrer=>@request.referer)
@try = 1
loop do
result = new_impression.save rescue false
break if (result || @try >= 10)
@try = @try + 1
puts "trying:#{@try}"
end
new_impression.save
obj.update_attribute(:view_count,obj.impression_count)
end
private
def user
@user
end
def action_name
@action_name
end
def controller_name
@controller_name
end
def request
@request
end
end end

42
app/jobs/email_cron.rb Normal file
View File

@ -0,0 +1,42 @@
class EmailCron
@queue = :mail
def self.perform
@datas = MailCron.where(:mail_sentdate.lte => Time.now)
@datas.each do |mail_data|
@mail_j = 0
@read_mails = Array.new
@mails = mail_data.mail_to.split(",")
@mails.each do |send_mail|
@read_mails << send_mail
@mail_j += 1
if 0 == @mail_j % 30
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
if !@read_mails.join(',').blank?
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
end
end

View File

@ -3,7 +3,7 @@ class UpdateTagCloud
def self.perform() def self.perform()
Tag.all.each do |tag| Tag.all.each do |tag|
tag.update_attribute(:cloud_view_count, tag.impressionist_count(:created_at.gte => 14.days.ago, :created_at.lte => Time.now)) tag.update_attribute(:cloud_view_count, tag.get_impressionist)
end end
OrbitLogger.info "UpdateTagCloud Done" OrbitLogger.info "UpdateTagCloud Done"
end end

View File

@ -0,0 +1,81 @@
class MailCronMailer < ActionMailer::Base
default :from => "orbit_test@rulingcom.com"
def get_settings
@site = Site.first
@smtp_settings = {
:address => @site['site_settings']['address'],
:port => @site['site_settings']['port'],
:domain => @site['site_settings']['domain'],
:authentication => @site['site_settings']['authentication'],
# :user_name => @site['site_settings']['user_name'],
# :password => @site['site_settings']['password'],
:tls => (@site['site_settings']['tls'] == '0' ? false : true ) ,
:enable_starttls_auto => (@site['site_settings']['enable_starttls_auto'] == '0' ? false : true )
}
if !@site['site_settings']['user_name'].blank?
@smtp_settings[:user_name] = @site['site_settings']['user_name']
end
if !@site['site_settings']['password'].blank?
@smtp_settings[:password] = @site['site_settings']['password']
end
ActionMailer::Base.smtp_settings = @smtp_settings
end
def cron_mail( data_id, group_mail )
get_settings
@data = MailCron.find(data_id)
if @data
@user = User.find(@data.create_user_id)
if !@data.mail_cron_files.blank?
@data.mail_cron_files.each_with_index do |mail_cron_file, i|
file_type = File.extname(mail_cron_file.file.to_s)
file_content = Mongo::GridFileSystem.new(Mongoid.database).open(mail_cron_file.file.url.gsub("/gridfs/", "").force_encoding("UTF-8"), 'r')
attachments["#{mail_cron_file.title}#{file_type}"] = file_content.read
end
end
if !@data.mail_content["text"].blank?
mail( :from => @data.mail_from, :reply_to => @data.mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
format.html { render :text => @data.mail_content["text"] }
end
elsif !@data.mail_content["template"].blank?
mail( :from => @data.mail_from, :reply_to => @data.mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
format.html { render :template => @data.mail_content["template"], :collection => @data.mail_content }
end
end
@mail_cron_log = {
:mail_subject => @data.mail_subject,
:mail_to => group_mail,
:mail_user => @user.name,
:mailer_count => group_mail.split(",").size,
:mail_from_app => @data.mail_from_app
}
@mail_cron_log = MailCronLog.new(@mail_cron_log)
@mail_cron_log.save
@data.destroy
end
end
end

View File

@ -4,8 +4,5 @@ class CssDefault < Stylesheet
# belongs_to :desktop_widget # belongs_to :desktop_widget
belongs_to :css, polymorphic: true belongs_to :css, polymorphic: true
def content
self.file.read.force_encoding("UTF-8") rescue ''
end
end end

View File

@ -2,7 +2,7 @@ class Desktop
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :theme field :theme, default: "4f8d3f533b67fcd05f08635a"
field :customtheme field :customtheme
field :wallpaper field :wallpaper

View File

@ -1,20 +0,0 @@
class DesktopApp
include Mongoid::Document
include Mongoid::Timestamps
field :name
field :author
field :shape
field :version, :type => String
field :text_color, :type => String, default: ""
field :bg_color, :type => String, default: ""
field :icon, default: "icon.png"
field :url
has_many :images, as: :imgs, :autosave => true, :dependent => :destroy
has_and_belongs_to_many :desktops, :autosave => true
has_many :tiles, :autosave => true
accepts_nested_attributes_for :images, :allow_destroy => true
end

View File

@ -2,62 +2,8 @@ class DesktopTheme
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :name field :name
field :author field :author
field :background
field :tilecolor ,type: Array, default: ["thmc1","thmc2"]
ICONS = {
"home"=>"d_home.png",
"app_manager"=>"d_app_manager.png",
"sections"=>"d_sections.png",
"settings"=>"d_settings.png",
"publication"=>"d_publication.png",
"journal_p"=>"d_journal_p.png",
"conference_p"=>"d_conference_p.png",
"books"=>"d_books.png",
"research"=>"d_research.png",
"research_d"=>"d_research_d.png",
"research_p"=>"d_research_p.png",
"patents"=>"d_patents.png",
"labs"=>"d_labs.png",
"experience"=>"d_experience.png",
"working"=>"d_working.png",
"education"=>"d_education.png",
"honors"=>"d_honors.png",
"activities"=>"d_activities.png",
"clubs"=>"d_clubs.png",
"landt"=>"d_landt.png",
"courses"=>"d_courses.png",
"homework"=>"d_homework.png",
"certification"=>"d_certification.png",
"personal"=>"d_personal.png",
"mypage"=>"d_mypage.png",
"blog"=>"d_blog.png",
"album"=>"d_album.png",
"calendar"=>"d_calendar.png",
"files"=>"d_files.png",
"orbit"=>"d_orbit.png",
"connection"=>"d_connection.png",
"appstore"=>"d_appstore.png"
}
has_one :css_default, as: :css, :autosave => true, :dependent => :destroy
has_many :images, as: :imgs, :autosave => true, :dependent => :destroy
has_and_belongs_to_many :desktops, :autosave => true
accepts_nested_attributes_for :images, :allow_destroy => true
# after_save :parse_css_for_images
# belongs_to :desktop
# protected
# def parse_css_for_images
# self.css_default.parse_urls
# end
end end

View File

@ -5,12 +5,9 @@ class DesktopWidget
field :name field :name
field :author field :author
field :shape, default: "w1 h1" field :shape
field :fullsize, :type => Boolean, default: false field :fullsize, :type => Boolean
field :version, :type => String field :version, :type => String
field :text_color, :type => String, default: ""
field :bg_color, :type => String, default: ""
field :icon, default: "icon.png"
has_one :css_default, as: :css, :autosave => true, :dependent => :destroy has_one :css_default, as: :css, :autosave => true, :dependent => :destroy
has_one :widget_layout, :autosave => true, :dependent => :destroy has_one :widget_layout, :autosave => true, :dependent => :destroy

View File

@ -1,9 +0,0 @@
class Facebook
include Mongoid::Document
include Mongoid::Timestamps
field :fb_identifier
field :connected, type: Boolean
belongs_to :user
end

View File

@ -7,11 +7,11 @@ class Group
before_create :initialize_tile before_create :initialize_tile
def initialize_tile def initialize_tile
# self.tiles.build(data_category: "app", data_content: "quotes", position: 5, shape: "w1 h1", title: "Quotes") self.tiles.build(data_category: "app", data_content: "quotes", position: 5, shape: "w1 h1", title: "Quotes")
# self.tiles.build(data_category: "app", data_content: "dailyenglish", position: 6, shape: "w1 h1", title: "Daily English Word") self.tiles.build(data_category: "app", data_content: "dailyenglish", position: 6, shape: "w1 h1", title: "Daily English Word")
widgets = self.section.desktop.desktop_widgets.collect{|widget| widget.id} widgets = self.section.desktop.desktop_widgets.collect{|widget| widget.id}
widgets.each_with_index do |w,i| for i in 0..3
self.tiles.build(data_category: "widget", position: i+1,desktop_widget_id: w) self.tiles.build(data_category: "widget", position: i+1,desktop_widget_id: widgets[i])
end end
end end
end end

View File

@ -13,6 +13,5 @@ class Tile
belongs_to :group belongs_to :group
belongs_to :desktop_widget belongs_to :desktop_widget
belongs_to :desktop_app
end end

70
app/models/mail_cron.rb Normal file
View File

@ -0,0 +1,70 @@
class MailCron
include Mongoid::Document
include Mongoid::Timestamps
field :mail_from_app
field :mail_from
field :mail_to
field :mail_reply_to
field :mail_subject
field :mail_content, :type => Hash
field :mail_sentdate , :type => DateTime
field :create_user_id
field :update_user_id
has_many :mail_cron_files, :autosave => true, :dependent => :destroy
accepts_nested_attributes_for :mail_cron_files, :allow_destroy => true
after_save :save_mail_cron_files
def save_mail_cron_files
self.mail_cron_files.each do |t|
if t.should_destroy
t.destroy
end
end
end
def self.send_mail_now(mail_cron_id)
mail_data = MailCron.find(mail_cron_id)
if !mail_data.blank?
@mail_j = 0
@read_mails = Array.new
@mails = mail_data.mail_to.split(",")
@mails.each do |send_mail|
@read_mails << send_mail
@mail_j += 1
if 0 == @mail_j % 30
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
if !@read_mails.join(',').blank?
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
end
end

View File

@ -0,0 +1,13 @@
class MailCronFile
include Mongoid::Document
include Mongoid::Timestamps
mount_uploader :file, AssetUploader
field :should_destroy, :type => Boolean
field :title
belongs_to :mail_cron
end

View File

@ -0,0 +1,14 @@
class MailCronLog
include Mongoid::Document
include Mongoid::Timestamps
field :mail_subject
field :mail_to
field :mail_user
field :mailer_count
field :mail_from_app
end

View File

@ -140,7 +140,7 @@ class ModuleApp
def sorted_tags_for_cloud def sorted_tags_for_cloud
temp_tags = {} temp_tags = {}
self.tags.each{ |tag| self.tags.each{ |tag|
temp_tags.merge!({tag => Tag.get_impressionist(tag)}) temp_tags.merge!({tag => tag.cloud_view_count})
} }
if !temp_tags.blank? if !temp_tags.blank?
sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse

View File

@ -3,7 +3,7 @@ class Page < Item
include Impressionist::Impressionable include Impressionist::Impressionable
include ParserFrontEnd include ParserFrontEnd
is_impressionable :counter_cache => { :column_name => :view_count } is_impressionable #:counter_cache => { :column_name => :view_count }
field :content, localize: true field :content, localize: true
field :app_frontend_url field :app_frontend_url

View File

@ -51,8 +51,9 @@ class PrototypeAuth
end end
def remove_operation(item,obj) def remove_operation(item,obj)
if (self.send item).include? obj item = (item.to_s.singularize == item.to_s) ? "#{item.to_s}_id" : "#{item.to_s.singularize}_ids"
(self.send item).delete obj if (self.send item).include? obj.id
(self.send item).delete obj.id
self.save! self.save!
else else
false #should put error message for user not existed in list false #should put error message for user not existed in list

View File

@ -18,6 +18,7 @@ class Site
field :title_always_on, :type => Boolean, :default => false field :title_always_on, :type => Boolean, :default => false
field :dashbroad_allow_visitor, :type => Boolean, :default => false field :dashbroad_allow_visitor, :type => Boolean, :default => false
field :mail_settings, :type => Hash field :mail_settings, :type => Hash
field :visitor_counters,:type=> Hash,:default=>{:total=>0,:today=>0,:this_week=>0,:this_month=>0,:this_year=>0}
field :disk_space, :type => String field :disk_space, :type => String
field :system_package_info, :type => Hash,:default=>{} field :system_package_info, :type => Hash,:default=>{}
@ -28,10 +29,11 @@ class Site
mount_uploader :default_image, ImageUploader mount_uploader :default_image, ImageUploader
field :search,:type => Hash field :search,:type => Hash
field :resque_namespace,:type => String, :default=>APP_CONFIG['orbit']
field :title, localize: true field :title, localize: true
field :footer, localize: true field :footer, localize: true
field :sub_menu, localize: true field :sub_menu, localize: true
field :backup_keep_for_days,:type=>Integer,:default=> APP_CONFIG['backup_keep_for_days']
field :mobile_on, :type => Boolean, :default => false field :mobile_on, :type => Boolean, :default => false

View File

@ -8,7 +8,7 @@ class Tag
include Mongoid::Timestamps include Mongoid::Timestamps
include Impressionist::Impressionable include Impressionist::Impressionable
is_impressionable :counter_cache => { :column_name => :view_count } is_impressionable #:counter_cache => { :column_name => :view_count }
field :name, localize: true field :name, localize: true
field :view_count, :type => Integer, :default => 0 field :view_count, :type => Integer, :default => 0
@ -17,30 +17,6 @@ class Tag
belongs_to :module_tag, polymorphic: true belongs_to :module_tag, polymorphic: true
has_many :taggings, dependent: :destroy has_many :taggings, dependent: :destroy
#field :cloud_amper,:type: Integer,:default=> 0
# def self.sorted_for_cloud
# tags = {}
# self.all.each{ |tag|
# tags.merge!({tag => self.get_impressionist(tag)})
# }
# if !tags.blank?
# sorted_tags = tags.sort{|a,b| a[1]<=>b[1]}.reverse
# sorted_tags[0][1] = :hot1
# offset = (sorted_tags.size - 1) / 3
# i = 1
# class_i = 2
# sorted_tags[1..-1].collect!{ |x|
# x[1] = "hot#{class_i}"
# i == offset ? i = 1 : i += 1 if class_i < 4
# class_i += 1 if i == offset && class_i < 4
# }
# sorted_tags
# else
# []
# end
# end
protected protected
def self.get_impressionist(item_tag = self) def self.get_impressionist(item_tag = self)

View File

@ -3,7 +3,7 @@ class User
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable, :validatable #, :timeoutable devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #, :timeoutable
mount_uploader :avatar, AvatarUploader mount_uploader :avatar, AvatarUploader
@ -26,7 +26,6 @@ class User
has_many :managing_apps,:class_name => "AppManager", :dependent => :destroy has_many :managing_apps,:class_name => "AppManager", :dependent => :destroy
has_one :desktop, :autosave => true, :dependent => :destroy has_one :desktop, :autosave => true, :dependent => :destroy
has_one :facebook, :autosave => true, :dependent => :destroy
has_many :other_accounts, :autosave => true, :dependent => :destroy has_many :other_accounts, :autosave => true, :dependent => :destroy
# has_many :journals, :autosave => true, :dependent => :destroy # has_many :journals, :autosave => true, :dependent => :destroy
# has_many :papers, :autosave => true, :dependent => :destroy # has_many :papers, :autosave => true, :dependent => :destroy
@ -43,7 +42,6 @@ class User
before_create :initialize_desktop before_create :initialize_desktop
before_save :rebuild_status_record before_save :rebuild_status_record
before_save :save_roles
scope :remote_account, where(:nccu_id.ne => nil) scope :remote_account, where(:nccu_id.ne => nil)
scope :not_guest_user, all_of(:name.ne => "guest") scope :not_guest_user, all_of(:name.ne => "guest")
@ -90,9 +88,9 @@ class User
var[:id].each do |id,val| var[:id].each do |id,val|
# binding.pry if id == '5052c5b22b5c49ab02000004' # binding.pry if id == '5052c5b22b5c49ab02000004'
if (val=="true") if (val=="true")
self.roles = self.roles.reject{|t| t.id.to_s==id} self.role_ids.reject!{|t| t.to_s == id}
elsif(val=="false") elsif(val=="false")
self.roles << Role.find(id) self.role_ids += Array(id)
end end
end end
end end
@ -107,9 +105,9 @@ class User
# binding.pry if id == '5052c5b22b5c49ab02000004' # binding.pry if id == '5052c5b22b5c49ab02000004'
if ( self.roles.include?(@roid) == false or val=="true") if ( self.roles.include?(@roid) == false or val=="true")
self.sub_roles = self.sub_roles.reject{|t| t.id.to_s==id} self.sub_role_ids.reject!{|t| t.to_s == id}
elsif(val=="false") elsif(val=="false")
self.sub_roles << SubRole.find(id) self.sub_role_ids += Array(id)
end end
end end
@ -274,10 +272,6 @@ class User
end end
protected protected
def save_roles
# self.roles = self.sub_roles.collect{|t| t.role}.uniq
self.roles = self.roles.uniq
end
def rebuild_status_record def rebuild_status_record
self.status_record = {} self.status_record = {}

View File

@ -8,6 +8,5 @@
</table> </table>
<div class="form-actions form-fixed pagination-right"> <div class="form-actions form-fixed pagination-right">
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:add), new_admin_design_path, :class => 'btn btn-primary pull-right' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %>
</div> </div>

View File

@ -0,0 +1,3 @@
<div class="filter-clear">
<%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
</div>

View File

@ -0,0 +1,11 @@
<div id="filter" class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>

View File

@ -0,0 +1,29 @@
<tr id="<%= dom_id mail_cron_log %>" class="with_action">
<td class="span1">
<% if is_manager? %>
<%= check_box_tag 'to_delete[]', mail_cron_log.id, false, :class => "checkbox_in_list" %>
<% end -%>
</td>
<td class="span1-2">
<%= mail_cron_log.mail_subject %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<%if at_least_module_manager %>
<li><%= link_to t(:delete_), admin_mail_cron_log_path(mail_cron_log), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
</td>
<td class="span2">
<%= mail_cron_log.mail_to.gsub(/,/, "<br />").html_safe %>
</td>
<td class="span2">
<%= mail_cron_log.mail_user %>
</td>
<td class="span2">
<%= mail_cron_log.mail_from_app %>
</td>
<td class="span2">
<%= display_date_time(mail_cron_log.created_at) %>
</td>
</tr>

View File

@ -0,0 +1,6 @@
<%= render_sort_bar(true, delete_admin_mail_cron_logs_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
['subject', 'mail_subject','span2', :subject] ,
['mail_to', 'mail_to','span2', :mail_to] ,
['mail_user', 'mail_user','span2', :mail_user] ,
['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
['sentdate', 'created_at','span2', :sentdate] ).html_safe %>

View File

@ -0,0 +1 @@
$("#<%= dom_id @mail_cron_log %>").remove();

View File

@ -0,0 +1,28 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<%= render 'filter' %>
<table class="table main-list">
<thead>
<tr>
<th class="span1"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_mail_cron_logs" class="sort-holder">
<%= render :partial => "mail_cron_log",:collection=> @mail_cron_logs%>
</tbody>
</table>
<div class="form-actions form-fixed pagination-right">
<div id="web_link_pagination" class="paginationFixed">
<%= paginate @mail_cron_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
</div>
</div>

View File

@ -0,0 +1,4 @@
$("#delete_all").attr("action", "<%= delete_admin_mail_cron_logs_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_mail_cron_logs").html("<%= j render :partial => 'mail_cron_log', :collection => @mail_cron_logs %>");
$("#mail_cron_log_pagination").html("<%= j paginate @mail_cron_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");

View File

@ -0,0 +1,3 @@
<div class="filter-clear">
<%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
</div>

View File

@ -0,0 +1,11 @@
<div id="filter" class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>

View File

@ -0,0 +1,122 @@
<div id= "poststuff">
<% # encoding: utf-8 %>
<%= f.error_messages %>
<!--Widget start-->
<div id="sub-wiget">
<div id="widget-date" class="widget-box widget-size-300">
<h3 class="widget-title"><i class="icons-calendar"></i><%= t(:date_) %></h3>
<div class="widget-content clear">
<div class="control-group">
<%= f.datetime_picker :mail_sentdate, :picker_type => 'separated', :label => t(:start) %>
</div>
</div>
</div>
</div>
<!--Wiget End-->
<!--Post Start-->
<div id="post-body">
<div id="post-body-content" class="clear">
<%= f.label :mail_subject ,t(:mail_subject)%>
<%= f.text_field :mail_subject %>
<%= f.label :mail_from ,t(:mail_from)%>
<%= f.text_field :mail_from %>
<%= f.label :mail_reply_to ,t(:mail_reply_to)%>
<%= f.text_field :mail_reply_to %>
<%= f.label :mail_to ,t(:mail_to)%>
<%= f.text_field :mail_to %>
<%= f.label :mail_content ,t(:mail_content)%>
<%= f.text_area :mail_content, :class=>"span12", :cols=>"25", :rows=>"10" %>
</div>
<div>
<div id='plugin_files' class="plugin_files_block">
<table class="table table-condensed">
<thead>
<tr>
<th>File</th>
<th>File Name</th>
<th class="span1"></th>
</tr>
</thead>
<tfoot>
<tr>
<td style="text-align:center" colspan="3">
<div id='add_plugin_file' class="info_input plugin_files_block">
<%= hidden_field_tag 'plugin_file_field_count', @mail_cron.mail_cron_files.count %>
<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i> ADD/新增</span></a>
</div>
</td>
</tr>
</tfoot>
<tbody>
<% @mail_cron.mail_cron_files.each_with_index do |mail_cron_file, i| %>
<%= f.fields_for :mail_cron_files, mail_cron_file do |f| %>
<%= render :partial => 'form_file', :object => mail_cron_file, :locals => {:f => f, :i => i} %>
<% end %>
<% end %>
</tbody>
</table>
</div>
</div>
<!--Post End-->
</div>
<div class="form-actions">
<%= f.submit t('submit'), :class=>'btn btn-primary' %>
<%= link_to t('cancel'), get_go_back, :class=>"btn" %>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "archive_plugin_form" %>
<script>
$('#add_plugin_file a.add').live('click', function(){
var new_id = $(this).prev().attr('value');
var old_id = new RegExp("new_add_plugin_files", "g");
$(this).prev().attr('value', parseInt(new_id) + 1);
$(this).parents('table').append(("<%= escape_javascript(add_attribute 'form_file', f, :mail_cron_files) %>").replace(old_id, new_id));
});
$('.add_plugin_files_block a.delete').live('click', function(){
$(this).parents('.list_item').remove();
});
$('.action a.remove_existing_record').live('click', function(){
$(this).next('.should_destroy').attr('value', 1);
$("tr#add_plugin_file_" + $(this).prev().attr('value')).hide();
});
</script>
<% end %>
</div>

View File

@ -0,0 +1,35 @@
<% # encoding: utf-8 %>
<tr id="<%= "plugin_file_#{form_file.id}" if !form_file.new_record? %>" class='list_item'>
<td>
<div class="control-group">
<div class="controls">
<%= f.file_field :file %>
<%= form_file.file.file ? ( link_to t(:view), form_file.file.url, {:class => 'btn', :target => '_blank', :title => t(:view)} ) : '' %>
</div>
</div>
</td>
<td>
<div class="tab-content">
<%= f.text_field :title %>
</div>
</td>
<td>
<span class="action">
<% if form_file.new_record? %>
<a class="delete"><i class="icon-remove"></i></a>
<% else %>
<%= f.hidden_field :id %>
<a class="remove_existing_record"><i class="icon-remove"></i></a>
<%= f.hidden_field :should_destroy, :value => nil, :class => 'should_destroy' %>
<% end %>
</span>
</td>
</tr>

View File

@ -0,0 +1,26 @@
<tr id="<%= dom_id mail_cron %>" class="with_action">
<td class="span1">
<% if is_manager? %>
<%= check_box_tag 'to_delete[]', mail_cron.id, false, :class => "checkbox_in_list" %>
<% end -%>
</td>
<td class="span1-2">
<%= mail_cron.mail_subject %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<%if at_least_module_manager %>
<li><%= link_to t(:delete_), admin_mail_cron_path(mail_cron), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
</td>
<td class="span2">
<%= mail_cron.mail_to.gsub(/,/, "<br />").html_safe %>
</td>
<td class="span2">
<%= mail_cron.mail_from_app %>
</td>
<td class="span2">
<%= display_date_time(mail_cron.mail_sentdate) %>
</td>
</tr>

View File

@ -0,0 +1,5 @@
<%= render_sort_bar(true, delete_admin_mail_crons_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
['subject', 'mail_subject','span2', :mail_subject] ,
['mail_to', 'mail_to','span2', :mail_to] ,
['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
['sentdate', 'mail_sentdate','span2', :mail_sentdate] ).html_safe %>

View File

@ -0,0 +1 @@
$("#<%= dom_id @mail_cron %>").remove();

View File

@ -0,0 +1,9 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<h1><%= t('mail_cron.editing_mail_cron') %></h1>
<%= form_for @mail_cron, :url => admin_mail_cron_path(@mail_cron), :html => {:class => 'clear'} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>

View File

@ -0,0 +1,27 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<%= render 'filter' %>
<table class="table main-list">
<thead>
<tr>
<th class="span1"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_mail_crons" class="sort-holder">
<%= render :partial => "mail_cron",:collection=> @mail_crons%>
</tbody>
</table>
<div class="form-actions form-fixed pagination-right">
<div id="web_link_pagination" class="paginationFixed">
<%= paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
</div>
</div>

View File

@ -0,0 +1,4 @@
$("#delete_all").attr("action", "<%= delete_admin_mail_crons_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_mail_crons").html("<%= j render :partial => 'mail_cron', :collection => @mail_crons %>");
$("#mail_cron_pagination").html("<%= j paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");

View File

@ -0,0 +1,12 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<div id="poststuff">
<h1><%= t('mail_cron.new_mail_cron') %></h1>
<%= form_for @mail_cron, :url => admin_mail_crons_path, :html => {:class => 'clear'} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
</div>

View File

@ -9,6 +9,8 @@
<%#= content_tag :li, link_to(t(:theme), admin_site_ui_theme_path(@site)), :class => active_for_action('sites', 'ui_theme') %> <%#= content_tag :li, link_to(t(:theme), admin_site_ui_theme_path(@site)), :class => active_for_action('sites', 'ui_theme') %>
<%= content_tag :li, link_to(t('sitemap'), admin_site_sitemap_path(@site)), :class => active_for_action('sites', 'sitemap') %> <%= content_tag :li, link_to(t('sitemap'), admin_site_sitemap_path(@site)), :class => active_for_action('sites', 'sitemap') %>
<%= content_tag :li, link_to(t('user_actions'), admin_user_actions_path), :class => active_for_action('user_actions', 'index') %> <%= content_tag :li, link_to(t('user_actions'), admin_user_actions_path), :class => active_for_action('user_actions', 'index') %>
<%= content_tag :li, link_to(t('mail.mail_cron'), admin_mail_crons_path), :class => active_for_action('mail_cron', 'index') %>
<%= content_tag :li, link_to(t('mail.mail_cron_log'), admin_mail_cron_logs_path), :class => active_for_action('mail_cron_log', 'index') %>
<% end -%> <% end -%>
<% end -%> <% end -%>

View File

@ -1,19 +1,22 @@
<%= content_tag :div,:class=>@tag_class do%> <%= content_tag :div, class: @tag_class do %>
<div class="default_widget_type_A"> <div class="default_widget_type_A">
<table class="default_widget_tb" border="0" cellpadding="0" cellspacing="0" > <table class="default_widget_tb" border="0" cellpadding="0" cellspacing="0" >
<thead> <thead>
<tr>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:th,content_tag(:span,get_field_header(field),:class=>@frontend_classes[index]))unless field.blank?%>
<% end %>
</tr>
</thead>
<% @data.each do |row_data| %>
<tr> <tr>
<% @frontend_field_names.each_with_index do |field,index|%> <% @frontend_field_names.each_with_index do |field, index| %>
<%= content_tag(:td,content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]))unless field.blank?%> <%= content_tag(:th, content_tag(:span, get_field_header(field), class: @frontend_classes[index])) unless field.blank? %>
<% end %> <% end %>
</tr> </tr>
<% end %> </thead>
<tbody>
<% @data.each do |row_data| %>
<tr class="<%= get_top_hot_class(row_data) %>">
<% @frontend_field_names.each_with_index do |field, index|%>
<%= content_tag(:td, content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index])) unless field.blank? %>
<% end %>
</tr>
<% end %>
</tbody>
</table> </table>
<% end %> </div>
<% end %>

View File

@ -1,13 +1,13 @@
<%= content_tag :div,:class=>@tag_class do%> <%= content_tag :div, class: @tag_class do %>
<ul class="default_widget_list"> <ul class="default_widget_list">
<% @data.each do |row_data| %> <% @data.each do |row_data| %>
<%= content_tag(:li) do %> <%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
<div class="img app-pic"> <div class="img app-pic">
<%= image_tag row_data.send(@widget_image_field)%> <%= image_tag row_data.send(@widget_image_field) %>
</div> </div>
<div class="wrap"> <div class="wrap">
<% @frontend_field_names.each_with_index do |field,index|%> <% @frontend_field_names.each_with_index do |field, index| %>
<%= content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%> <%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
<% end %> <% end %>
</div> </div>
<% end %> <% end %>

View File

@ -1,12 +1,12 @@
<%= content_tag :div,:class=>@tag_class do%> <%= content_tag :div, class: @tag_class do %>
<div class="img app-pic"> <div class="img app-pic">
<%= image_tag @data.first.send(@widget_image_field)%> <%= image_tag @data.first.send(@widget_image_field) %>
</div> </div>
<ul class="default_widget_list"> <ul class="default_widget_list">
<% @data.each do |row_data| %> <% @data.each do |row_data| %>
<%= content_tag(:li) do %> <%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
<% @frontend_field_names.each_with_index do |field,index|%> <% @frontend_field_names.each_with_index do |field, index|%>
<%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%> <%= content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
<% end %> <% end %>
<% end %> <% end %>
<% end %> <% end %>

View File

@ -6,7 +6,10 @@
</div> </div>
</div> </div>
<div id="holder"> <div id="holder">
<div id="group_wrapper" class="overview" content-layout="simple"></div> <div id="group_wrapper" class="overview" content-layout="simple">
<div class="clear"></div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,55 +5,26 @@
<a href="" class="hfn w1 hh1 hp"><span class="tile thmc1 op06"></span><span class="thmtxt">Date</span></a> <a href="" class="hfn w1 hh1 hp"><span class="tile thmc1 op06"></span><span class="thmtxt">Date</span></a>
<a href="ascending" class="hfn w1 hh1 hp" id="alphabet_sort_btn" ><span class="tile thmc2 op03"></span><span class="thmtxt">Alphabet [A-Z]</span></a> <a href="ascending" class="hfn w1 hh1 hp" id="alphabet_sort_btn" ><span class="tile thmc2 op03"></span><span class="thmtxt">Alphabet [A-Z]</span></a>
<div id="search_app" class="hfn w2 hh1 hp thmc3"> <div id="search_app" class="hfn w2 hh1 hp thmc3">
<input type="text" class="ini_input form" value="Search" maxlength="30" id="searchbox" /> <input type="text" class="ini_input form" value="Search" id="searchbox" />
<input type="submit" class="ini_input submit thmc1" value="Submit"/> <input type="submit" class="ini_input submit thmc1" value="Submit"/>
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div class="search_result" style="min-width:120px;">
</div>
<div id="holder"> <div id="holder">
<div id="group_wrapper" class="overview" content-layout="simple"> <div id="group_wrapper" class="overview" content-layout="simple">
<div id="app_info" class="admbg vp hp s_column">
<div class="app_info_header s_grid_row hp"> <div class="group g_sep op03" id='seperator' style="height: 516px;display:none;"></div>
<div class="s_grid s_grid_3"> <div class="group_search" id="app_list">
<img class="app_info_icon" src="/assets/icons/wikibooks.png" alt=""> <!--<div class="element w1 h1 hp vp thmc2" data-category="desktop">
</div> <span class="tile thmc2"></span>
<div class="s_grid s_grid_9 valign"> <a href="" class="appicon"><img src="" alt=""></a>
<h2 class="app_info_name"></h2> <h1 class="appname thmtxt">O-Music</h1>
<a href="" class="panel_close icon-remove"></a> </div>-->
</div>
</div>
<ul class="app_info_list">
<li class="s_grid_row">
<label class="s_grid s_grid_3">Activation</label>
<div info="app_section_activation" class="s_grid s_grid_9"></div>
</li>
<li class="s_grid_row">
<label class="s_grid s_grid_3">Description</label>
<div class="s_grid s_grid_9">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</div>
</li>
<li class="s_grid_row">
<label class="s_grid s_grid_3">Version</label>
<div class="s_grid s_grid_9" info="app_version"></div>
</li>
<li class="s_grid_row">
<label class="s_grid s_grid_3">Last Update</label>
<div class="s_grid s_grid_9" info="app_last_update"></div>
</li>
<li class="s_grid_row">
<label class="s_grid s_grid_3">Author</label>
<div class="s_grid s_grid_9" info="app_author"></div>
</li>
</ul>
<div class="s_action">
<a href="" id="" class="setting_btn admbg2 admtxt w1 hh1 hp" onclick="return false;">Remove</a>
<a href="" id="" class="setting_btn thmc1 thmtxt w1 hh1 hp" onclick="return false;">Setting</a>
</div>
</div> </div>
<div class="search_result s_column"></div> <div class="clear"></div>
<div id="app_list" class="s_column"></div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -4,8 +4,9 @@
<div class="dtitle w2 hh2 hp"><span class="thmtxth">Appname</span></div> <div class="dtitle w2 hh2 hp"><span class="thmtxth">Appname</span></div>
<span class="icon-remove hh2 hp thmtxt"></span> <span class="icon-remove hh2 hp thmtxt"></span>
</div> </div>
<div id="holder" class="clear"> <div id="holder">
<!-- app content --> <!-- app content -->
<div class="clear"></div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,22 +1,26 @@
<div id="desktop"> <div id="desktop">
<div id="content"> <div id="content">
<div id="header" class="hh2"> <div id="header" class="hh2">
<div class="dtitle w2 hh2 hp sdm"> <div class="dtitle w2 hh2 hp sdm">
<div class="thmtxth sdm_t" id="section_heading"></div> <div class="thmtxth sdm_t" id="section_heading"></div>
<div class="admbg sdm_o w2"> <div class="admbg sdm_o w2">
<ul id="section_list"> <ul id="section_list">
</ul> </ul>
</div>
</div> </div>
</div> </div>
<div id="holder"> </div>
<div class="tinycanvas"> <div id="holder">
<div class="scrollbar sb_h"><div class="track"><div class="thumb thmc2"><div class="end"></div></div></div></div> <div class="tinycanvas">
<div class="viewport"> <div class="scrollbar sb_h"><div class="track"><div class="thumb thmc2"><div class="end"></div></div></div></div>
<div id="group_wrapper" class="overview"> <div class="viewport">
</div> <div id="group_wrapper" class="overview">
<div class="clear"></div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="clear"></div>
</div> </div>

View File

@ -2,8 +2,9 @@
<div id="rwidget" class="wh2 thmc4"> <div id="rwidget" class="wh2 thmc4">
<ul class="docklist"> <ul class="docklist">
<li class="d_cate"><a callback-method='initializeDesktop' href="desktop/desktop" class="widget_fn wh2 hh2" id='home' onclick="return false;"><span class="widget_icon"><img src="" alt="Home" id="home_icon" width="30" height="30"/></span></a> <li class="d_cate"><a callback-method='initializeDesktop' href="desktop/desktop" class="widget_fn wh2 hh2" id='home' onclick="return false;"><span class="widget_icon"><img src="" alt="Home" id="home_icon" width="30" height="30"/></span></a>
<ul class="dock_child hh2 thmc4" style="width: 120px;"> <ul class="dock_child hh2 thmc4" style="width: 180px;">
<li class="dock_item"><a callback-method='initializeAppManager' href="<%= desktop_app_manager_path %>" class="widget_fn wh2 hh2" id="d_app_manager" onclick="return false;"><span class="widget_icon"><img src="" alt="App Manager" id="app_manager_icon" width="30" height="30"/></span></a></li> <li class="dock_item"><a callback-method='initializeAppSearch' href="<%= desktop_app_manager_path %>" class="widget_fn wh2 hh2" id="d_app_manager" onclick="return false;"><span class="widget_icon"><img src="" alt="App Manager" id="app_manager_icon" width="30" height="30"/></span></a></li>
<li class="dock_item"><a callback-method='initializeSectionsManager' href="<%= desktop_allsections_path %>" class="widget_fn wh2 hh2" id="d_sections" custom-load="sections" onclick="return false;"><span class="widget_icon"><img src="" alt="All Sections" id="sections_icon" width="30" height="30"/></span></a></li>
<li class="dock_item"><a callback-method='initializeSettings' href="<%= desktop_settings_path %>" custom-load="settings" class="widget_fn wh2 hh2" id="d_settings" onclick="return false;"><span class="widget_icon"><img src="" alt="Settings" id="settings_icon" width="30" height="30"/></span></a></li> <li class="dock_item"><a callback-method='initializeSettings' href="<%= desktop_settings_path %>" custom-load="settings" class="widget_fn wh2 hh2" id="d_settings" onclick="return false;"><span class="widget_icon"><img src="" alt="Settings" id="settings_icon" width="30" height="30"/></span></a></li>
</ul> </ul>
</li> </li>
@ -62,17 +63,23 @@
</div> </div>
</div> </div>
<div id="container"> <div id="container">
<div id='ajax_container'> <div id='ajax_container'>
</div> </div>
</div> </div>
<!--<div id="orbitbar"></div>--> <!--<div id="orbitbar"></div>-->
<div id="minimizebar" class="admbg"></div>
<div id="thmbackground"></div> <img src="" id="thmbackground" />
<div id="bgover" ></div> <div id="bgover" ></div>
<div id="orbitnote"></div> <div id="orbitnote" style="display:none;">
<div id="orbitdiag"> <div class="note_holder">
<div class="note_type"><img id='note_img' alt=""/></div>
<div class="note_message">Check the Notifications section for more information.</div>
</div>
</div>
<div id="orbitdiag" style="display: none;">
<div class="tile op07"></div> <div class="tile op07"></div>
<div class="diag_holder"> <div class="diag_holder">
<div class="diag_holder_inner"> <div class="diag_holder_inner">
@ -93,12 +100,7 @@
orbitDesktop.prototype.currentUsername = "<%= @currentusername %>"; orbitDesktop.prototype.currentUsername = "<%= @currentusername %>";
//uselessfunction(); //uselessfunction();
var od = new orbitDesktop("#ajax_container"); var od = new orbitDesktop("#ajax_container");
if($.browser.msie){
if($.browser.version < 9){
$.fx.off = true;
o.notify("We turn off the animation (javascript) for you, but still you can turn it on",10);
}
}
o.notify("Welcome "+o.currentUsername+"!!","alert",3); o.notify("Welcome "+o.currentUsername+"!!","alert",3);
</script> </script>
<%= javascript_include_tag "personal_journal" %>
<%= javascript_include_tag "personal_conference" %>

View File

@ -9,10 +9,10 @@
<div id="panel_l" class="ph"> <div id="panel_l" class="ph">
<div class="s_menu sm_v" content-type="menu"> <div class="s_menu sm_v" content-type="menu">
<ul id='setting_left_nav'> <ul id='setting_left_nav'>
<li><a href="" class="admtxt hh1 w2 hp" onclick='return false;'>Overview</a></li> <li><a href="" class="admtxt hh1 w2 hp" load="true" onclick='return false;'>Overview</a></li>
<li><a href="<%= edit_user_registration_path %>" callback-method="account" custom-load="account" class="admtxt hh1 w2 hp" onclick='return false;'>Account</a></li> <li><a href="<%= edit_user_registration_path %>" callback-method="account" custom-load="account" class="admtxt hh1 w2 hp" onclick='return false;'>Account</a></li>
<li><a href="<%= desktop_sections_path %>" callback-method="sections" custom-load="sections" class="admtxt hh1 w2 hp" onclick='return false;'>Sections</a></li> <li><a href="<%= desktop_sections_path %>" callback-method="sections" custom-load="sections" class="admtxt hh1 w2 hp" onclick='return false;'>Sections</a></li>
<li><a href="<%= desktop_get_themes_path %>" load="true" callback-method="themes" class="admtxt hh1 w2 hp" onclick='return false;'>Theme</a></li> <li><a href="<%= desktop_themes_path %>" callback-method="themes" class="admtxt hh1 w2 hp" onclick='return false;'>Theme</a></li>
<li><a href="<%= desktop_connections_path %>" callback-method="connection" class="admtxt hh1 w2 hp" onclick='return false;'>Connection</a></li> <li><a href="<%= desktop_connections_path %>" callback-method="connection" class="admtxt hh1 w2 hp" onclick='return false;'>Connection</a></li>
</ul> </ul>
</div> </div>

View File

@ -1,9 +1,6 @@
<div id="connection_setting" class="overview vp" content-layout="simple"> <div id="connection_setting" class="overview vp">
<a href="" onclick="window.open('<%= @url %>','login_window','height=250,width=400,titlebar=0,statusbar=0,location=0');return false;">Connect FaceBook</a> <ul class="s_form w2 hp" id="facebook_connection">
<a href="/facebook/get_friends" ajax-remote="get" >Get Friends</a>
<!-- <ul class="s_form w2 hp" id="facebook_connection">
<li><span class="c_status">No Connection</span></li> <li><span class="c_status">No Connection</span></li>
<li><img src="/assets/connection/facebook.png" alt="" class="c_icon"><h1 class="c_name">Facebook</h1></li> <li><img src="/assets/connection/facebook.png" alt="" class="c_icon"><h1 class="c_name">Facebook</h1></li>
<li><label for="">Account</label><input type="text"></li> <li><label for="">Account</label><input type="text"></li>
@ -38,7 +35,7 @@
<a href="gmail" class="setting_btn thmc1 thmtxt hp" onclick="return false;" for="delete" style="display:none;">Remove</a> <a href="gmail" class="setting_btn thmc1 thmtxt hp" onclick="return false;" for="delete" style="display:none;">Remove</a>
</div> </div>
</li> </li>
</ul> --> </ul>
</div> </div>
<!-- <div style="z-index:999;position:relative;"><button onclick="o.tempFunc()">Twitter</button> --> <!-- <div style="z-index:999;position:relative;"><button onclick="o.tempFunc()">Twitter</button> -->

View File

@ -1,16 +1,16 @@
<div class="s_tab stb_h"> <div class="s_tab stb_h">
<ul> <ul>
<li><a href="#st1" class="hh1 hp thmc2 thmtxt" data-active="true">Themes</a></li> <li><a href="#st1" class="hh1 hp thmtxt thmc2">Select Theme</a></li>
<li><a href="#st2" class="hh1 hp admtxt admbg">Theme Color</a></li> <li><a href="#st2" class="hh1 hp admtxt admbg">Custom Theme</a></li>
<li><a href="#st3" class="hh1 hp admtxt admbg">Wallpaper</a></li> <li><a href="#st3" class="hh1 hp admtxt admbg">Wallpaper</a></li>
</ul> </ul>
</div> </div>
<div class="overview tab_holder" content-layout="simple"> <div class="overview" content-layout="simple">
<div id="st1" class="st_c" style="display:block;"> <div id="st1" class="st_c">
<div class="theme_list ssl"> <div class="theme_list ssl">
<% @themes.each do |theme| %> <% @themes.each do |theme| %>
<div id="<%= theme.id %>" class="ssl_item"><div class="theme_thumb"><img src="<%= theme.images.where(:name=>theme.background).first.file.thumb.url %>" alt="" width="120" height="96"></div><span class="theme_name ssl_des"><%= theme.name %></span></div> <div id="<%= theme.id %>" class="ssl_item"><div class="theme_thumb"><img src="/assets/sample_theme.jpg" alt="" width="120" height="96"></div><span class="theme_name ssl_des"><%= theme.name %></span></div>
<% end %> <% end %>
</div> </div>
</div> </div>

View File

@ -1,10 +0,0 @@
<div>
<ul>
<% @desktopapps.each do |da| %>
<li> <%= da.name %>
<%= link_to "Delete", desktop_app_path(da), :method=>"delete", :confirm=>"Are you sure?" %>
<%#= link_to "Edit", edit_desktop_app_path(da) %>
</li>
<% end %>
</ul>
</div>

View File

@ -1,12 +0,0 @@
<h4>Upload App Package </h4>
<div class="main2">
<%= form_tag '',:multipart => true,:action=>"post" do |f| %>
<p>
<%= file_field :desktop_app,:package_file %>
</p>
<%= submit_tag %>
<% end %>
</div>

View File

@ -1,16 +0,0 @@
<div>
<%= @dw.name %>
<h4>Upload Widget image </h4>
<div class="main2">
<%= form_for @dw, :url => desktop_widget_path(@dw) do |f| %>
<p>
<%= f.file_field :image %>
</p>
<%= submit_tag %>
<% end %>
</div>
</div>

View File

@ -1,9 +0,0 @@
<div>
<ul>
<% @desktopThemes.each do |dw| %>
<li> <%= dw.name %>
<%= link_to "Delete", desktop_theme_path(dw), :method=>"delete", :confirm=>"Are you sure?" %>
</li>
<% end %>
</ul>
</div>

View File

@ -1,12 +0,0 @@
<h4>Upload Theme Package </h4>
<div class="main2">
<%= form_tag '',:multipart => true,:action=>"post" do |f| %>
<p>
<%= file_field :desktop_theme,:package_file %>
</p>
<%= submit_tag %>
<% end %>
</div>

View File

@ -1,16 +0,0 @@
<div>
<%= @dw.name %>
<h4>Upload Widget image </h4>
<div class="main2">
<%= form_for @dw, :url => desktop_widget_path(@dw) do |f| %>
<p>
<%= f.file_field :image %>
</p>
<%= submit_tag %>
<% end %>
</div>
</div>

View File

@ -1,10 +0,0 @@
<div>
<ul>
<% @desktopWidgets.each do |dw| %>
<li> <%= dw.name %>
<%= link_to "Delete", desktop_widget_path(dw), :method=>"delete", :confirm=>"Are you sure?" %>
<%= link_to "Edit", edit_desktop_widget_path(dw) %>
</li>
<% end %>
</ul>
</div>

View File

@ -3,6 +3,7 @@ defaults: &defaults
store_ip: 'redmine.rulingcom.com:3001' store_ip: 'redmine.rulingcom.com:3001'
orbit: 'Orbit' orbit: 'Orbit'
ruling_digital: 'RulingDigital' ruling_digital: 'RulingDigital'
backup_keep_for_days: 30
development: development:
<<: *defaults <<: *defaults

View File

@ -0,0 +1,54 @@
PrototypeR4::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# The production environment is meant for finished, "live" apps.
# Code is not reloaded between requests
config.cache_classes = true
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Specifies the header that your server uses for sending files
config.action_dispatch.x_sendfile_header = "X-Sendfile"
# For nginx:
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
# If you have no front-end server that supports something like X-Sendfile,
# just comment this out and Rails will serve the files
# See everything in the log (default is :info)
# config.log_level = :debug
# Use a different logger for distributed setups
# config.logger = SyslogLogger.new
# Use a different cache store in production
# config.cache_store = :mem_cache_store
# Disable Rails's static asset server
# In production, Apache or nginx will already do this
config.serve_static_assets = false
# Enable serving of images, stylesheets, and javascripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"
# Disable delivery errors, bad email addresses will be ignored
# config.action_mailer.raise_delivery_errors = false
# Enable threaded mode
# config.threadsafe!
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
#compress both stylesheets and Javascripts
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :scss
end

View File

@ -3,7 +3,7 @@ require 'resque_scheduler/server'
# require 'yaml' # require 'yaml'
Resque.redis = 'localhost:6379' Resque.redis = 'localhost:6379'
Resque.redis.namespace = "resque" Resque.redis.namespace = Site.first.resque_namespace rescue APP_CONFIG['orbit']
# If you want to be able to dynamically change the schedule, # If you want to be able to dynamically change the schedule,
# uncomment this line. A dynamic schedule can be updated via the # uncomment this line. A dynamic schedule can be updated via the

View File

@ -272,6 +272,8 @@ en:
setting: Mail settings setting: Mail settings
tls: TLS tls: TLS
user_name: User Name user_name: User Name
mail_cron: Scheduled Email
mail_cron_log: Email Log
manager: Manager manager: Manager
markup: Markup markup: Markup
markup_options: Markup options markup_options: Markup options

View File

@ -272,6 +272,8 @@ zh_tw:
setting: 電子郵件設定 setting: 電子郵件設定
tls: 電子郵件TLS tls: 電子郵件TLS
user_name: 電子郵件帳號 user_name: 電子郵件帳號
mail_cron: 待寄Email
mail_cron_log: Email發送記錄
manager: 管理者 manager: 管理者
markup: 輸入模式 markup: 輸入模式
markup_options: 標註選項 markup_options: 標註選項

View File

@ -9,9 +9,6 @@ defaults: &defaults
development: development:
<<: *defaults <<: *defaults
database: test_site database: test_site
test: test:
<<: *defaults <<: *defaults
database: test_site database: test_site
@ -24,4 +21,4 @@ production:
# password: <%= ENV['MONGOID_PASSWORD'] %> # password: <%= ENV['MONGOID_PASSWORD'] %>
# database: <%= ENV['MONGOID_DATABASE'] %> # database: <%= ENV['MONGOID_DATABASE'] %>
<<: *defaults <<: *defaults
database: demo_site_production database: test_site

View File

@ -1,3 +1,15 @@
dashboard_counter_cache:
cron: 0 * * * * *
class: DashboardCounter
args:
description: DashboardCounterCache
backup_server:
cron: 0 0 2 * * *
class: BackupServer
args:
description: BackupServer and remove old backups
update_tag_cloud: update_tag_cloud:
cron: 0 0 [0,12] * * * cron: 0 0 [0,12] * * *
class: UpdateTagCloud class: UpdateTagCloud
@ -9,3 +21,9 @@ generate_system_summary:
class: GenerateSystemSummary class: GenerateSystemSummary
args: args:
description: Generate the system status such as disk free space,package version list for showing at site tab description: Generate the system status such as disk free space,package version list for showing at site tab
email_cron:
cron: 0 0 [10,16,22] * * *
class: EmailCron
args:
description: EmailCron

Some files were not shown because too many files have changed in this diff Show More