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
harrybomrah 1e73c64ea9 new themes added to desktop plus theme uploader created 2013-07-25 17:18:24 +08:00
harrybomrah 0b1679871f desktop final fix 2013-06-24 19:23:39 +08:00
harrybomrah 3bc924926e mongoid yml fix 2013-06-24 19:20:52 +08:00
harrybomrah 38f9f82e53 some changes again 2013-06-24 19:19:58 +08:00
harrybomrah 7f36be4c5b some changes 2013-06-24 19:17:24 +08:00
harrybomrah 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
harrybomrah 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
harrybomrah 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
harrybomrah 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
harrybomrah 3f44804717 search fixed again according to devin requirements 2013-06-18 15:22:22 +08:00
harrybomrah 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
harrybomrah 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
harrybomrah 4a6313424b duplicate error fixed and css inside widgets fixed, duplicate location fixed 2013-06-18 15:19:09 +08:00
harrybomrah d752af8549 duplicate error fixed and css inside widgets fixed, duplicate location fixed 2013-06-18 15:17:07 +08:00
harrybomrah 209b532129 devin branch merge plus minor fixes 2013-06-18 15:16:56 +08:00
harrybomrah 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
685 changed files with 6290 additions and 53272 deletions

No files matched your search

+1 -5
View File
@@ -4,8 +4,6 @@
.rvmrc
Gemfile.lock
Procfile
log/*
db/*.sqlite3
log/*.log
@@ -16,9 +14,7 @@ public/uploads/**/*
solr/data
tmp/**/*
uploads/**/*
config/*.god
log/*.gz
tmp/restart.txt
*.swp
*.pid
*.lck
+4 -8
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'
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 12 KiB

+3 -2
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
+7 -5
View File
@@ -1,11 +1,13 @@
/**
* Isotope v1.5.11
* Isotope v1.5.25
* An exquisite jQuery plugin for magical layouts
* http://isotope.metafizzy.co
*
* Commercial use requires one-time license fee
* http://metafizzy.co/#licenses
* Commercial use requires one-time purchase of a commercial license
* http://isotope.metafizzy.co/docs/license.html
*
* Copyright 2012 David DeSandro / Metafizzy
* Non-commercial use is licensed under the MIT License
*
* Copyright 2013 Metafizzy
*/
(function(a,b,c){var d=a.document,e=a.Modernizr,f=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},g="Moz Webkit O Ms".split(" "),h=function(a){var b=d.documentElement.style,c;if(typeof b[a]=="string")return a;a=f(a);for(var e=0,h=g.length;e<h;e++){c=g[e]+a;if(typeof b[c]=="string")return c}},i=h("transform"),j=h("transitionProperty"),k={csstransforms:function(){return!!i},csstransforms3d:function(){var a=!!h("perspective");if(a){var c=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),d="@media ("+c.join("transform-3d),(")+"modernizr)",e=b("<style>"+d+"{#modernizr{height:3px}}"+"</style>").appendTo("head"),f=b('<div id="modernizr" />').appendTo("html");a=f.height()===3,f.remove(),e.remove()}return a},csstransitions:function(){return!!j}},l;if(e)for(l in k)e.hasOwnProperty(l)||e.addTest(l,k[l]);else{e=a.Modernizr={_version:"1.6ish: miniModernizr for Isotope"};var m=" ",n;for(l in k)n=k[l](),e[l]=n,m+=" "+(n?"":"no-")+l;b("html").addClass(m)}if(e.csstransforms){var o=e.csstransforms3d?{translate:function(a){return"translate3d("+a[0]+"px, "+a[1]+"px, 0) "},scale:function(a){return"scale3d("+a+", "+a+", 1) "}}:{translate:function(a){return"translate("+a[0]+"px, "+a[1]+"px) "},scale:function(a){return"scale("+a+") "}},p=function(a,c,d){var e=b.data(a,"isoTransform")||{},f={},g,h={},j;f[c]=d,b.extend(e,f);for(g in e)j=e[g],h[g]=o[g](j);var k=h.translate||"",l=h.scale||"",m=k+l;b.data(a,"isoTransform",e),a.style[i]=m};b.cssNumber.scale=!0,b.cssHooks.scale={set:function(a,b){p(a,"scale",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.scale?d.scale:1}},b.fx.step.scale=function(a){b.cssHooks.scale.set(a.elem,a.now+a.unit)},b.cssNumber.translate=!0,b.cssHooks.translate={set:function(a,b){p(a,"translate",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.translate?d.translate:[0,0]}}}var q,r;e.csstransitions&&(q={WebkitTransitionProperty:"webkitTransitionEnd",MozTransitionProperty:"transitionend",OTransitionProperty:"oTransitionEnd",transitionProperty:"transitionEnd"}[j],r=h("transitionDuration"));var s=b.event,t;s.special.smartresize={setup:function(){b(this).bind("resize",s.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",s.special.smartresize.handler)},handler:function(a,b){var c=this,d=arguments;a.type="smartresize",t&&clearTimeout(t),t=setTimeout(function(){jQuery.event.handle.apply(c,d)},b==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Isotope=function(a,c,d){this.element=b(c),this._create(a),this._init(d)};var u=["overflow","position","width","height"],v=b(a);b.Isotope.settings={resizable:!0,layoutMode:"masonry",containerClass:"isotope",itemClass:"isotope-item",hiddenClass:"isotope-hidden",hiddenStyle:{opacity:0,scale:.001},visibleStyle:{opacity:1,scale:1},animationEngine:"best-available",animationOptions:{queue:!1,duration:800},sortBy:"original-order",sortAscending:!0,resizesContainer:!0,transformsEnabled:!b.browser.opera,itemPositionDataEnabled:!1},b.Isotope.prototype={_create:function(a){this.options=b.extend({},b.Isotope.settings,a),this.styleQueue=[],this.elemCount=0;var c=this.element[0].style;this.originalStyle={};for(var d=0,e=u.length;d<e;d++){var f=u[d];this.originalStyle[f]=c[f]||""}this.element.css({overflow:"hidden",position:"relative"}),this._updateAnimationEngine(),this._updateUsingTransforms();var g={"original-order":function(a,b){b.elemCount++;return b.elemCount},random:function(){return Math.random()}};this.options.getSortData=b.extend(this.options.getSortData,g),this.reloadItems(),this.offset={left:parseInt(this.element.css("padding-left"),10),top:parseInt(this.element.css("padding-top"),10)};var h=this;setTimeout(function(){h.element.addClass(h.options.containerClass)},0),this.options.resizable&&v.bind("smartresize.isotope",function(){h.resize()}),this.element.delegate("."+this.options.hiddenClass,"click",function(){return!1})},_getAtoms:function(a){var b=this.options.itemSelector,c=b?a.filter(b).add(a.find(b)):a,d={position:"absolute"};this.usingTransforms&&(d.left=0,d.top=0),c.css(d).addClass(this.options.itemClass),this.updateSortData(c,!0);return c},_init:function(a){this.$filteredAtoms=this._filter(this.$allAtoms),this._sort(),this.reLayout(a)},option:function(a){if(b.isPlainObject(a)){this.options=b.extend(!0,this.options,a);var c;for(var d in a)c="_update"+f(d),this[c]&&this[c]()}},_updateAnimationEngine:function(){var a=this.options.animationEngine.toLowerCase().replace(/[ _\-]/g,""),b;switch(a){case"css":case"none":b=!1;break;case"jquery":b=!0;break;default:b=!e.csstransitions}this.isUsingJQueryAnimation=b,this._updateUsingTransforms()},_updateTransformsEnabled:function(){this._updateUsingTransforms()},_updateUsingTransforms:function(){var a=this.usingTransforms=this.options.transformsEnabled&&e.csstransforms&&e.csstransitions&&!this.isUsingJQueryAnimation;a||(delete this.options.hiddenStyle.scale,delete this.options.visibleStyle.scale),thiLine truncated
(function(a,b,c){"use strict";var d=a.document,e=a.Modernizr,f=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},g="Moz Webkit O Ms".split(" "),h=function(a){var b=d.documentElement.style,c;if(typeof b[a]=="string")return a;a=f(a);for(var e=0,h=g.length;e<h;e++){c=g[e]+a;if(typeof b[c]=="string")return c}},i=h("transform"),j=h("transitionProperty"),k={csstransforms:function(){return!!i},csstransforms3d:function(){var a=!!h("perspective");if(a){var c=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),d="@media ("+c.join("transform-3d),(")+"modernizr)",e=b("<style>"+d+"{#modernizr{height:3px}}"+"</style>").appendTo("head"),f=b('<div id="modernizr" />').appendTo("html");a=f.height()===3,f.remove(),e.remove()}return a},csstransitions:function(){return!!j}},l;if(e)for(l in k)e.hasOwnProperty(l)||e.addTest(l,k[l]);else{e=a.Modernizr={_version:"1.6ish: miniModernizr for Isotope"};var m=" ",n;for(l in k)n=k[l](),e[l]=n,m+=" "+(n?"":"no-")+l;b("html").addClass(m)}if(e.csstransforms){var o=e.csstransforms3d?{translate:function(a){return"translate3d("+a[0]+"px, "+a[1]+"px, 0) "},scale:function(a){return"scale3d("+a+", "+a+", 1) "}}:{translate:function(a){return"translate("+a[0]+"px, "+a[1]+"px) "},scale:function(a){return"scale("+a+") "}},p=function(a,c,d){var e=b.data(a,"isoTransform")||{},f={},g,h={},j;f[c]=d,b.extend(e,f);for(g in e)j=e[g],h[g]=o[g](j);var k=h.translate||"",l=h.scale||"",m=k+l;b.data(a,"isoTransform",e),a.style[i]=m};b.cssNumber.scale=!0,b.cssHooks.scale={set:function(a,b){p(a,"scale",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.scale?d.scale:1}},b.fx.step.scale=function(a){b.cssHooks.scale.set(a.elem,a.now+a.unit)},b.cssNumber.translate=!0,b.cssHooks.translate={set:function(a,b){p(a,"translate",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.translate?d.translate:[0,0]}}}var q,r;e.csstransitions&&(q={WebkitTransitionProperty:"webkitTransitionEnd",MozTransitionProperty:"transitionend",OTransitionProperty:"oTransitionEnd otransitionend",transitionProperty:"transitionend"}[j],r=h("transitionDuration"));var s=b.event,t=b.event.handle?"handle":"dispatch",u;s.special.smartresize={setup:function(){b(this).bind("resize",s.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",s.special.smartresize.handler)},handler:function(a,b){var c=this,d=arguments;a.type="smartresize",u&&clearTimeout(u),u=setTimeout(function(){s[t].apply(c,d)},b==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Isotope=function(a,c,d){this.element=b(c),this._create(a),this._init(d)};var v=["width","height"],w=b(a);b.Isotope.settings={resizable:!0,layoutMode:"masonry",containerClass:"isotope",itemClass:"isotope-item",hiddenClass:"isotope-hidden",hiddenStyle:{opacity:0,scale:.001},visibleStyle:{opacity:1,scale:1},containerStyle:{position:"relative",overflow:"hidden"},animationEngine:"best-available",animationOptions:{queue:!1,duration:800},sortBy:"original-order",sortAscending:!0,resizesContainer:!0,transformsEnabled:!0,itemPositionDataEnabled:!1},b.Isotope.prototype={_create:function(a){this.options=b.extend({},b.Isotope.settings,a),this.styleQueue=[],this.elemCount=0;var c=this.element[0].style;this.originalStyle={};var d=v.slice(0);for(var e in this.options.containerStyle)d.push(e);for(var f=0,g=d.length;f<g;f++)e=d[f],this.originalStyle[e]=c[e]||"";this.element.css(this.options.containerStyle),this._updateAnimationEngine(),this._updateUsingTransforms();var h={"original-order":function(a,b){return b.elemCount++,b.elemCount},random:function(){return Math.random()}};this.options.getSortData=b.extend(this.options.getSortData,h),this.reloadItems(),this.offset={left:parseInt(this.element.css("padding-left")||0,10),top:parseInt(this.element.css("padding-top")||0,10)};var i=this;setTimeout(function(){i.element.addClass(i.options.containerClass)},0),this.options.resizable&&w.bind("smartresize.isotope",function(){i.resize()}),this.element.delegate("."+this.options.hiddenClass,"click",function(){return!1})},_getAtoms:function(a){var b=this.options.itemSelector,c=b?a.filter(b).add(a.find(b)):a,d={position:"absolute"};return c=c.filter(function(a,b){return b.nodeType===1}),this.usingTransforms&&(d.left=0,d.top=0),c.css(d).addClass(this.options.itemClass),this.updateSortData(c,!0),c},_init:function(a){this.$filteredAtoms=this._filter(this.$allAtoms),this._sort(),this.reLayout(a)},option:function(a){if(b.isPlainObject(a)){this.options=b.extend(!0,this.options,a);var c;for(var d in a)c="_update"+f(d),this[c]&&this[c]()}},_updateAnimationEngine:function(){var a=this.options.animationEngine.toLowerCase().replace(/[ _\-]/g,""),b;switch(a){case"css":case"none":b=!1;break;case"jquery":b=!0;break;default:b=!e.csstransitions}this.isUsingJQueryAnimation=b,this._updateUsingTransforms()},_updateTransformsEnabled:function(){this._updateUsingTransforms()},_updateUsingTransforms:function(){var a=this.usingTransforms=this.oLine truncated
@@ -1,23 +0,0 @@
!function ($) {
$.fn.cardCheck = function(param) {
_defaultSettings = {
check: '',
};
_set = $.extend(_defaultSettings, param);
$card = $(this);
$check = _set.check;
$check.each(function(){
if($(this).attr('checked')) {
$(this).parent($card).addClass("active");
}
});
$card.on('click', function() {
$(this).toggleClass('active')
});
}
}(window.jQuery);
$(function(){
$('.checkbox-card > li').cardCheck({
check: $('.checkbox-card > li input[type="checkbox"]'),
});
});
@@ -1,752 +0,0 @@
/*! nanoScrollerJS - v0.7.2
* http://jamesflorentino.github.com/nanoScrollerJS/
* Copyright (c) 2013 James Florentino; Licensed MIT */
(function($, window, document) {
"use strict";
var BROWSER_IS_IE7, BROWSER_SCROLLBAR_WIDTH, DOMSCROLL, DOWN, DRAG, KEYDOWN, KEYUP, MOUSEDOWN, MOUSEMOVE, MOUSEUP, MOUSEWHEEL, NanoScroll, PANEDOWN, RESIZE, SCROLL, SCROLLBAR, TOUCHMOVE, UP, WHEEL, defaults, getBrowserScrollbarWidth;
defaults = {
/**
a classname for the pane element.
@property paneClass
@type String
@default 'pane'
*/
paneClass: 'pane',
/**
a classname for the slider element.
@property sliderClass
@type String
@default 'slider'
*/
sliderClass: 'slider',
/**
a classname for the content element.
@property contentClass
@type String
@default 'content'
*/
contentClass: 'content',
/**
a setting to enable native scrolling in iOS devices.
@property iOSNativeScrolling
@type Boolean
@default false
*/
iOSNativeScrolling: false,
/**
a setting to prevent the rest of the page being
scrolled when user scrolls the `.content` element.
@property preventPageScrolling
@type Boolean
@default false
*/
preventPageScrolling: false,
/**
a setting to disable binding to the resize event.
@property disableResize
@type Boolean
@default false
*/
disableResize: false,
/**
a setting to make the scrollbar always visible.
@property alwaysVisible
@type Boolean
@default false
*/
alwaysVisible: false,
/**
a default timeout for the `flash()` method.
@property flashDelay
@type Number
@default 1500
*/
flashDelay: 1500,
/**
a minimum height for the `.slider` element.
@property sliderMinHeight
@type Number
@default 20
*/
sliderMinHeight: 20,
/**
a maximum height for the `.slider` element.
@property sliderMaxHeight
@type Number
@default null
*/
sliderMaxHeight: null
};
/**
@property SCROLLBAR
@type String
@static
@final
@private
*/
SCROLLBAR = 'scrollbar';
/**
@property SCROLL
@type String
@static
@final
@private
*/
SCROLL = 'scroll';
/**
@property MOUSEDOWN
@type String
@final
@private
*/
MOUSEDOWN = 'mousedown';
/**
@property MOUSEMOVE
@type String
@static
@final
@private
*/
MOUSEMOVE = 'mousemove';
/**
@property MOUSEWHEEL
@type String
@final
@private
*/
MOUSEWHEEL = 'mousewheel';
/**
@property MOUSEUP
@type String
@static
@final
@private
*/
MOUSEUP = 'mouseup';
/**
@property RESIZE
@type String
@final
@private
*/
RESIZE = 'resize';
/**
@property DRAG
@type String
@static
@final
@private
*/
DRAG = 'drag';
/**
@property UP
@type String
@static
@final
@private
*/
UP = 'up';
/**
@property PANEDOWN
@type String
@static
@final
@private
*/
PANEDOWN = 'panedown';
/**
@property DOMSCROLL
@type String
@static
@final
@private
*/
DOMSCROLL = 'DOMMouseScroll';
/**
@property DOWN
@type String
@static
@final
@private
*/
DOWN = 'down';
/**
@property WHEEL
@type String
@static
@final
@private
*/
WHEEL = 'wheel';
/**
@property KEYDOWN
@type String
@static
@final
@private
*/
KEYDOWN = 'keydown';
/**
@property KEYUP
@type String
@static
@final
@private
*/
KEYUP = 'keyup';
/**
@property TOUCHMOVE
@type String
@static
@final
@private
*/
TOUCHMOVE = 'touchmove';
/**
@property BROWSER_IS_IE7
@type Boolean
@static
@final
@private
*/
BROWSER_IS_IE7 = window.navigator.appName === 'Microsoft Internet Explorer' && /msie 7./i.test(window.navigator.appVersion) && window.ActiveXObject;
/**
@property BROWSER_SCROLLBAR_WIDTH
@type Number
@static
@default null
@private
*/
BROWSER_SCROLLBAR_WIDTH = null;
/**
Returns browser's native scrollbar width
@method getBrowserScrollbarWidth
@return {Number} the scrollbar width in pixels
@static
@private
*/
getBrowserScrollbarWidth = function() {
var outer, outerStyle, scrollbarWidth;
outer = document.createElement('div');
outerStyle = outer.style;
outerStyle.position = 'absolute';
outerStyle.width = '100px';
outerStyle.height = '100px';
outerStyle.overflow = SCROLL;
outerStyle.top = '-9999px';
document.body.appendChild(outer);
scrollbarWidth = outer.offsetWidth - outer.clientWidth;
document.body.removeChild(outer);
return scrollbarWidth;
};
/**
@class NanoScroll
@param element {HTMLElement|Node} the main element
@param options {Object} nanoScroller's options
@constructor
*/
NanoScroll = (function() {
function NanoScroll(el, options) {
this.el = el;
this.options = options;
BROWSER_SCROLLBAR_WIDTH || (BROWSER_SCROLLBAR_WIDTH = getBrowserScrollbarWidth());
this.$el = $(this.el);
this.doc = $(document);
this.win = $(window);
this.$content = this.$el.children("." + options.contentClass);
this.$content.attr('tabindex', 0);
this.content = this.$content[0];
if (this.options.iOSNativeScrolling && (this.el.style.WebkitOverflowScrolling != null)) {
this.nativeScrolling();
} else {
this.generate();
}
this.createEvents();
this.addEvents();
this.reset();
}
/**
Prevents the rest of the page being scrolled
when user scrolls the `.content` element.
@method preventScrolling
@param event {Event}
@param direction {String} Scroll direction (up or down)
@private
*/
NanoScroll.prototype.preventScrolling = function(e, direction) {
if (!this.isActive) {
return;
}
if (e.type === DOMSCROLL) {
if (direction === DOWN && e.originalEvent.detail > 0 || direction === UP && e.originalEvent.detail < 0) {
e.preventDefault();
}
} else if (e.type === MOUSEWHEEL) {
if (!e.originalEvent || !e.originalEvent.wheelDelta) {
return;
}
if (direction === DOWN && e.originalEvent.wheelDelta < 0 || direction === UP && e.originalEvent.wheelDelta > 0) {
e.preventDefault();
}
}
};
/**
Enable iOS native scrolling
*/
NanoScroll.prototype.nativeScrolling = function() {
this.$content.css({
WebkitOverflowScrolling: 'touch'
});
this.iOSNativeScrolling = true;
this.isActive = true;
};
/**
Updates those nanoScroller properties that
are related to current scrollbar position.
@method updateScrollValues
@private
*/
NanoScroll.prototype.updateScrollValues = function() {
var content;
content = this.content;
this.maxScrollTop = content.scrollHeight - content.clientHeight;
this.contentScrollTop = content.scrollTop;
if (!this.iOSNativeScrolling) {
this.maxSliderTop = this.paneHeight - this.sliderHeight;
this.sliderTop = this.contentScrollTop * this.maxSliderTop / this.maxScrollTop;
}
};
/**
Creates event related methods
@method createEvents
@private
*/
NanoScroll.prototype.createEvents = function() {
var _this = this;
this.events = {
down: function(e) {
_this.isBeingDragged = true;
_this.offsetY = e.pageY - _this.slider.offset().top;
_this.pane.addClass('active');
_this.doc.bind(MOUSEMOVE, _this.events[DRAG]).bind(MOUSEUP, _this.events[UP]);
return false;
},
drag: function(e) {
_this.sliderY = e.pageY - _this.$el.offset().top - _this.offsetY;
_this.scroll();
_this.updateScrollValues();
if (_this.contentScrollTop >= _this.maxScrollTop) {
_this.$el.trigger('scrollend');
} else if (_this.contentScrollTop === 0) {
_this.$el.trigger('scrolltop');
}
return false;
},
up: function(e) {
_this.isBeingDragged = false;
_this.pane.removeClass('active');
_this.doc.unbind(MOUSEMOVE, _this.events[DRAG]).unbind(MOUSEUP, _this.events[UP]);
return false;
},
resize: function(e) {
_this.reset();
},
panedown: function(e) {
_this.sliderY = (e.offsetY || e.originalEvent.layerY) - (_this.sliderHeight * 0.5);
_this.scroll();
_this.events.down(e);
return false;
},
scroll: function(e) {
if (_this.isBeingDragged) {
return;
}
_this.updateScrollValues();
if (!_this.iOSNativeScrolling) {
_this.sliderY = _this.sliderTop;
_this.slider.css({
top: _this.sliderTop
});
}
if (e == null) {
return;
}
if (_this.contentScrollTop >= _this.maxScrollTop) {
if (_this.options.preventPageScrolling) {
_this.preventScrolling(e, DOWN);
}
_this.$el.trigger('scrollend');
} else if (_this.contentScrollTop === 0) {
if (_this.options.preventPageScrolling) {
_this.preventScrolling(e, UP);
}
_this.$el.trigger('scrolltop');
}
},
wheel: function(e) {
if (e == null) {
return;
}
_this.sliderY += -e.wheelDeltaY || -e.delta;
_this.scroll();
return false;
}
};
};
/**
Adds event listeners with jQuery.
@method addEvents
@private
*/
NanoScroll.prototype.addEvents = function() {
var events;
this.removeEvents();
events = this.events;
if (!this.options.disableResize) {
this.win.bind(RESIZE, events[RESIZE]);
}
if (!this.iOSNativeScrolling) {
this.slider.bind(MOUSEDOWN, events[DOWN]);
this.pane.bind(MOUSEDOWN, events[PANEDOWN]).bind("" + MOUSEWHEEL + " " + DOMSCROLL, events[WHEEL]);
}
this.$content.bind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
};
/**
Removes event listeners with jQuery.
@method removeEvents
@private
*/
NanoScroll.prototype.removeEvents = function() {
var events;
events = this.events;
this.win.unbind(RESIZE, events[RESIZE]);
if (!this.iOSNativeScrolling) {
this.slider.unbind();
this.pane.unbind();
}
this.$content.unbind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
};
/**
Generates nanoScroller's scrollbar and elements for it.
@method generate
@chainable
@private
*/
NanoScroll.prototype.generate = function() {
var contentClass, cssRule, options, paneClass, sliderClass;
options = this.options;
paneClass = options.paneClass, sliderClass = options.sliderClass, contentClass = options.contentClass;
if (!this.$el.find("" + paneClass).length && !this.$el.find("" + sliderClass).length) {
this.$el.append("<div class=\"" + paneClass + "\"><div class=\"" + sliderClass + "\" /></div>");
}
this.pane = this.$el.children("." + paneClass);
this.slider = this.pane.find("." + sliderClass);
if (BROWSER_SCROLLBAR_WIDTH) {
cssRule = this.$el.css('direction') === 'rtl' ? {
left: -BROWSER_SCROLLBAR_WIDTH
} : {
right: -BROWSER_SCROLLBAR_WIDTH
};
this.$el.addClass('has-scrollbar');
}
if (cssRule != null) {
this.$content.css(cssRule);
}
return this;
};
/**
@method restore
@private
*/
NanoScroll.prototype.restore = function() {
this.stopped = false;
this.pane.show();
this.addEvents();
};
/**
Resets nanoScroller's scrollbar.
@method reset
@chainable
@example
$(".nano").nanoScroller();
*/
NanoScroll.prototype.reset = function() {
var content, contentHeight, contentStyle, contentStyleOverflowY, paneBottom, paneHeight, paneOuterHeight, paneTop, sliderHeight;
if (this.iOSNativeScrolling) {
this.contentHeight = this.content.scrollHeight;
return;
}
if (!this.$el.find("." + this.options.paneClass).length) {
this.generate().stop();
}
if (this.stopped) {
this.restore();
}
content = this.content;
contentStyle = content.style;
contentStyleOverflowY = contentStyle.overflowY;
if (BROWSER_IS_IE7) {
this.$content.css({
height: this.$content.height()
});
}
contentHeight = content.scrollHeight + BROWSER_SCROLLBAR_WIDTH;
paneHeight = this.pane.outerHeight();
paneTop = parseInt(this.pane.css('top'), 10);
paneBottom = parseInt(this.pane.css('bottom'), 10);
paneOuterHeight = paneHeight + paneTop + paneBottom;
sliderHeight = Math.round(paneOuterHeight / contentHeight * paneOuterHeight);
if (sliderHeight < this.options.sliderMinHeight) {
sliderHeight = this.options.sliderMinHeight;
} else if ((this.options.sliderMaxHeight != null) && sliderHeight > this.options.sliderMaxHeight) {
sliderHeight = this.options.sliderMaxHeight;
}
if (contentStyleOverflowY === SCROLL && contentStyle.overflowX !== SCROLL) {
sliderHeight += BROWSER_SCROLLBAR_WIDTH;
}
this.maxSliderTop = paneOuterHeight - sliderHeight;
this.contentHeight = contentHeight;
this.paneHeight = paneHeight;
this.paneOuterHeight = paneOuterHeight;
this.sliderHeight = sliderHeight;
this.slider.height(sliderHeight);
this.events.scroll();
this.pane.show();
this.isActive = true;
if ((content.scrollHeight === content.clientHeight) || (this.pane.outerHeight(true) >= content.scrollHeight && contentStyleOverflowY !== SCROLL)) {
this.pane.hide();
this.isActive = false;
} else if (this.el.clientHeight === content.scrollHeight && contentStyleOverflowY === SCROLL) {
this.slider.hide();
} else {
this.slider.show();
}
this.pane.css({
opacity: (this.options.alwaysVisible ? 1 : ''),
visibility: (this.options.alwaysVisible ? 'visible' : '')
});
return this;
};
/**
@method scroll
@private
@example
$(".nano").nanoScroller({ scroll: 'top' });
*/
NanoScroll.prototype.scroll = function() {
if (!this.isActive) {
return;
}
this.sliderY = Math.max(0, this.sliderY);
this.sliderY = Math.min(this.maxSliderTop, this.sliderY);
this.$content.scrollTop((this.paneHeight - this.contentHeight + BROWSER_SCROLLBAR_WIDTH) * this.sliderY / this.maxSliderTop * -1);
if (!this.iOSNativeScrolling) {
this.slider.css({
top: this.sliderY
});
}
return this;
};
/**
Scroll at the bottom with an offset value
@method scrollBottom
@param offsetY {Number}
@chainable
@example
$(".nano").nanoScroller({ scrollBottom: value });
*/
NanoScroll.prototype.scrollBottom = function(offsetY) {
if (!this.isActive) {
return;
}
this.reset();
this.$content.scrollTop(this.contentHeight - this.$content.height() - offsetY).trigger(MOUSEWHEEL);
return this;
};
/**
Scroll at the top with an offset value
@method scrollTop
@param offsetY {Number}
@chainable
@example
$(".nano").nanoScroller({ scrollTop: value });
*/
NanoScroll.prototype.scrollTop = function(offsetY) {
if (!this.isActive) {
return;
}
this.reset();
this.$content.scrollTop(+offsetY).trigger(MOUSEWHEEL);
return this;
};
/**
Scroll to an element
@method scrollTo
@param node {Node} A node to scroll to.
@chainable
@example
$(".nano").nanoScroller({ scrollTo: $('#a_node') });
*/
NanoScroll.prototype.scrollTo = function(node) {
if (!this.isActive) {
return;
}
this.reset();
this.scrollTop($(node).get(0).offsetTop);
return this;
};
/**
To stop the operation.
This option will tell the plugin to disable all event bindings and hide the gadget scrollbar from the UI.
@method stop
@chainable
@example
$(".nano").nanoScroller({ stop: true });
*/
NanoScroll.prototype.stop = function() {
this.stopped = true;
this.removeEvents();
this.pane.hide();
return this;
};
/**
To flash the scrollbar gadget for an amount of time defined in plugin settings (defaults to 1,5s).
Useful if you want to show the user (e.g. on pageload) that there is more content waiting for him.
@method flash
@chainable
@example
$(".nano").nanoScroller({ flash: true });
*/
NanoScroll.prototype.flash = function() {
var _this = this;
if (!this.isActive) {
return;
}
this.reset();
this.pane.addClass('flashed');
setTimeout(function() {
_this.pane.removeClass('flashed');
}, this.options.flashDelay);
return this;
};
return NanoScroll;
})();
$.fn.nanoScroller = function(settings) {
return this.each(function() {
var options, scrollbar;
if (!(scrollbar = this.nanoscroller)) {
options = $.extend({}, defaults, settings);
this.nanoscroller = scrollbar = new NanoScroll(this, options);
}
if (settings && typeof settings === "object") {
$.extend(scrollbar.options, settings);
if (settings.scrollBottom) {
return scrollbar.scrollBottom(settings.scrollBottom);
}
if (settings.scrollTop) {
return scrollbar.scrollTop(settings.scrollTop);
}
if (settings.scrollTo) {
return scrollbar.scrollTo(settings.scrollTo);
}
if (settings.scroll === 'bottom') {
return scrollbar.scrollBottom(0);
}
if (settings.scroll === 'top') {
return scrollbar.scrollTop(0);
}
if (settings.scroll && settings.scroll instanceof $) {
return scrollbar.scrollTo(settings.scroll);
}
if (settings.stop) {
return scrollbar.stop();
}
if (settings.flash) {
return scrollbar.flash();
}
}
return scrollbar.reset();
});
};
})(jQuery, window, document);
@@ -1,25 +0,0 @@
$(document).ready(function() {
$(".select_user_modal").on('click', function(){
var ids = [];
var users = $(this).siblings('#selected_users').children('span.selected_user');
users.each(function(i) {
ids.push(users.eq(i).attr('user_id'));
});
$("#main-wrap").after("<span id='select_user'></span>");
$.ajax({
type: 'GET',
url: $(this).attr("rel"),
dataType: 'script',
data: {field: $(this).attr("field"), ids: ids},
success: function (msg) {
$("#select_user_modal").modal('show'); },
error: function(){
alert("ERROR");
}
});
return false;
});
$(document).on('click', ".remove_user", function(){
$(this).parent().remove();
});
});
File diff suppressed because it is too large. Load diff
+85 -30
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"){
+2 -2
View File
@@ -9,7 +9,7 @@ function load_tinymce() {
// Theme options
theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,bullist,numlist,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,fullscreen,|,template",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,fullscreen",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
@@ -20,7 +20,7 @@ function load_tinymce() {
skin_variant : "silver",
font_size_style_values : "xx-small,x-small,small,medium,large,x-large,xx-large",
// Drop lists for link/image/media/template dialogs
template_external_list_url : "/tinymce/lists/template_list.js",
template_external_list_url : "js/template_list.js",
// external_link_list_url : "js/link_list.js",
// external_image_list_url : "js/image_list.js",
// media_external_list_url : "js/media_list.js"
@@ -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");
})
-1
View File
@@ -5,4 +5,3 @@
*= require_self
*= require social-share-button
*/
@@ -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;
@@ -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;
@@ -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 {
+216 -204
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;
+213 -191
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;
@@ -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; }*/
}
@@ -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; } }
@@ -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 {
-230
View File
@@ -1,230 +0,0 @@
/* Member Filter */
#select_user #select_user_modal.modal {
width: 80%;
margin-left: -40%;
}
#select_user #select_user_modal .modal-body {
max-height: 425px;
}
#select_user #select_user_modal .modal-body form {
margin-bottom: 0px;
}
#select_user #select_user_modal .modal-body form fieldset {
min-height: 360px;
}
#select_user #select_user_modal .modal-body .radio.inline,
#select_user #select_user_modal .modal-body .checkbox.inline {
display: inline-block;
padding-top: 5px;
margin-bottom: 0;
vertical-align: middle;
min-width: 100px;
margin-left: 0;
}
#select_user #select_user_modal .modal-body .form-actions {
margin: 20px 0 0;
padding: 10px 0 0;
background-color: transparent;
text-align: right;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano {
width: 160px;
min-height: 425px;
float: left;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano .pane {
right: 6px;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs {
width: 140px;
float: left;
margin-bottom: 0;
margin-right: 0;
border-right: 1px solid #ddd;
border-bottom: none;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li {
float: none;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
min-width: 74px;
margin-right: 0;
margin-bottom: 3px;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
margin-right: -1px;
-webkit-border-radius: 4px 0 0 4px;
-moz-border-radius: 4px 0 0 4px;
border-radius: 4px 0 0 4px;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a:hover {
border-color: #eeeeee #dddddd #eeeeee #eeeeee;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a,
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a:hover {
border-color: #ddd transparent #ddd #ddd;
*border-right-color: #ffffff;
}
#select_user #select_user_modal .member-filter-options {
float: left;
display: inline-block;
width: 175px;
min-height: 425px;
margin-right: 10px;
padding: 0 10px 0 0;
}
#select_user #select_user_modal .member-filter-options select {
width: 165px;
}
#select_user #select_user_modal .member-filter-options .btn {
display: block;
}
#select_user #select_user_modal .member-filter-result {
padding-left: 15px;
min-height: 360px;
width: auto;
}
/* Check Box Card */
.checkbox-card {
margin: 0;
}
.checkbox-card li {
position: relative;
list-style: none;
color: #FFFFFF;
width: 180px;
height: 40px;
margin: 0 10px 10px 0;
float: left;
display: inline-block;
background-color: #cccccc;
overflow: hidden;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear;
-o-transition: all .2s linear;
transition: all .2s linear;
}
.checkbox-card li.mark {
width: 0;
height: 0;
padding: 0;
margin: 0;
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
opacity: 0;
visibility: hidden;
}
.checkbox-card li:hover {
background-color: #0088cc;
}
.checkbox-card li:after {
content: "";
display: block;
clear: both;
height: 0;
visibility: hidden;
}
.checkbox-card li.active:before {
-webkit-text-size-adjust : none;
font-family: FontAwesome;
font-weight: normal;
font-style: normal;
color: #FFF;
text-decoration: inherit;
content: "\f00c";
position: absolute;
right: 0px;
top: 0px;
line-height: 14px;
text-indent: 10px;
font-size: 10px;
width: 0px;
height: 0px;
border-style: solid;
border-width: 0 22px 22px 0;
border-color: transparent #51a351 transparent transparent;
}
.checkbox-card li.active label {
}
.checkbox-card li label {
margin-bottom: 0px;
overflow: hidden;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.checkbox-card li input {
opacity: 0;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
margin: 0;
z-index: 10;
}
.checkbox-card li label span {
-webkit-text-size-adjust : none;
font-size: 10px;
display: block;
width: 130px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #666666;
margin-top: -3px;
}
.checkbox-card li:hover label span,
.checkbox-card li:hover label span.user-name {
color: #FFFFFF;
}
.checkbox-card li label span.user-name {
font-size: 12px;
color: #363636;
padding: 2px 0 0;
margin-top: 0;
}
.checkbox-card li .user-pic {
float: left;
margin-right: 5px;
width: 40px;
height: 40px;
}
#selected_users .selected_user {
display: block;
margin-bottom: 5px;
}
#selected_users .selected_user .remove_user {
font-size: 15px;
}
/*
.promoter {
border-color: #CCCCCC;
border-style: solid;
border-width: 0 1px;
padding: 0 10px 5px 10px;
}
.promoter > div {
border-bottom: 1px solid #CCCCCC;
}
.promoter > div:after {
content: "";
clear: both;
display: block;
visibility: hidden;
}
.promoter > div > span {
display: block;
margin-left: 70px;
padding-bottom: 5px;
}
.promoter p {
width: 70px;
float: left;
text-align:right;
}*/
+3 -3
View File
@@ -55,9 +55,9 @@
width:100%;
}
#orbit-bar .orbit-logo .brand {
background: url(<%= asset_path 'ga-logo.png' %>) no-repeat center center;
text-indent: -9999px;
padding: 5px 20px 4px;
background:url(<%= asset_path 'orbit-bar.png' %>) no-repeat -162px -5px;
text-indent:-9999px;
padding:5px 20px 4px;
}
#orbit-bar .orbit-logo .brand:hover {
background-color:#009ddc;
+1 -3
View File
@@ -1,7 +1,5 @@
/*style*/
* {
outline: none;
}
@font-face{
font-family: 'WebSymbolsRegular';
src: url(<%= asset_path 'websymbols-regular-webfont.eot' %>);
@@ -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
@@ -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
@@ -70,30 +70,4 @@ class Admin::MemberSelectsController < OrbitBackendController
end
def select_members
selected_users = User.find(params[:ids]) rescue []
@field = params[:field]
roles = Role.all
@sorted_users = roles.inject({}) do |users, role|
users[role] = role.users.where(:email.not => /guest|rulingcom/) - selected_users
users
end
end
def set_roles
roles = Role.find(params[:role_ids]) rescue []
@field = params[:field]
@users = roles.inject([]) do |users, role|
users += role.users.where(:email.not => /guest|rulingcom/).entries
users
end
render 'admin/member_selects/update_selected_users'
end
def set_users
@users = User.find(params[:user_ids]) rescue []
@field = params[:field]
render 'admin/member_selects/update_selected_users'
end
end
+13 -15
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
@@ -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
+102 -19
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
@@ -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
@@ -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|
+31
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
@@ -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
+30 -34
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
-36
View File
@@ -1,36 +0,0 @@
class SamlLoginsController < ApplicationController
require "net/http"
require "uri"
require 'rexml/document'
include REXML
def index
if params[:wa] == "wsignoutcleanup1.0" #logout
redirect_to :root
else #login
@wresult = params[:wresult]
@wctx = params[:wctx]
@main_url = LIST[:sites][@wctx]['url']
@main_public_key = LIST[:sites][@wctx]['key']
@doc = REXML::Document.new @wresult
@main_public_key = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzKawlFWAMzA/uV/kcewd\nmtj8PcqxosmnSh7ZzJ0DumG2ieeP9oDBicqbqIEaeJVvrRzYJD2a+u8x5KKMKB8J\nHbMUpCBFlIpkDMjU/oZVMcYT9pcH51QWNvCgHG7prVykSGFz1JRvjSP6cwuZKBFd\nFFneOViETqoMIO1DbRLXsGfPvMOJY9C1xDwv1dLv0Wbj7M9N6eNz06a50bu3I4gl\nMumxWnZUabXL3G62S/Si4NM7J2jOUnkEOxJWOhcAX/iiqS9T8AHu84um2+mLQpfB\nJJFFIWCIAtU78VnIN5JSWwjFU5TsiSyCFYpGXKxUFD25cFmt3SfG0gwmrFis5Pdn\nhwIDAQAB\n-----END PUBLIC KEY-----\n"
public_key = OpenSSL::PKey::RSA.new(@main_public_key)
encrypted_data = public_key.public_encrypt(@doc.elements["//saml:AttributeValue"].text)
redirect_to "http://#{@main_url}/user_login?" + { :wresult => encrypted_data }.to_param
end
end
end
-40
View File
@@ -1,40 +0,0 @@
# encoding: utf-8
class SessionsController < Devise::SessionsController
prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
def create
@site = Site.first
private_key = OpenSSL::PKey::RSA.new(@site.private_key)
wresult = private_key.private_decrypt(request.params['wresult'])
@ids = wresult.split("@")
login_uid = @ids[0]
resource = User.first(conditions:{user_id: login_uid})
if !resource.blank?
resource_name = resource.class.to_s.downcase
sign_in(resource_name, resource)
session[:user_id_type] = "myntu"
redirect_to after_sign_in_path_for(resource)
else
flash[:error] = "很抱歉,您無此權限或帳號登入本站,請洽本站管理員<br />Sorry, you don't have the account or authority to login. Please contact the website administrator."
redirect_to :root
end
end
def destroy
@user_id_type = session[:user_id_type]
sign_out
if @user_id_type == "myntu"
redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://galogin.ntu.edu.tw"
else
redirect_to root_path
end
end
end
+19 -26
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")
@@ -303,7 +300,7 @@ module ApplicationHelper
# NTU link
def get_link(site_number)
"http://#{site_number}.#{request.domain(3)}"
"http://#{request.host}:2#{site_number}00"
end
def sortable(column, title = nil, options = {})
@@ -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
-16
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
+4 -12
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
+25 -10
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
+6 -50
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
-42
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
-7
View File
@@ -1,7 +0,0 @@
class GetAnnouncementFromRss
@queue = :high
def self.perform()
%x(ruby "#{Rails.root}/lib/rss_ntu_job.rb")
end
end
+1 -1
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
-81
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
+3
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
+1 -1
View File
@@ -2,7 +2,7 @@ class Desktop
include Mongoid::Document
include Mongoid::Timestamps
field :theme, default: "4f8d3f533b67fcd05f08635a"
field :theme
field :customtheme
field :wallpaper
+20
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
+56 -2
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
+5 -2
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
+9
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
+4 -4
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
+1
View File
@@ -13,5 +13,6 @@ class Tile
belongs_to :group
belongs_to :desktop_widget
belongs_to :desktop_app
end
-70
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
-13
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
-14
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
+1 -1
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
+1 -1
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
+2 -3
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
Loaded 100 of 685 files, more files were not shown because too many files have changed in this diff. Show more