@ -12,8 +12,8 @@ class ApplicationController < ActionController::Base
helper_method :current_account
helper_method :current_session
helper_method :current_theme
helper_method :theme_data
helper_method :current_flavour
helper_method :current_skin
helper_method :single_user_mode?
rescue_from ActionController :: RoutingError , with : :not_found
@ -54,6 +54,73 @@ class ApplicationController < ActionController::Base
new_user_session_path
end
def pack ( data , pack_name , skin = 'default' )
return nil unless pack? ( data , pack_name )
pack_data = {
common : pack_name == 'common' ? nil : resolve_pack ( data [ 'name' ] ? Themes . instance . flavour ( current_flavour ) : Themes . instance . core , 'common' ) ,
flavour : data [ 'name' ] ,
pack : pack_name ,
preload : nil ,
skin : nil ,
}
if data [ 'pack' ] [ pack_name ] . is_a? ( Hash )
pack_data [ :common ] = nil if data [ 'pack' ] [ pack_name ] [ 'use_common' ] == false
pack_data [ :pack ] = nil unless data [ 'pack' ] [ pack_name ] [ 'filename' ]
if data [ 'pack' ] [ pack_name ] [ 'preload' ]
pack_data [ :preload ] = [ data [ 'pack' ] [ pack_name ] [ 'preload' ] ] if data [ 'pack' ] [ pack_name ] [ 'preload' ] . is_a? ( String )
pack_data [ :preload ] = data [ 'pack' ] [ pack_name ] [ 'preload' ] if data [ 'pack' ] [ pack_name ] [ 'preload' ] . is_a? ( Array )
end
if skin != 'default' && data [ 'skin' ] [ skin ]
pack_data [ :skin ] = skin if data [ 'skin' ] [ skin ] . include? ( pack_name )
else # default skin
pack_data [ :skin ] = 'default' if data [ 'pack' ] [ pack_name ] [ 'stylesheet' ]
end
end
pack_data
end
def pack? ( data , pack_name )
if data [ 'pack' ] . is_a? ( Hash ) && data [ 'pack' ] . key? ( pack_name )
return true if data [ 'pack' ] [ pack_name ] . is_a? ( String ) || data [ 'pack' ] [ pack_name ] . is_a? ( Hash )
end
false
end
def nil_pack ( data , pack_name , skin = 'default' )
{
common : pack_name == 'common' ? nil : resolve_pack ( data [ 'name' ] ? Themes . instance . flavour ( current_flavour ) : Themes . instance . core , 'common' , skin ) ,
flavour : data [ 'name' ] ,
pack : nil ,
preload : nil ,
skin : nil ,
}
end
def resolve_pack ( data , pack_name , skin = 'default' )
result = pack ( data , pack_name , skin )
unless result
if data [ 'name' ] && data . key? ( 'fallback' )
if data [ 'fallback' ] . nil?
return nil_pack ( data , pack_name , skin )
elsif data [ 'fallback' ] . is_a? ( String ) && Themes . instance . flavour ( data [ 'fallback' ] )
return resolve_pack ( Themes . instance . flavour ( data [ 'fallback' ] ) , pack_name , skin )
elsif data [ 'fallback' ] . is_a? ( Array )
data [ 'fallback' ] . each do | fallback |
return resolve_pack ( Themes . instance . flavour ( fallback ) , pack_name , skin ) if Themes . instance . flavour ( fallback )
end
end
return nil_pack ( data , pack_name , skin )
end
return data . key? ( 'name' ) && data [ 'name' ] != Setting . default_settings [ 'flavour' ] ? resolve_pack ( Themes . instance . flavour ( Setting . default_settings [ 'flavour' ] ) , pack_name , skin ) : nil_pack ( data , pack_name , skin )
end
result
end
def use_pack ( pack_name )
@core = resolve_pack ( Themes . instance . core , pack_name )
@theme = resolve_pack ( Themes . instance . flavour ( current_flavour ) , pack_name , current_skin )
end
protected
def forbidden
@ -84,13 +151,14 @@ class ApplicationController < ActionController::Base
@current_session || = SessionActivation . find_by ( session_id : cookies . signed [ '_session_id' ] )
end
def current_theme
return Setting . default_settings [ 'theme ' ] unless Themes . instance . name s. include? current_user & . setting_theme
current_user . setting_theme
def current_flavour
return Setting . default_settings [ 'flavour ' ] unless Themes . instance . flavour s. include? current_user & . setting_flavour
current_user . setting_flavour
end
def theme_data
Themes . instance . get ( current_theme )
def current_skin
return 'default' unless Themes . instance . skins_for ( current_flavour ) . include? current_user & . setting_skin
current_user . setting_skin
end
def cache_collection ( raw , klass )