fanforce-plugin-factory 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +21 -0
- data/Gemfile +2 -0
- data/README.md +218 -0
- data/Rakefile +16 -0
- data/fanforce-plugin-factory.gemspec +42 -0
- data/lib/fanforce/plugin_factory.rake +71 -0
- data/lib/fanforce/plugin_factory.rb +60 -0
- data/lib/fanforce/plugin_factory/_init_sinatra.rb +53 -0
- data/lib/fanforce/plugin_factory/assets/css/add_edit_initiative.scss +1 -0
- data/lib/fanforce/plugin_factory/assets/css/add_source.scss +1 -0
- data/lib/fanforce/plugin_factory/assets/css/engage.scss +1 -0
- data/lib/fanforce/plugin_factory/assets/css/new_message.scss +1 -0
- data/lib/fanforce/plugin_factory/assets/css/promotional.scss +1 -0
- data/lib/fanforce/plugin_factory/assets/css/source_details.scss +1 -0
- data/lib/fanforce/plugin_factory/assets/img/icon-16.png +0 -0
- data/lib/fanforce/plugin_factory/assets/img/icon-32.png +0 -0
- data/lib/fanforce/plugin_factory/assets/img/icon-42.png +0 -0
- data/lib/fanforce/plugin_factory/assets/js/add_edit_initiative.js +1 -0
- data/lib/fanforce/plugin_factory/assets/js/add_source.js +1 -0
- data/lib/fanforce/plugin_factory/assets/js/add_source_popup.js +0 -0
- data/lib/fanforce/plugin_factory/assets/js/engage.js +1 -0
- data/lib/fanforce/plugin_factory/assets/js/new_message.js +1 -0
- data/lib/fanforce/plugin_factory/assets/js/promotional.js +2 -0
- data/lib/fanforce/plugin_factory/assets/js/source_details.js +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/_mixins.scss +97 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/_module-error.scss +11 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/_module-search-to-add-initiative.scss +66 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/_module-video-thumbnail.scss +15 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/_tags.scss +83 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/_variables.scss +27 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/broadcaster-divider-arrow.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/icons/dropdown-arrow.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/icons/initiative.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/_add_edit_initiative.scss +23 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/_add_source.scss +17 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/_engage.scss +39 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/_new_message.scss +26 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/_promotional.scss +26 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/_source_details.scss +16 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/add_edit_initiative.js +6 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/add_source.js +6 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/engage.js +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/new_message.js +5 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/promotional.js +1 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/layouts/source_details.js +5 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/module-error/arrow-left.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/module-error/icon-error.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/module-search-to-add-initiative/icon-search.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/module-search-to-add-initiative/spinner.gif +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/module-search-to-add-initiative/sprite-arrows.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/common/module-video-thumbnail/icon-play.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/promotional/fanforce_bg.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/promotional/icon-42.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/promotional/icon-behavior.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/promotional/icon-broadcaster.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/promotional/icon-data-connector.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/promotional/icon-data-processor.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/promotional/icon-identifier.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap-datepicker/datepicker.css +7 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap-datepicker/datepicker.js +454 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap-timepicker/timepicker.css +82 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap-timepicker/timepicker.js +803 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap/css/bootstrap.css +6103 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap/css/bootstrap.min.css +868 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap/img/glyphicons-halflings.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap/js/bootstrap.js +2170 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/bootstrap/js/bootstrap.min.js +7 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/chosen/chosen-sprite.png +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/chosen/chosen.jquery.min.js +10 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/chosen/chosen.scss +399 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/font-awesome/css/font-awesome.css +540 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/font-awesome/css/font-awesome.min.css +33 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/font-awesome/font/FontAwesome.otf +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/font-awesome/font/fontawesome-webfont.eot +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/font-awesome/font/fontawesome-webfont.svg +284 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/font-awesome/font/fontawesome-webfont.ttf +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/font-awesome/font/fontawesome-webfont.woff +0 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/jquery/jquery.inputHint.js +154 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/jquery/jquery.tmpl.debug.js +484 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/knockout/knockout.custom-handlers.coffee +131 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/knockout/knockout.debug.js +3223 -0
- data/lib/fanforce/plugin_factory/assets/lib/vendors/underscore/underscore.debug.js +999 -0
- data/lib/fanforce/plugin_factory/config/_error_handling.rb +26 -0
- data/lib/fanforce/plugin_factory/config/helpers/assets.rb +23 -0
- data/lib/fanforce/plugin_factory/config/helpers/fanforce.rb +21 -0
- data/lib/fanforce/plugin_factory/config/helpers/json.rb +10 -0
- data/lib/fanforce/plugin_factory/config/sinatra_config.rb +65 -0
- data/lib/fanforce/plugin_factory/initializers/ff_globals.rb +72 -0
- data/lib/fanforce/plugin_factory/layouts/add_edit_initiative.haml +14 -0
- data/lib/fanforce/plugin_factory/layouts/add_source.haml +14 -0
- data/lib/fanforce/plugin_factory/layouts/engage.haml +27 -0
- data/lib/fanforce/plugin_factory/layouts/new_message.haml +14 -0
- data/lib/fanforce/plugin_factory/layouts/promotional.haml +14 -0
- data/lib/fanforce/plugin_factory/layouts/source_details.haml +14 -0
- data/lib/fanforce/plugin_factory/public/favicon.ico +0 -0
- data/lib/fanforce/plugin_factory/routes.rb +35 -0
- data/lib/fanforce/plugin_factory/routes_behavior.rb +28 -0
- data/lib/fanforce/plugin_factory/routes_broadcaster.rb +9 -0
- data/lib/fanforce/plugin_factory/routes_data_connector.rb +21 -0
- data/lib/fanforce/plugin_factory/sprockets/compiler.rb +107 -0
- data/lib/fanforce/plugin_factory/sprockets/hacks.rb +43 -0
- data/lib/fanforce/plugin_factory/version.rb +5 -0
- data/lib/fanforce/plugin_factory/views/add_initiative.haml +1 -0
- data/lib/fanforce/plugin_factory/views/add_source.haml +1 -0
- data/lib/fanforce/plugin_factory/views/close_popup.haml +8 -0
- data/lib/fanforce/plugin_factory/views/edit_initiative.haml +1 -0
- data/lib/fanforce/plugin_factory/views/engage.haml +1 -0
- data/lib/fanforce/plugin_factory/views/index.haml +38 -0
- data/lib/fanforce/plugin_factory/views/new_message.haml +1 -0
- data/lib/fanforce/plugin_factory/views/source_details.haml +1 -0
- data/lib/fanforce/plugin_factory/views/widget_tmpls.haml +1 -0
- data/lib/fanforce/plugin_factory_workers.rb +1 -0
- metadata +436 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
class FanforcePlugin::Sinatra
|
2
|
+
require 'fanforce/errors'
|
3
|
+
include Fanforce::Errors
|
4
|
+
|
5
|
+
set :raise_errors, false
|
6
|
+
set :show_exceptions, false
|
7
|
+
|
8
|
+
error 400..600 do
|
9
|
+
e = env['sinatra.error'] or (next response if e.nil?)
|
10
|
+
|
11
|
+
if Object.const_defined?('Fanforce') and Fanforce.const_defined?('Api') and e.is_a?(Fanforce::Api::Error)
|
12
|
+
errors = e.errors
|
13
|
+
else
|
14
|
+
errors = e.respond_to?(:public_errors) ? e.public_errors : []
|
15
|
+
errors << {message: 'There has been an internal server error. Our developers have been notified.'} if errors.size == 0
|
16
|
+
end
|
17
|
+
|
18
|
+
admin_details = Fanforce::Errors.format_admin_details(e, errors)
|
19
|
+
|
20
|
+
body = {errors: errors}
|
21
|
+
body.merge!(admin_details.merge(backtrace: e.backtrace)).delete(:public_response) if params[:show_error_details] == '1' or FanforcePlugin.config.show_error_details
|
22
|
+
|
23
|
+
status(e.respond_to?(:code ) ? e.code : 500) and json(body)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Sinatra::AssetHelpers
|
2
|
+
|
3
|
+
def stylesheet(s)
|
4
|
+
s += '.css' unless s.include?('.css')
|
5
|
+
s = asset_path(s) unless s =~ /^https?:\// or s =~ /^\/\/\/.+/
|
6
|
+
"<link rel='stylesheet' href='#{s}' />"
|
7
|
+
end
|
8
|
+
|
9
|
+
def javascript(s)
|
10
|
+
s += '.js' unless s.include?('.js')
|
11
|
+
s = asset_path(s) unless s =~ /^https?:\// or s =~ /^\/\/\/.+/
|
12
|
+
"<script type='text/javascript' src='#{s}'></script>"
|
13
|
+
end
|
14
|
+
|
15
|
+
def asset_path(source, options={})
|
16
|
+
source = ('/assets/' + source).gsub('//', '/').gsub('/assets/assets/', '/assets/')
|
17
|
+
end
|
18
|
+
|
19
|
+
def image_path(source)
|
20
|
+
asset_path(source)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Sinatra::FanforceHelpers
|
2
|
+
require 'fanforce'
|
3
|
+
|
4
|
+
def fanforce_id
|
5
|
+
@fanforce_id = params[:fanforce_id] || ff.params[:fanforce_id]
|
6
|
+
end
|
7
|
+
|
8
|
+
def ff
|
9
|
+
return @ff if @ff.present?
|
10
|
+
@ff = Fanforce.new(params)
|
11
|
+
#return @ff if !@ff.valid_fanforce_request? and !@ff.valid_fanforce_js_request?
|
12
|
+
|
13
|
+
@ff.auth Sinatra::FanforceHelpers.find_api_key(ff.params[:fanforce_id])
|
14
|
+
@ff
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.find_api_key(fanforce_id, addon_type=:plugin, addon_id=FanforcePlugin._id)
|
18
|
+
$Redis.get("installed:#{addon_type}-#{addon_id}:#{fanforce_id}")
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
|
3
|
+
module Sinatra::JSONHelpers
|
4
|
+
def json(*args)
|
5
|
+
args[0] = {} if args.size == 0
|
6
|
+
content_type (Rack.const_defined?('JSONR') and Rack::JSONR.is_jsonp_request?(request)) ? 'application/javascript' : :json
|
7
|
+
MultiJson.dump args[0], :pretty => settings.respond_to?(:json_pretty) && settings.json_pretty
|
8
|
+
end
|
9
|
+
alias JSON json
|
10
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
class FanforcePlugin::SinatraConfig
|
2
|
+
attr_accessor :layout_for_add_initiative, :layout_for_add_source, :layout_for_close_popup, :layout_for_edit_initiative, :layout_for_engage, :layout_for_index, :layout_for_new_message, :layout_for_source_details
|
3
|
+
attr_accessor :_id, :redis_url, :factory_root_dir, :root_dir, :dir_name, :show_error_details
|
4
|
+
attr_reader :type
|
5
|
+
|
6
|
+
def initialize(root_dir)
|
7
|
+
@layout_for_add_initiative = true
|
8
|
+
@layout_for_add_source = true
|
9
|
+
@layout_for_close_popup = true
|
10
|
+
@layout_for_edit_initiative = true
|
11
|
+
@layout_for_engage = true
|
12
|
+
@layout_for_index = true
|
13
|
+
@layout_for_new_message = true
|
14
|
+
@layout_for_source_details = true
|
15
|
+
|
16
|
+
@_id = ENV['FANFORCE_PLUGIN_ID']
|
17
|
+
@type = nil
|
18
|
+
@root_dir = root_dir
|
19
|
+
@factory_root_dir = File.expand_path '../../', __FILE__
|
20
|
+
@redis_url = ENV['REDIS_URL'] || 'redis://localhost:6379'
|
21
|
+
@show_error_details = false
|
22
|
+
end
|
23
|
+
|
24
|
+
def show_error_details=(bool)
|
25
|
+
@show_error_details = [true,1,'1'].include?(bool)
|
26
|
+
end
|
27
|
+
|
28
|
+
def type=(type)
|
29
|
+
allowed = [:data_connector, :data_processor, :broadcaster, :identifier, :behavior]
|
30
|
+
raise "type (#{type}) was not found in allowed list: #{allowed}" if !allowed.include?(type.to_sym)
|
31
|
+
@type = type.to_sym
|
32
|
+
end
|
33
|
+
|
34
|
+
def load
|
35
|
+
raise 'CRITICAL: This FanforcePlugin requires config._id to be set. See documentation.' if !@_id
|
36
|
+
raise 'CRITICAL: This FanforcePlugin requires config.root_dir to be set. See documentation' if !@root_dir
|
37
|
+
|
38
|
+
FanforcePlugin::Sinatra.set :root, @root_dir
|
39
|
+
FanforcePlugin::Sinatra.set :public_folder, [@root_dir+'/public', @factory_root_dir+'/public'].inject(''){|dir, d| File.directory?(d) ? (break d) : d }
|
40
|
+
FanforcePlugin::Sinatra.set :views, [@root_dir+'/views', @factory_root_dir+'/views'].inject(''){|dir, d| File.directory?(d) ? (break d) : d }
|
41
|
+
|
42
|
+
FanforcePlugin.config.load_routes
|
43
|
+
FanforcePlugin.config.load_redis
|
44
|
+
end
|
45
|
+
|
46
|
+
def load_routes
|
47
|
+
@dir_name = /\/([^\/]+)\/?$/.match(@root_dir)[1]
|
48
|
+
|
49
|
+
$: << File.join(@root_dir,'lib') if File.directory?("#{@root_dir}/lib")
|
50
|
+
|
51
|
+
require "#{@root_dir}/config/initializer" if File.exists?("#{@root_dir}/config/initializer.rb")
|
52
|
+
require "#{@root_dir}/config/routes" if File.exists?("#{@root_dir}/config/routes.rb")
|
53
|
+
|
54
|
+
require "#{@root_dir}/initializer" if File.exists?("#{@root_dir}/initializer.rb")
|
55
|
+
require "#{@root_dir}/routes" if File.exists?("#{@root_dir}/routes.rb")
|
56
|
+
|
57
|
+
require "#{@factory_root_dir}/routes_#{@type}" if @type and File.exists?("#{@factory_root_dir}/routes_#{@type}.rb")
|
58
|
+
require "#{@factory_root_dir}/routes"
|
59
|
+
end
|
60
|
+
|
61
|
+
def load_redis
|
62
|
+
$Redis = ::Redis.new(url: @redis_url)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
if ENV['RACK_ENV'] == 'development'
|
2
|
+
$BASE_DOMAIN = 'fanforce.gg'
|
3
|
+
$APP_DOMAIN = 'app.' + $BASE_DOMAIN
|
4
|
+
$API_DOMAIN = 'api.' + $BASE_DOMAIN
|
5
|
+
$I_DOMAIN = 'i.' + $BASE_DOMAIN
|
6
|
+
$WEBSITE_DOMAIN = $BASE_DOMAIN
|
7
|
+
|
8
|
+
$SMARTURL_DOMAIN = 'fanforc.gg'
|
9
|
+
$FF_PLUGIN_DOMAIN = 'ffplugin.gg'
|
10
|
+
$FF_APP_DOMAIN = 'ffapp.gg'
|
11
|
+
$FF_WIDGET_DOMAIN = 'ffwidget.gg'
|
12
|
+
|
13
|
+
$DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com' # or localhost:3000'
|
14
|
+
|
15
|
+
$PUSHER_APP_ID = '23240'
|
16
|
+
$PUSHER_KEY = '029caf227a64c8e82e99'
|
17
|
+
$PUSHER_SECRET = '3169163d2e27de9a2291'
|
18
|
+
|
19
|
+
elsif ENV['RACK_ENV'] == 'test'
|
20
|
+
$BASE_DOMAIN = 'fanforce.gg'
|
21
|
+
$APP_DOMAIN = 'app.' + $BASE_DOMAIN
|
22
|
+
$API_DOMAIN = 'api.' + $BASE_DOMAIN
|
23
|
+
$I_DOMAIN = 'i.' + $BASE_DOMAIN
|
24
|
+
$WEBSITE_DOMAIN = $BASE_DOMAIN
|
25
|
+
|
26
|
+
$SMARTURL_DOMAIN = 'fanforc.gg'
|
27
|
+
$FF_PLUGIN_DOMAIN = 'ffplugin.gg'
|
28
|
+
$FF_WIDGET_DOMAIN = 'ffwidget.gg'
|
29
|
+
$FF_APP_DOMAIN = 'ffapp.gg'
|
30
|
+
|
31
|
+
$DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com'
|
32
|
+
|
33
|
+
$PUSHER_APP_ID = '23243'
|
34
|
+
$PUSHER_KEY = '7bcc87b3c55301f687b9'
|
35
|
+
$PUSHER_SECRET = '61c760c05430e68d7e8d'
|
36
|
+
|
37
|
+
elsif ENV['RACK_ENV'] == 'qa'
|
38
|
+
$BASE_DOMAIN = 'fanforce-qa.com'
|
39
|
+
$APP_DOMAIN = 'app.' + $BASE_DOMAIN
|
40
|
+
$API_DOMAIN = 'api.' + $BASE_DOMAIN
|
41
|
+
$I_DOMAIN = 'i.' + $BASE_DOMAIN
|
42
|
+
$WEBSITE_DOMAIN = $BASE_DOMAIN
|
43
|
+
|
44
|
+
$SMARTURL_DOMAIN = 'fanforc.us'
|
45
|
+
$FF_PLUGIN_DOMAIN = 'ffplugin.us'
|
46
|
+
$FF_APP_DOMAIN = 'ffapp.us'
|
47
|
+
$FF_WIDGET_DOMAIN = 'ffwidget.us'
|
48
|
+
|
49
|
+
$DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com'
|
50
|
+
|
51
|
+
$PUSHER_APP_ID = '14778'
|
52
|
+
$PUSHER_KEY = 'b5e2e23fb9542798ef38'
|
53
|
+
$PUSHER_SECRET = '7bfba2003df078ca64e9'
|
54
|
+
|
55
|
+
elsif ENV['RACK_ENV'] == 'production'
|
56
|
+
$BASE_DOMAIN = 'fanforce.com'
|
57
|
+
$APP_DOMAIN = 'app.' + $BASE_DOMAIN
|
58
|
+
$API_DOMAIN = 'api.' + $BASE_DOMAIN
|
59
|
+
$I_DOMAIN = 'i.' + $BASE_DOMAIN
|
60
|
+
$WEBSITE_DOMAIN = $BASE_DOMAIN
|
61
|
+
|
62
|
+
$SMARTURL_DOMAIN = 'fanforce.io'
|
63
|
+
$FF_PLUGIN_DOMAIN = 'ffplugin.io'
|
64
|
+
$FF_APP_DOMAIN = 'ffapp.io'
|
65
|
+
$FF_WIDGET_DOMAIN = 'ffwidget.io'
|
66
|
+
|
67
|
+
$DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com'
|
68
|
+
|
69
|
+
$PUSHER_APP_ID = '14778'
|
70
|
+
$PUSHER_KEY = 'b5e2e23fb9542798ef38'
|
71
|
+
$PUSHER_SECRET = '7bfba2003df078ca64e9'
|
72
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8' ?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%title Fanforce
|
6
|
+
%meta{'http-equiv'=>'Content-Type', content:'text/html; charset=iso-8859-1'}/
|
7
|
+
%meta{'http-equiv'=>'Content-Language', content: 'en-us'}/
|
8
|
+
= stylesheet '/add_edit_initiative.css'
|
9
|
+
|
10
|
+
%body
|
11
|
+
= yield
|
12
|
+
= javascript '///' + $I_DOMAIN + '/devforce.js'
|
13
|
+
= javascript '/add_edit_initiative.js'
|
14
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8' ?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%title Fanforce
|
6
|
+
%meta{'http-equiv'=>'Content-Type', content:'text/html; charset=iso-8859-1'}/
|
7
|
+
%meta{'http-equiv'=>'Content-Language', content: 'en-us'}/
|
8
|
+
= stylesheet '/add_source.css'
|
9
|
+
|
10
|
+
%body
|
11
|
+
= yield
|
12
|
+
= javascript '///' + $I_DOMAIN + '/devforce.js'
|
13
|
+
= javascript '/add_source.js'
|
14
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8' ?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%title Fanforce
|
6
|
+
%meta{'http-equiv'=>'Content-Type', content:'text/html; charset=iso-8859-1'}/
|
7
|
+
%meta{'http-equiv'=>'Content-Language', content: 'en-us'}/
|
8
|
+
= stylesheet '/engage.css'
|
9
|
+
%body.layout-engage
|
10
|
+
.lyt-root
|
11
|
+
.lyt-header
|
12
|
+
#logo
|
13
|
+
= yield
|
14
|
+
.lyt-root-footer
|
15
|
+
.lyt-footer
|
16
|
+
%span#distributed-by
|
17
|
+
%a{href: "http://#{$BASE_DOMAIN}"} Powered by Fanforce.
|
18
|
+
|
19
|
+
= javascript "http://#{$I_DOMAIN}/#{params[:fanforce_slug]}-fanforce.js#{'?force_compile=1&env=development' if ENV['RACK_ENV']=='development'}"
|
20
|
+
= yield_content :after_fanforce_js
|
21
|
+
:coffeescript
|
22
|
+
if FF.account.website_url
|
23
|
+
$('#distributed-by').html('Distributed by <a href="' + FF.account.website_url + '">' + FF.account.name + '</a>. ')
|
24
|
+
$('#logo').html('<a href="' + FF.account.website_url + '"><img class="logo" src="' + FF.account.logo_url + '"></a>') if FF.account.logo_url?
|
25
|
+
else
|
26
|
+
$('#distributed-by').html('Distributed by ' + FF.account.name + '. ')
|
27
|
+
$('#logo').html('<img class="logo" src="' + FF.account.logo_url + '">') if FF.account.logo_url
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8' ?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%title Fanforce
|
6
|
+
%meta{'http-equiv'=>'Content-Type', content:'text/html; charset=iso-8859-1'}/
|
7
|
+
%meta{'http-equiv'=>'Content-Language', content: 'en-us'}/
|
8
|
+
= stylesheet '/new_message.css'
|
9
|
+
|
10
|
+
%body
|
11
|
+
= yield
|
12
|
+
= javascript "///#{$I_DOMAIN}/devforce.js?force_compile=#{ENV['RACK_ENV']=='development' ? 1 : 0}&env=#{ENV['RACK_ENV']}"
|
13
|
+
= javascript '/new_message.js'
|
14
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8' ?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%title Fanforce
|
6
|
+
%meta{'http-equiv'=>'Content-Type', content:'text/html; charset=iso-8859-1'}/
|
7
|
+
%meta{'http-equiv'=>'Content-Language', content: 'en-us'}/
|
8
|
+
= stylesheet '/promotional.css'
|
9
|
+
|
10
|
+
%body
|
11
|
+
= yield
|
12
|
+
= javascript '///' + $I_DOMAIN + '/devforce.js'
|
13
|
+
= javascript '/promotional.js'
|
14
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8' ?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%title Fanforce
|
6
|
+
%meta{'http-equiv'=>'Content-Type', content:'text/html; charset=iso-8859-1'}/
|
7
|
+
%meta{'http-equiv'=>'Content-Language', content: 'en-us'}/
|
8
|
+
= stylesheet '/source_details.css'
|
9
|
+
|
10
|
+
%body
|
11
|
+
= yield
|
12
|
+
= javascript '///' + $I_DOMAIN + '/devforce.js'
|
13
|
+
= javascript '/source_details.js'
|
14
|
+
= yield_content :after_core_js
|
Binary file
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class FanforcePlugin::Sinatra
|
2
|
+
|
3
|
+
# INDEX ########################################################################
|
4
|
+
def route_index(params)
|
5
|
+
page :index, :layout => :promotional
|
6
|
+
end
|
7
|
+
['/', '/index.html'].each do |path|
|
8
|
+
get path do route_index(params) end
|
9
|
+
end
|
10
|
+
|
11
|
+
# INSTALL ######################################################################
|
12
|
+
def route_install(params)
|
13
|
+
raise "This is not a valid plugin install request: #{env['HTTP_HOST']}" if !ff.valid_install_request?(params)
|
14
|
+
api_key = $Redis.get("installed:#{ff.params[:addon_type]}-#{ff.params[:addon_id]}:#{ff.params[:fanforce_id]}")
|
15
|
+
|
16
|
+
#raise 'A different API key already exists for this addon. Please uninstall first.' if api_key.present? and ff.params[:api_key] != api_key
|
17
|
+
$Redis.set("installed:#{ff.params[:addon_type]}-#{ff.params[:addon_id]}:#{ff.params[:fanforce_id]}", ff.params[:api_key])
|
18
|
+
ff.auth(ff.params[:api_key])
|
19
|
+
|
20
|
+
json status: 'installed', success: true
|
21
|
+
end
|
22
|
+
any '/install' do route_install(params) end
|
23
|
+
|
24
|
+
# UNINSTALL ####################################################################
|
25
|
+
def route_uninstall(params)
|
26
|
+
raise 'This is not a valid plugin uninstall request.' if !ff.valid_uninstall_request?(params)
|
27
|
+
api_key = $Redis.get("installed:#{ff.params[:addon_type]}-#{ff.params[:addon_id]}:#{ff.params[:fanforce_id]}")
|
28
|
+
|
29
|
+
raise 'API keys must match before an addon can be uninstalled.' if api_key.present? and ff.params[:api_key] != api_key
|
30
|
+
$Redis.del("installed:#{ff.params[:addon_type]}-#{ff.params[:addon_id]}:#{ff.params[:fanforce_id]}")
|
31
|
+
json status: 'uninstalled', success: true
|
32
|
+
end
|
33
|
+
any '/uninstall' do route_uninstall(params) end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class FanforcePlugin::Sinatra
|
2
|
+
|
3
|
+
# ADD INITIATIVE UI ############################################################
|
4
|
+
def route_add_initiative(params)
|
5
|
+
page :add_initiative, :layout => :add_edit_initiative
|
6
|
+
end
|
7
|
+
get '/add_initiative.html' do route_add_initiative(params) end
|
8
|
+
|
9
|
+
# EDIT INITIATIVE UI ###########################################################
|
10
|
+
def route_edit_initiative(params)
|
11
|
+
page :edit_initiative, :layout => :add_edit_initiative
|
12
|
+
end
|
13
|
+
get '/edit_initiative.html' do route_edit_initiative(params) end
|
14
|
+
|
15
|
+
# WIDGET TMPLS #################################################################
|
16
|
+
def route_widget_tmpls(params)
|
17
|
+
content_type 'application/javascript'
|
18
|
+
page :widget_tmpls
|
19
|
+
end
|
20
|
+
get '/widget_tmpls' do route_widget_tmpls(params) end
|
21
|
+
|
22
|
+
# ENGAGE #######################################################################
|
23
|
+
def route_engage(params)
|
24
|
+
page :engage, :layout => :engage
|
25
|
+
end
|
26
|
+
get '/:fanforce_slug/:initiative_slug/engage.html' do route_engage(params) end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class FanforcePlugin::Sinatra
|
2
|
+
|
3
|
+
# NEW MESSAGE ##################################################################
|
4
|
+
def route_new_message(params)
|
5
|
+
page :new_message, :layout => :new_message
|
6
|
+
end
|
7
|
+
get '/new_message.html' do route_new_message(params) end
|
8
|
+
|
9
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class FanforcePlugin::Sinatra
|
2
|
+
|
3
|
+
# ADD SOURCE ##################################################################
|
4
|
+
def route_add_source(params)
|
5
|
+
page :add_source, :layout => :add_source
|
6
|
+
end
|
7
|
+
get '/add_source.html' do route_add_source(params) end
|
8
|
+
|
9
|
+
# CLOSE POPUP #################################################################
|
10
|
+
def route_close_popup(params)
|
11
|
+
page :close_popup
|
12
|
+
end
|
13
|
+
get '/close_popup.html' do route_close_popup(params) end
|
14
|
+
|
15
|
+
# SOURCE DETAILS ##############################################################
|
16
|
+
def route_source_details(params)
|
17
|
+
page :source_details, :layout => :source_details
|
18
|
+
end
|
19
|
+
get '/source_details.html' do route_source_details(params) end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'sprockets'
|
2
|
+
require 'sprockets-sass'
|
3
|
+
require 'sass'
|
4
|
+
|
5
|
+
class SprocketsCompiler
|
6
|
+
# This is pretty much copy/paste from https://github.com/stevehodgkiss/guard-sprockets2/blob/master/lib/guard/sprockets2/compiler.rb
|
7
|
+
# The only method added/changed is self.sprockets()
|
8
|
+
|
9
|
+
def initialize(options = {})
|
10
|
+
configure(options)
|
11
|
+
@target = Pathname.new(@assets_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
def clean
|
15
|
+
FileUtils.rm_rf @assets_path, :secure => true
|
16
|
+
end
|
17
|
+
|
18
|
+
def compile
|
19
|
+
@sprockets.send(:expire_index!)
|
20
|
+
success = true
|
21
|
+
@precompile.each do |path|
|
22
|
+
@sprockets.each_logical_path do |logical_path|
|
23
|
+
next unless path_matches?(path, logical_path)
|
24
|
+
|
25
|
+
if asset = @sprockets.find_asset(logical_path)
|
26
|
+
success = compile_asset(asset, false)
|
27
|
+
success = compile_asset(asset, true) if @digest
|
28
|
+
break unless success
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
success
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def compile_asset(asset, digest)
|
38
|
+
filename = digest ? @target.join(asset.digest_path) : @target.join(asset.logical_path)
|
39
|
+
puts filename
|
40
|
+
|
41
|
+
FileUtils.mkdir_p filename.dirname
|
42
|
+
asset.write_to(filename)
|
43
|
+
asset.write_to("#{filename}.gz") if @gz && filename.to_s =~ /\.(css|js)$/
|
44
|
+
true
|
45
|
+
rescue => e
|
46
|
+
puts unless ENV['GUARD_ENV'] == 'test'
|
47
|
+
UI.error e.message.gsub(/^Error: /, '')
|
48
|
+
false
|
49
|
+
end
|
50
|
+
|
51
|
+
def path_matches?(path, logical_path)
|
52
|
+
if path.is_a?(Regexp)
|
53
|
+
path.match(logical_path)
|
54
|
+
else
|
55
|
+
File.fnmatch(path.to_s, logical_path)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def configure(options)
|
60
|
+
@sprockets = options[:sprockets]
|
61
|
+
@assets_path = options[:assets_path]
|
62
|
+
@precompile = options[:precompile]
|
63
|
+
@digest = options[:digest]
|
64
|
+
@gz = options[:gz]
|
65
|
+
set_defaults
|
66
|
+
end
|
67
|
+
|
68
|
+
def set_defaults
|
69
|
+
if defined?(Rails)
|
70
|
+
@sprockets ||= Rails.application.assets
|
71
|
+
@assets_path ||= File.join(Rails.public_path, Rails.application.config.assets.prefix)
|
72
|
+
@precompile ||= Rails.application.config.assets.precompile
|
73
|
+
else
|
74
|
+
@assets_path ||= "#{Dir.pwd}/public/assets"
|
75
|
+
@precompile ||= [ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
|
76
|
+
end
|
77
|
+
@digest = true if @digest.nil?
|
78
|
+
@gz = true if @gz.nil?
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.setup(base_dir)
|
82
|
+
sprockets = ::Sprockets::Environment.new(base_dir)
|
83
|
+
|
84
|
+
sprockets.append_path 'assets/img'
|
85
|
+
sprockets.append_path 'assets/js'
|
86
|
+
sprockets.append_path 'assets/css'
|
87
|
+
sprockets.append_path 'assets/lib'
|
88
|
+
|
89
|
+
default_assets_dir = File.dirname( File.expand_path( __FILE__ ) ) + '/..'
|
90
|
+
sprockets.append_path default_assets_dir + '/assets/img'
|
91
|
+
sprockets.append_path default_assets_dir + '/assets/js'
|
92
|
+
sprockets.append_path default_assets_dir + '/assets/css'
|
93
|
+
sprockets.append_path default_assets_dir + '/assets/lib'
|
94
|
+
|
95
|
+
sprockets.append_path "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
|
96
|
+
|
97
|
+
if ENV['RACK_ENV'] != 'development'
|
98
|
+
require 'yui/compressor'
|
99
|
+
require 'uglifier'
|
100
|
+
sprockets.css_compressor = YUI::CssCompressor.new
|
101
|
+
sprockets.js_compressor = Uglifier.new
|
102
|
+
end
|
103
|
+
|
104
|
+
return sprockets
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|