update for desktop widgets
|  | @ -0,0 +1,61 @@ | ||||||
|  | class DesktopWidgetsController < OrbitBackendController | ||||||
|  | 	require "net/http" | ||||||
|  | 	require "uri" | ||||||
|  |   	require 'zip/zip' | ||||||
|  | 
 | ||||||
|  | 	def index | ||||||
|  | 	end | ||||||
|  | 
 | ||||||
|  | 	def upload | ||||||
|  | 	if !params[:desktop_widget].nil? | ||||||
|  | 	    temp_file = Tempfile.new("temp_file") | ||||||
|  | 	    original_file = params[:desktop_widget][: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 unzip_widget(file, zip_name) | ||||||
|  | 	    Zip::ZipFile.open(file) { |zip_file| | ||||||
|  | 	      dw = DesktopWidget.new.from_json(zip_file.read("#{zip_name}/settings.json")) | ||||||
|  | 	      Dir.mktmpdir('f_path') { |dir| | ||||||
|  | 	        javascripts_entries = [] | ||||||
|  | 	        images_entries = [] | ||||||
|  | 
 | ||||||
|  | 	        zip_file.entries.each do |entry| | ||||||
|  | 	          case (path = entry.to_s) | ||||||
|  | 	            when /\A(#{zip_name})\/(default\.css)\z/    #for default css | ||||||
|  | 	              dw.build_css_default(:file => get_temp_file(zip_file, dir, entry)) | ||||||
|  | 	            when /\A(#{zip_name})\/(widget\.html)\z/    #for layout html | ||||||
|  | 	              dw.build_widget_layout(:file => get_temp_file(zip_file, dir, entry)) | ||||||
|  | 	            when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/   #for js | ||||||
|  | 	              javascripts_entries << entry | ||||||
|  | 	            when /\A(#{zip_name})\/(images)\/.*((\.jpg)|(\.png)|(\.gif))\z/   #for img | ||||||
|  | 	              images_entries << entry | ||||||
|  | 	          end | ||||||
|  | 	        end | ||||||
|  | 
 | ||||||
|  | 	        ['javascripts', 'images'].each do |type| | ||||||
|  | 	          eval("#{type}_entries").each do |entry| | ||||||
|  | 	            eval("dw.#{type}").build(:file => get_temp_file(zip_file, dir, entry)) | ||||||
|  | 	          end | ||||||
|  | 	        end | ||||||
|  | 	      } | ||||||
|  | 	      dw.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 | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| class OtheraccountsController< ApplicationController | class Desktop::OtheraccountsController< ApplicationController | ||||||
|   require 'open-uri' |   require 'open-uri' | ||||||
|   require 'rexml/document' |   require 'rexml/document' | ||||||
|   require 'net/http'  |   require 'net/http'  | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| class CssDefault < Stylesheet | class CssDefault < Stylesheet | ||||||
|    |    | ||||||
|   belongs_to :design |   belongs_to :design | ||||||
|  |   belongs_to :desktop_widget | ||||||
|    |    | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ class Image | ||||||
|   mount_uploader :file, ImageUploader |   mount_uploader :file, ImageUploader | ||||||
| 
 | 
 | ||||||
|   belongs_to :design |   belongs_to :design | ||||||
|  |   belongs_to :desktop_widget | ||||||
| 
 | 
 | ||||||
|   before_save :set_name |   before_save :set_name | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
| class Javascript < DesignFile | class Javascript < DesignFile | ||||||
|   belongs_to :design |   belongs_to :design | ||||||
|  |   belongs_to :desktop_widget | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| class Stylesheet < DesignFile | class Stylesheet < DesignFile | ||||||
|   belongs_to :design |   belongs_to :design | ||||||
|  |   belongs_to :desktop_widget | ||||||
|   mount_uploader :file_orig, AssetUploader |   mount_uploader :file_orig, AssetUploader | ||||||
|    |    | ||||||
|   def parse_urls |   def parse_urls | ||||||
|  | @ -32,5 +33,35 @@ class Stylesheet < DesignFile | ||||||
|       self.save |       self.save | ||||||
|     }     |     }     | ||||||
|   end |   end | ||||||
|  |   def parse_widgets_urls | ||||||
|  |     orig_content = content = self.file.read.force_encoding("UTF-8") | ||||||
|  |     # self.remove_file! | ||||||
|  |     # self.remove_file_orig! | ||||||
|  |     names = [] | ||||||
|  |     images = self.desktop_widget.images | ||||||
|  |     content.scan(/(?<=url)(.*?)(?=\))/){ | ||||||
|  |       css_name = $1.gsub(' ','').gsub('(','') | ||||||
|  |       name = File.basename(css_name).gsub(/[\\\"]/, '') | ||||||
|  |       image = images.detect{ |i| i.file_identifier.eql?(name) } rescue nil | ||||||
|  |       image.update_attribute(:in_css, true) if image | ||||||
|  |       file_name = image.file_url rescue nil | ||||||
|  |       names << [css_name, file_name] | ||||||
|  |     } | ||||||
|  |     names.each do |name| | ||||||
|  |       content.gsub!(name[0], name[1]) if name[1] | ||||||
|  |     end | ||||||
|  |     Dir.mktmpdir('f_path') { |dir| | ||||||
|  |       orig_file_name = self.file_identifier | ||||||
|  |        | ||||||
|  |       temp_file = File.new(dir + '/' + orig_file_name, 'w+') | ||||||
|  |       temp_file.write orig_content.force_encoding("UTF-8") | ||||||
|  |       self.file_orig = temp_file | ||||||
|  |        | ||||||
|  |       temp_file = File.new(dir + '/' + orig_file_name, 'w+') | ||||||
|  |       temp_file.write content.force_encoding("UTF-8") | ||||||
|  |       self.file = temp_file | ||||||
|  |       self.save | ||||||
|  |     }     | ||||||
|  |   end | ||||||
|    |    | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ class Desktop | ||||||
|   belongs_to :user |   belongs_to :user | ||||||
|    |    | ||||||
|   has_many  :sections, :autosave => true, :dependent => :destroy |   has_many  :sections, :autosave => true, :dependent => :destroy | ||||||
|   has_many :desktop_widgets, :autosave => true, :dependent => :destroy |   # has_many :desktop_widgets, :autosave => true, :dependent => :destroy | ||||||
| 
 | 
 | ||||||
|   before_create :initialize_section |   before_create :initialize_section | ||||||
|    |    | ||||||
|  | @ -0,0 +1,31 @@ | ||||||
|  | class DesktopWidget | ||||||
|  | 	include Mongoid::Document | ||||||
|  |   	include Mongoid::Timestamps | ||||||
|  |   	include ParserLayoutWidget | ||||||
|  | 
 | ||||||
|  |   	field :name | ||||||
|  |   	field :author | ||||||
|  |   	field :shape | ||||||
|  |   	field :version, :type => String | ||||||
|  | 
 | ||||||
|  |   	has_one :css_default, :autosave => true, :dependent => :destroy | ||||||
|  | 	has_one :widget_layout, :autosave => true, :dependent => :destroy | ||||||
|  | 	has_many :images, :autosave => true, :dependent => :destroy | ||||||
|  | 	has_many :javascripts, :autosave => true, :dependent => :destroy | ||||||
|  | 	 | ||||||
|  | 	accepts_nested_attributes_for :images, :allow_destroy => true | ||||||
|  |   	accepts_nested_attributes_for :javascripts, :allow_destroy => true | ||||||
|  | 	 | ||||||
|  | 	after_save :parse_css_for_images | ||||||
|  | 
 | ||||||
|  |   	# belongs_to :desktop | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   	protected | ||||||
|  |    | ||||||
|  |  	def parse_css_for_images | ||||||
|  | 	    self.css_default.parse_widgets_urls | ||||||
|  | 	    parse_widget_for_images(self) | ||||||
|  |   	end | ||||||
|  | 
 | ||||||
|  | end | ||||||
|  | @ -9,6 +9,5 @@ class Tile | ||||||
|   field :title |   field :title | ||||||
|    |    | ||||||
|   belongs_to :group |   belongs_to :group | ||||||
|    |      | ||||||
|    |  | ||||||
| end | end | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | class WidgetLayout < DesignFile | ||||||
|  |   | ||||||
|  |   attr_reader :content | ||||||
|  | 
 | ||||||
|  |   field :body | ||||||
|  | 
 | ||||||
|  |   belongs_to :desktop_widget | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   def content | ||||||
|  |     self.file.read.force_encoding("UTF-8") rescue '' | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def self.exist_one? | ||||||
|  |     WidgetLayout.count > 0 | ||||||
|  |   end | ||||||
|  |    | ||||||
|  | end | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| class DesktopWidget |  | ||||||
| 	include Mongoid::Document |  | ||||||
|   	include Mongoid::Timestamps |  | ||||||
| 
 |  | ||||||
|   	field :name |  | ||||||
|   	field :author |  | ||||||
|   	field :shape |  | ||||||
|   	field :desktop_id |  | ||||||
|   	field :status |  | ||||||
|   	field :section |  | ||||||
| 
 |  | ||||||
|   	belongs_to :desktop |  | ||||||
| end |  | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | <h4>Upload Widget Package </h4> | ||||||
|  | <div class="main2"> | ||||||
|  | 	<%= form_tag '',:multipart => true,:action=>"post" do |f| %> | ||||||
|  | 
 | ||||||
|  | 	<p> | ||||||
|  | 	<%= file_field :desktop_widget,:package_file %> | ||||||
|  | 	</p> | ||||||
|  | 	<%= submit_tag  %> | ||||||
|  | 
 | ||||||
|  | 	<% end %> | ||||||
|  | 
 | ||||||
|  | </div> | ||||||
|  | @ -33,6 +33,7 @@ module Orbit | ||||||
|     config.autoload_paths += %W(#{config.root}/app/models/meta) |     config.autoload_paths += %W(#{config.root}/app/models/meta) | ||||||
|     config.autoload_paths += %W(#{config.root}/app/models/purchase) |     config.autoload_paths += %W(#{config.root}/app/models/purchase) | ||||||
|     config.autoload_paths += %W(#{config.root}/app/models/user) |     config.autoload_paths += %W(#{config.root}/app/models/user) | ||||||
|  |     config.autoload_paths += %W(#{config.root}/app/models/desktop) | ||||||
| 
 | 
 | ||||||
|     # Include all helpers |     # Include all helpers | ||||||
|     # 'helper :all' must be removed in ApplicationController |     # 'helper :all' must be removed in ApplicationController | ||||||
|  |  | ||||||
|  | @ -143,7 +143,17 @@ Orbit::Application.routes.draw do | ||||||
|     resources :users |     resources :users | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   match '/desktop/'=>'desktop#index' |   resources :desktop_widgets do | ||||||
|  |     collection do | ||||||
|  |         get 'upload' | ||||||
|  |         get 'delete' | ||||||
|  |         post 'upload' | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  | namespace :desktop do | ||||||
|  |    | ||||||
|  |   match "/"=>"desktop#index" | ||||||
| 
 | 
 | ||||||
|   # Sinatra Routes start |   # Sinatra Routes start | ||||||
| 
 | 
 | ||||||
|  | @ -178,46 +188,46 @@ Orbit::Application.routes.draw do | ||||||
|    |    | ||||||
|   # Sinatra Routes end |   # Sinatra Routes end | ||||||
|    |    | ||||||
|   match '/desktop/desktop'=>'desktop#desktop' |   match '/desktop'=>'desktop#desktop' | ||||||
|   match '/desktop/app_manager'=>'desktop#app_manager' |   match '/app_manager'=>'desktop#app_manager' | ||||||
|   match '/desktop/sections'=>'desktop#sections' |   match '/sections'=>'desktop#sections' | ||||||
|   match '/desktop/settings'=>'desktop#settings' |   match '/settings'=>'desktop#settings' | ||||||
|   match '/desktop/get_desktop_settings/'=>'desktop#get_desktop_settings' |   match '/get_desktop_settings/'=>'desktop#get_desktop_settings' | ||||||
|   match '/desktop/save_desktop_settings/'=>'desktop#save_desktop_settings' |   match '/save_desktop_settings/'=>'desktop#save_desktop_settings' | ||||||
|   match '/desktop/getgroups/'=>'desktop#getgroups' |   match '/getgroups/'=>'desktop#getgroups' | ||||||
|   match '/desktop/getsectionlist/'=>'desktop#getsectionlist' |   match '/getsectionlist/'=>'desktop#getsectionlist' | ||||||
|   match '/desktop/settingthemes/'=>'desktop#settingthemes' |   match '/settingthemes/'=>'desktop#settingthemes' | ||||||
|   match '/desktop/settingsections/'=>'desktop#settingsections' |   match '/settingsections/'=>'desktop#settingsections' | ||||||
|   match '/desktop/getapplist/'=>'desktop#getapplist' |   match '/getapplist/'=>'desktop#getapplist' | ||||||
|   match '/desktop/newpositions/'=>'desktop#newpositions' |   match '/newpositions/'=>'desktop#newpositions' | ||||||
|   match '/desktop/settingconnection/'=>'desktop#settingconnection' |   match '/settingconnection/'=>'desktop#settingconnection' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   match '/desktop/journal_p/'=>'desktop_publications#journal_p' |   match '/journal_p/'=>'desktop_publications#journal_p' | ||||||
|   match '/desktop/journal_p_list/'=>'desktop_publications#journal_p_list' |   match '/journal_p_list/'=>'desktop_publications#journal_p_list' | ||||||
|   match '/desktop/journal_p_add/'=>'desktop_publications#journal_p_add' |   match '/journal_p_add/'=>'desktop_publications#journal_p_add' | ||||||
|   match '/desktop_publications/getjournals' => 'desktop_publications#getjournals' |   match '/books' => 'desktop_publications#books' | ||||||
|   match '/desktop/books' => 'desktop_publications#books' |   match '/books_list/'=>'desktop_publications#books_list' | ||||||
|   match '/desktop/books_list/'=>'desktop_publications#books_list' |   match '/books_add/'=>'desktop_publications#books_add' | ||||||
|   match '/desktop/books_add/'=>'desktop_publications#books_add' |  | ||||||
| 
 | 
 | ||||||
|   match '/desktop/seminar_p' => 'desktop_publications#seminar_p' |   match '/seminar_p' => 'desktop_publications#seminar_p' | ||||||
|   match '/desktop/seminar_p_list/'=>'desktop_publications#seminar_p_list' |   match '/seminar_p_list/'=>'desktop_publications#seminar_p_list' | ||||||
|   match '/desktop/seminar_p_add/'=>'desktop_publications#seminar_p_add' |   match '/seminar_p_add/'=>'desktop_publications#seminar_p_add' | ||||||
| 
 | 
 | ||||||
|   match '/desktop/research_d' => 'desktop_research#research_d' |   match '/research_d' => 'desktop_research#research_d' | ||||||
|   match '/desktop/research_d_list/' => 'desktop_research#research_d_list' |   match '/research_d_list/' => 'desktop_research#research_d_list' | ||||||
|   match '/desktop/research_d_add' => 'desktop_research#research_d_add' |   match '/research_d_add' => 'desktop_research#research_d_add' | ||||||
| 
 | 
 | ||||||
|   match '/desktop/research_p' => 'desktop_research#research_p' |   match '/research_p' => 'desktop_research#research_p' | ||||||
|   match '/desktop/research_p_list/' => 'desktop_research#research_p_list' |   match '/research_p_list/' => 'desktop_research#research_p_list' | ||||||
|   match '/desktop/research_p_add' => 'desktop_research#research_p_add' |   match '/research_p_add' => 'desktop_research#research_p_add' | ||||||
|  |   match '/temp_func/'=>'desktop#temp_func' | ||||||
|  | end | ||||||
| 
 | 
 | ||||||
| 
 |   match '/twitter/'=>'otheraccounts#twitter' | ||||||
|   match '/desktop/twitter/'=>'otheraccounts#twitter' |   match '/forgmail/'=>'otheraccounts#gmail' | ||||||
|   match '/desktop/forgmail/'=>'otheraccounts#gmail' |   match '/getaccounts'=>'otheraccounts#getaccounts' | ||||||
|   match '/desktop/getaccounts'=>'otheraccounts#getaccounts' |   match '/save_account_info/'=>'otheraccounts#saveaccountinfo' | ||||||
|   match '/desktop/save_account_info/'=>'otheraccounts#saveaccountinfo' |  | ||||||
| 
 | 
 | ||||||
|   match '/desktop_appstore/appstore'=>'desktop_appstore#appstore' |   match '/desktop_appstore/appstore'=>'desktop_appstore#appstore' | ||||||
|   match '/desktop_appstore/widgets'=>'desktop_appstore#widgets' |   match '/desktop_appstore/widgets'=>'desktop_appstore#widgets' | ||||||
|  | @ -228,13 +238,14 @@ Orbit::Application.routes.draw do | ||||||
| 
 | 
 | ||||||
|   match '/desktop_orbit/eventajaxload'=> 'desktop_orbit#eventajaxload' |   match '/desktop_orbit/eventajaxload'=> 'desktop_orbit#eventajaxload' | ||||||
|   match '/desktop_orbit/gettimelinespan' => 'desktop_orbit#gettimelinespan' |   match '/desktop_orbit/gettimelinespan' => 'desktop_orbit#gettimelinespan' | ||||||
|  |   match '/desktop_publications/getjournals' => 'desktop_publications#getjournals' | ||||||
| 
 | 
 | ||||||
|    #match '/desktop_orbit/eventajaxload' => 'desktop_publications#create_journal' |    #match '/desktop_orbit/eventajaxload' => 'desktop_publications#create_journal' | ||||||
|   #match '/desktop_orbit/eventajaxload' => 'desktop_publications#delete_journal' |   #match '/desktop_orbit/eventajaxload' => 'desktop_publications#delete_journal' | ||||||
|   # match '/desktop_orbit/eventajaxload' => 'desktop_publications#update_journal' |   # match '/desktop_orbit/eventajaxload' => 'desktop_publications#update_journal' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   match '/desktop/temp_func/'=>'desktop#temp_func' |    | ||||||
|    |    | ||||||
|   match '/panel/:app_name/front_end/:app_action/:id(/:controller_action)' => 'pages#show_from_link', :constraints => lambda { |request| |   match '/panel/:app_name/front_end/:app_action/:id(/:controller_action)' => 'pages#show_from_link', :constraints => lambda { |request| | ||||||
|     !request.query_string.include?("inner=true") |     !request.query_string.include?("inner=true") | ||||||
|  |  | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | module ParserLayoutWidget | ||||||
|  |   require 'nokogiri' | ||||||
|  | 
 | ||||||
|  |   def parse_widget_for_images(widget) | ||||||
|  |     widge = Nokogiri::HTML(widget.widget_layout.body) | ||||||
|  | 
 | ||||||
|  |     widge.css('.widget_image').each do |page_image| | ||||||
|  |       image = widget.images.where( file: File.basename(page_image['src']))[0] | ||||||
|  |       image.update_attributes(:html_id => page_image['id'], :html_class => page_image['class'], :in_html => true) if image | ||||||
|  |     end | ||||||
|  |      | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | end | ||||||
|  | @ -1,81 +0,0 @@ | ||||||
| <link href="http://fonts.googleapis.com/css?family=Rationale|Orbitron" rel="stylesheet" type="text/css"> |  | ||||||
| <style> |  | ||||||
| .clock{ |  | ||||||
| 	/* The .clock div. Created dynamically by jQuery */ |  | ||||||
| 	background-color:#111; |  | ||||||
| 	height:75px; |  | ||||||
| 	width:75px; |  | ||||||
| 	position:relative; |  | ||||||
| 	overflow:hidden; |  | ||||||
| 	float:left; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .clock .rotate{ |  | ||||||
| 	/* There are two .rotate divs - one for each half of the background */ |  | ||||||
| 	position:absolute; |  | ||||||
| 	width:75px; |  | ||||||
| 	height:75px; |  | ||||||
| 	top:0; |  | ||||||
| 	left:0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .rotate.right{ |  | ||||||
| 	display:none; |  | ||||||
| 	z-index:9; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .clock .bg, .clock .front{ |  | ||||||
| 	width:37.5px; |  | ||||||
| 	height:75px; |  | ||||||
| 	background-color:#111; |  | ||||||
| 	position:absolute; |  | ||||||
| 	top:0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .clock .display{ |  | ||||||
| 	/* Holds the number of seconds, minutes or hours respectfully */ |  | ||||||
| 	position:absolute; |  | ||||||
| 	width:75px; |  | ||||||
| 	font-family: Orbitron, sans-serif; |  | ||||||
| 	z-index:17; |  | ||||||
| 	color:#F5F5F5; |  | ||||||
| 	font-size:21px; |  | ||||||
| 	text-align:center; |  | ||||||
| 	top:27.5px; |  | ||||||
| 	left:0px; |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* The left part of the background: */ |  | ||||||
| 
 |  | ||||||
| .clock .bg.left{ left:0px; } |  | ||||||
| 
 |  | ||||||
| /* Individual styles for each color: */ |  | ||||||
| .orange .bg.left{ background:url(desktop_widgets/4fa7810ac88514014d7c59bc/img/bg_orange.png) no-repeat left top; } |  | ||||||
| .green .bg.left{ background:url(desktop_widgets/4fa7810ac88514014d7c59bc/img/bg_green.png) no-repeat left top; } |  | ||||||
| .blue .bg.left{	background:url(desktop_widgets/4fa7810ac88514014d7c59bc/img/bg_blue.png) no-repeat left top; } |  | ||||||
| 
 |  | ||||||
| /* The right part of the background: */ |  | ||||||
| .clock .bg.right{ left:37.5px; } |  | ||||||
| 
 |  | ||||||
| .orange .bg.right{ background:url(desktop_widgets/4fa7810ac88514014d7c59bc/img/bg_orange.png) no-repeat right top; } |  | ||||||
| .green .bg.right{ background:url(desktop_widgets/4fa7810ac88514014d7c59bc/img/bg_green.png) no-repeat right top; } |  | ||||||
| .blue .bg.right{ background:url(desktop_widgets/4fa7810ac88514014d7c59bc/img/bg_blue.png) no-repeat right top; } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .clock .front.left{ |  | ||||||
| 	left:0; |  | ||||||
| 	z-index:15; |  | ||||||
| } |  | ||||||
| #fancyClock { |  | ||||||
| 	position: absolute; |  | ||||||
| 	overflow: hidden; |  | ||||||
| 	top: 50%; |  | ||||||
| 	left: 50%; |  | ||||||
| 	margin: -36px 0 0 -114px; |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| <div id="fancyClock"></div> |  | ||||||
| <script> |  | ||||||
| $('#fancyClock').tzineClock(); |  | ||||||
| </script> |  | ||||||
| Before Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 16 KiB | 
|  | @ -1,45 +0,0 @@ | ||||||
| <style type="text/css"> |  | ||||||
| 	.g_weather { position: relative; height: 198px; } |  | ||||||
| 	.g_weather img { float: left; display: block; margin: 0; padding: 12px; } |  | ||||||
| 	.g_weather .gw_recent {  |  | ||||||
| 		overflow: hidden; |  | ||||||
| 		height: 96%; |  | ||||||
| 		padding-top: 4%; |  | ||||||
| 		} |  | ||||||
| 	.g_weather .gw_weekly { display: none; } |  | ||||||
| 	.g_weather .gw_location { |  | ||||||
| 		position: absolute; |  | ||||||
| 		left: 0; |  | ||||||
| 		bottom: 0; |  | ||||||
| 		font-size: 15px; |  | ||||||
| 		line-height: 20px; |  | ||||||
| 	} |  | ||||||
| 	.g_weather .gw_condition_des { font-size: 22px; } |  | ||||||
| 	.g_weather .gw_temp { margin-top: 26px; } |  | ||||||
| 	.g_weather .gw_temp_num { font-size: 56px; } |  | ||||||
| 	.g_weather .gw_temp_unit { font-size: 26px; } |  | ||||||
| 	.g_weather .gw_forecast { |  | ||||||
| 		position: absolute; |  | ||||||
| 		right: 0; |  | ||||||
| 		bottom: 0; |  | ||||||
| 		font-size: 13px; |  | ||||||
| 		line-height: 20px; |  | ||||||
| 	} |  | ||||||
| </style> |  | ||||||
| <div class="g_weather"> |  | ||||||
| 	<div class="gw_recent"> |  | ||||||
| 		<img src="desktop_widgets/4fa7817cc88514014d7c59c2/img/sunny.png" alt="sunny" class="gw_condition"> |  | ||||||
| 		<div class="gw_temp"> |  | ||||||
| 			<span class="gw_temp_num thmtxt">29</span><span class="gw_temp_unit thmtxt">°C</span> |  | ||||||
| 		</div> |  | ||||||
| 		<div class="gw_condition_des thmtxt">Sunny</div> |  | ||||||
| 	</div> |  | ||||||
| 	<div class="gw_weekly"> |  | ||||||
| 		weekly report |  | ||||||
| 	</div> |  | ||||||
| 	<div class="gw_location thmtxt">Hsin-Chu</div> |  | ||||||
| 	<a href="" class="gw_forecast thmtxt">> Weekly Report</a> |  | ||||||
| </div> |  | ||||||
| <script type="text/javascript"> |  | ||||||
| 	g_weather(); |  | ||||||
| </script> |  | ||||||
| Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB | 
| Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB | 
| Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB | 
|  | @ -0,0 +1,7 @@ | ||||||
|  | { | ||||||
|  | 	"author" : "Harry", | ||||||
|  | 	"name" : "Clock", | ||||||
|  | 	"shape" : "w2 h1", | ||||||
|  | 	"version" : "1.0" | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | <link href="http://fonts.googleapis.com/css?family=Rationale|Orbitron" rel="stylesheet" type="text/css"> | ||||||
|  | <div id="fancyClock"></div> | ||||||
|  | <script> | ||||||
|  | $('#fancyClock').tzineClock(); | ||||||
|  | </script> | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | .g_weather { position: relative; height: 198px; } | ||||||
|  | 	.g_weather img { float: left; display: block; margin: 0; padding: 12px; } | ||||||
|  | 	.g_weather .gw_recent {  | ||||||
|  | 		overflow: hidden; | ||||||
|  | 		height: 96%; | ||||||
|  | 		padding-top: 4%; | ||||||
|  | 		} | ||||||
|  | 	.g_weather .gw_weekly { display: none; } | ||||||
|  | 	.g_weather .gw_location { | ||||||
|  | 		position: absolute; | ||||||
|  | 		left: 0; | ||||||
|  | 		bottom: 0; | ||||||
|  | 		font-size: 15px; | ||||||
|  | 		line-height: 20px; | ||||||
|  | 	} | ||||||
|  | 	.g_weather .gw_condition_des { font-size: 22px; } | ||||||
|  | 	.g_weather .gw_temp { margin-top: 26px; } | ||||||
|  | 	.g_weather .gw_temp_num { font-size: 56px; } | ||||||
|  | 	.g_weather .gw_temp_unit { font-size: 26px; } | ||||||
|  | 	.g_weather .gw_forecast { | ||||||
|  | 		position: absolute; | ||||||
|  | 		right: 0; | ||||||
|  | 		bottom: 0; | ||||||
|  | 		font-size: 13px; | ||||||
|  | 		line-height: 20px; | ||||||
|  | } | ||||||
| Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB | 
|  | @ -0,0 +1,7 @@ | ||||||
|  | { | ||||||
|  | 	"author" : "Devin", | ||||||
|  | 	"name" : "Weather", | ||||||
|  | 	"shape" : "w2 h2", | ||||||
|  | 	"version" : "0.0" | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | <div class="g_weather"> | ||||||
|  | 	<div class="gw_recent"> | ||||||
|  | 		<img src="desktop_widgets/4fa7817cc88514014d7c59c2/img/sunny.png" alt="sunny" class="gw_condition widget_image"> | ||||||
|  | 		<div class="gw_temp"> | ||||||
|  | 			<span class="gw_temp_num thmtxt">29</span><span class="gw_temp_unit thmtxt">°C</span> | ||||||
|  | 		</div> | ||||||
|  | 		<div class="gw_condition_des thmtxt">Sunny</div> | ||||||
|  | 	</div> | ||||||
|  | 	<div class="gw_weekly"> | ||||||
|  | 		weekly report | ||||||
|  | 	</div> | ||||||
|  | 	<div class="gw_location thmtxt">Hsin-Chu</div> | ||||||
|  | 	<a href="" class="gw_forecast thmtxt">> Weekly Report</a> | ||||||
|  | </div> | ||||||
|  | <script type="text/javascript"> | ||||||
|  | 	g_weather(); | ||||||
|  | </script> | ||||||