fanforce-app-factory 0.40.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/fanforce-app-factory.gemspec +3 -3
- data/lib/fanforce/app_factory.rake +1 -17
- data/lib/fanforce/app_factory.rb +1 -5
- data/lib/fanforce/app_factory/_init_sinatra.rb +11 -4
- data/lib/fanforce/app_factory/assets/css/add_edit_initiative.scss +1 -0
- data/lib/fanforce/app_factory/assets/css/add_source.scss +1 -0
- data/lib/fanforce/app_factory/assets/css/convert_pending_initiative.scss +1 -0
- data/lib/fanforce/app_factory/assets/css/engage.scss +1 -0
- data/lib/fanforce/app_factory/assets/css/new_message.scss +1 -0
- data/lib/fanforce/app_factory/assets/css/source_details.scss +1 -0
- data/lib/fanforce/app_factory/assets/js/add_edit_initiative.js +1 -0
- data/lib/fanforce/app_factory/assets/js/add_source.js +1 -0
- data/lib/fanforce/app_factory/assets/js/add_source_popup.js +0 -0
- data/lib/fanforce/app_factory/assets/js/convert_pending_initiative.js +1 -0
- data/lib/fanforce/app_factory/assets/js/fanforce-engager.js +0 -0
- data/lib/fanforce/app_factory/assets/js/fanforce-finder.js +0 -0
- data/lib/fanforce/app_factory/assets/js/new_message.js +1 -0
- data/lib/fanforce/app_factory/assets/js/source_details.js +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/_bootstrap-overrides.scss +16 -0
- data/lib/fanforce/app_factory/assets/lib/common/_mixins.scss +1 -1
- data/lib/fanforce/app_factory/assets/lib/common/_module-add-initiative-footer.scss +17 -0
- data/lib/fanforce/app_factory/assets/lib/common/_module-error.scss +11 -0
- data/lib/fanforce/app_factory/assets/lib/common/_module-initiative-searcher.scss +63 -0
- data/lib/fanforce/app_factory/assets/lib/common/_module-page-loading.scss +1 -0
- data/lib/fanforce/app_factory/assets/lib/common/_module-saving-initiative.scss +6 -0
- data/lib/fanforce/app_factory/assets/lib/common/_module-start-here.scss +6 -0
- data/lib/fanforce/app_factory/assets/lib/common/_module-video-thumbnail.scss +15 -0
- data/lib/fanforce/app_factory/assets/lib/common/_tags.scss +0 -82
- data/lib/fanforce/app_factory/assets/lib/common/_variables.scss +1 -1
- data/lib/fanforce/app_factory/assets/lib/common/broadcaster-divider-arrow.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/_add_edit_initiative.scss +27 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/_add_source.scss +18 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/_convert_pending_initiative.scss +27 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/_engage.scss +80 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/_new_message.scss +24 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/_source_details.scss +17 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/add_edit_initiative.js +6 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/add_source.js +6 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/convert_pending_initiative.js +6 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/engage.js +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/new_message.js +5 -0
- data/lib/fanforce/app_factory/assets/lib/common/layouts/source_details.js +5 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-error/arrow-left.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-error/icon-error.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-initiative-searcher/icon-search.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-initiative-searcher/spinner.gif +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-initiative-searcher/sprite-arrows.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-saving-initiative/spinner.gif +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-start-here/arrow.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/common/module-video-thumbnail/icon-play.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/bootstrap-datepicker/datepicker.css +7 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/bootstrap-datepicker/datepicker.js +454 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/bootstrap-timepicker/timepicker.css +82 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/bootstrap-timepicker/timepicker.js +803 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/chosen/_chosen_override.scss +6 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/chosen/chosen-sprite@2x.png +0 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/chosen/chosen.scss +2 -0
- data/lib/fanforce/app_factory/assets/lib/vendors/knockout/knockout.custom-handlers.coffee +4 -4
- data/lib/fanforce/app_factory/assets/lib/vendors/select2/_select2_override.scss +1 -1
- data/lib/fanforce/app_factory/assets/lib/vendors/select2/select2_modified.js +3 -0
- data/lib/fanforce/app_factory/config/core_config.rb +52 -8
- data/lib/fanforce/app_factory/config/helpers/fanforce.rb +17 -0
- data/lib/fanforce/app_factory/config/helpers/ractive.rb +27 -0
- data/lib/fanforce/app_factory/layouts/add_edit_initiative.haml +19 -0
- data/lib/fanforce/app_factory/layouts/add_source.haml +19 -0
- data/lib/fanforce/app_factory/layouts/convert_pending_initiative.haml +19 -0
- data/lib/fanforce/app_factory/layouts/engage.haml +38 -0
- data/lib/fanforce/app_factory/layouts/new_message.haml +19 -0
- data/lib/fanforce/app_factory/layouts/source_details.haml +19 -0
- data/lib/fanforce/app_factory/routes_behavior.rb +44 -0
- data/lib/fanforce/app_factory/routes_broadcaster.rb +9 -0
- data/lib/fanforce/app_factory/routes_connector.rb +21 -0
- data/lib/fanforce/app_factory/{routes.rb → routes_core.rb} +6 -6
- data/lib/fanforce/app_factory/routes_identifier.rb +3 -0
- data/lib/fanforce/app_factory/routes_js_widget.rb +10 -0
- data/lib/fanforce/app_factory/sprockets/compiler.rb +5 -0
- data/lib/fanforce/app_factory/version.rb +1 -1
- data/lib/fanforce/app_factory/views/add_initiative.haml +1 -0
- data/lib/fanforce/app_factory/views/add_source.haml +1 -0
- data/lib/fanforce/app_factory/views/close_popup.haml +8 -0
- data/lib/fanforce/app_factory/views/convert_pending_initiative.haml +1 -0
- data/lib/fanforce/app_factory/views/edit_initiative.haml +1 -0
- data/lib/fanforce/app_factory/views/engage.haml +1 -0
- data/lib/fanforce/app_factory/views/new_message.haml +1 -0
- data/lib/fanforce/app_factory/views/source_details.haml +1 -0
- data/lib/fanforce/app_factory/views/widget_templates.haml +1 -0
- metadata +82 -12
@@ -91,7 +91,7 @@ ko.bindingHandlers.chosen = {
|
|
91
91
|
}
|
92
92
|
|
93
93
|
ko.bindingHandlers.select2 = {
|
94
|
-
init: (
|
94
|
+
init: (element, valueAccessor, allBindingsAccessor) ->
|
95
95
|
obj = valueAccessor()
|
96
96
|
allBindings = allBindingsAccessor()
|
97
97
|
lookupKey = allBindings.lookupKey
|
@@ -105,12 +105,12 @@ ko.bindingHandlers.select2 = {
|
|
105
105
|
ko.utils.domNodeDisposal.addDisposeCallback(element, ->
|
106
106
|
$(element).select2('destroy')
|
107
107
|
)
|
108
|
-
|
109
|
-
update: (
|
108
|
+
|
109
|
+
update: (element, valueAccessor, allBindingsAccessor) ->
|
110
110
|
obj = valueAccessor()
|
111
111
|
$(element).select2('enable', !!obj.enable) if obj.enable?
|
112
112
|
$(element).trigger('change')
|
113
|
-
|
113
|
+
|
114
114
|
}
|
115
115
|
|
116
116
|
ko.bindingHandlers.class =
|
@@ -40,7 +40,7 @@ body {
|
|
40
40
|
&[disabled] { color:#cccccc;
|
41
41
|
&:hover { color:#cccccc; background: transparent; }
|
42
42
|
}
|
43
|
-
&:hover {
|
43
|
+
&:hover { text-decoration: none; background: #c6dcf1; text-shadow:1px 1px 0 #ffffff; }
|
44
44
|
}
|
45
45
|
}
|
46
46
|
}
|
@@ -783,6 +783,9 @@ the specific language governing permissions and limitations under the Apache Lic
|
|
783
783
|
if (this.autofocus) this.focus();
|
784
784
|
|
785
785
|
this.nextSearchTerm = undefined;
|
786
|
+
|
787
|
+
// MODIFIED
|
788
|
+
if (this.opts.afterInitialize) { this.opts.afterInitialize(this) }
|
786
789
|
},
|
787
790
|
|
788
791
|
// abstract
|
@@ -1,24 +1,35 @@
|
|
1
1
|
class FanforceApp::CoreConfig
|
2
|
-
attr_accessor :layout_for_index, :layout_for_dashboard
|
3
2
|
attr_accessor :_id, :redis_url, :factory_root_dir, :root_dir, :dir_name, :show_error_details
|
4
3
|
attr_accessor :bugsnag, :bugsnag_enabled
|
5
4
|
attr_reader :type
|
6
5
|
|
7
|
-
|
6
|
+
PAGE_LAYOUTS_FOR = {
|
7
|
+
index: true,
|
8
|
+
dashboard: true,
|
9
|
+
add_initiative: true,
|
10
|
+
add_source: true,
|
11
|
+
close_popup: true,
|
12
|
+
edit_initiative: true,
|
13
|
+
engage: true,
|
14
|
+
new_message: true,
|
15
|
+
source_details: true,
|
16
|
+
}
|
8
17
|
|
9
18
|
def initialize(root_dir)
|
10
|
-
@layout_for_index = true
|
11
|
-
@layout_for_dashboard = true
|
12
|
-
|
13
19
|
@_id = ENV['FANFORCE_APP_ID']
|
14
20
|
@root_dir = root_dir
|
15
21
|
@factory_root_dir = File.expand_path '../../', __FILE__
|
16
|
-
@redis_url =
|
22
|
+
@redis_url = self.class.default_redis_url
|
17
23
|
@show_error_details = false
|
18
24
|
|
19
25
|
@bugsnag = (ENV['BUGSNAG_API_KEY'].present?) ? {api_key: ENV['BUGSNAG_API_KEY']} : nil
|
20
26
|
end
|
21
27
|
|
28
|
+
def has_layout_for(page)
|
29
|
+
return false if !page
|
30
|
+
return PAGE_LAYOUTS_FOR[page.to_sym] == true
|
31
|
+
end
|
32
|
+
|
22
33
|
def show_error_details=(bool)
|
23
34
|
@show_error_details = [true,1,'1'].include?(bool)
|
24
35
|
end
|
@@ -70,15 +81,48 @@ class FanforceApp::CoreConfig
|
|
70
81
|
require "#{@root_dir}/_routes" if File.exists?("#{@root_dir}/_routes.rb")
|
71
82
|
require "#{@root_dir}/routes" if File.exists?("#{@root_dir}/routes.rb")
|
72
83
|
|
73
|
-
require "#{@factory_root_dir}/
|
84
|
+
require "#{@factory_root_dir}/routes_core"
|
85
|
+
require "#{@factory_root_dir}/routes_connector"
|
86
|
+
require "#{@factory_root_dir}/routes_broadcaster"
|
87
|
+
require "#{@factory_root_dir}/routes_identifier"
|
88
|
+
require "#{@factory_root_dir}/routes_behavior"
|
89
|
+
require "#{@factory_root_dir}/routes_js_widget"
|
90
|
+
end
|
91
|
+
|
92
|
+
def load_env
|
93
|
+
self.class.load_env
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.load_env
|
97
|
+
if (!ENV['RACK_ENV'] or ENV['RACK_ENV'] == 'development')
|
98
|
+
load_env_from_file("#{FanforceApp.config.root_dir}/.powenv") if File.exists?("#{FanforceApp.config.root_dir}/.powenv")
|
99
|
+
load_env_from_file("#{FanforceApp.config.root_dir}/.appenv") if File.exists?("#{FanforceApp.config.root_dir}/.appenv")
|
100
|
+
end
|
74
101
|
end
|
75
102
|
|
76
103
|
def load_redis
|
77
104
|
self.class.load_redis(@redis_url)
|
78
105
|
end
|
79
106
|
|
80
|
-
def self.load_redis(redis_url=
|
107
|
+
def self.load_redis(redis_url=nil)
|
108
|
+
redis_url ||= default_redis_url
|
81
109
|
$Redis = ::Redis.new(url: redis_url)
|
82
110
|
end
|
83
111
|
|
112
|
+
def self.default_redis_url
|
113
|
+
ENV['REDIS_URL'] || 'redis://localhost:6379'
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.load_env_from_file(file)
|
117
|
+
File.open(file, 'rb') do |file|
|
118
|
+
contents = file.read
|
119
|
+
lines = contents.gsub('export ', '').split(/\n\r?/).reject{|line| line.blank?}
|
120
|
+
lines.each do |line|
|
121
|
+
keyValue = line.split("=", 2)
|
122
|
+
next unless keyValue.count == 2
|
123
|
+
ENV[keyValue.first] = keyValue.last.gsub("'",'').gsub('"','')
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
84
128
|
end
|
@@ -18,4 +18,21 @@ module Sinatra::FanforceHelpers
|
|
18
18
|
$Redis.get("installed:#{addon_type}-#{addon_id}:#{organization_id}")
|
19
19
|
end
|
20
20
|
|
21
|
+
# Creates a string representation of a javascript object for ractive.js
|
22
|
+
def compile_ractive_templates(options={}, &block)
|
23
|
+
context = Object.new
|
24
|
+
class << context
|
25
|
+
include Haml::Helpers
|
26
|
+
end
|
27
|
+
context.init_haml_helpers
|
28
|
+
|
29
|
+
format = options[:format] == 'html' ? :html : :json
|
30
|
+
|
31
|
+
return context.capture_haml(&block) if format == :html
|
32
|
+
single_line_html = context.capture_haml(&block).split(/\r?\n/).inject('') {|sl, l| sl += l.strip + ' ' }
|
33
|
+
matches = single_line_html.scan(/<script id=[\"'](.*?)[\"'](?:.*?)>(.*?)(?:<\/script>)/mi)
|
34
|
+
|
35
|
+
matches.inject({}) {|t,m| t[m[0]] = m[1]; t }.to_json
|
36
|
+
end
|
37
|
+
|
21
38
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Sinatra::RactiveHelpers
|
2
|
+
|
3
|
+
def RACTIVE(helper, &block)
|
4
|
+
begin require 'haml' rescue LoadError raise 'You must have the haml gem installed to use Fanforce.compile_jquery_templates.' end
|
5
|
+
raise ArgumentError, "Missing block" unless block_given?
|
6
|
+
context = Object.new
|
7
|
+
class << context
|
8
|
+
include Haml::Helpers
|
9
|
+
end
|
10
|
+
context.init_haml_helpers
|
11
|
+
helper = '#'+helper if helper !~ /^[#\^]/
|
12
|
+
"{{#{helper}}}\n" + context.capture_haml(&block) + "{{/#{helper.gsub(/(#|\^)/,'')}}}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def IF(helper, &block)
|
16
|
+
RACTIVE(helper, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def ELSE_IF(helper, &block)
|
20
|
+
RACTIVE(helper, &block)
|
21
|
+
end
|
22
|
+
|
23
|
+
def FOREACH(helper, &block)
|
24
|
+
RACTIVE(helper, &block)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
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
|
+
:javascript
|
10
|
+
BASE_DOMAIN = #{Fanforce.base_domain.to_json}
|
11
|
+
API_DOMAIN = #{Fanforce.api_domain.to_json}
|
12
|
+
ASSETS_DOMAIN = #{Fanforce.assets_domain.to_json}
|
13
|
+
|
14
|
+
%body
|
15
|
+
= yield
|
16
|
+
= javascript '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
|
17
|
+
= javascript "//#{Fanforce.eye_domain}/devforce.js#{'?DEBUG=1&DYNAMIC=1' if ENV['RACK_ENV']=='development'}"
|
18
|
+
= javascript '/add_edit_initiative.js'
|
19
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,19 @@
|
|
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
|
+
:javascript
|
10
|
+
BASE_DOMAIN = #{Fanforce.base_domain.to_json}
|
11
|
+
API_DOMAIN = #{Fanforce.api_domain.to_json}
|
12
|
+
ASSETS_DOMAIN = #{Fanforce.assets_domain.to_json}
|
13
|
+
|
14
|
+
%body
|
15
|
+
= yield
|
16
|
+
= javascript '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
|
17
|
+
= javascript "//#{Fanforce.eye_domain}/devforce.js#{'?DEBUG=1&DYNAMIC=1' if ENV['RACK_ENV']=='development'}"
|
18
|
+
= javascript '/add_source.js'
|
19
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,19 @@
|
|
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 '/convert_pending_initiative.css'
|
9
|
+
:javascript
|
10
|
+
BASE_DOMAIN = #{Fanforce.base_domain.to_json}
|
11
|
+
API_DOMAIN = #{Fanforce.api_domain.to_json}
|
12
|
+
ASSETS_DOMAIN = #{Fanforce.assets_domain.to_json}
|
13
|
+
|
14
|
+
%body
|
15
|
+
= yield
|
16
|
+
= javascript '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
|
17
|
+
= javascript "//#{Fanforce.eye_domain}/devforce.js#{'?DEBUG=1&DYNAMIC=1' if ENV['RACK_ENV']=='development'}"
|
18
|
+
= javascript '/convert_pending_initiative.js'
|
19
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,38 @@
|
|
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
|
+
#hello
|
13
|
+
#logo
|
14
|
+
= yield
|
15
|
+
.lyt-root-footer
|
16
|
+
.lyt-footer
|
17
|
+
%span#distributed-by
|
18
|
+
%a{href: "http://#{Fanforce.base_domain}"} Powered by Fanforce.
|
19
|
+
|
20
|
+
= javascript "//#{Fanforce.eye_domain}/#{params[:organization_slug]}-fanforce.js#{'?DEBUG=true&DYNAMIC=true' if ENV['RACK_ENV']=='development'}" do
|
21
|
+
FF.option('track_browse_webpage', false)
|
22
|
+
FF.option('dynamic_url', FF.browser.uri.scheme + '://' + '#{FanforcePlugin._id}.${SHORT_DOMAIN}/${INITIATIVE_SLUG_ID}')
|
23
|
+
|
24
|
+
= yield_content :after_fanforce_js
|
25
|
+
:coffeescript
|
26
|
+
FF.on('logout', ->
|
27
|
+
$('#hello').html('')
|
28
|
+
)
|
29
|
+
FF.organization (organization)->
|
30
|
+
if organization.website_url
|
31
|
+
$('#distributed-by').html('Distributed by <a href="' + organization.website_url + '">' + organization.name + '</a>. ')
|
32
|
+
$('#logo').html('<div class="logo"><a href="' + organization.website_url + '"><img src="' + organization.logo_url + '"></a></div>') if organization.logo_url
|
33
|
+
else
|
34
|
+
$('#distributed-by').html('Distributed by ' + organization.name + '. ')
|
35
|
+
$('#logo').html('<div class="logo"><img src="' + organization.logo_url + '"></div>') if organization.logo_url
|
36
|
+
FF.visitor (visitor)->
|
37
|
+
return if !visitor.access_level
|
38
|
+
$('#hello').html('<div class="hello"><div class="hello-wrapper"><span class="greeting">Hello, ' + visitor.first_name + '!</span><a href="javascript: FF.logout(); void(0)">Logout</a></div></div>')
|
@@ -0,0 +1,19 @@
|
|
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
|
+
:javascript
|
10
|
+
BASE_DOMAIN = #{Fanforce.base_domain.to_json}
|
11
|
+
API_DOMAIN = #{Fanforce.api_domain.to_json}
|
12
|
+
ASSETS_DOMAIN = #{Fanforce.assets_domain.to_json}
|
13
|
+
|
14
|
+
%body
|
15
|
+
= yield
|
16
|
+
= javascript '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
|
17
|
+
= javascript "//#{Fanforce.eye_domain}/devforce.js#{'?DEBUG=1&DYNAMIC=1' if ENV['RACK_ENV']=='development'}"
|
18
|
+
= javascript '/new_message.js'
|
19
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,19 @@
|
|
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
|
+
:javascript
|
10
|
+
BASE_DOMAIN = #{Fanforce.base_domain.to_json}
|
11
|
+
API_DOMAIN = #{Fanforce.api_domain.to_json}
|
12
|
+
ASSETS_DOMAIN = #{Fanforce.assets_domain.to_json}
|
13
|
+
|
14
|
+
%body
|
15
|
+
= yield
|
16
|
+
= javascript '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
|
17
|
+
= javascript "//#{Fanforce.eye_domain}/devforce.js#{'?DEBUG=1&DYNAMIC=1' if ENV['RACK_ENV']=='development'}"
|
18
|
+
= javascript '/source_details.js'
|
19
|
+
= yield_content :after_core_js
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class FanforceApp::Sinatra
|
2
|
+
|
3
|
+
# ARCHIVE INITIATIVE ###########################################################
|
4
|
+
def route_archive_initiative(params)
|
5
|
+
json status: 'finished-processing'
|
6
|
+
end
|
7
|
+
post '/:com_behavior_shortid/archive_initiative' do route_archive_initiative(params) end
|
8
|
+
|
9
|
+
# DESTROY INITIATIVE ###########################################################
|
10
|
+
def route_destroy_initiative(params)
|
11
|
+
json status: 'finished-processing'
|
12
|
+
end
|
13
|
+
post '/:com_behavior_shortid/destroy_initiative' do route_destroy_initiative(params) end
|
14
|
+
|
15
|
+
# AUTOCREATE PENDING INITIATIVE ###########################################################
|
16
|
+
def route_autocreate_pending_initiative(params)
|
17
|
+
json status: 'finished-processing'
|
18
|
+
end
|
19
|
+
get '/:com_behavior_shortid/autocreate_pending_initiative' do route_autocreate_pending_initiative(params) end
|
20
|
+
|
21
|
+
# ADD INITIATIVE UI ############################################################
|
22
|
+
def route_add_initiative(params)
|
23
|
+
page :add_initiative, :layout => :add_edit_initiative, com_dir: "#{params[:com_behavior_shortid]}"
|
24
|
+
end
|
25
|
+
get '/:com_behavior_shortid/add_initiative.html' do route_add_initiative(params) end
|
26
|
+
|
27
|
+
# ADD PENDING INITIATIVE UI ############################################################
|
28
|
+
def route_convert_pending_initiative(params)
|
29
|
+
page :convert_pending_initiative, :layout => :convert_pending_initiative, com_dir: "#{params[:com_behavior_shortid]}"
|
30
|
+
end
|
31
|
+
get '/:com_behavior_shortid/convert_pending_initiative.html' do route_convert_pending_initiative(params) end
|
32
|
+
|
33
|
+
# EDIT INITIATIVE UI ###########################################################
|
34
|
+
def route_edit_initiative(params)
|
35
|
+
page :edit_initiative, :layout => :add_edit_initiative, com_dir: "#{params[:com_behavior_shortid]}"
|
36
|
+
end
|
37
|
+
get '/:com_behavior_shortid/edit_initiative.html' do route_edit_initiative(params) end
|
38
|
+
|
39
|
+
# ENGAGE #######################################################################
|
40
|
+
def route_engage_page(params)
|
41
|
+
page :engage, :layout => :engage, com_dir: "#{params[:com_behavior_shortid]}"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class FanforceApp::Sinatra
|
2
|
+
|
3
|
+
# ADD SOURCE ##################################################################
|
4
|
+
def route_add_source(params)
|
5
|
+
page :add_source, :layout => :add_source
|
6
|
+
end
|
7
|
+
get '/:com_connector_shortid/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 '/:com_connector_shortid/source_details.html' do route_source_details(params) end
|
20
|
+
|
21
|
+
end
|
@@ -11,13 +11,13 @@ class FanforceApp::Sinatra
|
|
11
11
|
# INSTALL ######################################################################
|
12
12
|
def route_install(params)
|
13
13
|
raise "This is not a valid app install request: #{env['HTTP_HOST']}" if !ff.valid_install_request?(params)
|
14
|
-
api_key = $Redis.get("installed
|
14
|
+
api_key = $Redis.get("installed:app-#{ff.params[:app_id]}:#{params[:organization_id]}")
|
15
15
|
|
16
16
|
if api_key.present? and api_key != params[:api_key]
|
17
17
|
is_valid_key = Fanforce::API.new.get("/api_auths/is_valid_key/#{params[:api_key]}", organization_id: params[:organization_id], app_id: params[:app_id])[:result]
|
18
|
-
raise 'A different API key already exists for this
|
18
|
+
raise 'A different API key already exists for this app. Please uninstall first.' if !is_valid_key
|
19
19
|
end
|
20
|
-
$Redis.set("installed
|
20
|
+
$Redis.set("installed:app-#{ff.params[:app_id]}:#{params[:organization_id]}", params[:api_key])
|
21
21
|
ff.auth(params[:api_key])
|
22
22
|
|
23
23
|
json status: 'finished-processing'
|
@@ -27,14 +27,14 @@ class FanforceApp::Sinatra
|
|
27
27
|
# UNINSTALL ####################################################################
|
28
28
|
def route_uninstall(params)
|
29
29
|
raise 'This is not a valid app uninstall request.' if !ff.valid_uninstall_request?(params)
|
30
|
-
api_key = $Redis.get("installed
|
30
|
+
api_key = $Redis.get("installed:app-#{ff.params[:app_id]}:#{params[:organization_id]}")
|
31
31
|
|
32
32
|
if api_key.present? and api_key != params[:api_key]
|
33
33
|
is_valid_key = Fanforce::API.new.get("/api_auths/is_valid_key/#{params[:api_key]}", organization_id: params[:organization_id], app_id: params[:app_id])[:result]
|
34
|
-
raise 'API keys must match before an
|
34
|
+
raise 'API keys must match before an app can be uninstalled.' if !is_valid_key
|
35
35
|
end
|
36
36
|
|
37
|
-
$Redis.del("installed
|
37
|
+
$Redis.del("installed:app-#{ff.params[:app_id]}:#{params[:organization_id]}")
|
38
38
|
json status: 'finished-processing'
|
39
39
|
end
|
40
40
|
any '/uninstall' do route_uninstall(params) end
|