Compare commits

..

31 Commits

Author SHA1 Message Date
devin chen 980e63d830 isotope experiment for form
1. This is only for DEMO, please don't merge this commit into any branch
2. This demo is only inside the Journal Paper > Add/Edit page
3. Please check the Diff from the original HTML
4. Please update the 'desktop-main.scss', 'desktop-main.css',
'desktop-component.scss', 'desktop-component.css' for update and mistake
2013-08-23 10:23:40 +08:00
devin chen 9fff3b9405 Minimize bar update 2013-08-19 06:56:58 +08:00
Harry Bomrah 1e73c64ea9 new themes added to desktop plus theme uploader created 2013-07-25 17:18:24 +08:00
Harry Bomrah 0b1679871f desktop final fix 2013-06-24 19:23:39 +08:00
Harry Bomrah 3bc924926e mongoid yml fix 2013-06-24 19:20:52 +08:00
Harry Bomrah 38f9f82e53 some changes again 2013-06-24 19:19:58 +08:00
Harry Bomrah 7f36be4c5b some changes 2013-06-24 19:17:24 +08:00
Harry Bomrah 0354bf5b15 few updates with fb integration and some other changes in user and supports data to android 2013-06-18 15:59:11 +08:00
devin chen c4db6e5830 simple component update
minor update
2013-06-18 15:57:28 +08:00
devin chen b3c750eade Various view update and change #thmbackground tag 2013-06-18 15:57:18 +08:00
devin chen 1b5d099fda fix loading Section page for Chrome 2013-06-18 15:57:08 +08:00
devin chen 6e9effdb9f minor update 2013-06-18 15:56:49 +08:00
devin chen e1f161cc5d gridster update 2013-06-18 15:28:51 +08:00
Harry Bomrah d61ff5f91c apps update -- app upload and activation 2013-06-18 15:27:53 +08:00
devin chen c9747f9fc6 app manager's view update 2013-06-18 15:26:53 +08:00
devin chen 269264d232 'select2' minor update 2013-06-18 15:26:36 +08:00
Harry Bomrah 8b53ad6cc6 fixed saving of positions of the tiles again 2013-06-18 15:26:15 +08:00
devin chen 41afb46bf6 app manager view update 2013-06-18 15:25:49 +08:00
Harry Bomrah 7e6433f71c solved desktop conflict during cherry pick 2013-06-18 15:24:41 +08:00
devin chen 1a7a199504 minor update 2013-06-18 15:23:18 +08:00
devin chen d02806fa58 apps setting view 2013-06-18 15:22:47 +08:00
Harry Bomrah 3f44804717 search fixed again according to devin requirements 2013-06-18 15:22:22 +08:00
Harry Bomrah 5b1f5aa64c new search for app manager and few javascript fixes 2013-06-18 15:20:40 +08:00
devin chen 1851ebb6f7 style for checkbox, radio button 2013-06-18 15:20:33 +08:00
Harry Bomrah 93e755b619 removing duplicate code from js file 2013-06-18 15:20:19 +08:00
devin chen 8fd4eb705b publication's view update 2013-06-18 15:20:02 +08:00
Harry Bomrah 4a6313424b duplicate error fixed and css inside widgets fixed, duplicate location fixed 2013-06-18 15:19:09 +08:00
Harry Bomrah d752af8549 duplicate error fixed and css inside widgets fixed, duplicate location fixed 2013-06-18 15:17:07 +08:00
Harry Bomrah 209b532129 devin branch merge plus minor fixes 2013-06-18 15:16:56 +08:00
Harry Bomrah d651669d5c tiny scrollbar update 2013-06-18 15:13:52 +08:00
devin chen ead749cfed minor update 2013-06-18 15:12:52 +08:00
592 changed files with 6088 additions and 7415 deletions

4
.gitignore vendored
View File

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

12
Gemfile
View File

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

View File

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 287 B

View File

Before

Width:  |  Height:  |  Size: 535 B

After

Width:  |  Height:  |  Size: 535 B

View File

Before

Width:  |  Height:  |  Size: 720 B

After

Width:  |  Height:  |  Size: 720 B

View File

Before

Width:  |  Height:  |  Size: 415 B

After

Width:  |  Height:  |  Size: 415 B

View File

Before

Width:  |  Height:  |  Size: 553 B

After

Width:  |  Height:  |  Size: 553 B

View File

Before

Width:  |  Height:  |  Size: 436 B

After

Width:  |  Height:  |  Size: 436 B

View File

Before

Width:  |  Height:  |  Size: 589 B

After

Width:  |  Height:  |  Size: 589 B

View File

Before

Width:  |  Height:  |  Size: 598 B

After

Width:  |  Height:  |  Size: 598 B

View File

Before

Width:  |  Height:  |  Size: 714 B

After

Width:  |  Height:  |  Size: 714 B

View File

Before

Width:  |  Height:  |  Size: 524 B

After

Width:  |  Height:  |  Size: 524 B

View File

Before

Width:  |  Height:  |  Size: 532 B

After

Width:  |  Height:  |  Size: 532 B

View File

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 454 B

View File

Before

Width:  |  Height:  |  Size: 500 B

After

Width:  |  Height:  |  Size: 500 B

View File

Before

Width:  |  Height:  |  Size: 513 B

After

Width:  |  Height:  |  Size: 513 B

View File

Before

Width:  |  Height:  |  Size: 533 B

After

Width:  |  Height:  |  Size: 533 B

View File

Before

Width:  |  Height:  |  Size: 379 B

After

Width:  |  Height:  |  Size: 379 B

View File

Before

Width:  |  Height:  |  Size: 488 B

After

Width:  |  Height:  |  Size: 488 B

View File

Before

Width:  |  Height:  |  Size: 506 B

After

Width:  |  Height:  |  Size: 506 B

View File

Before

Width:  |  Height:  |  Size: 670 B

After

Width:  |  Height:  |  Size: 670 B

View File

Before

Width:  |  Height:  |  Size: 517 B

After

Width:  |  Height:  |  Size: 517 B

View File

Before

Width:  |  Height:  |  Size: 805 B

After

Width:  |  Height:  |  Size: 805 B

View File

Before

Width:  |  Height:  |  Size: 481 B

After

Width:  |  Height:  |  Size: 481 B

View File

Before

Width:  |  Height:  |  Size: 464 B

After

Width:  |  Height:  |  Size: 464 B

View File

Before

Width:  |  Height:  |  Size: 628 B

After

Width:  |  Height:  |  Size: 628 B

View File

Before

Width:  |  Height:  |  Size: 495 B

After

Width:  |  Height:  |  Size: 495 B

View File

Before

Width:  |  Height:  |  Size: 589 B

After

Width:  |  Height:  |  Size: 589 B

View File

Before

Width:  |  Height:  |  Size: 524 B

After

Width:  |  Height:  |  Size: 524 B

View File

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 575 B

View File

Before

Width:  |  Height:  |  Size: 533 B

After

Width:  |  Height:  |  Size: 533 B

View File

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 557 B

View File

Before

Width:  |  Height:  |  Size: 243 B

After

Width:  |  Height:  |  Size: 243 B

View File

Before

Width:  |  Height:  |  Size: 573 B

After

Width:  |  Height:  |  Size: 573 B

View File

Before

Width:  |  Height:  |  Size: 553 B

After

Width:  |  Height:  |  Size: 553 B

View File

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B

View File

Before

Width:  |  Height:  |  Size: 359 B

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

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

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,32 +8,37 @@ var orbitDesktopAPI = function(){
//msg (string) : message to display
//type (string : success, imp, alert
//time (int) : duration for notification in seconds
var $notify = $("#orbitnote");
var img, n_height;
var $notify = $('#orbitnote'),
ani_method = { direction: 'up',easing: 'easeInOutQuint' },
img, n_height;
if(!type)type="";
switch(type){
case "alert":
img = "note_alert.png";
img = "exclamation-sign";
break;
case "imp":
img = "note_imp.png";
img = "warning-sign";
break;
case "success":
img = "note_success.png";
img = "ok";
break;
default:
img = "note_alert.png";
img = "exclamation-sign";
break;
}
$notify.find("img#note_img").attr("src",o.notifyImgPath+img);
$notify.find(".note_message").html(msg);
n_height = $notify.outerHeight();
if(!time)time=5000; else time=time*1000;
$notify
.css({'top':-n_height, 'display':'block', 'opacity':0})
.animate({top:0,opacity:1},200)
if( !time || time > 20) time = 5000; else time = time*1000;
var sign = '<div class="note_type"><span class="sign icon-'+ img +'"></span></div>',
message = '<div class="note_message">'+ msg +'</div>',
item = '<div class="note_holder admbg">'+ sign + message +'</div>';
$(item)
.prependTo($notify)
.stop(1,1)
.toggle('slide', ani_method, 300)
.delay(time)
.animate({top:-n_height,opacity:0},200);
.toggle('slide', ani_method, 800);
$notify.find('.note_holder:hidden').remove();
};
this.executeFunc = function(func,callbackFn){
//takes 2 arguments
@ -67,7 +72,7 @@ var orbitDesktopAPI = function(){
this.changeWallpaper = function(wallpaper){
//takes 1 parameter
//wallpaper (string): takes wallpaper and sets the wallpaper
$("img#thmbackground").attr("src",o.wallpaperPath+wallpaper);
$("#thmbackground").attr("src",o.wallpaperPath+wallpaper);
o.saveWallpaper(wallpaper);
};
this.confirm = function(settings,callbackfn){
@ -111,29 +116,35 @@ var orbitDesktopAPI = function(){
})
return tempArray;
};
this.appWindow = function(settings,callbackfn){
this.appWindow = function(options,callbackfn){
//takes set of arguments as array and gives callback
//settings.method (string) : like open and close
//settings.title (string) : the window title
//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.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
if(typeof settings == "undefined")settings = {};
var settings = {
method : "open",
extUrl : true,
title : "New Window"
}
$.extend(settings,options);
if(!settings.appid){
o.notify("Invalid AppID.","imp",3);
return;
}
if(!settings.method)settings.method = "open";
if(!settings.extUrl)settings.extUrl = true;
var isWindow = ($("div.app_frame[data-app="+settings.appid+"]").length > 0 ? $("div.app_frame[data-app="+settings.appid+"]") : null);
if(isWindow){
o.minimizeBarManager.maximize(isWindow);
return;
}
if(settings.method == 'open'){
var appurl = "http://www.rulingcom.com";
o.windowcounter++;
if(!settings.title)settings.title = "New Window "+o.windowcounter;
if(settings.extUrl){
if(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]+\.)");
if(urlregex.test(settings.url))
appurl = settings.url;
@ -147,20 +158,64 @@ var orbitDesktopAPI = function(){
return;
}
}
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>');
$(o.contentHolder).append(whtml);
var parentwindow = $(o.contentHolder).find("div#app_frame_"+o.windowcounter);
var app_holder_height = parentwindow.height() - 72;
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>');
$("body").append(whtml).css('overflow','hidden');
var parentwindow = $("#app_frame_"+o.windowcounter);
var app_holder_height = parentwindow.height() - 60;
var app_holder_width = parentwindow.width();
parentwindow.find("iframe").attr({"height":app_holder_height,"width":app_holder_width});
parentwindow.find("div.app_holder").height(app_holder_height);
parentwindow.find("span.icon-remove").click(function(){
parentwindow.remove();
parentwindow.find("iframe").attr({"height":app_holder_height});
parentwindow.find(".app_holder").height(app_holder_height);
parentwindow.find(".icon-remove").click(function(){
o.appWindow.close(parentwindow);
});
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"){
callbackfn.call(this);
callbackfn.call(this,parentwindow);
}
return parentwindow;
};
this.toolPopup = function(settings){
if(settings == "destroy"){

View File

@ -15,11 +15,6 @@ function load_tinymce() {
theme_advanced_statusbar_location : "bottom",
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 : "o2k7",
skin_variant : "silver",

View File

@ -1,6 +0,0 @@
$(".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,4 +5,3 @@
*= require_self
*= require social-share-button
*/

View File

@ -8,6 +8,10 @@ $gray: #ddd;
font-family: "Source Sans Pro", Arial, sans-serif;
font-size: #{$font-size}px;
}
@mixin font-icon($font-size) {
font-family: "FontAwesome";
font-size: #{$font-size}px;
}
@mixin transition-type($property, $sec) {
-webkit-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-user-select: none;
-khtml-user-select: none;
@ -50,6 +50,14 @@
width: 384px; }
.s_grid_row .s_grid_12 {
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 {
margin-bottom: 0; }
.s_grid_row .s_grid_h_1 {
@ -93,7 +101,7 @@
left: 0;
top: 60px;
font-size: 15px;
width: 120px;
min-width: 120px;
border: solid 2px #dddddd;
-webkit-box-sizing: border-box;
/* webkit */
@ -128,7 +136,7 @@
font-size: 15px;
line-height: 36px; }
.s_menu li {
border-top: solid 1px #dddddd; }
border-top: solid 1px #eaeaea; }
.s_menu li:first-child {
border: none; }
.s_menu a {
@ -138,31 +146,23 @@
.s_tab {
font-size: 15px;
line-height: 36px; }
.s_tab ul {
overflow: hidden; }
.s_tab li {
float: left; }
.s_tab a {
display: block; }
.s_tab .admbg {
background-color: #f0f0f0; }
.s_tab ul {
overflow: hidden; }
.s_tab li {
float: left; }
.s_tab a {
display: block; }
.s_tab .admbg {
background-color: #f0f0f0; }
.st_c {
display: none; }
.st_c:first-child {
display: block; }
/* simple form */
.s_form {
font-size: 15px; }
.s_form label {
font-size: 13px;
font-weight: bold;
display: inline-block;
vertical-align: middle;
width: 100px;
@ -172,6 +172,9 @@
line-height: 32px; }
.s_form input[type=text],
.s_form input[type=password],
.s_form input[type=submit],
.s_form input[type=reset],
.s_form input[type=button],
.s_form select {
height: 32px;
margin-top: 0;
@ -202,7 +205,6 @@
.s_form input[type=text]:focus,
.s_form input[type=password]:focus,
.s_form textarea:focus {
background-color: #f7f7f7;
border-color: #c4c4c4; }
.s_form textarea {
resize: none; }
@ -218,9 +220,10 @@
.s_form .s_table td {
vertical-align: middle; }
.s_form .s_table thead th {
border-bottom: solid 1px #eeeeee; }
border-bottom: solid 1px #eee; }
.check_box_g {
/* simple select */
.s_select_g {
padding: 4px 8px;
-webkit-box-sizing: border-box;
/* webkit */
@ -232,22 +235,89 @@
/* ie */
box-sizing: border-box;
/* css3 */ }
.check_box_g li {
.s_select_g li {
margin: 0 6px 6px 0;
padding: 0; }
.check_box_g li,
.check_box_g li > * {
.s_select_g li,
.s_select_g li > * {
display: inline-block;
vertical-align: middle; }
.check_box_g label {
.s_select_g label {
width: auto;
margin: 0; }
.check_box_g > label {
.s_select_g > label {
font-size: 15px;
display: block;
padding: 4px 0; }
.check_box_g li label {
padding-left: 4px; }
.s_select_g li label {
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 */
.toolbar {
@ -255,7 +325,7 @@
font-size: 15px;
line-height: 36px;
position: relative;
z-index: 9; }
z-index: 99; }
.toolbar .sdm, .toolbar .fn_g {
display: inline-block;
vertical-align: top; }
@ -282,16 +352,21 @@
width: auto;
height: 100%;
overflow: hidden;
position: relative; }
position: relative;
z-index: 10; }
.tinycanvas .overview {
position: absolute;
left: 0;
top: 0;
min-width: 100%;
width: 100%;
height: 100%; }
.tinycanvas .overview:after {
content: "";
display: table;
width: 100%; }
.tinycanvas .overview > .column {
float: left;
border-right: solid 1px #eeeeee;
border-right: solid 1px #eee;
padding: 0 12px 0 0;
margin: 0 12px 0 0;
height: 100%; }
@ -347,7 +422,7 @@
width: 6px; }
.tinycanvas .scrollbar {
position: absolute;
z-index: 9;
z-index: 11;
visibility: hidden;
opacity: 0;
-webkit-transition: opacity 0.3s ease;
@ -358,7 +433,7 @@
visibility: visible; }
.tinycanvas .scrollbar.sb_h {
left: 0;
bottom: -6px;
bottom: 0;
height: 6px; }
.tinycanvas .scrollbar.sb_v {
right: 0;

View File

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

View File

@ -72,6 +72,12 @@ a:focus {
content: '';
clear: both; }
.valign:before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle; }
.o-loading {
font-size: 13px; }
.fullsize .o-loading {
@ -80,14 +86,17 @@ a:focus {
font-size: 20px; }
#thmbackground {
min-height: 100%;
min-width: 980px;
width: 100%;
height: auto;
height: 100%;
position: fixed;
top: 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 {
position: fixed;
@ -121,13 +130,14 @@ a:focus {
background-color: #fff; }
.admbg2 {
background-color: #ddd; }
background-color: #dddddd; }
.admtxt {
color: #666; }
.admtxt:hover {
color: #666; }
a.admtxt.admbg2:hover {
color: #fff;
background-color: #aaaaaa; }
.hfn {
font-size: 15px;
@ -147,6 +157,15 @@ a:focus {
.ini_input:focus {
outline: none; }
.text_ofl {
overflow: hidden; }
.text_ofl span {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis; }
/* - Opacity */
.op00 {
opacity: 0; }
@ -238,7 +257,15 @@ a:focus {
.element {
margin: 0 12px 12px 0;
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 {
float: left;
@ -246,12 +273,14 @@ a:focus {
/* desktop layout */
#container {
padding: 48px 0 0 156px; }
padding: 48px 0 0 156px;
min-width: 800px; }
#header {
padding: 0 0 12px 0;
min-width: 800px;
height: 72px; }
height: 72px;
position: relative;
z-index: 2; }
#side {
width: 60px;
@ -260,12 +289,13 @@ a:focus {
margin-right: 96px;
top: 120px;
left: 0;
z-index: 11; }
z-index: 13; }
#holder {
height: 516px;
width: auto;
position: relative; }
position: relative;
z-index: 1; }
#rwidget {
height: 516px; }
@ -338,37 +368,59 @@ a:focus {
/* panel */
#panel_l {
background-color: #f0f0f0;
background-color: #f7f7f7;
float: left; }
#panel_r {
background-color: #fff;
margin-left: 252px;
position: relative; }
position: relative;
width: auto; }
/* Desktop Notification */
#orbitnote {
position: fixed;
top: 0;
left: 50%;
margin-left: -206px;
margin-left: -200px;
z-index: 99999;
width: 400px;
padding: 0 6px 6px 6px;
background-color: #000;
background-color: rgba(0, 0, 0, 0.6); }
-webkit-transition: height 2s ease;
-moz-transition: height 2s ease;
transition: height 2s ease; }
#orbitnote .note_holder {
background-color: #f3f3f3;
border: solid 1px white;
border-top: none;
overflow: hidden;
padding: 24px 24px; }
padding: 36px;
border: solid 2px #dddddd;
border-top: 0;
display: none; }
#orbitnote .note_holder .note_type {
float: left; }
#orbitnote .note_holder .note_type img {
display: block; }
display: inline-block;
vertical-align: middle;
width: 60px;
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 {
color: #333;
margin: 10px 0 0 48px;
display: inline-block;
vertical-align: middle;
word-wrap: break-word;
width: 240px;
margin: 0 0 0 20px;
font-size: 15px; }
/* Desktop Dialogue */
@ -378,7 +430,8 @@ a:focus {
height: 100%;
left: 0;
top: 0;
z-index: 12; }
z-index: 12;
display: none; }
#orbitdiag .tile {
background-color: #000; }
#orbitdiag .diag_holder {
@ -402,7 +455,7 @@ a:focus {
font-size: 15px;
line-height: 36px; }
#orbitdiag .diag_holder .diag_holder_inner .diag_btn:hover {
outline: solid 2px white; }
outline: solid 2px #fff; }
/* Tile */
.appname {
@ -435,7 +488,7 @@ a:focus {
height: 60px;
margin: 0 auto;
position: relative; }
[data-sizex="1"] .appicon {
[data-sizex="1"] .appicon, .w1.h1 .appicon {
margin-top: 24px; }
#sections .appicon {
width: 30px;
@ -480,6 +533,11 @@ a:focus {
cursor: move;
overflow: hidden; }
.gs_w.dragging {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92); }
/* header drop menu */
.sdm_mdr .sdm_o {
top: 36px; }
@ -495,7 +553,7 @@ a:focus {
cursor: pointer; }
.theme_thumb, .stock_wallpaper img {
border: solid 1px white;
border: solid 1px #fff;
width: 120px;
margin: 0 auto; }
@ -548,8 +606,9 @@ a:focus {
padding: 24px 0;
margin-top: 12px;
overflow: hidden;
border-top: solid 1px #eeeeee;
background-color: #fff; }
border-top: solid 1px #eee; }
.s_action .setting_btn {
margin-left: 12px; }
.setting_btn {
display: block;
@ -559,28 +618,76 @@ a:focus {
text-align: center;
border: 0; }
.group_search {
/* Apps Manager */
#app_info {
float: left;
margin-right: 36px; }
width: 420px;
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 {
float: left;
margin-right: 24px;
max-width: 340px; }
.g_sep {
width: 12px;
border-left: solid 1px white;
-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 */ }
overflow: hidden; }
.search_result .message {
font-size: 15px;
word-wrap: break-word; }
.search_result .message b {
font-size: 20px;
display: block;
margin-top: 12px; }
.grp {
height: 528px;
@ -608,9 +715,10 @@ a:focus {
overflow: hidden; }
.list_t_title {
margin-bottom: 6px;
color: #333;
font-size: 15px; }
padding-bottom: 6px;
color: #000;
font-size: 15px;
line-height: 1.3em; }
.list_t_des {
line-height: 1.5em;
@ -618,153 +726,34 @@ a:focus {
margin-bottom: 4px;
font-size: 13px; }
.list_item_function a {
display: inline-block;
padding: 4px;
font-size: 11px;
-webkit-text-size-adjust: none; }
/* Journal Papers */
[page-name="journal_p_list"] .list_t_item .inner {
padding-left: 30px; }
[page-name="journal_p_list"] .list_item_action {
font-size: 12px;
float: left;
margin-left: -30px; }
[page-name="journal_p_list"] .list_item_action a {
display: block;
width: 20px;
height: 20px;
line-height: 20px;
margin: 1px 1px 6px 1px; }
[page-name="journal_p_list"] .list_item_action .icon-star-empty {
color: #999;
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; }
.list_item_function {
position: absolute;
right: 0;
bottom: -30px;
width: 100%;
height: 30px;
line-height: 30px;
text-align: right;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
transition: all 0.3s ease; }
.list_item_function a {
display: inline-block;
vertical-align: top;
margin-left: 4px;
padding: 0 6px;
font-size: 11px;
-webkit-text-size-adjust: none; }
.list_item_function a :first-child {
margin-left: 0; }
.datalist_item:hover .list_item_function {
bottom: 0; }
/* App */
.app_frame {
margin: 48px 96px 48px 156px;
margin: 60px 0 48px 156px;
min-width: 800px;
min-height: 588px;
min-height: 576px;
position: absolute;
top: 0;
left: 0;
@ -775,17 +764,40 @@ a:focus {
background-color: #fff;
position: absolute;
width: 100%; }
.app_frame #header .icon-remove {
display: block;
float: right;
line-height: 60px;
font-size: 20px;
cursor: pointer; }
.app_frame .app_holder iframe {
width: 100%; }
.app_frame .app_frame_header {
height: 60px; }
.app_frame .app_frame_header .icon-remove, .app_frame .app_frame_header .icon-minus {
display: block;
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 */
.desktop_toolpopup {
position: absolute;
z-index: 10px;
z-index: 10;
display: none;
padding: 12px;
cursor: default;

View File

@ -68,6 +68,12 @@ a:focus { outline: none; }
content: '';
clear: both;
}
.valign:before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
.o-loading {
font-size: 13px;
// font-weight: normal;
@ -80,14 +86,17 @@ a:focus { outline: none; }
}
}
#thmbackground {
min-height: 100%;
min-width: 980px;
width: 100%;
height: auto;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: -1;
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
#bgover {
position: fixed;
@ -113,9 +122,12 @@ a:focus { outline: none; }
/* Desktop Global Style */
.admbg { background-color: #fff; }
.admbg2 { background-color: #ddd; }
.admbg2 { background-color: $gray; }
.admtxt { color: #666; }
.admtxt:hover { color: #666; }
a.admtxt.admbg2:hover {
color: #fff;
background-color: darken($gray, 20%);
}
.hfn {
font-size: 15px;
line-height: 36px;
@ -130,6 +142,17 @@ a:focus { outline: none; }
border: 0;
}
.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 */
@for $i from 0 through 10 {
@ -166,7 +189,15 @@ a:focus { outline: none; }
margin: 0 12px 12px 0;
float: left;
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{
float: left;
margin-right: 24px;
@ -175,11 +206,13 @@ a:focus { outline: none; }
/* desktop layout */
#container {
padding: 48px 0 0 156px;
min-width: 800px;
}
#header {
padding: 0 0 12px 0;
min-width: 800px;
height: 72px;
position: relative;
z-index: 2;
}
#side {
width: 60px;
@ -188,12 +221,13 @@ a:focus { outline: none; }
margin-right: 96px;
top: 120px;
left: 0;
z-index: 11;
z-index: 13;
}
#holder {
height: 516px;
width: auto;
position: relative;
z-index: 1;
}
#rwidget {
height: 516px;
@ -282,12 +316,14 @@ a:focus { outline: none; }
}
/* panel */
#panel_l {
background-color: #f0f0f0;
background-color: lighten($gray, 10%);
float: left;
}
#panel_r {
background-color: #fff;
margin-left: 252px;
position: relative;
width: auto;
}
/* Desktop Notification */
@ -295,30 +331,46 @@ a:focus { outline: none; }
position: fixed;
top: 0;
left: 50%;
margin-left: -206px;
margin-left: -200px;
z-index: 99999;
width: 400px;
padding: 0 6px 6px 6px;
background-color: #000;
background-color: rgba(0,0,0,0.6);
@include transition-type(height,2);
.note_holder {
background-color: #f3f3f3;
border: solid 1px #fff;
border-top: none;
overflow: hidden;
padding: 24px 24px;
padding: 36px;
border: solid 2px $gray;
border-top: 0;
display: none;
.note_type {
float: left;
display: inline-block;
vertical-align: middle;
width: 60px;
height: 60px;
color: #fff;
img {
.sign {
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 {
color: #333;
margin: 10px 0 0 48px;
display: inline-block;
vertical-align: middle;
word-wrap: break-word;
width: 240px;
margin: 0 0 0 20px;
font-size: 15px;
// font-weight: normal;
}
@ -333,6 +385,7 @@ a:focus { outline: none; }
left: 0;
top: 0;
z-index: 12;
display: none;
.tile {
background-color: #000;
@ -411,7 +464,7 @@ a:focus { outline: none; }
margin: 0 auto;
position: relative;
[data-sizex="1"] & {
[data-sizex="1"] &, .w1.h1 & {
margin-top: 24px;
}
#sections & {
@ -460,11 +513,11 @@ a:focus { outline: none; }
cursor: move;
overflow: hidden;
}
// .app.gs_w:active {
// -webkit-transform: scale(0.9);
// -moz-transform: scale(0.9);
// transform: scale(0.9);
// }
.gs_w.dragging {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92);
}
/* header drop menu */
.sdm_mdr .sdm_o { top: 36px; }
@ -546,7 +599,11 @@ a:focus { outline: none; }
margin-top: 12px;
overflow: hidden;
border-top: solid 1px #eee;
background-color: #fff;
// background-color: #fff;
.setting_btn {
margin-left: 12px;
}
}
.setting_btn {
display: block;
@ -558,21 +615,74 @@ a:focus { outline: none; }
border: 0;
}
.group_search{
/* Apps Manager */
#app_info {
float: left;
width: 420px;
height: 516px;
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{
float: left;
margin-right: 24px;
max-width: 340px;
}
.g_sep {
width: 12px;
border-left: solid 1px #fff;
@include box-sizing;
overflow: hidden;
.message {
font-size: 15px;
word-wrap: break-word;
b {
font-size: 20px;
display: block;
margin-top: 12px;
}
}
}
@ -596,11 +706,14 @@ a:focus { outline: none; }
}
/* list item */
.list_t_item { overflow: hidden; }
.list_t_item {
overflow: hidden;
}
.list_t_title {
margin-bottom: 6px;
color: #333;
padding-bottom: 6px;
color: #000;
font-size: 15px;
line-height: 1.3em;
// font-weight: normal;
}
.list_t_des {
@ -609,164 +722,38 @@ a:focus { outline: none; }
margin-bottom: 4px;
font-size: 13px;
}
.list_item_function a {
display: inline-block;
padding: 4px;
font-size: 11px;
-webkit-text-size-adjust: none;
}
.list_item_function {
position: absolute;
right: 0;
bottom: -30px;
width: 100%;
height: 30px;
line-height: 30px;
text-align: right;
@include transition-type(all,0.3);
/* Journal Papers */
[page-name="journal_p_list"] {
.list_t_item .inner { padding-left: 30px; }
.list_item_action {
font-size: 12px;
float: left;
margin-left: -30px;
a {
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; }
}
.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 {
a {
display: inline-block;
padding: 4px;
font-family: Arial, sans-serif;
vertical-align: top;
margin-left: 4px;
padding: 0 6px;
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;*/
:first-child {
margin-left: 0;
}
}
.form_space {
margin-bottom: 10px;
font-size: 18px;
font-family: Arial, sans-serif;
.datalist_item:hover & {
bottom: 0;
}
}
/* Journal New Co-Author */
#new_co_author label {
margin-right: 0;
}
/* App */
.app_frame {
margin: 48px 96px 48px 156px;
margin: 60px 0 48px 156px;
min-width: 800px;
min-height: 588px;
min-height: 576px;
position: absolute;
top: 0;
left: 0;
@ -778,20 +765,55 @@ a:focus { outline: none; }
background-color: #fff;
position: absolute;
width: 100%;
iframe {
width: 100%;
}
}
#header .icon-remove {
display: block;
float: right;
line-height: 60px;
font-size: 20px;
.app_frame_header{
height: 60px;
.icon-remove, .icon-minus {
display: block;
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;
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 */
.desktop_toolpopup {
position: absolute;
z-index: 10px;
z-index: 10;
display: none;
padding: 12px;
cursor: default;

View File

@ -1,10 +1,10 @@
@media only screen and (min-width: 1240px){
#panel_r.pw { width: 800px; }
/*#panel_r.pw { width: 800px; }*/
}
@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 {
background-color: #f4f4f4;
background-image: none;
border: 1px solid #dddddd;
border: 1px solid #ddd;
cursor: default; }
.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; }
.select2-default {
color: #999999 !important; }
color: #999 !important; }
.select2-container-multi .select2-choices .select2-search-choice {
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 {
background-color: #f4f4f4;
background-image: none;
border: 1px solid #dddddd;
border: 1px solid #ddd;
cursor: default; }
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
padding: 3px 5px 3px 5px;
border: 1px solid #dddddd;
border: 1px solid #ddd;
background-image: none;
background-color: #f4f4f4; }
@ -404,4 +404,4 @@ disabled look for disabled choices in the results dropdown
background-size: 60px 40px !important; }
.select2-search input {
background-position: 100% -21px !important; } }
background-position: 100% -21px !important; } }

View File

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

View File

@ -1,38 +0,0 @@
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

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

View File

@ -0,0 +1,49 @@
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
end
def themes
def get_themes
@themes = DesktopTheme.all
# raise @themes.inspect
render "desktop/settings/themes", :layout => false
@ -42,6 +42,7 @@ class DesktopController< ApplicationController
end
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
end
@ -107,18 +108,19 @@ class DesktopController< ApplicationController
def getgroups
@section = Section.find(params["sectionid"])
@groups = @section.groups
gr = Array.new
@groups.each do |group|
a = Array.new
t = group.tiles
t.each do |tile|
@t = group.tiles
@t.each do |tile|
data_content = ""
jsfile = []
cssfile = ""
shape = "w1 h1"
fullsize = false
link = ""
icon= ""
fullsize = false
if tile.data_category == "widget"
widge = DesktopWidget.find(tile.desktop_widget_id.to_s)
# data_content = widge.widget_layout.file
@ -127,21 +129,17 @@ class DesktopController< ApplicationController
cssfile = widge.css_default.file.as_json[:file]
shape = widge.shape
title = widge.name
icon = widge.images.where(:name => widge.icon).first.file.url
# binding.pry
if not widge.fullsize.nil?
fullsize = widge.fullsize
end
fullsize = widge.fullsize
else
data_content = tile.data_content
title = tile.title
case data_content
when "envocab"
link = "http://www.english-vocabulary.eu/"
when "wikibooks"
link = "http://www.wikibooks.org"
end
app = DesktopApp.find(tile.desktop_app_id.to_s)
title = app.name
link = app.url
icon = app.images.where(:name => app.icon).first.file.url
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}
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}
end
@ -152,9 +150,11 @@ class DesktopController< ApplicationController
def widget_layout
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
dhtml = link + content
dhtml = css + content
render :text => dhtml.html_safe
end
@ -194,6 +194,46 @@ class DesktopController< ApplicationController
end
render :json=>a.to_json
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
@newpositions = params[:newpositions]
@ -236,5 +276,48 @@ class DesktopController< ApplicationController
feed = Net::HTTP.get_response(URI.parse("https://mail.google.com/mail/feed/atom")).body
render :xml=>feed
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

View File

@ -0,0 +1,86 @@
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,6 +4,7 @@ class DesktopWidgetsController < OrbitBackendController
require 'zip/zip'
def index
@desktopWidgets = DesktopWidget.all
end
def upload
@ -21,6 +22,19 @@ class DesktopWidgetsController < OrbitBackendController
temp_file.close
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)
Zip::ZipFile.open(file) { |zip_file|

View File

@ -0,0 +1,31 @@
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
@page_title = t('mobile.page')
@page_contexts = get_sorted_page_from_structure
@page_contexts = PageContext.where(:archived => false).page(params[:page_main]).per(15)
end
def page_content
@ -57,12 +57,4 @@ class MobileController < ApplicationController
@no_footer = true if request.path =~ /app/
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

View File

@ -7,10 +7,4 @@ class OrbitFrontendComponentController< ApplicationController
@app_title = request.fullpath.split('/')[2]
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

View File

@ -44,13 +44,29 @@ class PagesController < ApplicationController
# render :file => "#{Rails.root}/public/404.html", :status => :not_found
#end
end
def convert_array_param(key,array)
array.collect{|t| "#{key}[]=#{t}"}.join("&")
end
def index_from_link
url = "/#{@item.path}"
options = ''
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?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
if params[:category_id].is_a? Array
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? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank?
uri = URI::escape(url + options)
@ -62,8 +78,8 @@ class PagesController < ApplicationController
url = "/#{@item.path}"
options = ''
options << "#{options.blank? ? '?' : '&'}id=#{params[:id]}" unless params[:id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}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? ? '?' : '&'}preview=#{params[:preview]}" unless params[:preview].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?
@ -82,43 +98,23 @@ class PagesController < ApplicationController
elsif params[:same_page_id]
@item = Item.find(params[:same_page_id])
else
category_ids = Array(params[:category_id]) unless params[:category_id].nil?
tag_ids = Array(params[:tag_id]) unless params[:tag_id].nil?
category_ids = params[:category_id].is_a?(Array) ? params[:category_id] : [params[:category_id]]
tag_ids = params[:tag_id].is_a?(Array) ? params[:tag_id] : [params[:tag_id]]
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?
@item = Item.where(default_query.merge(specific_categories).merge(specific_tags)).first
@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
@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.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => [nil, []]}) unless @item
elsif !category_ids.blank?
@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
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :category.in => category_ids).any_in(tag: [nil, []]).first
elsif !tag_ids.blank?
@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
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :tag.in => tag_ids).any_in(category: [nil, []]).first
end
@item = Item.find(params[:orig_page]) unless @item || params[:orig_page].blank?
@item = Item.where(default_query.merge(nil_categories).merge(nil_tags)).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]).all_of("tag" => {"$in" => [nil, []]},"category" => { "$in" => [nil, []]}).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: 'default_widget').first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).first unless @item
end
raise PageError, 'Missing Frontend Page' if @item.nil?
raise PageError,'Missing Frontend Page' if @item.nil?
end
def save_from_no_lang_for_page

View File

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

View File

@ -3,13 +3,6 @@ module DefaultWidgetHelper
I18n.t("#{@page_part.module_app.key}.default_widget.#{field}")
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)
method_ary = @page_part.module_app.widget_fields_link_method
field = field.to_sym
@ -84,13 +77,4 @@ module DefaultWidgetHelper
content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class])
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

View File

@ -2,24 +2,16 @@ class BackupServer
@queue = :high
def self.perform()
#CronMail.time_check("Going to backup Orbit").deliver
dbhost = Mongoid.config.database.connection.primary.join ':'
dbname = Mongoid.config.database.name
archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath
dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M")
%x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ]
Dir.foreach('tmp') do |item|
date_str = item.to_s.gsub("#{dbname}-",'')
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}]
%x[rm #{archive_db_list_path}]
%x[ls #{Rails.root}/tmp/#{dbname}* | du -h --max-depth=1 --block-size=1M |sort -h >> #{archive_db_list_path}]
OrbitLogger.info "DB backup done Path:#{dbdirectory}"
end
end

View File

@ -1,21 +1,36 @@
class DashboardCounter < Resque::Plugins::RestrictionJob
extend OrbitApp::Module::VisitorCounterEval
@queue = :high
def self.perform(*args)
site = Site.first
obj = new(*args)
site.visitor_counters[:total] = display_visitors
site.visitor_counters[:today] = display_visitors_today
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.dashboard_counter[:visitors_this_week] = obj.display_visitors_this_week
site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
site.save
OrbitLogger.info "DashboardCounter done #{site.visitor_counters.to_s}"
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
end
#Notice this is mainly used at user dashbroad. however the code there is currentlly using realtime evaluation.
#and the site model will need a field call dashboard_counter to complete this job.
def display_visitors(options={})
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

View File

@ -1,51 +1,7 @@
class DelayedImpressionist
def self.before_filter(*args)
return
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
class DelayedImpressionist
@queue = :low
def self.perform(object)
impressionist(object)
true
end
end

View File

@ -1,42 +0,0 @@
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()
Tag.all.each do |tag|
tag.update_attribute(:cloud_view_count, tag.get_impressionist)
tag.update_attribute(:cloud_view_count, tag.impressionist_count(:created_at.gte => 14.days.ago, :created_at.lte => Time.now))
end
OrbitLogger.info "UpdateTagCloud Done"
end

View File

@ -1,81 +0,0 @@
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,5 +4,8 @@ class CssDefault < Stylesheet
# belongs_to :desktop_widget
belongs_to :css, polymorphic: true
def content
self.file.read.force_encoding("UTF-8") rescue ''
end
end

View File

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

View File

@ -0,0 +1,20 @@
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

@ -1,9 +1,63 @@
class DesktopTheme
include Mongoid::Document
include Mongoid::Timestamps
field :name
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
field :name
field :author
# def parse_css_for_images
# self.css_default.parse_urls
# end
end

View File

@ -5,9 +5,12 @@ class DesktopWidget
field :name
field :author
field :shape
field :fullsize, :type => Boolean
field :shape, default: "w1 h1"
field :fullsize, :type => Boolean, default: false
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 :widget_layout, :autosave => true, :dependent => :destroy

View File

@ -0,0 +1,9 @@
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
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: "dailyenglish", position: 6, shape: "w1 h1", title: "Daily English Word")
# 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")
widgets = self.section.desktop.desktop_widgets.collect{|widget| widget.id}
for i in 0..3
self.tiles.build(data_category: "widget", position: i+1,desktop_widget_id: widgets[i])
widgets.each_with_index do |w,i|
self.tiles.build(data_category: "widget", position: i+1,desktop_widget_id: w)
end
end
end

View File

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

View File

@ -1,70 +0,0 @@
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

@ -1,13 +0,0 @@
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

@ -1,14 +0,0 @@
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
temp_tags = {}
self.tags.each{ |tag|
temp_tags.merge!({tag => tag.cloud_view_count})
temp_tags.merge!({tag => Tag.get_impressionist(tag)})
}
if !temp_tags.blank?
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 ParserFrontEnd
is_impressionable #:counter_cache => { :column_name => :view_count }
is_impressionable :counter_cache => { :column_name => :view_count }
field :content, localize: true
field :app_frontend_url

View File

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

View File

@ -18,7 +18,6 @@ class Site
field :title_always_on, :type => Boolean, :default => false
field :dashbroad_allow_visitor, :type => Boolean, :default => false
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 :system_package_info, :type => Hash,:default=>{}
@ -29,11 +28,10 @@ class Site
mount_uploader :default_image, ImageUploader
field :search,:type => Hash
field :resque_namespace,:type => String, :default=>APP_CONFIG['orbit']
field :title, localize: true
field :footer, 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

View File

@ -8,7 +8,7 @@ class Tag
include Mongoid::Timestamps
include Impressionist::Impressionable
is_impressionable #:counter_cache => { :column_name => :view_count }
is_impressionable :counter_cache => { :column_name => :view_count }
field :name, localize: true
field :view_count, :type => Integer, :default => 0
@ -17,6 +17,30 @@ class Tag
belongs_to :module_tag, polymorphic: true
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
def self.get_impressionist(item_tag = self)

View File

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

View File

@ -8,5 +8,6 @@
</table>
<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' %>
</div>

View File

@ -1,3 +0,0 @@
<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

@ -1,11 +0,0 @@
<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

@ -1,29 +0,0 @@
<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

@ -1,6 +0,0 @@
<%= 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

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

View File

@ -1,28 +0,0 @@
<% 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

@ -1,4 +0,0 @@
$("#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

@ -1,3 +0,0 @@
<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

@ -1,11 +0,0 @@
<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 %>

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