Compare commits

...
114 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
Matthew K. Fu JuYuan d3f0a10187 fix default setting for partial category selection error,due to API changing. 2013-06-17 15:26:43 +08:00
Matthew K. Fu JuYuan 256c51a970 add sold setting back 2013-06-17 13:45:30 +08:00
chris b674f47528 Remove Syslog 2013-06-14 15:30:22 +08:00
chris c1bd135595 Fix sortable when there's no record 2013-06-14 15:26:12 +08:00
iCross 96fc5ceea3 survey module: ensure the commit 2013-06-14 15:25:58 +08:00
iCross e48a1ffece archive module: add sort to frontend module
Conflicts:

	vendor/built_in_modules/archive/app/controllers/panel/archive/front_end/archive_files_controller.rb
	vendor/built_in_modules/archive/app/views/panel/archive/front_end/archive_files/index.html.erb

Conflicts:
	vendor/built_in_modules/archive/app/views/panel/archive/front_end/archive_files/index.html.erb

Conflicts:
	vendor/built_in_modules/archive/app/views/panel/archive/front_end/archive_files/index.html.erb
2013-06-14 15:25:49 +08:00
Matt K. Fu e20df41db5 add user log link at site page 2013-06-14 15:24:04 +08:00
chris e68793afc3 Fix tag delete 2013-06-14 15:23:45 +08:00
iCross 2f7389ae24 ask module change mail view: <p>此為系統自動發信,請勿直接回覆</p> 2013-06-07 13:04:00 +08:00
iCross 110eab0496 ask module: add global smtp setting 2013-06-07 13:04:00 +08:00
iCross ccd760445d ask module: configure resque redis and namespace by config/initializers/resque.rb 2013-06-07 13:04:00 +08:00
iCross c7effcc96c ask module: create.js.erb 2013-06-07 13:04:00 +08:00
iCross f3e1f4057d ask module update css 2013-06-07 13:04:00 +08:00
iCross e353961b21 ask moudule: add ask.css 2013-06-07 13:04:00 +08:00
iCross 75e27ed849 ask module: default status 2013-06-07 13:04:00 +08:00
iCross 8541033ba9 ask module: send mail on development 2013-06-07 13:04:00 +08:00
iCross 467c2e8a3c ask module: fix 2013-06-07 13:04:00 +08:00
iCross b0640f925b ask module: fix some 2013-06-07 13:04:00 +08:00
iCross 841fa10c55 ask module: add rescue ackknowledgement 2013-06-07 13:04:00 +08:00
iCross dcc5fc39a7 ask module: dropdown, icon, big5 encoding, redirect, admin, send mail 2013-06-07 13:03:59 +08:00
iCross 97df100c64 remove department 2013-06-07 13:03:59 +08:00
iCross ce180839f0 finish ask module 2013-06-07 13:03:59 +08:00
chris 0904978292 Remove non resolved conflict 2013-06-07 13:02:47 +08:00
iCross ddd9a9668e Merge branch 'lukas/picked_archive' into development 2013-06-06 23:12:30 +08:00
iCross a468b69013 archive module: fix old data caused error 2013-06-06 23:11:24 +08:00
iCross b6c8a88b73 Merge branch 'lukas/picked_archive' into development 2013-06-06 22:27:08 +08:00
iCross 5b7ac1a22b archive module: add sort feature to achive files 2013-06-06 22:20:27 +08:00
Matt K. Fu d5109c837c Merge branch 'lukas/picked_ques' into development 2013-06-06 19:59:30 +08:00
iCross c63ac751ea archive module: sort for backend/frontend. move get_sorted_and_filtered from orbit_backend_controller.rb to application_controller.rb 2013-06-06 19:20:21 +08:00
iCross 8c1e65994a Merge branch 'clean_development' into lukas/picked_ques 2013-06-06 19:08:59 +08:00
iCross f9a148c901 survey module: move down/up i18n
Conflicts:

	vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_form_survey_question.html.erb
2013-06-06 18:46:52 +08:00
iCross 5ea0c5bd5c survey module: result chart display only other
Conflicts:

	config/environments/production.rb
2013-06-06 18:45:29 +08:00
iCross d2f131d160 survey module: update css
Conflicts:

	app/assets/stylesheets/questionnaire.css
2013-06-06 18:43:28 +08:00
iCross 8d71c377f2 fix datepicker helper hidden field value 2013-06-06 18:42:26 +08:00
iCross ec173c4ce1 fix 2013-06-06 18:42:12 +08:00
iCross ba7d6558ee fix 2013-06-06 18:42:00 +08:00
iCross 88c57e0b0c fix 2013-06-06 18:41:48 +08:00
iCross d4962d20b3 fix 2013-06-06 18:41:36 +08:00
iCross 21bf3a0ccd standalone css and icon 2013-06-06 18:41:27 +08:00
iCross cf0d7cfc64 new export csv table
Conflicts:

	vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb
2013-06-06 18:40:28 +08:00
iCross 15347f25dc fix 2013-06-06 18:38:59 +08:00
iCross 443d1c4fbe csv stats & required start 2013-06-06 18:38:47 +08:00
iCross 7ba0977e16 stuff
Conflicts:

	vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/show.html.erb
2013-06-06 18:38:22 +08:00
iCross 531cee70d2 fix 2013-06-06 18:31:28 +08:00
Lukas b659c7021d bug fix and add feature 2013-06-06 18:31:09 +08:00
Lukas 515185d87c ques: fix submit 2013-06-06 18:30:54 +08:00
Lukas adc15951bb questionnaire stuff
Conflicts:

	vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb
	vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/index.html.erb
2013-06-06 18:29:58 +08:00
Lukas 32c259ac9e survey: remain stuff 2013-06-06 18:27:05 +08:00
Lukas 51640423a7 survey module initial 2013-06-06 18:26:41 +08:00
Matt K. Fu dd206437d8 apply tags and cates for fronted. from now app developer can use param category_id and tag_id freely. 2013-06-06 17:39:36 +08:00
Matt K. Fu 7729161123 fix for passing args. code in complete,fronted controller need to take care params,too. backend parser need to catch up. 2013-06-06 17:38:17 +08:00
Matthew K. Fu JuYuan f2706ff2c1 make default widget work with params[tag_id] params[category_id] 2013-06-06 17:36:30 +08:00
Matthew K. Fu JuYuan 5c94200b77 fix argument passing problem for more link and tag cloud, incomplete code. 2013-06-06 17:21:27 +08:00
Matt K. Fu 6b8b749b0f fix chris tag cloud 2013-06-06 17:18:42 +08:00
chris 253cca06cc New widget for tag cloud 2013-06-06 17:17:45 +08:00
Matt K. Fu 30824d1620 add search to archive 2013-06-05 18:03:09 +08:00
Matt K. Fu 704db56925 fix bulletin data having 8 hours difference. 2013-06-05 18:01:57 +08:00
Matt K. Fu 06fd305bf9 default widget show search 2013-06-05 13:00:21 +08:00
Matt K. Fu c0f1614cb9 fix uploading error due to user action decoder can not handle uploading file 2013-05-30 10:17:28 +08:00
Matt K. Fu 3e0b7d81ae clean 403 404 500 2013-05-27 16:46:49 +08:00
Matt K. Fu 2806dd35a9 spen's fix for user 2013-05-23 14:03:18 +08:00
Matt K. Fu 54a35b30be fix design index bug when start start from blank DB.
add delay impressionist.
add several i18n vars
2013-05-23 12:07:43 +08:00
Matt K. Fu 37aa950028 user action 2013-05-23 11:55:57 +08:00
Matt K. Fu 3d0a1cef56 1.fix for syntax error.
2.Making production console works.
3.Making blank site member no errors.
2013-05-22 16:25:12 +08:00
Spen 4a5256bf4f ntu dropdown fix member staff css 2013-05-14 14:19:56 +08:00
Spen 5b368235e8 ntu dropdown fix list sort 2013-05-14 14:19:55 +08:00
Spen b8da40b4ae ntu_dropdown_fix 2013-05-14 14:19:55 +08:00
Matt K. Fu 287e77836d fix css compiling error 2013-05-14 14:19:20 +08:00
Matt K. Fu 3e6c2b1ec2 fix member error with blank database 2013-05-14 11:48:13 +08:00
Matt K. Fu f2247aab32 ray's css fix 2013-05-14 11:27:15 +08:00
Matt K. Fu ef2c732d2e make blank site working better 2013-05-14 11:26:35 +08:00
Matt K. Fu 1096db79b6 blank site now can be start from rake site:build 2013-05-14 10:32:53 +08:00
Matt K. Fu 88d55989de change logger 2013-05-14 10:29:11 +08:00
chris c2331695cd Set order of page context to match the order of structure
Add some params to keep the sorting
2013-05-07 11:15:30 +08:00
chris 127ab3845c Changes for queries 2013-05-03 12:12:19 +08:00
chris aefd62da2a Add tagged_ids to taggable 2013-05-03 12:12:19 +08:00
chris 167a71272a queries need to be rethink 2013-05-03 12:12:19 +08:00
Matt K. Fu caf0426bd4 bulletin search 2013-05-01 12:16:28 +08:00
Matt K. Fu 7d077a92a5 system preference 2013-04-29 15:23:15 +08:00
Matt K. Fu 64101109dd disable all sorted_tags 2013-04-26 18:07:59 +08:00
Matt K. Fu 3e567223e3 fix for Spen's translation and Chris's tag error 2013-04-26 15:37:27 +08:00
Spen 79ef86f2c9 member translation fix 2013-04-26 11:26:11 +08:00
Matthew K. Fu JuYuan d047a3d62a chris tags update 2013-04-26 11:26:10 +08:00
721 changed files with 12082 additions and 6065 deletions

No files matched your search

+3 -2
View File
@@ -11,7 +11,7 @@ public/assets
public/index.html public/index.html
public/panel/**/* public/panel/**/*
public/uploads/**/* public/uploads/**/*
solr solr/data
tmp/**/* tmp/**/*
uploads/**/* uploads/**/*
@@ -20,4 +20,5 @@ uploads/**/*
*.lck *.lck
.sass-cache/* .sass-cache/*
*.supported *.supported
mongoid.yml
+3 -1
View File
@@ -50,7 +50,7 @@ gem 'tinymce-rails'
gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux") gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux")
gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux") gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux")
gem 'mongoid-encryptor', :require => 'mongoid/encryptor' gem 'mongoid-encryptor', :require => 'mongoid/encryptor'
gem 'rb-readline' if RUBY_PLATFORM.downcase.include?("linux") gem 'rb-readline','~> 0.4.2' if RUBY_PLATFORM.downcase.include?("linux")
gem "impressionist", :git => 'git://github.com/charlotte-ruby/impressionist.git' gem "impressionist", :git => 'git://github.com/charlotte-ruby/impressionist.git'
@@ -63,6 +63,8 @@ gem 'chinese_pinyin', '0.4.1'
gem 'rmmseg-cpp-huacnlee', '0.2.9' gem 'rmmseg-cpp-huacnlee', '0.2.9'
gem 'redis-namespace' gem 'redis-namespace'
gem 'redis-search' gem 'redis-search'
gem 'syslog-logger'
gem "recaptcha", :require => "recaptcha/rails"
# Gems used only for assets and not required # Gems used only for assets and not required
# in production environments by default. # in production environments by default.
-407
View File
@@ -1,407 +0,0 @@
GIT
remote: git://github.com/amatsuda/kaminari.git
revision: 2e09b5374fec33b57c6387ca7bac89ecaa60c9eb
specs:
kaminari (0.14.1)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
GIT
remote: git://github.com/charlotte-ruby/impressionist.git
revision: 0894f6a550a33f83f4937d655e9f0774521781e4
specs:
impressionist (1.2.0)
httpclient (~> 2.2)
nokogiri (~> 1.5)
GEM
remote: http://rubygems.org/
specs:
actionmailer (3.2.12)
actionpack (= 3.2.12)
mail (~> 2.4.4)
actionpack (3.2.12)
activemodel (= 3.2.12)
activesupport (= 3.2.12)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.5)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
activemodel (3.2.12)
activesupport (= 3.2.12)
builder (~> 3.0.0)
activerecord (3.2.12)
activemodel (= 3.2.12)
activesupport (= 3.2.12)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.12)
activemodel (= 3.2.12)
activesupport (= 3.2.12)
activesupport (3.2.12)
i18n (~> 0.6)
multi_json (~> 1.0)
arel (3.0.2)
attr_required (0.0.5)
bcrypt-ruby (3.0.0)
binding_of_caller (0.7.1)
debug_inspector (>= 0.0.1)
bourne (1.1.2)
mocha (= 0.10.5)
brakeman (1.9.2)
erubis (~> 2.6)
fastercsv (~> 1.5)
haml (~> 3.0)
highline (~> 1.6)
multi_json (~> 1.2)
ruby2ruby (~> 2.0)
ruby_parser (~> 3.1.1)
sass (~> 3.0)
terminal-table (~> 1.4)
bson (1.8.2)
bson_ext (1.8.2)
bson (~> 1.8.2)
builder (3.0.4)
capybara (2.0.2)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
selenium-webdriver (~> 2.0)
xpath (~> 1.0.0)
carrierwave (0.6.2)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
carrierwave-mongoid (0.2.2)
carrierwave (~> 0.6.1)
mongoid (~> 2.1)
childprocess (0.3.8)
ffi (~> 1.0, >= 1.0.11)
chinese_pinyin (0.4.1)
chronic (0.9.0)
coderay (1.0.9)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.2.0)
coffee-script-source
execjs
coffee-script-source (1.4.0)
columnize (0.3.6)
database_cleaner (0.9.1)
debug_inspector (0.0.2)
debugger (1.2.4)
columnize (>= 0.3.1)
debugger-linecache (~> 1.1.1)
debugger-ruby_core_source (~> 1.1.7)
debugger-linecache (1.1.2)
debugger-ruby_core_source (>= 1.1.1)
debugger-ruby_core_source (1.1.8)
delorean (2.1.0)
chronic
devise (1.5.3)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.0.3)
warden (~> 1.1)
diff-lcs (1.1.3)
encrypted_strings (0.3.3)
erubis (2.7.0)
exception_notification (3.0.1)
actionmailer (>= 3.0.4)
execjs (1.4.0)
multi_json (~> 1.0)
factory_girl (4.2.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.2.1)
factory_girl (~> 4.2.0)
railties (>= 3.0.0)
faker (1.1.2)
i18n (~> 0.5)
fastercsv (1.5.5)
fattr (2.2.1)
fb_graph (2.6.4)
httpclient (>= 2.2.0.2)
multi_json (>= 1.3)
rack-oauth2 (>= 0.14.4)
tzinfo
ffi (1.4.0)
haml (3.1.8)
highline (1.6.15)
hike (1.2.1)
httpclient (2.3.2)
i18n (0.6.1)
journey (1.0.4)
jquery-rails (2.1.4)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (4.0.1)
jquery-rails
railties (>= 3.1.0)
json (1.7.7)
mail (2.4.4)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
metaclass (0.0.1)
method_source (0.8.1)
mime-types (1.21)
mini_magick (3.5.0)
subexec (~> 0.2.1)
mocha (0.10.5)
metaclass (~> 0.0.1)
mongo (1.8.2)
bson (~> 1.8.2)
mongo_session_store-rails3 (3.0.6)
actionpack (>= 3.0)
mongo
mongoid (2.6.0)
activemodel (~> 3.1)
mongo (~> 1.7)
tzinfo (~> 0.3.22)
mongoid-encryptor (0.0.5)
activesupport (~> 3.0)
encrypted_strings (~> 0.3.3)
mongoid (~> 2)
mongoid-tree (0.7.0)
mongoid (~> 2.0)
multi_json (1.6.1)
net-ldap (0.3.1)
nokogiri (1.5.6)
options (2.3.0)
fattr
orm_adapter (0.0.7)
polyglot (0.3.3)
pr_geohash (1.0.0)
progress_bar (0.4.0)
highline (~> 1.6.1)
options (~> 2.3.0)
pry (0.9.12)
coderay (~> 1.0.5)
method_source (~> 0.8)
slop (~> 3.4)
pry-debugger (0.2.1)
debugger (~> 1.2.0)
pry (~> 0.9.10)
pry-remote (0.1.6)
pry (~> 0.9)
slop (~> 3.0)
pry-stack_explorer (0.4.9)
binding_of_caller (>= 0.7)
pry (~> 0.9.11)
rack (1.4.5)
rack-cache (1.2)
rack (>= 0.4)
rack-gridfs (0.4.1)
mime-types
mongo (~> 1.2)
rack
rack-oauth2 (1.0.0)
activesupport (>= 2.3)
attr_required (>= 0.0.5)
httpclient (>= 2.2.0.2)
i18n
multi_json (>= 1.3.6)
rack (>= 1.1)
rack-protection (1.3.2)
rack
rack-ssl (1.3.3)
rack
rack-test (0.6.2)
rack (>= 1.0)
radius (0.7.3)
rails (3.2.12)
actionmailer (= 3.2.12)
actionpack (= 3.2.12)
activerecord (= 3.2.12)
activeresource (= 3.2.12)
activesupport (= 3.2.12)
bundler (~> 1.0)
railties (= 3.2.12)
railties (3.2.12)
actionpack (= 3.2.12)
activesupport (= 3.2.12)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
rake (10.0.3)
rdoc (3.12.1)
json (~> 1.4)
redis (3.0.2)
redis-namespace (1.2.1)
redis (~> 3.0.0)
redis-search (0.9.0)
chinese_pinyin (>= 0.3.0)
redis (>= 2.1.1)
redis-namespace (>= 1.0.2)
resque (1.23.0)
multi_json (~> 1.0)
redis-namespace (~> 1.0)
sinatra (>= 0.9.2)
vegas (~> 0.1.2)
resque-restriction (0.3.0)
resque (>= 1.7.0)
resque-scheduler (2.0.0)
redis (>= 2.0.1)
resque (>= 1.20.0)
rufus-scheduler
rmmseg-cpp-huacnlee (0.2.9)
rsolr (1.0.8)
builder (>= 2.1.2)
rspec (2.12.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
rspec-core (2.12.2)
rspec-expectations (2.12.1)
diff-lcs (~> 1.1.3)
rspec-mocks (2.12.2)
rspec-rails (2.12.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
ruby2ruby (2.0.3)
ruby_parser (~> 3.1)
sexp_processor (~> 4.0)
ruby_parser (3.1.1)
sexp_processor (~> 4.1)
rubyzip (0.9.9)
rufus-scheduler (2.0.17)
tzinfo (>= 0.3.23)
sass (3.2.5)
sass-rails (3.2.6)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
select2-rails (3.3.1)
sass-rails (>= 3.2)
thor (~> 0.14)
selenium-webdriver (2.30.0)
childprocess (>= 0.2.5)
multi_json (~> 1.0)
rubyzip
websocket (~> 1.0.4)
sexp_processor (4.1.5)
shoulda-matchers (1.4.2)
activesupport (>= 3.0.0)
bourne (~> 1.1.2)
simplecov (0.7.1)
multi_json (~> 1.0)
simplecov-html (~> 0.7.1)
simplecov-html (0.7.1)
sinatra (1.3.4)
rack (~> 1.4)
rack-protection (~> 1.3)
tilt (~> 1.3, >= 1.3.3)
slop (3.4.3)
social-share-button (0.1.1)
spork (0.9.2)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
subexec (0.2.2)
sunspot (1.3.3)
pr_geohash (~> 1.0)
rsolr (~> 1.0.7)
sunspot-rails-tester (0.0.4)
sunspot_rails (~> 1.2)
sunspot_mongo (1.0.1)
sunspot_rails
sunspot_rails (1.3.3)
nokogiri
sunspot (= 1.3.3)
sunspot_solr (1.3.3)
terminal-table (1.4.5)
thor (0.17.0)
tilt (1.3.3)
tinymce-rails (3.5.8)
railties (>= 3.1.1)
treetop (1.4.12)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.35)
uglifier (1.3.0)
execjs (>= 0.3.0)
multi_json (~> 1.0, >= 1.0.2)
vegas (0.1.11)
rack (>= 1.0.0)
warden (1.2.1)
rack (>= 1.0)
watchr (0.7)
websocket (1.0.7)
xpath (1.0.0)
nokogiri (~> 1.3)
PLATFORMS
ruby
DEPENDENCIES
brakeman
bson_ext
capybara
carrierwave
carrierwave-mongoid
chinese_pinyin (= 0.4.1)
coffee-rails
database_cleaner
debugger
delorean
devise (= 1.5.3)
exception_notification
execjs
factory_girl_rails
faker
fb_graph
impressionist!
jquery-rails (= 2.1.4)
jquery-ui-rails
kaminari!
mime-types
mini_magick
mongo_session_store-rails3 (= 3.0.6)
mongoid (> 2.1, < 3.0.0)
mongoid-encryptor
mongoid-tree
net-ldap (~> 0.3.1)
nokogiri
progress_bar
pry
pry-debugger
pry-remote
pry-stack_explorer
rack-gridfs
radius
rails (~> 3.2.9)
rake
redis (>= 2.1.1)
redis-namespace
redis-search
resque
resque-restriction
resque-scheduler
rmmseg-cpp-huacnlee (= 0.2.9)
rspec (~> 2.0)
rspec-rails (~> 2.0)
rubyzip
sass-rails
select2-rails (= 3.3.1)
shoulda-matchers
simplecov
sinatra
social-share-button
spork
sprockets
sunspot-rails-tester
sunspot_mongo
sunspot_solr
tinymce-rails
uglifier
watchr
Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 B

+3 -2
View File
@@ -10,10 +10,11 @@
//= require jquery.form //= require jquery.form
//= require jquery.tinyscrollbar //= require jquery.tinyscrollbar
//= require jquery.miniColors.min //= require jquery.miniColors.min
//= require select2
//= require bootstrap //= require bootstrap
//= require orbitdesktopAPI //= require orbitdesktopAPI
//= require orbitTimeline //= require orbitTimeline
//= require orbitdesktop //= require orbitdesktop
//= require jquery.gridster //= require jquery.gridster
//= require desktop/books_pages //= require jquery.isotope.min
//= require select2 //= require desktop/books_pages
+1 -1
View File
@@ -1,6 +1,6 @@
orbitDesktop.prototype.themefolder = "desktop_themes"; orbitDesktop.prototype.themefolder = "desktop_themes";
orbitDesktopAPI.prototype.notifyImgPath = "/assets/"; orbitDesktopAPI.prototype.notifyImgPath = "/assets/";
alert("<%= @desktop.inspect %>") // alert("<%= @desktop.inspect %>")
var od = new orbitDesktop("#ajax_container"); var od = new orbitDesktop("#ajax_container");
+1 -57
View File
@@ -55,7 +55,7 @@ $(document).ready(function(){
} }
return false; return false;
}); });
getEvent(selet);
function resetText() { function resetText() {
$events.find('li').find($mon).html(''); $events.find('li').find($mon).html('');
$events.find('li').find($day).html(''); $events.find('li').find($day).html('');
@@ -63,60 +63,4 @@ $(document).ready(function(){
$events.find('li').find($link_text).attr('href', ''); $events.find('li').find($link_text).attr('href', '');
$events.find('li').find($time).html(''); $events.find('li').find($time).html('');
} }
function getEvent(selet){
$.ajax({
type: "GET",
url: "/static/nccu_calendar.xml",
dataType: "xml",
timeout: 1000,
error: function(xml){
$events.find('.links_next').addClass('disabled')
$events.find('.error_mag').show();
$events.find('ul').hide();
$events.find('.error_mag').html("讀取錯誤");
},
success: function(xml) {
xmlLength = $(xml).find('entry').length;
$(xml).find('entry').slice(selet, selet+objLength).each(function(i){
title_text = $(this).find('title').text()
link_text = $(this).find('link').attr('href')
summary_text = $(this).find('summary').text()
indexA = summary_text.indexOf("-");
indexB = summary_text.indexOf(" ");
indexC = summary_text.indexOf("/");
//清除前後空白字元
summary_text = jQuery.trim(summary_text);
//篩選標題
title_text = title_text.slice(0, 16)
if (summary_text.length == 31) {
startDate_text = summary_text.slice(0, indexA);
startMon_text = startDate_text.slice((indexC+1), (indexC+3));
startDay_text = startDate_text.slice(7);
endDate_text = summary_text.slice((indexA+1), indexB);
time_text = summary_text.slice((indexB+1));
} else {
startDate_text = summary_text.slice(0, indexB);
startMon_text = startDate_text.slice((indexC+1), (indexC+3));
startDay_text = startDate_text.slice(7);
endDate_text = '';
time_text = summary_text.slice((indexB+1));
}
if(startMon_text.slice(0, 1) == '0'){
startMon_text = month[startMon_text.slice(1)-1];
} else {
startMon_text = month[startMon_text-1];
}
$events.find('li').eq(i).find($mon).html(startMon_text);
$events.find('li').eq(i).find($day).html(startDay_text);
$events.find('li').eq(i).find($link_text).html(title_text+"…");
$events.find('li').eq(i).find($link_text).attr('href', link_text);
$events.find('li').eq(i).find($time).html('時間:'+time_text);
//console.log();
/*$('<li></li>')
.html('<div class="event_date"><span class="mon">'+startMon_text+'</span><span class="day">'+startDay_text+'</div>')
.appendTo('.events ul');*/
});//close each(
}
}); //close $.ajax(
}
}); });
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 * An exquisite jQuery plugin for magical layouts
* http://isotope.metafizzy.co * http://isotope.metafizzy.co
* *
* Commercial use requires one-time license fee * Commercial use requires one-time purchase of a commercial license
* http://metafizzy.co/#licenses * 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
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 //msg (string) : message to display
//type (string : success, imp, alert //type (string : success, imp, alert
//time (int) : duration for notification in seconds //time (int) : duration for notification in seconds
var $notify = $("#orbitnote"); var $notify = $('#orbitnote'),
var img, n_height; ani_method = { direction: 'up',easing: 'easeInOutQuint' },
img, n_height;
if(!type)type=""; if(!type)type="";
switch(type){ switch(type){
case "alert": case "alert":
img = "note_alert.png"; img = "exclamation-sign";
break; break;
case "imp": case "imp":
img = "note_imp.png"; img = "warning-sign";
break; break;
case "success": case "success":
img = "note_success.png"; img = "ok";
break; break;
default: default:
img = "note_alert.png"; img = "exclamation-sign";
break; break;
} }
$notify.find("img#note_img").attr("src",o.notifyImgPath+img); if( !time || time > 20) time = 5000; else time = time*1000;
$notify.find(".note_message").html(msg);
n_height = $notify.outerHeight(); var sign = '<div class="note_type"><span class="sign icon-'+ img +'"></span></div>',
if(!time)time=5000; else time=time*1000; message = '<div class="note_message">'+ msg +'</div>',
$notify item = '<div class="note_holder admbg">'+ sign + message +'</div>';
.css({'top':-n_height, 'display':'block', 'opacity':0})
.animate({top:0,opacity:1},200) $(item)
.prependTo($notify)
.stop(1,1)
.toggle('slide', ani_method, 300)
.delay(time) .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){ this.executeFunc = function(func,callbackFn){
//takes 2 arguments //takes 2 arguments
@@ -67,7 +72,7 @@ var orbitDesktopAPI = function(){
this.changeWallpaper = function(wallpaper){ this.changeWallpaper = function(wallpaper){
//takes 1 parameter //takes 1 parameter
//wallpaper (string): takes wallpaper and sets the wallpaper //wallpaper (string): takes wallpaper and sets the wallpaper
$("img#thmbackground").attr("src",o.wallpaperPath+wallpaper); $("#thmbackground").attr("src",o.wallpaperPath+wallpaper);
o.saveWallpaper(wallpaper); o.saveWallpaper(wallpaper);
}; };
this.confirm = function(settings,callbackfn){ this.confirm = function(settings,callbackfn){
@@ -111,29 +116,35 @@ var orbitDesktopAPI = function(){
}) })
return tempArray; return tempArray;
}; };
this.appWindow = function(settings,callbackfn){ this.appWindow = function(options,callbackfn){
//takes set of arguments as array and gives callback //takes set of arguments as array and gives callback
//settings.method (string) : like open and close //settings.method (string) : like open and close
//settings.title (string) : the window title //settings.title (string) : the window title
//settings.extUrl (boolean) : true for opening external url else false //settings.extUrl (boolean) : true for opening external url else false
//settings.appid (string) : appid.. user can use this appid to open or close or refresh the window //settings.appid (string) : appid.. user can use this appid to open or close or refresh the window
//settings.url (string) : it is the url if you want to force external url to open in appwindow... you have to pass extURL in appid if you want to open externalurl //settings.url (string) : it is the url if you want to force external url to open in appwindow... you have to pass extURL in appid if you want to open externalurl
if(typeof settings == "undefined")settings = {}; var settings = {
method : "open",
extUrl : true,
title : "New Window"
}
$.extend(settings,options);
if(!settings.appid){ if(!settings.appid){
o.notify("Invalid AppID.","imp",3); o.notify("Invalid AppID.","imp",3);
return; return;
} }
if(!settings.method)settings.method = "open"; var isWindow = ($("div.app_frame[data-app="+settings.appid+"]").length > 0 ? $("div.app_frame[data-app="+settings.appid+"]") : null);
if(!settings.extUrl)settings.extUrl = true; if(isWindow){
o.minimizeBarManager.maximize(isWindow);
return;
}
if(settings.method == 'open'){ if(settings.method == 'open'){
var appurl = "http://www.rulingcom.com"; var appurl = "http://www.rulingcom.com";
o.windowcounter++; o.windowcounter++;
if(!settings.title)settings.title = "New Window "+o.windowcounter;
if(settings.extUrl){ if(settings.extUrl){
if(settings.url){ if(settings.url){
if(settings.url.substr(0,4)!="http")settings.url = "http://"+settings.url; if(settings.url.substr(0,4)!="http")settings.url = "http://"+settings.url;
console.log(settings.url)
var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)"); var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)");
if(urlregex.test(settings.url)) if(urlregex.test(settings.url))
appurl = settings.url; appurl = settings.url;
@@ -147,20 +158,64 @@ var orbitDesktopAPI = function(){
return; 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>'); 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>');
$(o.contentHolder).append(whtml); $("body").append(whtml).css('overflow','hidden');
var parentwindow = $(o.contentHolder).find("div#app_frame_"+o.windowcounter); var parentwindow = $("#app_frame_"+o.windowcounter);
var app_holder_height = parentwindow.height() - 72; var app_holder_height = parentwindow.height() - 60;
var app_holder_width = parentwindow.width(); var app_holder_width = parentwindow.width();
parentwindow.find("iframe").attr({"height":app_holder_height,"width":app_holder_width}); parentwindow.find("iframe").attr({"height":app_holder_height});
parentwindow.find("div.app_holder").height(app_holder_height); parentwindow.find(".app_holder").height(app_holder_height);
parentwindow.find("span.icon-remove").click(function(){ parentwindow.find(".icon-remove").click(function(){
parentwindow.remove(); 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"){ if(typeof callbackfn=="function"){
callbackfn.call(this); callbackfn.call(this,parentwindow);
} }
return parentwindow;
}; };
this.toolPopup = function(settings){ this.toolPopup = function(settings){
if(settings == "destroy"){ if(settings == "destroy"){
+56
View File
@@ -0,0 +1,56 @@
<%#= encoding: utf-8 %>
$(document).ready(function(){
$(document).on('click', '.survey_question_item a.remove_existing_record_question', function(){
if(confirm("<%= I18n.t(:sure?)%>")){
$(this).next('.should_destroy').val(1);
$(".survey_question_item#" + $(this).prev().attr('value')).hide();
}
});
$(document).on('click', '.survey_question_option_item a.remove_existing_record_option', function(){
if(confirm("<%= I18n.t(:sure?)%>")){
$(this).next('.should_destroy').val(1);
$(".survey_question_option_item#" + $(this).prev().attr('value')).hide();
}
});
$(document).on('click', '.survey_question_radiogroup_item a.remove_existing_record_radiogroup', function(){
if(confirm("<%= I18n.t(:sure?)%>")){
$(this).next('.should_destroy').val(1);
$(".survey_question_radiogroup_item#" + $(this).prev().attr('value')).hide();
}
});
$('.survey_question_item .type-selector').live('change', function(){
$item = $(this).parents('.survey_question_item');
$item.find('.type-specify').hide();
$item.find('.type-specify.type-' + $(this).val()).show();
$item.find('.type-specify.hide-type-' + $(this).val()).hide();
});
$('.survey_question_item .type-selector').trigger('change');
$('.survey_question_item .add_survey_question_option a.add').live('click', function(){
var new_id = $(this).prev().attr('value');
var old_id = new RegExp("new_survey_question_options", "g");
$(this).prev().attr('value', parseInt(new_id) + 1);
$_new = $($(this).next().html().replace(old_id, new_id));
$(this).parents('.survey_question_options_wrapper').find('tbody').append($_new);
$_new.find('a.delete_option').on('click', function(){
$(this).parents('.survey_question_option_item').remove();
});
});
$('.survey_question_item .add_survey_question_radiogroup a.add').live('click', function(){
var new_id = $(this).prev().attr('value');
var old_id = new RegExp("new_survey_question_radiogroups", "g");
$(this).prev().attr('value', parseInt(new_id) + 1);
$_new = $($(this).next().html().replace(old_id, new_id));
$(this).parents('.survey_question_radiogroups_wrapper').find('tbody').append($_new);
$_new.find('a.delete_radiogroup').on('click', function(){
$(this).parents('.survey_question_radiogroup_item').remove();
});
});
});
@@ -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");
})
+40
View File
@@ -0,0 +1,40 @@
#acknowledgement {
display: none;
padding: 20px;
margin: -20px 0 30px 0;
background-color: #fff;
font-weight: bold;
font-size: 15px;
border: solid 2px #f0f0f0;
}
#aclnowledgement:after {
content: '';
display: table;
width: table;
clear: both;
}
.ask-question {
}
/* AQ form */
#new-ask-question {
background-color: #f8f8f8;
padding: 20px 0;
}
#new-ask-question .form-horizontal .control-label {
width: 100px;
}
#new-ask-question .form-horizontal .controls {
margin-left: 120px;
}
#new-ask-question .form-horizontal .controls textarea {
width: 80%;
resize: vertical;
}
#new-ask-question .form-horizontal .form-actions {
padding-left: 120px;
background-color: transparent;
border: none;
}
@@ -8,6 +8,10 @@ $gray: #ddd;
font-family: "Source Sans Pro", Arial, sans-serif; font-family: "Source Sans Pro", Arial, sans-serif;
font-size: #{$font-size}px; font-size: #{$font-size}px;
} }
@mixin font-icon($font-size) {
font-family: "FontAwesome";
font-size: #{$font-size}px;
}
@mixin transition-type($property, $sec) { @mixin transition-type($property, $sec) {
-webkit-transition: #{$property} #{$sec}s ease; -webkit-transition: #{$property} #{$sec}s ease;
-moz-transition: #{$property} #{$sec}s ease; -moz-transition: #{$property} #{$sec}s ease;
@@ -1,4 +1,4 @@
.noSelect { .noSelect, .noSelect * {
-webkit-touch-callout: none; -webkit-touch-callout: none;
-webkit-user-select: none; -webkit-user-select: none;
-khtml-user-select: none; -khtml-user-select: none;
@@ -50,6 +50,14 @@
width: 384px; } width: 384px; }
.s_grid_row .s_grid_12 { .s_grid_row .s_grid_12 {
width: 420px; } width: 420px; }
.s_grid_row .s_grid_13 {
width: 456px; }
.s_grid_row .s_grid_14 {
width: 492px; }
.s_grid_row .s_grid_15 {
width: 528px; }
.s_grid_row .s_grid_16 {
width: 564px; }
.s_grid_row:last-child { .s_grid_row:last-child {
margin-bottom: 0; } margin-bottom: 0; }
.s_grid_row .s_grid_h_1 { .s_grid_row .s_grid_h_1 {
@@ -93,7 +101,7 @@
left: 0; left: 0;
top: 60px; top: 60px;
font-size: 15px; font-size: 15px;
width: 120px; min-width: 120px;
border: solid 2px #dddddd; border: solid 2px #dddddd;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
/* webkit */ /* webkit */
@@ -128,7 +136,7 @@
font-size: 15px; font-size: 15px;
line-height: 36px; } line-height: 36px; }
.s_menu li { .s_menu li {
border-top: solid 1px #dddddd; } border-top: solid 1px #eaeaea; }
.s_menu li:first-child { .s_menu li:first-child {
border: none; } border: none; }
.s_menu a { .s_menu a {
@@ -138,31 +146,23 @@
.s_tab { .s_tab {
font-size: 15px; font-size: 15px;
line-height: 36px; } line-height: 36px; }
.s_tab ul {
.s_tab ul { overflow: hidden; }
overflow: hidden; } .s_tab li {
float: left; }
.s_tab li { .s_tab a {
float: left; } display: block; }
.s_tab .admbg {
.s_tab a { background-color: #f0f0f0; }
display: block; }
.s_tab .admbg {
background-color: #f0f0f0; }
.st_c { .st_c {
display: none; } display: none; }
.st_c:first-child {
display: block; }
/* simple form */ /* simple form */
.s_form { .s_form {
font-size: 15px; } font-size: 15px; }
.s_form label { .s_form label {
font-size: 13px; font-size: 13px;
font-weight: bold;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
width: 100px; width: 100px;
@@ -172,6 +172,9 @@
line-height: 32px; } line-height: 32px; }
.s_form input[type=text], .s_form input[type=text],
.s_form input[type=password], .s_form input[type=password],
.s_form input[type=submit],
.s_form input[type=reset],
.s_form input[type=button],
.s_form select { .s_form select {
height: 32px; height: 32px;
margin-top: 0; margin-top: 0;
@@ -202,7 +205,6 @@
.s_form input[type=text]:focus, .s_form input[type=text]:focus,
.s_form input[type=password]:focus, .s_form input[type=password]:focus,
.s_form textarea:focus { .s_form textarea:focus {
background-color: #f7f7f7;
border-color: #c4c4c4; } border-color: #c4c4c4; }
.s_form textarea { .s_form textarea {
resize: none; } resize: none; }
@@ -218,9 +220,10 @@
.s_form .s_table td { .s_form .s_table td {
vertical-align: middle; } vertical-align: middle; }
.s_form .s_table thead th { .s_form .s_table thead th {
border-bottom: solid 1px #eeeeee; } border-bottom: solid 1px #eee; }
.check_box_g { /* simple select */
.s_select_g {
padding: 4px 8px; padding: 4px 8px;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
/* webkit */ /* webkit */
@@ -232,22 +235,89 @@
/* ie */ /* ie */
box-sizing: border-box; box-sizing: border-box;
/* css3 */ } /* css3 */ }
.check_box_g li { .s_select_g li {
margin: 0 6px 6px 0; margin: 0 6px 6px 0;
padding: 0; } padding: 0; }
.check_box_g li, .s_select_g li,
.check_box_g li > * { .s_select_g li > * {
display: inline-block; display: inline-block;
vertical-align: middle; } vertical-align: middle; }
.check_box_g label { .s_select_g label {
width: auto; width: auto;
margin: 0; } margin: 0; }
.check_box_g > label { .s_select_g > label {
font-size: 15px; font-size: 15px;
display: block; display: block;
padding: 4px 0; } padding: 4px 0; }
.check_box_g li label { .s_select_g li label {
padding-left: 4px; } padding-left: 4px;
cursor: pointer; }
.s_select_g li label:before {
display: inline-block;
vertical-align: middle;
width: 14px;
height: 14px;
line-height: 14px;
text-align: center;
margin-right: 6px;
content: '';
border: solid 1px #c4c4c4; }
.s_select_g input[type=checkbox],
.s_select_g input[type=radio] {
display: none; }
.s_select_g input[type=checkbox]:checked + label:before, .s_select_g input[type=radio]:checked + label:before {
background-color: #444444;
border-color: #444444;
color: #fff;
font-family: "FontAwesome";
font-size: 12px; }
.s_select_g input[type=checkbox]:checked + label:before {
content: "\f00c"; }
.s_select_g input[type=radio] + label:before {
border-radius: 8px; }
.s_select_g input[type=radio]:checked + label:before {
content: "\f111";
font-size: 9px;
-webkit-text-size-adjust: none; }
/* simple switch */
.s_switch {
overflow: hidden; }
.s_switch .s_switch_status {
font-size: 1.5em;
line-height: 20px;
height: 20px;
float: left;
margin-right: 60px; }
.s_switch .s_switch_switcher {
display: block;
float: right;
position: relative;
width: 48px;
height: 20px;
overflow: hidden; }
.s_switch .s_switch_switcher input[type=checkbox] {
width: 144px;
height: 20px;
margin: 0;
position: absolute;
top: 0;
left: -96px; }
.s_switch .s_switch_switcher input[type=checkbox] + .s_switch_toggle {
display: block;
position: absolute;
left: -2px;
top: -2px;
width: 16px;
height: 20px;
background-color: #000;
border: solid 2px #fff;
cursor: pointer;
-webkit-transition: left 0.3s ease;
-moz-transition: left 0.3s ease;
transition: left 0.3s ease; }
.s_switch .s_switch_switcher input[type=checkbox]:checked + .s_switch_toggle {
left: 30px; }
/* tool bar */ /* tool bar */
.toolbar { .toolbar {
@@ -255,7 +325,7 @@
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
position: relative; position: relative;
z-index: 9; } z-index: 99; }
.toolbar .sdm, .toolbar .fn_g { .toolbar .sdm, .toolbar .fn_g {
display: inline-block; display: inline-block;
vertical-align: top; } vertical-align: top; }
@@ -282,16 +352,21 @@
width: auto; width: auto;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
position: relative; } position: relative;
z-index: 10; }
.tinycanvas .overview { .tinycanvas .overview {
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
min-width: 100%; width: 100%;
height: 100%; } height: 100%; }
.tinycanvas .overview:after {
content: "";
display: table;
width: 100%; }
.tinycanvas .overview > .column { .tinycanvas .overview > .column {
float: left; float: left;
border-right: solid 1px #eeeeee; border-right: solid 1px #eee;
padding: 0 12px 0 0; padding: 0 12px 0 0;
margin: 0 12px 0 0; margin: 0 12px 0 0;
height: 100%; } height: 100%; }
@@ -347,7 +422,7 @@
width: 6px; } width: 6px; }
.tinycanvas .scrollbar { .tinycanvas .scrollbar {
position: absolute; position: absolute;
z-index: 9; z-index: 11;
visibility: hidden; visibility: hidden;
opacity: 0; opacity: 0;
-webkit-transition: opacity 0.3s ease; -webkit-transition: opacity 0.3s ease;
@@ -358,7 +433,7 @@
visibility: visible; } visibility: visible; }
.tinycanvas .scrollbar.sb_h { .tinycanvas .scrollbar.sb_h {
left: 0; left: 0;
bottom: -6px; bottom: 0;
height: 6px; } height: 6px; }
.tinycanvas .scrollbar.sb_v { .tinycanvas .scrollbar.sb_v {
right: 0; right: 0;
@@ -1,6 +1,6 @@
@import "desktop-helper"; @import "desktop-helper";
.noSelect { .noSelect, .noSelect * {
@include no-select; @include no-select;
} }
@@ -19,9 +19,11 @@
margin-left: 0; margin-left: 0;
} }
} }
// fixed width column // fixed width column with 12px gutter
// full width 420px // 276px width for 8 columns
@for $i from 1 through 12 { // 420px width for 12 columns
// 564px width for 16 columns
@for $i from 1 through 16 {
.s_grid_#{$i} { .s_grid_#{$i} {
width: 36px * $i - 12px; width: 36px * $i - 12px;
} }
@@ -38,6 +40,7 @@
height: 44px * $j - 12px; height: 44px * $j - 12px;
} }
} }
} }
/* simple dropdown menu */ /* simple dropdown menu */
@@ -58,7 +61,7 @@
left: 0; left: 0;
top: 60px; top: 60px;
font-size: 15px; font-size: 15px;
width: 120px; min-width: 120px;
border: solid 2px $gray; border: solid 2px $gray;
@include box-sizing; @include box-sizing;
@@ -92,7 +95,7 @@
line-height: 36px; line-height: 36px;
li { li {
border-top: solid 1px $gray; border-top: solid 1px lighten($gray, 5%);
} }
li:first-child { li:first-child {
border: none; border: none;
@@ -106,27 +109,25 @@
.s_tab { .s_tab {
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
ul {
overflow: hidden;
}
li {
float: left;
}
a {
display: block;
}
.admbg {
background-color: #f0f0f0;
}
} }
.stb_h {} .stb_h {}
.stb_v {} .stb_v {}
.s_tab ul {
overflow: hidden;
}
.s_tab li {
float: left;
}
.s_tab a {
display: block;
}
.s_tab .admbg {
background-color: #f0f0f0;
}
.st_c { .st_c {
display: none; display: none;
} }
.st_c:first-child {
display: block;
}
/* simple form */ /* simple form */
.s_form { .s_form {
@@ -135,7 +136,6 @@
// basic style // basic style
label { label {
font-size: 13px; font-size: 13px;
font-weight: bold;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
width: 100px; width: 100px;
@@ -148,6 +148,9 @@
} }
input[type=text], input[type=text],
input[type=password], input[type=password],
input[type=submit],
input[type=reset],
input[type=button],
select { select {
height: 32px; height: 32px;
margin-top: 0; margin-top: 0;
@@ -169,7 +172,7 @@
@include box-sizing; @include box-sizing;
&:focus { &:focus {
background-color: lighten($gray, 10%); // background-color: lighten($gray, 10%);
border-color: darken($gray, 10%); border-color: darken($gray, 10%);
} }
} }
@@ -198,8 +201,8 @@
} }
} }
/* simple select */
.check_box_g { .s_select_g {
padding: 4px 8px; padding: 4px 8px;
// border: solid 1px $gray; // border: solid 1px $gray;
@include box-sizing; @include box-sizing;
@@ -224,6 +227,87 @@
} }
li label { li label {
padding-left: 4px; padding-left: 4px;
cursor: pointer;
&:before {
display: inline-block;
vertical-align: middle;
width: 14px;
height: 14px;
line-height: 14px;
text-align: center;
margin-right: 6px;
content: '';
border: solid 1px darken($gray, 10%);
}
}
input[type=checkbox],
input[type=radio]
{
display: none;
}
input[type=checkbox]:checked + label:before, input[type=radio]:checked + label:before {
background-color: darken($gray, 60%);
border-color: darken($gray, 60%);
color: #fff;
@include font-icon(12);
}
input[type=checkbox]:checked + label:before {
content: "\f00c";
}
input[type=radio] + label:before {
border-radius: 8px;
}
input[type=radio]:checked + label:before {
content: "\f111";
font-size: 9px;
-webkit-text-size-adjust: none;
}
}
/* simple switch */
.s_switch {
overflow: hidden;
.s_switch_status {
font-size: 1.5em;
line-height: 20px;
height: 20px;
float: left;
margin-right: 60px;
}
.s_switch_switcher {
display: block;
float: right;
position: relative;
width: 48px;
height: 20px;
overflow: hidden;
input[type=checkbox] {
width: 144px;
height: 20px;
margin: 0;
position: absolute;
top: 0;
left: -96px;
+ .s_switch_toggle {
display: block;
position: absolute;
left: -2px;
top: -2px;
width: 16px;
height: 20px;
background-color: #000;
border: solid 2px #fff;
cursor: pointer;
@include transition-type(left,0.3);
}
&:checked + .s_switch_toggle {
left: 30px;
}
}
} }
} }
@@ -233,7 +317,7 @@
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
position: relative; position: relative;
z-index: 9; z-index: 99;
.sdm, .fn_g { .sdm, .fn_g {
display: inline-block; display: inline-block;
@@ -268,14 +352,21 @@
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
z-index: 10;
} }
.overview { .overview {
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
min-width: 100%; width: 100%;
height: 100%; height: 100%;
&:after {
content: "";
display: table;
width: 100%;
}
> .column { > .column {
float: left; float: left;
border-right: solid 1px #eee; border-right: solid 1px #eee;
@@ -329,7 +420,7 @@
} }
.scrollbar { .scrollbar {
position: absolute; position: absolute;
z-index: 9; z-index: 11;
visibility: hidden; visibility: hidden;
opacity: 0; opacity: 0;
@include transition-type(opacity, 0.3); @include transition-type(opacity, 0.3);
@@ -340,7 +431,7 @@
} }
&.sb_h { &.sb_h {
left: 0; left: 0;
bottom: -6px; bottom: 0;
height: 6px; height: 6px;
} }
&.sb_v { &.sb_v {
+216 -204
View File
@@ -72,6 +72,12 @@ a:focus {
content: ''; content: '';
clear: both; } clear: both; }
.valign:before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle; }
.o-loading { .o-loading {
font-size: 13px; } font-size: 13px; }
.fullsize .o-loading { .fullsize .o-loading {
@@ -80,14 +86,17 @@ a:focus {
font-size: 20px; } font-size: 20px; }
#thmbackground { #thmbackground {
min-height: 100%;
min-width: 980px;
width: 100%; width: 100%;
height: auto; height: 100%;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
z-index: -1; } z-index: -1;
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover; }
#bgover { #bgover {
position: fixed; position: fixed;
@@ -121,13 +130,14 @@ a:focus {
background-color: #fff; } background-color: #fff; }
.admbg2 { .admbg2 {
background-color: #ddd; } background-color: #dddddd; }
.admtxt { .admtxt {
color: #666; } color: #666; }
.admtxt:hover { a.admtxt.admbg2:hover {
color: #666; } color: #fff;
background-color: #aaaaaa; }
.hfn { .hfn {
font-size: 15px; font-size: 15px;
@@ -147,6 +157,15 @@ a:focus {
.ini_input:focus { .ini_input:focus {
outline: none; } outline: none; }
.text_ofl {
overflow: hidden; }
.text_ofl span {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis; }
/* - Opacity */ /* - Opacity */
.op00 { .op00 {
opacity: 0; } opacity: 0; }
@@ -238,7 +257,15 @@ a:focus {
.element { .element {
margin: 0 12px 12px 0; margin: 0 12px 12px 0;
float: left; float: left;
position: relative; } position: relative;
cursor: pointer;
-webkit-transition: all 0.2s ease;
-moz-transition: all 0.2s ease;
transition: all 0.2s ease; }
.element:active {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92); }
.group { .group {
float: left; float: left;
@@ -246,12 +273,14 @@ a:focus {
/* desktop layout */ /* desktop layout */
#container { #container {
padding: 48px 0 0 156px; } padding: 48px 0 0 156px;
min-width: 800px; }
#header { #header {
padding: 0 0 12px 0; padding: 0 0 12px 0;
min-width: 800px; height: 72px;
height: 72px; } position: relative;
z-index: 2; }
#side { #side {
width: 60px; width: 60px;
@@ -260,12 +289,13 @@ a:focus {
margin-right: 96px; margin-right: 96px;
top: 120px; top: 120px;
left: 0; left: 0;
z-index: 11; } z-index: 13; }
#holder { #holder {
height: 516px; height: 516px;
width: auto; width: auto;
position: relative; } position: relative;
z-index: 1; }
#rwidget { #rwidget {
height: 516px; } height: 516px; }
@@ -338,37 +368,59 @@ a:focus {
/* panel */ /* panel */
#panel_l { #panel_l {
background-color: #f0f0f0; background-color: #f7f7f7;
float: left; } float: left; }
#panel_r { #panel_r {
background-color: #fff;
margin-left: 252px; margin-left: 252px;
position: relative; } position: relative;
width: auto; }
/* Desktop Notification */ /* Desktop Notification */
#orbitnote { #orbitnote {
position: fixed; position: fixed;
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -206px; margin-left: -200px;
z-index: 99999; z-index: 99999;
width: 400px; width: 400px;
padding: 0 6px 6px 6px; -webkit-transition: height 2s ease;
background-color: #000; -moz-transition: height 2s ease;
background-color: rgba(0, 0, 0, 0.6); } transition: height 2s ease; }
#orbitnote .note_holder { #orbitnote .note_holder {
background-color: #f3f3f3;
border: solid 1px white;
border-top: none;
overflow: hidden; overflow: hidden;
padding: 24px 24px; } padding: 36px;
border: solid 2px #dddddd;
border-top: 0;
display: none; }
#orbitnote .note_holder .note_type { #orbitnote .note_holder .note_type {
float: left; } display: inline-block;
#orbitnote .note_holder .note_type img { vertical-align: middle;
display: block; } 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 { #orbitnote .note_holder .note_message {
color: #333; 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-size: 15px; }
/* Desktop Dialogue */ /* Desktop Dialogue */
@@ -378,7 +430,8 @@ a:focus {
height: 100%; height: 100%;
left: 0; left: 0;
top: 0; top: 0;
z-index: 12; } z-index: 12;
display: none; }
#orbitdiag .tile { #orbitdiag .tile {
background-color: #000; } background-color: #000; }
#orbitdiag .diag_holder { #orbitdiag .diag_holder {
@@ -402,7 +455,7 @@ a:focus {
font-size: 15px; font-size: 15px;
line-height: 36px; } line-height: 36px; }
#orbitdiag .diag_holder .diag_holder_inner .diag_btn:hover { #orbitdiag .diag_holder .diag_holder_inner .diag_btn:hover {
outline: solid 2px white; } outline: solid 2px #fff; }
/* Tile */ /* Tile */
.appname { .appname {
@@ -435,7 +488,7 @@ a:focus {
height: 60px; height: 60px;
margin: 0 auto; margin: 0 auto;
position: relative; } position: relative; }
[data-sizex="1"] .appicon { [data-sizex="1"] .appicon, .w1.h1 .appicon {
margin-top: 24px; } margin-top: 24px; }
#sections .appicon { #sections .appicon {
width: 30px; width: 30px;
@@ -480,6 +533,11 @@ a:focus {
cursor: move; cursor: move;
overflow: hidden; } overflow: hidden; }
.gs_w.dragging {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92); }
/* header drop menu */ /* header drop menu */
.sdm_mdr .sdm_o { .sdm_mdr .sdm_o {
top: 36px; } top: 36px; }
@@ -495,7 +553,7 @@ a:focus {
cursor: pointer; } cursor: pointer; }
.theme_thumb, .stock_wallpaper img { .theme_thumb, .stock_wallpaper img {
border: solid 1px white; border: solid 1px #fff;
width: 120px; width: 120px;
margin: 0 auto; } margin: 0 auto; }
@@ -548,8 +606,9 @@ a:focus {
padding: 24px 0; padding: 24px 0;
margin-top: 12px; margin-top: 12px;
overflow: hidden; overflow: hidden;
border-top: solid 1px #eeeeee; border-top: solid 1px #eee; }
background-color: #fff; } .s_action .setting_btn {
margin-left: 12px; }
.setting_btn { .setting_btn {
display: block; display: block;
@@ -559,28 +618,76 @@ a:focus {
text-align: center; text-align: center;
border: 0; } border: 0; }
.group_search { /* Apps Manager */
#app_info {
float: left; 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 { .search_result {
float: left; float: left;
margin-right: 24px; overflow: hidden; }
max-width: 340px; } .search_result .message {
font-size: 15px;
.g_sep { word-wrap: break-word; }
width: 12px; .search_result .message b {
border-left: solid 1px white; font-size: 20px;
-webkit-box-sizing: border-box; display: block;
/* webkit */ margin-top: 12px; }
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
.grp { .grp {
height: 528px; height: 528px;
@@ -608,9 +715,10 @@ a:focus {
overflow: hidden; } overflow: hidden; }
.list_t_title { .list_t_title {
margin-bottom: 6px; padding-bottom: 6px;
color: #333; color: #000;
font-size: 15px; } font-size: 15px;
line-height: 1.3em; }
.list_t_des { .list_t_des {
line-height: 1.5em; line-height: 1.5em;
@@ -618,153 +726,34 @@ a:focus {
margin-bottom: 4px; margin-bottom: 4px;
font-size: 13px; } font-size: 13px; }
.list_item_function a { .list_item_function {
display: inline-block; position: absolute;
padding: 4px; right: 0;
font-size: 11px; bottom: -30px;
-webkit-text-size-adjust: none; } width: 100%;
height: 30px;
/* Journal Papers */ line-height: 30px;
[page-name="journal_p_list"] .list_t_item .inner { text-align: right;
padding-left: 30px; } -webkit-transition: all 0.3s ease;
[page-name="journal_p_list"] .list_item_action { -moz-transition: all 0.3s ease;
font-size: 12px; transition: all 0.3s ease; }
float: left; .list_item_function a {
margin-left: -30px; } display: inline-block;
[page-name="journal_p_list"] .list_item_action a { vertical-align: top;
display: block; margin-left: 4px;
width: 20px; padding: 0 6px;
height: 20px; font-size: 11px;
line-height: 20px; -webkit-text-size-adjust: none; }
margin: 1px 1px 6px 1px; } .list_item_function a :first-child {
[page-name="journal_p_list"] .list_item_action .icon-star-empty { margin-left: 0; }
color: #999; .datalist_item:hover .list_item_function {
font-size: 20px; } bottom: 0; }
[page-name="journal_p_list"] .list_item_action .icon-star {
color: #faa732;
font-size: 20px; }
[page-name="journal_p_list"] .list_item_action .icon-check-empty {
color: #999;
font-size: 20px; }
[page-name="journal_p_list"] .list_item_action .icon-check {
color: #333;
font-size: 20px; }
[page-name="journal_p_list"] .file_view .list_t_des {
overflow: hidden; }
[page-name="journal_p_list"] .file_view .file {
float: left;
width: 120px;
height: 50px;
padding: 6px;
margin: 1px;
position: relative;
-webkit-box-sizing: border-box;
/* webkit */
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
[page-name="journal_p_list"] .file_view .file:hover {
background-color: #f7f7f7; }
[page-name="journal_p_list"] .file_view .file img {
width: 38px;
height: 38px;
position: absolute;
left: 6px;
top: 6px; }
[page-name="journal_p_list"] .file_view .file .filetitle {
display: block;
width: 100%;
height: 38px;
padding-left: 40px;
overflow: hidden;
-webkit-box-sizing: border-box;
/* webkit */
-khtml-box-sizing: border-box;
/* konqueror */
-moz-box-sizing: border-box;
/* firefox */
-ms-box-sizing: border-box;
/* ie */
box-sizing: border-box;
/* css3 */ }
/* Journal Paper Add */
#paper_add .s_grid_con {
float: left;
height: 456px;
margin-left: 12px;
padding-left: 12px;
border-left: solid 1px #eeeeee; }
#paper_add .s_grid_con:first-child {
margin-left: 0;
padding-left: 0;
border: none; }
#paper_add .f_w {
width: 336px; }
#paper_add label {
margin-right: 0; }
/* Journal Journal list */
[page-name="journal_p_journal"] .datalist_item .inner {
padding-left: 30px; }
[page-name="journal_p_journal"] .list_item_action {
font-size: 12px;
float: left;
margin-left: -30px; }
[page-name="journal_p_journal"] .list_item_action i {
color: #999;
font-size: 20px;
display: block;
width: 20px;
height: 20px;
line-height: 20px;
margin: 1px 1px 6px 1px; }
[page-name="journal_p_journal"] .list_t_desc {
font-family: Arial, sans-serif;
font-size: 12px;
color: #999; }
/* Journal Co-Author */
[page-name="journal_p_coauthor"] .list_t_item {
height: 110px; }
[page-name="journal_p_coauthor"] .list_item_function a {
display: inline-block;
padding: 4px;
font-family: Arial, sans-serif;
font-size: 11px;
-webkit-text-size-adjust: none; }
[page-name="journal_p_coauthor"] .info {
font-family: Arial, sans-serif; }
[page-name="journal_p_coauthor"] .info li {
margin-bottom: 8px;
color: #999; }
[page-name="journal_p_coauthor"] .info .name {
font-size: 18px;
line-height: 24px;
color: #333; }
/* Journal Co-Author Relationship*/
[page-name="journal_p_coauthor_relation"] .edit_co_author_relation {
/*margin-left: -10px;*/ }
[page-name="journal_p_coauthor_relation"] .form_space {
margin-bottom: 10px;
font-size: 18px;
font-family: Arial, sans-serif; }
/* Journal New Co-Author */
#new_co_author label {
margin-right: 0; }
/* App */ /* App */
.app_frame { .app_frame {
margin: 48px 96px 48px 156px; margin: 60px 0 48px 156px;
min-width: 800px; min-width: 800px;
min-height: 588px; min-height: 576px;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@@ -775,17 +764,40 @@ a:focus {
background-color: #fff; background-color: #fff;
position: absolute; position: absolute;
width: 100%; } width: 100%; }
.app_frame #header .icon-remove { .app_frame .app_holder iframe {
display: block; width: 100%; }
float: right; .app_frame .app_frame_header {
line-height: 60px; height: 60px; }
font-size: 20px; .app_frame .app_frame_header .icon-remove, .app_frame .app_frame_header .icon-minus {
cursor: pointer; } 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 */ /*Tooltip popup */
.desktop_toolpopup { .desktop_toolpopup {
position: absolute; position: absolute;
z-index: 10px; z-index: 10;
display: none; display: none;
padding: 12px; padding: 12px;
cursor: default; cursor: default;
+213 -191
View File
@@ -68,6 +68,12 @@ a:focus { outline: none; }
content: ''; content: '';
clear: both; clear: both;
} }
.valign:before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
.o-loading { .o-loading {
font-size: 13px; font-size: 13px;
// font-weight: normal; // font-weight: normal;
@@ -80,14 +86,17 @@ a:focus { outline: none; }
} }
} }
#thmbackground { #thmbackground {
min-height: 100%;
min-width: 980px;
width: 100%; width: 100%;
height: auto; height: 100%;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
z-index: -1; z-index: -1;
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
} }
#bgover { #bgover {
position: fixed; position: fixed;
@@ -113,9 +122,12 @@ a:focus { outline: none; }
/* Desktop Global Style */ /* Desktop Global Style */
.admbg { background-color: #fff; } .admbg { background-color: #fff; }
.admbg2 { background-color: #ddd; } .admbg2 { background-color: $gray; }
.admtxt { color: #666; } .admtxt { color: #666; }
.admtxt:hover { color: #666; } a.admtxt.admbg2:hover {
color: #fff;
background-color: darken($gray, 20%);
}
.hfn { .hfn {
font-size: 15px; font-size: 15px;
line-height: 36px; line-height: 36px;
@@ -130,6 +142,17 @@ a:focus { outline: none; }
border: 0; border: 0;
} }
.ini_input:focus { outline: none; } .ini_input:focus { outline: none; }
.text_ofl {
overflow: hidden;
span {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}
}
/* - Opacity */ /* - Opacity */
@for $i from 0 through 10 { @for $i from 0 through 10 {
@@ -166,7 +189,15 @@ a:focus { outline: none; }
margin: 0 12px 12px 0; margin: 0 12px 12px 0;
float: left; float: left;
position: relative; position: relative;
cursor: pointer;
@include transition-type(all,0.2);
&:active {
-webkit-transform: scale(0.92);
-moz-transform: scale(0.92);
transform: scale(0.92);
} }
}
.group{ .group{
float: left; float: left;
margin-right: 24px; margin-right: 24px;
@@ -175,11 +206,13 @@ a:focus { outline: none; }
/* desktop layout */ /* desktop layout */
#container { #container {
padding: 48px 0 0 156px; padding: 48px 0 0 156px;
min-width: 800px;
} }
#header { #header {
padding: 0 0 12px 0; padding: 0 0 12px 0;
min-width: 800px;
height: 72px; height: 72px;
position: relative;
z-index: 2;
} }
#side { #side {
width: 60px; width: 60px;
@@ -188,12 +221,13 @@ a:focus { outline: none; }
margin-right: 96px; margin-right: 96px;
top: 120px; top: 120px;
left: 0; left: 0;
z-index: 11; z-index: 13;
} }
#holder { #holder {
height: 516px; height: 516px;
width: auto; width: auto;
position: relative; position: relative;
z-index: 1;
} }
#rwidget { #rwidget {
height: 516px; height: 516px;
@@ -282,12 +316,14 @@ a:focus { outline: none; }
} }
/* panel */ /* panel */
#panel_l { #panel_l {
background-color: #f0f0f0; background-color: lighten($gray, 10%);
float: left; float: left;
} }
#panel_r { #panel_r {
background-color: #fff;
margin-left: 252px; margin-left: 252px;
position: relative; position: relative;
width: auto;
} }
/* Desktop Notification */ /* Desktop Notification */
@@ -295,30 +331,46 @@ a:focus { outline: none; }
position: fixed; position: fixed;
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -206px; margin-left: -200px;
z-index: 99999; z-index: 99999;
width: 400px; width: 400px;
padding: 0 6px 6px 6px; @include transition-type(height,2);
background-color: #000;
background-color: rgba(0,0,0,0.6);
.note_holder { .note_holder {
background-color: #f3f3f3;
border: solid 1px #fff;
border-top: none;
overflow: hidden; overflow: hidden;
padding: 24px 24px; padding: 36px;
border: solid 2px $gray;
border-top: 0;
display: none;
.note_type { .note_type {
float: left; display: inline-block;
vertical-align: middle;
width: 60px;
height: 60px;
color: #fff;
img { .sign {
display: block; display: block;
font-size: 40px;
width: 40px;
height: 40px;
padding: 10px;
border-radius: 30px;
text-align: center;
&.icon-ok { background-color: #5BB75B; }
&.icon-exclamation-sign { background-color: #DA4F49; }
&.icon-warning-sign { background-color: #FAA732; }
} }
} }
.note_message { .note_message {
color: #333; color: #333;
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-size: 15px;
// font-weight: normal; // font-weight: normal;
} }
@@ -333,6 +385,7 @@ a:focus { outline: none; }
left: 0; left: 0;
top: 0; top: 0;
z-index: 12; z-index: 12;
display: none;
.tile { .tile {
background-color: #000; background-color: #000;
@@ -411,7 +464,7 @@ a:focus { outline: none; }
margin: 0 auto; margin: 0 auto;
position: relative; position: relative;
[data-sizex="1"] & { [data-sizex="1"] &, .w1.h1 & {
margin-top: 24px; margin-top: 24px;
} }
#sections & { #sections & {
@@ -460,11 +513,11 @@ a:focus { outline: none; }
cursor: move; cursor: move;
overflow: hidden; overflow: hidden;
} }
// .app.gs_w:active { .gs_w.dragging {
// -webkit-transform: scale(0.9); -webkit-transform: scale(0.92);
// -moz-transform: scale(0.9); -moz-transform: scale(0.92);
// transform: scale(0.9); transform: scale(0.92);
// } }
/* header drop menu */ /* header drop menu */
.sdm_mdr .sdm_o { top: 36px; } .sdm_mdr .sdm_o { top: 36px; }
@@ -546,7 +599,11 @@ a:focus { outline: none; }
margin-top: 12px; margin-top: 12px;
overflow: hidden; overflow: hidden;
border-top: solid 1px #eee; border-top: solid 1px #eee;
background-color: #fff; // background-color: #fff;
.setting_btn {
margin-left: 12px;
}
} }
.setting_btn { .setting_btn {
display: block; display: block;
@@ -558,21 +615,74 @@ a:focus { outline: none; }
border: 0; border: 0;
} }
/* Apps Manager */
.group_search{ #app_info {
float: left; float: left;
width: 420px;
height: 516px;
margin-right: 36px; margin-right: 36px;
display: none;
.app_info_header {
height: 120px;
margin: -12px -12px 12px -12px;
position: relative;
background-color: lighten($gray, 10%);
@include box-sizing;
> * {
height: 100%;
}
.app_info_icon {
display: block;
margin: 0 auto;
margin-top: 30px;
@include box-sizing;
}
.app_info_name {
display: inline-block;
vertical-align: middle;
font-size: 2em;
width: 300px;
word-wrap: break-word;
}
.panel_close {
position: absolute;
right: 12px;
top: 12px;
font-size: 20px;
}
}
.app_info_list {
line-height: 1.5em;
overflow: hidden;
label {
color: darken($gray, 20%);
}
}
}
#app_list {
float: left;
.element > * {
cursor: pointer;
}
} }
.search_result{ .search_result{
float: left; float: left;
margin-right: 24px; overflow: hidden;
max-width: 340px;
} .message {
.g_sep { font-size: 15px;
width: 12px; word-wrap: break-word;
border-left: solid 1px #fff;
@include box-sizing; b {
font-size: 20px;
display: block;
margin-top: 12px;
}
}
} }
@@ -596,11 +706,14 @@ a:focus { outline: none; }
} }
/* list item */ /* list item */
.list_t_item { overflow: hidden; } .list_t_item {
overflow: hidden;
}
.list_t_title { .list_t_title {
margin-bottom: 6px; padding-bottom: 6px;
color: #333; color: #000;
font-size: 15px; font-size: 15px;
line-height: 1.3em;
// font-weight: normal; // font-weight: normal;
} }
.list_t_des { .list_t_des {
@@ -609,164 +722,38 @@ a:focus { outline: none; }
margin-bottom: 4px; margin-bottom: 4px;
font-size: 13px; font-size: 13px;
} }
.list_item_function a { .list_item_function {
display: inline-block; position: absolute;
padding: 4px; right: 0;
font-size: 11px; bottom: -30px;
-webkit-text-size-adjust: none; width: 100%;
} height: 30px;
line-height: 30px;
text-align: right;
@include transition-type(all,0.3);
/* Journal Papers */ a {
[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 {
display: inline-block; display: inline-block;
padding: 4px; vertical-align: top;
font-family: Arial, sans-serif; margin-left: 4px;
padding: 0 6px;
font-size: 11px; font-size: 11px;
-webkit-text-size-adjust: none; -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*/ :first-child {
[page-name="journal_p_coauthor_relation"]{ margin-left: 0;
.edit_co_author_relation { }
/*margin-left: -10px;*/
} }
.form_space { .datalist_item:hover & {
margin-bottom: 10px; bottom: 0;
font-size: 18px;
font-family: Arial, sans-serif;
} }
} }
/* Journal New Co-Author */
#new_co_author label {
margin-right: 0;
}
/* App */ /* App */
.app_frame { .app_frame {
margin: 48px 96px 48px 156px; margin: 60px 0 48px 156px;
min-width: 800px; min-width: 800px;
min-height: 588px; min-height: 576px;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@@ -778,20 +765,55 @@ a:focus { outline: none; }
background-color: #fff; background-color: #fff;
position: absolute; position: absolute;
width: 100%; width: 100%;
iframe {
width: 100%;
}
} }
#header .icon-remove { .app_frame_header{
display: block; height: 60px;
float: right;
line-height: 60px; .icon-remove, .icon-minus {
font-size: 20px; 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; cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 36px;
font-size: 15px;
float: left;
.icon-remove {
float: right;
line-height: 36px;
}
}
> :first-child {
// margin-top: 48px;
} }
} }
/*Tooltip popup */ /*Tooltip popup */
.desktop_toolpopup { .desktop_toolpopup {
position: absolute; position: absolute;
z-index: 10px; z-index: 10;
display: none; display: none;
padding: 12px; padding: 12px;
cursor: default; cursor: default;
@@ -1,10 +1,10 @@
@media only screen and (min-width: 1240px){ @media only screen and (min-width: 1240px){
#panel_r.pw { width: 800px; } /*#panel_r.pw { width: 800px; }*/
} }
@media only screen and (min-width: 1900px){ @media only screen and (min-width: 1900px){
#panel_r.pw { width: 1400px; } /*#panel_r.pw { width: 1400px; }*/
} }
@@ -149,7 +149,7 @@ Version: 3.3.1 Timestamp: Wed Feb 20 09:57:22 PST 2013
margin-top: 4px; } margin-top: 4px; }
.select2-search input.select2-active { .select2-search input.select2-active {
background: white image-url("select2-spinner.gif") no-repeat 100%; } background: white url("select2/spinner.gif") no-repeat 100%; }
.select2-container-active .select2-choice, .select2-container-active .select2-choice,
.select2-container-active .select2-choices { .select2-container-active .select2-choices {
@@ -261,7 +261,7 @@ disabled look for disabled choices in the results dropdown
display: none; } display: none; }
.select2-more-results.select2-active { .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 { .select2-more-results {
background: #f4f4f4; background: #f4f4f4;
@@ -271,7 +271,7 @@ disabled look for disabled choices in the results dropdown
.select2-container.select2-container-disabled .select2-choice { .select2-container.select2-container-disabled .select2-choice {
background-color: #f4f4f4; background-color: #f4f4f4;
background-image: none; background-image: none;
border: 1px solid #dddddd; border: 1px solid #ddd;
cursor: default; } cursor: default; }
.select2-container.select2-container-disabled .select2-choice div { .select2-container.select2-container-disabled .select2-choice div {
@@ -323,10 +323,10 @@ disabled look for disabled choices in the results dropdown
background: transparent !important; } background: transparent !important; }
.select2-container-multi .select2-choices .select2-search-field input.select2-active { .select2-container-multi .select2-choices .select2-search-field input.select2-active {
background: white image-url("select2-spinner.gif") no-repeat 100% !important; } background: white url("select2/spinner.gif") no-repeat 100% !important; }
.select2-default { .select2-default {
color: #999999 !important; } color: #999 !important; }
.select2-container-multi .select2-choices .select2-search-choice { .select2-container-multi .select2-choices .select2-search-choice {
padding: 3px 5px 3px 18px; padding: 3px 5px 3px 18px;
@@ -374,12 +374,12 @@ disabled look for disabled choices in the results dropdown
.select2-container-multi.select2-container-disabled .select2-choices { .select2-container-multi.select2-container-disabled .select2-choices {
background-color: #f4f4f4; background-color: #f4f4f4;
background-image: none; background-image: none;
border: 1px solid #dddddd; border: 1px solid #ddd;
cursor: default; } cursor: default; }
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
padding: 3px 5px 3px 5px; padding: 3px 5px 3px 5px;
border: 1px solid #dddddd; border: 1px solid #ddd;
background-image: none; background-image: none;
background-color: #f4f4f4; } background-color: #f4f4f4; }
@@ -155,7 +155,7 @@ Version: 3.3.1 Timestamp: Wed Feb 20 09:57:22 PST 2013
} }
.select2-search input.select2-active { .select2-search input.select2-active {
background: #fff image-url('select2-spinner.gif') no-repeat 100%; background: #fff url('select2/spinner.gif') no-repeat 100%;
} }
.select2-container-active .select2-choice, .select2-container-active .select2-choice,
@@ -273,7 +273,7 @@ disabled look for disabled choices in the results dropdown
} }
.select2-more-results.select2-active { .select2-more-results.select2-active {
background: #f4f4f4 image-url('select2-spinner.gif') no-repeat 100%; background: #f4f4f4 url('select2/spinner.gif') no-repeat 100%;
} }
.select2-more-results { .select2-more-results {
@@ -352,7 +352,7 @@ disabled look for disabled choices in the results dropdown
} }
.select2-container-multi .select2-choices .select2-search-field input.select2-active { .select2-container-multi .select2-choices .select2-search-field input.select2-active {
background: #fff image-url('select2-spinner.gif') no-repeat 100% !important; background: #fff url('select2/spinner.gif') no-repeat 100% !important;
} }
.select2-default { .select2-default {
+4 -1
View File
@@ -12,6 +12,9 @@
.main-list { .main-list {
margin-bottom: 0; margin-bottom: 0;
} }
#filter .main-list, #filter + .main-list {
table-layout: fixed;
}
.main-wrap>.main-list thead th { .main-wrap>.main-list thead th {
background-color: transparent; background-color: transparent;
border-right: medium none; border-right: medium none;
@@ -36,7 +39,7 @@
} }
.main-list tbody .quick-edit .nav { .main-list tbody .quick-edit .nav {
position: absolute; position: absolute;
width: 350px; width: 440px;
left: -8px; left: -8px;
} }
.main-list tbody .quick-edit .nav .dropdown-menu { .main-list tbody .quick-edit .nav .dropdown-menu {
+150
View File
@@ -0,0 +1,150 @@
.o-question {
font-size: 15px;
}
.o-question input[type=checkbox], .o-question input[type=radio] {
margin: 0;
}
.o-question textarea {
resize: vertical;
}
.o-question-topic {
font-size: 2em;
line-height: normal;
margin: 0;
padding: 0.5em 0;
}
.o-question-description {
font-size: 0.9em;
line-height: 1.5em;
}
.o-question-list {
clear: both;
margin: 40px 0;
padding: 0;
font-weight: bold;
}
.o-question-list > li {
margin: 0 0 0 40px;
padding: 16px 0;
border-top: solid 1px #eee;
position: relative;
}
.o-question-list > li .required-star {
position: absolute;
left: -42px;
padding-top: 4px;
}
.o-question-list > li:first-child {
border: 0;
}
.o-question-title {
font-weight: bold;
font-size: 1.2em;
line-height: 1.5em;
margin-bottom: 16px;
}
.o-question-title + .o-question-description {
font-weight: normal;
background-color: #f6f6f6;
padding: 16px;
position: relative;
margin-top: 20px;
width: 90%;
}
.o-question-title + .o-question-description:before {
display: block;
content: "";
border-left: 12px solid transparent;
border-right: 12px solid transparent;
border-bottom: 12px solid #f6f6f6;
position: absolute;
top: -12px;
left: 16px;
}
.o-question-title + input[type=text],
.o-question-title + textarea,
.o-question-title + select,
.o-question-description + input[type=text],
.o-question-description + textarea,
.o-question-description + select {
display: block;
}
.o-question-title + input[type=text], .o-question-title + textarea {
border: solid 1px #ccc;
padding: 6px;
margin: 20px 0;
line-height: 24px;
}
.o-question-title + input[type=text] {
width: 40%;
}
.o-question-title + textarea {
width: 70%;
}
.o-question-group {
margin: 20px 0;
padding: 0;
}
.o-question-option {
font-weight: normal;
}
.o-question-group.view-list {
list-style: none;
}
.o-question-group.view-list .o-question-option {}
.o-question-group.view-list > li {
margin-top: 8px;
}
.o-question-group.view-list > li:first-child {
margin: 0;
}
.o-question-group.view-list > li > * {
display: inline-block;
margin: 0;
padding: 0;
vertical-align: middle;
}
.o-question-group.view-list > li input + .o-question-option {
margin: 0 0 0 12px;
}
.o-question-group.view-dropdown {
height: 24px;
line-height: 24px;
}
.o-question-group.view-grid {
border-collapse: collapse;
max-width: 90%;
min-width: 50%;
width: auto;
}
.o-question-group.view-grid th, .o-question-group.view-grid td {
padding: 6px;
}
.o-question-group.view-grid thead th {
text-align: center;
}
.o-question-group.view-grid tbody th {}
.o-question-group.view-grid tbody .odd .o-question-title, .o-question-group.view-grid tbody .odd td {
background-color: #f6f6f6;
}
.o-question-group.view-grid .o-question-title {
font-size: 1em;
}
.o-question-group.view-grid tbody .odd .o-question-title {
background-color: transparent;
}
.o-question-group.view-grid tbody .odd td {}
.o-question-group.view-grid tbody tr:hover td {
background-color: #aaa;
}
.o-question-group.view-grid tbody td {
vertical-align: middle;
text-align: center;
}
.o-question-group.view-grid tbody td input {
vertical-align: baseline;
}
.o-question-action {
padding: 20px;
background-color: #f6f6f6;
}
+52
View File
@@ -0,0 +1,52 @@
@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,700);
body {
margin: 0;
padding: 50px 0;
background-color: #eee;
font-family: 'Open Sans', sans-serif;
}
.wrapper {
background: #FFFFFF none;
box-shadow: 0 0 50px rgba(0, 0, 0, 0.1);
margin: 0 auto;
overflow: hidden;
width: 980px;
}
.wrapper > h1 {
margin: 0;
padding: 20px;
font-family: 'Open Sans', sans-serif;
font-weight: bold;
}
section {
border-top: dashed 3px #eee;
padding: 40px;
overflow: hidden;
}
section:first-child {
border: 0;
padding-top: 0;
}
section > h2 {
font-size: 13px;
font-weight: bold;
border: solid 1px #ddd;
background-color: #2676C0;
color: #fff;
display: inline-block;
padding: 0 16px;
box-shadow: 0 1px 1px #fff, 0 2px 6px rgba(0,0,0,0.1);
}
.side {
float: right;
width: 189px;
padding-left: 20px;
border-left: solid 1px #eee;
}
.main {
float: left;
width: 710px;
padding-right: 20px;
}
+5 -5
View File
@@ -11,7 +11,7 @@ class Admin::AssetsController < OrbitBackendController
def new def new
@asset = Asset.new @asset = Asset.new
@asset_categories = AssetCategory.all @asset_categories = AssetCategory.all
@tags = AssetTag.all @tags = get_tags
respond_to do |format| respond_to do |format|
format.html {} format.html {}
format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/new'} } format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/new'} }
@@ -21,7 +21,7 @@ class Admin::AssetsController < OrbitBackendController
def edit def edit
@asset = Asset.find(params[:id]) @asset = Asset.find(params[:id])
@asset_categories = AssetCategory.all @asset_categories = AssetCategory.all
@tags = AssetTag.all @tags = get_tags
respond_to do |format| respond_to do |format|
format.html {} format.html {}
format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/edit'} } format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/edit'} }
@@ -46,7 +46,7 @@ class Admin::AssetsController < OrbitBackendController
else else
flash[:error] = t('create.fail') flash[:error] = t('create.fail')
@asset_categories = AssetCategory.all @asset_categories = AssetCategory.all
@tags = AssetTag.all @tags = get_tags
respond_to do |format| respond_to do |format|
format.js { format.js {
if params[:uploader] if params[:uploader]
@@ -69,7 +69,7 @@ class Admin::AssetsController < OrbitBackendController
else else
flash[:error] = t('update.fail') flash[:error] = t('update.fail')
@asset_categories = AssetCategory.all @asset_categories = AssetCategory.all
@tags = AssetTag.all @tags = get_tags
respond_to do |format| respond_to do |format|
format.html { render :action => :edit } format.html { render :action => :edit }
format.js { render 'js/reload_pop_up', :locals => {:value => @asset, :values => nil, :partial => 'admin/assets/edit', :locals => {:is_html => false}} } format.js { render 'js/reload_pop_up', :locals => {:value => @asset, :values => nil, :partial => 'admin/assets/edit', :locals => {:is_html => false}} }
@@ -96,7 +96,7 @@ class Admin::AssetsController < OrbitBackendController
def file_upload def file_upload
@asset = Asset.new @asset = Asset.new
@asset_categories = AssetCategory.all @asset_categories = AssetCategory.all
@tags = AssetTag.all @tags = get_tags
render :layout => false render :layout => false
end end
+10 -1
View File
@@ -22,6 +22,11 @@ class Admin::PagePartsController < OrbitBackendController
@part = PagePart.find(params[:id]) @part = PagePart.find(params[:id])
@r_tag = @part.public_r_tag.blank? ? LIST[:public_r_tags][0] : @part.public_r_tag @r_tag = @part.public_r_tag.blank? ? LIST[:public_r_tags][0] : @part.public_r_tag
@tag_objects = @r_tag.classify.constantize.all rescue nil @tag_objects = @r_tag.classify.constantize.all rescue nil
if @r_tag.eql?('tag_cloud')
@tag_objects = ModuleApp.where(has_tag: true)
else
@tag_objects = @r_tag.classify.constantize.all rescue nil
end
@module_apps = ModuleApp.for_widget_select @module_apps = ModuleApp.for_widget_select
@categories = nil @categories = nil
@@ -119,7 +124,11 @@ class Admin::PagePartsController < OrbitBackendController
def reload_r_tag_options def reload_r_tag_options
@part = PagePart.find params[:id] @part = PagePart.find params[:id]
@r_tag = params[:type] @r_tag = params[:type]
@tag_objects = @r_tag.classify.constantize.all rescue nil if params[:type].eql?('tag_cloud')
@tag_objects = ModuleApp.where(has_tag: true)
else
@tag_objects = @r_tag.classify.constantize.all rescue nil
end
respond_to do |format| respond_to do |format|
format.js {} format.js {}
end end
+5 -19
View File
@@ -2,16 +2,10 @@ class Admin::TagsController < OrbitBackendController
before_filter :force_order_for_visitor,:only=>[:index] before_filter :force_order_for_visitor,:only=>[:index]
before_filter :force_order_for_user,:except => [:index] before_filter :force_order_for_user,:except => [:index]
before_filter :for_app_sub_manager,:except => [:index] before_filter :for_app_sub_manager,:except => [:index]
# layout 'new_admin'
# before_filter :authenticate_user!
# before_filter :is_admin?
# before_filter :set_module_app # before_filter :set_module_app
def index def index
get_tags @tags = get_tags
@module_app_id = @module_app.id rescue nil
end end
def new def new
@@ -23,12 +17,7 @@ class Admin::TagsController < OrbitBackendController
end end
def create def create
if params[:tag][:module_app_id].blank? @tag = @module_app ? @module_app.tags.create(params[:tag]) : Tag.create(params[:tag])
@tag = Tag.create(params[:tag])
else
module_app = ModuleApp.find(params[:tag][:module_app_id])
@tag = eval("#{module_app.key.camelize}Tag").create(params[:tag])
end
end end
def update def update
@@ -47,15 +36,12 @@ class Admin::TagsController < OrbitBackendController
protected protected
def get_tags def get_tags
@tags = (@module_app ? @module_app.tags : Tag.all) @tags = @module_app.blank? ? Tag.all : @module_app.tags
end end
def setup_vars def setup_vars
@app_key = request.env['HTTP_REFERER'].split('/')[4] @module_app = ModuleApp.find(params[:module_app_id]) if params[:module_app_id]
if @app_key @module_app_id = @module_app.id rescue nil
@app_key.gsub!(/[?].*/, '')
@module_app = ModuleApp.first(conditions: {:key => @app_key})
end
end end
end end
@@ -0,0 +1,8 @@
class Admin::UserActionsController < OrbitBackendController
layout "new_admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
@user_actions = UserAction.all
end
end
+190 -21
View File
@@ -3,8 +3,8 @@ class ApplicationController < ActionController::Base
include ParserFrontEnd, ParserBackEnd, ApplicationHelper include ParserFrontEnd, ParserBackEnd, ApplicationHelper
include OrbitApp::ErrorHandlers::PageErrorHandler include OrbitApp::ErrorHandlers::PageErrorHandler
include OrbitApp::ErrorHandlers::ObjectAuthErrorHandler include OrbitApp::ErrorHandlers::ObjectAuthErrorHandler
include OrbitApp::ErrorHandlers::ModuleAppErrorHandler include OrbitApp::ErrorHandlers::ModuleAppErrorHandler
rescue_from ObjectAuthError, :with => :render_object_auth_error rescue_from ObjectAuthError, :with => :render_object_auth_error
rescue_from ModuleAppError, :with => :render_module_app_error rescue_from ModuleAppError, :with => :render_module_app_error
@@ -29,15 +29,16 @@ class ApplicationController < ActionController::Base
def set_current_user def set_current_user
User.current = current_or_guest_user User.current = current_or_guest_user
UserActionRecoder.perform(current_or_guest_user,params.to_s)
end end
def front_end_available(module_app_title='') def front_end_available(module_app_title='')
app_controller = ModuleApp.first(conditions: {:key => module_app_title} ) app_controller = ModuleApp.first(conditions: {:key => module_app_title} )
unless app_controller.enable_frontend? unless app_controller.enable_frontend?
render :nothing => true render :nothing => true
end end
end end
def get_all_app_engines def get_all_app_engines
ary = ["vender/plugins/new_blog"] ary = ["vender/plugins/new_blog"]
app_engines = ary.collect{|t| app_engines = ary.collect{|t|
@@ -50,23 +51,23 @@ class ApplicationController < ActionController::Base
def flaten_controller def flaten_controller
ary=[] ary=[]
Find.find(File.join(Rails.root , 'vendor/plugins/')) { |name| Find.find(File.join(Rails.root , 'vendor/plugins/')) { |name|
require_dependency(name) if /_controller\.rb$/ =~ name require_dependency(name) if /_controller\.rb$/ =~ name
ary << name ary << name
} }
ary ary
end end
# Find the parent for the given item # Find the parent for the given item
def find_parent_item def find_parent_item
@parent_item = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil @parent_item = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil
end end
def auth_failed_in_backend def auth_failed_in_backend
#redirect_to admin_dashboards_url #redirect_to admin_dashboards_url
redirect_to root_path redirect_to root_path
end end
def for_admin_only def for_admin_only
if is_admin? if is_admin?
true true
@@ -75,7 +76,7 @@ class ApplicationController < ActionController::Base
auth_failed_in_backend auth_failed_in_backend
end end
end end
def for_app_manager def for_app_manager
if is_manager? if is_manager?
true true
@@ -84,7 +85,7 @@ class ApplicationController < ActionController::Base
auth_failed_in_backend auth_failed_in_backend
end end
end end
def for_app_sub_manager def for_app_sub_manager
if (@module_app.sub_managing_users.include?(current_or_guest_user) || is_manager?) if (@module_app.sub_managing_users.include?(current_or_guest_user) || is_manager?)
true true
@@ -107,9 +108,9 @@ class ApplicationController < ActionController::Base
flash[:error] = t("access.denied.object") flash[:error] = t("access.denied.object")
auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_or_guest_user) || is_manager? || is_admin? ) auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_or_guest_user) || is_manager? || is_admin? )
end end
# Render the page # Render the page
def render_page(args=nil) def render_page(args={})
if @item if @item
respond_to do |format| respond_to do |format|
format.html { render :text => parse_page_content(@item,args), :layout => 'page_layout' } format.html { render :text => parse_page_content(@item,args), :layout => 'page_layout' }
@@ -131,9 +132,9 @@ class ApplicationController < ActionController::Base
@orig_url = "http://#{request.host_with_port}/#{@item.path}?id=#{@object.id}" @orig_url = "http://#{request.host_with_port}/#{@item.path}?id=#{@object.id}"
render 'shared/render_share', :layout => false render 'shared/render_share', :layout => false
end end
protected protected
# Set I18n.locale # Set I18n.locale
def set_locale def set_locale
# update session if passed # update session if passed
@@ -147,24 +148,24 @@ class ApplicationController < ActionController::Base
else else
browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first rescue nil browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first rescue nil
condition = @site_in_use_locales.include?(browser_locale) condition = @site_in_use_locales.include?(browser_locale)
end end
session[:locale] = condition ? (browser_locale || session[:locale]) : I18n.default_locale.to_s session[:locale] = condition ? (browser_locale || session[:locale]) : I18n.default_locale.to_s
I18n.locale = session[:locale].to_sym I18n.locale = session[:locale].to_sym
end end
# Set the site variables # Set the site variables
def set_site def set_site
# set site if exist or create site # set site if exist or create site
@site = Site.first || Site.create({:valid_locales => [], :in_use_locales => []}) @site = Site.first || Site.create({:valid_locales => VALID_LOCALES, :in_use_locales => VALID_LOCALES})
session[:site] = @site.id session[:site] = @site.id
@site_in_use_locales = site_locales_default_head(@site.in_use_locales) @site_in_use_locales = site_locales_default_head(@site.in_use_locales)
@site_valid_locales = site_locales_default_head(@site.valid_locales) @site_valid_locales = site_locales_default_head(@site.valid_locales)
end end
def set_current_item def set_current_item
session[:current_page] = params[:id] || @item.id rescue nil session[:current_page] = params[:id] || @item.id rescue nil
end end
def decrypt_data(encrypted_data, encrypted_key, encrypted_iv) def decrypt_data(encrypted_data, encrypted_key, encrypted_iv)
site = Site.find(session[:site]) site = Site.find(session[:site])
if encrypted_data if encrypted_data
@@ -180,7 +181,7 @@ class ApplicationController < ActionController::Base
'' ''
end end
end end
def get_homepage def get_homepage
Page.root Page.root
end end
@@ -228,6 +229,174 @@ class ApplicationController < ActionController::Base
redirect_to ret redirect_to ret
end end
def get_sorted_and_filtered(object_class, query = nil, objects = nil)
objects ||= get_objects(object_class, query)
object_class = object_class.classify.constantize
if !params[:sort].blank?
options = params[:sort_options]
options = [options] if !options.class.eql?(Array)
options.each do |option|
if object_class.fields.include?(option)
if object_class.fields[option].type.to_s.eql?('Object') && !object_class.relations[option].nil?
objects = get_objects_from_referenced_objects(object_class.fields[option].options[:class_name].constantize, objects, option)
else
(objects = objects.order_by(option, params[:direction])) rescue nil
end
elsif object_class.relations.include?(option)
case object_class.relations[option].macro
when :references_one
a = Array.new
objects.each { |object| a << [get_string_value_from_object(object), object] }
sorted = params[:direction].eql?('asc') ? a.sort : a.sort.reverse!
objects = sorted.collect {|x| x[1] }
when :references_many, :references_and_referenced_in_many
objects = get_objects_from_self(object_class, objects, option)
when :referenced_in
objects = get_objects_from_referenced_objects(object_class.relations[option].class_name.constantize, objects, "#{option}_id")
end
elsif option.eql?('tags')
tag_array = @module_app.tags.inject([]){ |result, value|
result << [value.name, value]
}
params[:direction].eql?('asc') ? tag_array.sort : tag_array.sort.reverse!
sorted_objects = Array.new
tag_array.each do |x|
taggings = x[1].taggings
taggings.each {|tagging| sorted_objects << tagging.taggable }
end
# debugger
sorted_objects.flatten!
sorted_objects.uniq!
objects = get_with_nil(objects, option, sorted_objects)
end
end
end
if @filter
@filter.each do |key, value|
case key
when 'status'
a = Array.new
objects.each do |object|
value.each do |v|
a << object if object[v]
end
end
objects = a.uniq
when 'categories'
a = Array.new
objects.each do |object|
a << object if (value.include?(object.send("#{object.class.to_s.underscore}_category").id.to_s) rescue nil)
end
objects = a.uniq
when 'tags'
a = Array.new
objects.each do |object|
object.tags.each do |tag|
a << object if value.include?(tag.id.to_s)
end
end
objects = a.uniq
end if value.size > 0
end
end
Kaminari.paginate_array(filter_authorized_objects(objects)).page(params[:page]).per(10)
end
def get_viewable(object_class, query=nil)
objects = get_objects(object_class,query).order_by(:created_at, :desc)
Kaminari.paginate_array(objects).page(params[:page]).per(10)
end
def get_objects(object_class, query=nil)
object_class = object_class.classify.constantize
# debugger
# a=1
if query
if object_class.include?(Mongoid::Sortable)
objects = object_class.default_sort(params[:sort]).where(query)
else
objects = object_class.where(query)
end
else
if object_class.include?(Mongoid::Sortable)
objects = object_class.default_sort(params[:sort]).all
else
objects = object_class.all
end
end
objects
end
def get_objects_from_referenced_objects(object_class, objects, option)
referer_ids = objects.distinct(option)
referenced_objects = object_class.find(referer_ids) rescue nil
if referenced_objects
a = Array.new
referenced_objects.to_a.each { |referer| a << [get_string_value_from_object(referer), referer.id] }
sorted = params[:direction].eql?('asc') ? a.sort : a.sort.reverse!
sorted_objects = sorted.collect {|x| objects.where(option => x[1]).entries }
sorted_objects.flatten!
sorted_objects.uniq!
get_with_nil(objects, option, sorted_objects)
else
objects
end
end
def get_objects_from_self(object_class, objects, option)
referenced_class = object_class.relations[option].class_name.constantize
referenced_objects = referenced_class.all rescue nil
if referenced_objects
reverse_relation = nil
referenced_class.relations.each { |relation| reverse_relation = relation[1].name.to_s if relation[1].class_name.eql?(object_class.to_s) }
a = Array.new
referenced_objects.each { |referenced_object| a << [get_string_value_from_object(referenced_object), referenced_object] }
a.compact!
sorted = params[:direction].eql?('asc') ? a.sort : a.sort.reverse!
sorted_objects = Array.new
sorted.each {|x| sorted_objects << x[1].send(reverse_relation) }
sorted_objects.flatten!
sorted_objects.uniq!
get_with_nil(objects, option, sorted_objects)
else
objects
end
end
def get_string_value_from_object(object)
s = object.name_translations[I18n.locale.to_s] unless s rescue nil
s = object.title_translations[I18n.locale.to_s] unless s rescue nil
s = object.name unless s rescue nil
s = object.title unless s rescue nil
s.downcase rescue ''
end
def get_with_nil(objects, option, sorted_objects)
tmp = Array.new
objects.each { |object| tmp << [get_string_value_from_object(object), object] if (object.send(option).blank? || (object.send(option).size == 0 rescue nil)) }
sorted = params[:direction].eql?('asc') ? tmp.sort : tmp.sort.reverse!
sorted_tmp = sorted.collect {|a| a[1] }
a = params[:direction].eql?('asc') ? (sorted_tmp + sorted_objects) : (sorted_objects + sorted_tmp)
a.flatten
end
def filter_authorized_objects(objects)
if(!is_admin? || !is_manager?)
objects.delete_if{ |object|
if object.is_pending == true
if check_permission(:manager)
object.create_user_id != current_user.id
else
!object.send("#{object.class.to_s.underscore}_category").authed_users('fact_check').include?(current_user) rescue false
end
else
false
end
}
end
objects
end
private private
+24 -19
View File
@@ -12,34 +12,34 @@ class DefaultWidgetController< OrbitWidgetController
def query_for_default_widget def query_for_default_widget
ori_class_name = @default_widget["query"].split('.')[0] @ori_class_name = @default_widget["query"].split('.')[0]
result = nil result = nil
result_objects = nil result_objects = nil
if !params["tag_id"].blank? if !params["tag_id"].blank?
@tags = Tag.find(params["tag_id"]) rescue nil
result_ids = nil
result_ids = @tags.collect{|tag| tag.send(ori_class_name.downcase.pluralize).entries.collect{|t| t.id}}
if params["category_id"].blank? #has tag no cate if params["category_id"].blank? #has tag no cate
#nothing result = @ori_class_name.constantize.where(:tagged_ids.in => params["tag_id"])
else #has tag and cate else #has tag and cate
# result_ids = @tags.collect{|tag| tag.send(ori_class_name.downcase.pluralize).where(:#{get_category_field_name(ori_class_name)}.in=>params["category_id"]).available_for_lang(I18n.locale).can_display.collect{|t| t.id}}.flatten result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'], :tagged_ids.in => params['tag_id'])")
result_ids << eval("#{ori_class_name}.where(:#{get_category_field_name(ori_class_name)}.in=>params['category_id']).entries.collect{|t| t.id}")
result_ids.flatten!
end end
result = eval("#{ori_class_name}.where(:id=>result_ids)")
elsif params["category_id"].blank? #no tag no cate elsif params["category_id"].blank? #no tag no cate
result = eval(@default_widget["query"]) result = eval(@default_widget["query"])
else #no tag has cate else #no tag has cate
result = eval("#{ori_class_name}.where(:#{get_category_field_name(ori_class_name)}.in=>params['category_id'])") result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'])")
end end
date_now = Time.now
result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate) result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate)
end end
def search_result
@search = query_for_default_widget.solr_search do
fulltext params[:search_query]
end
search_result = @search.results.collect{|result| result.id}
@items = eval(@ori_class_name).all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result)
end
def default_widget def default_widget
@search = params["search_query"].blank? ? false : true
if !params[:id].blank? if !params[:id].blank?
clicked_field_name = params["clicked_field_name"].to_sym clicked_field_name = params["clicked_field_name"].to_sym
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})") redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})")
@@ -64,8 +64,13 @@ class DefaultWidgetController< OrbitWidgetController
@fields = @page_part.widget_field @fields = @page_part.widget_field
@data_limit = @page_part.widget_data_count.is_a?(Fixnum) ? @page_part.widget_data_count : (@page_part.widget_data_count.to_i rescue 3) @data_limit = @page_part.widget_data_count.is_a?(Fixnum) ? @page_part.widget_data_count : (@page_part.widget_data_count.to_i rescue 3)
end end
if @paginate
@data = query_for_default_widget.includes(@widget_image_field).page(params[:page_main]).per(@data_limit) if @paginate || @search
if @search
@data = search_result.page(params[:page_main]).per(@data_limit) rescue []
else #regular listing
@data = query_for_default_widget.includes(@widget_image_field).page(params[:page_main]).per(@data_limit)
end
# @data = query_for_default_widget.limit(@data_limit).includes(@widget_image_field) # @data = query_for_default_widget.limit(@data_limit).includes(@widget_image_field)
else else
@data = query_for_default_widget.includes(@widget_image_field).limit(@data_limit) @data = query_for_default_widget.includes(@widget_image_field).limit(@data_limit)
@@ -85,9 +90,9 @@ class DefaultWidgetController< OrbitWidgetController
end end
end end
def get_category_field_name(ori_class_name) def get_category_field_name
ori_class_name = ori_class_name.constantize @ori_class_name = @ori_class_name.constantize
ori_class_name.fields.each_key do |key| @ori_class_name.fields.each_key do |key|
return key if key.include?('category_id') return key if key.include?('category_id')
end end
nil nil
@@ -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 render :layout => false
end end
def themes def get_themes
@themes = DesktopTheme.all @themes = DesktopTheme.all
# raise @themes.inspect # raise @themes.inspect
render "desktop/settings/themes", :layout => false render "desktop/settings/themes", :layout => false
@@ -42,6 +42,7 @@ class DesktopController< ApplicationController
end end
def connections def connections
@url = "http://fb.tp.rulingcom.com/login?callback=http://harry.tp.rulingcom.com/facebook/register_fb?user="+current_user.id.to_s
render "desktop/settings/connections", :layout => false render "desktop/settings/connections", :layout => false
end end
@@ -107,18 +108,19 @@ class DesktopController< ApplicationController
def getgroups def getgroups
@section = Section.find(params["sectionid"]) @section = Section.find(params["sectionid"])
@groups = @section.groups @groups = @section.groups
gr = Array.new gr = Array.new
@groups.each do |group| @groups.each do |group|
a = Array.new a = Array.new
t = group.tiles @t = group.tiles
t.each do |tile|
@t.each do |tile|
data_content = "" data_content = ""
jsfile = [] jsfile = []
cssfile = "" cssfile = ""
shape = "w1 h1" shape = "w1 h1"
fullsize = false
link = "" link = ""
icon= ""
fullsize = false
if tile.data_category == "widget" if tile.data_category == "widget"
widge = DesktopWidget.find(tile.desktop_widget_id.to_s) widge = DesktopWidget.find(tile.desktop_widget_id.to_s)
# data_content = widge.widget_layout.file # data_content = widge.widget_layout.file
@@ -127,21 +129,17 @@ class DesktopController< ApplicationController
cssfile = widge.css_default.file.as_json[:file] cssfile = widge.css_default.file.as_json[:file]
shape = widge.shape shape = widge.shape
title = widge.name title = widge.name
icon = widge.images.where(:name => widge.icon).first.file.url
# binding.pry # binding.pry
if not widge.fullsize.nil? fullsize = widge.fullsize
fullsize = widge.fullsize
end
else else
data_content = tile.data_content app = DesktopApp.find(tile.desktop_app_id.to_s)
title = tile.title title = app.name
case data_content link = app.url
when "envocab" icon = app.images.where(:name => app.icon).first.file.url
link = "http://www.english-vocabulary.eu/"
when "wikibooks"
link = "http://www.wikibooks.org"
end
end end
gr << {"id"=>tile.id,"data_category"=>tile.data_category,"data_content"=>data_content,"js"=>jsfile,"css"=>cssfile,"shape"=>shape,"position"=>tile.position,"row"=>tile.row,"column"=>tile.column, "title"=>title,"fullsize"=>fullsize,"link"=>link} 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 end
@@ -152,9 +150,11 @@ class DesktopController< ApplicationController
def widget_layout def widget_layout
widget = DesktopWidget.find(params[:id]) widget = DesktopWidget.find(params[:id])
link = '<link href="'+widget.css_default.file.to_s+'" media="screen" rel="stylesheet" type="text/css" />' # link = '<link href="'+widget.css_default.file.to_s+'" media="screen" rel="stylesheet" type="text/css" />'
css = widget.css_default.content;
css = "<style>" + css + "</style>"
content = widget.widget_layout.body content = widget.widget_layout.body
dhtml = link + content dhtml = css + content
render :text => dhtml.html_safe render :text => dhtml.html_safe
end end
@@ -194,6 +194,46 @@ class DesktopController< ApplicationController
end end
render :json=>a.to_json render :json=>a.to_json
end end
def getapplistforManager
@dwss = DesktopWidget.all
@dapps = DesktopApp.all
@tiles = Array.new
desktop = Desktop.find(params['desktopid'])
sections = desktop.sections
sections.each do |section|
groups = section.groups
groups.each do |group|
@tiles += group.tiles
end
end
@validtiles = Array.new
@allWidgets = Array.new
@dwss.each do |dw|
@id = dw.id
@validtiles = @tiles.select{|t| t.desktop_widget_id == @id}
@sections = Array.new
@validtiles.each do |vt|
grp = Group.find(vt.group_id)
sec = Section.find(grp.section_id);
@sections << {"id"=>sec.id,"name"=>sec.name}
end
@allWidgets << {"id"=>dw.id, "data_category"=> "widget","title" => dw.name, "version" => dw.version, "author"=>dw.author, "last_update"=>dw.updated_at, "icon"=>dw.images.where(:name=>dw.icon).first.file.url, "text_color" => dw.text_color, "background" => dw.bg_color, "sections" => @sections}
end
validtiles = Array.new
@dapps.each do |da|
@id = da.id
@validtiles = @tiles.select{|t| t.desktop_app_id == @id}
@sections = Array.new
@validtiles.each do |vt|
grp = Group.find(vt.group_id)
sec = Section.find(grp.section_id);
@sections << {"id"=>sec.id,"name"=>sec.name}
end
@allWidgets << {"id"=>da.id, "data_category"=> "app","title" => da.name, "version" => da.version, "author"=>da.author, "last_update"=>da.updated_at, "icon"=>da.images.where(:name=>da.icon).first.file.url, "sections" => @sections}
end
render :json=>@allWidgets.to_json
end
def newpositions def newpositions
@newpositions = params[:newpositions] @newpositions = params[:newpositions]
@@ -236,5 +276,48 @@ class DesktopController< ApplicationController
feed = Net::HTTP.get_response(URI.parse("https://mail.google.com/mail/feed/atom")).body feed = Net::HTTP.get_response(URI.parse("https://mail.google.com/mail/feed/atom")).body
render :xml=>feed render :xml=>feed
end end
def appactivation
@group = Section.find(params[:section_id]).groups.first
@type = params[:type]
if @type == "widget"
@widget = DesktopWidget.find(params[:id])
status = params[:status]
case status
when "true"
tile = Tile.new(data_category: "widget", position: 8, desktop_widget_id: @widget.id)
@group.tiles+=[tile]
@group.save
when "false"
tile = @group.tiles.where("desktop_widget_id"=>@widget.id).first
if tile != nil
tile.destroy
end
end
end
if @type == "app"
@app = DesktopApp.find(params[:id])
status = params[:status]
case status
when "true"
tile = Tile.new(data_category: "app", position: 8, desktop_app_id: @app.id)
@group.tiles+=[tile]
@group.save
when "false"
tile = @group.tiles.where("desktop_app_id"=>@app.id).first
if tile != nil
tile.destroy
end
end
end
b = Array.new
b = {"success"=>"true"}
render :json=>b.to_json
end
end end
@@ -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' require 'zip/zip'
def index def index
@desktopWidgets = DesktopWidget.all
end end
def upload def upload
@@ -21,6 +22,19 @@ class DesktopWidgetsController < OrbitBackendController
temp_file.close temp_file.close
end end
end end
def edit
@dw = DesktopWidget.find(params[:id])
end
def update
@dw = DesktopWidget.find(params[:id])
if(params[:desktop_widget])
@imagefile = params[:desktop_widget][:image]
@dw.images.build(:file => @imagefile)
@dw.save
end
redirect_to action: "index"
end
def unzip_widget(file, zip_name) def unzip_widget(file, zip_name)
Zip::ZipFile.open(file) { |zip_file| Zip::ZipFile.open(file) { |zip_file|
+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
+5
View File
@@ -38,6 +38,11 @@ class FrontController < ApplicationController
@ad_images = AdImage.all @ad_images = AdImage.all
end end
def show_tag_cloud
module_app = ModuleApp.find(params[:id]) rescue nil
@tags = module_app.sorted_tags_for_cloud
end
private private
def menu_level(page, current_page, current, menu) def menu_level(page, current_page, current, menu)
+6 -153
View File
@@ -1,11 +1,12 @@
class OrbitBackendController < ApplicationController class OrbitBackendController < ApplicationController
include OrbitCoreLib::AppBackendUtility include OrbitCoreLib::AppBackendUtility
include OrbitCoreLib::PermissionUtility include OrbitCoreLib::PermissionUtility
include OrbitTag::Tagging
include AdminHelper include AdminHelper
include ApplicationHelper include ApplicationHelper
layout 'new_admin' layout 'new_admin'
def setup_vars def setup_vars
@app_title ||= controller_path.split('/')[1].singularize @app_title ||= controller_path.split('/')[1].singularize
@module_app ||= ModuleApp.first(conditions: {:key => @app_title} ) @module_app ||= ModuleApp.first(conditions: {:key => @app_title} )
@@ -23,163 +24,15 @@ class OrbitBackendController < ApplicationController
def force_order_for_user def force_order_for_user
setup_vars setup_vars
set_current_user set_current_user
authenticate_user! authenticate_user!
check_user_can_use check_user_can_use
end end
def check_user_can_use def check_user_can_use
unless check_permission unless check_permission
#redirect_to polymorphic_path(['panel',@app_title,'back_end','public']) #redirect_to polymorphic_path(['panel',@app_title,'back_end','public'])
redirect_to root_url redirect_to root_url
end end
end end
end
def get_sorted_and_filtered(object_class, query=nil)
objects = get_objects(object_class, query)
object_class = object_class.classify.constantize
if !params[:sort].blank?
options = params[:sort_options]
options = [options] if !options.class.eql?(Array)
options.each do |option|
if object_class.fields.include?(option)
if object_class.fields[option].type.to_s.eql?('Object') && !object_class.relations[option].nil?
objects = get_objects_from_referenced_objects(object_class.fields[option].options[:class_name].constantize, objects, option)
else
(objects = objects.order_by(option, params[:direction])) rescue nil
end
elsif object_class.relations.include?(option)
case object_class.relations[option].macro
when :references_one
a = Array.new
objects.each { |object| a << [get_string_value_from_object(object), object] }
sorted = params[:direction].eql?('asc') ? a.sort : a.sort.reverse!
objects = sorted.collect {|x| x[1] }
when :references_many, :references_and_referenced_in_many
objects = get_objects_from_self(object_class, objects, option)
when :referenced_in
objects = get_objects_from_referenced_objects(object_class.relations[option].class_name.constantize, objects, "#{option}_id")
end
end
end
end
if @filter
@filter.each do |key, value|
case key
when 'status'
a = Array.new
objects.each do |object|
value.each do |v|
a << object if object[v]
end
end
objects = a.uniq
when 'categories'
a = Array.new
objects.each do |object|
a << object if (value.include?(object.send("#{object.class.to_s.underscore}_category").id.to_s) rescue nil)
end
objects = a.uniq
when 'tags'
a = Array.new
objects.each do |object|
object.tags.each do |tag|
a << object if value.include?(tag.id.to_s)
end
end
objects = a.uniq
end if value.size > 0
end
end
Kaminari.paginate_array(filter_authorized_objects(objects)).page(params[:page]).per(10)
end
def get_string_value_from_object(object)
s = object.name_translations[I18n.locale.to_s] unless s rescue nil
s = object.title_translations[I18n.locale.to_s] unless s rescue nil
s = object.name unless s rescue nil
s = object.title unless s rescue nil
s.downcase rescue ''
end
def get_objects_from_referenced_objects(object_class, objects, option)
referer_ids = objects.distinct(option)
referenced_objects = object_class.find(referer_ids) rescue nil
if referenced_objects
a = Array.new
referenced_objects.to_a.each { |referer| a << [get_string_value_from_object(referer), referer.id] }
sorted = params[:direction].eql?('asc') ? a.sort : a.sort.reverse!
sorted_objects = sorted.collect {|x| objects.where(option => x[1]).entries }
sorted_objects.flatten!
sorted_objects.uniq!
get_with_nil(objects, option, sorted_objects)
else
objects
end
end
def get_objects_from_self(object_class, objects, option)
referenced_class = object_class.relations[option].class_name.constantize
referenced_objects = referenced_class.all rescue nil
if referenced_objects
reverse_relation = nil
referenced_class.relations.each { |relation| reverse_relation = relation[1].name.to_s if relation[1].class_name.eql?(object_class.to_s) }
a = Array.new
referenced_objects.each { |referenced_object| a << [get_string_value_from_object(referenced_object), referenced_object] }
a.compact!
sorted = params[:direction].eql?('asc') ? a.sort : a.sort.reverse!
sorted_objects = Array.new
sorted.each {|x| sorted_objects << x[1].send(reverse_relation) }
sorted_objects.flatten!
sorted_objects.uniq!
get_with_nil(objects, option, sorted_objects)
else
objects
end
end
def get_with_nil(objects, option, sorted_objects)
tmp = Array.new
objects.each { |object| tmp << [get_string_value_from_object(object), object] if (object.send(option).blank? || (object.send(option).size == 0 rescue nil)) }
sorted = params[:direction].eql?('asc') ? tmp.sort : tmp.sort.reverse!
sorted_tmp = sorted.collect {|a| a[1] }
a = params[:direction].eql?('asc') ? (sorted_tmp + sorted_objects) : (sorted_objects + sorted_tmp)
a.flatten
end
def get_viewable(object_class, query=nil)
objects = get_objects(object_class,query).order_by(:created_at, :desc)
Kaminari.paginate_array(objects).page(params[:page]).per(10)
end
def get_objects(object_class, query=nil)
object_class = object_class.classify.constantize
# debugger
# a=1
if query
objects = object_class.where(query)
else
objects = object_class.all
end
objects
end
def filter_authorized_objects(objects)
if(!is_admin? || !is_manager?)
objects.delete_if{ |object|
if object.is_pending == true
if check_permission(:manager)
object.create_user_id != current_user.id
else
!object.send("#{object.class.to_s.underscore}_category").authed_users('fact_check').include?(current_user) rescue false
end
else
false
end
}
end
objects
end
end
@@ -1,4 +1,9 @@
class OrbitWidgetController< OrbitFrontendComponentController class OrbitWidgetController< OrbitFrontendComponentController
include FrontEndArrayParamsHelper
before_filter {get_tags_and_cates(params)}
def get_tags_and_cates(params)
params = tags_and_cates(params)
end
end end
+24 -7
View File
@@ -5,7 +5,7 @@ class PagesController < ApplicationController
# caches_page :index # caches_page :index
def check_frontend_open def check_frontend_open
if Me.frontend_closed if Me.frontend_closed and current_user.nil? #Need to be change
redirect_to '/admin/dashboards' redirect_to '/admin/dashboards'
end end
end end
@@ -14,10 +14,11 @@ class PagesController < ApplicationController
@item = Page.find_by_name('home') @item = Page.find_by_name('home')
if @item if @item
impressionist(@item) delayed_impressionist(@item)
render_page render_page
else else
render :text => t(:need_home) redirect_to '/admin/dashboards',:notice=>t(:need_home)
# render :text => t(:need_home)
end end
end end
@@ -25,13 +26,13 @@ class PagesController < ApplicationController
#begin #begin
@item = Item.first(:conditions => {:path => params[:page_name]}) @item = Item.first(:conditions => {:path => params[:page_name]})
if @item && @item.is_published && (@item.enabled_for.nil? ? true : @item.enabled_for.include?(I18n.locale.to_s)) if @item && @item.is_published && (@item.enabled_for.nil? ? true : @item.enabled_for.include?(I18n.locale.to_s))
impressionist(@item) delayed_impressionist(@item)
case @item.class.to_s case @item.class.to_s
when 'Page' when 'Page'
if params[:clicked_field_name] if params[:clicked_field_name]
render_page({"clicked_field_name"=>params["clicked_field_name"]}) unless save_from_no_lang_for_page render_page({"clicked_field_name"=>params["clicked_field_name"]}) unless save_from_no_lang_for_page
else else
render_page unless save_from_no_lang_for_page render_page(params) unless save_from_no_lang_for_page
end end
when 'Link' when 'Link'
redirect_to(@item[:url]) unless save_from_no_lang_for_page redirect_to(@item[:url]) unless save_from_no_lang_for_page
@@ -44,12 +45,28 @@ class PagesController < ApplicationController
#end #end
end end
def convert_array_param(key,array)
array.collect{|t| "#{key}[]=#{t}"}.join("&")
end
def index_from_link def index_from_link
url = "/#{@item.path}" url = "/#{@item.path}"
options = '' options = ''
options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank? options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank?
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}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? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank?
options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank? options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank?
uri = URI::escape(url + options) uri = URI::escape(url + options)
@@ -4,7 +4,7 @@ protected
def get_categories_and_tags def get_categories_and_tags
unless @selected[:module_app].nil? unless @selected[:module_app].nil?
@categories = @selected[:module_app].get_categories @categories = @selected[:module_app].get_categories
@tags = @selected[:module_app].get_tags @tags = @selected[:module_app].tags
end end
end end
@@ -55,4 +55,4 @@ protected
end end
end end
+40 -21
View File
@@ -1,9 +1,20 @@
module ApplicationHelper module ApplicationHelper
FLASH_NOTICE_KEYS = [:error, :notice, :warning] FLASH_NOTICE_KEYS = [:error, :notice, :warning]
def current_path(param_hash)
request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
end
def delayed_impressionist(object)
# Resque.enqueue_at(1.minute.from_now,DelayedImpressionist,object)
end
def check_user_role_enable(attribute_fields) def check_user_role_enable(attribute_fields)
@user.attribute_values.collect{|t| attribute_fields.include?(t.attribute_field) }.include?(true) rescue false @user.attribute_values.collect{|t| attribute_fields.include?(t.attribute_field) }.include?(true) rescue false
end end
def show_attribute_value(value) def show_attribute_value(value)
if value.kind_of? Hash if value.kind_of? Hash
result = [] result = []
@@ -18,7 +29,7 @@ module ApplicationHelper
u = nil u = nil
User.without_callback(:create, :before, :initialize_desktop) do User.without_callback(:create, :before, :initialize_desktop) do
u = User.create(:name => "guest", :email => "guest_#{Time.now.to_i}#{rand(99)}@example.com") u = User.create(:name => "guest", :email => "guest_#{Time.now.to_i}#{rand(99)}@example.com")
end end
u.admin = false u.admin = false
u.save(:validate => false) u.save(:validate => false)
u u
@@ -46,24 +57,24 @@ module ApplicationHelper
def flash_messages def flash_messages
return unless messages = flash.keys.select{|k| FLASH_NOTICE_KEYS.include?(k)} return unless messages = flash.keys.select{|k| FLASH_NOTICE_KEYS.include?(k)}
formatted_messages = messages.map do |type| formatted_messages = messages.map do |type|
content_tag :div, :class => type.to_s do content_tag :div, :class => type.to_s do
message_for_item(flash[type], flash["#{type}_item".to_sym]) message_for_item(flash[type], flash["#{type}_item".to_sym])
end end
end end
raw(formatted_messages.join) raw(formatted_messages.join)
end end
def link_back(custom_class=nil) def link_back(custom_class=nil)
case custom_class case custom_class
when nil when nil
link_to t('back'), get_go_back, :class => 'nav' link_to t('back'), get_go_back, :class => 'nav'
else else
link_to t('back'), get_go_back, :class => custom_class link_to t('back'), get_go_back, :class => custom_class
end end
end end
# Clean the link back # Clean the link back
def get_go_back def get_go_back
begin begin
@@ -104,28 +115,28 @@ module ApplicationHelper
message % item message % item
end end
end end
def add_attribute(partial, f, attribute) def add_attribute(partial, f, attribute)
new_object = f.object.send(attribute).build new_object = f.object.send(attribute).build
fields = f.fields_for(attribute, new_object, :child_index => "new_#{attribute}") do |f| fields = f.fields_for(attribute, new_object, :child_index => "new_#{attribute}") do |f|
render :partial => partial, :object => new_object, :locals => {:f => f} render :partial => partial, :object => new_object, :locals => {:f => f}
end end
end end
def active_for_ob_auths_object(object_class,field = :object_auth_id) def active_for_ob_auths_object(object_class,field = :object_auth_id)
unless active_for_action("object_auths_new_interface","setting").nil? unless active_for_action("object_auths_new_interface","setting").nil?
ob_auth = ObjectAuth.find params[field] ob_auth = ObjectAuth.find params[field]
ob_auth.obj_authable_type == object_class.to_s ? 'active' : nil ob_auth.obj_authable_type == object_class.to_s ? 'active' : nil
end end
end end
def active_for_ob_auth(ob_auth_title,field = :object_auth_id) def active_for_ob_auth(ob_auth_title,field = :object_auth_id)
unless active_for_action("module_apps_new_interface","setting").nil? unless active_for_action("module_apps_new_interface","setting").nil?
oa_auth = ObjectAuth.find params[field] oa_auth = ObjectAuth.find params[field]
oa_auth.title == ob_auth_title ? 'active' : nil oa_auth.title == ob_auth_title ? 'active' : nil
end end
end end
def active_for_app_auth(app_title ='', opt={:controller_name => 'module_apps_new_interface',:action_name=>'setting',:field => :module_app_id}) def active_for_app_auth(app_title ='', opt={:controller_name => 'module_apps_new_interface',:action_name=>'setting',:field => :module_app_id})
unless active_for_action(opt[:controller_name],opt[:action_name]).nil? unless active_for_action(opt[:controller_name],opt[:action_name]).nil?
app = ModuleApp.find params[opt[:field]] app = ModuleApp.find params[opt[:field]]
@@ -134,7 +145,7 @@ module ApplicationHelper
nil nil
end end
end end
def active_for_controllers(*controller_names) def active_for_controllers(*controller_names)
(controller_names.include?(controller.controller_name) || controller_names.include?(request.fullpath)) ? 'active' : nil (controller_names.include?(controller.controller_name) || controller_names.include?(request.fullpath)) ? 'active' : nil
end end
@@ -142,11 +153,11 @@ module ApplicationHelper
def visible_for_controllers(*controller_names) def visible_for_controllers(*controller_names)
(controller_names.include?(controller.controller_name) || controller_names.include?(request.fullpath)) ? '' : 'hide' (controller_names.include?(controller.controller_name) || controller_names.include?(request.fullpath)) ? '' : 'hide'
end end
def active_for_action(controller_name, action_name) def active_for_action(controller_name, action_name)
((controller.controller_name.eql?(controller_name) || request.fullpath.eql?(controller_name)) && controller.action_name.eql?(action_name)) ? 'active' : nil ((controller.controller_name.eql?(controller_name) || request.fullpath.eql?(controller_name)) && controller.action_name.eql?(action_name)) ? 'active' : nil
end end
def page_metas(page) def page_metas(page)
tmp_meta = {} tmp_meta = {}
metas = '' metas = ''
@@ -175,11 +186,11 @@ module ApplicationHelper
res << page_title res << page_title
end end
res << "</title>\n" res << "</title>\n"
end end
def page_stylesheets(page, edit=nil) def page_stylesheets(page, edit=nil)
stylesheets = '' stylesheets = ''
unless edit unless edit
stylesheets << "<link href='/assets/bootstrap-orbit.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/bootstrap-orbit.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/style.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/style.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/icons.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/icons.css' rel='stylesheet' type='text/css' />\n"
@@ -188,9 +199,9 @@ module ApplicationHelper
stylesheets << "<link href='/assets/bootstrap.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/bootstrap.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/font-awesome.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/font-awesome.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/orbit-bar.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/orbit-bar.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='#{asset_path 'default_widget.css'}' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='#{asset_path 'default_widget.css'}' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='#{page.design.css_default.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_default stylesheets << "<link href='#{page.design.css_default.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_default
theme = page.design.themes.detect{ |d| d.id == page.theme_id } theme = page.design.themes.detect{ |d| d.id == page.theme_id }
stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme
@@ -224,9 +235,9 @@ module ApplicationHelper
end end
def at_least_module_manager def at_least_module_manager
is_manager? || is_admin? is_manager? || is_admin?
end end
def dislpay_view_count(object) def dislpay_view_count(object)
"#{t(:view_count)}: #{object.view_count}" "#{t(:view_count)}: #{object.view_count}"
end end
@@ -292,4 +303,12 @@ module ApplicationHelper
"http://#{request.host}:2#{site_number}00" "http://#{request.host}:2#{site_number}00"
end end
def sortable(column, title = nil, options = {})
options[:remote] ||= true
title ||= column.titleize
css_class = column.to_s == params[:sort] ? "current #{params[:direction]}" : 'asc'
direction = column.to_s == params[:sort] && params[:direction] == 'asc' ? 'desc' : 'asc'
link_to title, params.merge({direction: direction, sort: column, sort_options: column}), {:class => "#{css_class} sortable", :remote => options[:remote]}
end
end end
+2 -2
View File
@@ -8,7 +8,7 @@ module OrbitFormHelper
options[:icon_date] ||= 'icons-calendar' options[:icon_date] ||= 'icons-calendar'
options[:icon_clear] ||= 'icons-cross-3' options[:icon_clear] ||= 'icons-cross-3'
options[:input_class] ||= 'input-large' options[:input_class] ||= 'input-large'
options[:value] ||= options[:object][method] if options[:object] && options[:object][method] options[:value] ||= options[:object].send(method) if options[:object] && options[:object][method]
case options[:picker_type] case options[:picker_type]
when 'date' when 'date'
content_tag :div, :id => options[:id], :class => options[:class] do content_tag :div, :id => options[:id], :class => options[:class] do
@@ -22,7 +22,7 @@ module OrbitFormHelper
options[:label] ||= I18n.t('datetime_picker.separated.label') options[:label] ||= I18n.t('datetime_picker.separated.label')
content_tag :div, :id => options[:id], :class => "separated_picker #{options[:class]}" do content_tag :div, :id => options[:id], :class => "separated_picker #{options[:class]}" do
concat label_tag options[:label] unless options[:no_label] concat label_tag options[:label] unless options[:no_label]
concat hidden_field(object_name, method) concat hidden_field(object_name, method, :value => options[:value])
concat separated_picker(object_name, method, options) concat separated_picker(object_name, method, options)
end end
else else
+1 -1
View File
@@ -11,7 +11,7 @@ class BackupServer
%x[rm #{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}] %x[ls #{Rails.root}/tmp/#{dbname}* | du -h --max-depth=1 --block-size=1M |sort -h >> #{archive_db_list_path}]
OrbitJobLogger.info "DB backup done Path:#{dbdirectory}" OrbitLogger.info "DB backup done Path:#{dbdirectory}"
end end
end end
+1 -1
View File
@@ -8,7 +8,7 @@ class DashboardCounter < Resque::Plugins::RestrictionJob
site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
site.save site.save
OrbitJobLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}" OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
end end
+7
View File
@@ -0,0 +1,7 @@
class DelayedImpressionist
@queue = :low
def self.perform(object)
impressionist(object)
true
end
end
+10
View File
@@ -0,0 +1,10 @@
class SendAskNoticeMail
@queue = :mail
def self.perform(ask_admin_id, ask_question_id)
ask_admin = AskAdmin.find(ask_admin_id)
ask_question = AskQuestion.find(ask_question_id)
AskMailer.notice(ask_admin, ask_question).deliver
end
end
+9
View File
@@ -0,0 +1,9 @@
class SendAskReplyMail
@queue = :mail
def self.perform(ask_question_id)
ask_question = AskQuestion.find(ask_question_id)
AskMailer.reply(ask_question).deliver
end
end
+1 -1
View File
@@ -5,6 +5,6 @@ class UpdateTagCloud
Tag.all.each do |tag| Tag.all.each do |tag|
tag.update_attribute(:cloud_view_count, tag.impressionist_count(:created_at.gte => 14.days.ago, :created_at.lte => Time.now)) tag.update_attribute(:cloud_view_count, tag.impressionist_count(:created_at.gte => 14.days.ago, :created_at.lte => Time.now))
end end
OrbitJobLogger.info "UpdateTagCloud Done" OrbitLogger.info "UpdateTagCloud Done"
end end
end end
+8
View File
@@ -0,0 +1,8 @@
class UserActionRecoder
@queue = :low
def self.perform(user,params)
UserAction.create!(:user=>user,:params=>params,:page=>"#{params['controller']}##{params['action']}")
true
end
end
+4 -6
View File
@@ -2,6 +2,8 @@ class Asset
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
include OrbitTag::Taggable
taggable
mount_uploader :data, FileAssetUploader mount_uploader :data, FileAssetUploader
@@ -16,18 +18,14 @@ class Asset
belongs_to :asset_category belongs_to :asset_category
belongs_to :assetable, polymorphic: true belongs_to :assetable, polymorphic: true
has_and_belongs_to_many :tags, :class_name => "AssetTag" # has_and_belongs_to_many :tags, :class_name => "AssetTag"
before_save :clean_tags before_save :clean_tags
def sorted_tags
tags.order_by(I18n.locale, :asc)
end
protected protected
def clean_tags def clean_tags
self.tag_ids.delete('') self.tagged_ids.delete('')
end end
end end
+3
View File
@@ -4,5 +4,8 @@ class CssDefault < Stylesheet
# belongs_to :desktop_widget # belongs_to :desktop_widget
belongs_to :css, polymorphic: true belongs_to :css, polymorphic: true
def content
self.file.read.force_encoding("UTF-8") rescue ''
end
end end
+1 -1
View File
@@ -2,7 +2,7 @@ class Desktop
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :theme, default: "4f8d3f533b67fcd05f08635a" field :theme
field :customtheme field :customtheme
field :wallpaper 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 class DesktopTheme
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps 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 # def parse_css_for_images
field :author # self.css_default.parse_urls
# end
end end
+5 -2
View File
@@ -5,9 +5,12 @@ class DesktopWidget
field :name field :name
field :author field :author
field :shape field :shape, default: "w1 h1"
field :fullsize, :type => Boolean field :fullsize, :type => Boolean, default: false
field :version, :type => String field :version, :type => String
field :text_color, :type => String, default: ""
field :bg_color, :type => String, default: ""
field :icon, default: "icon.png"
has_one :css_default, as: :css, :autosave => true, :dependent => :destroy has_one :css_default, as: :css, :autosave => true, :dependent => :destroy
has_one :widget_layout, :autosave => true, :dependent => :destroy has_one :widget_layout, :autosave => true, :dependent => :destroy
+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 before_create :initialize_tile
def initialize_tile def initialize_tile
self.tiles.build(data_category: "app", data_content: "quotes", position: 5, shape: "w1 h1", title: "Quotes") # self.tiles.build(data_category: "app", data_content: "quotes", position: 5, shape: "w1 h1", title: "Quotes")
self.tiles.build(data_category: "app", data_content: "dailyenglish", position: 6, shape: "w1 h1", title: "Daily English Word") # self.tiles.build(data_category: "app", data_content: "dailyenglish", position: 6, shape: "w1 h1", title: "Daily English Word")
widgets = self.section.desktop.desktop_widgets.collect{|widget| widget.id} widgets = self.section.desktop.desktop_widgets.collect{|widget| widget.id}
for i in 0..3 widgets.each_with_index do |w,i|
self.tiles.build(data_category: "widget", position: i+1,desktop_widget_id: widgets[i]) self.tiles.build(data_category: "widget", position: i+1,desktop_widget_id: w)
end end
end end
end end
+1
View File
@@ -13,5 +13,6 @@ class Tile
belongs_to :group belongs_to :group
belongs_to :desktop_widget belongs_to :desktop_widget
belongs_to :desktop_app
end end
+13 -1
View File
@@ -26,7 +26,7 @@ class Item
after_save :rebuild_children_path, :if => "path_changed?" after_save :rebuild_children_path, :if => "path_changed?"
def enabled_for_lang(lang) def enabled_for_lang(lang)
enabled_for.include?(lang) enabled_for.include?(lang) rescue false
end end
def self.find_by_name(item_name) def self.find_by_name(item_name)
@@ -64,6 +64,10 @@ class Item
true true
end end
end end
def self.structure_ordered_items
self.get_children(Item.root, [])
end
protected protected
@@ -87,5 +91,13 @@ class Item
def validates_presence_of_parent_id? def validates_presence_of_parent_id?
true true
end end
def self.get_children(item, tree)
tree << item
item.children.each do |child|
self.get_children(child, tree)
end
tree
end
end end
+29 -4
View File
@@ -8,6 +8,8 @@ class ModuleApp
field :title field :title
field :sidebar_order,type: Integer,default: 0 field :sidebar_order,type: Integer,default: 0
has_many :tags, as: :module_tag, dependent: :destroy
def refetch_setting!(reg) def refetch_setting!(reg)
# %w{module_label category base_url version organization author intro update_info create_date}.each do |field| # %w{module_label category base_url version organization author intro update_info create_date}.each do |field|
# self[field.to_sym] = reg.send field # self[field.to_sym] = reg.send field
@@ -17,6 +19,7 @@ class ModuleApp
self[:get_widget_style] = reg.get_widgets self[:get_widget_style] = reg.get_widgets
self[:using_default_widget] = !reg.get_default_widget.blank? self[:using_default_widget] = !reg.get_default_widget.blank?
self[:widgets] = reg.get_widgets self[:widgets] = reg.get_widgets
self[:has_tag] = reg.get_has_tags
end end
@@ -118,10 +121,6 @@ class ModuleApp
has_one :app_auth,dependent: :delete has_one :app_auth,dependent: :delete
def get_tags
get_registration.get_tags
end
def get_categories def get_categories
get_registration.get_categories get_registration.get_categories
end end
@@ -133,5 +132,31 @@ class ModuleApp
def get_registration def get_registration
OrbitApp::Module::Registration.find_by_key(key) OrbitApp::Module::Registration.find_by_key(key)
end end
def self.find_by_key(key)
self.where(key: key)[0] rescue nil
end
def sorted_tags_for_cloud
temp_tags = {}
self.tags.each{ |tag|
temp_tags.merge!({tag => Tag.get_impressionist(tag)})
}
if !temp_tags.blank?
sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse
sorted_tags[0][1] = :hot1
offset = (sorted_tags.size - 1) / 3
i = 1
class_i = 2
sorted_tags[1..-1].collect!{ |x|
x[1] = "hot#{class_i}"
i == offset ? i = 1 : i += 1 if class_i < 4
class_i += 1 if i == offset && class_i < 4
}
sorted_tags
else
[]
end
end
end end
+34
View File
@@ -0,0 +1,34 @@
module Mongoid
module Sortable
extend ActiveSupport::Concern
included do
field :sort_number, type: Integer
after_initialize :set_sort_number
end
module ClassMethods
def default_sort(sorted = true)
if !sorted
asc(:sort_number)
else
asc
end
end
end
private
def set_sort_number
if self.new? && self.sort_number.nil?
last_record = self.class.desc(:sort_number).first
if last_record && last_record.sort_number
self.sort_number = (last_record.sort_number + 10) / 10 * 10
else
self.sort_number = 10
end
end
end
end
end
-1
View File
@@ -1,4 +1,3 @@
class SubRoleTag < ProtoTag class SubRoleTag < ProtoTag
has_and_belongs_to_many :sub_roles has_and_belongs_to_many :sub_roles
end end
+25 -22
View File
@@ -10,33 +10,36 @@ class Tag
is_impressionable :counter_cache => { :column_name => :view_count } is_impressionable :counter_cache => { :column_name => :view_count }
field :key field :name, localize: true
field :view_count, :type => Integer, :default => 0 field :view_count, :type => Integer, :default => 0
field :cloud_view_count, :type => Integer, :default => 0 field :cloud_view_count, :type => Integer, :default => 0
belongs_to :module_tag, polymorphic: true
has_many :taggings, dependent: :destroy
#field :cloud_amper,:type: Integer,:default=> 0 #field :cloud_amper,:type: Integer,:default=> 0
def self.sorted_for_cloud # def self.sorted_for_cloud
tags = {} # tags = {}
self.all.each{ |tag| # self.all.each{ |tag|
tags.merge!({tag => self.get_impressionist(tag)}) # tags.merge!({tag => self.get_impressionist(tag)})
} # }
if !tags.blank? # if !tags.blank?
sorted_tags = tags.sort{|a,b| a[1]<=>b[1]}.reverse # sorted_tags = tags.sort{|a,b| a[1]<=>b[1]}.reverse
sorted_tags[0][1] = :hot1 # sorted_tags[0][1] = :hot1
offset = (sorted_tags.size - 1) / 3 # offset = (sorted_tags.size - 1) / 3
i = 1 # i = 1
class_i = 2 # class_i = 2
sorted_tags[1..-1].collect!{ |x| # sorted_tags[1..-1].collect!{ |x|
x[1] = "hot#{class_i}" # x[1] = "hot#{class_i}"
i == offset ? i = 1 : i += 1 if class_i < 4 # i == offset ? i = 1 : i += 1 if class_i < 4
class_i += 1 if i == offset && class_i < 4 # class_i += 1 if i == offset && class_i < 4
} # }
sorted_tags # sorted_tags
else # else
[] # []
end # end
end # end
protected protected
Loaded 100 of 721 files, more files were not shown because too many files have changed in this diff. Show more