dima-restfulx 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. data/History.txt +7 -0
  2. data/Manifest.txt +127 -0
  3. data/README.rdoc +50 -0
  4. data/Rakefile +42 -0
  5. data/app_generators/rx_app/USAGE +22 -0
  6. data/app_generators/rx_app/rx_app_generator.rb +94 -0
  7. data/app_generators/rx_app/templates/actionscript.properties +16 -0
  8. data/app_generators/rx_app/templates/actionscriptair.properties +16 -0
  9. data/app_generators/rx_app/templates/app.yaml.erb +12 -0
  10. data/app_generators/rx_app/templates/default_tasks.rake +51 -0
  11. data/app_generators/rx_app/templates/empty.txt +0 -0
  12. data/app_generators/rx_app/templates/expressInstall.swf +0 -0
  13. data/app_generators/rx_app/templates/flex.properties +2 -0
  14. data/app_generators/rx_app/templates/generate.rb +17 -0
  15. data/app_generators/rx_app/templates/html-template/AC_OETags.js +276 -0
  16. data/app_generators/rx_app/templates/html-template/history/history.css +6 -0
  17. data/app_generators/rx_app/templates/html-template/history/history.js +645 -0
  18. data/app_generators/rx_app/templates/html-template/history/historyFrame.html +29 -0
  19. data/app_generators/rx_app/templates/html-template/index.template.html +121 -0
  20. data/app_generators/rx_app/templates/html-template/playerProductInstall.swf +0 -0
  21. data/app_generators/rx_app/templates/index.html.erb +18 -0
  22. data/app_generators/rx_app/templates/index.yaml +11 -0
  23. data/app_generators/rx_app/templates/mainair-app.xml +134 -0
  24. data/app_generators/rx_app/templates/mainapp-config.xml +21 -0
  25. data/app_generators/rx_app/templates/mainapp.mxml +31 -0
  26. data/app_generators/rx_app/templates/project-textmate.erb +52 -0
  27. data/app_generators/rx_app/templates/project.properties +18 -0
  28. data/app_generators/rx_app/templates/projectair.properties +24 -0
  29. data/app_generators/rx_app/templates/swfobject.js +5 -0
  30. data/bin/rx-gen +31 -0
  31. data/generators/rx_config/USAGE +5 -0
  32. data/generators/rx_config/rx_config_generator.rb +19 -0
  33. data/generators/rx_controller/USAGE +10 -0
  34. data/generators/rx_controller/rx_controller_generator.rb +39 -0
  35. data/generators/rx_controller/templates/assist.py +65 -0
  36. data/generators/rx_controller/templates/controller.as.erb +36 -0
  37. data/generators/rx_controller/templates/restful.py +136 -0
  38. data/generators/rx_main_app/USAGE +8 -0
  39. data/generators/rx_main_app/rx_main_app_generator.rb +60 -0
  40. data/generators/rx_main_app/templates/main.py.erb +29 -0
  41. data/generators/rx_main_app/templates/mainapp.mxml +35 -0
  42. data/generators/rx_scaffold/USAGE +29 -0
  43. data/generators/rx_scaffold/rx_scaffold_generator.rb +146 -0
  44. data/generators/rx_scaffold/templates/component.mxml.erb +149 -0
  45. data/generators/rx_scaffold/templates/controller.py.erb +27 -0
  46. data/generators/rx_scaffold/templates/model.as.erb +42 -0
  47. data/generators/rx_scaffold/templates/model.py.erb +14 -0
  48. data/generators/rx_yaml_scaffold/USAGE +45 -0
  49. data/generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +47 -0
  50. data/lib/restfulx/active_foo.rb +186 -0
  51. data/lib/restfulx/active_record_tasks.rb +81 -0
  52. data/lib/restfulx/configuration.rb +76 -0
  53. data/lib/restfulx/datamapper_foo.rb +31 -0
  54. data/lib/restfulx/rails/recipes.rb +60 -0
  55. data/lib/restfulx/rails/swf_helper.rb +60 -0
  56. data/lib/restfulx/tasks.rb +85 -0
  57. data/lib/restfulx.rb +117 -0
  58. data/rails_generators/rx_config/USAGE +18 -0
  59. data/rails_generators/rx_config/rx_config_generator.rb +115 -0
  60. data/rails_generators/rx_config/templates/actionscript.properties +16 -0
  61. data/rails_generators/rx_config/templates/actionscriptair.properties +16 -0
  62. data/rails_generators/rx_config/templates/expressInstall.swf +0 -0
  63. data/rails_generators/rx_config/templates/flex.properties +2 -0
  64. data/rails_generators/rx_config/templates/html-template/AC_OETags.js +276 -0
  65. data/rails_generators/rx_config/templates/html-template/history/history.css +6 -0
  66. data/rails_generators/rx_config/templates/html-template/history/history.js +645 -0
  67. data/rails_generators/rx_config/templates/html-template/history/historyFrame.html +29 -0
  68. data/rails_generators/rx_config/templates/html-template/index.template.html +121 -0
  69. data/rails_generators/rx_config/templates/html-template/playerProductInstall.swf +0 -0
  70. data/rails_generators/rx_config/templates/index.html.erb +18 -0
  71. data/rails_generators/rx_config/templates/mainair-app.xml +134 -0
  72. data/rails_generators/rx_config/templates/mainapp-config.xml +21 -0
  73. data/rails_generators/rx_config/templates/mainapp.mxml +31 -0
  74. data/rails_generators/rx_config/templates/project-textmate.erb +52 -0
  75. data/rails_generators/rx_config/templates/project.properties +18 -0
  76. data/rails_generators/rx_config/templates/projectair.properties +24 -0
  77. data/rails_generators/rx_config/templates/restfulx.yml +14 -0
  78. data/rails_generators/rx_config/templates/restfulx_tasks.rake +6 -0
  79. data/rails_generators/rx_config/templates/swfobject.js +5 -0
  80. data/rails_generators/rx_controller/USAGE +10 -0
  81. data/rails_generators/rx_controller/rx_controller_generator.rb +28 -0
  82. data/rails_generators/rx_controller/templates/controller.as.erb +40 -0
  83. data/rails_generators/rx_scaffold/USAGE +35 -0
  84. data/rails_generators/rx_scaffold/rx_scaffold_generator.rb +179 -0
  85. data/rails_generators/rx_scaffold/templates/component.mxml.erb +149 -0
  86. data/rails_generators/rx_scaffold/templates/controller.rb.erb +97 -0
  87. data/rails_generators/rx_scaffold/templates/fixtures.yml.erb +35 -0
  88. data/rails_generators/rx_scaffold/templates/migration.rb.erb +19 -0
  89. data/rails_generators/rx_scaffold/templates/model.as.erb +42 -0
  90. data/rails_generators/rx_scaffold/templates/model.rb.erb +11 -0
  91. data/rails_generators/rx_yaml_scaffold/USAGE +51 -0
  92. data/rails_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +49 -0
  93. data/rdoc/generators/template/html/jamis.rb +588 -0
  94. data/spec/restfulx_spec.rb +7 -0
  95. data/spec/spec_helper.rb +16 -0
  96. data/test/rails/controllers/application.rb +15 -0
  97. data/test/rails/controllers/locations_controller.rb +93 -0
  98. data/test/rails/controllers/notes_controller.rb +96 -0
  99. data/test/rails/controllers/projects_controller.rb +93 -0
  100. data/test/rails/controllers/tasks_controller.rb +93 -0
  101. data/test/rails/controllers/users_controller.rb +93 -0
  102. data/test/rails/database.yml +4 -0
  103. data/test/rails/fixtures/locations.yml +8 -0
  104. data/test/rails/fixtures/notes.yml +17 -0
  105. data/test/rails/fixtures/projects.yml +25 -0
  106. data/test/rails/fixtures/simple_properties.yml +19 -0
  107. data/test/rails/fixtures/tasks.yml +46 -0
  108. data/test/rails/fixtures/users.yml +13 -0
  109. data/test/rails/helpers/functional_test_helper.rb +21 -0
  110. data/test/rails/helpers/test_helper.rb +61 -0
  111. data/test/rails/helpers/unit_test_helper.rb +30 -0
  112. data/test/rails/model.yml +35 -0
  113. data/test/rails/models/location.rb +4 -0
  114. data/test/rails/models/note.rb +3 -0
  115. data/test/rails/models/project.rb +4 -0
  116. data/test/rails/models/simple_property.rb +2 -0
  117. data/test/rails/models/task.rb +18 -0
  118. data/test/rails/models/user.rb +20 -0
  119. data/test/rails/playing_around_in_a_console.txt +71 -0
  120. data/test/rails/schema.rb +77 -0
  121. data/test/rails/test.swf +1 -0
  122. data/test/rails/test_active_foo.rb +36 -0
  123. data/test/rails/test_rails_integration_functional.rb +22 -0
  124. data/test/rails/test_to_fxml.rb +35 -0
  125. data/test/rails/test_to_json.rb +23 -0
  126. data/test/rails/views/notes/empty_params_action.html.erb +1 -0
  127. data/test/rails/views/notes/index.html.erb +1 -0
  128. metadata +211 -0
@@ -0,0 +1,85 @@
1
+ # Rake tasks for building RestfulX-based Flex and AIR applications
2
+ require 'rake'
3
+ require 'ftools'
4
+ require 'rexml/document'
5
+ require File.join(File.dirname(__FILE__), 'configuration')
6
+
7
+ APP_ROOT = RestfulX::Configuration::APP_ROOT
8
+
9
+ namespace :rx do
10
+ # Compile the main Flex/AIR application using given executable to the given
11
+ # destination folder
12
+ def compile_app(executable, destination, opts = '')
13
+ app_properties = REXML::Document.new(File.open(File.join(APP_ROOT, ".actionScriptProperties")))
14
+ app_properties.elements.each("*/applications/application") do |elm|
15
+ app_path = elm.attributes['path']
16
+ project_path = File.join(APP_ROOT, "app/flex", app_path)
17
+ target_project_path = project_path.sub(/.mxml$/, '.swf')
18
+ target_project_air_descriptor = project_path.sub(/.mxml$/, '-app.xml')
19
+
20
+ libs = Dir.glob(File.join(APP_ROOT, 'lib', '*.swc')).map {|lib| lib.gsub(' ', '\ ')}
21
+
22
+ cmd = "#{executable} #{opts} -library-path+=#{libs.join(',')} " <<
23
+ "-keep-as3-metadata+=Resource,HasOne,HasMany,BelongsTo,DateTime,Lazy,Ignored #{project_path.gsub(' ', '\ ')}"
24
+ puts "Compiling #{project_path}"
25
+ if system(cmd)
26
+ FileUtils.makedirs File.join(APP_ROOT, destination)
27
+ puts "Moving #{target_project_path} to " + File.join(APP_ROOT, destination)
28
+ FileUtils.mv target_project_path, File.join(APP_ROOT, destination), :force => true
29
+ if File.exist?(target_project_air_descriptor)
30
+ descriptor = File.read(target_project_air_descriptor)
31
+ descriptor_name = target_project_air_descriptor.split("/").last
32
+ app_swf = target_project_path.split("/").last
33
+ descriptor.gsub!("[This value will be overwritten by Flex Builder in the output app.xml]",
34
+ app_swf)
35
+
36
+ File.open("#{APP_ROOT}/#{destination}/#{descriptor_name}", "w") do |file|
37
+ file.print descriptor
38
+ end
39
+ puts "Created #{APP_ROOT}/#{destination}/#{descriptor_name} descriptor."
40
+ end
41
+ puts 'Done!'
42
+ else
43
+ puts "The application was not compiled. Check console for errors. " <<
44
+ "It is possible that '(a)mxmlc' executable was not found or there are compilation errors."
45
+ end
46
+ end
47
+ end
48
+
49
+ # Find what the main application is based on .actionScriptProperties file
50
+ def get_main_application
51
+ app_properties = REXML::Document.new(File.open(File.join(APP_ROOT, ".actionScriptProperties")))
52
+ app_properties.root.attributes['mainApplicationPath'].split("/").last
53
+ end
54
+
55
+ # Get appropriate executable based on platform
56
+ def get_executable(executable)
57
+ if RUBY_PLATFORM =~ /mswin32/
58
+ executable << '.exe'
59
+ end
60
+ executable
61
+ end
62
+
63
+ namespace :flex do
64
+ desc "Build project swf file and move it into public/bin folder"
65
+ task :build do
66
+ compile_app(get_executable('mxmlc'), 'public/bin')
67
+ end
68
+ end
69
+
70
+ namespace :air do
71
+ desc "Build project swf file as an AIR application and move it into bin-debug folder"
72
+ task :build do
73
+ compile_app(get_executable('mxmlc'), 'bin-debug', '+configname=air')
74
+ end
75
+
76
+ desc "Run the AIR application (if this project is configured as an AIR project)"
77
+ task :run do
78
+ target = get_main_application.gsub(/.mxml$/, '-app.xml')
79
+ puts "Running AIR application with descriptor: #{target}"
80
+ if !system("#{get_executable('adl')} bin-debug/#{target}")
81
+ puts "Could not run the application with descriptor: #{target}. Check console for errors."
82
+ end
83
+ end
84
+ end
85
+ end
data/lib/restfulx.rb ADDED
@@ -0,0 +1,117 @@
1
+ # Sets up all the relevant configuration options and brings together
2
+ # patches for Rails, Merb, ActiveRecord and Data Mapper.
3
+ #
4
+ # Loads RestfulX specific rake tasks if appropriate.
5
+ module RestfulX
6
+
7
+ # :stopdoc:
8
+ VERSION = '1.2.0'
9
+ FRAMEWORK_VERSION = '1.2.0'
10
+ LIB_DIR = File.join(File.dirname(__FILE__), 'restfulx/')
11
+ # :startdoc:
12
+
13
+ # Returns the version string for the library.
14
+ #
15
+ def self.version
16
+ VERSION
17
+ end
18
+
19
+ # Utility method used to require all files ending in .rb that lie in the
20
+ # directory below this file that has the same name as the filename passed
21
+ # in. Optionally, a specific _directory_ name can be passed in such that
22
+ # the _filename_ does not have to be equivalent to the directory.
23
+ #
24
+ def self.require_all_libs_relative_to( fname, dir = nil )
25
+ dir ||= ::File.basename(fname, '.*')
26
+ search_me = ::File.expand_path(
27
+ ::File.join(::File.dirname(fname), dir, '*', '*.rb'))
28
+
29
+ Dir.glob(search_me).sort.each {|rb| require rb}
30
+ end
31
+
32
+ end
33
+
34
+ require RestfulX::LIB_DIR + 'configuration'
35
+
36
+ # make sure we're running inside Merb
37
+ if defined?(Merb::Plugins)
38
+ Merb::Plugins.add_rakefiles RestfulX::LIB_DIR + 'tasks'
39
+
40
+ Merb::BootLoader.before_app_loads do
41
+
42
+ if defined?(ActiveRecord::Base)
43
+ Merb.add_mime_type(:fxml, :to_fxml, %w[application/xml text/xml application/x-xml], :charset => "utf-8")
44
+ ['active_foo', 'active_record_default_methods'].each { |lib| require RestfulX::LIB_DIR + lib }
45
+ Merb::Plugins.add_rakefiles RestfulX::LIB_DIR + 'active_record_tasks'
46
+ else
47
+ Merb.add_mime_type(:fxml, :to_xml, %w[application/xml text/xml application/x-xml], :charset => "utf-8")
48
+ if defined?(Merb::Orms::DataMapper)
49
+ require RestfulX::LIB_DIR + 'datamapper_foo'
50
+ end
51
+ end
52
+ end
53
+ elsif defined?(ActionController::Base)
54
+ # if we are not running in Merb, try to hook up Rails
55
+ Mime::Type.register_alias "application/xml", :fxml
56
+
57
+ ['active_foo', 'rails/swf_helper'].each { |lib| require RestfulX::LIB_DIR + lib }
58
+
59
+ ActionView::Base.send :include, SWFHelper unless ActionView::Base.included_modules.include?(SWFHelper)
60
+
61
+ # We mess with default +render+ implementation a bit to add support for expressions
62
+ # such as format.fxml { render :fxml => @foo }
63
+ module ActionController
64
+ # Override render to add support for render :fxml
65
+ class Base
66
+ alias_method :old_render, :render unless method_defined?(:old_render)
67
+
68
+ # so that we can have handling for :fxml option and write code like
69
+ # format.fxml { render :fxml => @projects }
70
+ def render(options = nil, extra_options = {}, &block)
71
+ if options.is_a?(Hash) && options[:fxml]
72
+ xml = options[:fxml]
73
+ response.content_type ||= Mime::XML
74
+ render_for_text(xml.respond_to?(:to_fxml) ? xml.to_fxml : xml, options[:status])
75
+ else
76
+ old_render(options, extra_options, &block)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ # It is possible to pass metadata with any RestfulX model. This module adds support for
83
+ # extracting that metadata into the standard params hash.
84
+ module RxController
85
+ private
86
+
87
+ # Extract any keys named _metadata from the models in the params hash
88
+ # and put them in the root of the params hash.
89
+ def extract_metadata_from_params
90
+ metadata = {}
91
+ metadata.merge!(params.delete('_metadata')) if params.has_key?('_metadata')
92
+ params.each do |k, v|
93
+ next unless v.respond_to?(:has_key?) and v.has_key?('_metadata')
94
+ metadata.merge!(v.delete('_metadata'))
95
+ end
96
+ params.merge!(metadata) unless metadata.empty?
97
+ end
98
+ end
99
+
100
+ module ActiveRecord
101
+ # ActiveRecord named scopes are computed *before* restfulx gem gets loaded
102
+ # this patch addresses that and makes sure +to_fxml+ calls are properly
103
+ # delegated
104
+ module NamedScope
105
+ # make sure we properly delegate +to_fxml+ calls to the proxy
106
+ class Scope
107
+ delegate :to_fxml, :to => :proxy_found
108
+ end
109
+ end
110
+ end
111
+
112
+ ActionController::Base.send :include, RxController
113
+ ActionController::Base.send :prepend_before_filter, :extract_metadata_from_params
114
+
115
+ # temporarily disable forgery protection site-wise
116
+ ActionController::Base.allow_forgery_protection = false
117
+ end
@@ -0,0 +1,18 @@
1
+ Description:
2
+ Generates the primary RestfulX directory structure, sets up Flex Builder
3
+ specific descriptor files and options fetches the latest published
4
+ RestfulX Framework SWC file.
5
+
6
+ You can generate Flex Builder configuration for either *pure* Flex
7
+ project or an AIR project. To generate AIR configuration pass the -a
8
+ (--air) option to the generator.
9
+
10
+ Examples:
11
+ `./script/generate rx_config` # generates project structure and a
12
+ # default Flex app configuration. Fetches
13
+ # latest RestfulX framework SWC to "lib"
14
+ # folder
15
+ `./script/generate rx_config -a` # as above but generates an AIR app
16
+ # and configuration
17
+ `./script/generate rx_config -s` # generates Flex app but does not fetch
18
+ # the RestfulX framework SWC.
@@ -0,0 +1,115 @@
1
+ require 'open-uri'
2
+ require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'restfulx') if !defined?(RestfulX)
3
+
4
+ class RxConfigGenerator < Rails::Generator::Base
5
+ include RestfulX::Configuration
6
+
7
+ attr_reader :project_name,
8
+ :flex_project_name,
9
+ :base_package,
10
+ :base_folder,
11
+ :command_controller_name,
12
+ :component_names,
13
+ :application_tag,
14
+ :use_air
15
+
16
+ def initialize(runtime_args, runtime_options = {})
17
+ super
18
+ @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder = extract_names
19
+
20
+ # if we are updating main file only we probably want to maintain the type of project it is
21
+ if options[:main_only]
22
+ project_file_name = APP_ROOT + '/.project'
23
+ if File.exist?(project_file_name)
24
+ puts "Cannot combine -m (--main-app) and -a (--air) flags at the same time for an existing application.\n" <<
25
+ 'If you want to convert to AIR, remove -m flag.' if options[:air_config]
26
+ @use_air = true if File.read(project_file_name) =~/com.adobe.flexbuilder.apollo.apollobuilder/m
27
+ else
28
+ puts "Flex Builder project file doesn't exist. You should run 'rx_config' with -a (--air) option " <<
29
+ "or no arguments first to generate primary project structure."
30
+ exit 0;
31
+ end
32
+ else
33
+ @use_air = options[:air_config]
34
+ end
35
+
36
+ if @use_air
37
+ @application_tag = 'WindowedApplication'
38
+ else
39
+ @application_tag = 'Application'
40
+ end
41
+
42
+ @component_names = []
43
+ if File.exists?("app/flex/#{base_folder}/components/generated")
44
+ @component_names = list_mxml_files("app/flex/#{base_folder}/components/generated")
45
+ end
46
+ end
47
+
48
+ def manifest
49
+ record do |m|
50
+ if !options[:main_only]
51
+ m.file 'restfulx_tasks.rake', 'lib/tasks/restfulx_tasks.rake'
52
+ m.file 'flex.properties', '.flexProperties'
53
+ m.file 'restfulx.yml', 'config/restfulx.yml'
54
+ if @use_air
55
+ m.template 'actionscriptair.properties', '.actionScriptProperties'
56
+ m.template 'projectair.properties', '.project'
57
+ else
58
+ m.template 'actionscript.properties', '.actionScriptProperties'
59
+ m.template 'project.properties', '.project'
60
+ end
61
+
62
+ m.directory 'html-template/history'
63
+ %w(index.template.html AC_OETags.js playerProductInstall.swf).each do |file|
64
+ m.file "html-template/#{file}", "html-template/#{file}"
65
+ end
66
+
67
+ %w(history.css history.js historyFrame.html).each do |file|
68
+ m.file "html-template/history/#{file}", "html-template/history/#{file}"
69
+ end
70
+
71
+ %w(components controllers commands models events).each do |dir|
72
+ m.directory "app/flex/#{base_folder}/#{dir}"
73
+ end
74
+
75
+ m.directory "app/flex/#{base_folder}/components/generated"
76
+
77
+ framework_release = RestfulX::FRAMEWORK_VERSION
78
+ framework_distribution_url = "http://restfulx.github.com/releases/restfulx-#{framework_release}.swc"
79
+ framework_destination_file = "lib/restfulx-#{framework_release}.swc"
80
+
81
+ if !options[:skip_framework] && !File.exist?(framework_destination_file)
82
+ puts "fetching #{framework_release} framework binary from: #{framework_distribution_url} ..."
83
+ open(framework_destination_file, "wb").write(open(framework_distribution_url).read)
84
+ puts "done. saved to #{framework_destination_file}"
85
+ end
86
+
87
+ m.file 'swfobject.js', 'public/javascripts/swfobject.js'
88
+ m.file 'expressInstall.swf', 'public/expressInstall.swf'
89
+ m.template 'index.html.erb', 'public/index.html'
90
+
91
+ m.dependency 'rx_controller', @args
92
+ end
93
+ m.template 'project-textmate.erb', "#{project_name.underscore}.tmproj"
94
+ m.template 'mainapp.mxml', File.join('app/flex', "#{project_name}.mxml")
95
+ m.template 'mainapp-config.xml', File.join('app/flex', "#{project_name}-config.xml")
96
+ m.template 'mainair-app.xml', File.join('app/flex', "#{project_name}-app.xml") if @use_air
97
+ end
98
+ end
99
+
100
+ protected
101
+ def add_options!(opt)
102
+ opt.separator ''
103
+ opt.separator 'Options:'
104
+ opt.on("-m", "--main-only", "Only generate the main Flex/AIR application file.",
105
+ "Default: false") { |v| options[:main_only] = v }
106
+ opt.on("-a", "--air", "Configure AIR project instead of Flex. Flex is default.",
107
+ "Default: false") { |v| options[:air_config] = v }
108
+ opt.on("--skip-framework", "Don't fetch the latest framework binary. You'll have to link/build the framework yourself.",
109
+ "Default: false") { |v| options[:skip_framework] = v }
110
+ end
111
+
112
+ def banner
113
+ "Usage: #{$0} #{spec.name}"
114
+ end
115
+ end
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <actionScriptProperties mainApplicationPath="<%= project_name %>.mxml" version="3">
3
+ <compiler additionalCompilerArguments="-locale en_US -keep-as3-metadata+=Resource,HasOne,HasMany,BelongsTo,DateTime,Lazy,Ignored" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="public/bin" rootURL="http://localhost:3000/bin" sourceFolderPath="app/flex" strict="true" useApolloConfig="false" verifyDigests="true" warn="true">
4
+ <compilerSourcePath/>
5
+ <libraryPath defaultLinkType="1">
6
+ <libraryPathEntry kind="4" path=""/>
7
+ <libraryPathEntry kind="1" linkType="1" path="lib"/>
8
+ </libraryPath>
9
+ <sourceAttachmentPath/>
10
+ </compiler>
11
+ <applications>
12
+ <application path="<%= project_name %>.mxml"/>
13
+ </applications>
14
+ <modules/>
15
+ <buildCSSFiles/>
16
+ </actionScriptProperties>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <actionScriptProperties mainApplicationPath="<%= project_name %>.mxml" version="3">
3
+ <compiler additionalCompilerArguments="-locale en_US -keep-as3-metadata+=Resource,HasOne,HasMany,BelongsTo,DateTime,Lazy,Ignored" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="bin-debug" sourceFolderPath="app/flex" strict="true" useApolloConfig="true" verifyDigests="true" warn="true">
4
+ <compilerSourcePath/>
5
+ <libraryPath defaultLinkType="1">
6
+ <libraryPathEntry kind="4" path=""/>
7
+ <libraryPathEntry kind="1" linkType="1" path="lib"/>
8
+ </libraryPath>
9
+ <sourceAttachmentPath/>
10
+ </compiler>
11
+ <applications>
12
+ <application path="<%= project_name %>.mxml"/>
13
+ </applications>
14
+ <modules/>
15
+ <buildCSSFiles/>
16
+ </actionScriptProperties>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>
@@ -0,0 +1,276 @@
1
+ // Flash Player Version Detection - Rev 1.6
2
+ // Detect Client Browser type
3
+ // Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
4
+ var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
5
+ var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
6
+ var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
7
+
8
+ function ControlVersion()
9
+ {
10
+ var version;
11
+ var axo;
12
+ var e;
13
+
14
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
15
+
16
+ try {
17
+ // version will be set for 7.X or greater players
18
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
19
+ version = axo.GetVariable("$version");
20
+ } catch (e) {
21
+ }
22
+
23
+ if (!version)
24
+ {
25
+ try {
26
+ // version will be set for 6.X players only
27
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
28
+
29
+ // installed player is some revision of 6.0
30
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
31
+ // so we have to be careful.
32
+
33
+ // default to the first public version
34
+ version = "WIN 6,0,21,0";
35
+
36
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
37
+ axo.AllowScriptAccess = "always";
38
+
39
+ // safe to call for 6.0r47 or greater
40
+ version = axo.GetVariable("$version");
41
+
42
+ } catch (e) {
43
+ }
44
+ }
45
+
46
+ if (!version)
47
+ {
48
+ try {
49
+ // version will be set for 4.X or 5.X player
50
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
51
+ version = axo.GetVariable("$version");
52
+ } catch (e) {
53
+ }
54
+ }
55
+
56
+ if (!version)
57
+ {
58
+ try {
59
+ // version will be set for 3.X player
60
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
61
+ version = "WIN 3,0,18,0";
62
+ } catch (e) {
63
+ }
64
+ }
65
+
66
+ if (!version)
67
+ {
68
+ try {
69
+ // version will be set for 2.X player
70
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
71
+ version = "WIN 2,0,0,11";
72
+ } catch (e) {
73
+ version = -1;
74
+ }
75
+ }
76
+
77
+ return version;
78
+ }
79
+
80
+ // JavaScript helper required to detect Flash Player PlugIn version information
81
+ function GetSwfVer(){
82
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
83
+ var flashVer = -1;
84
+
85
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
86
+ if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
87
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
88
+ var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
89
+ var descArray = flashDescription.split(" ");
90
+ var tempArrayMajor = descArray[2].split(".");
91
+ var versionMajor = tempArrayMajor[0];
92
+ var versionMinor = tempArrayMajor[1];
93
+ var versionRevision = descArray[3];
94
+ if (versionRevision == "") {
95
+ versionRevision = descArray[4];
96
+ }
97
+ if (versionRevision[0] == "d") {
98
+ versionRevision = versionRevision.substring(1);
99
+ } else if (versionRevision[0] == "r") {
100
+ versionRevision = versionRevision.substring(1);
101
+ if (versionRevision.indexOf("d") > 0) {
102
+ versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
103
+ }
104
+ }
105
+ var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
106
+ }
107
+ }
108
+ // MSN/WebTV 2.6 supports Flash 4
109
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
110
+ // WebTV 2.5 supports Flash 3
111
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
112
+ // older WebTV supports Flash 2
113
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
114
+ else if ( isIE && isWin && !isOpera ) {
115
+ flashVer = ControlVersion();
116
+ }
117
+ return flashVer;
118
+ }
119
+
120
+ // When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
121
+ function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
122
+ {
123
+ versionStr = GetSwfVer();
124
+ if (versionStr == -1 ) {
125
+ return false;
126
+ } else if (versionStr != 0) {
127
+ if(isIE && isWin && !isOpera) {
128
+ // Given "WIN 2,0,0,11"
129
+ tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
130
+ tempString = tempArray[1]; // "2,0,0,11"
131
+ versionArray = tempString.split(","); // ['2', '0', '0', '11']
132
+ } else {
133
+ versionArray = versionStr.split(".");
134
+ }
135
+ var versionMajor = versionArray[0];
136
+ var versionMinor = versionArray[1];
137
+ var versionRevision = versionArray[2];
138
+
139
+ // is the major.revision >= requested major.revision AND the minor version >= requested minor
140
+ if (versionMajor > parseFloat(reqMajorVer)) {
141
+ return true;
142
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
143
+ if (versionMinor > parseFloat(reqMinorVer))
144
+ return true;
145
+ else if (versionMinor == parseFloat(reqMinorVer)) {
146
+ if (versionRevision >= parseFloat(reqRevision))
147
+ return true;
148
+ }
149
+ }
150
+ return false;
151
+ }
152
+ }
153
+
154
+ function AC_AddExtension(src, ext)
155
+ {
156
+ if (src.indexOf('?') != -1)
157
+ return src.replace(/\?/, ext+'?');
158
+ else
159
+ return src + ext;
160
+ }
161
+
162
+ function AC_Generateobj(objAttrs, params, embedAttrs)
163
+ {
164
+ var str = '';
165
+ if (isIE && isWin && !isOpera)
166
+ {
167
+ str += '<object ';
168
+ for (var i in objAttrs)
169
+ str += i + '="' + objAttrs[i] + '" ';
170
+ str += '>';
171
+ for (var i in params)
172
+ str += '<param name="' + i + '" value="' + params[i] + '" /> ';
173
+ str += '</object>';
174
+ } else {
175
+ str += '<embed ';
176
+ for (var i in embedAttrs)
177
+ str += i + '="' + embedAttrs[i] + '" ';
178
+ str += '> </embed>';
179
+ }
180
+
181
+ document.write(str);
182
+ }
183
+
184
+ function AC_FL_RunContent(){
185
+ var ret =
186
+ AC_GetArgs
187
+ ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
188
+ , "application/x-shockwave-flash"
189
+ );
190
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
191
+ }
192
+
193
+ function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
194
+ var ret = new Object();
195
+ ret.embedAttrs = new Object();
196
+ ret.params = new Object();
197
+ ret.objAttrs = new Object();
198
+ for (var i=0; i < args.length; i=i+2){
199
+ var currArg = args[i].toLowerCase();
200
+
201
+ switch (currArg){
202
+ case "classid":
203
+ break;
204
+ case "pluginspage":
205
+ ret.embedAttrs[args[i]] = args[i+1];
206
+ break;
207
+ case "src":
208
+ case "movie":
209
+ args[i+1] = AC_AddExtension(args[i+1], ext);
210
+ ret.embedAttrs["src"] = args[i+1];
211
+ ret.params[srcParamName] = args[i+1];
212
+ break;
213
+ case "onafterupdate":
214
+ case "onbeforeupdate":
215
+ case "onblur":
216
+ case "oncellchange":
217
+ case "onclick":
218
+ case "ondblClick":
219
+ case "ondrag":
220
+ case "ondragend":
221
+ case "ondragenter":
222
+ case "ondragleave":
223
+ case "ondragover":
224
+ case "ondrop":
225
+ case "onfinish":
226
+ case "onfocus":
227
+ case "onhelp":
228
+ case "onmousedown":
229
+ case "onmouseup":
230
+ case "onmouseover":
231
+ case "onmousemove":
232
+ case "onmouseout":
233
+ case "onkeypress":
234
+ case "onkeydown":
235
+ case "onkeyup":
236
+ case "onload":
237
+ case "onlosecapture":
238
+ case "onpropertychange":
239
+ case "onreadystatechange":
240
+ case "onrowsdelete":
241
+ case "onrowenter":
242
+ case "onrowexit":
243
+ case "onrowsinserted":
244
+ case "onstart":
245
+ case "onscroll":
246
+ case "onbeforeeditfocus":
247
+ case "onactivate":
248
+ case "onbeforedeactivate":
249
+ case "ondeactivate":
250
+ case "type":
251
+ case "codebase":
252
+ ret.objAttrs[args[i]] = args[i+1];
253
+ break;
254
+ case "id":
255
+ case "width":
256
+ case "height":
257
+ case "align":
258
+ case "vspace":
259
+ case "hspace":
260
+ case "class":
261
+ case "title":
262
+ case "accesskey":
263
+ case "name":
264
+ case "tabindex":
265
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
266
+ break;
267
+ default:
268
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
269
+ }
270
+ }
271
+ ret.objAttrs["classid"] = classid;
272
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
273
+ return ret;
274
+ }
275
+
276
+
@@ -0,0 +1,6 @@
1
+ /* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
2
+
3
+ #ie_historyFrame { width: 0px; height: 0px; display:none }
4
+ #firefox_anchorDiv { width: 0px; height: 0px; display:none }
5
+ #safari_formDiv { width: 0px; height: 0px; display:none }
6
+ #safari_rememberDiv { width: 0px; height: 0px; display:none }