From e946fd6af289622ebd12f82bc37ad1bc399bc1d8 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 21:19:30 -0500 Subject: [PATCH 01/92] stubbing in first project in the tutorial --- src/FlickrRIA.mxml | 46 ++++++++++++++++++++++++++++++++++++++++ src/FlickrThumbnail.mxml | 13 ++++++++++++ src/Makefile | 16 ++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/FlickrRIA.mxml create mode 100644 src/FlickrThumbnail.mxml create mode 100644 src/Makefile diff --git a/src/FlickrRIA.mxml b/src/FlickrRIA.mxml new file mode 100644 index 0000000..d55699b --- /dev/null +++ b/src/FlickrRIA.mxml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/FlickrThumbnail.mxml b/src/FlickrThumbnail.mxml new file mode 100644 index 0000000..5ac2d2e --- /dev/null +++ b/src/FlickrThumbnail.mxml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..d1a6982 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,16 @@ +MXMLC ?= mxmlc + + +all: $(wildcard *.swf) + + +FlickrRIA.swf: FlickrRIA.mxml + $(MXMLC) FlickrRIA.mxml + + +FlickrThumbnail.swf: FlickrThumbnail.mxml + $(MXMLC) FlickrThumbnail.mxml + + +clean: + rm -f *.swf From 59e7c754f50f69eb5e462cf93b4cbdcaf84e437d Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 21:22:11 -0500 Subject: [PATCH 02/92] fixing makefile (durrrr) --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index d1a6982..5f6a5da 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,7 @@ MXMLC ?= mxmlc -all: $(wildcard *.swf) +all: FlickrRIA.swf FlickrThumbnail.swf FlickrRIA.swf: FlickrRIA.mxml From 872ed812cacfae334f1e744c7022dfbd087a2220 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 21:48:47 -0500 Subject: [PATCH 03/92] starting in on second exercise (shipping) --- Makefile | 4 ++++ src/{ => 01-flickr}/FlickrRIA.mxml | 0 src/{ => 01-flickr}/FlickrThumbnail.mxml | 0 src/01-flickr/Makefile | 16 ++++++++++++++++ src/Makefile | 17 +++-------------- 5 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 Makefile rename src/{ => 01-flickr}/FlickrRIA.mxml (100%) rename src/{ => 01-flickr}/FlickrThumbnail.mxml (100%) create mode 100644 src/01-flickr/Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e375d6f --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ + + +all: + cd src && $(MAKE) diff --git a/src/FlickrRIA.mxml b/src/01-flickr/FlickrRIA.mxml similarity index 100% rename from src/FlickrRIA.mxml rename to src/01-flickr/FlickrRIA.mxml diff --git a/src/FlickrThumbnail.mxml b/src/01-flickr/FlickrThumbnail.mxml similarity index 100% rename from src/FlickrThumbnail.mxml rename to src/01-flickr/FlickrThumbnail.mxml diff --git a/src/01-flickr/Makefile b/src/01-flickr/Makefile new file mode 100644 index 0000000..5f6a5da --- /dev/null +++ b/src/01-flickr/Makefile @@ -0,0 +1,16 @@ +MXMLC ?= mxmlc + + +all: FlickrRIA.swf FlickrThumbnail.swf + + +FlickrRIA.swf: FlickrRIA.mxml + $(MXMLC) FlickrRIA.mxml + + +FlickrThumbnail.swf: FlickrThumbnail.mxml + $(MXMLC) FlickrThumbnail.mxml + + +clean: + rm -f *.swf diff --git a/src/Makefile b/src/Makefile index 5f6a5da..4deb7aa 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,16 +1,5 @@ -MXMLC ?= mxmlc -all: FlickrRIA.swf FlickrThumbnail.swf - - -FlickrRIA.swf: FlickrRIA.mxml - $(MXMLC) FlickrRIA.mxml - - -FlickrThumbnail.swf: FlickrThumbnail.mxml - $(MXMLC) FlickrThumbnail.mxml - - -clean: - rm -f *.swf +all: + cd 01-flickr && $(MAKE) && \ + cd 02-shipping && $(MAKE) From a914a910d0818bf7228e4408bf4727ead8bec848 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 21:50:28 -0500 Subject: [PATCH 04/92] adding php files for second exercise --- src/02-shipping/docroot/plainHttpService.php | 11 +++++++++++ src/02-shipping/docroot/shipping.php | 12 ++++++++++++ src/02-shipping/docroot/xmlHttpService.php | 15 +++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 src/02-shipping/docroot/plainHttpService.php create mode 100644 src/02-shipping/docroot/shipping.php create mode 100644 src/02-shipping/docroot/xmlHttpService.php diff --git a/src/02-shipping/docroot/plainHttpService.php b/src/02-shipping/docroot/plainHttpService.php new file mode 100644 index 0000000..2a20ebf --- /dev/null +++ b/src/02-shipping/docroot/plainHttpService.php @@ -0,0 +1,11 @@ + $price) { + $result[] = "$service: $price USD"; + } + print implode("\n", $result); +?> diff --git a/src/02-shipping/docroot/shipping.php b/src/02-shipping/docroot/shipping.php new file mode 100644 index 0000000..797df90 --- /dev/null +++ b/src/02-shipping/docroot/shipping.php @@ -0,0 +1,12 @@ + $baseCost * 4, + "Two Day Air" => $baseCost * 2, + "Saver Ground" => $baseCost); + return $options; + } + +?> diff --git a/src/02-shipping/docroot/xmlHttpService.php b/src/02-shipping/docroot/xmlHttpService.php new file mode 100644 index 0000000..59a594b --- /dev/null +++ b/src/02-shipping/docroot/xmlHttpService.php @@ -0,0 +1,15 @@ +"; + foreach ($options as $service => $price) { + $results[] = ""; + } + $results[] = ""; + print implode("\n", $results); +?> From aede9385836536f15a8dca7e5214f532a73f6e5d Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 22:20:15 -0500 Subject: [PATCH 05/92] stubbing in python version of shipping app --- src/02-shipping/shipping.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/02-shipping/shipping.py diff --git a/src/02-shipping/shipping.py b/src/02-shipping/shipping.py new file mode 100644 index 0000000..98a37d5 --- /dev/null +++ b/src/02-shipping/shipping.py @@ -0,0 +1,35 @@ +from __future__ import print_function + +import sys +from wsgiref.simple_server import make_server + + +def main(sysargs=sys.argv[:]): + app = ShippingApp() + port = 18080 + server = make_server('0.0.0.0', port, app) + print('serving {0.__class__.__name__} on port {1}'.format(app, port)) + server.serve_forever() + return 0 + + +class ShippingApp(object): + + def __call__(self, environ, start_response): + start_response('200 OK', [('content-type', 'text/plain')]) + return ['oker doke'] + + @classmethod + def get_shipping_options(cls, zipcode, pounds): + base_cost = (float(zipcode) / 10000.0) + (pounds * 5.0) + return { + "Next Day": int(base_cost * 4), + "Two Day Air": int(base_cost * 2), + "Saver Ground": int(base_cost) + } + + +if __name__ == '__main__': + sys.exit(main()) + +# vim:filetype=python From 102d2b87f09e9251d50636b200f9f28f7a44f1e5 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 22:46:18 -0500 Subject: [PATCH 06/92] replaced php with python version of shipping app --- src/02-shipping/docroot/plainHttpService.php | 11 --- src/02-shipping/docroot/shipping.php | 12 --- src/02-shipping/docroot/xmlHttpService.php | 15 ---- src/02-shipping/shipping.py | 92 ++++++++++++++++---- 4 files changed, 77 insertions(+), 53 deletions(-) delete mode 100644 src/02-shipping/docroot/plainHttpService.php delete mode 100644 src/02-shipping/docroot/shipping.php delete mode 100644 src/02-shipping/docroot/xmlHttpService.php diff --git a/src/02-shipping/docroot/plainHttpService.php b/src/02-shipping/docroot/plainHttpService.php deleted file mode 100644 index 2a20ebf..0000000 --- a/src/02-shipping/docroot/plainHttpService.php +++ /dev/null @@ -1,11 +0,0 @@ - $price) { - $result[] = "$service: $price USD"; - } - print implode("\n", $result); -?> diff --git a/src/02-shipping/docroot/shipping.php b/src/02-shipping/docroot/shipping.php deleted file mode 100644 index 797df90..0000000 --- a/src/02-shipping/docroot/shipping.php +++ /dev/null @@ -1,12 +0,0 @@ - $baseCost * 4, - "Two Day Air" => $baseCost * 2, - "Saver Ground" => $baseCost); - return $options; - } - -?> diff --git a/src/02-shipping/docroot/xmlHttpService.php b/src/02-shipping/docroot/xmlHttpService.php deleted file mode 100644 index 59a594b..0000000 --- a/src/02-shipping/docroot/xmlHttpService.php +++ /dev/null @@ -1,15 +0,0 @@ -"; - foreach ($options as $service => $price) { - $results[] = ""; - } - $results[] = ""; - print implode("\n", $results); -?> diff --git a/src/02-shipping/shipping.py b/src/02-shipping/shipping.py index 98a37d5..63279bb 100644 --- a/src/02-shipping/shipping.py +++ b/src/02-shipping/shipping.py @@ -1,32 +1,94 @@ from __future__ import print_function import sys +import cgi from wsgiref.simple_server import make_server def main(sysargs=sys.argv[:]): - app = ShippingApp() port = 18080 - server = make_server('0.0.0.0', port, app) - print('serving {0.__class__.__name__} on port {1}'.format(app, port)) + server = make_server('0.0.0.0', port, shipping_app) + print('serving {0.__name__} on port {1}'.format(shipping_app, port)) server.serve_forever() return 0 -class ShippingApp(object): +def shipping_app(environ, start_response): + path_info = environ.get('PATH_INFO', '').strip('/') - def __call__(self, environ, start_response): - start_response('200 OK', [('content-type', 'text/plain')]) - return ['oker doke'] + handler = { + 'text': plaintext_handler, + 'xml': xml_handler, + }.get(path_info) - @classmethod - def get_shipping_options(cls, zipcode, pounds): - base_cost = (float(zipcode) / 10000.0) + (pounds * 5.0) - return { - "Next Day": int(base_cost * 4), - "Two Day Air": int(base_cost * 2), - "Saver Ground": int(base_cost) - } + if handler: + try: + return handler(environ, start_response) + except Exception: + start_response('500 Internal Server Error', [ + ('content-type', 'text/plain'), + ]) + return ['OUCH'] + else: + ret = 'nothin at {0!r}'.format(path_info) + start_response('404 Not Found', [ + ('content-type', 'text/plain'), + ('content-length', str(len(ret))) + ]) + return [ret] + + +def get_params(environ): + params = cgi.parse(fp=environ.get('wsgi.input'), environ=environ) + for key, value in params.iteritems(): + if len(value) == 1: + params[key] = value[0] + return params + + +def xml_handler(environ, start_response): + params = get_params(environ) + zipcode = int(params.get('zipcode', 0)) + pounds = int(params.get('pounds', 0)) + + ret = [''] + for service, price in get_shipping_options(zipcode, pounds).iteritems(): + ret.append(''.format(**locals())) + ret.append('') + body = '\n'.join(ret) + + start_response('200 OK', [ + ('content-type', 'text/xml'), + ('content-length', str(len(body))) + ]) + return [body] + + +def plaintext_handler(environ, start_response): + params = get_params(environ) + zipcode = int(params.get('zipcode', 0)) + pounds = int(params.get('pounds', 0)) + + ret = [] + for service, price in get_shipping_options(zipcode, pounds).iteritems(): + ret.append('{service}: {price} USD'.format(**locals())) + body = '\n'.join(ret) + + start_response('200 OK', [ + ('content-type', 'text/plain'), + ('content-length', str(len(body))) + ]) + return [body] + + +def get_shipping_options(zipcode, pounds): + base_cost = (float(zipcode) / 10000.0) + (pounds * 5.0) + return { + "Next Day": int(base_cost * 4), + "Two Day Air": int(base_cost * 2), + "Saver Ground": int(base_cost) + } if __name__ == '__main__': From c6acc925a06d40c3f16b90cab84a18cf447cd96e Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 22:50:30 -0500 Subject: [PATCH 07/92] filling in first mxml file for exercise 02 --- src/02-shipping/Makefile | 12 ++++++++++++ src/02-shipping/PlainText.mxml | 9 +++++++++ 2 files changed, 21 insertions(+) create mode 100644 src/02-shipping/Makefile create mode 100644 src/02-shipping/PlainText.mxml diff --git a/src/02-shipping/Makefile b/src/02-shipping/Makefile new file mode 100644 index 0000000..39bf31e --- /dev/null +++ b/src/02-shipping/Makefile @@ -0,0 +1,12 @@ +MXMLC ?= mxmlc + + +all: PlainText.swf + + +PlainText.swf: PlainText.mxml + $(MXMLC) PlainText.mxml + + +clean: + rm -f *.swf diff --git a/src/02-shipping/PlainText.mxml b/src/02-shipping/PlainText.mxml new file mode 100644 index 0000000..3774a2c --- /dev/null +++ b/src/02-shipping/PlainText.mxml @@ -0,0 +1,9 @@ + + + + + + + + From 8a0608152e61cdbcbbc7c0a6fa1d5f118fa8d896 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 17 Feb 2010 23:10:32 -0500 Subject: [PATCH 08/92] done with exercise 2 up to creating the submit button --- src/02-shipping/PlainText.mxml | 52 +++++++++++++++++++++++++++++----- src/02-shipping/shipping.py | 24 +++++++++++++--- 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/src/02-shipping/PlainText.mxml b/src/02-shipping/PlainText.mxml index 3774a2c..9db6481 100644 --- a/src/02-shipping/PlainText.mxml +++ b/src/02-shipping/PlainText.mxml @@ -1,9 +1,47 @@ - - - - - - + xmlns:mx="http://www.adobe.com/2006/mxml" + layout="absolute" + backgroundColor="#FFFFFF" + backgroundImage=""> + + + + + + + + {zipcode.text} + {weight_lb.text} + + + + + + + + + + diff --git a/src/02-shipping/shipping.py b/src/02-shipping/shipping.py index 63279bb..be5573a 100644 --- a/src/02-shipping/shipping.py +++ b/src/02-shipping/shipping.py @@ -19,6 +19,7 @@ def shipping_app(environ, start_response): handler = { 'text': plaintext_handler, 'xml': xml_handler, + 'crossdomain.xml': crossdomain_xml_handler, }.get(path_info) if handler: @@ -48,8 +49,8 @@ def get_params(environ): def xml_handler(environ, start_response): params = get_params(environ) - zipcode = int(params.get('zipcode', 0)) - pounds = int(params.get('pounds', 0)) + zipcode = int(float(params.get('zipcode', 0))) + pounds = int(float(params.get('pounds', 0))) ret = [''] for service, price in get_shipping_options(zipcode, pounds).iteritems(): @@ -67,8 +68,8 @@ def xml_handler(environ, start_response): def plaintext_handler(environ, start_response): params = get_params(environ) - zipcode = int(params.get('zipcode', 0)) - pounds = int(params.get('pounds', 0)) + zipcode = int(float(params.get('zipcode', 0))) + pounds = int(float(params.get('pounds', 0))) ret = [] for service, price in get_shipping_options(zipcode, pounds).iteritems(): @@ -82,6 +83,21 @@ def plaintext_handler(environ, start_response): return [body] +def crossdomain_xml_handler(environ, start_response): + start_response('200 OK', [ + ('content-type', 'text/xml'), + ('content-length', str(len(XD_XML))), + ]) + return [XD_XML] + + +XD_XML = """\ + + + +""" + + def get_shipping_options(zipcode, pounds): base_cost = (float(zipcode) / 10000.0) + (pounds * 5.0) return { From 74c080005b6b72c5bde94fda5e3777ca7cd85380 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 10:50:34 -0500 Subject: [PATCH 09/92] fixing goof in makefile .. forgot to cd back up after build --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 4deb7aa..4e6eec0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,5 +1,5 @@ all: - cd 01-flickr && $(MAKE) && \ + cd 01-flickr && $(MAKE) && cd .. && \ cd 02-shipping && $(MAKE) From 6249efbac89e357ea54f28a0ba67b845b08ec6f5 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 11:03:56 -0500 Subject: [PATCH 10/92] fixing url in plaintext shipping app, ignoring swf files so I don't accidentally add them :) --- .gitignore | 1 + src/02-shipping/PlainText.mxml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..da97ff7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.swf diff --git a/src/02-shipping/PlainText.mxml b/src/02-shipping/PlainText.mxml index 9db6481..fd9cef8 100644 --- a/src/02-shipping/PlainText.mxml +++ b/src/02-shipping/PlainText.mxml @@ -26,7 +26,7 @@ ]]> - From f40357c79d290f6cb4108ac2f960c5b0f5ca055c Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 12:16:48 -0500 Subject: [PATCH 11/92] getting the WSGI app dressed up for the ball --- src/02-shipping/shipping.py | 218 +++++++++++++++++++++++------------- 1 file changed, 140 insertions(+), 78 deletions(-) diff --git a/src/02-shipping/shipping.py b/src/02-shipping/shipping.py index be5573a..e580bb1 100644 --- a/src/02-shipping/shipping.py +++ b/src/02-shipping/shipping.py @@ -1,37 +1,66 @@ +""" +standalone WSGI application for serving plaintext and xml suitable +for the Adobe Flex "Getting Started" tutorial, "Part II. Exchanging Data" + +For the plaintext data flex app, set the HTTPService url to: + + http://:/text + +For the xml data flex app, set the HTTPService url to: + + http://:/xml + +""" from __future__ import print_function import sys import cgi +import optparse from wsgiref.simple_server import make_server +__author__ = 'Dan Buch dbuch@ag.com' +__license__ = 'AGI' + +USAGE = """\ +%prog [options] +Run a standalone WSGI app for the Adobe Flex Tutorial +"Getting Started", "Part II. Exchanging Data" +""" + def main(sysargs=sys.argv[:]): - port = 18080 - server = make_server('0.0.0.0', port, shipping_app) - print('serving {0.__name__} on port {1}'.format(shipping_app, port)) + parser = optparse.OptionParser(usage=USAGE) + parser.add_option('-p', '--port', dest='port', type='int', + help='port number on which to serve app, default=%default', + default=18080) + parser.add_option('-i', '--interface', dest='interface', + help='interface on which to serve app, default=%default', + default='0.0.0.0') + + opts = parser.parse_args(sysargs[1:])[0] + + server = make_server(opts.interface, opts.port, ShippingCostApp()) + print('serving {0.__name__} on ' + 'port {1}'.format(ShippingCostApp, opts.port)) server.serve_forever() return 0 -def shipping_app(environ, start_response): - path_info = environ.get('PATH_INFO', '').strip('/') +class NotFoundError(ValueError): + pass + - handler = { - 'text': plaintext_handler, - 'xml': xml_handler, - 'crossdomain.xml': crossdomain_xml_handler, - }.get(path_info) +class ShippingCostApp(object): - if handler: + def __call__(self, environ, start_response): try: - return handler(environ, start_response) - except Exception: - start_response('500 Internal Server Error', [ - ('content-type', 'text/plain'), - ]) - return ['OUCH'] - else: - ret = 'nothin at {0!r}'.format(path_info) + return ShippingCostHandler(environ, start_response).handle() + except NotFoundError: + return self._handle_404(environ, start_response) + + @classmethod + def _handle_404(cls, environ, start_response): + ret = 'nothin at {0!r}'.format(environ.get('PATH_INFO', '/')) start_response('404 Not Found', [ ('content-type', 'text/plain'), ('content-length', str(len(ret))) @@ -39,72 +68,105 @@ def shipping_app(environ, start_response): return [ret] -def get_params(environ): - params = cgi.parse(fp=environ.get('wsgi.input'), environ=environ) - for key, value in params.iteritems(): - if len(value) == 1: - params[key] = value[0] - return params - - -def xml_handler(environ, start_response): - params = get_params(environ) - zipcode = int(float(params.get('zipcode', 0))) - pounds = int(float(params.get('pounds', 0))) - - ret = [''] - for service, price in get_shipping_options(zipcode, pounds).iteritems(): - ret.append(''.format(**locals())) - ret.append('') - body = '\n'.join(ret) - - start_response('200 OK', [ - ('content-type', 'text/xml'), - ('content-length', str(len(body))) - ]) - return [body] - - -def plaintext_handler(environ, start_response): - params = get_params(environ) - zipcode = int(float(params.get('zipcode', 0))) - pounds = int(float(params.get('pounds', 0))) - - ret = [] - for service, price in get_shipping_options(zipcode, pounds).iteritems(): - ret.append('{service}: {price} USD'.format(**locals())) - body = '\n'.join(ret) +class ShippingCostHandler(object): + _shipping_options = None + _zipcode = 0 + _pounds = 0 + _handler_method = '' + + def __init__(self, environ, start_response): + self.environ = environ + self.start_response = start_response + self._path_info = self.environ.get('PATH_INFO', '').strip('/') + self._handler_method = \ + '_handle_{0}'.format(self._path_info.replace('.', '_')) + + def _get_params(self): + """some dumb param fetching, ignores multiple values for + same var name, e.g. query of "zipcode=12345&zipcode=90210" + would effectively discard the 90210 value + """ + params = cgi.parse_qs(self.environ.get('QUERY_STRING', '')) + + for intvar in ('zipcode', 'pounds'): + if params.get(intvar): + value = int(float(params.get(intvar)[0])) + setattr(self, '_{0}'.format(intvar), value) + + def _get_shipping_options(self): + base_cost = (float(self._zipcode) / 10000.0) + (self._pounds * 5.0) + self._shipping_options = { + "Next Day": int(base_cost * 4), + "Two Day Air": int(base_cost * 2), + "Saver Ground": int(base_cost) + } + + def handle(self): + if hasattr(self, self._handler_method): + self._get_params() + self._get_shipping_options() + return getattr(self, self._handler_method)() + else: + raise NotFoundError + + def _handle_xml(self): + response = XMLShippingOptionsResponse(self._shipping_options) + return response(self.environ, self.start_response) + + def _handle_text(self): + response = PlaintextShippingOptionsResponse(self._shipping_options) + return response(self.environ, self.start_response) + + def _handle_crossdomain_xml(self): + response = CrossdomainXMLResponse() + return response(self.environ, self.start_response) + + +class PlaintextShippingOptionsResponse(object): + _head = '' + _record = '{service}: {price} USD' + _tail = '' + _content_type = 'text/plain' + + def __init__(self, shipping_options): + self._shipping_options = shipping_options + + def __call__(self, environ, start_response): + body = str(self) + start_response('200 OK', [ + ('content-type', self._content_type), + ('content-length', str(len(body))), + ]) + return [body] - start_response('200 OK', [ - ('content-type', 'text/plain'), - ('content-length', str(len(body))) - ]) - return [body] + def __str__(self): + ret = [self._head] + for service, price in self._shipping_options.iteritems(): + ret.append(self._record.format(service=service, price=price)) + ret.append(self._tail) + return '\n'.join(ret) -def crossdomain_xml_handler(environ, start_response): - start_response('200 OK', [ - ('content-type', 'text/xml'), - ('content-length', str(len(XD_XML))), - ]) - return [XD_XML] +class XMLShippingOptionsResponse(PlaintextShippingOptionsResponse): + _head = '' + _record = ('') + _tail = '' + _content_type = 'text/xml' -XD_XML = """\ - - - -""" +class CrossdomainXMLResponse(PlaintextShippingOptionsResponse): + _content_type = 'text/xml' + def __init__(self): + pass -def get_shipping_options(zipcode, pounds): - base_cost = (float(zipcode) / 10000.0) + (pounds * 5.0) - return { - "Next Day": int(base_cost * 4), - "Two Day Air": int(base_cost * 2), - "Saver Ground": int(base_cost) - } + def __str__(self): + return ( + '' + '' + '' + ) if __name__ == '__main__': From bd8fb22df19211750526b140626e08a5296493cf Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 13:25:32 -0500 Subject: [PATCH 12/92] adding yahoo weather thingy --- src/03-yahoo-weather/Makefile | 12 ++++++ src/03-yahoo-weather/YahooWeather.mxml | 51 ++++++++++++++++++++++++++ src/Makefile | 3 +- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/03-yahoo-weather/Makefile create mode 100644 src/03-yahoo-weather/YahooWeather.mxml diff --git a/src/03-yahoo-weather/Makefile b/src/03-yahoo-weather/Makefile new file mode 100644 index 0000000..19062e0 --- /dev/null +++ b/src/03-yahoo-weather/Makefile @@ -0,0 +1,12 @@ +MXMLC ?= mxmlc + + +all: YahooWeather.swf + + +YahooWeather.swf: YahooWeather.mxml + $(MXMLC) YahooWeather.mxml + + +clean: + rm -f *.swf diff --git a/src/03-yahoo-weather/YahooWeather.mxml b/src/03-yahoo-weather/YahooWeather.mxml new file mode 100644 index 0000000..8d4ab52 --- /dev/null +++ b/src/03-yahoo-weather/YahooWeather.mxml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Makefile b/src/Makefile index 4e6eec0..2f39e65 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,4 +2,5 @@ all: cd 01-flickr && $(MAKE) && cd .. && \ - cd 02-shipping && $(MAKE) + cd 02-shipping && $(MAKE) && cd .. && \ + cd 03-yahoo-weather && $(MAKE) From 27625fa8d8c5b360bcaa82535cd1dfd947dc81fb Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 13:30:10 -0500 Subject: [PATCH 13/92] adding employees dynamic crud example --- src/04-employee-crud/CRUDDynamic.mxml | 58 +++++++++++++++++++++++++++ src/04-employee-crud/Makefile | 16 ++++++++ src/04-employee-crud/employees.as | 43 ++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 src/04-employee-crud/CRUDDynamic.mxml create mode 100644 src/04-employee-crud/Makefile create mode 100644 src/04-employee-crud/employees.as diff --git a/src/04-employee-crud/CRUDDynamic.mxml b/src/04-employee-crud/CRUDDynamic.mxml new file mode 100644 index 0000000..7a8b6de --- /dev/null +++ b/src/04-employee-crud/CRUDDynamic.mxml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/04-employee-crud/Makefile b/src/04-employee-crud/Makefile new file mode 100644 index 0000000..3fc08a1 --- /dev/null +++ b/src/04-employee-crud/Makefile @@ -0,0 +1,16 @@ +MXMLC ?= mxmlc + + +all: CRUDDynamic.swf CRUDStatic.swf + + +CRUDDynamic.swf: CRUDDynamic.mxml + $(MXMLC) CRUDDynamic.mxml + + +CRUDStatic.swf: CRUDStatic.mxml + $(MXMLC) CRUDStatic.mxml + + +clean: + rm -f *.swf diff --git a/src/04-employee-crud/employees.as b/src/04-employee-crud/employees.as new file mode 100644 index 0000000..d0cc66a --- /dev/null +++ b/src/04-employee-crud/employees.as @@ -0,0 +1,43 @@ +import mx.rpc.events.ResultEvent; +import mx.collections.XMLListCollection; + +private var params:Object = new Object(); +[Bindable] +private var listData:XMLListCollection; + +public function resultHandler(event:ResultEvent):void { + var result:XML = XML(event.result); + var xmlList:XMLList = result.data.children(); + listData = new XMLListCollection(xmlList); +} + +public function insertItemHandler(event:ResultEvent):void { + fill(); +} + +public function fill():void{ + employeesService.removeEventListener(ResultEvent.RESULT,insertItemHandler); + employeesService.addEventListener(ResultEvent.RESULT,resultHandler); + employeesService.method = "GET"; + params['method'] = "FindAllEmployees"; + employeesService.cancel(); + employeesService.send(params); + viewstack1.selectedIndex=1; +} + +public function insertEmployee():void{ + employeesService.removeEventListener(ResultEvent.RESULT,resultHandler); + employeesService.addEventListener(ResultEvent.RESULT,insertItemHandler); + employeesService.method = "POST"; + params = {"method": "InsertEmployee", "id": NaN, "firstName": inputFirst.text, + "lastName": inputLast.text, "officePhone": inputPhone.text}; + employeesService.cancel(); + employeesService.send(params); + clearInputFields(); +} + +private function clearInputFields():void{ + inputFirst.text = ""; + inputLast.text = ""; + inputPhone.text = ""; +} From 9b1c18912f33135daf855d21f50fe236a5c56e46 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 13:32:20 -0500 Subject: [PATCH 14/92] adding static employees crud example --- src/04-employee-crud/CRUDDynamic.mxml | 2 +- src/04-employee-crud/CRUDStatic.mxml | 34 +++++++++++++++++++ .../{employees.as => dyn-employees.as} | 0 src/04-employee-crud/static-employees.as | 20 +++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/04-employee-crud/CRUDStatic.mxml rename src/04-employee-crud/{employees.as => dyn-employees.as} (100%) create mode 100644 src/04-employee-crud/static-employees.as diff --git a/src/04-employee-crud/CRUDDynamic.mxml b/src/04-employee-crud/CRUDDynamic.mxml index 7a8b6de..2c98147 100644 --- a/src/04-employee-crud/CRUDDynamic.mxml +++ b/src/04-employee-crud/CRUDDynamic.mxml @@ -3,7 +3,7 @@ layout="absolute"> diff --git a/src/04-employee-crud/CRUDStatic.mxml b/src/04-employee-crud/CRUDStatic.mxml new file mode 100644 index 0000000..f487cd4 --- /dev/null +++ b/src/04-employee-crud/CRUDStatic.mxml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/04-employee-crud/employees.as b/src/04-employee-crud/dyn-employees.as similarity index 100% rename from src/04-employee-crud/employees.as rename to src/04-employee-crud/dyn-employees.as diff --git a/src/04-employee-crud/static-employees.as b/src/04-employee-crud/static-employees.as new file mode 100644 index 0000000..f6f02a4 --- /dev/null +++ b/src/04-employee-crud/static-employees.as @@ -0,0 +1,20 @@ +import mx.rpc.events.ResultEvent; + +private var params:Object; + +[Bindable] +private var result:XML; + +private function initApp():void{ + employeesService.cancel(); + params= new Object(); +} + +public function resultHandler(event:ResultEvent):void { + result = XML( event.result); +} + +public function fill():void{ + viewstack1.selectedIndex=1; + employeesService.send(params); +} From ec2b4aba4f8c6fc21583ec8f572c083549750427 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 13:35:30 -0500 Subject: [PATCH 15/92] adding 04-employee-crud to top-level makefile --- src/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 2f39e65..5c1f2f3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -3,4 +3,5 @@ all: cd 01-flickr && $(MAKE) && cd .. && \ cd 02-shipping && $(MAKE) && cd .. && \ - cd 03-yahoo-weather && $(MAKE) + cd 03-yahoo-weather && $(MAKE) && cd .. && \ + cd 04-employee-crud && $(MAKE) From 6317fe4f3062bebe6e019bc930f21adb40a8ba3a Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 13:36:07 -0500 Subject: [PATCH 16/92] collapsing worthless "src" layer --- {src/01-flickr => 01-flickr}/FlickrRIA.mxml | 0 {src/01-flickr => 01-flickr}/FlickrThumbnail.mxml | 0 {src/01-flickr => 01-flickr}/Makefile | 0 {src/02-shipping => 02-shipping}/Makefile | 0 {src/02-shipping => 02-shipping}/PlainText.mxml | 0 {src/02-shipping => 02-shipping}/shipping.py | 0 {src/03-yahoo-weather => 03-yahoo-weather}/Makefile | 0 .../YahooWeather.mxml | 0 .../04-employee-crud => 04-employee-crud}/CRUDDynamic.mxml | 0 {src/04-employee-crud => 04-employee-crud}/CRUDStatic.mxml | 0 {src/04-employee-crud => 04-employee-crud}/Makefile | 0 .../04-employee-crud => 04-employee-crud}/dyn-employees.as | 0 .../static-employees.as | 0 Makefile | 5 ++++- src/Makefile | 7 ------- 15 files changed, 4 insertions(+), 8 deletions(-) rename {src/01-flickr => 01-flickr}/FlickrRIA.mxml (100%) rename {src/01-flickr => 01-flickr}/FlickrThumbnail.mxml (100%) rename {src/01-flickr => 01-flickr}/Makefile (100%) rename {src/02-shipping => 02-shipping}/Makefile (100%) rename {src/02-shipping => 02-shipping}/PlainText.mxml (100%) rename {src/02-shipping => 02-shipping}/shipping.py (100%) rename {src/03-yahoo-weather => 03-yahoo-weather}/Makefile (100%) rename {src/03-yahoo-weather => 03-yahoo-weather}/YahooWeather.mxml (100%) rename {src/04-employee-crud => 04-employee-crud}/CRUDDynamic.mxml (100%) rename {src/04-employee-crud => 04-employee-crud}/CRUDStatic.mxml (100%) rename {src/04-employee-crud => 04-employee-crud}/Makefile (100%) rename {src/04-employee-crud => 04-employee-crud}/dyn-employees.as (100%) rename {src/04-employee-crud => 04-employee-crud}/static-employees.as (100%) delete mode 100644 src/Makefile diff --git a/src/01-flickr/FlickrRIA.mxml b/01-flickr/FlickrRIA.mxml similarity index 100% rename from src/01-flickr/FlickrRIA.mxml rename to 01-flickr/FlickrRIA.mxml diff --git a/src/01-flickr/FlickrThumbnail.mxml b/01-flickr/FlickrThumbnail.mxml similarity index 100% rename from src/01-flickr/FlickrThumbnail.mxml rename to 01-flickr/FlickrThumbnail.mxml diff --git a/src/01-flickr/Makefile b/01-flickr/Makefile similarity index 100% rename from src/01-flickr/Makefile rename to 01-flickr/Makefile diff --git a/src/02-shipping/Makefile b/02-shipping/Makefile similarity index 100% rename from src/02-shipping/Makefile rename to 02-shipping/Makefile diff --git a/src/02-shipping/PlainText.mxml b/02-shipping/PlainText.mxml similarity index 100% rename from src/02-shipping/PlainText.mxml rename to 02-shipping/PlainText.mxml diff --git a/src/02-shipping/shipping.py b/02-shipping/shipping.py similarity index 100% rename from src/02-shipping/shipping.py rename to 02-shipping/shipping.py diff --git a/src/03-yahoo-weather/Makefile b/03-yahoo-weather/Makefile similarity index 100% rename from src/03-yahoo-weather/Makefile rename to 03-yahoo-weather/Makefile diff --git a/src/03-yahoo-weather/YahooWeather.mxml b/03-yahoo-weather/YahooWeather.mxml similarity index 100% rename from src/03-yahoo-weather/YahooWeather.mxml rename to 03-yahoo-weather/YahooWeather.mxml diff --git a/src/04-employee-crud/CRUDDynamic.mxml b/04-employee-crud/CRUDDynamic.mxml similarity index 100% rename from src/04-employee-crud/CRUDDynamic.mxml rename to 04-employee-crud/CRUDDynamic.mxml diff --git a/src/04-employee-crud/CRUDStatic.mxml b/04-employee-crud/CRUDStatic.mxml similarity index 100% rename from src/04-employee-crud/CRUDStatic.mxml rename to 04-employee-crud/CRUDStatic.mxml diff --git a/src/04-employee-crud/Makefile b/04-employee-crud/Makefile similarity index 100% rename from src/04-employee-crud/Makefile rename to 04-employee-crud/Makefile diff --git a/src/04-employee-crud/dyn-employees.as b/04-employee-crud/dyn-employees.as similarity index 100% rename from src/04-employee-crud/dyn-employees.as rename to 04-employee-crud/dyn-employees.as diff --git a/src/04-employee-crud/static-employees.as b/04-employee-crud/static-employees.as similarity index 100% rename from src/04-employee-crud/static-employees.as rename to 04-employee-crud/static-employees.as diff --git a/Makefile b/Makefile index e375d6f..5c1f2f3 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,7 @@ all: - cd src && $(MAKE) + cd 01-flickr && $(MAKE) && cd .. && \ + cd 02-shipping && $(MAKE) && cd .. && \ + cd 03-yahoo-weather && $(MAKE) && cd .. && \ + cd 04-employee-crud && $(MAKE) diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index 5c1f2f3..0000000 --- a/src/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - - -all: - cd 01-flickr && $(MAKE) && cd .. && \ - cd 02-shipping && $(MAKE) && cd .. && \ - cd 03-yahoo-weather && $(MAKE) && cd .. && \ - cd 04-employee-crud && $(MAKE) From c45d728955b0c15027861bb45d929c636e8ffb90 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 13:38:59 -0500 Subject: [PATCH 17/92] simplifying top-level makefile --- Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 5c1f2f3..f93eb00 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,8 @@ +PROJECTS = $(wildcard ./[0-9]*-*) all: - cd 01-flickr && $(MAKE) && cd .. && \ - cd 02-shipping && $(MAKE) && cd .. && \ - cd 03-yahoo-weather && $(MAKE) && cd .. && \ - cd 04-employee-crud && $(MAKE) + @for project in $(PROJECTS) ; \ + do \ + cd $$project && $(MAKE) && cd .. ; \ + done From 119cc1a0a9ac177b3ecf3c3cc59aaaf5e40df9b9 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 13:41:29 -0500 Subject: [PATCH 18/92] adding clean task to top makefile --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index f93eb00..28decc3 100644 --- a/Makefile +++ b/Makefile @@ -6,3 +6,7 @@ all: do \ cd $$project && $(MAKE) && cd .. ; \ done + + +clean: + find -name \*.swf -exec rm {} \; From 0eaf4d8cfd2973a98170a99410018e05fe236bca Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 14:18:09 -0500 Subject: [PATCH 19/92] adding ipc example and drastically simplifying makefile crap --- 01-flickr/Makefile | 16 ------------- 02-shipping/Makefile | 12 ---------- 03-yahoo-weather/Makefile | 12 ---------- 04-employee-crud/Makefile | 16 ------------- 05-ipc/LocalConn.mxml | 48 +++++++++++++++++++++++++++++++++++++++ Makefile | 14 +++++------- 6 files changed, 54 insertions(+), 64 deletions(-) delete mode 100644 01-flickr/Makefile delete mode 100644 02-shipping/Makefile delete mode 100644 03-yahoo-weather/Makefile delete mode 100644 04-employee-crud/Makefile create mode 100644 05-ipc/LocalConn.mxml diff --git a/01-flickr/Makefile b/01-flickr/Makefile deleted file mode 100644 index 5f6a5da..0000000 --- a/01-flickr/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -MXMLC ?= mxmlc - - -all: FlickrRIA.swf FlickrThumbnail.swf - - -FlickrRIA.swf: FlickrRIA.mxml - $(MXMLC) FlickrRIA.mxml - - -FlickrThumbnail.swf: FlickrThumbnail.mxml - $(MXMLC) FlickrThumbnail.mxml - - -clean: - rm -f *.swf diff --git a/02-shipping/Makefile b/02-shipping/Makefile deleted file mode 100644 index 39bf31e..0000000 --- a/02-shipping/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -MXMLC ?= mxmlc - - -all: PlainText.swf - - -PlainText.swf: PlainText.mxml - $(MXMLC) PlainText.mxml - - -clean: - rm -f *.swf diff --git a/03-yahoo-weather/Makefile b/03-yahoo-weather/Makefile deleted file mode 100644 index 19062e0..0000000 --- a/03-yahoo-weather/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -MXMLC ?= mxmlc - - -all: YahooWeather.swf - - -YahooWeather.swf: YahooWeather.mxml - $(MXMLC) YahooWeather.mxml - - -clean: - rm -f *.swf diff --git a/04-employee-crud/Makefile b/04-employee-crud/Makefile deleted file mode 100644 index 3fc08a1..0000000 --- a/04-employee-crud/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -MXMLC ?= mxmlc - - -all: CRUDDynamic.swf CRUDStatic.swf - - -CRUDDynamic.swf: CRUDDynamic.mxml - $(MXMLC) CRUDDynamic.mxml - - -CRUDStatic.swf: CRUDStatic.mxml - $(MXMLC) CRUDStatic.mxml - - -clean: - rm -f *.swf diff --git a/05-ipc/LocalConn.mxml b/05-ipc/LocalConn.mxml new file mode 100644 index 0000000..31a23cb --- /dev/null +++ b/05-ipc/LocalConn.mxml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Makefile b/Makefile index 28decc3..1014228 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,10 @@ -PROJECTS = $(wildcard ./[0-9]*-*) +BASE = $(PWD) +MXMLC ?= mxmlc +SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) -all: - @for project in $(PROJECTS) ; \ - do \ - cd $$project && $(MAKE) && cd .. ; \ - done +%.swf : %.mxml + $(MXMLC) $< -output $@ -clean: - find -name \*.swf -exec rm {} \; +all: $(SWFS) From 17aef69ed9f940a22e93a7f9ff2e49b858dabfbe Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 14:18:41 -0500 Subject: [PATCH 20/92] re-adding clean task --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 1014228..2cae4f8 100644 --- a/Makefile +++ b/Makefile @@ -8,3 +8,7 @@ SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) all: $(SWFS) + + +clean: + find -name \*.swf -exec rm {} \; From e62953936dab41986e3f0df2c9b5f1a16f6b2268 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 14:23:01 -0500 Subject: [PATCH 21/92] adding warnigs flag to mxmlc --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2cae4f8..e18d2d3 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) %.swf : %.mxml - $(MXMLC) $< -output $@ + $(MXMLC) $< -warnings -output $@ all: $(SWFS) From 21cfe7f19e75113c368db34cb77c159f8b46393d Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 15:06:19 -0500 Subject: [PATCH 22/92] adding comments, removing cruft from Makefile --- Makefile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e18d2d3..4a08739 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,24 @@ -BASE = $(PWD) +# sets mxmlc to just the basename "mxmlc" +# if not overridden in command line like so: +# make MXMLC=/path/to/my/mxmlc MXMLC ?= mxmlc + + +# define all target swf paths (which don't yet exist if +# they've never been built) SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) +# define an implicit build rule for any file matching %.swf, +# using the $< (input) and $@ (output) automatic variables %.swf : %.mxml $(MXMLC) $< -warnings -output $@ +# build all expected swf files all: $(SWFS) +# remove all swf files in the tree clean: find -name \*.swf -exec rm {} \; From 8d549637abc2626fb856f89f8e1fe64f5ea7a144 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 15:07:53 -0500 Subject: [PATCH 23/92] adding task sender and receiver stuff --- 05-ipc/BasicTaskReceiver.mxml | 46 ++++++++++++++++++++++++++++++++++ 05-ipc/TaskSender.mxml | 47 +++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 05-ipc/BasicTaskReceiver.mxml create mode 100644 05-ipc/TaskSender.mxml diff --git a/05-ipc/BasicTaskReceiver.mxml b/05-ipc/BasicTaskReceiver.mxml new file mode 100644 index 0000000..958f259 --- /dev/null +++ b/05-ipc/BasicTaskReceiver.mxml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + diff --git a/05-ipc/TaskSender.mxml b/05-ipc/TaskSender.mxml new file mode 100644 index 0000000..c498ed0 --- /dev/null +++ b/05-ipc/TaskSender.mxml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + From 3210e1926d5c9992c3a63a1c44e2c79842e8a096 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 15:11:11 -0500 Subject: [PATCH 24/92] adding shared object example --- 06-shared-objects/SharedObjectExample.mxml | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 06-shared-objects/SharedObjectExample.mxml diff --git a/06-shared-objects/SharedObjectExample.mxml b/06-shared-objects/SharedObjectExample.mxml new file mode 100644 index 0000000..c7f81aa --- /dev/null +++ b/06-shared-objects/SharedObjectExample.mxml @@ -0,0 +1,52 @@ + + + + 0) + textareaTasks.text=sharedObj.data.tasks; + } + + public function localconnectionHandler(msg:String):void { + textareaTasks.text= textareaTasks.text + msg + "\n"; + } + + private function clearTasks(event:MouseEvent):void { + textareaTasks.text=""; + } + + private function saveTasks(event:MouseEvent):void { + sharedObj.data.tasks = textareaTasks.text; + sharedObj.flush(); + } + + private function deleteSavedTasks(event:MouseEvent):void { + sharedObj.clear(); + } + + ]]> + + + + + + + + + + + From 0b670be3ed06a53b2d33b0a9c162e4a22ab6bfb9 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 15:25:48 -0500 Subject: [PATCH 25/92] renaming dirs to fit tutorial layout better --- .../YahooWeather.mxml | 0 .../CRUDDynamic.mxml | 0 .../dyn-employees.as | 0 .../CRUDStatic.mxml | 0 .../static-employees.as | 0 .../Main.mxml | 0 .../BasicTaskReceiver.mxml | 0 .../TaskSender.mxml | 0 .../SharedObjectExample.mxml | 0 ...ndFormattersExampleWithAreaCodeLookup.mxml | 57 +++++++++++++++++++ 10 files changed, 57 insertions(+) rename {03-yahoo-weather => 03a-binding-and-modeling}/YahooWeather.mxml (100%) rename {04-employee-crud => 03a-crud-dynamic}/CRUDDynamic.mxml (100%) rename {04-employee-crud => 03a-crud-dynamic}/dyn-employees.as (100%) rename {04-employee-crud => 03a-crud-static}/CRUDStatic.mxml (100%) rename {04-employee-crud => 03a-crud-static}/static-employees.as (100%) rename 05-ipc/LocalConn.mxml => 03a-external-interface/Main.mxml (100%) rename {05-ipc => 03a-local-connections}/BasicTaskReceiver.mxml (100%) rename {05-ipc => 03a-local-connections}/TaskSender.mxml (100%) rename {06-shared-objects => 03a-shared-objects}/SharedObjectExample.mxml (100%) create mode 100644 03a-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml diff --git a/03-yahoo-weather/YahooWeather.mxml b/03a-binding-and-modeling/YahooWeather.mxml similarity index 100% rename from 03-yahoo-weather/YahooWeather.mxml rename to 03a-binding-and-modeling/YahooWeather.mxml diff --git a/04-employee-crud/CRUDDynamic.mxml b/03a-crud-dynamic/CRUDDynamic.mxml similarity index 100% rename from 04-employee-crud/CRUDDynamic.mxml rename to 03a-crud-dynamic/CRUDDynamic.mxml diff --git a/04-employee-crud/dyn-employees.as b/03a-crud-dynamic/dyn-employees.as similarity index 100% rename from 04-employee-crud/dyn-employees.as rename to 03a-crud-dynamic/dyn-employees.as diff --git a/04-employee-crud/CRUDStatic.mxml b/03a-crud-static/CRUDStatic.mxml similarity index 100% rename from 04-employee-crud/CRUDStatic.mxml rename to 03a-crud-static/CRUDStatic.mxml diff --git a/04-employee-crud/static-employees.as b/03a-crud-static/static-employees.as similarity index 100% rename from 04-employee-crud/static-employees.as rename to 03a-crud-static/static-employees.as diff --git a/05-ipc/LocalConn.mxml b/03a-external-interface/Main.mxml similarity index 100% rename from 05-ipc/LocalConn.mxml rename to 03a-external-interface/Main.mxml diff --git a/05-ipc/BasicTaskReceiver.mxml b/03a-local-connections/BasicTaskReceiver.mxml similarity index 100% rename from 05-ipc/BasicTaskReceiver.mxml rename to 03a-local-connections/BasicTaskReceiver.mxml diff --git a/05-ipc/TaskSender.mxml b/03a-local-connections/TaskSender.mxml similarity index 100% rename from 05-ipc/TaskSender.mxml rename to 03a-local-connections/TaskSender.mxml diff --git a/06-shared-objects/SharedObjectExample.mxml b/03a-shared-objects/SharedObjectExample.mxml similarity index 100% rename from 06-shared-objects/SharedObjectExample.mxml rename to 03a-shared-objects/SharedObjectExample.mxml diff --git a/03a-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml b/03a-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml new file mode 100644 index 0000000..62b8059 --- /dev/null +++ b/03a-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From af1a62c760f518a6417168c6d337a10801be1562 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 15:27:15 -0500 Subject: [PATCH 26/92] adding comment and url to makefile for reference --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 4a08739..71d449b 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,8 @@ +# Makefile for building flex apps associated with +# the Adobe Flex "Geting Started" tutorial at: +# http://learn.adobe.com/wiki/display/Flex/Getting+Started + + # sets mxmlc to just the basename "mxmlc" # if not overridden in command line like so: # make MXMLC=/path/to/my/mxmlc From 428f98d5b7c060e63f50feb591d6bebd29e58d95 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 16:45:31 -0500 Subject: [PATCH 27/92] adding twitter event handler example --- 03b-handling-events/TwitterTimeline.mxml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 03b-handling-events/TwitterTimeline.mxml diff --git a/03b-handling-events/TwitterTimeline.mxml b/03b-handling-events/TwitterTimeline.mxml new file mode 100644 index 0000000..b3bc7d1 --- /dev/null +++ b/03b-handling-events/TwitterTimeline.mxml @@ -0,0 +1,22 @@ + + + + + + + + + From 519d3c5bea96df847b30a5a4e68333bf07c77e54 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 16:50:11 -0500 Subject: [PATCH 28/92] adding event listener vbox demo --- 03b-event-listeners/VBoxDemo.mxml | 62 +++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 03b-event-listeners/VBoxDemo.mxml diff --git a/03b-event-listeners/VBoxDemo.mxml b/03b-event-listeners/VBoxDemo.mxml new file mode 100644 index 0000000..e34ce2c --- /dev/null +++ b/03b-event-listeners/VBoxDemo.mxml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 708fe183857773492274d5c007bdf760ef2be567 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 16:53:35 -0500 Subject: [PATCH 29/92] adding event propagation demo --- 03b-event-propagation/DemoApplication.mxml | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 03b-event-propagation/DemoApplication.mxml diff --git a/03b-event-propagation/DemoApplication.mxml b/03b-event-propagation/DemoApplication.mxml new file mode 100644 index 0000000..46d7961 --- /dev/null +++ b/03b-event-propagation/DemoApplication.mxml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + From c558d79ff7a4d96d8cd63704cb37ffc33f7bb87a Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 16:56:12 -0500 Subject: [PATCH 30/92] more renaming to reflect structure of tutorial content --- .../YahooWeather.mxml | 0 {03a-crud-dynamic => 03a2-crud-dynamic}/CRUDDynamic.mxml | 0 {03a-crud-dynamic => 03a2-crud-dynamic}/dyn-employees.as | 0 {03a-crud-static => 03a3-crud-static}/CRUDStatic.mxml | 0 {03a-crud-static => 03a3-crud-static}/static-employees.as | 0 {03a-external-interface => 03a4-external-interface}/Main.mxml | 0 .../BasicTaskReceiver.mxml | 0 {03a-local-connections => 03a5-local-connections}/TaskSender.mxml | 0 .../SharedObjectExample.mxml | 0 .../ValidatorsandFormattersExampleWithAreaCodeLookup.mxml | 0 {03b-event-listeners => 03b1-event-listeners}/VBoxDemo.mxml | 0 .../DemoApplication.mxml | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename {03a-binding-and-modeling => 03a1-binding-and-modeling}/YahooWeather.mxml (100%) rename {03a-crud-dynamic => 03a2-crud-dynamic}/CRUDDynamic.mxml (100%) rename {03a-crud-dynamic => 03a2-crud-dynamic}/dyn-employees.as (100%) rename {03a-crud-static => 03a3-crud-static}/CRUDStatic.mxml (100%) rename {03a-crud-static => 03a3-crud-static}/static-employees.as (100%) rename {03a-external-interface => 03a4-external-interface}/Main.mxml (100%) rename {03a-local-connections => 03a5-local-connections}/BasicTaskReceiver.mxml (100%) rename {03a-local-connections => 03a5-local-connections}/TaskSender.mxml (100%) rename {03a-shared-objects => 03a6-shared-objects}/SharedObjectExample.mxml (100%) rename {03a-validation-and-formatting => 03a7-validation-and-formatting}/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml (100%) rename {03b-event-listeners => 03b1-event-listeners}/VBoxDemo.mxml (100%) rename {03b-event-propagation => 03b2-event-propagation}/DemoApplication.mxml (100%) diff --git a/03a-binding-and-modeling/YahooWeather.mxml b/03a1-binding-and-modeling/YahooWeather.mxml similarity index 100% rename from 03a-binding-and-modeling/YahooWeather.mxml rename to 03a1-binding-and-modeling/YahooWeather.mxml diff --git a/03a-crud-dynamic/CRUDDynamic.mxml b/03a2-crud-dynamic/CRUDDynamic.mxml similarity index 100% rename from 03a-crud-dynamic/CRUDDynamic.mxml rename to 03a2-crud-dynamic/CRUDDynamic.mxml diff --git a/03a-crud-dynamic/dyn-employees.as b/03a2-crud-dynamic/dyn-employees.as similarity index 100% rename from 03a-crud-dynamic/dyn-employees.as rename to 03a2-crud-dynamic/dyn-employees.as diff --git a/03a-crud-static/CRUDStatic.mxml b/03a3-crud-static/CRUDStatic.mxml similarity index 100% rename from 03a-crud-static/CRUDStatic.mxml rename to 03a3-crud-static/CRUDStatic.mxml diff --git a/03a-crud-static/static-employees.as b/03a3-crud-static/static-employees.as similarity index 100% rename from 03a-crud-static/static-employees.as rename to 03a3-crud-static/static-employees.as diff --git a/03a-external-interface/Main.mxml b/03a4-external-interface/Main.mxml similarity index 100% rename from 03a-external-interface/Main.mxml rename to 03a4-external-interface/Main.mxml diff --git a/03a-local-connections/BasicTaskReceiver.mxml b/03a5-local-connections/BasicTaskReceiver.mxml similarity index 100% rename from 03a-local-connections/BasicTaskReceiver.mxml rename to 03a5-local-connections/BasicTaskReceiver.mxml diff --git a/03a-local-connections/TaskSender.mxml b/03a5-local-connections/TaskSender.mxml similarity index 100% rename from 03a-local-connections/TaskSender.mxml rename to 03a5-local-connections/TaskSender.mxml diff --git a/03a-shared-objects/SharedObjectExample.mxml b/03a6-shared-objects/SharedObjectExample.mxml similarity index 100% rename from 03a-shared-objects/SharedObjectExample.mxml rename to 03a6-shared-objects/SharedObjectExample.mxml diff --git a/03a-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml b/03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml similarity index 100% rename from 03a-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml rename to 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml diff --git a/03b-event-listeners/VBoxDemo.mxml b/03b1-event-listeners/VBoxDemo.mxml similarity index 100% rename from 03b-event-listeners/VBoxDemo.mxml rename to 03b1-event-listeners/VBoxDemo.mxml diff --git a/03b-event-propagation/DemoApplication.mxml b/03b2-event-propagation/DemoApplication.mxml similarity index 100% rename from 03b-event-propagation/DemoApplication.mxml rename to 03b2-event-propagation/DemoApplication.mxml From 6acee5959900164be6bbae13592279997eec999b Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 16:58:13 -0500 Subject: [PATCH 31/92] adding simple ui event example --- 03b3-simple-ui-event/Example1.mxml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 03b3-simple-ui-event/Example1.mxml diff --git a/03b3-simple-ui-event/Example1.mxml b/03b3-simple-ui-event/Example1.mxml new file mode 100644 index 0000000..edb4930 --- /dev/null +++ b/03b3-simple-ui-event/Example1.mxml @@ -0,0 +1,13 @@ + + + + + + + From 58571dd8be17af4840e6131fa675154b6fd88094 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 16:59:06 -0500 Subject: [PATCH 32/92] adding simple ui event example 2 --- 03b3-simple-ui-event/Example2.mxml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 03b3-simple-ui-event/Example2.mxml diff --git a/03b3-simple-ui-event/Example2.mxml b/03b3-simple-ui-event/Example2.mxml new file mode 100644 index 0000000..c20de22 --- /dev/null +++ b/03b3-simple-ui-event/Example2.mxml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + From 881123c601aca2340336cdbdbe4b7f302e157908 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:11:39 -0500 Subject: [PATCH 33/92] adding application container demo --- 03c1-application-container/Demo.mxml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 03c1-application-container/Demo.mxml diff --git a/03c1-application-container/Demo.mxml b/03c1-application-container/Demo.mxml new file mode 100644 index 0000000..d66520c --- /dev/null +++ b/03c1-application-container/Demo.mxml @@ -0,0 +1,12 @@ + + + + + + + + From 4b006270b86b13eeb27af30d80ba5a2ca3bfe6d8 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:14:38 -0500 Subject: [PATCH 34/92] adding box model vbox example --- 03c2-box-model/VBoxExample.mxml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 03c2-box-model/VBoxExample.mxml diff --git a/03c2-box-model/VBoxExample.mxml b/03c2-box-model/VBoxExample.mxml new file mode 100644 index 0000000..1746632 --- /dev/null +++ b/03c2-box-model/VBoxExample.mxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + From c0f0338424c49ea4d17eedaf7ea2ab0e80469c61 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:18:50 -0500 Subject: [PATCH 35/92] adding donkey photo --- 03c1-application-container/assets/animals03.jpg | Bin 0 -> 25475 bytes 03c2-box-model/assets | 1 + 2 files changed, 1 insertion(+) create mode 100644 03c1-application-container/assets/animals03.jpg create mode 120000 03c2-box-model/assets diff --git a/03c1-application-container/assets/animals03.jpg b/03c1-application-container/assets/animals03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c843240f1f10d2c2ca5bcebf121002e82b9cee6 GIT binary patch literal 25475 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%0D4&BB8U5LsO%i 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 Yi9GxP+a1`wEF~M+&6CwmGNgb1+1y`BSO5S3 literal 0 HcmV?d00001 diff --git a/03c2-box-model/assets b/03c2-box-model/assets new file mode 120000 index 0000000..e507519 --- /dev/null +++ b/03c2-box-model/assets @@ -0,0 +1 @@ +../03c1-application-container/assets \ No newline at end of file From 9a04889a4766a399527fa95878543e2dd39a524e Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:19:32 -0500 Subject: [PATCH 36/92] adding hbox example --- 03c2-box-model/HBoxExample.mxml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 03c2-box-model/HBoxExample.mxml diff --git a/03c2-box-model/HBoxExample.mxml b/03c2-box-model/HBoxExample.mxml new file mode 100644 index 0000000..7563e3b --- /dev/null +++ b/03c2-box-model/HBoxExample.mxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + From 0f428fddbd741bb96bab6fc34bfcb03c2f9b0117 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:20:25 -0500 Subject: [PATCH 37/92] adding vbox+hbox combo example --- 03c2-box-model/VBoxHBoxCombo.mxml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 03c2-box-model/VBoxHBoxCombo.mxml diff --git a/03c2-box-model/VBoxHBoxCombo.mxml b/03c2-box-model/VBoxHBoxCombo.mxml new file mode 100644 index 0000000..75630cb --- /dev/null +++ b/03c2-box-model/VBoxHBoxCombo.mxml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + From 2f15479f035d4e178ab86b9e83a30301fb18a0b7 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:22:05 -0500 Subject: [PATCH 38/92] adding canvas absolute example --- 03c3-canvas-absolute/Example.mxml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 03c3-canvas-absolute/Example.mxml diff --git a/03c3-canvas-absolute/Example.mxml b/03c3-canvas-absolute/Example.mxml new file mode 100644 index 0000000..c37b1d0 --- /dev/null +++ b/03c3-canvas-absolute/Example.mxml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + From 2329b09e4ad30a0a43438727891042b5d38b4c1d Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:23:03 -0500 Subject: [PATCH 39/92] symlinking assets for 03c3 --- 03c3-canvas-absolute/assets | 1 + 1 file changed, 1 insertion(+) create mode 120000 03c3-canvas-absolute/assets diff --git a/03c3-canvas-absolute/assets b/03c3-canvas-absolute/assets new file mode 120000 index 0000000..e507519 --- /dev/null +++ b/03c3-canvas-absolute/assets @@ -0,0 +1 @@ +../03c1-application-container/assets \ No newline at end of file From f45e0423b7e8d2239ae8997db9dc5d5254cc03d2 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:25:09 -0500 Subject: [PATCH 40/92] adding canvas relative example --- 03c4-canvas-relative/Photo.mxml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 03c4-canvas-relative/Photo.mxml diff --git a/03c4-canvas-relative/Photo.mxml b/03c4-canvas-relative/Photo.mxml new file mode 100644 index 0000000..08ee9b4 --- /dev/null +++ b/03c4-canvas-relative/Photo.mxml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + From b9ae85393c363ab3b711aff79f35d4fee4b6d014 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:27:16 -0500 Subject: [PATCH 41/92] adding assets for 03c4 --- 03c4-canvas-relative/Photo.mxml | 2 +- 03c4-canvas-relative/assets | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 120000 03c4-canvas-relative/assets diff --git a/03c4-canvas-relative/Photo.mxml b/03c4-canvas-relative/Photo.mxml index 08ee9b4..3001ee8 100644 --- a/03c4-canvas-relative/Photo.mxml +++ b/03c4-canvas-relative/Photo.mxml @@ -15,7 +15,7 @@ - Date: Thu, 18 Feb 2010 17:28:24 -0500 Subject: [PATCH 42/92] adding example for combined layout --- 03c5-combined-layout/Combined.mxml | 94 ++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 03c5-combined-layout/Combined.mxml diff --git a/03c5-combined-layout/Combined.mxml b/03c5-combined-layout/Combined.mxml new file mode 100644 index 0000000..e94f5f1 --- /dev/null +++ b/03c5-combined-layout/Combined.mxml @@ -0,0 +1,94 @@ + + + + + Panel { + backgroundAlpha: 1; + borderAlpha: 1; + headerColors: #c7c7c7, #ffffff; + footerColors: #ffffff, #c7c7c7; + paddingTop: 15; + paddingRight: 15; + paddingLeft: 15; + paddingBottom: 15; + shadowDirection: "right"; + } + .header { + color: #ffffff; + fontSize: 15; + fontWeight: "bold"; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b9fe63fe35e5300e66cfb673d8dd6c76d14102b3 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:35:31 -0500 Subject: [PATCH 43/92] getting raster assets in shape --- 03c1-application-container/assets | 1 + 03c2-box-model/assets | 2 +- 03c3-canvas-absolute/assets | 2 +- 03c4-canvas-relative/assets | 2 +- 03c5-combined-layout/assets | 1 + .../assets => _assets}/animals03.jpg | Bin _assets/animals08_sm.jpg | Bin 0 -> 1743 bytes _assets/animals09_sm.jpg | Bin 0 -> 1812 bytes _assets/city01_sm.jpg | Bin 0 -> 2914 bytes _assets/city02_sm.jpg | Bin 0 -> 2211 bytes _assets/city03_sm.jpg | Bin 0 -> 1406 bytes _assets/city04_sm.jpg | Bin 0 -> 2055 bytes 12 files changed, 5 insertions(+), 3 deletions(-) create mode 120000 03c1-application-container/assets create mode 120000 03c5-combined-layout/assets rename {03c1-application-container/assets => _assets}/animals03.jpg (100%) create mode 100644 _assets/animals08_sm.jpg create mode 100644 _assets/animals09_sm.jpg create mode 100644 _assets/city01_sm.jpg create mode 100644 _assets/city02_sm.jpg create mode 100644 _assets/city03_sm.jpg create mode 100644 _assets/city04_sm.jpg diff --git a/03c1-application-container/assets b/03c1-application-container/assets new file mode 120000 index 0000000..f6c9582 --- /dev/null +++ b/03c1-application-container/assets @@ -0,0 +1 @@ +../_assets \ No newline at end of file diff --git a/03c2-box-model/assets b/03c2-box-model/assets index e507519..f6c9582 120000 --- a/03c2-box-model/assets +++ b/03c2-box-model/assets @@ -1 +1 @@ -../03c1-application-container/assets \ No newline at end of file +../_assets \ No newline at end of file diff --git a/03c3-canvas-absolute/assets b/03c3-canvas-absolute/assets index e507519..f6c9582 120000 --- a/03c3-canvas-absolute/assets +++ b/03c3-canvas-absolute/assets @@ -1 +1 @@ -../03c1-application-container/assets \ No newline at end of file +../_assets \ No newline at end of file diff --git a/03c4-canvas-relative/assets b/03c4-canvas-relative/assets index e507519..f6c9582 120000 --- a/03c4-canvas-relative/assets +++ b/03c4-canvas-relative/assets @@ -1 +1 @@ -../03c1-application-container/assets \ No newline at end of file +../_assets \ No newline at end of file diff --git a/03c5-combined-layout/assets b/03c5-combined-layout/assets new file mode 120000 index 0000000..f6c9582 --- /dev/null +++ b/03c5-combined-layout/assets @@ -0,0 +1 @@ +../_assets \ No newline at end of file diff --git a/03c1-application-container/assets/animals03.jpg b/_assets/animals03.jpg similarity index 100% rename from 03c1-application-container/assets/animals03.jpg rename to _assets/animals03.jpg diff --git a/_assets/animals08_sm.jpg b/_assets/animals08_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16e83d902b5e43045783053c008f6181b380aa80 GIT binary patch literal 1743 zcmb7;eLT|%9LIm#uvx>lHko<4nGni^dESY6s63UV+f<&;Q^ayCF%Ok>&SQzCi_n9| zI&1TI2}d5LjPe+#Fp<#Q&Qm$3`=`I}^ZoPv`Mh7>?UC)b0P?VdvjYGEfdHqS1Ge7) zc7Uu56b6-%g+XC(xa=-DMFlwoLJp6?A{8}M2?PyQb#w5EN*;9l!$s z81nVoZ;=5*q@ngf?-L(# z(>bGj!RVyRK+pM>a-wT|#_ZlU%c{24eX0KlSKlThwTFP^v&_L;x0~wyy|`IXNwPU7 z(~At?GY<}*E40)MyBN@KOcjE950}z6Bnu~3e|R^Yrtk8WwK;;q+(UEQt&b^iRIb^0 z*4&8+Vc`;u1Zp|sMXT&Z_j8%_^HCF78Mj2Ak1GU+|2frxCMK+KDVd9B1Eb7=kSH1#@n--BB!2R_`V?A%BV&{$l7u(CA4bRNb?P6BkK=!K54@4 zfdz)2-${3iyY6V&evQdf+Dx!&#uoS9+q7R_av85knti+}ro0^Asu(x<>=SV2Sq^Sc zUSj4nKU7O=7epktBB0gF^Ieo1!JHn*1Zfb(0BD;=C4LDzECT<|!3AX~l#;C%?$b zh)HBKFa4tP=s-knsoUMMxU2Yu<@Y`YTKN61qwqwZLVh7txVK>=;oF^;cV04yxo~S6YhaVs;dZ+Di^CZYrR~v!!`mACWiiN6LzA zOjHUZ21U%MRSM^5WgV$ZLm}(<$~=w4G`l=*B5EY5k9ErbWB4-C+;xJz&;dvduwP!V<-_^MW*d#CU zLt20&Kw|2^_xT9+=5?etq*U2r{pgO5G9(2zy73vvN!t=ZZ2@|TI&;CIdVCX_fB!_( z>BQUhn=ecRL5NK6(hL9Cxtk*8%O-8BY9!Pak6a(aR}qaqRk&H&5@X;tiZRLNpa0-ojt|RQ|U^(tL$pf(*(l zaw_MTA`w0AV>|Dnn#XVAr#c$FfW|r8q+c$c3R7)X>_*~@P?qA<;plhKHlD-hFJ`8L z*MM!{X!vTWS#3EsnD5f6vh8C{XP-*A z2W#}5{er7ZZ+Q<%%kMH&=_wz?{+3^C)7+{4GH}&h;f^i0?h0d{PD$e@du{+_PonnP zy?D9!;3d)Q0Ese4#V9-Vj6A(`xjQHVjjxOf^G8kj1W;Xa!xB{eR^xIBvXep^~=XxZ(T(y%j{*t`Vg(koD7;s`Y}|e zWUB0Br_xi!{k!e{M#g8vD;=Wwd2YI3+|%99sGMq?L`bo6j`!Wfc(^$gqA1&={{p`s B^cnyF literal 0 HcmV?d00001 diff --git a/_assets/animals09_sm.jpg b/_assets/animals09_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da6e14682bc2230a58cca6a8c8a0e077193026fb GIT binary patch literal 1812 zcmb7;dpy$%AIE>&FlNJs*4&28WkyoOHj(S1%)?_9z+lMU+JBId17yJvC`f)!J*)zNL6AMbGP1J&^?<+-Kn5v`(v!1rP}TQ36arOa z-ciS0&2K*J==6Bpd+!MY0`>y`ClLTcWI(dOo`gg0wSmDP8OT3%ATSc5Cu4z9)prO{ z^Li|u1>g|S-aZHtum=KfKnK({F4BwN)UBmo8yP3Y)aC~bnru*4MNV|t#wtY>DR7g9 z{&I0jloUmyi^RlTI zWMb>yXURfFid+sZdTZ~UgebMU*c_|9%+x6a)<2A9w{7yiUkb%&hCcvvoy0;xLU z;b)SgMM;|{A1QSg!Tln;oJlp#6=QKCiX_J{tgEea7Uvu2YETadl zGFIADwOl(m0g|f5qKR8tN2Gsp1 z)L=r=N`UFGbsENrpp#smme%3i^&kTGIig^(XR9+Iu{kt*Uv}3S{|ayRV%l|C|8w$C zO&=W-!G`y#7rz>9jH&(p%y{8(XbzwiUcz+|*D|!ns@Hz%TS`9>myjNqlUpyBK_1GV z&(-f~okGru%2Ec56g%-Z?$e-GeO0#uQUm8BDJD3T&ZIu8S4NTL*u)FePpsD3d9Hmm z=|eb%lJdp#tsgmKUx)DMZ)^BG_k%t=Qeb*EpIj)J`gkmBZI+oSGUz)mA&DuIg4)!f z+L@QQv$hPePAp;A=LNa3ObRrlM)D9&6Rz84HJVkSDf~RvVj(AYowgg6_F2;EH&kfM z-YK6Ufp2lL?hZYzw`5=3tTA$-P{p=B)&Ay*?#fT|>>$p}Eoc0hC;?u3$BS8KM=T*4 zzsDoGEa04VsL4woDey}D`HwPh&g5NR3)lSfJ&{5rnIAyOqfPk*?EcrqiMwPQ%Rjx) zNdm>-@ZQ(l#Vvciise zHRKn3V7phSK~J#^$Ep|FINqrtG$q_TU%&#m(LcX!TRXTJfZ7RT20kFIU;P$!YyS>L zVm46OUz70lRG<9Hyk{JLRGFf!nC7D z)9zt@DqCt-@(B2bp~f>(-TU>Zx~*!uAbQoSTHOE+jkN@oaMuYAAo~eVO?2+tEgGBt zA&l(k|LxrH>B@z766J|b4ubYhL0%+?Toi;UT{m9n^i{?^Xo{!{Z^GnC0bg_LxXgN1 zev9d06oX+R1Yf959}S&$ab1iG_j7PG)?4)8XWa_=*t<099>XI$X*8eh*TR;@yh)2K zoCq2!D`-Bvx%|wkyIIVrIwb{&$FJffb(vbQ%V>@Gj`xZQ5%p_!#lgk)@uNmjX1pD{TRl>#-LAbNL5Tgbx9k>n6j?C;jKmP3w|7yaT(Rv`$y`}-W3$FM XbK9pv?=Ea*K8kMkvPN6xvUKL(9eNj4 literal 0 HcmV?d00001 diff --git a/_assets/city01_sm.jpg b/_assets/city01_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..210b15a47bd1db04999089fceaaa4705cf1917df GIT binary patch literal 2914 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 literal 0 HcmV?d00001 diff --git a/_assets/city02_sm.jpg b/_assets/city02_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f91cd12a7421653d74611c5e2b06069e979d42c5 GIT binary patch literal 2211 zcmb7;c|6mPAICr2%p8*==B(vv%sJ*3A#*3UUl>tIq7ZZT{e=lJSB}cjHzap43R8qO z5g9oanj>AHUz@@%!`ldjI!+zTU6bn?25E0s_`JD;xj=a6U<45dp-BV=^))jvilNb~dsd7pMqot#-uP>`) ze8yPU46CQF^Ctwv!^6V|=ab;)m(Y<%%Io~!Vs`+7T!0O55dx9{z=9x%Ac)-!NCE&D z^5@(C3c>+EIl&;1pIFz0D^FU0q7x;7X-lI!w3)u7q=#!kz!>*EL>O{^KDHmtZc&_!_# z#q@}nCvg81izLlLF!!RAYe;6)5ydxYT<9C8sUkDBKhE)2(Pv1JA8js#rcpkmoV_Ys z9i(F$huczePrZ{HU#<5hKF&V>Jr9e)r!=^Mw|*s^VRGQS6q(fS zfuJ^7YrnhqPV~x$1LG$9ip6p~uj~>&PJA-5I(fBBJ;tqw+Ju*s&FYD~Mv8WTTtegC zb>4BHx2%6Uk!^LH^0Bu;cgZYJ!?0Q?(fjFSsP0eBE7$5bE?7D!%P^|eSKYxdm6e2j z$FKlVZk_?z%PG4eKAM?FxOe7B_3oepT0Zgcqy3 z!E)gFW6dCOKho94MppJRVHZI_#B=|RyL>YzRG>X-Wy3mxO5S0N=5rvl=~S6XZeDf# zY1oIoQD>X*c3J?ZQ^5F_=pRd?jYooUBNT6#eS+|VANvm;s+_ZDm_a-}icU>rYctg# zNmCmc3ol#8ypVR-&mK|!RK_}Vy8Z}YA39=#yI)?5>HZ~kE@<^7{+HN$$(PS0+BmjWG=81-`D1X7`8IDYs(@4 zdcl-f-%9%A?gc!Dt5_F$4%q}*TEHBuDur9xl^T8<6zO|t^nPNHh{#?JT5Kk&__bsW zN#_SsQSlyP$oKLDDfK?M`3u8-7jW95)X@@US3J}6Ub+m)7G0@E*<$*iitIG*vHa}h zl9*pu(D?>@Lu|XGaM)Xmtau~(Iccm19`Z?x^2B+v>lU5Dyy(M1F4wo6A_SFcwJ*|p z3~dnW>z8MeGzaUoNG{cmtTR4+N3ef0( zKxh-+*{}*Y!RTRKb*m)^DSK_*hog0!7GO_n+UGBM1HTqCZt!{Q+XWaNrCwKX4(cFB ziEUN26C6t%+8@j=*~hNU?!{QFazg#2N?b%{wLU8O;t`#wzJc-(gf?H#?H$PeNbT1Z zwO|{I6B`TTKG%Yvom;R>%$f9{I{AR>CuI+Z+P4#30%Soyk z5un()447`^!b8=B`rUn=;A?Z4Jpm$J)jpc9&qZy`XRK4&q8^P%OgI5LMwpX^hM~ZF z6mL}{R3&@DAbH>xRM()lOs!E|Z?Z#?4PYf4esHQf))u+k-!*|wXwvPDagpTF%w5`Nbc#V5m{>+%5B~V3lG~+`eD8UW2A+8 zGjTSJ@@3SZiS%n-_2azB1)JU1c{6qu2KZZl#nR*2*Mgen8%)YOns?|>xIoYm(NguV z{P|L|35;8Gn>t+_uSnCYm?mdNHOnIN_loFW;gVKK(CSUTW>UY=cP%X3=OfGao}TU{QP~kdkmRpBwW5RzBKy5+;0cr+)vb1*@_-JFL$L^uI5oI?a|RMjsp=jRRT8V z?{hR30&gO$Em9X;)eQJYqL67Wq?{1B9IaO=LDQB|f%h|b*+585A8p%PY~GiK1SCcx zveJ|8RCr7jFDND7?XP^hy&nA=?OMAUTXNniS|~1*iqo(OlpYCBn9*s-c!B&XvOVSD zR{VR}B7ouQw=3tDP2G2kE+joWR)ags-{UONmXYpuIjXR7c=f2w70%Hu0lX zc*4&~@wDn2?x+P~n{)2V4vfy^(^8+ah#{F=Wi;_6+*@_%&1|3Z+-+J4;R+n=iGKhh C>+dxH literal 0 HcmV?d00001 diff --git a/_assets/city03_sm.jpg b/_assets/city03_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab8d5f403e8c9620c62e0c3c44fdaabe2aa7eca3 GIT binary patch literal 1406 zcmb7Nw>X(!3m$H|T0^2G#1B9Rz0#!y||(8U60;qt$wXaleaAON62peX>uf)Ex| zbOMF|0E0G;{YOg58y)x;=AZ$9N-#hfg26%MuLIx)!YY|4Yii-WO@pZ0@4~eiDS72& zGfsQY{Kkgf#^3)j0{{>PeTl(-CI4n1)&z$4Rty4YXu}o@VF3~_x3Kxh1=pZ+ycSD# zp%--2(9GK=CMQqYiLr|tro4A zsP`BgQB3@Cq>fOv?80EPbs`t}=fa8+EdkHo$}H&ehap|Mf8H6`YB3pkO^1A0!*IU? zj@!P7s?Vb`++w4|#bhWt%A{iSheSP&#beEVpO$h1O0|Ra{B2`UlF;9ZdUKuYBBo37 znQ~DRZ`PzD$>uU`Ht~Qk5C9(~Z7uJOO}=(VkXzMxd-5@O!_{q+#!28$=}A;Lm5Es% z;fr{)E4M^yM?M4*6Rf266rpWvy-@j+*$jW2$wY`sEDIX96T|nEIh~9imIQ?LtK)u$ zGKhS!aTA#{eb6}bWbJ5jtE26htpi`Qn#xTyon+*<*;i20ng?W`dxO=CeiH3@_gHXp zPDftXOdfz()1u@>`;|aPx_nC{--p*U!-*zWreR?^f;VVAbxgsiQtRBQ3g~N zN2f@WGPok?b74ub7$#hHw@V*)U84X~XLH1L+t^BZRP1Jt54!qZGD7%D;mm>~wRHHq z`X0V2mqcqXs&6eIP)7N_tEbZ@JbR1YGT#iI{^g~07DXw+9+RqT;0^zLziKaiy;98d z5$(YG7Y2vZ+(UrDW4)L1vtvj#WHt>V>nngkoxwszT35yOLJ5KHV|JX`Eccsnx9OVb zj+xCR!kwH{NK0raVu;*19IHG*-v5jmY?eO1o@pq@hi>Ze5(W^v_T6vejW=aKNWAdE zL-dY88Zn`F=RSGKiGCiqq}3of6QQjD>I|N*I+8xWman^OZNuG0+lp926#d%uzB4Jd z3BD#*)3dLStd+@-0||7pD8Sl*3zQ4a2`QUIx}#yD^uJMlU`32D>QU78WSsc`}3D{rFHI21wG zo4%pdP{&sm#wpU{-H#HHZ8IzsVb_Z(rB)Q^sd+BE4~ow`Zq>o+({!(GI~3ei2hGSr zVR0e%d=oXcU#2MkdZ?fCtwUL$97Vr+KHe+d{MF(5s~05M{eyzu%+(NG^TE3X6iIT4 U(ZPFj8ImUg4Q|KN43c8tZvi_@% literal 0 HcmV?d00001 diff --git a/_assets/city04_sm.jpg b/_assets/city04_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78156348ecde4470f8f7a6f0e9e6b7ac496b466e GIT binary patch literal 2055 zcmb7;dpy&N8^^!f*jy&&&T`+7rfhDbmRx4DREOgrq?=1kYa4BH8NX6!kw|E-74k!9 zh1?QCatWu#h&Z`ME#rtT?EEmxIYED99@+X(}th;Yvt#4HZp8J!4}-Jp%)jxeW$oiZwGZuq0Sw zZS5T$9ZhySxjEroZ5$l!w1)Rq0i&tf2jA={2(jl zUat~i%8#x>AATfe(=Q`k2o=8{?8nY(;=OJ!2SqYPbYIURBILsMxWv@5(QkjbovwML z?9NPy-!u1Sm3(Rr#ax?I8`Gmd6yMINxQ*zdXzFU&1g<_1)Q||~MIjHqwsOj@-O1Vy zf1~=8c`{@vgWFu;Pe=~sMYyGpOr6;uPmm_Y9tw{}557)jD?H>F%8r$Kz4i6HYc~>a z)G|XeJGhb~!Ek3p42{;YbpxJw@nv!pjizH(*gFrKq27MEf=;@Qs4fW4Muy=D?1>3{ ziC@4Y@TcQ>qyAU$zjbT3!4i4>kED{cY-BnrTrwP?_?VFZQDbD4#^+P7&1BAIMa$m0 zZ@f015nEs8*_dpSY^Ok8ouA(j@2;q?sZEB$a&M}X<6>8B3&T$9?_&6i3I-ZXHq@A? zS;KRlH`<|b@NYIv?#h&_ld6l>NtwPFbZTxyHuLgERwBOQ(T^S*9;t%PTL{RfvPuF2 zK3K?w80GP!{H_Hqoa?X~Rw1?7maQ1Pj&J{Sp3oKK6En4J%Kwt2JN!Ze86X*`QyoS2 zwhm$tdxd%3ozbr#l*(U-9SbQ)^XPg$S>bpa~XJkg<-tKTM@l(>dyv&eLM4(zbDyUNC3bREy zSmc^mBItF+tY9yce{P4aIT%p8Jy;R8rD%9-=crGvnU2)2f*Q&qe_gSH`_C&7zET?% z6Xx_N<)pWRKg~WN;79rxI7Q9k*nxAiotSBb9;3O=RA;Xh52N}^>CMGY+vY+qXc$G3 z=Ia9%1JnH|H!l%IXSp3@eC1J^^nP}6dUQ-kKqRZlJ^EZ|WM-ERn9*Sc)04(|mrQaO zh!!|T6;So18M9Ji7|xX(Z|KI_UCM~h$mkEgIzg=_`+o3^c8R*v<8*3mqvj(_Ke+ul z|9&@z6;4OLWwM_j&{Z0(>+CW8RbhN{Q^NU?F&sSmG?PCW+w59ed!}hfz$Y(LsRNx2 zSaZTrNu9;e1lO>chY#n3CpHs?prOIc?0=}z!2@ZaJR@3iEZC8esIUP758Q0)w*dpo2FiUeAt{JeyPq*;#)JH z?_H;+SSFaP`zCLFCw2a09B5_uPL>Wo(fjb;xfiliCB?Jkb=4EpoGQ}J`)>AfP69E# z=RsxvDGu9HD8AL-!SRlHfQu6ztMTh==@UkLH1`)9J(8&wXYTOf8_O5^_@`m^lDHjvlZH ze0|kY#N0JtdQ9@$YfQ@E?X^u{Or-lR#Zn^R;y(tpDp>DYPp!Drg!}h9bo>D#&6-du z{^9$MJ-#$#mF8A-ddJVU9}@z9QM@zjVU2M7*)$s-)HNaX{>a5IPP1-bckY2zmHu+b zFnHfF1qWIk>^!|0N73sMlAjHFWX}yt((g6b3a(W)q}>ngEkJLyu0GV9+n8EA>ydER z^<~C{dcX11B;)o|w;*YGe{)(D#F?GJVXD6ioaHCJK@v^m83r^E|-O+_o z(XQQt6>Cz0;B>`nEyN-UZWsHaHbEo7`q$5<9d2hDpPzln%DCR(gdbU=1W)~OJvMU$hkUiD>F&A5KWQb~I_nvDJ*PA;7xw_yeB&r`W*c|;E+qIFH literal 0 HcmV?d00001 From 6d01ac29a19d9a9cec11183e58d6797e0eb5d5ce Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 17:39:31 -0500 Subject: [PATCH 44/92] filling in remaining assets for combined layout --- _assets/animals03_sm.jpg | Bin 0 -> 9332 bytes _assets/animals06_sm.jpg | Bin 0 -> 2315 bytes _assets/animals07_sm.jpg | Bin 0 -> 1683 bytes _assets/animals08_sm.jpg | Bin 1743 -> 1733 bytes _assets/animals09_sm.jpg | Bin 1812 -> 1802 bytes _assets/animals10_sm.jpg | Bin 0 -> 2164 bytes _assets/animals11_sm.jpg | Bin 0 -> 2396 bytes _assets/animals12_sm.jpg | Bin 0 -> 2086 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 _assets/animals03_sm.jpg create mode 100644 _assets/animals06_sm.jpg create mode 100644 _assets/animals07_sm.jpg create mode 100644 _assets/animals10_sm.jpg create mode 100644 _assets/animals11_sm.jpg create mode 100644 _assets/animals12_sm.jpg diff --git a/_assets/animals03_sm.jpg b/_assets/animals03_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c6a1244a1649a924322d673e517c03ad70daecf GIT binary patch literal 9332 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 OmFUKWS^G4?^#1{V-_pbY literal 0 HcmV?d00001 diff --git a/_assets/animals06_sm.jpg b/_assets/animals06_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee003cf19381a6269bb9010d013601273f4de282 GIT binary patch literal 2315 zcmb7=X*ARg8^-^$n6Yat$-az^appdkPh_oR}0cH4qYp)GJ@a`Yu3jrwuU<3$)0PVE{ zvH$>v>|YB4{uPu5fWY8j5bwTgZ~y>+A;9)ae*3$i~T&su2G4S&A9{LoHQGsAno-BTmO(3=mP#XG6g6sA`3eVHu@q(tJ7@g93Uu z82|Fw7{vp&dg&nv8Rw}ow+3b24)>QZ)#wCOW4LKV+G%w2bF1);cN+$GVRlrlte5k8 zGj5m26;}dVvR!+>GtK>;)KcfC3d}KmJO}B;dhf;X%2gTHv)vbLmlC52S{lf4TfS*h zK1qmL9UX!C{1;N&ZoyydNk`kw*-&z4C?Km)6j2ph``UvmxlQhvdwY9wjVl*)Sj2ND ztvwp<);ty^;K9+TP3nefgdF%pI}|A#Hw$T7?})taF9u3hPvpE%$SDu%%N0nWda&%N zL77D7B$!2wFW#k;BRPQ)99m`1ZV%da`U_DO?ay~iaJL+H=&DL2W##yCBE zG@r%*XqW4$>?*ky#O)MJd=jS5;X|{2ZL&{h0|YUY7tTy3!q`T6wOzbui{C9&;fS39(*l;<44Yl|qfJ#fdefLGX}qYa!daZIbobl? z)`O>*%j@0b^0Ksrc4146a5!dBm9ym*L?7*rIO#8zHi|4-@qSS`6mLa-UXdS&a&31T z3^68TR4{bvTKc-ZD!F}n%C`AsmUFU? zO(=?6Z0Z5FHk(o35(kxMBwMB7zn4YdTkPo?KfXHELwIQu5iX?^MB8mbe6gV!(eg@_ zWn6d%O)91;m7v;eETp-_6>VwPCtM2XlIkE^xubval_Tx-qSj| zCc5p^?=Pelws+!(!$vDLCk*^(F?Di0vl@P+yNI{m;>iiZ+l*csY6{a4B*;o}f}iAJEe>@QaY> zO;=2~A;PQFbZ#ri$?%@LX;=abD1DBo;$o%>yLTKGgrwx^lD(8~EU zZF9PGAj`y2g+UI6s$4s=82YAd|D_|Xx0r{7RSuyYg?2` zYkavmhnfsUYKFsy^``KrEM(rOJ|53pkNGI0uEzalE0KPGDVX9Q_k-f_^u|TkvywTX z5#wfe+6zymYco~uh+4{0=H`tyAS^rok*9UphduJ2zdZCxbyVdS)w{!nr=LiCfX_KC z+#9b|-qA!U_zH_+{2kl1@hYP#MWDuZ1B26f>44P)g5q3rN$|pVh6D_oXhcq85(t>L z${t;lZIcWZ_UXu@GY{vTzMa$?w*naE&Br!gYrVpUUP^st162bq6zrxsM)-#h+jV%) z5$JYx=2tQ?OFw8@t7=0DPtJRe_>Art78CPQ(Fp$cd>8QGP>~)ar!3?CG5nF*{J@U7 zm@@HJd4;3Jj?+1T!+m57HuvL$2YvOq?D-F~9B?VyErpOUrH6(2}p ztP2LZM_Am)6^+p3FA}P%T3w8_Gqhrb%mzP{hu!LB0&TvZr1i?iG_#JB5U?O6XQ#^% z*5PVkV>|;d-KG15_u9_p#O_Am#)ibm##X7}tJKmTpZn|(}-PovAc{8`LE<3!=-EXQ9ZxJS@SHYrA&Js@p6<4wN^x6kfw(5=dov)cvCl=Epv zxmji$b=NydNhvv6Z_SR4Py9Gdy)70!3Xxh;cPX0rTl&rWJs@V+3^0iw%~5{R>k`Zh z7_r}%;4)jq#U$~-+6AxNUzDAP1CG)%sqO)tG1g`^>P|CrXdH?_b literal 0 HcmV?d00001 diff --git a/_assets/animals07_sm.jpg b/_assets/animals07_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dacd582f57f1509e559600f3b4de186c4d668ed7 GIT binary patch literal 1683 zcmb7;X;jjQ8pi+d7Z-#?cQ&Z9b64}%5u=@moz~OKt0%?pw8QWQyTG;*HQnmwVO~4gk zfe>>5iiUt_h_VyF0ss{J)b?+|pla$ML_=kgbpR*?R0Cij2-W!W00IR8H8f0j7g^o> zU|^(PQVzwn%%E8xXJdQg;ak-U1_JyKP6dDhFqLJ72EaeVRO>IPaA+0lpq@D;P&p1D zK!~athz4AM;RW2c8~J{zL5m)EY@YM`E`~Vd1~!0vv~UqV{bQJ6M%#cmh%5CSUHyFA zj9kB5yD0KYdYsC!I0PJn`;I~q@MkH(<&P~$&3$iJz%k7=L0a!BKhyThz^}WIv_oUHPkKe2D^_iTQKkKl+zMH>_jKfOHN7cs%!Gox zb0|8X1{A%E6-y4>jR-ZIK1mj%9mO3&-{qJC@Z-XxZc(R({Mw0c(wY?p@0KD$s{$%6 zrFft;QP5(`Q~lmv*{M>Zv^V8=7VXtbRJ*_??(#2{d+AQqTvt}Vm(wsVnaLWu(xbcj z1?}!AcM^1Lby%)q%6EKyv>LXw`H0Azu04H4#`%4K6aUD4%R@#oxrEVmnsVf+XIa(d zY$n7v*_?1Dws7Lk_7r$~KC0%i6*$q+BiFufj#mr_I~80(ExS{0os6jESjG>>YqyZQ zwuUa+`IPtT?Fn%)DJQsxq31(>05rZk z5_U46%-XMQWzU(W)@Eiy+)U}W!)mLs?=*`?hz-S+7t8V zPVnz^2hS8=X7(=M?C)mc79L@g&PEhkrJS?H#t7P%n^QiaOhu~xgT%RuDzL! zcP{3ckL(lE8LdQjqae3-=gpCnu=>WCi6l%wT4c8iSAxwTROn2WdI}hqh$YMXD@|n= zW?m@>Vdastrx#FcywO=)X64qgMCUat`H349bfb>XDK)R9t>b&kvGen5($a({i@)Vm zZ*59`jy3eSRhQsDmFJiq9`o!C6N1;ZMEraE*X&0;#2~fdH#Y2k;Td?=4aX$;WTIH| zT^z|{*3dt?bzQ(8m#@=hMI+VTp&@zeewr&dQQ^$&0;zJ;BR9B*+@CqWuLvKOshe`z zsg9d`DL3%`PwbGDoj$wydHp~*Ie)C*dF^>s$bjUk7ej+{zVC)O;$rbzmeoUy2Nzw0gh2Mv~q zUN1dOvt!evV_Kg(#T(PD!2hH;I4c26gU;mReOOA@x$wLF2kNsLGg@yM$;_S+kOO8J z!^K86SLKH$Hs>p7@HHY?ng2In2YCbz4FKn__>1C)qmT_udB50oJ}v zNn3cDJ=0raOUc2_7EC9G7Vm*=^EIU%o<({;M9tZjX2!}-Bf1Dq#~7Z&bu4mWi08sx zDW`M0a;vPi?W#fO`Tj3NdQ#NXk*z8_qW+l@gm?&`KheK+>I$ z7jP^0e!f@eB4f>cs9tf`Z+o8=0dKLPcCqya>VJlpu3u`SWbCZ zjyI7H{$6jF%_Uxc06UXzwz^I96Y{yal(qbIaZ(yJ&@1~z#>ZeY)}XsSrb{{Y2d|gZ AZvX%Q literal 0 HcmV?d00001 diff --git a/_assets/animals08_sm.jpg b/_assets/animals08_sm.jpg index 16e83d902b5e43045783053c008f6181b380aa80..41fccaebfccedb755bbb7da9d4d55e28b222e9b1 100644 GIT binary patch delta 1475 zcmV;!1w8uC4aE(R(Ka{`00IF70RjRC1_KEI000000RjU61O*WiAu$F)6GBm8aexT-&U?-jzy5Ol;ce>hHGcWjEkdk|#b!^Alkm)?r|kLw|UC za6pI?`G7mv9(87B?(P`XtfSmu0%TR@PqRX~DUzEfj>y{HSu{-%bO3b{sMlV-yVd>{ zf4F$!ixYSs(^~=}l!8`RhvgvqKc9*^li^e|J#nj)g5{@z)dHq>;|?A|6@{e;;pW!n8S* zo{>H~lXohhIjjEspXY9WYPSu3*I5_z@*_H--iH!9cdeH3GTWeVLjl)jld@MbV={Bg zZy0{Mb@jUT`B3?8)ghvuZa1URW1bmKqmdksC17g8qLMJVHwhefK^E#&ELD9`f8=%L zO_)3AvKGu1K_sxA66?s)DfdNMuFYPKiqXLPD5tOpC&YPK31)q>4KdK!9>dbRJ{HJb zU*1g}-xC;%dg43mf9*0R3doPqPoz}W9R-_mg%wK;9Sv0Fqn+`|cG)zFHBzdI0qy{) zXb;K&_)tCc9@Pcg0%BfQ#rGKOf4%jrR>tKbDaC|=6-gUlPq(qHUK{Zoz97GttZfVs zM4+RvEY3;aZy*QtrEeVJuVTMxVTt5|S7zK}eOUR|XZt(D+*w6&dvv85eFa0@DBpj7 zTIp#h*>??PWWi4@jp(`F8+{e`G}vgXlm_^*lzm{{U6C^8;yp2#uj|=)salVo4**ua~;B zOB+YEVWPbVrJG;Td0|>Qc$poon6!<)XV2k9X2zXck-uEgTE(%hHLCAm62+!0HPjVi z2&)p}J$7%T)SgJ(XomU?J33oU33np$Ih|JSeFM|+Ra~z>)!cn%f12g9hDR(>y8i$H zs2d0ebZ?;6So$L1D9SFFY3}X__7^m%;+&o20j*=Zx#7q0j%P=HUkdb0wdOM!46lmHRg%#ZToL1GcEH^cY21!-_>nSddF{?hk5c@U^Yo ztTH*4Xgw(!RdNo8f0?Xy_**1EWXMGC%r?Cfh0ys^UA^WyFbmuR{IR#~MsaOYD$#12 zf;!z!f8J|e0(*qABS!pz48--~by15ihuWt%VtRCp{?$bJd{jA0X_i?O!60V> zGqdoiE;gQkq3C*(O!7@5u~FanX*!W~ zr<^}jIt%QsPGiJ2_v;*S@=(0GGLjDaQN~Ze^3lHw3kwA^O)EJhlg!arZE~?J2qfDu z9ZIRy6|k3~KEB5w}f;mD5AP)6UmVKUHqTok?=L~qq~=@NW}jDH55^# z0ebfdk3 zBZ7bP$NgxcjwsQDUdcs*kz`lr8P{Jr%W;PIl_o9j_w29)6|Jg{n$)^AS delta 1486 zcmV;<1u^=?4bKgb(Kk5|00IF700RUF1Oo{G000000RjU61O*WiAu$FMK~W+yLSb=% zlF<|uGoc4!awJ1iRDy(&!IK98H3K07F_S+57k_e5x~lOfTW2<{5TA$8?*S{neybv6 zrGiOgyAh#BZIlO+0lp)@16We#640Em>h^cRI#0QX?_`hGRq#3+@JP`?NDrvTyJsRkByn- z`%@2SZQkO=5+duec$rBBM+qC{@ve7gG4op_t1Pn0nmTD1wux=)pSqjo`sGN<3mea8 z8S>d6eQEdawm)jD<}xGOnE8*xAGI;vLw}|^6t$PfTu*wEM?1ubc(fS$eLTJuq0FTE zMELGa+^T@)uln&n&fNW~+%@}MWM99L8PyK-I7sQ%wp+x@Zh^rJ2R)ij$y~{d$wm(V zFn7^pEto8VNntz^>%h_}?uxZrHFtDYjsxXIJ%B+yqsqujGwqmZj)utcJgc+WY=zbR zpA*;XwD$dQ=wJ6B6>hueir$?|-dgwl^seP8JdbRU~bJK79>p?B8hR?FIbBV`yN4 zB?TRUW^zvYcmO|oR_)Fj_AB<57@kNac5TKt&5wps0F<8|&}q zT`eUWF4S=wBwe1ho<-0mx%qC?W3ks!!tx1twj9F2%tUn99tN~n=2Wsa0&4~H5{I9)#Z3`_CJ_RtG6+zAPcnMTTSSyP;#Mb9h$TJ zUvYhpYbo65cZzgRhfoNnM1N5TJ;({ZXM}5i@mp^&HkZ(d+7}Lt86E69pjwfz^C717YfJ3YG>a!(oReiT(0;hP{#fG_p ztU(oGTt}{r^qP~&8;ua(L88mHniB3sg=n5W(sWi_d(mNF$f0mQGWot6bFQB=aG>~wzD}RtS2KVz7bIRGqEg5VrZ;3nON2Z z4ht|G%Bj^Au$Q4ezQ-TVW%f`Hok6m=Yhw}OVr35Up8?CDs9yG7c&*wlIJ8+$!&Fg7)rG-2vmn5@ zAE_Dn8j-<2_~ZTPqK+sr;*0E*SSc1oemKs#_|{vjIX3~_fM#kaqT;Am#~8g9E)zrb o5PXe%7(!cORQgR6P>fJt99g>G3Fq;RlWzefe^!yv7Pk3)O_u5L!T>^#`!vyQX>Dm3j@k&} zQQ;H{2bnI4VZ@tPCr1=IMfhN*#^-Z(9+PwXP}f#dTei!Ho+tQqAlG|1$A8|3yRo#r zk7e8uOur7fto4RI9<cI&_fPO)L@t0@^H- z76K&>oqfio6!H6wO3yTI#zm7!0@{C8_wZWZK=ya2l0hiJQ}h1-Uus6`TiaXR0xPR& z#v^o>0khcWxbIgwo$Dr_XLyZ}@vpdfz^5rwVCuGW?yu>#&~N=TZT8ZQ(J?&Z$UkvQ za!2;3ezCp$`&p~x%M?d`Pi&llO43DBWaZSFM?QGclcJg9_Z})y%@;K&KQ4bj_ze-q z%@C1&t2mH%@kPd<_^xEEqri|h=)^LUv>dB>Q~v;zS5e#(p?*Risg!Rcz^v@7pLb66r(m5)8P#s_Rmp+kx){#l+g*Z5mb00bQ0liXN-c%pUqd&yy%iL+Dq0l!NX1!cmNH)5#cqQ; zk0;=HG+sBPIic63EmnUWI8MNCl;oUt1GP925{sS{Cl7^e#PEh~w&7EbBhCq=?QloW|MuhsWzxdXNZ`Iz~Ah zW6dv1E5|O?l&cSe=8&6-=7kQoX1&!6!A^182PUq645PWVy(NEPkfV@UiVy&+QF7Ce zE>b5yafAC+_LQK2pXsNKi^ui(r$;M#F`XeTzcXbm&~Ns82kG3>2B®l^|F@nS2NTy*9^!10IHXpxkOaINZA${i8ZyAXaP3S!RE1RqN8y&GOM7W6cF(y z9jr$tmoM0ejt`omdo>tc zTsBBx7+WKG-fPJi`iGiWM}}ND^SOY|YST`YqjeFkM{Z45 zB8;9q(H87gmubfpu|_s@OD7Wa{pv6qnk?eE{rf6NS9WQyNcU*h`?>x}{{SM8FP*(~-4zd$0S6PxI7Fua delta 1189 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 literal 0 HcmV?d00001 diff --git a/_assets/animals12_sm.jpg b/_assets/animals12_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c207e5d324341f74b8c52a5a7050ca5580db58c6 GIT binary patch literal 2086 zcmb7baZEhoHg^^h0Sj{sSK+5a7=FWeC`72JWho{U zF=x&wHc2RwE9sK#+4KDKd;Wc1pZ`AZ&-?TKe0Wp5IY7#mU_$^vAP`{9FM!7d@PG(Z zNLUCeA}k~r-Aq$fb7nhKemXVTGR!~({R!~w>(=^moJD{(jq;&B3L46}*Q&Urn zj@e1Gqj*CTQ{(?E0f~x=N{CCKVKB6@x{|u_{|&DLfD7}F@rQs^0Wcf{frEJ6fE)mT z!4MGe4}wqt0um4c^F^!_00u!IU;zO^h~R%GKwtD*g-O=2^{1WZ z%ZgPlaOKTr3qniW=0xLHDA!A#NWQWj{(2}|Km5m*8B4mNn*1GonOfB8d7AhOo8A%M zdsnfXPS9$>Uqt$+Q@>8nucDBDxp_UWn^w&glQlnfQrmjOWSxV!dizXLXXZ7|{zP9M>4?EM)$EBiQe{_Brorx`=`{3Q*%7-Ip`*jit|bjDEyB-IF=*s&H*bk(?w!@Rt4XYF!@7 z*7MDM@$}p>!D_a#?$cVlU*)_Ha;vPX)RT;ww$L?S#d5CaA*@OEMXR5B|6oqmB8_Sn zanFueK>98w?1ga4%hNZASvYex@mzY7jv-d+}0_4ka zFLNf-a#!Nwd?Ym%6%B6x9ZdXv6*T~V6vf)EdDdg9b^7L^I(Cu3@s1(!g2me8y|cvzHSC znfUkilrqBTgIIM|5^fbOk2yxGG+Au5_((-x1-_lQ#T{;qAjGsK zo$-O2-pu#SKLVI-l7!qAD+jzV38 zr00FQVzDUYg2x?Sr0+(kIEB6M58g63*16``{40EW8l!74pcl=}BDmWp-8j$MJ(1#< zsDb+3>hwMhCXx z>aDL+kKl-njRVU>1vBGMd)lsEibUIbHX_A-G(4Z##v-3n6ra=bz$^$U7Pd3EZ%0yS z-d#T$4t437Na|E~B0BJqx!XGK$s|&g^wV{bEu$qXwSt4^iB84mYMadAo5wmf94>0V zBsZf1BA^a(xwBtMWzq0F{VEVTf4wVBvpu&`oayHW7x@`IlZVMNF7iqH@p}11%&+9J zc|a!bc3H?9vY6=l_J-RG#WRH-sz|8;waOla(u_t{5H?XCeQ^f4?-ONg^Mg+rK3DJw zLVMnyY^%sd#wqj}Ef6Z$k7fqm_3gfB3mT^ftcc}U*xL6}67@C+rr{FiQy(~A;~FLU z#^fWHFP_pS*G)~C`3^byv@|voXvdE4BCLudX0Oh?;r_Wox;pD&cSZZ2fm``cLo{x% z%x+#K0HF%@HyIYbRjNr|t13{_b^g|Y8j)#Bu~A6fXOS$|nCOdpbfucQ8u}9!G7-A- zYKhntzC+w3K!e`UD)63bVuJm@>!{iVa2i*0x|H5l zX!gTc1@NYT01~^=Ffb}jig|F ztLS*x(qoBNhS$a9n(gdjbE2n^dm(PO-ysXx?bV2z2rE`{0pW@Dzm_JQQR!6*w>0u< zZ0RNK%1o$XHZC}ZGA0dYxLBTVD`;Y5jSKHYfoXFr?_P~kx@OAq+j=A2%3SC<(aU{H fG8Ak=T2K~Ui@ACxeKen@>;T2O)YvZM@uvR`^$3`y literal 0 HcmV?d00001 From 1d6cb95022b0ca5f9ddc4442d738dff86ff0b848 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 20:46:17 -0500 Subject: [PATCH 45/92] adding comment form example --- 03c6-form/CommentForm.mxml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 03c6-form/CommentForm.mxml diff --git a/03c6-form/CommentForm.mxml b/03c6-form/CommentForm.mxml new file mode 100644 index 0000000..6cb7c6c --- /dev/null +++ b/03c6-form/CommentForm.mxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + From a28d77bfd733a3839d52eebb72e3c15723b17f18 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 20:54:12 -0500 Subject: [PATCH 46/92] adding examples for mxml vs as3 --- 03c7-mxml-vs-as3/WithAs3.mxml | 32 ++++++++++++++++++++++++++++++++ 03c7-mxml-vs-as3/WithMxml.mxml | 10 ++++++++++ 03c7-mxml-vs-as3/assets | 1 + 3 files changed, 43 insertions(+) create mode 100644 03c7-mxml-vs-as3/WithAs3.mxml create mode 100644 03c7-mxml-vs-as3/WithMxml.mxml create mode 120000 03c7-mxml-vs-as3/assets diff --git a/03c7-mxml-vs-as3/WithAs3.mxml b/03c7-mxml-vs-as3/WithAs3.mxml new file mode 100644 index 0000000..b09cde5 --- /dev/null +++ b/03c7-mxml-vs-as3/WithAs3.mxml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/03c7-mxml-vs-as3/WithMxml.mxml b/03c7-mxml-vs-as3/WithMxml.mxml new file mode 100644 index 0000000..921c285 --- /dev/null +++ b/03c7-mxml-vs-as3/WithMxml.mxml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/03c7-mxml-vs-as3/assets b/03c7-mxml-vs-as3/assets new file mode 120000 index 0000000..f6c9582 --- /dev/null +++ b/03c7-mxml-vs-as3/assets @@ -0,0 +1 @@ +../_assets \ No newline at end of file From d71e38e21fc964cfe96eacf70f4c5ebb74da6003 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 20:59:45 -0500 Subject: [PATCH 47/92] goofing around with programmatic DOM construction --- 03c7-mxml-vs-as3/WithAs3.mxml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/03c7-mxml-vs-as3/WithAs3.mxml b/03c7-mxml-vs-as3/WithAs3.mxml index b09cde5..df66e83 100644 --- a/03c7-mxml-vs-as3/WithAs3.mxml +++ b/03c7-mxml-vs-as3/WithAs3.mxml @@ -17,16 +17,17 @@ private function createImage():void { var photo:Image = new Image(); photo.source = "assets/animals03.jpg"; - this.addChild(photo); + boxetyBox.addChild(photo); } private function createPhotographer():void { var photographer:Label = new Label(); photographer.text = "Photographed by Elsie Weil"; - this.addChild(photographer); + boxetyBox.addChild(photographer); } ]]> + From 7d9d373589329313b599093d07fd8142b3670141 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 21:01:42 -0500 Subject: [PATCH 48/92] adding example for panel element --- 03c8-panel/Photo.mxml | 21 +++++++++++++++++++++ 03c8-panel/assets | 1 + 2 files changed, 22 insertions(+) create mode 100644 03c8-panel/Photo.mxml create mode 120000 03c8-panel/assets diff --git a/03c8-panel/Photo.mxml b/03c8-panel/Photo.mxml new file mode 100644 index 0000000..22a76c4 --- /dev/null +++ b/03c8-panel/Photo.mxml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/03c8-panel/assets b/03c8-panel/assets new file mode 120000 index 0000000..f6c9582 --- /dev/null +++ b/03c8-panel/assets @@ -0,0 +1 @@ +../_assets \ No newline at end of file From cd79dbdbec85fe5ef9adf6092c45c97a39308ae1 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 21:06:03 -0500 Subject: [PATCH 49/92] adding example for data grid --- 03d1-datagrid/DataGridExample.mxml | 98 ++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 03d1-datagrid/DataGridExample.mxml diff --git a/03d1-datagrid/DataGridExample.mxml b/03d1-datagrid/DataGridExample.mxml new file mode 100644 index 0000000..c7df993 --- /dev/null +++ b/03d1-datagrid/DataGridExample.mxml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 64f116a83d8d86a4ce53a781cae53965b3fb2e24 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 22:02:35 -0500 Subject: [PATCH 50/92] getting crap figured out wrt compiling components, including with mxmlc --- .gitignore | 1 + 03d1-datagrid/DataGridExample.mxml | 4 +++- Makefile | 24 +++++++++++++++++++----- comps/RequestParams.as | 8 ++++++++ 4 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 comps/RequestParams.as diff --git a/.gitignore b/.gitignore index da97ff7..fedd318 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.swf +*.swc diff --git a/03d1-datagrid/DataGridExample.mxml b/03d1-datagrid/DataGridExample.mxml index c7df993..e69a051 100644 --- a/03d1-datagrid/DataGridExample.mxml +++ b/03d1-datagrid/DataGridExample.mxml @@ -13,11 +13,13 @@ import mx.rpc.events.FaultEvent; import mx.controls.Alert; + import RequestParams; + [Bindable] private var photoFeed:ArrayCollection; private function requestPhotos():void { - var params:Object = new Object(); + var params:RequestParams = new RequestParams(); params.format = 'rss_200_enc'; params.tags = searchTerms.text; photoService.send(params); diff --git a/Makefile b/Makefile index 71d449b..c28c014 100644 --- a/Makefile +++ b/Makefile @@ -3,10 +3,11 @@ # http://learn.adobe.com/wiki/display/Flex/Getting+Started -# sets mxmlc to just the basename "mxmlc" +# sets mxmlc and compc to their respective basenames # if not overridden in command line like so: # make MXMLC=/path/to/my/mxmlc MXMLC ?= mxmlc +COMPC ?= compc # define all target swf paths (which don't yet exist if @@ -14,16 +15,29 @@ MXMLC ?= mxmlc SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) +# define all target swc paths (same as with swf paths above) +SWCS = $(patsubst %.as,%.swc,$(wildcard comps/*.as)) + + # define an implicit build rule for any file matching %.swf, # using the $< (input) and $@ (output) automatic variables %.swf : %.mxml - $(MXMLC) $< -warnings -output $@ + $(MXMLC) $< -warnings -l+=./comps -output $@ + + +# define an implicit build rule for any file matching %.swc, +# using the $< (input) and $@ (output) automatic variables +# just like with the %.swf implicit rule above +%.swc : %.as + _CLS=$$(echo $< | sed 's@.*/\(.*\)\..*$$@\1@') && \ + $(COMPC) -sp ./comps -output $@ -include-classes $$_CLS -# build all expected swf files -all: $(SWFS) +# build all expected swf and swc files +all: $(SWCS) $(SWFS) # remove all swf files in the tree clean: - find -name \*.swf -exec rm {} \; + find -name \*.swf -exec rm {} \; ; \ + find -name \*.swc -exec rm {} \; diff --git a/comps/RequestParams.as b/comps/RequestParams.as new file mode 100644 index 0000000..d6ccb46 --- /dev/null +++ b/comps/RequestParams.as @@ -0,0 +1,8 @@ +package +{ + public class RequestParams + { + public var format:String; + public var tags:String; + } +} From 732624dea788751bb3f4b7ef0172c93e96acfbc7 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 18 Feb 2010 22:11:10 -0500 Subject: [PATCH 51/92] organizing as and swc files a bit more sanely --- 03d1-datagrid/DataGridExample.mxml | 2 +- Makefile | 7 +++---- {comps => com/ag}/RequestParams.as | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) rename {comps => com/ag}/RequestParams.as (88%) diff --git a/03d1-datagrid/DataGridExample.mxml b/03d1-datagrid/DataGridExample.mxml index e69a051..a2edcdf 100644 --- a/03d1-datagrid/DataGridExample.mxml +++ b/03d1-datagrid/DataGridExample.mxml @@ -13,7 +13,7 @@ import mx.rpc.events.FaultEvent; import mx.controls.Alert; - import RequestParams; + import com.ag.RequestParams; [Bindable] private var photoFeed:ArrayCollection; diff --git a/Makefile b/Makefile index c28c014..8cb8676 100644 --- a/Makefile +++ b/Makefile @@ -16,21 +16,20 @@ SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) # define all target swc paths (same as with swf paths above) -SWCS = $(patsubst %.as,%.swc,$(wildcard comps/*.as)) +SWCS = $(patsubst %.as,%.swc,$(wildcard com/ag/*.as)) # define an implicit build rule for any file matching %.swf, # using the $< (input) and $@ (output) automatic variables %.swf : %.mxml - $(MXMLC) $< -warnings -l+=./comps -output $@ + $(MXMLC) $< -warnings -l+=./com/ag -output $@ # define an implicit build rule for any file matching %.swc, # using the $< (input) and $@ (output) automatic variables # just like with the %.swf implicit rule above %.swc : %.as - _CLS=$$(echo $< | sed 's@.*/\(.*\)\..*$$@\1@') && \ - $(COMPC) -sp ./comps -output $@ -include-classes $$_CLS + $(COMPC) -sp+=./ -output $@ -include-classes $(subst /,.,$(basename $<)) # build all expected swf and swc files diff --git a/comps/RequestParams.as b/com/ag/RequestParams.as similarity index 88% rename from comps/RequestParams.as rename to com/ag/RequestParams.as index d6ccb46..ffcd8a8 100644 --- a/comps/RequestParams.as +++ b/com/ag/RequestParams.as @@ -1,4 +1,4 @@ -package +package com.ag { public class RequestParams { From 62ab91db375b5a3150076b4ad4d4b09d5c432150 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 15:16:36 -0500 Subject: [PATCH 52/92] trying a version of CRUDDynamic with more awesome-er separation of mxml and as --- 03a2b-crud-dynamic/CRUDDynamic.mxml | 53 +++++++++++++++++++++++++++ 03a2b-crud-dynamic/CustomApp.as | 55 +++++++++++++++++++++++++++++ 03a2b-crud-dynamic/dyn-employees.as | 43 ++++++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 03a2b-crud-dynamic/CRUDDynamic.mxml create mode 100644 03a2b-crud-dynamic/CustomApp.as create mode 100644 03a2b-crud-dynamic/dyn-employees.as diff --git a/03a2b-crud-dynamic/CRUDDynamic.mxml b/03a2b-crud-dynamic/CRUDDynamic.mxml new file mode 100644 index 0000000..9ce99d9 --- /dev/null +++ b/03a2b-crud-dynamic/CRUDDynamic.mxml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/03a2b-crud-dynamic/CustomApp.as b/03a2b-crud-dynamic/CustomApp.as new file mode 100644 index 0000000..4c348e2 --- /dev/null +++ b/03a2b-crud-dynamic/CustomApp.as @@ -0,0 +1,55 @@ +package +{ + import mx.core.Application; + import mx.rpc.events.ResultEvent; + import mx.collections.XMLListCollection; + + + public class CustomApp extends Application + { + public var params:Object = new Object(); + [Bindable] + public var listData:XMLListCollection; + + function CustomApp() + } + { + + public function resultHandler(event:ResultEvent):void { + var result:XML = XML(event.result); + var xmlList:XMLList = result.data.children(); + listData = new XMLListCollection(xmlList); + } + + public function insertItemHandler(event:ResultEvent):void { + fill(); + } + + public function fill():void{ + employeesService.removeEventListener(ResultEvent.RESULT,insertItemHandler); + employeesService.addEventListener(ResultEvent.RESULT,resultHandler); + employeesService.method = "GET"; + params['method'] = "FindAllEmployees"; + employeesService.cancel(); + employeesService.send(params); + viewstack1.selectedIndex=1; + } + + public function insertEmployee():void{ + employeesService.removeEventListener(ResultEvent.RESULT,resultHandler); + employeesService.addEventListener(ResultEvent.RESULT,insertItemHandler); + employeesService.method = "POST"; + params = {"method": "InsertEmployee", "id": NaN, "firstName": inputFirst.text, + "lastName": inputLast.text, "officePhone": inputPhone.text}; + employeesService.cancel(); + employeesService.send(params); + clearInputFields(); + } + + public function clearInputFields():void{ + inputFirst.text = ""; + inputLast.text = ""; + inputPhone.text = ""; + } + } +} diff --git a/03a2b-crud-dynamic/dyn-employees.as b/03a2b-crud-dynamic/dyn-employees.as new file mode 100644 index 0000000..d0cc66a --- /dev/null +++ b/03a2b-crud-dynamic/dyn-employees.as @@ -0,0 +1,43 @@ +import mx.rpc.events.ResultEvent; +import mx.collections.XMLListCollection; + +private var params:Object = new Object(); +[Bindable] +private var listData:XMLListCollection; + +public function resultHandler(event:ResultEvent):void { + var result:XML = XML(event.result); + var xmlList:XMLList = result.data.children(); + listData = new XMLListCollection(xmlList); +} + +public function insertItemHandler(event:ResultEvent):void { + fill(); +} + +public function fill():void{ + employeesService.removeEventListener(ResultEvent.RESULT,insertItemHandler); + employeesService.addEventListener(ResultEvent.RESULT,resultHandler); + employeesService.method = "GET"; + params['method'] = "FindAllEmployees"; + employeesService.cancel(); + employeesService.send(params); + viewstack1.selectedIndex=1; +} + +public function insertEmployee():void{ + employeesService.removeEventListener(ResultEvent.RESULT,resultHandler); + employeesService.addEventListener(ResultEvent.RESULT,insertItemHandler); + employeesService.method = "POST"; + params = {"method": "InsertEmployee", "id": NaN, "firstName": inputFirst.text, + "lastName": inputLast.text, "officePhone": inputPhone.text}; + employeesService.cancel(); + employeesService.send(params); + clearInputFields(); +} + +private function clearInputFields():void{ + inputFirst.text = ""; + inputLast.text = ""; + inputPhone.text = ""; +} From 1c244553af3e62aa94051328ec515e989528ec91 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 15:17:59 -0500 Subject: [PATCH 53/92] including project dir in library path --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8cb8676..0b67d3f 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ SWCS = $(patsubst %.as,%.swc,$(wildcard com/ag/*.as)) # define an implicit build rule for any file matching %.swf, # using the $< (input) and $@ (output) automatic variables %.swf : %.mxml - $(MXMLC) $< -warnings -l+=./com/ag -output $@ + $(MXMLC) $< -warnings -l+=./com/ag -l+=$(dir $<) -output $@ # define an implicit build rule for any file matching %.swc, From be31565c47a3b0a33d9a307a3e1f210f21b051d2 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 16:03:55 -0500 Subject: [PATCH 54/92] custom app! --- 00-custom-app/CustomApp.as | 23 ++++++++++++ 00-custom-app/Snarf.mxml | 5 +++ 03a2b-crud-dynamic/CRUDDynamic.mxml | 53 --------------------------- 03a2b-crud-dynamic/CustomApp.as | 55 ----------------------------- 03a2b-crud-dynamic/dyn-employees.as | 43 ---------------------- 5 files changed, 28 insertions(+), 151 deletions(-) create mode 100644 00-custom-app/CustomApp.as create mode 100644 00-custom-app/Snarf.mxml delete mode 100644 03a2b-crud-dynamic/CRUDDynamic.mxml delete mode 100644 03a2b-crud-dynamic/CustomApp.as delete mode 100644 03a2b-crud-dynamic/dyn-employees.as diff --git a/00-custom-app/CustomApp.as b/00-custom-app/CustomApp.as new file mode 100644 index 0000000..023dbda --- /dev/null +++ b/00-custom-app/CustomApp.as @@ -0,0 +1,23 @@ +package +{ + import mx.core.Application; + import mx.controls.Button; + import flash.events.MouseEvent; + + + public class CustomApp extends Application + { + public var mutton:Button; + + function CustomApp() + { + mutton.addEventListener(MouseEvent.CLICK, butterCup); + } + + public function butterCup(event:MouseEvent):void + { + trace("clicked " + event); + } + + } +} diff --git a/00-custom-app/Snarf.mxml b/00-custom-app/Snarf.mxml new file mode 100644 index 0000000..b0abdf7 --- /dev/null +++ b/00-custom-app/Snarf.mxml @@ -0,0 +1,5 @@ + + + + diff --git a/03a2b-crud-dynamic/CRUDDynamic.mxml b/03a2b-crud-dynamic/CRUDDynamic.mxml deleted file mode 100644 index 9ce99d9..0000000 --- a/03a2b-crud-dynamic/CRUDDynamic.mxml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/03a2b-crud-dynamic/CustomApp.as b/03a2b-crud-dynamic/CustomApp.as deleted file mode 100644 index 4c348e2..0000000 --- a/03a2b-crud-dynamic/CustomApp.as +++ /dev/null @@ -1,55 +0,0 @@ -package -{ - import mx.core.Application; - import mx.rpc.events.ResultEvent; - import mx.collections.XMLListCollection; - - - public class CustomApp extends Application - { - public var params:Object = new Object(); - [Bindable] - public var listData:XMLListCollection; - - function CustomApp() - } - { - - public function resultHandler(event:ResultEvent):void { - var result:XML = XML(event.result); - var xmlList:XMLList = result.data.children(); - listData = new XMLListCollection(xmlList); - } - - public function insertItemHandler(event:ResultEvent):void { - fill(); - } - - public function fill():void{ - employeesService.removeEventListener(ResultEvent.RESULT,insertItemHandler); - employeesService.addEventListener(ResultEvent.RESULT,resultHandler); - employeesService.method = "GET"; - params['method'] = "FindAllEmployees"; - employeesService.cancel(); - employeesService.send(params); - viewstack1.selectedIndex=1; - } - - public function insertEmployee():void{ - employeesService.removeEventListener(ResultEvent.RESULT,resultHandler); - employeesService.addEventListener(ResultEvent.RESULT,insertItemHandler); - employeesService.method = "POST"; - params = {"method": "InsertEmployee", "id": NaN, "firstName": inputFirst.text, - "lastName": inputLast.text, "officePhone": inputPhone.text}; - employeesService.cancel(); - employeesService.send(params); - clearInputFields(); - } - - public function clearInputFields():void{ - inputFirst.text = ""; - inputLast.text = ""; - inputPhone.text = ""; - } - } -} diff --git a/03a2b-crud-dynamic/dyn-employees.as b/03a2b-crud-dynamic/dyn-employees.as deleted file mode 100644 index d0cc66a..0000000 --- a/03a2b-crud-dynamic/dyn-employees.as +++ /dev/null @@ -1,43 +0,0 @@ -import mx.rpc.events.ResultEvent; -import mx.collections.XMLListCollection; - -private var params:Object = new Object(); -[Bindable] -private var listData:XMLListCollection; - -public function resultHandler(event:ResultEvent):void { - var result:XML = XML(event.result); - var xmlList:XMLList = result.data.children(); - listData = new XMLListCollection(xmlList); -} - -public function insertItemHandler(event:ResultEvent):void { - fill(); -} - -public function fill():void{ - employeesService.removeEventListener(ResultEvent.RESULT,insertItemHandler); - employeesService.addEventListener(ResultEvent.RESULT,resultHandler); - employeesService.method = "GET"; - params['method'] = "FindAllEmployees"; - employeesService.cancel(); - employeesService.send(params); - viewstack1.selectedIndex=1; -} - -public function insertEmployee():void{ - employeesService.removeEventListener(ResultEvent.RESULT,resultHandler); - employeesService.addEventListener(ResultEvent.RESULT,insertItemHandler); - employeesService.method = "POST"; - params = {"method": "InsertEmployee", "id": NaN, "firstName": inputFirst.text, - "lastName": inputLast.text, "officePhone": inputPhone.text}; - employeesService.cancel(); - employeesService.send(params); - clearInputFields(); -} - -private function clearInputFields():void{ - inputFirst.text = ""; - inputLast.text = ""; - inputPhone.text = ""; -} From a1f814a294d1f7f8c821cd8ee1846556cb2a165a Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 16:05:23 -0500 Subject: [PATCH 55/92] more traditional event listener stuff --- 00-custom-app/CustomApp.as | 3 --- 00-custom-app/Snarf.mxml | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/00-custom-app/CustomApp.as b/00-custom-app/CustomApp.as index 023dbda..72e26ae 100644 --- a/00-custom-app/CustomApp.as +++ b/00-custom-app/CustomApp.as @@ -1,17 +1,14 @@ package { import mx.core.Application; - import mx.controls.Button; import flash.events.MouseEvent; public class CustomApp extends Application { - public var mutton:Button; function CustomApp() { - mutton.addEventListener(MouseEvent.CLICK, butterCup); } public function butterCup(event:MouseEvent):void diff --git a/00-custom-app/Snarf.mxml b/00-custom-app/Snarf.mxml index b0abdf7..e965b76 100644 --- a/00-custom-app/Snarf.mxml +++ b/00-custom-app/Snarf.mxml @@ -1,5 +1,5 @@ - + From 0087e7d1771d8f840ffee8d1b221ceef95abb79a Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 16:10:54 -0500 Subject: [PATCH 56/92] adding an alert in addition to trace --- 00-custom-app/CustomApp.as | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/00-custom-app/CustomApp.as b/00-custom-app/CustomApp.as index 72e26ae..cd326d1 100644 --- a/00-custom-app/CustomApp.as +++ b/00-custom-app/CustomApp.as @@ -1,9 +1,9 @@ package { import mx.core.Application; + import mx.controls.Alert; import flash.events.MouseEvent; - public class CustomApp extends Application { @@ -13,7 +13,9 @@ package public function butterCup(event:MouseEvent):void { - trace("clicked " + event); + var msg:String = "clicked" + event; + trace(msg); + Alert.show(msg); } } From cffa4944258f666a5d2c047384db122cbdfeec53 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:02:07 -0500 Subject: [PATCH 57/92] making DataGridExample more sane wrt separation of mxml & as --- 03d1-datagrid/DataGridApp.as | 61 +++++++++++++++++++++++++++ 03d1-datagrid/DataGridExample.mxml | 66 +++++++----------------------- 2 files changed, 75 insertions(+), 52 deletions(-) create mode 100644 03d1-datagrid/DataGridApp.as diff --git a/03d1-datagrid/DataGridApp.as b/03d1-datagrid/DataGridApp.as new file mode 100644 index 0000000..240e11e --- /dev/null +++ b/03d1-datagrid/DataGridApp.as @@ -0,0 +1,61 @@ +package +{ + import mx.core.Application; + + import mx.collections.ArrayCollection; + import mx.containers.Panel; + import mx.controls.Alert; + import mx.controls.DataGrid; + import mx.controls.Image; + import mx.controls.Label; + import mx.controls.TextInput; + import mx.rpc.events.FaultEvent; + import mx.rpc.events.ResultEvent; + import mx.rpc.http.HTTPService; + + import com.ag.RequestParams; + + public class DataGridApp extends Application + { + [Bindable] + public var dataGrid:DataGrid; + public var photoFeed:ArrayCollection; + public var photoService:HTTPService; + public var searchTerms:TextInput; + public var vboxImage:Image; + public var vboxDesc:Label; + public var popup:Panel; + + function DataGridApp() + { + } + + public function requestPhotos():void { + var params:RequestParams = new RequestParams(); + params.format = 'rss_200_enc'; + params.tags = searchTerms.text; + photoService.send(params); + } + + public function photoHandler(event:ResultEvent):void { + photoFeed= event.result.rss.channel.item as ArrayCollection; + dataGrid.dataProvider = photoFeed; + dataGrid.visible = true; + } + + public function faultHandler(event:FaultEvent):void{ + Alert.show(event.fault.faultCode + " , " + event.fault.faultString); + } + + public function showPopup(event:Event):void{ + vboxImage.source = photoFeed.getItemAt(event.currentTarget.selectedIndex).content.url + vboxDesc.text = photoFeed.getItemAt(event.currentTarget.selectedIndex).title.getItemAt(0) + popup.visible = true; + } + + public function hidePopup():void{ + popup.visible = false; + popup.includeInLayout = false; + } + } +} diff --git a/03d1-datagrid/DataGridExample.mxml b/03d1-datagrid/DataGridExample.mxml index a2edcdf..bcd7494 100644 --- a/03d1-datagrid/DataGridExample.mxml +++ b/03d1-datagrid/DataGridExample.mxml @@ -1,54 +1,12 @@ - - - - - - - - + - + - - + + - - + + - + From f8642e650f4d96b6b0011817225a64b6dd1f0344 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:02:38 -0500 Subject: [PATCH 58/92] changing namespace s/me/loc/g --- 00-custom-app/Snarf.mxml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/00-custom-app/Snarf.mxml b/00-custom-app/Snarf.mxml index e965b76..35edd3f 100644 --- a/00-custom-app/Snarf.mxml +++ b/00-custom-app/Snarf.mxml @@ -1,5 +1,5 @@ - + - + From efd3fe2dbfa18ce3d9f75af307d934f0be884f8f Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:08:26 -0500 Subject: [PATCH 59/92] simplifying mxml/as crap, removing com/ag/ package --- 03d1-datagrid/DataGridApp.as | 2 +- {com/ag => 03d1-datagrid}/RequestParams.as | 2 +- Makefile | 8 ++------ 3 files changed, 4 insertions(+), 8 deletions(-) rename {com/ag => 03d1-datagrid}/RequestParams.as (88%) diff --git a/03d1-datagrid/DataGridApp.as b/03d1-datagrid/DataGridApp.as index 240e11e..f5c910f 100644 --- a/03d1-datagrid/DataGridApp.as +++ b/03d1-datagrid/DataGridApp.as @@ -13,7 +13,7 @@ package import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; - import com.ag.RequestParams; + import RequestParams; public class DataGridApp extends Application { diff --git a/com/ag/RequestParams.as b/03d1-datagrid/RequestParams.as similarity index 88% rename from com/ag/RequestParams.as rename to 03d1-datagrid/RequestParams.as index ffcd8a8..d6ccb46 100644 --- a/com/ag/RequestParams.as +++ b/03d1-datagrid/RequestParams.as @@ -1,4 +1,4 @@ -package com.ag +package { public class RequestParams { diff --git a/Makefile b/Makefile index 0b67d3f..9b0803d 100644 --- a/Makefile +++ b/Makefile @@ -15,14 +15,10 @@ COMPC ?= compc SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) -# define all target swc paths (same as with swf paths above) -SWCS = $(patsubst %.as,%.swc,$(wildcard com/ag/*.as)) - - # define an implicit build rule for any file matching %.swf, # using the $< (input) and $@ (output) automatic variables %.swf : %.mxml - $(MXMLC) $< -warnings -l+=./com/ag -l+=$(dir $<) -output $@ + $(MXMLC) $< -warnings -l+=$(dir $<) -output $@ # define an implicit build rule for any file matching %.swc, @@ -33,7 +29,7 @@ SWCS = $(patsubst %.as,%.swc,$(wildcard com/ag/*.as)) # build all expected swf and swc files -all: $(SWCS) $(SWFS) +all: $(SWFS) # remove all swf files in the tree From a55c3e2ed7c3f2b3f82378c203b49334fa52890e Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:30:55 -0500 Subject: [PATCH 60/92] adding example for item renderers, modified with sanified separation --- 03d2-item-renderers/HBoxWeatherDisplay.mxml | 31 +++++++++++ 03d2-item-renderers/WeatherApp.as | 57 +++++++++++++++++++++ 03d2-item-renderers/WeatherDisplay.mxml | 45 ++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 03d2-item-renderers/HBoxWeatherDisplay.mxml create mode 100644 03d2-item-renderers/WeatherApp.as create mode 100644 03d2-item-renderers/WeatherDisplay.mxml diff --git a/03d2-item-renderers/HBoxWeatherDisplay.mxml b/03d2-item-renderers/HBoxWeatherDisplay.mxml new file mode 100644 index 0000000..3b91ba2 --- /dev/null +++ b/03d2-item-renderers/HBoxWeatherDisplay.mxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + diff --git a/03d2-item-renderers/WeatherApp.as b/03d2-item-renderers/WeatherApp.as new file mode 100644 index 0000000..8baa284 --- /dev/null +++ b/03d2-item-renderers/WeatherApp.as @@ -0,0 +1,57 @@ +package +{ + import mx.collections.ArrayCollection; + import mx.controls.TextInput; + import mx.core.Application; + import mx.rpc.events.ResultEvent; + import mx.rpc.http.HTTPService; + + public class WeatherApp extends Application + { + + function WeatherApp() + { + } + + [Bindable] + public var myResult:XML; + + [Bindable] + public var weatherObject:Object; + + [Bindable] + public var listContents:ArrayCollection; + + public var weatherService:HTTPService; + public var zip:TextInput; + + public namespace yweather = "http://xml.weather.yahoo.com/ns/rss/1.0"; + use namespace yweather; + + public function requestWeather():void { + weatherService.cancel(); + var params:Object = new Object(); + params.p = zip.text; + weatherService.send(params); + } + + public function resultHandler(event:ResultEvent):void { + myResult = XML(event.result); + weatherObject = new Object(); + weatherObject.zip = zip.text; + weatherObject.city = myResult.channel.yweather::location.@city; + weatherObject.temp = myResult.channel.item.yweather::condition.@temp; + weatherObject.imgsource = parseImageUrl(myResult.channel.item.description); + + var a:Array = new Array(weatherObject); + listContents = new ArrayCollection(a); + } + + public function parseImageUrl(fromHtml:XMLList):String { + var pattern:RegExp = /img src="(.+?)"/; + var results:Array = pattern.exec(fromHtml); + var imageURL:String = results[1]; // backreference 1 from pattern + return imageURL; + } + } +} diff --git a/03d2-item-renderers/WeatherDisplay.mxml b/03d2-item-renderers/WeatherDisplay.mxml new file mode 100644 index 0000000..e7218f3 --- /dev/null +++ b/03d2-item-renderers/WeatherDisplay.mxml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From b14a4ad07c0fbc1c4408664c536d98183173f838 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:37:55 -0500 Subject: [PATCH 61/92] adding example for list control --- 03d3-lists/ListControl.mxml | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 03d3-lists/ListControl.mxml diff --git a/03d3-lists/ListControl.mxml b/03d3-lists/ListControl.mxml new file mode 100644 index 0000000..fd5e4ef --- /dev/null +++ b/03d3-lists/ListControl.mxml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + From 33d7222af52374f9b34cc75c9ad3699ebfdf7ffd Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:41:58 -0500 Subject: [PATCH 62/92] adding mostly-stupid README --- README | 1 + 1 file changed, 1 insertion(+) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..9160023 --- /dev/null +++ b/README @@ -0,0 +1 @@ +crap I'm doing to (re)learn Adobe Flex From 551288685409d7ed560f7e84b2b2fcf04161b76c Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:54:17 -0500 Subject: [PATCH 63/92] custom version or 03d3 with separation of mxml/as --- 00-custom-03d3-lists/ListApp.as | 39 +++++++++++++++++++++++++++ 00-custom-03d3-lists/ListControl.mxml | 26 ++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 00-custom-03d3-lists/ListApp.as create mode 100644 00-custom-03d3-lists/ListControl.mxml diff --git a/00-custom-03d3-lists/ListApp.as b/00-custom-03d3-lists/ListApp.as new file mode 100644 index 0000000..d4cc12b --- /dev/null +++ b/00-custom-03d3-lists/ListApp.as @@ -0,0 +1,39 @@ +package +{ + import mx.core.Application; + + import mx.collections.ArrayCollection; + import mx.rpc.events.ResultEvent; + import mx.events.ListEvent; + import mx.rpc.http.HTTPService; + import mx.controls.Text; + + public class ListApp extends Application + { + [Bindable] + public var employeeList:ArrayCollection = new ArrayCollection(); + public var employeesService:HTTPService; + public var textMessage:Text; + + function ListApp() + { + } + + public function requestEmployees():void + { + employeesService.send(); + } + + public function resultHandler(event:ResultEvent):void + { + employeeList = event.result.employees.employee as ArrayCollection; + } + + public function showMessage(event:Event):void + { + textMessage.text = "You selected: " + + event.currentTarget.selectedItem.firstName + ' ' + + event.currentTarget.selectedItem.lastName; + } + } +} diff --git a/00-custom-03d3-lists/ListControl.mxml b/00-custom-03d3-lists/ListControl.mxml new file mode 100644 index 0000000..c7028e0 --- /dev/null +++ b/00-custom-03d3-lists/ListControl.mxml @@ -0,0 +1,26 @@ + + + + + + + + + + + + From cb254733ccd691709d8b13f070506ecb4790ef68 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 22:59:30 -0500 Subject: [PATCH 64/92] adding example for horizontal list control --- 03d3-lists/HorizontalListControl.mxml | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 03d3-lists/HorizontalListControl.mxml diff --git a/03d3-lists/HorizontalListControl.mxml b/03d3-lists/HorizontalListControl.mxml new file mode 100644 index 0000000..1edb411 --- /dev/null +++ b/03d3-lists/HorizontalListControl.mxml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + From 94893539308523636a1daace00c610ce04dde7a6 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Fri, 19 Feb 2010 23:03:10 -0500 Subject: [PATCH 65/92] adding example for tilelist --- .../CustomApp.as | 0 .../Snarf.mxml | 0 03d4-tilelist/TileListExample.mxml | 75 +++++++++++++++++++ 3 files changed, 75 insertions(+) rename {00-custom-app => 00-custom-03d1-datagrid}/CustomApp.as (100%) rename {00-custom-app => 00-custom-03d1-datagrid}/Snarf.mxml (100%) create mode 100644 03d4-tilelist/TileListExample.mxml diff --git a/00-custom-app/CustomApp.as b/00-custom-03d1-datagrid/CustomApp.as similarity index 100% rename from 00-custom-app/CustomApp.as rename to 00-custom-03d1-datagrid/CustomApp.as diff --git a/00-custom-app/Snarf.mxml b/00-custom-03d1-datagrid/Snarf.mxml similarity index 100% rename from 00-custom-app/Snarf.mxml rename to 00-custom-03d1-datagrid/Snarf.mxml diff --git a/03d4-tilelist/TileListExample.mxml b/03d4-tilelist/TileListExample.mxml new file mode 100644 index 0000000..8b006b3 --- /dev/null +++ b/03d4-tilelist/TileListExample.mxml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 70b9977d4c633ee922d1dd5c1125b7c5ce55841e Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sat, 20 Feb 2010 22:15:26 -0500 Subject: [PATCH 66/92] reorg wrt make implicit rules and custom versions of --- Makefile | 19 +++++++------------ .../CustomApp.as | 0 .../Snarf.mxml | 0 .../ListApp.as | 0 .../ListControl.mxml | 0 rules.mk | 11 +++++++++++ 6 files changed, 18 insertions(+), 12 deletions(-) rename {00-custom-03d1-datagrid => custom-03d1-datagrid}/CustomApp.as (100%) rename {00-custom-03d1-datagrid => custom-03d1-datagrid}/Snarf.mxml (100%) rename {00-custom-03d3-lists => custom-03d3-lists}/ListApp.as (100%) rename {00-custom-03d3-lists => custom-03d3-lists}/ListControl.mxml (100%) create mode 100644 rules.mk diff --git a/Makefile b/Makefile index 9b0803d..3d658b7 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ # the Adobe Flex "Geting Started" tutorial at: # http://learn.adobe.com/wiki/display/Flex/Getting+Started +include rules.mk # sets mxmlc and compc to their respective basenames # if not overridden in command line like so: @@ -13,23 +14,17 @@ COMPC ?= compc # define all target swf paths (which don't yet exist if # they've never been built) SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) +SWFS += $(patsubst %.mxml,%.swf,$(wildcard custom-*/*.mxml)) -# define an implicit build rule for any file matching %.swf, -# using the $< (input) and $@ (output) automatic variables -%.swf : %.mxml - $(MXMLC) $< -warnings -l+=$(dir $<) -output $@ - - -# define an implicit build rule for any file matching %.swc, -# using the $< (input) and $@ (output) automatic variables -# just like with the %.swf implicit rule above -%.swc : %.as - $(COMPC) -sp+=./ -output $@ -include-classes $(subst /,.,$(basename $<)) +# glob up all component files as well, since changes to them +# should also prompt rebuild +COMPONENTS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.as)) +COMPONENTS += $(patsubst %.mxml,%.swf,$(wildcard custom-*/*.as)) # build all expected swf and swc files -all: $(SWFS) +all: $(SWFS) $(COMPONENTS) # remove all swf files in the tree diff --git a/00-custom-03d1-datagrid/CustomApp.as b/custom-03d1-datagrid/CustomApp.as similarity index 100% rename from 00-custom-03d1-datagrid/CustomApp.as rename to custom-03d1-datagrid/CustomApp.as diff --git a/00-custom-03d1-datagrid/Snarf.mxml b/custom-03d1-datagrid/Snarf.mxml similarity index 100% rename from 00-custom-03d1-datagrid/Snarf.mxml rename to custom-03d1-datagrid/Snarf.mxml diff --git a/00-custom-03d3-lists/ListApp.as b/custom-03d3-lists/ListApp.as similarity index 100% rename from 00-custom-03d3-lists/ListApp.as rename to custom-03d3-lists/ListApp.as diff --git a/00-custom-03d3-lists/ListControl.mxml b/custom-03d3-lists/ListControl.mxml similarity index 100% rename from 00-custom-03d3-lists/ListControl.mxml rename to custom-03d3-lists/ListControl.mxml diff --git a/rules.mk b/rules.mk new file mode 100644 index 0000000..091688e --- /dev/null +++ b/rules.mk @@ -0,0 +1,11 @@ +# define an implicit build rule for any file matching %.swf, +# using the $< (input) and $@ (output) automatic variables +%.swf : %.mxml + $(MXMLC) $< -warnings -l+=$(dir $<) -output $@ + + +# define an implicit build rule for any file matching %.swc, +# using the $< (input) and $@ (output) automatic variables +# just like with the %.swf implicit rule above +%.swc : %.as + $(COMPC) -sp+=./ -output $@ -include-classes $(subst /,.,$(basename $<)) From 14db585c3becefeff8b3fac19c01b783a5155b16 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 21 Feb 2010 00:08:12 -0500 Subject: [PATCH 67/92] abandoning GNU make pattern rules in favor of generated makefile targets --- Makefile | 35 +++++++++---- mktargets.py | 70 +++++++++++++++++++++++++ targets.mk | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 236 insertions(+), 10 deletions(-) create mode 100755 mktargets.py create mode 100644 targets.mk diff --git a/Makefile b/Makefile index 3d658b7..8844ef5 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,6 @@ # the Adobe Flex "Geting Started" tutorial at: # http://learn.adobe.com/wiki/display/Flex/Getting+Started -include rules.mk - # sets mxmlc and compc to their respective basenames # if not overridden in command line like so: # make MXMLC=/path/to/my/mxmlc @@ -11,20 +9,37 @@ MXMLC ?= mxmlc COMPC ?= compc -# define all target swf paths (which don't yet exist if -# they've never been built) -SWFS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.mxml)) -SWFS += $(patsubst %.mxml,%.swf,$(wildcard custom-*/*.mxml)) +# define all dependency mxml paths and their swf path targets +# (which don't yet exist if they've never been built) +MXML = $(wildcard [0-9]*-*/*.mxml) $(wildcard custom-*/*.mxml) +SWFS = $(patsubst %.mxml,%.swf,$(MXML)) # glob up all component files as well, since changes to them # should also prompt rebuild -COMPONENTS = $(patsubst %.mxml,%.swf,$(wildcard [0-9]*-*/*.as)) -COMPONENTS += $(patsubst %.mxml,%.swf,$(wildcard custom-*/*.as)) +COMPONENTS = $(wildcard [0-9]*-*/*.as) $(wildcard custom-*/*.as) +export COMPONENTS + + +include rules.mk + + +all: $(SWFS) + + +include targets.mk + + +components: + @echo $(COMPONENTS) + + +mxml: + @echo $(MXML) -# build all expected swf and swc files -all: $(SWFS) $(COMPONENTS) +swfs: + @echo $(SWFS) # remove all swf files in the tree diff --git a/mktargets.py b/mktargets.py new file mode 100755 index 0000000..b10b505 --- /dev/null +++ b/mktargets.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +from __future__ import print_function + +import os +import re +import sys +import glob +from os.path import join as pathjoin + + +HERE = os.path.dirname(os.path.abspath(__file__)) +AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + + ('*' * 20)).format(os.path.basename(sys.argv[0])) +PATTERN_RULE_MXMLC = \ + '$(MXMLC) {firstdep} -warnings -l+={parent_dir} -output {target}' + + +def main(sysargs=sys.argv[:]): + targets_mk = pathjoin(HERE, 'targets.mk') + os.chmod(targets_mk, 0600) + targetmaker = TargetMaker(outstream=open(targets_mk, 'wb')) + targetmaker.make() + os.chmod(targets_mk, 0444) + return 0 + + +class TargetMaker(object): + _to_glob = ( + pathjoin(HERE, '[0-9]*-*', '*.mxml'), + pathjoin(HERE, 'custom-*', '*.mxml'), + ) + + def __init__(self, outstream=sys.stdout): + self.outstream = outstream + self.targets = {} + + def make(self): + for pattern in self._to_glob: + for mxml in glob.glob(pattern): + self._add_target_from_mxml(mxml) + self._write_out_targets() + + def _add_target_from_mxml(self, mxml): + rel_mxml = os.path.relpath(mxml, HERE) + as_swf = re.sub('(.*)\.mxml$', '\\1.swf', rel_mxml) + self.targets[as_swf] = set([rel_mxml]) + + as3_pattern = re.sub('(.*)/(.*)\.mxml$', '\\1/*.as', rel_mxml) + for local_as3 in glob.glob(as3_pattern): + rel_as3 = os.path.relpath(local_as3, HERE) + self.targets[as_swf].add(rel_as3) + + def _write_out_targets(self): + print(AUTOGEN_WARNING, file=self.outstream) + for target in sorted(self.targets.iterkeys()): + deps = list(reversed(sorted(list(self.targets[target]), + key=lambda d: os.path.splitext(d)[-1]))) + print('{target}: {deps}'.format(target=target, + deps=' '.join(deps)), file=self.outstream) + print('\t' + + PATTERN_RULE_MXMLC.format(firstdep=deps[0], + parent_dir=os.path.dirname(deps[0]), + target=target) + + '\n\n', file=self.outstream) + + +if __name__ == '__main__': + sys.exit(main()) + +# vim:filetype=python diff --git a/targets.mk b/targets.mk new file mode 100644 index 0000000..aefb980 --- /dev/null +++ b/targets.mk @@ -0,0 +1,141 @@ +# ******** AUTOGENERATED by mktargets.py ******************** +01-flickr/FlickrRIA.swf: 01-flickr/FlickrRIA.mxml + $(MXMLC) 01-flickr/FlickrRIA.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf + + +01-flickr/FlickrThumbnail.swf: 01-flickr/FlickrThumbnail.mxml + $(MXMLC) 01-flickr/FlickrThumbnail.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrThumbnail.swf + + +02-shipping/PlainText.swf: 02-shipping/PlainText.mxml + $(MXMLC) 02-shipping/PlainText.mxml -warnings -l+=02-shipping -output 02-shipping/PlainText.swf + + +03a1-binding-and-modeling/YahooWeather.swf: 03a1-binding-and-modeling/YahooWeather.mxml + $(MXMLC) 03a1-binding-and-modeling/YahooWeather.mxml -warnings -l+=03a1-binding-and-modeling -output 03a1-binding-and-modeling/YahooWeather.swf + + +03a2-crud-dynamic/CRUDDynamic.swf: 03a2-crud-dynamic/CRUDDynamic.mxml 03a2-crud-dynamic/dyn-employees.as + $(MXMLC) 03a2-crud-dynamic/CRUDDynamic.mxml -warnings -l+=03a2-crud-dynamic -output 03a2-crud-dynamic/CRUDDynamic.swf + + +03a3-crud-static/CRUDStatic.swf: 03a3-crud-static/CRUDStatic.mxml 03a3-crud-static/static-employees.as + $(MXMLC) 03a3-crud-static/CRUDStatic.mxml -warnings -l+=03a3-crud-static -output 03a3-crud-static/CRUDStatic.swf + + +03a4-external-interface/Main.swf: 03a4-external-interface/Main.mxml + $(MXMLC) 03a4-external-interface/Main.mxml -warnings -l+=03a4-external-interface -output 03a4-external-interface/Main.swf + + +03a5-local-connections/BasicTaskReceiver.swf: 03a5-local-connections/BasicTaskReceiver.mxml + $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/BasicTaskReceiver.swf + + +03a5-local-connections/TaskSender.swf: 03a5-local-connections/TaskSender.mxml + $(MXMLC) 03a5-local-connections/TaskSender.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf + + +03a6-shared-objects/SharedObjectExample.swf: 03a6-shared-objects/SharedObjectExample.mxml + $(MXMLC) 03a6-shared-objects/SharedObjectExample.mxml -warnings -l+=03a6-shared-objects -output 03a6-shared-objects/SharedObjectExample.swf + + +03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf: 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml + $(MXMLC) 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml -warnings -l+=03a7-validation-and-formatting -output 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf + + +03b-handling-events/TwitterTimeline.swf: 03b-handling-events/TwitterTimeline.mxml + $(MXMLC) 03b-handling-events/TwitterTimeline.mxml -warnings -l+=03b-handling-events -output 03b-handling-events/TwitterTimeline.swf + + +03b1-event-listeners/VBoxDemo.swf: 03b1-event-listeners/VBoxDemo.mxml + $(MXMLC) 03b1-event-listeners/VBoxDemo.mxml -warnings -l+=03b1-event-listeners -output 03b1-event-listeners/VBoxDemo.swf + + +03b2-event-propagation/DemoApplication.swf: 03b2-event-propagation/DemoApplication.mxml + $(MXMLC) 03b2-event-propagation/DemoApplication.mxml -warnings -l+=03b2-event-propagation -output 03b2-event-propagation/DemoApplication.swf + + +03b3-simple-ui-event/Example1.swf: 03b3-simple-ui-event/Example1.mxml + $(MXMLC) 03b3-simple-ui-event/Example1.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example1.swf + + +03b3-simple-ui-event/Example2.swf: 03b3-simple-ui-event/Example2.mxml + $(MXMLC) 03b3-simple-ui-event/Example2.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf + + +03c1-application-container/Demo.swf: 03c1-application-container/Demo.mxml + $(MXMLC) 03c1-application-container/Demo.mxml -warnings -l+=03c1-application-container -output 03c1-application-container/Demo.swf + + +03c2-box-model/HBoxExample.swf: 03c2-box-model/HBoxExample.mxml + $(MXMLC) 03c2-box-model/HBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf + + +03c2-box-model/VBoxExample.swf: 03c2-box-model/VBoxExample.mxml + $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxExample.swf + + +03c2-box-model/VBoxHBoxCombo.swf: 03c2-box-model/VBoxHBoxCombo.mxml + $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf + + +03c3-canvas-absolute/Example.swf: 03c3-canvas-absolute/Example.mxml + $(MXMLC) 03c3-canvas-absolute/Example.mxml -warnings -l+=03c3-canvas-absolute -output 03c3-canvas-absolute/Example.swf + + +03c4-canvas-relative/Photo.swf: 03c4-canvas-relative/Photo.mxml + $(MXMLC) 03c4-canvas-relative/Photo.mxml -warnings -l+=03c4-canvas-relative -output 03c4-canvas-relative/Photo.swf + + +03c5-combined-layout/Combined.swf: 03c5-combined-layout/Combined.mxml + $(MXMLC) 03c5-combined-layout/Combined.mxml -warnings -l+=03c5-combined-layout -output 03c5-combined-layout/Combined.swf + + +03c6-form/CommentForm.swf: 03c6-form/CommentForm.mxml + $(MXMLC) 03c6-form/CommentForm.mxml -warnings -l+=03c6-form -output 03c6-form/CommentForm.swf + + +03c7-mxml-vs-as3/WithAs3.swf: 03c7-mxml-vs-as3/WithAs3.mxml + $(MXMLC) 03c7-mxml-vs-as3/WithAs3.mxml -warnings -l+=03c7-mxml-vs-as3 -output 03c7-mxml-vs-as3/WithAs3.swf + + +03c7-mxml-vs-as3/WithMxml.swf: 03c7-mxml-vs-as3/WithMxml.mxml + $(MXMLC) 03c7-mxml-vs-as3/WithMxml.mxml -warnings -l+=03c7-mxml-vs-as3 -output 03c7-mxml-vs-as3/WithMxml.swf + + +03c8-panel/Photo.swf: 03c8-panel/Photo.mxml + $(MXMLC) 03c8-panel/Photo.mxml -warnings -l+=03c8-panel -output 03c8-panel/Photo.swf + + +03d1-datagrid/DataGridExample.swf: 03d1-datagrid/DataGridExample.mxml 03d1-datagrid/RequestParams.as 03d1-datagrid/DataGridApp.as + $(MXMLC) 03d1-datagrid/DataGridExample.mxml -warnings -l+=03d1-datagrid -output 03d1-datagrid/DataGridExample.swf + + +03d2-item-renderers/HBoxWeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherApp.as + $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/HBoxWeatherDisplay.swf + + +03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/WeatherDisplay.mxml 03d2-item-renderers/WeatherApp.as + $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf + + +03d3-lists/HorizontalListControl.swf: 03d3-lists/HorizontalListControl.mxml + $(MXMLC) 03d3-lists/HorizontalListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf + + +03d3-lists/ListControl.swf: 03d3-lists/ListControl.mxml + $(MXMLC) 03d3-lists/ListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/ListControl.swf + + +03d4-tilelist/TileListExample.swf: 03d4-tilelist/TileListExample.mxml + $(MXMLC) 03d4-tilelist/TileListExample.mxml -warnings -l+=03d4-tilelist -output 03d4-tilelist/TileListExample.swf + + +custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as + $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf + + +custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/ListApp.as + $(MXMLC) custom-03d3-lists/ListControl.mxml -warnings -l+=custom-03d3-lists -output custom-03d3-lists/ListControl.swf + + From 1deb4cb40ee6430ffeedf60ccfa3e196dd27e7a1 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 21 Feb 2010 00:19:42 -0500 Subject: [PATCH 68/92] reverting 03d2 to vanilla version, moving custom version into its own dir --- 03d2-item-renderers/WeatherDisplay.mxml | 49 +++++++++++++++++-- .../HBoxWeatherDisplay.mxml | 31 ++++++++++++ .../WeatherApp.as | 0 .../WeatherDisplay.mxml | 45 +++++++++++++++++ targets.mk | 12 ++++- 5 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 custom-03d2-item-renderers/HBoxWeatherDisplay.mxml rename {03d2-item-renderers => custom-03d2-item-renderers}/WeatherApp.as (100%) create mode 100644 custom-03d2-item-renderers/WeatherDisplay.mxml diff --git a/03d2-item-renderers/WeatherDisplay.mxml b/03d2-item-renderers/WeatherDisplay.mxml index e7218f3..460eb46 100644 --- a/03d2-item-renderers/WeatherDisplay.mxml +++ b/03d2-item-renderers/WeatherDisplay.mxml @@ -1,10 +1,53 @@ - + + + - + diff --git a/custom-03d2-item-renderers/HBoxWeatherDisplay.mxml b/custom-03d2-item-renderers/HBoxWeatherDisplay.mxml new file mode 100644 index 0000000..3b91ba2 --- /dev/null +++ b/custom-03d2-item-renderers/HBoxWeatherDisplay.mxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + diff --git a/03d2-item-renderers/WeatherApp.as b/custom-03d2-item-renderers/WeatherApp.as similarity index 100% rename from 03d2-item-renderers/WeatherApp.as rename to custom-03d2-item-renderers/WeatherApp.as diff --git a/custom-03d2-item-renderers/WeatherDisplay.mxml b/custom-03d2-item-renderers/WeatherDisplay.mxml new file mode 100644 index 0000000..e7218f3 --- /dev/null +++ b/custom-03d2-item-renderers/WeatherDisplay.mxml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/targets.mk b/targets.mk index aefb980..7b7b881 100644 --- a/targets.mk +++ b/targets.mk @@ -111,11 +111,11 @@ $(MXMLC) 03d1-datagrid/DataGridExample.mxml -warnings -l+=03d1-datagrid -output 03d1-datagrid/DataGridExample.swf -03d2-item-renderers/HBoxWeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherApp.as +03d2-item-renderers/HBoxWeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/HBoxWeatherDisplay.swf -03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/WeatherDisplay.mxml 03d2-item-renderers/WeatherApp.as +03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/WeatherDisplay.mxml $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf @@ -135,6 +135,14 @@ custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-data $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf +custom-03d2-item-renderers/HBoxWeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as + $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/HBoxWeatherDisplay.swf + + +custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as + $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf + + custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/ListApp.as $(MXMLC) custom-03d3-lists/ListControl.mxml -warnings -l+=custom-03d3-lists -output custom-03d3-lists/ListControl.swf From ce8ff91b3f073c4e5cfa9768bbcc1235775c4930 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 21 Feb 2010 00:21:53 -0500 Subject: [PATCH 69/92] fixing regexp for image src attr per comments on tutorial --- 03d2-item-renderers/WeatherDisplay.mxml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03d2-item-renderers/WeatherDisplay.mxml b/03d2-item-renderers/WeatherDisplay.mxml index 460eb46..8fde498 100644 --- a/03d2-item-renderers/WeatherDisplay.mxml +++ b/03d2-item-renderers/WeatherDisplay.mxml @@ -41,7 +41,7 @@ } private function parseImageUrl(fromHtml:XMLList):String { - var pattern:RegExp = /img src="(.+?)" /; + var pattern:RegExp = /img src="(.+?)"/; var results:Array = pattern.exec(fromHtml); var imageURL:String = results[1]; // backreference 1 from pattern return imageURL; From 4ebee454f9dc83871f6ed149483061090744eba2 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 21 Feb 2010 16:10:56 -0500 Subject: [PATCH 70/92] reworking custom version of 03d3 to better understand separation of concerns, whatever ... --- custom-03d3-lists/ListApp.as | 62 +++++++++++++++++++++++++--- custom-03d3-lists/ListControl.mxml | 32 ++++----------- custom-03d3-lists/employees.py | 66 ++++++++++++++++++++++++++++++ custom-03d3-lists/listapp.css | 16 ++++++++ mktargets.py | 14 +++++-- targets.mk | 2 +- 6 files changed, 157 insertions(+), 35 deletions(-) create mode 100644 custom-03d3-lists/employees.py create mode 100644 custom-03d3-lists/listapp.css diff --git a/custom-03d3-lists/ListApp.as b/custom-03d3-lists/ListApp.as index d4cc12b..4a183c0 100644 --- a/custom-03d3-lists/ListApp.as +++ b/custom-03d3-lists/ListApp.as @@ -1,12 +1,16 @@ package { - import mx.core.Application; - + import flash.events.MouseEvent; import mx.collections.ArrayCollection; - import mx.rpc.events.ResultEvent; + import mx.controls.Alert; + import mx.controls.Button; + import mx.controls.List; + import mx.controls.Text; + import mx.core.Application; import mx.events.ListEvent; + import mx.rpc.events.FaultEvent; + import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; - import mx.controls.Text; public class ListApp extends Application { @@ -14,19 +18,65 @@ package public var employeeList:ArrayCollection = new ArrayCollection(); public var employeesService:HTTPService; public var textMessage:Text; + public var mylist:List; + public var mybutton:Button; + + public static const employeesServiceUrl:String = + "http://localhost:18080/employees.xml"; - function ListApp() + public function appComplete():void { + _initButtonControl(); + _initListControl(); + _initEmployeesService(); + trace(this + " initialized!"); } - public function requestEmployees():void + private function _initButtonControl():void { + trace(this + "._initButtonControl()"); + mybutton.addEventListener(MouseEvent.CLICK, requestEmployees); + } + + private function _initListControl():void + { + trace(this + "._initListControl()"); + mylist.addEventListener(ListEvent.ITEM_CLICK, showMessage); + trace(this + ".mylist.dataProvider = " + mylist.dataProvider); + } + + private function _initEmployeesService():void + { + trace(this + "._initEmployeesService()"); + employeesService = new HTTPService(); + employeesService.url = employeesServiceUrl; + employeesService.method = "GET"; + employeesService.resultFormat = "object"; + employeesService.addEventListener("result", resultHandler); + employeesService.addEventListener("fault", faultHandler); + } + + public function requestEmployees(event:Event):void + { + trace(this + ".requestEmployees(" + event + ")"); employeesService.send(); } public function resultHandler(event:ResultEvent):void { + trace(this + ".resultHandler(" + event + ")"); + trace(this + " event.result = " + event.result); + trace(this + " event.headers = " + event.headers); + trace(this + " event.statusCode = " + event.statusCode); + trace(this + " event.result.employees = " + event.result.employees); employeeList = event.result.employees.employee as ArrayCollection; + // mylist.dataProvider = employeeList; + trace(this + ".employeeList = " + employeeList); + } + + public function faultHandler(event:FaultEvent):void { + var faultstring:String = event.fault.faultString; + Alert.show(faultstring); } public function showMessage(event:Event):void diff --git a/custom-03d3-lists/ListControl.mxml b/custom-03d3-lists/ListControl.mxml index c7028e0..3d9d8a2 100644 --- a/custom-03d3-lists/ListControl.mxml +++ b/custom-03d3-lists/ListControl.mxml @@ -1,26 +1,10 @@ - - - - - - - - - - + + + + + diff --git a/custom-03d3-lists/employees.py b/custom-03d3-lists/employees.py new file mode 100644 index 0000000..88a7292 --- /dev/null +++ b/custom-03d3-lists/employees.py @@ -0,0 +1,66 @@ +import sys +from wsgiref.simple_server import make_server + + +EMPLOYEES_XML = """\ + + + Bob + Costas + + + Bob + Sagat + + + Harbor + Oaks + + + Oak + Barrel + + + Sag + Harbor + + +""" +EMPLOYEES_XML_LEN = str(len(EMPLOYEES_XML)) +CROSSDOMAIN_XML = """\ + + + +""" +CROSSDOMAIN_XML_LEN = str(len(CROSSDOMAIN_XML)) + + +def main(sysargs=sys.argv[:]): + server = make_server('0.0.0.0', 18080, employees_app) + server.serve_forever() + return 0 + + +def employees_app(environ, start_response): + path_info = environ.get('PATH_INFO', '/').strip(' /') + if path_info == 'employees.xml': + start_response('200 OK', [ + ('content-type', 'text/xml'), + ('content-length', EMPLOYEES_XML_LEN), + ]) + return [EMPLOYEES_XML] + elif path_info == 'crossdomain.xml': + start_response('200 OK', [ + ('content-type', 'text/xml'), + ('content-length', CROSSDOMAIN_XML_LEN), + ]) + return [CROSSDOMAIN_XML] + else: + start_response('404 Not Found', [('content-type', 'text/plain')]) + return ['sorry charlie'] + + +if __name__ == '__main__': + sys.exit(main()) + +# vim:filetype=python diff --git a/custom-03d3-lists/listapp.css b/custom-03d3-lists/listapp.css new file mode 100644 index 0000000..5583ef8 --- /dev/null +++ b/custom-03d3-lists/listapp.css @@ -0,0 +1,16 @@ +ListApp { + backgroundColor: #ffffff; + backgroundAlpha: 0; + horizontalAlign: left; + verticalGap: 15; + horizontalGap: 15; +} + +.basic-list { + width: 200; + height: 200; +} + +.basic-text { + paddingTop: 20; +} diff --git a/mktargets.py b/mktargets.py index b10b505..a057ea6 100755 --- a/mktargets.py +++ b/mktargets.py @@ -29,6 +29,7 @@ class TargetMaker(object): pathjoin(HERE, '[0-9]*-*', '*.mxml'), pathjoin(HERE, 'custom-*', '*.mxml'), ) + _sibling_fileexts = ('.as', '.css') def __init__(self, outstream=sys.stdout): self.outstream = outstream @@ -45,10 +46,15 @@ class TargetMaker(object): as_swf = re.sub('(.*)\.mxml$', '\\1.swf', rel_mxml) self.targets[as_swf] = set([rel_mxml]) - as3_pattern = re.sub('(.*)/(.*)\.mxml$', '\\1/*.as', rel_mxml) - for local_as3 in glob.glob(as3_pattern): - rel_as3 = os.path.relpath(local_as3, HERE) - self.targets[as_swf].add(rel_as3) + self._add_deps_from_sibling_file_extensions(as_swf, rel_mxml) + + def _add_deps_from_sibling_file_extensions(self, as_swf, rel_mxml): + for fileext in self._sibling_fileexts: + sibling_glob = re.sub('(.*)/(.*)\.mxml$', '\\1/*' + fileext, + rel_mxml) + for sibling in glob.glob(sibling_glob): + rel_sibling = os.path.relpath(sibling, HERE) + self.targets[as_swf].add(rel_sibling) def _write_out_targets(self): print(AUTOGEN_WARNING, file=self.outstream) diff --git a/targets.mk b/targets.mk index 7b7b881..6e241c9 100644 --- a/targets.mk +++ b/targets.mk @@ -143,7 +143,7 @@ custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/Weathe $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf -custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/ListApp.as +custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/listapp.css custom-03d3-lists/ListApp.as $(MXMLC) custom-03d3-lists/ListControl.mxml -warnings -l+=custom-03d3-lists -output custom-03d3-lists/ListControl.swf From 111bf2c489c507dc40b1237315258dfdc9ee13f9 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 21 Feb 2010 16:19:54 -0500 Subject: [PATCH 71/92] beginning custom version of 03d4 --- custom-03d4-tilelist/TileListApp.as | 37 ++++++++++++++++++ custom-03d4-tilelist/TileListExample.mxml | 47 +++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 custom-03d4-tilelist/TileListApp.as create mode 100644 custom-03d4-tilelist/TileListExample.mxml diff --git a/custom-03d4-tilelist/TileListApp.as b/custom-03d4-tilelist/TileListApp.as new file mode 100644 index 0000000..e7f560c --- /dev/null +++ b/custom-03d4-tilelist/TileListApp.as @@ -0,0 +1,37 @@ +package +{ + import mx.core.Application; + import mx.controls.TextInput; + import mx.controls.Text; + import mx.collections.ArrayCollection; + import mx.events.ListEvent; + import mx.rpc.events.ResultEvent; + import mx.rpc.http.HTTPService; + + public class TileListApp extends Application + { + [Bindable] + public var photoFeed:ArrayCollection = new ArrayCollection(); + public var searchTerms:TextInput; + public var photoService:HTTPService; + public var textMessage:Text; + + public function requestPhotos():void { + var params:Object = new Object(); + params.format = 'rss_200_enc'; + params.tags = searchTerms.text; + photoService.send(params); + } + + public function photoHandler(event:ResultEvent):void { + photoFeed = event.result.rss.channel.item as ArrayCollection; + } + + //show text message when user selects image + public function showMessage(event:Event):void { + textMessage.text = "You selected: " + + event.currentTarget.selectedItem.title + "\nUploaded by: " + + event.currentTarget.selectedItem.credit; + } + } +} diff --git a/custom-03d4-tilelist/TileListExample.mxml b/custom-03d4-tilelist/TileListExample.mxml new file mode 100644 index 0000000..c374398 --- /dev/null +++ b/custom-03d4-tilelist/TileListExample.mxml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d76652d16f10ee81dda1dd1f07548c55fe7e2bae Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 21 Feb 2010 16:33:51 -0500 Subject: [PATCH 72/92] mostly busted custom version of 03d4 --- custom-03d4-tilelist/TileListExample.mxml | 25 +++++---------- custom-03d4-tilelist/tilelist.css | 39 +++++++++++++++++++++++ targets.mk | 4 +++ 3 files changed, 51 insertions(+), 17 deletions(-) create mode 100644 custom-03d4-tilelist/tilelist.css diff --git a/custom-03d4-tilelist/TileListExample.mxml b/custom-03d4-tilelist/TileListExample.mxml index c374398..91cfb1b 100644 --- a/custom-03d4-tilelist/TileListExample.mxml +++ b/custom-03d4-tilelist/TileListExample.mxml @@ -1,10 +1,7 @@ + styleName="basic-app" xmlns:loc="*"> + - + - + - - + - + diff --git a/custom-03d4-tilelist/tilelist.css b/custom-03d4-tilelist/tilelist.css new file mode 100644 index 0000000..82ed8e9 --- /dev/null +++ b/custom-03d4-tilelist/tilelist.css @@ -0,0 +1,39 @@ +.basic-app { + backgroundColor: #ffffff; + backgroundAlpha: 0; + horizontalAlign: left; + verticalGap: 15; + horizontalGap: 15; +} + +.basic-style-list { + width: 600; + height: 200; + paddingTop: 25; + left: 5; +} + + +.basic-form-item { + direction: horizontal; +} + + +.basic-vbox { + width: 125; + height: 125; + paddingRight: 5; + paddingLeft: 5; + horizontalAlign: center; +} + + +.basic-image { + height: 75; + width: 75; +} + + +.basic-text { + paddingTop: 20; +} diff --git a/targets.mk b/targets.mk index 6e241c9..657ffc6 100644 --- a/targets.mk +++ b/targets.mk @@ -147,3 +147,7 @@ custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d $(MXMLC) custom-03d3-lists/ListControl.mxml -warnings -l+=custom-03d3-lists -output custom-03d3-lists/ListControl.swf +custom-03d4-tilelist/TileListExample.swf: custom-03d4-tilelist/TileListExample.mxml custom-03d4-tilelist/tilelist.css custom-03d4-tilelist/TileListApp.as + $(MXMLC) custom-03d4-tilelist/TileListExample.mxml -warnings -l+=custom-03d4-tilelist -output custom-03d4-tilelist/TileListExample.swf + + From ea59d5675818eeb401a048eb58faa6b374209f13 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 21 Feb 2010 20:35:19 -0500 Subject: [PATCH 73/92] adding example for 03e1 --- 03e1-accordion/Recipe.mxml | 107 ++++++++++++++++++++++++++++++ 03e1-accordion/assets | 1 + _assets/dessert_decadent_cake.jpg | Bin 0 -> 8079 bytes targets.mk | 4 ++ 4 files changed, 112 insertions(+) create mode 100644 03e1-accordion/Recipe.mxml create mode 120000 03e1-accordion/assets create mode 100644 _assets/dessert_decadent_cake.jpg diff --git a/03e1-accordion/Recipe.mxml b/03e1-accordion/Recipe.mxml new file mode 100644 index 0000000..a93b690 --- /dev/null +++ b/03e1-accordion/Recipe.mxml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/03e1-accordion/assets b/03e1-accordion/assets new file mode 120000 index 0000000..f6c9582 --- /dev/null +++ b/03e1-accordion/assets @@ -0,0 +1 @@ +../_assets \ No newline at end of file diff --git a/_assets/dessert_decadent_cake.jpg b/_assets/dessert_decadent_cake.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0029196104631de7eee855e7334119fbab5222fa GIT binary patch literal 8079 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 literal 0 HcmV?d00001 diff --git a/targets.mk b/targets.mk index 657ffc6..7dbc59a 100644 --- a/targets.mk +++ b/targets.mk @@ -131,6 +131,10 @@ $(MXMLC) 03d4-tilelist/TileListExample.mxml -warnings -l+=03d4-tilelist -output 03d4-tilelist/TileListExample.swf +03e1-accordion/Recipe.swf: 03e1-accordion/Recipe.mxml + $(MXMLC) 03e1-accordion/Recipe.mxml -warnings -l+=03e1-accordion -output 03e1-accordion/Recipe.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf From 0897a44865d2572b9c84608e1b10b8fae7cf34b3 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 21:30:39 -0500 Subject: [PATCH 74/92] adding examples for 03e2 --- 03e2-tabbar-linkbar/LinkBar.mxml | 50 +++++++++++++++++++++++++++++ 03e2-tabbar-linkbar/TabBarDemo.mxml | 50 +++++++++++++++++++++++++++++ targets.mk | 8 +++++ 3 files changed, 108 insertions(+) create mode 100644 03e2-tabbar-linkbar/LinkBar.mxml create mode 100644 03e2-tabbar-linkbar/TabBarDemo.mxml diff --git a/03e2-tabbar-linkbar/LinkBar.mxml b/03e2-tabbar-linkbar/LinkBar.mxml new file mode 100644 index 0000000..bf1dfe9 --- /dev/null +++ b/03e2-tabbar-linkbar/LinkBar.mxml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/03e2-tabbar-linkbar/TabBarDemo.mxml b/03e2-tabbar-linkbar/TabBarDemo.mxml new file mode 100644 index 0000000..b0f4d0a --- /dev/null +++ b/03e2-tabbar-linkbar/TabBarDemo.mxml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/targets.mk b/targets.mk index 7dbc59a..29bb485 100644 --- a/targets.mk +++ b/targets.mk @@ -135,6 +135,14 @@ $(MXMLC) 03e1-accordion/Recipe.mxml -warnings -l+=03e1-accordion -output 03e1-accordion/Recipe.swf +03e2-tabbar-linkbar/LinkBar.swf: 03e2-tabbar-linkbar/LinkBar.mxml + $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/LinkBar.swf + + +03e2-tabbar-linkbar/TabBarDemo.swf: 03e2-tabbar-linkbar/TabBarDemo.mxml + $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf From 19f934fc7c8ecc927c394f42fd59c6a02fde313e Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 21:33:30 -0500 Subject: [PATCH 75/92] adding example for 03e3 --- 03e3-tabnavigator/Shopping.mxml | 48 +++++++++++++++++++++++++++++++++ targets.mk | 4 +++ 2 files changed, 52 insertions(+) create mode 100644 03e3-tabnavigator/Shopping.mxml diff --git a/03e3-tabnavigator/Shopping.mxml b/03e3-tabnavigator/Shopping.mxml new file mode 100644 index 0000000..83054cf --- /dev/null +++ b/03e3-tabnavigator/Shopping.mxml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/targets.mk b/targets.mk index 29bb485..7fde948 100644 --- a/targets.mk +++ b/targets.mk @@ -143,6 +143,10 @@ $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf +03e3-tabnavigator/Shopping.swf: 03e3-tabnavigator/Shopping.mxml + $(MXMLC) 03e3-tabnavigator/Shopping.mxml -warnings -l+=03e3-tabnavigator -output 03e3-tabnavigator/Shopping.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf From 2af4cf42c7ebe429e0c43be69314286831d5c0ae Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 21:34:55 -0500 Subject: [PATCH 76/92] adding example for 03e4 --- 03e4-viewstack/ViewStackDemo.mxml | 44 +++++++++++++++++++++++++++++++ targets.mk | 4 +++ 2 files changed, 48 insertions(+) create mode 100644 03e4-viewstack/ViewStackDemo.mxml diff --git a/03e4-viewstack/ViewStackDemo.mxml b/03e4-viewstack/ViewStackDemo.mxml new file mode 100644 index 0000000..f01a816 --- /dev/null +++ b/03e4-viewstack/ViewStackDemo.mxml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/targets.mk b/targets.mk index 7fde948..f832b49 100644 --- a/targets.mk +++ b/targets.mk @@ -147,6 +147,10 @@ $(MXMLC) 03e3-tabnavigator/Shopping.mxml -warnings -l+=03e3-tabnavigator -output 03e3-tabnavigator/Shopping.swf +03e4-viewstack/ViewStackDemo.swf: 03e4-viewstack/ViewStackDemo.mxml + $(MXMLC) 03e4-viewstack/ViewStackDemo.mxml -warnings -l+=03e4-viewstack -output 03e4-viewstack/ViewStackDemo.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf From 0c5ccef815873282ab3f2db58ad08797d4c2e6e4 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 21:49:18 -0500 Subject: [PATCH 77/92] adding example for 03f1 --- 03f1-custom-components/MainForm.mxml | 16 +++++ .../com/mycustom/components/TextInputEmail.as | 35 +++++++++++ mktargets.py | 31 +++++----- targets.mk | 60 ++++++++++--------- 4 files changed, 99 insertions(+), 43 deletions(-) create mode 100644 03f1-custom-components/MainForm.mxml create mode 100644 03f1-custom-components/com/mycustom/components/TextInputEmail.as diff --git a/03f1-custom-components/MainForm.mxml b/03f1-custom-components/MainForm.mxml new file mode 100644 index 0000000..a21c678 --- /dev/null +++ b/03f1-custom-components/MainForm.mxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/03f1-custom-components/com/mycustom/components/TextInputEmail.as b/03f1-custom-components/com/mycustom/components/TextInputEmail.as new file mode 100644 index 0000000..7a21fbf --- /dev/null +++ b/03f1-custom-components/com/mycustom/components/TextInputEmail.as @@ -0,0 +1,35 @@ +package com.mycustom.components +{ + import mx.controls.TextInput; + import mx.events.ValidationResultEvent; + import mx.validators.EmailValidator; + import flash.events.Event; + import mx.validators.ValidationResult; + + public class TextInputEmail extends TextInput + { + private var emailValidator:EmailValidator = new EmailValidator(); + private var validator:ValidationResultEvent; + + public function TextInputEmail() + { + super(); + this.emailValidator.source = this; + this.emailValidator.property = "text"; + this.addEventListener("enter", this.validate); + + } + + private function validate(event:Event):void + { + validator = emailValidator.validate(); + + if (validator.type == ValidationResultEvent.VALID) + { + this.errorString = ""; + } else { + this.errorString = validator.message; + } + } + } +} diff --git a/mktargets.py b/mktargets.py index a057ea6..7b24179 100755 --- a/mktargets.py +++ b/mktargets.py @@ -5,12 +5,13 @@ import os import re import sys import glob -from os.path import join as pathjoin +from os.path import join as pathjoin, relpath, dirname, \ + abspath, basename, splitext -HERE = os.path.dirname(os.path.abspath(__file__)) +HERE = dirname(abspath(__file__)) AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + - ('*' * 20)).format(os.path.basename(sys.argv[0])) + ('*' * 20)).format(basename(sys.argv[0])) PATTERN_RULE_MXMLC = \ '$(MXMLC) {firstdep} -warnings -l+={parent_dir} -output {target}' @@ -29,7 +30,7 @@ class TargetMaker(object): pathjoin(HERE, '[0-9]*-*', '*.mxml'), pathjoin(HERE, 'custom-*', '*.mxml'), ) - _sibling_fileexts = ('.as', '.css') + _source_fileexts = ('.mxml', '.as', '.css') def __init__(self, outstream=sys.stdout): self.outstream = outstream @@ -42,30 +43,30 @@ class TargetMaker(object): self._write_out_targets() def _add_target_from_mxml(self, mxml): - rel_mxml = os.path.relpath(mxml, HERE) + rel_mxml = relpath(mxml, HERE) as_swf = re.sub('(.*)\.mxml$', '\\1.swf', rel_mxml) self.targets[as_swf] = set([rel_mxml]) - self._add_deps_from_sibling_file_extensions(as_swf, rel_mxml) + self._add_deps_from_alt_source_file_extensions(as_swf, rel_mxml) - def _add_deps_from_sibling_file_extensions(self, as_swf, rel_mxml): - for fileext in self._sibling_fileexts: - sibling_glob = re.sub('(.*)/(.*)\.mxml$', '\\1/*' + fileext, - rel_mxml) - for sibling in glob.glob(sibling_glob): - rel_sibling = os.path.relpath(sibling, HERE) - self.targets[as_swf].add(rel_sibling) + def _add_deps_from_alt_source_file_extensions(self, as_swf, rel_mxml): + basedir = dirname(rel_mxml) + for dirpath, dirnames, filenames in os.walk(basedir): + for filename in filenames: + if splitext(filename)[-1] in self._source_fileexts: + rel_source = relpath(pathjoin(dirpath, filename), HERE) + self.targets[as_swf].add(rel_source) def _write_out_targets(self): print(AUTOGEN_WARNING, file=self.outstream) for target in sorted(self.targets.iterkeys()): deps = list(reversed(sorted(list(self.targets[target]), - key=lambda d: os.path.splitext(d)[-1]))) + key=lambda d: splitext(d)[-1]))) print('{target}: {deps}'.format(target=target, deps=' '.join(deps)), file=self.outstream) print('\t' + PATTERN_RULE_MXMLC.format(firstdep=deps[0], - parent_dir=os.path.dirname(deps[0]), + parent_dir=dirname(deps[0]), target=target) + '\n\n', file=self.outstream) diff --git a/targets.mk b/targets.mk index f832b49..9927802 100644 --- a/targets.mk +++ b/targets.mk @@ -1,9 +1,9 @@ # ******** AUTOGENERATED by mktargets.py ******************** -01-flickr/FlickrRIA.swf: 01-flickr/FlickrRIA.mxml - $(MXMLC) 01-flickr/FlickrRIA.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf +01-flickr/FlickrRIA.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml + $(MXMLC) 01-flickr/FlickrThumbnail.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf -01-flickr/FlickrThumbnail.swf: 01-flickr/FlickrThumbnail.mxml +01-flickr/FlickrThumbnail.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml $(MXMLC) 01-flickr/FlickrThumbnail.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrThumbnail.swf @@ -27,12 +27,12 @@ $(MXMLC) 03a4-external-interface/Main.mxml -warnings -l+=03a4-external-interface -output 03a4-external-interface/Main.swf -03a5-local-connections/BasicTaskReceiver.swf: 03a5-local-connections/BasicTaskReceiver.mxml +03a5-local-connections/BasicTaskReceiver.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/BasicTaskReceiver.swf -03a5-local-connections/TaskSender.swf: 03a5-local-connections/TaskSender.mxml - $(MXMLC) 03a5-local-connections/TaskSender.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf +03a5-local-connections/TaskSender.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml + $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf 03a6-shared-objects/SharedObjectExample.swf: 03a6-shared-objects/SharedObjectExample.mxml @@ -55,28 +55,28 @@ $(MXMLC) 03b2-event-propagation/DemoApplication.mxml -warnings -l+=03b2-event-propagation -output 03b2-event-propagation/DemoApplication.swf -03b3-simple-ui-event/Example1.swf: 03b3-simple-ui-event/Example1.mxml +03b3-simple-ui-event/Example1.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml $(MXMLC) 03b3-simple-ui-event/Example1.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example1.swf -03b3-simple-ui-event/Example2.swf: 03b3-simple-ui-event/Example2.mxml - $(MXMLC) 03b3-simple-ui-event/Example2.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf +03b3-simple-ui-event/Example2.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml + $(MXMLC) 03b3-simple-ui-event/Example1.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf 03c1-application-container/Demo.swf: 03c1-application-container/Demo.mxml $(MXMLC) 03c1-application-container/Demo.mxml -warnings -l+=03c1-application-container -output 03c1-application-container/Demo.swf -03c2-box-model/HBoxExample.swf: 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/HBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf +03c2-box-model/HBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml + $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf -03c2-box-model/VBoxExample.swf: 03c2-box-model/VBoxExample.mxml +03c2-box-model/VBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxExample.swf -03c2-box-model/VBoxHBoxCombo.swf: 03c2-box-model/VBoxHBoxCombo.mxml - $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf +03c2-box-model/VBoxHBoxCombo.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml + $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf 03c3-canvas-absolute/Example.swf: 03c3-canvas-absolute/Example.mxml @@ -95,11 +95,11 @@ $(MXMLC) 03c6-form/CommentForm.mxml -warnings -l+=03c6-form -output 03c6-form/CommentForm.swf -03c7-mxml-vs-as3/WithAs3.swf: 03c7-mxml-vs-as3/WithAs3.mxml +03c7-mxml-vs-as3/WithAs3.swf: 03c7-mxml-vs-as3/WithAs3.mxml 03c7-mxml-vs-as3/WithMxml.mxml $(MXMLC) 03c7-mxml-vs-as3/WithAs3.mxml -warnings -l+=03c7-mxml-vs-as3 -output 03c7-mxml-vs-as3/WithAs3.swf -03c7-mxml-vs-as3/WithMxml.swf: 03c7-mxml-vs-as3/WithMxml.mxml +03c7-mxml-vs-as3/WithMxml.swf: 03c7-mxml-vs-as3/WithMxml.mxml 03c7-mxml-vs-as3/WithAs3.mxml $(MXMLC) 03c7-mxml-vs-as3/WithMxml.mxml -warnings -l+=03c7-mxml-vs-as3 -output 03c7-mxml-vs-as3/WithMxml.swf @@ -111,19 +111,19 @@ $(MXMLC) 03d1-datagrid/DataGridExample.mxml -warnings -l+=03d1-datagrid -output 03d1-datagrid/DataGridExample.swf -03d2-item-renderers/HBoxWeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml +03d2-item-renderers/HBoxWeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/HBoxWeatherDisplay.swf -03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/WeatherDisplay.mxml - $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf +03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml + $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf -03d3-lists/HorizontalListControl.swf: 03d3-lists/HorizontalListControl.mxml - $(MXMLC) 03d3-lists/HorizontalListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf +03d3-lists/HorizontalListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml + $(MXMLC) 03d3-lists/ListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf -03d3-lists/ListControl.swf: 03d3-lists/ListControl.mxml +03d3-lists/ListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml $(MXMLC) 03d3-lists/ListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/ListControl.swf @@ -135,12 +135,12 @@ $(MXMLC) 03e1-accordion/Recipe.mxml -warnings -l+=03e1-accordion -output 03e1-accordion/Recipe.swf -03e2-tabbar-linkbar/LinkBar.swf: 03e2-tabbar-linkbar/LinkBar.mxml +03e2-tabbar-linkbar/LinkBar.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/LinkBar.swf -03e2-tabbar-linkbar/TabBarDemo.swf: 03e2-tabbar-linkbar/TabBarDemo.mxml - $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf +03e2-tabbar-linkbar/TabBarDemo.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml + $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf 03e3-tabnavigator/Shopping.swf: 03e3-tabnavigator/Shopping.mxml @@ -151,16 +151,20 @@ $(MXMLC) 03e4-viewstack/ViewStackDemo.mxml -warnings -l+=03e4-viewstack -output 03e4-viewstack/ViewStackDemo.swf +03f1-custom-components/MainForm.swf: 03f1-custom-components/MainForm.mxml 03f1-custom-components/com/mycustom/components/TextInputEmail.as + $(MXMLC) 03f1-custom-components/MainForm.mxml -warnings -l+=03f1-custom-components -output 03f1-custom-components/MainForm.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf -custom-03d2-item-renderers/HBoxWeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as +custom-03d2-item-renderers/HBoxWeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/HBoxWeatherDisplay.swf -custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as - $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf +custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as + $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/listapp.css custom-03d3-lists/ListApp.as From d956f7dd156a2c83655a56ac0494c7b3b59bfc6e Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 22:11:44 -0500 Subject: [PATCH 78/92] adding example for 03f2 --- 03f2-code-behind/CodeBehindDisplay.mxml | 9 ++ 03f2-code-behind/CodeExample.mxml | 10 ++ .../as_components/ComboBoxCodeBehind.as | 105 ++++++++++++++++++ mktargets.py | 51 +++++++-- targets.mk | 26 +++-- 5 files changed, 182 insertions(+), 19 deletions(-) create mode 100644 03f2-code-behind/CodeBehindDisplay.mxml create mode 100644 03f2-code-behind/CodeExample.mxml create mode 100644 03f2-code-behind/as_components/ComboBoxCodeBehind.as diff --git a/03f2-code-behind/CodeBehindDisplay.mxml b/03f2-code-behind/CodeBehindDisplay.mxml new file mode 100644 index 0000000..1de0f37 --- /dev/null +++ b/03f2-code-behind/CodeBehindDisplay.mxml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/03f2-code-behind/CodeExample.mxml b/03f2-code-behind/CodeExample.mxml new file mode 100644 index 0000000..2809b01 --- /dev/null +++ b/03f2-code-behind/CodeExample.mxml @@ -0,0 +1,10 @@ + + + + + + diff --git a/03f2-code-behind/as_components/ComboBoxCodeBehind.as b/03f2-code-behind/as_components/ComboBoxCodeBehind.as new file mode 100644 index 0000000..01e3f51 --- /dev/null +++ b/03f2-code-behind/as_components/ComboBoxCodeBehind.as @@ -0,0 +1,105 @@ +package as_components +{ + import mx.containers.HBox; + import mx.controls.ComboBox; + import mx.events.FlexEvent; + import mx.events.ListEvent; + import mx.formatters.DateFormatter; + + [Bindable] + public class ComboBoxCodeBehind extends HBox + { + public var months:Array = new Array(); + public var dateformatter:DateFormatter = new DateFormatter(); + public var selectedIndex:int; + public var days:Array; + public var years:Array = new Array(); + public var monthsCB:ComboBox; + public var daysCB:ComboBox; + public var yearsCB:ComboBox; + public var selectedIndexYear:int; + public var selectedIndexMonth:int; + public var selectedIndexDay:int; + public var thisYear:int; + + + public function ComboBoxCodeBehind() + { + super(); + init(); + this.addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler); + } + + private function init():void{ + var i:int; + var now:Date = new Date(); + + var currentMonth:int = now.getMonth(); + var currentYear:int = now.getFullYear(); + var currentDay:int = now.getDate(); + + thisYear = currentYear; + dateformatter.formatString = "MMMM"; + + for (i=0; i<12; i++){ + now.setMonth(i); + months[i] = dateformatter.format(now); + } + + setYears(currentYear); + setDays(currentMonth); + + selectedIndexMonth = currentMonth; + selectedIndexYear = years.indexOf(currentYear); + selectedIndexDay = days.indexOf(currentDay); + } + + private function creationCompleteHandler(event:FlexEvent):void{ + monthsCB.addEventListener(ListEvent.CHANGE,monthsHandler); + yearsCB.addEventListener(ListEvent.CHANGE, yearsHandler); + } + + + private function setDays(month:int):void{ + days = new Array(); + var i:int; + + if (month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11){ + for(i=1; i<=31; i++) + days.push(i); + }else if (month == 3 || month == 5 || month == 8 || month == 10){ + for(i=1; i<=30; i++) + days.push(i); + }else if (month == 1){ + if (thisYear % 4 == 0){ + for(i=1; i<=29; i++) + days.push(i); + }else{ + for(i=1; i<=28; i++) + days.push(i); + } + } + } + + private function setYears(year:int):void{ + var j:int; + for(j=1950; j<=year; j++){ + years.push(j); + } + } + + private function monthsHandler(event:ListEvent):void{ + setDays(event.currentTarget.selectedIndex); + selectedIndexDay = 0; + } + + private function yearsHandler(event:ListEvent):void{ + if (monthsCB.selectedIndex == 1){ + var selectedDay:int = daysCB.selectedIndex; + thisYear = event.currentTarget.selectedItem as int; + setDays(monthsCB.selectedIndex); + selectedIndexDay = selectedDay; + } + } + } +} diff --git a/mktargets.py b/mktargets.py index 7b24179..69ef13d 100755 --- a/mktargets.py +++ b/mktargets.py @@ -5,15 +5,16 @@ import os import re import sys import glob +from fnmatch import fnmatch from os.path import join as pathjoin, relpath, dirname, \ - abspath, basename, splitext + abspath, basename, splitext HERE = dirname(abspath(__file__)) AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + ('*' * 20)).format(basename(sys.argv[0])) PATTERN_RULE_MXMLC = \ - '$(MXMLC) {firstdep} -warnings -l+={parent_dir} -output {target}' + '$(MXMLC) {primary_dep} -warnings -l+={parent_dir} -output {target}' def main(sysargs=sys.argv[:]): @@ -53,22 +54,52 @@ class TargetMaker(object): basedir = dirname(rel_mxml) for dirpath, dirnames, filenames in os.walk(basedir): for filename in filenames: - if splitext(filename)[-1] in self._source_fileexts: + if ext(filename) in self._source_fileexts: rel_source = relpath(pathjoin(dirpath, filename), HERE) self.targets[as_swf].add(rel_source) def _write_out_targets(self): print(AUTOGEN_WARNING, file=self.outstream) for target in sorted(self.targets.iterkeys()): - deps = list(reversed(sorted(list(self.targets[target]), - key=lambda d: splitext(d)[-1]))) + deps = self._get_deps_for_target(target) + primary_dep = self._get_primary_dep(target, deps) + pattern_rule_kwargs = \ + self._get_pattern_rule_kwargs(primary_dep, target) + print('{target}: {deps}'.format(target=target, deps=' '.join(deps)), file=self.outstream) - print('\t' + - PATTERN_RULE_MXMLC.format(firstdep=deps[0], - parent_dir=dirname(deps[0]), - target=target) + - '\n\n', file=self.outstream) + print('\t' + PATTERN_RULE_MXMLC.format(**pattern_rule_kwargs) + + '\n\n', file=self.outstream) + + def _get_deps_for_target(self, target): + deps = [] + for dep in reversed(sorted(list(self.targets[target]), key=ext)): + deps.append(dep) + return deps + + def _get_primary_dep(self, target, deps): + primary_dep = deps[0] + + for dependency in deps: + if fnmatch(target, namebase(dependency) + '.*'): + primary_dep = dependency + + return primary_dep + + def _get_pattern_rule_kwargs(self, primary_dep, target): + ret = dict( + primary_dep=primary_dep, + parent_dir=dirname(primary_dep), + target=target + ) + return ret + +def ext(filename): + return splitext(filename)[-1] + + +def namebase(filename): + return splitext(filename)[0] if __name__ == '__main__': diff --git a/targets.mk b/targets.mk index 9927802..48f5446 100644 --- a/targets.mk +++ b/targets.mk @@ -1,6 +1,6 @@ # ******** AUTOGENERATED by mktargets.py ******************** 01-flickr/FlickrRIA.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml - $(MXMLC) 01-flickr/FlickrThumbnail.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf + $(MXMLC) 01-flickr/FlickrRIA.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf 01-flickr/FlickrThumbnail.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml @@ -32,7 +32,7 @@ 03a5-local-connections/TaskSender.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml - $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf + $(MXMLC) 03a5-local-connections/TaskSender.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf 03a6-shared-objects/SharedObjectExample.swf: 03a6-shared-objects/SharedObjectExample.mxml @@ -60,7 +60,7 @@ 03b3-simple-ui-event/Example2.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml - $(MXMLC) 03b3-simple-ui-event/Example1.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf + $(MXMLC) 03b3-simple-ui-event/Example2.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf 03c1-application-container/Demo.swf: 03c1-application-container/Demo.mxml @@ -68,7 +68,7 @@ 03c2-box-model/HBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf + $(MXMLC) 03c2-box-model/HBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf 03c2-box-model/VBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml @@ -76,7 +76,7 @@ 03c2-box-model/VBoxHBoxCombo.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf + $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf 03c3-canvas-absolute/Example.swf: 03c3-canvas-absolute/Example.mxml @@ -116,11 +116,11 @@ 03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml - $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf + $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf 03d3-lists/HorizontalListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml - $(MXMLC) 03d3-lists/ListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf + $(MXMLC) 03d3-lists/HorizontalListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf 03d3-lists/ListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml @@ -140,7 +140,7 @@ 03e2-tabbar-linkbar/TabBarDemo.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml - $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf + $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf 03e3-tabnavigator/Shopping.swf: 03e3-tabnavigator/Shopping.mxml @@ -155,6 +155,14 @@ $(MXMLC) 03f1-custom-components/MainForm.mxml -warnings -l+=03f1-custom-components -output 03f1-custom-components/MainForm.swf +03f2-code-behind/CodeBehindDisplay.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as + $(MXMLC) 03f2-code-behind/CodeBehindDisplay.mxml -warnings -l+=03f2-code-behind -output 03f2-code-behind/CodeBehindDisplay.swf + + +03f2-code-behind/CodeExample.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as + $(MXMLC) 03f2-code-behind/CodeExample.mxml -warnings -l+=03f2-code-behind -output 03f2-code-behind/CodeExample.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf @@ -164,7 +172,7 @@ custom-03d2-item-renderers/HBoxWeatherDisplay.swf: custom-03d2-item-renderers/HB custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as - $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf + $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/listapp.css custom-03d3-lists/ListApp.as From d117ec606662c30066e5402c4cfe10c674641593 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 22:21:27 -0500 Subject: [PATCH 79/92] adding example for 03f3 --- 03f3-composite-component/ComponentForm.mxml | 46 ++++++++++++++++ .../components/ComboBoxDateEntry.mxml | 53 +++++++++++++++++++ .../components/ComboBoxMonths.mxml | 48 +++++++++++++++++ targets.mk | 4 ++ 4 files changed, 151 insertions(+) create mode 100644 03f3-composite-component/ComponentForm.mxml create mode 100644 03f3-composite-component/components/ComboBoxDateEntry.mxml create mode 100644 03f3-composite-component/components/ComboBoxMonths.mxml diff --git a/03f3-composite-component/ComponentForm.mxml b/03f3-composite-component/ComponentForm.mxml new file mode 100644 index 0000000..2614958 --- /dev/null +++ b/03f3-composite-component/ComponentForm.mxml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/03f3-composite-component/components/ComboBoxDateEntry.mxml b/03f3-composite-component/components/ComboBoxDateEntry.mxml new file mode 100644 index 0000000..2039014 --- /dev/null +++ b/03f3-composite-component/components/ComboBoxDateEntry.mxml @@ -0,0 +1,53 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/03f3-composite-component/components/ComboBoxMonths.mxml b/03f3-composite-component/components/ComboBoxMonths.mxml new file mode 100644 index 0000000..70e7815 --- /dev/null +++ b/03f3-composite-component/components/ComboBoxMonths.mxml @@ -0,0 +1,48 @@ + + + + + + + + diff --git a/targets.mk b/targets.mk index 48f5446..62cd5bc 100644 --- a/targets.mk +++ b/targets.mk @@ -163,6 +163,10 @@ $(MXMLC) 03f2-code-behind/CodeExample.mxml -warnings -l+=03f2-code-behind -output 03f2-code-behind/CodeExample.swf +03f3-composite-component/ComponentForm.swf: 03f3-composite-component/components/ComboBoxDateEntry.mxml 03f3-composite-component/ComponentForm.mxml 03f3-composite-component/components/ComboBoxMonths.mxml + $(MXMLC) 03f3-composite-component/ComponentForm.mxml -warnings -l+=03f3-composite-component -output 03f3-composite-component/ComponentForm.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf From f7b841e21e15748858fed53832e62a18500720ff Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 22:31:53 -0500 Subject: [PATCH 80/92] adding example for 03f4 --- 03f4-multiple-composite-components/Main.mxml | 52 ++++++++++++ .../components/ComboBoxDateEntry.mxml | 82 +++++++++++++++++++ .../components/ComboBoxMonths.as | 53 ++++++++++++ targets.mk | 4 + 4 files changed, 191 insertions(+) create mode 100644 03f4-multiple-composite-components/Main.mxml create mode 100644 03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml create mode 100644 03f4-multiple-composite-components/components/ComboBoxMonths.as diff --git a/03f4-multiple-composite-components/Main.mxml b/03f4-multiple-composite-components/Main.mxml new file mode 100644 index 0000000..7798d9f --- /dev/null +++ b/03f4-multiple-composite-components/Main.mxml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml b/03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml new file mode 100644 index 0000000..d0089d1 --- /dev/null +++ b/03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml @@ -0,0 +1,82 @@ + + + + + + + + + + + diff --git a/03f4-multiple-composite-components/components/ComboBoxMonths.as b/03f4-multiple-composite-components/components/ComboBoxMonths.as new file mode 100644 index 0000000..bbbfb11 --- /dev/null +++ b/03f4-multiple-composite-components/components/ComboBoxMonths.as @@ -0,0 +1,53 @@ +package components +{ + import mx.controls.ComboBox; + import mx.formatters.DateFormatter; + /* + ////////////////////////////////////////////////////////////////////////////// + // ADOBE SYSTEMS INCORPORATED + // Copyright 2007 Adobe Systems Incorporated + // All Rights Reserved. + // + // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the + // terms of the Adobe license agreement accompanying it. If you have received this file from a + // source other than Adobe, then your use, modification, or distribution of it requires the prior + // written permission of Adobe. + //////////////////////////////////////////////////////////////////////////////// + */ + public class ComboBoxMonths extends ComboBox + { + private var months:Array = new Array(); + private var dateformatter:DateFormatter = new DateFormatter(); + + public function ComboBoxMonths() + { + super(); + init(); + + } + + private function init():void{ + var i:int; + //get the date + var now:Date = new Date(); + //set current month + var currentMonth:int = now.getMonth(); + //format the string to show only the month + dateformatter.formatString = "MMMM"; + + //loop 12 times + for (i=0; i<12; i++){ + //change the month of the date + now.setMonth(i); + //poplate the array with the month string + months[i] = dateformatter.format(now); + } + + //set the array as the dataprovider of this combobox + this.dataProvider = months; + //select current month + this.selectedIndex = currentMonth; + } + + } +} \ No newline at end of file diff --git a/targets.mk b/targets.mk index 62cd5bc..3bec8ad 100644 --- a/targets.mk +++ b/targets.mk @@ -167,6 +167,10 @@ $(MXMLC) 03f3-composite-component/ComponentForm.mxml -warnings -l+=03f3-composite-component -output 03f3-composite-component/ComponentForm.swf +03f4-multiple-composite-components/Main.swf: 03f4-multiple-composite-components/Main.mxml 03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml 03f4-multiple-composite-components/components/ComboBoxMonths.as + $(MXMLC) 03f4-multiple-composite-components/Main.mxml -warnings -l+=03f4-multiple-composite-components -output 03f4-multiple-composite-components/Main.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf From 3a160b9ea6bc5d7f105a0f6bd2680f9ea55059e3 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 22:43:45 -0500 Subject: [PATCH 81/92] adding example for 03f5 --- 03f5-mxml/MainForm.mxml | 32 ++++++++++++++++++++++++ 03f5-mxml/components/ComboBoxMonths.mxml | 19 ++++++++++++++ targets.mk | 4 +++ 3 files changed, 55 insertions(+) create mode 100644 03f5-mxml/MainForm.mxml create mode 100644 03f5-mxml/components/ComboBoxMonths.mxml diff --git a/03f5-mxml/MainForm.mxml b/03f5-mxml/MainForm.mxml new file mode 100644 index 0000000..04716ef --- /dev/null +++ b/03f5-mxml/MainForm.mxml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/03f5-mxml/components/ComboBoxMonths.mxml b/03f5-mxml/components/ComboBoxMonths.mxml new file mode 100644 index 0000000..b17c9ed --- /dev/null +++ b/03f5-mxml/components/ComboBoxMonths.mxml @@ -0,0 +1,19 @@ + + + + + January + February + March + April + May + June + July + August + September + October + November + December + + + diff --git a/targets.mk b/targets.mk index 3bec8ad..7f42d07 100644 --- a/targets.mk +++ b/targets.mk @@ -171,6 +171,10 @@ $(MXMLC) 03f4-multiple-composite-components/Main.mxml -warnings -l+=03f4-multiple-composite-components -output 03f4-multiple-composite-components/Main.swf +03f5-mxml/MainForm.swf: 03f5-mxml/MainForm.mxml 03f5-mxml/components/ComboBoxMonths.mxml + $(MXMLC) 03f5-mxml/MainForm.mxml -warnings -l+=03f5-mxml -output 03f5-mxml/MainForm.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf From 62930ec4f2e06b0b751dd7ef84c6e183975434eb Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 23:16:04 -0500 Subject: [PATCH 82/92] more fixups to mktargets.py and build options, adding example for 03g1 --- .gitignore | 1 + 03g1-debugging/Debugging.mxml | 18 ++++++ Makefile | 5 ++ mktargets.py | 2 +- targets.mk | 102 ++++++++++++++++++---------------- 5 files changed, 78 insertions(+), 50 deletions(-) create mode 100644 03g1-debugging/Debugging.mxml diff --git a/.gitignore b/.gitignore index fedd318..ec280b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.swf *.swc +*.swf.cache diff --git a/03g1-debugging/Debugging.mxml b/03g1-debugging/Debugging.mxml new file mode 100644 index 0000000..9c6244b --- /dev/null +++ b/03g1-debugging/Debugging.mxml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/Makefile b/Makefile index 8844ef5..2516915 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,11 @@ # make MXMLC=/path/to/my/mxmlc MXMLC ?= mxmlc COMPC ?= compc +ifdef DEBUG + MXMLC_FLAGS ?= -warnings -debug -incremental -strict +else + MXMLC_FLAGS ?= -warnings +endif # define all dependency mxml paths and their swf path targets diff --git a/mktargets.py b/mktargets.py index 69ef13d..17b9841 100755 --- a/mktargets.py +++ b/mktargets.py @@ -14,7 +14,7 @@ HERE = dirname(abspath(__file__)) AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + ('*' * 20)).format(basename(sys.argv[0])) PATTERN_RULE_MXMLC = \ - '$(MXMLC) {primary_dep} -warnings -l+={parent_dir} -output {target}' + '$(MXMLC) {primary_dep} $(MXMLC_FLAGS) -l+={parent_dir} -o {target}' def main(sysargs=sys.argv[:]): diff --git a/targets.mk b/targets.mk index 7f42d07..23e0f80 100644 --- a/targets.mk +++ b/targets.mk @@ -1,197 +1,201 @@ # ******** AUTOGENERATED by mktargets.py ******************** 01-flickr/FlickrRIA.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml - $(MXMLC) 01-flickr/FlickrRIA.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf + $(MXMLC) 01-flickr/FlickrRIA.mxml $(MXMLC_FLAGS) -l+=01-flickr -o 01-flickr/FlickrRIA.swf 01-flickr/FlickrThumbnail.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml - $(MXMLC) 01-flickr/FlickrThumbnail.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrThumbnail.swf + $(MXMLC) 01-flickr/FlickrThumbnail.mxml $(MXMLC_FLAGS) -l+=01-flickr -o 01-flickr/FlickrThumbnail.swf 02-shipping/PlainText.swf: 02-shipping/PlainText.mxml - $(MXMLC) 02-shipping/PlainText.mxml -warnings -l+=02-shipping -output 02-shipping/PlainText.swf + $(MXMLC) 02-shipping/PlainText.mxml $(MXMLC_FLAGS) -l+=02-shipping -o 02-shipping/PlainText.swf 03a1-binding-and-modeling/YahooWeather.swf: 03a1-binding-and-modeling/YahooWeather.mxml - $(MXMLC) 03a1-binding-and-modeling/YahooWeather.mxml -warnings -l+=03a1-binding-and-modeling -output 03a1-binding-and-modeling/YahooWeather.swf + $(MXMLC) 03a1-binding-and-modeling/YahooWeather.mxml $(MXMLC_FLAGS) -l+=03a1-binding-and-modeling -o 03a1-binding-and-modeling/YahooWeather.swf 03a2-crud-dynamic/CRUDDynamic.swf: 03a2-crud-dynamic/CRUDDynamic.mxml 03a2-crud-dynamic/dyn-employees.as - $(MXMLC) 03a2-crud-dynamic/CRUDDynamic.mxml -warnings -l+=03a2-crud-dynamic -output 03a2-crud-dynamic/CRUDDynamic.swf + $(MXMLC) 03a2-crud-dynamic/CRUDDynamic.mxml $(MXMLC_FLAGS) -l+=03a2-crud-dynamic -o 03a2-crud-dynamic/CRUDDynamic.swf 03a3-crud-static/CRUDStatic.swf: 03a3-crud-static/CRUDStatic.mxml 03a3-crud-static/static-employees.as - $(MXMLC) 03a3-crud-static/CRUDStatic.mxml -warnings -l+=03a3-crud-static -output 03a3-crud-static/CRUDStatic.swf + $(MXMLC) 03a3-crud-static/CRUDStatic.mxml $(MXMLC_FLAGS) -l+=03a3-crud-static -o 03a3-crud-static/CRUDStatic.swf 03a4-external-interface/Main.swf: 03a4-external-interface/Main.mxml - $(MXMLC) 03a4-external-interface/Main.mxml -warnings -l+=03a4-external-interface -output 03a4-external-interface/Main.swf + $(MXMLC) 03a4-external-interface/Main.mxml $(MXMLC_FLAGS) -l+=03a4-external-interface -o 03a4-external-interface/Main.swf 03a5-local-connections/BasicTaskReceiver.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml - $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/BasicTaskReceiver.swf + $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml $(MXMLC_FLAGS) -l+=03a5-local-connections -o 03a5-local-connections/BasicTaskReceiver.swf 03a5-local-connections/TaskSender.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml - $(MXMLC) 03a5-local-connections/TaskSender.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf + $(MXMLC) 03a5-local-connections/TaskSender.mxml $(MXMLC_FLAGS) -l+=03a5-local-connections -o 03a5-local-connections/TaskSender.swf 03a6-shared-objects/SharedObjectExample.swf: 03a6-shared-objects/SharedObjectExample.mxml - $(MXMLC) 03a6-shared-objects/SharedObjectExample.mxml -warnings -l+=03a6-shared-objects -output 03a6-shared-objects/SharedObjectExample.swf + $(MXMLC) 03a6-shared-objects/SharedObjectExample.mxml $(MXMLC_FLAGS) -l+=03a6-shared-objects -o 03a6-shared-objects/SharedObjectExample.swf 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf: 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml - $(MXMLC) 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml -warnings -l+=03a7-validation-and-formatting -output 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf + $(MXMLC) 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml $(MXMLC_FLAGS) -l+=03a7-validation-and-formatting -o 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf 03b-handling-events/TwitterTimeline.swf: 03b-handling-events/TwitterTimeline.mxml - $(MXMLC) 03b-handling-events/TwitterTimeline.mxml -warnings -l+=03b-handling-events -output 03b-handling-events/TwitterTimeline.swf + $(MXMLC) 03b-handling-events/TwitterTimeline.mxml $(MXMLC_FLAGS) -l+=03b-handling-events -o 03b-handling-events/TwitterTimeline.swf 03b1-event-listeners/VBoxDemo.swf: 03b1-event-listeners/VBoxDemo.mxml - $(MXMLC) 03b1-event-listeners/VBoxDemo.mxml -warnings -l+=03b1-event-listeners -output 03b1-event-listeners/VBoxDemo.swf + $(MXMLC) 03b1-event-listeners/VBoxDemo.mxml $(MXMLC_FLAGS) -l+=03b1-event-listeners -o 03b1-event-listeners/VBoxDemo.swf 03b2-event-propagation/DemoApplication.swf: 03b2-event-propagation/DemoApplication.mxml - $(MXMLC) 03b2-event-propagation/DemoApplication.mxml -warnings -l+=03b2-event-propagation -output 03b2-event-propagation/DemoApplication.swf + $(MXMLC) 03b2-event-propagation/DemoApplication.mxml $(MXMLC_FLAGS) -l+=03b2-event-propagation -o 03b2-event-propagation/DemoApplication.swf 03b3-simple-ui-event/Example1.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml - $(MXMLC) 03b3-simple-ui-event/Example1.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example1.swf + $(MXMLC) 03b3-simple-ui-event/Example1.mxml $(MXMLC_FLAGS) -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example1.swf 03b3-simple-ui-event/Example2.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml - $(MXMLC) 03b3-simple-ui-event/Example2.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf + $(MXMLC) 03b3-simple-ui-event/Example2.mxml $(MXMLC_FLAGS) -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example2.swf 03c1-application-container/Demo.swf: 03c1-application-container/Demo.mxml - $(MXMLC) 03c1-application-container/Demo.mxml -warnings -l+=03c1-application-container -output 03c1-application-container/Demo.swf + $(MXMLC) 03c1-application-container/Demo.mxml $(MXMLC_FLAGS) -l+=03c1-application-container -o 03c1-application-container/Demo.swf 03c2-box-model/HBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/HBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf + $(MXMLC) 03c2-box-model/HBoxExample.mxml $(MXMLC_FLAGS) -l+=03c2-box-model -o 03c2-box-model/HBoxExample.swf 03c2-box-model/VBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxExample.swf + $(MXMLC) 03c2-box-model/VBoxExample.mxml $(MXMLC_FLAGS) -l+=03c2-box-model -o 03c2-box-model/VBoxExample.swf 03c2-box-model/VBoxHBoxCombo.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf + $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml $(MXMLC_FLAGS) -l+=03c2-box-model -o 03c2-box-model/VBoxHBoxCombo.swf 03c3-canvas-absolute/Example.swf: 03c3-canvas-absolute/Example.mxml - $(MXMLC) 03c3-canvas-absolute/Example.mxml -warnings -l+=03c3-canvas-absolute -output 03c3-canvas-absolute/Example.swf + $(MXMLC) 03c3-canvas-absolute/Example.mxml $(MXMLC_FLAGS) -l+=03c3-canvas-absolute -o 03c3-canvas-absolute/Example.swf 03c4-canvas-relative/Photo.swf: 03c4-canvas-relative/Photo.mxml - $(MXMLC) 03c4-canvas-relative/Photo.mxml -warnings -l+=03c4-canvas-relative -output 03c4-canvas-relative/Photo.swf + $(MXMLC) 03c4-canvas-relative/Photo.mxml $(MXMLC_FLAGS) -l+=03c4-canvas-relative -o 03c4-canvas-relative/Photo.swf 03c5-combined-layout/Combined.swf: 03c5-combined-layout/Combined.mxml - $(MXMLC) 03c5-combined-layout/Combined.mxml -warnings -l+=03c5-combined-layout -output 03c5-combined-layout/Combined.swf + $(MXMLC) 03c5-combined-layout/Combined.mxml $(MXMLC_FLAGS) -l+=03c5-combined-layout -o 03c5-combined-layout/Combined.swf 03c6-form/CommentForm.swf: 03c6-form/CommentForm.mxml - $(MXMLC) 03c6-form/CommentForm.mxml -warnings -l+=03c6-form -output 03c6-form/CommentForm.swf + $(MXMLC) 03c6-form/CommentForm.mxml $(MXMLC_FLAGS) -l+=03c6-form -o 03c6-form/CommentForm.swf 03c7-mxml-vs-as3/WithAs3.swf: 03c7-mxml-vs-as3/WithAs3.mxml 03c7-mxml-vs-as3/WithMxml.mxml - $(MXMLC) 03c7-mxml-vs-as3/WithAs3.mxml -warnings -l+=03c7-mxml-vs-as3 -output 03c7-mxml-vs-as3/WithAs3.swf + $(MXMLC) 03c7-mxml-vs-as3/WithAs3.mxml $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithAs3.swf 03c7-mxml-vs-as3/WithMxml.swf: 03c7-mxml-vs-as3/WithMxml.mxml 03c7-mxml-vs-as3/WithAs3.mxml - $(MXMLC) 03c7-mxml-vs-as3/WithMxml.mxml -warnings -l+=03c7-mxml-vs-as3 -output 03c7-mxml-vs-as3/WithMxml.swf + $(MXMLC) 03c7-mxml-vs-as3/WithMxml.mxml $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithMxml.swf 03c8-panel/Photo.swf: 03c8-panel/Photo.mxml - $(MXMLC) 03c8-panel/Photo.mxml -warnings -l+=03c8-panel -output 03c8-panel/Photo.swf + $(MXMLC) 03c8-panel/Photo.mxml $(MXMLC_FLAGS) -l+=03c8-panel -o 03c8-panel/Photo.swf 03d1-datagrid/DataGridExample.swf: 03d1-datagrid/DataGridExample.mxml 03d1-datagrid/RequestParams.as 03d1-datagrid/DataGridApp.as - $(MXMLC) 03d1-datagrid/DataGridExample.mxml -warnings -l+=03d1-datagrid -output 03d1-datagrid/DataGridExample.swf + $(MXMLC) 03d1-datagrid/DataGridExample.mxml $(MXMLC_FLAGS) -l+=03d1-datagrid -o 03d1-datagrid/DataGridExample.swf 03d2-item-renderers/HBoxWeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml - $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/HBoxWeatherDisplay.swf + $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml $(MXMLC_FLAGS) -l+=03d2-item-renderers -o 03d2-item-renderers/HBoxWeatherDisplay.swf 03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml - $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf + $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml $(MXMLC_FLAGS) -l+=03d2-item-renderers -o 03d2-item-renderers/WeatherDisplay.swf 03d3-lists/HorizontalListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml - $(MXMLC) 03d3-lists/HorizontalListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf + $(MXMLC) 03d3-lists/HorizontalListControl.mxml $(MXMLC_FLAGS) -l+=03d3-lists -o 03d3-lists/HorizontalListControl.swf 03d3-lists/ListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml - $(MXMLC) 03d3-lists/ListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/ListControl.swf + $(MXMLC) 03d3-lists/ListControl.mxml $(MXMLC_FLAGS) -l+=03d3-lists -o 03d3-lists/ListControl.swf 03d4-tilelist/TileListExample.swf: 03d4-tilelist/TileListExample.mxml - $(MXMLC) 03d4-tilelist/TileListExample.mxml -warnings -l+=03d4-tilelist -output 03d4-tilelist/TileListExample.swf + $(MXMLC) 03d4-tilelist/TileListExample.mxml $(MXMLC_FLAGS) -l+=03d4-tilelist -o 03d4-tilelist/TileListExample.swf 03e1-accordion/Recipe.swf: 03e1-accordion/Recipe.mxml - $(MXMLC) 03e1-accordion/Recipe.mxml -warnings -l+=03e1-accordion -output 03e1-accordion/Recipe.swf + $(MXMLC) 03e1-accordion/Recipe.mxml $(MXMLC_FLAGS) -l+=03e1-accordion -o 03e1-accordion/Recipe.swf 03e2-tabbar-linkbar/LinkBar.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml - $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/LinkBar.swf + $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/LinkBar.swf 03e2-tabbar-linkbar/TabBarDemo.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml - $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf + $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/TabBarDemo.swf 03e3-tabnavigator/Shopping.swf: 03e3-tabnavigator/Shopping.mxml - $(MXMLC) 03e3-tabnavigator/Shopping.mxml -warnings -l+=03e3-tabnavigator -output 03e3-tabnavigator/Shopping.swf + $(MXMLC) 03e3-tabnavigator/Shopping.mxml $(MXMLC_FLAGS) -l+=03e3-tabnavigator -o 03e3-tabnavigator/Shopping.swf 03e4-viewstack/ViewStackDemo.swf: 03e4-viewstack/ViewStackDemo.mxml - $(MXMLC) 03e4-viewstack/ViewStackDemo.mxml -warnings -l+=03e4-viewstack -output 03e4-viewstack/ViewStackDemo.swf + $(MXMLC) 03e4-viewstack/ViewStackDemo.mxml $(MXMLC_FLAGS) -l+=03e4-viewstack -o 03e4-viewstack/ViewStackDemo.swf 03f1-custom-components/MainForm.swf: 03f1-custom-components/MainForm.mxml 03f1-custom-components/com/mycustom/components/TextInputEmail.as - $(MXMLC) 03f1-custom-components/MainForm.mxml -warnings -l+=03f1-custom-components -output 03f1-custom-components/MainForm.swf + $(MXMLC) 03f1-custom-components/MainForm.mxml $(MXMLC_FLAGS) -l+=03f1-custom-components -o 03f1-custom-components/MainForm.swf 03f2-code-behind/CodeBehindDisplay.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as - $(MXMLC) 03f2-code-behind/CodeBehindDisplay.mxml -warnings -l+=03f2-code-behind -output 03f2-code-behind/CodeBehindDisplay.swf + $(MXMLC) 03f2-code-behind/CodeBehindDisplay.mxml $(MXMLC_FLAGS) -l+=03f2-code-behind -o 03f2-code-behind/CodeBehindDisplay.swf 03f2-code-behind/CodeExample.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as - $(MXMLC) 03f2-code-behind/CodeExample.mxml -warnings -l+=03f2-code-behind -output 03f2-code-behind/CodeExample.swf + $(MXMLC) 03f2-code-behind/CodeExample.mxml $(MXMLC_FLAGS) -l+=03f2-code-behind -o 03f2-code-behind/CodeExample.swf 03f3-composite-component/ComponentForm.swf: 03f3-composite-component/components/ComboBoxDateEntry.mxml 03f3-composite-component/ComponentForm.mxml 03f3-composite-component/components/ComboBoxMonths.mxml - $(MXMLC) 03f3-composite-component/ComponentForm.mxml -warnings -l+=03f3-composite-component -output 03f3-composite-component/ComponentForm.swf + $(MXMLC) 03f3-composite-component/ComponentForm.mxml $(MXMLC_FLAGS) -l+=03f3-composite-component -o 03f3-composite-component/ComponentForm.swf 03f4-multiple-composite-components/Main.swf: 03f4-multiple-composite-components/Main.mxml 03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml 03f4-multiple-composite-components/components/ComboBoxMonths.as - $(MXMLC) 03f4-multiple-composite-components/Main.mxml -warnings -l+=03f4-multiple-composite-components -output 03f4-multiple-composite-components/Main.swf + $(MXMLC) 03f4-multiple-composite-components/Main.mxml $(MXMLC_FLAGS) -l+=03f4-multiple-composite-components -o 03f4-multiple-composite-components/Main.swf 03f5-mxml/MainForm.swf: 03f5-mxml/MainForm.mxml 03f5-mxml/components/ComboBoxMonths.mxml - $(MXMLC) 03f5-mxml/MainForm.mxml -warnings -l+=03f5-mxml -output 03f5-mxml/MainForm.swf + $(MXMLC) 03f5-mxml/MainForm.mxml $(MXMLC_FLAGS) -l+=03f5-mxml -o 03f5-mxml/MainForm.swf + + +03g1-debugging/Debugging.swf: 03g1-debugging/Debugging.mxml + $(MXMLC) 03g1-debugging/Debugging.mxml $(MXMLC_FLAGS) -l+=03g1-debugging -o 03g1-debugging/Debugging.swf custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as - $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf + $(MXMLC) custom-03d1-datagrid/Snarf.mxml $(MXMLC_FLAGS) -l+=custom-03d1-datagrid -o custom-03d1-datagrid/Snarf.swf custom-03d2-item-renderers/HBoxWeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as - $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/HBoxWeatherDisplay.swf + $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/HBoxWeatherDisplay.swf custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as - $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf + $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/WeatherDisplay.swf custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/listapp.css custom-03d3-lists/ListApp.as - $(MXMLC) custom-03d3-lists/ListControl.mxml -warnings -l+=custom-03d3-lists -output custom-03d3-lists/ListControl.swf + $(MXMLC) custom-03d3-lists/ListControl.mxml $(MXMLC_FLAGS) -l+=custom-03d3-lists -o custom-03d3-lists/ListControl.swf custom-03d4-tilelist/TileListExample.swf: custom-03d4-tilelist/TileListExample.mxml custom-03d4-tilelist/tilelist.css custom-03d4-tilelist/TileListApp.as - $(MXMLC) custom-03d4-tilelist/TileListExample.mxml -warnings -l+=custom-03d4-tilelist -output custom-03d4-tilelist/TileListExample.swf + $(MXMLC) custom-03d4-tilelist/TileListExample.mxml $(MXMLC_FLAGS) -l+=custom-03d4-tilelist -o custom-03d4-tilelist/TileListExample.swf From 595bdfd7a3f51ea9a16a50ffd139ebc3e5da8cd6 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 23:23:35 -0500 Subject: [PATCH 83/92] adding flag for keeping generated as --- .gitignore | 1 + Makefile | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index ec280b3..b970591 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.swf *.swc *.swf.cache +*/generated diff --git a/Makefile b/Makefile index 2516915..8a8fbc6 100644 --- a/Makefile +++ b/Makefile @@ -8,9 +8,9 @@ MXMLC ?= mxmlc COMPC ?= compc ifdef DEBUG - MXMLC_FLAGS ?= -warnings -debug -incremental -strict + MXMLC_FLAGS ?= -warnings -strict -debug -keep-generated-actionscript else - MXMLC_FLAGS ?= -warnings + MXMLC_FLAGS ?= -warnings -strict endif From 233313572073be560a99717f9579ccf7c15517ed Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 22 Feb 2010 23:45:00 -0500 Subject: [PATCH 84/92] excluding "generated" dirs when building targets.mk --- mktargets.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mktargets.py b/mktargets.py index 17b9841..5eb94e8 100755 --- a/mktargets.py +++ b/mktargets.py @@ -53,6 +53,9 @@ class TargetMaker(object): def _add_deps_from_alt_source_file_extensions(self, as_swf, rel_mxml): basedir = dirname(rel_mxml) for dirpath, dirnames, filenames in os.walk(basedir): + for i, directory in enumerate(dirnames): + if directory == 'generated': + dirnames.pop(i) for filename in filenames: if ext(filename) in self._source_fileexts: rel_source = relpath(pathjoin(dirpath, filename), HERE) From 948d15ad6b67a1d1a1ec2c3da4a49a414a61491b Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Tue, 23 Feb 2010 20:11:14 -0500 Subject: [PATCH 85/92] making custom version of 03g1-debugging with unit test stuff (I think?) --- Makefile | 2 ++ custom-03g1-debugging/Debugging.mxml | 5 +++ custom-03g1-debugging/me/DebuggingApp.as | 36 +++++++++++++++++++ .../me/tests/TestDebugging.as | 27 ++++++++++++++ targets.mk | 4 +++ 5 files changed, 74 insertions(+) create mode 100644 custom-03g1-debugging/Debugging.mxml create mode 100644 custom-03g1-debugging/me/DebuggingApp.as create mode 100644 custom-03g1-debugging/me/tests/TestDebugging.as diff --git a/Makefile b/Makefile index 8a8fbc6..16b8106 100644 --- a/Makefile +++ b/Makefile @@ -7,11 +7,13 @@ # make MXMLC=/path/to/my/mxmlc MXMLC ?= mxmlc COMPC ?= compc + ifdef DEBUG MXMLC_FLAGS ?= -warnings -strict -debug -keep-generated-actionscript else MXMLC_FLAGS ?= -warnings -strict endif +MXMLC_FLAGS += -l+=$(HOME)/.local/share/flexunit # define all dependency mxml paths and their swf path targets diff --git a/custom-03g1-debugging/Debugging.mxml b/custom-03g1-debugging/Debugging.mxml new file mode 100644 index 0000000..5d65140 --- /dev/null +++ b/custom-03g1-debugging/Debugging.mxml @@ -0,0 +1,5 @@ + + diff --git a/custom-03g1-debugging/me/DebuggingApp.as b/custom-03g1-debugging/me/DebuggingApp.as new file mode 100644 index 0000000..2dc84a4 --- /dev/null +++ b/custom-03g1-debugging/me/DebuggingApp.as @@ -0,0 +1,36 @@ +package me +{ + import mx.core.Application; + import mx.controls.Alert; + import mx.controls.Button; + + import flash.events.Event; + import flash.events.MouseEvent; + + public class DebuggingApp extends Application + { + public var clickButton:Button; + + public function DebuggingApp():void + { + this.addEventListener("creationComplete", initApp); + clickButton = new Button(); + clickButton.label = "Click Me"; + clickButton.addEventListener("click", showAlert); + this.addChild(clickButton); + } + + public function showAlert(event:MouseEvent):void + { + Alert.show('Hello from Flex'); + trace("Clickety Click! -> " + event); + } + + public function initApp(event:Event):void + { + trace("Hello from Flex Debugging!"); + var myVar:Number = 9; + trace("The value of myVar is " + myVar); + } + } +} diff --git a/custom-03g1-debugging/me/tests/TestDebugging.as b/custom-03g1-debugging/me/tests/TestDebugging.as new file mode 100644 index 0000000..d9ccf94 --- /dev/null +++ b/custom-03g1-debugging/me/tests/TestDebugging.as @@ -0,0 +1,27 @@ +package me.tests +{ + import me.Debugging; + + import mx.core.Application; + import org.flexunit.listeners.UIListener; + import org.flexunit.runner.TestRunnerBase; + import org.flexunit.runner.FlexUnitCore; + + public class TestDebugging extends Application + { + public var uiListener:TestRunnerBase; + private var core:FlexUnitCore; + + public function TestDebugging():void + { + this.addEventListener("creationComplete", runMe); + } + + public function runMe():void + { + core = new FlexUnitCore(); + core.addListener(new UIListener(uiListener)); + core.run(Debugging); + } + } +} diff --git a/targets.mk b/targets.mk index 23e0f80..a685d2d 100644 --- a/targets.mk +++ b/targets.mk @@ -199,3 +199,7 @@ custom-03d4-tilelist/TileListExample.swf: custom-03d4-tilelist/TileListExample.m $(MXMLC) custom-03d4-tilelist/TileListExample.mxml $(MXMLC_FLAGS) -l+=custom-03d4-tilelist -o custom-03d4-tilelist/TileListExample.swf +custom-03g1-debugging/Debugging.swf: custom-03g1-debugging/Debugging.mxml custom-03g1-debugging/me/DebuggingApp.as custom-03g1-debugging/me/tests/TestDebugging.as + $(MXMLC) custom-03g1-debugging/Debugging.mxml $(MXMLC_FLAGS) -l+=custom-03g1-debugging -o custom-03g1-debugging/Debugging.swf + + From 3b76b398e0d688636487ef7697ef245d16d26f79 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Tue, 23 Feb 2010 20:58:18 -0500 Subject: [PATCH 86/92] trying to get the test class(es) to compile correctly --- .../me/tests/TestDebugging.as | 2 +- mktargets.py | 68 ++- targets.mk | 460 +++++++++++++----- 3 files changed, 389 insertions(+), 141 deletions(-) diff --git a/custom-03g1-debugging/me/tests/TestDebugging.as b/custom-03g1-debugging/me/tests/TestDebugging.as index d9ccf94..40a265c 100644 --- a/custom-03g1-debugging/me/tests/TestDebugging.as +++ b/custom-03g1-debugging/me/tests/TestDebugging.as @@ -1,6 +1,6 @@ package me.tests { - import me.Debugging; + import me.DebuggingApp; import mx.core.Application; import org.flexunit.listeners.UIListener; diff --git a/mktargets.py b/mktargets.py index 5eb94e8..d9846f4 100755 --- a/mktargets.py +++ b/mktargets.py @@ -6,15 +6,22 @@ import re import sys import glob from fnmatch import fnmatch +from itertools import ifilter from os.path import join as pathjoin, relpath, dirname, \ - abspath, basename, splitext + abspath, basename, splitext, sep as pathsep HERE = dirname(abspath(__file__)) AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + ('*' * 20)).format(basename(sys.argv[0])) -PATTERN_RULE_MXMLC = \ - '$(MXMLC) {primary_dep} $(MXMLC_FLAGS) -l+={parent_dir} -o {target}' +DEP_SEP = ' \\\n ' +RULE_SEP = '\n\n' +TARGET_FMT = '{target}:' + DEP_SEP + '{deps}' +RULE_FMT = '\\\n\t'.join([ + '\t$(MXMLC) {primary_dep} ', + '$(MXMLC_FLAGS) -l+={parent_dir} ', + '-l+={package_base} -o {target}', +]) def main(sysargs=sys.argv[:]): @@ -38,24 +45,39 @@ class TargetMaker(object): self.targets = {} def make(self): + self._glob_for_top_level_mxml_targets() + self._find_test_class_targets() + self._write_out_targets() + + def _glob_for_top_level_mxml_targets(self): for pattern in self._to_glob: for mxml in glob.glob(pattern): self._add_target_from_mxml(mxml) - self._write_out_targets() + + def _find_test_class_targets(self): + for dirpath, dirnames, filenames in os.walk(HERE): + filter_generated_dirs(dirnames) + for filename in filenames: + if is_test_class(filename): + test_class = pathjoin(dirpath, filename) + self._add_target_from_test_class(test_class) + + def _add_target_from_test_class(self, test_class): + rel_class = relpath(test_class, HERE) + as_swf = re.sub('(.*)\.as$', '\\1.swf', rel_class) + self.targets[as_swf] = set([rel_class]) def _add_target_from_mxml(self, mxml): rel_mxml = relpath(mxml, HERE) as_swf = re.sub('(.*)\.mxml$', '\\1.swf', rel_mxml) self.targets[as_swf] = set([rel_mxml]) - self._add_deps_from_alt_source_file_extensions(as_swf, rel_mxml) def _add_deps_from_alt_source_file_extensions(self, as_swf, rel_mxml): basedir = dirname(rel_mxml) for dirpath, dirnames, filenames in os.walk(basedir): - for i, directory in enumerate(dirnames): - if directory == 'generated': - dirnames.pop(i) + filter_generated_dirs(dirnames) + filter_test_classes(filenames) for filename in filenames: if ext(filename) in self._source_fileexts: rel_source = relpath(pathjoin(dirpath, filename), HERE) @@ -69,10 +91,10 @@ class TargetMaker(object): pattern_rule_kwargs = \ self._get_pattern_rule_kwargs(primary_dep, target) - print('{target}: {deps}'.format(target=target, - deps=' '.join(deps)), file=self.outstream) - print('\t' + PATTERN_RULE_MXMLC.format(**pattern_rule_kwargs) + - '\n\n', file=self.outstream) + print(TARGET_FMT.format(target=target, + deps=DEP_SEP.join(deps)), file=self.outstream) + print(RULE_FMT.format(**pattern_rule_kwargs) + + RULE_SEP, file=self.outstream) def _get_deps_for_target(self, target): deps = [] @@ -93,10 +115,12 @@ class TargetMaker(object): ret = dict( primary_dep=primary_dep, parent_dir=dirname(primary_dep), + package_base=primary_dep.strip('./').split(pathsep)[0], target=target ) return ret + def ext(filename): return splitext(filename)[-1] @@ -105,6 +129,26 @@ def namebase(filename): return splitext(filename)[0] +def filter_generated_dirs(dirnames): + for i, directory in enumerate(dirnames[:]): + if directory == 'generated': + dirnames[i] = None + dirnames[:] = list(ifilter(None, dirnames)) + + +def filter_test_classes(filenames): + for i, filename in enumerate(filenames[:]): + if is_test_class(filename): + filenames[i] = None + filenames[:] = list(ifilter(None, filenames)) + + +def is_test_class(filename): + base_filename = basename(filename) + return base_filename.startswith('Test') and \ + ext(filename) == '.as' + + if __name__ == '__main__': sys.exit(main()) diff --git a/targets.mk b/targets.mk index a685d2d..cb4d22f 100644 --- a/targets.mk +++ b/targets.mk @@ -1,205 +1,409 @@ # ******** AUTOGENERATED by mktargets.py ******************** -01-flickr/FlickrRIA.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml - $(MXMLC) 01-flickr/FlickrRIA.mxml $(MXMLC_FLAGS) -l+=01-flickr -o 01-flickr/FlickrRIA.swf +01-flickr/FlickrRIA.swf: \ + 01-flickr/FlickrThumbnail.mxml \ + 01-flickr/FlickrRIA.mxml + $(MXMLC) 01-flickr/FlickrRIA.mxml \ + $(MXMLC_FLAGS) -l+=01-flickr \ + -l+=01-flickr -o 01-flickr/FlickrRIA.swf -01-flickr/FlickrThumbnail.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml - $(MXMLC) 01-flickr/FlickrThumbnail.mxml $(MXMLC_FLAGS) -l+=01-flickr -o 01-flickr/FlickrThumbnail.swf +01-flickr/FlickrThumbnail.swf: \ + 01-flickr/FlickrThumbnail.mxml \ + 01-flickr/FlickrRIA.mxml + $(MXMLC) 01-flickr/FlickrThumbnail.mxml \ + $(MXMLC_FLAGS) -l+=01-flickr \ + -l+=01-flickr -o 01-flickr/FlickrThumbnail.swf -02-shipping/PlainText.swf: 02-shipping/PlainText.mxml - $(MXMLC) 02-shipping/PlainText.mxml $(MXMLC_FLAGS) -l+=02-shipping -o 02-shipping/PlainText.swf +02-shipping/PlainText.swf: \ + 02-shipping/PlainText.mxml + $(MXMLC) 02-shipping/PlainText.mxml \ + $(MXMLC_FLAGS) -l+=02-shipping \ + -l+=02-shipping -o 02-shipping/PlainText.swf -03a1-binding-and-modeling/YahooWeather.swf: 03a1-binding-and-modeling/YahooWeather.mxml - $(MXMLC) 03a1-binding-and-modeling/YahooWeather.mxml $(MXMLC_FLAGS) -l+=03a1-binding-and-modeling -o 03a1-binding-and-modeling/YahooWeather.swf +03a1-binding-and-modeling/YahooWeather.swf: \ + 03a1-binding-and-modeling/YahooWeather.mxml + $(MXMLC) 03a1-binding-and-modeling/YahooWeather.mxml \ + $(MXMLC_FLAGS) -l+=03a1-binding-and-modeling \ + -l+=03a1-binding-and-modeling -o 03a1-binding-and-modeling/YahooWeather.swf -03a2-crud-dynamic/CRUDDynamic.swf: 03a2-crud-dynamic/CRUDDynamic.mxml 03a2-crud-dynamic/dyn-employees.as - $(MXMLC) 03a2-crud-dynamic/CRUDDynamic.mxml $(MXMLC_FLAGS) -l+=03a2-crud-dynamic -o 03a2-crud-dynamic/CRUDDynamic.swf +03a2-crud-dynamic/CRUDDynamic.swf: \ + 03a2-crud-dynamic/CRUDDynamic.mxml \ + 03a2-crud-dynamic/dyn-employees.as + $(MXMLC) 03a2-crud-dynamic/CRUDDynamic.mxml \ + $(MXMLC_FLAGS) -l+=03a2-crud-dynamic \ + -l+=03a2-crud-dynamic -o 03a2-crud-dynamic/CRUDDynamic.swf -03a3-crud-static/CRUDStatic.swf: 03a3-crud-static/CRUDStatic.mxml 03a3-crud-static/static-employees.as - $(MXMLC) 03a3-crud-static/CRUDStatic.mxml $(MXMLC_FLAGS) -l+=03a3-crud-static -o 03a3-crud-static/CRUDStatic.swf +03a3-crud-static/CRUDStatic.swf: \ + 03a3-crud-static/CRUDStatic.mxml \ + 03a3-crud-static/static-employees.as + $(MXMLC) 03a3-crud-static/CRUDStatic.mxml \ + $(MXMLC_FLAGS) -l+=03a3-crud-static \ + -l+=03a3-crud-static -o 03a3-crud-static/CRUDStatic.swf -03a4-external-interface/Main.swf: 03a4-external-interface/Main.mxml - $(MXMLC) 03a4-external-interface/Main.mxml $(MXMLC_FLAGS) -l+=03a4-external-interface -o 03a4-external-interface/Main.swf +03a4-external-interface/Main.swf: \ + 03a4-external-interface/Main.mxml + $(MXMLC) 03a4-external-interface/Main.mxml \ + $(MXMLC_FLAGS) -l+=03a4-external-interface \ + -l+=03a4-external-interface -o 03a4-external-interface/Main.swf -03a5-local-connections/BasicTaskReceiver.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml - $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml $(MXMLC_FLAGS) -l+=03a5-local-connections -o 03a5-local-connections/BasicTaskReceiver.swf +03a5-local-connections/BasicTaskReceiver.swf: \ + 03a5-local-connections/BasicTaskReceiver.mxml \ + 03a5-local-connections/TaskSender.mxml + $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml \ + $(MXMLC_FLAGS) -l+=03a5-local-connections \ + -l+=03a5-local-connections -o 03a5-local-connections/BasicTaskReceiver.swf -03a5-local-connections/TaskSender.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml - $(MXMLC) 03a5-local-connections/TaskSender.mxml $(MXMLC_FLAGS) -l+=03a5-local-connections -o 03a5-local-connections/TaskSender.swf +03a5-local-connections/TaskSender.swf: \ + 03a5-local-connections/BasicTaskReceiver.mxml \ + 03a5-local-connections/TaskSender.mxml + $(MXMLC) 03a5-local-connections/TaskSender.mxml \ + $(MXMLC_FLAGS) -l+=03a5-local-connections \ + -l+=03a5-local-connections -o 03a5-local-connections/TaskSender.swf -03a6-shared-objects/SharedObjectExample.swf: 03a6-shared-objects/SharedObjectExample.mxml - $(MXMLC) 03a6-shared-objects/SharedObjectExample.mxml $(MXMLC_FLAGS) -l+=03a6-shared-objects -o 03a6-shared-objects/SharedObjectExample.swf +03a6-shared-objects/SharedObjectExample.swf: \ + 03a6-shared-objects/SharedObjectExample.mxml + $(MXMLC) 03a6-shared-objects/SharedObjectExample.mxml \ + $(MXMLC_FLAGS) -l+=03a6-shared-objects \ + -l+=03a6-shared-objects -o 03a6-shared-objects/SharedObjectExample.swf -03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf: 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml - $(MXMLC) 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml $(MXMLC_FLAGS) -l+=03a7-validation-and-formatting -o 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf +03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf: \ + 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml + $(MXMLC) 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml \ + $(MXMLC_FLAGS) -l+=03a7-validation-and-formatting \ + -l+=03a7-validation-and-formatting -o 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf -03b-handling-events/TwitterTimeline.swf: 03b-handling-events/TwitterTimeline.mxml - $(MXMLC) 03b-handling-events/TwitterTimeline.mxml $(MXMLC_FLAGS) -l+=03b-handling-events -o 03b-handling-events/TwitterTimeline.swf +03b-handling-events/TwitterTimeline.swf: \ + 03b-handling-events/TwitterTimeline.mxml + $(MXMLC) 03b-handling-events/TwitterTimeline.mxml \ + $(MXMLC_FLAGS) -l+=03b-handling-events \ + -l+=03b-handling-events -o 03b-handling-events/TwitterTimeline.swf -03b1-event-listeners/VBoxDemo.swf: 03b1-event-listeners/VBoxDemo.mxml - $(MXMLC) 03b1-event-listeners/VBoxDemo.mxml $(MXMLC_FLAGS) -l+=03b1-event-listeners -o 03b1-event-listeners/VBoxDemo.swf +03b1-event-listeners/VBoxDemo.swf: \ + 03b1-event-listeners/VBoxDemo.mxml + $(MXMLC) 03b1-event-listeners/VBoxDemo.mxml \ + $(MXMLC_FLAGS) -l+=03b1-event-listeners \ + -l+=03b1-event-listeners -o 03b1-event-listeners/VBoxDemo.swf -03b2-event-propagation/DemoApplication.swf: 03b2-event-propagation/DemoApplication.mxml - $(MXMLC) 03b2-event-propagation/DemoApplication.mxml $(MXMLC_FLAGS) -l+=03b2-event-propagation -o 03b2-event-propagation/DemoApplication.swf +03b2-event-propagation/DemoApplication.swf: \ + 03b2-event-propagation/DemoApplication.mxml + $(MXMLC) 03b2-event-propagation/DemoApplication.mxml \ + $(MXMLC_FLAGS) -l+=03b2-event-propagation \ + -l+=03b2-event-propagation -o 03b2-event-propagation/DemoApplication.swf -03b3-simple-ui-event/Example1.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml - $(MXMLC) 03b3-simple-ui-event/Example1.mxml $(MXMLC_FLAGS) -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example1.swf +03b3-simple-ui-event/Example1.swf: \ + 03b3-simple-ui-event/Example1.mxml \ + 03b3-simple-ui-event/Example2.mxml + $(MXMLC) 03b3-simple-ui-event/Example1.mxml \ + $(MXMLC_FLAGS) -l+=03b3-simple-ui-event \ + -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example1.swf -03b3-simple-ui-event/Example2.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml - $(MXMLC) 03b3-simple-ui-event/Example2.mxml $(MXMLC_FLAGS) -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example2.swf +03b3-simple-ui-event/Example2.swf: \ + 03b3-simple-ui-event/Example1.mxml \ + 03b3-simple-ui-event/Example2.mxml + $(MXMLC) 03b3-simple-ui-event/Example2.mxml \ + $(MXMLC_FLAGS) -l+=03b3-simple-ui-event \ + -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example2.swf -03c1-application-container/Demo.swf: 03c1-application-container/Demo.mxml - $(MXMLC) 03c1-application-container/Demo.mxml $(MXMLC_FLAGS) -l+=03c1-application-container -o 03c1-application-container/Demo.swf +03c1-application-container/Demo.swf: \ + 03c1-application-container/Demo.mxml + $(MXMLC) 03c1-application-container/Demo.mxml \ + $(MXMLC_FLAGS) -l+=03c1-application-container \ + -l+=03c1-application-container -o 03c1-application-container/Demo.swf -03c2-box-model/HBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/HBoxExample.mxml $(MXMLC_FLAGS) -l+=03c2-box-model -o 03c2-box-model/HBoxExample.swf +03c2-box-model/HBoxExample.swf: \ + 03c2-box-model/VBoxExample.mxml \ + 03c2-box-model/VBoxHBoxCombo.mxml \ + 03c2-box-model/HBoxExample.mxml + $(MXMLC) 03c2-box-model/HBoxExample.mxml \ + $(MXMLC_FLAGS) -l+=03c2-box-model \ + -l+=03c2-box-model -o 03c2-box-model/HBoxExample.swf -03c2-box-model/VBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxExample.mxml $(MXMLC_FLAGS) -l+=03c2-box-model -o 03c2-box-model/VBoxExample.swf +03c2-box-model/VBoxExample.swf: \ + 03c2-box-model/VBoxExample.mxml \ + 03c2-box-model/VBoxHBoxCombo.mxml \ + 03c2-box-model/HBoxExample.mxml + $(MXMLC) 03c2-box-model/VBoxExample.mxml \ + $(MXMLC_FLAGS) -l+=03c2-box-model \ + -l+=03c2-box-model -o 03c2-box-model/VBoxExample.swf -03c2-box-model/VBoxHBoxCombo.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml $(MXMLC_FLAGS) -l+=03c2-box-model -o 03c2-box-model/VBoxHBoxCombo.swf +03c2-box-model/VBoxHBoxCombo.swf: \ + 03c2-box-model/VBoxExample.mxml \ + 03c2-box-model/VBoxHBoxCombo.mxml \ + 03c2-box-model/HBoxExample.mxml + $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml \ + $(MXMLC_FLAGS) -l+=03c2-box-model \ + -l+=03c2-box-model -o 03c2-box-model/VBoxHBoxCombo.swf -03c3-canvas-absolute/Example.swf: 03c3-canvas-absolute/Example.mxml - $(MXMLC) 03c3-canvas-absolute/Example.mxml $(MXMLC_FLAGS) -l+=03c3-canvas-absolute -o 03c3-canvas-absolute/Example.swf +03c3-canvas-absolute/Example.swf: \ + 03c3-canvas-absolute/Example.mxml + $(MXMLC) 03c3-canvas-absolute/Example.mxml \ + $(MXMLC_FLAGS) -l+=03c3-canvas-absolute \ + -l+=03c3-canvas-absolute -o 03c3-canvas-absolute/Example.swf -03c4-canvas-relative/Photo.swf: 03c4-canvas-relative/Photo.mxml - $(MXMLC) 03c4-canvas-relative/Photo.mxml $(MXMLC_FLAGS) -l+=03c4-canvas-relative -o 03c4-canvas-relative/Photo.swf +03c4-canvas-relative/Photo.swf: \ + 03c4-canvas-relative/Photo.mxml + $(MXMLC) 03c4-canvas-relative/Photo.mxml \ + $(MXMLC_FLAGS) -l+=03c4-canvas-relative \ + -l+=03c4-canvas-relative -o 03c4-canvas-relative/Photo.swf -03c5-combined-layout/Combined.swf: 03c5-combined-layout/Combined.mxml - $(MXMLC) 03c5-combined-layout/Combined.mxml $(MXMLC_FLAGS) -l+=03c5-combined-layout -o 03c5-combined-layout/Combined.swf +03c5-combined-layout/Combined.swf: \ + 03c5-combined-layout/Combined.mxml + $(MXMLC) 03c5-combined-layout/Combined.mxml \ + $(MXMLC_FLAGS) -l+=03c5-combined-layout \ + -l+=03c5-combined-layout -o 03c5-combined-layout/Combined.swf -03c6-form/CommentForm.swf: 03c6-form/CommentForm.mxml - $(MXMLC) 03c6-form/CommentForm.mxml $(MXMLC_FLAGS) -l+=03c6-form -o 03c6-form/CommentForm.swf +03c6-form/CommentForm.swf: \ + 03c6-form/CommentForm.mxml + $(MXMLC) 03c6-form/CommentForm.mxml \ + $(MXMLC_FLAGS) -l+=03c6-form \ + -l+=03c6-form -o 03c6-form/CommentForm.swf -03c7-mxml-vs-as3/WithAs3.swf: 03c7-mxml-vs-as3/WithAs3.mxml 03c7-mxml-vs-as3/WithMxml.mxml - $(MXMLC) 03c7-mxml-vs-as3/WithAs3.mxml $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithAs3.swf +03c7-mxml-vs-as3/WithAs3.swf: \ + 03c7-mxml-vs-as3/WithAs3.mxml \ + 03c7-mxml-vs-as3/WithMxml.mxml + $(MXMLC) 03c7-mxml-vs-as3/WithAs3.mxml \ + $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 \ + -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithAs3.swf -03c7-mxml-vs-as3/WithMxml.swf: 03c7-mxml-vs-as3/WithMxml.mxml 03c7-mxml-vs-as3/WithAs3.mxml - $(MXMLC) 03c7-mxml-vs-as3/WithMxml.mxml $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithMxml.swf +03c7-mxml-vs-as3/WithMxml.swf: \ + 03c7-mxml-vs-as3/WithMxml.mxml \ + 03c7-mxml-vs-as3/WithAs3.mxml + $(MXMLC) 03c7-mxml-vs-as3/WithMxml.mxml \ + $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 \ + -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithMxml.swf -03c8-panel/Photo.swf: 03c8-panel/Photo.mxml - $(MXMLC) 03c8-panel/Photo.mxml $(MXMLC_FLAGS) -l+=03c8-panel -o 03c8-panel/Photo.swf +03c8-panel/Photo.swf: \ + 03c8-panel/Photo.mxml + $(MXMLC) 03c8-panel/Photo.mxml \ + $(MXMLC_FLAGS) -l+=03c8-panel \ + -l+=03c8-panel -o 03c8-panel/Photo.swf -03d1-datagrid/DataGridExample.swf: 03d1-datagrid/DataGridExample.mxml 03d1-datagrid/RequestParams.as 03d1-datagrid/DataGridApp.as - $(MXMLC) 03d1-datagrid/DataGridExample.mxml $(MXMLC_FLAGS) -l+=03d1-datagrid -o 03d1-datagrid/DataGridExample.swf +03d1-datagrid/DataGridExample.swf: \ + 03d1-datagrid/DataGridExample.mxml \ + 03d1-datagrid/RequestParams.as \ + 03d1-datagrid/DataGridApp.as + $(MXMLC) 03d1-datagrid/DataGridExample.mxml \ + $(MXMLC_FLAGS) -l+=03d1-datagrid \ + -l+=03d1-datagrid -o 03d1-datagrid/DataGridExample.swf -03d2-item-renderers/HBoxWeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml - $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml $(MXMLC_FLAGS) -l+=03d2-item-renderers -o 03d2-item-renderers/HBoxWeatherDisplay.swf +03d2-item-renderers/HBoxWeatherDisplay.swf: \ + 03d2-item-renderers/HBoxWeatherDisplay.mxml \ + 03d2-item-renderers/WeatherDisplay.mxml + $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml \ + $(MXMLC_FLAGS) -l+=03d2-item-renderers \ + -l+=03d2-item-renderers -o 03d2-item-renderers/HBoxWeatherDisplay.swf -03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml - $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml $(MXMLC_FLAGS) -l+=03d2-item-renderers -o 03d2-item-renderers/WeatherDisplay.swf +03d2-item-renderers/WeatherDisplay.swf: \ + 03d2-item-renderers/HBoxWeatherDisplay.mxml \ + 03d2-item-renderers/WeatherDisplay.mxml + $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml \ + $(MXMLC_FLAGS) -l+=03d2-item-renderers \ + -l+=03d2-item-renderers -o 03d2-item-renderers/WeatherDisplay.swf -03d3-lists/HorizontalListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml - $(MXMLC) 03d3-lists/HorizontalListControl.mxml $(MXMLC_FLAGS) -l+=03d3-lists -o 03d3-lists/HorizontalListControl.swf +03d3-lists/HorizontalListControl.swf: \ + 03d3-lists/ListControl.mxml \ + 03d3-lists/HorizontalListControl.mxml + $(MXMLC) 03d3-lists/HorizontalListControl.mxml \ + $(MXMLC_FLAGS) -l+=03d3-lists \ + -l+=03d3-lists -o 03d3-lists/HorizontalListControl.swf -03d3-lists/ListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml - $(MXMLC) 03d3-lists/ListControl.mxml $(MXMLC_FLAGS) -l+=03d3-lists -o 03d3-lists/ListControl.swf +03d3-lists/ListControl.swf: \ + 03d3-lists/ListControl.mxml \ + 03d3-lists/HorizontalListControl.mxml + $(MXMLC) 03d3-lists/ListControl.mxml \ + $(MXMLC_FLAGS) -l+=03d3-lists \ + -l+=03d3-lists -o 03d3-lists/ListControl.swf -03d4-tilelist/TileListExample.swf: 03d4-tilelist/TileListExample.mxml - $(MXMLC) 03d4-tilelist/TileListExample.mxml $(MXMLC_FLAGS) -l+=03d4-tilelist -o 03d4-tilelist/TileListExample.swf +03d4-tilelist/TileListExample.swf: \ + 03d4-tilelist/TileListExample.mxml + $(MXMLC) 03d4-tilelist/TileListExample.mxml \ + $(MXMLC_FLAGS) -l+=03d4-tilelist \ + -l+=03d4-tilelist -o 03d4-tilelist/TileListExample.swf -03e1-accordion/Recipe.swf: 03e1-accordion/Recipe.mxml - $(MXMLC) 03e1-accordion/Recipe.mxml $(MXMLC_FLAGS) -l+=03e1-accordion -o 03e1-accordion/Recipe.swf +03e1-accordion/Recipe.swf: \ + 03e1-accordion/Recipe.mxml + $(MXMLC) 03e1-accordion/Recipe.mxml \ + $(MXMLC_FLAGS) -l+=03e1-accordion \ + -l+=03e1-accordion -o 03e1-accordion/Recipe.swf -03e2-tabbar-linkbar/LinkBar.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml - $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/LinkBar.swf +03e2-tabbar-linkbar/LinkBar.swf: \ + 03e2-tabbar-linkbar/LinkBar.mxml \ + 03e2-tabbar-linkbar/TabBarDemo.mxml + $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml \ + $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar \ + -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/LinkBar.swf -03e2-tabbar-linkbar/TabBarDemo.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml - $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/TabBarDemo.swf +03e2-tabbar-linkbar/TabBarDemo.swf: \ + 03e2-tabbar-linkbar/LinkBar.mxml \ + 03e2-tabbar-linkbar/TabBarDemo.mxml + $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml \ + $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar \ + -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/TabBarDemo.swf -03e3-tabnavigator/Shopping.swf: 03e3-tabnavigator/Shopping.mxml - $(MXMLC) 03e3-tabnavigator/Shopping.mxml $(MXMLC_FLAGS) -l+=03e3-tabnavigator -o 03e3-tabnavigator/Shopping.swf +03e3-tabnavigator/Shopping.swf: \ + 03e3-tabnavigator/Shopping.mxml + $(MXMLC) 03e3-tabnavigator/Shopping.mxml \ + $(MXMLC_FLAGS) -l+=03e3-tabnavigator \ + -l+=03e3-tabnavigator -o 03e3-tabnavigator/Shopping.swf + + +03e4-viewstack/ViewStackDemo.swf: \ + 03e4-viewstack/ViewStackDemo.mxml + $(MXMLC) 03e4-viewstack/ViewStackDemo.mxml \ + $(MXMLC_FLAGS) -l+=03e4-viewstack \ + -l+=03e4-viewstack -o 03e4-viewstack/ViewStackDemo.swf -03e4-viewstack/ViewStackDemo.swf: 03e4-viewstack/ViewStackDemo.mxml - $(MXMLC) 03e4-viewstack/ViewStackDemo.mxml $(MXMLC_FLAGS) -l+=03e4-viewstack -o 03e4-viewstack/ViewStackDemo.swf - - -03f1-custom-components/MainForm.swf: 03f1-custom-components/MainForm.mxml 03f1-custom-components/com/mycustom/components/TextInputEmail.as - $(MXMLC) 03f1-custom-components/MainForm.mxml $(MXMLC_FLAGS) -l+=03f1-custom-components -o 03f1-custom-components/MainForm.swf - - -03f2-code-behind/CodeBehindDisplay.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as - $(MXMLC) 03f2-code-behind/CodeBehindDisplay.mxml $(MXMLC_FLAGS) -l+=03f2-code-behind -o 03f2-code-behind/CodeBehindDisplay.swf - - -03f2-code-behind/CodeExample.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as - $(MXMLC) 03f2-code-behind/CodeExample.mxml $(MXMLC_FLAGS) -l+=03f2-code-behind -o 03f2-code-behind/CodeExample.swf - - -03f3-composite-component/ComponentForm.swf: 03f3-composite-component/components/ComboBoxDateEntry.mxml 03f3-composite-component/ComponentForm.mxml 03f3-composite-component/components/ComboBoxMonths.mxml - $(MXMLC) 03f3-composite-component/ComponentForm.mxml $(MXMLC_FLAGS) -l+=03f3-composite-component -o 03f3-composite-component/ComponentForm.swf - - -03f4-multiple-composite-components/Main.swf: 03f4-multiple-composite-components/Main.mxml 03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml 03f4-multiple-composite-components/components/ComboBoxMonths.as - $(MXMLC) 03f4-multiple-composite-components/Main.mxml $(MXMLC_FLAGS) -l+=03f4-multiple-composite-components -o 03f4-multiple-composite-components/Main.swf - - -03f5-mxml/MainForm.swf: 03f5-mxml/MainForm.mxml 03f5-mxml/components/ComboBoxMonths.mxml - $(MXMLC) 03f5-mxml/MainForm.mxml $(MXMLC_FLAGS) -l+=03f5-mxml -o 03f5-mxml/MainForm.swf - - -03g1-debugging/Debugging.swf: 03g1-debugging/Debugging.mxml - $(MXMLC) 03g1-debugging/Debugging.mxml $(MXMLC_FLAGS) -l+=03g1-debugging -o 03g1-debugging/Debugging.swf - - -custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as - $(MXMLC) custom-03d1-datagrid/Snarf.mxml $(MXMLC_FLAGS) -l+=custom-03d1-datagrid -o custom-03d1-datagrid/Snarf.swf - - -custom-03d2-item-renderers/HBoxWeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as - $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/HBoxWeatherDisplay.swf - - -custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as - $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/WeatherDisplay.swf - - -custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/listapp.css custom-03d3-lists/ListApp.as - $(MXMLC) custom-03d3-lists/ListControl.mxml $(MXMLC_FLAGS) -l+=custom-03d3-lists -o custom-03d3-lists/ListControl.swf - - -custom-03d4-tilelist/TileListExample.swf: custom-03d4-tilelist/TileListExample.mxml custom-03d4-tilelist/tilelist.css custom-03d4-tilelist/TileListApp.as - $(MXMLC) custom-03d4-tilelist/TileListExample.mxml $(MXMLC_FLAGS) -l+=custom-03d4-tilelist -o custom-03d4-tilelist/TileListExample.swf - - -custom-03g1-debugging/Debugging.swf: custom-03g1-debugging/Debugging.mxml custom-03g1-debugging/me/DebuggingApp.as custom-03g1-debugging/me/tests/TestDebugging.as - $(MXMLC) custom-03g1-debugging/Debugging.mxml $(MXMLC_FLAGS) -l+=custom-03g1-debugging -o custom-03g1-debugging/Debugging.swf +03f1-custom-components/MainForm.swf: \ + 03f1-custom-components/MainForm.mxml \ + 03f1-custom-components/com/mycustom/components/TextInputEmail.as + $(MXMLC) 03f1-custom-components/MainForm.mxml \ + $(MXMLC_FLAGS) -l+=03f1-custom-components \ + -l+=03f1-custom-components -o 03f1-custom-components/MainForm.swf + + +03f2-code-behind/CodeBehindDisplay.swf: \ + 03f2-code-behind/CodeBehindDisplay.mxml \ + 03f2-code-behind/CodeExample.mxml \ + 03f2-code-behind/as_components/ComboBoxCodeBehind.as + $(MXMLC) 03f2-code-behind/CodeBehindDisplay.mxml \ + $(MXMLC_FLAGS) -l+=03f2-code-behind \ + -l+=03f2-code-behind -o 03f2-code-behind/CodeBehindDisplay.swf + + +03f2-code-behind/CodeExample.swf: \ + 03f2-code-behind/CodeBehindDisplay.mxml \ + 03f2-code-behind/CodeExample.mxml \ + 03f2-code-behind/as_components/ComboBoxCodeBehind.as + $(MXMLC) 03f2-code-behind/CodeExample.mxml \ + $(MXMLC_FLAGS) -l+=03f2-code-behind \ + -l+=03f2-code-behind -o 03f2-code-behind/CodeExample.swf + + +03f3-composite-component/ComponentForm.swf: \ + 03f3-composite-component/components/ComboBoxDateEntry.mxml \ + 03f3-composite-component/ComponentForm.mxml \ + 03f3-composite-component/components/ComboBoxMonths.mxml + $(MXMLC) 03f3-composite-component/ComponentForm.mxml \ + $(MXMLC_FLAGS) -l+=03f3-composite-component \ + -l+=03f3-composite-component -o 03f3-composite-component/ComponentForm.swf + + +03f4-multiple-composite-components/Main.swf: \ + 03f4-multiple-composite-components/Main.mxml \ + 03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml \ + 03f4-multiple-composite-components/components/ComboBoxMonths.as + $(MXMLC) 03f4-multiple-composite-components/Main.mxml \ + $(MXMLC_FLAGS) -l+=03f4-multiple-composite-components \ + -l+=03f4-multiple-composite-components -o 03f4-multiple-composite-components/Main.swf + + +03f5-mxml/MainForm.swf: \ + 03f5-mxml/MainForm.mxml \ + 03f5-mxml/components/ComboBoxMonths.mxml + $(MXMLC) 03f5-mxml/MainForm.mxml \ + $(MXMLC_FLAGS) -l+=03f5-mxml \ + -l+=03f5-mxml -o 03f5-mxml/MainForm.swf + + +03g1-debugging/Debugging.swf: \ + 03g1-debugging/Debugging.mxml + $(MXMLC) 03g1-debugging/Debugging.mxml \ + $(MXMLC_FLAGS) -l+=03g1-debugging \ + -l+=03g1-debugging -o 03g1-debugging/Debugging.swf + + +custom-03d1-datagrid/Snarf.swf: \ + custom-03d1-datagrid/Snarf.mxml \ + custom-03d1-datagrid/CustomApp.as + $(MXMLC) custom-03d1-datagrid/Snarf.mxml \ + $(MXMLC_FLAGS) -l+=custom-03d1-datagrid \ + -l+=custom-03d1-datagrid -o custom-03d1-datagrid/Snarf.swf + + +custom-03d2-item-renderers/HBoxWeatherDisplay.swf: \ + custom-03d2-item-renderers/HBoxWeatherDisplay.mxml \ + custom-03d2-item-renderers/WeatherDisplay.mxml \ + custom-03d2-item-renderers/WeatherApp.as + $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml \ + $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers \ + -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/HBoxWeatherDisplay.swf + + +custom-03d2-item-renderers/WeatherDisplay.swf: \ + custom-03d2-item-renderers/HBoxWeatherDisplay.mxml \ + custom-03d2-item-renderers/WeatherDisplay.mxml \ + custom-03d2-item-renderers/WeatherApp.as + $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml \ + $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers \ + -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/WeatherDisplay.swf + + +custom-03d3-lists/ListControl.swf: \ + custom-03d3-lists/ListControl.mxml \ + custom-03d3-lists/listapp.css \ + custom-03d3-lists/ListApp.as + $(MXMLC) custom-03d3-lists/ListControl.mxml \ + $(MXMLC_FLAGS) -l+=custom-03d3-lists \ + -l+=custom-03d3-lists -o custom-03d3-lists/ListControl.swf + + +custom-03d4-tilelist/TileListExample.swf: \ + custom-03d4-tilelist/TileListExample.mxml \ + custom-03d4-tilelist/tilelist.css \ + custom-03d4-tilelist/TileListApp.as + $(MXMLC) custom-03d4-tilelist/TileListExample.mxml \ + $(MXMLC_FLAGS) -l+=custom-03d4-tilelist \ + -l+=custom-03d4-tilelist -o custom-03d4-tilelist/TileListExample.swf + + +custom-03g1-debugging/Debugging.swf: \ + custom-03g1-debugging/Debugging.mxml \ + custom-03g1-debugging/me/DebuggingApp.as + $(MXMLC) custom-03g1-debugging/Debugging.mxml \ + $(MXMLC_FLAGS) -l+=custom-03g1-debugging \ + -l+=custom-03g1-debugging -o custom-03g1-debugging/Debugging.swf + + +custom-03g1-debugging/me/tests/TestDebugging.swf: \ + custom-03g1-debugging/me/tests/TestDebugging.as + $(MXMLC) custom-03g1-debugging/me/tests/TestDebugging.as \ + $(MXMLC_FLAGS) -l+=custom-03g1-debugging/me/tests \ + -l+=custom-03g1-debugging -o custom-03g1-debugging/me/tests/TestDebugging.swf From de198dc59039c865e49053112a4344257f913841 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 24 Feb 2010 20:20:19 -0500 Subject: [PATCH 87/92] more experimentation with test stuff, tackling the source-path weirdness --- Makefile | 11 +- custom-03g1-debugging/me/DebuggingApp.as | 1 + .../me/tests/TestDebugging.as | 18 +- custom-03g1-debugging/me/tests/TestFoo.as | 19 + mktargets.py | 10 +- targets.mk | 478 ++++++++++++------ 6 files changed, 367 insertions(+), 170 deletions(-) create mode 100644 custom-03g1-debugging/me/tests/TestFoo.as diff --git a/Makefile b/Makefile index 16b8106..8cf1bb9 100644 --- a/Makefile +++ b/Makefile @@ -18,8 +18,11 @@ MXMLC_FLAGS += -l+=$(HOME)/.local/share/flexunit # define all dependency mxml paths and their swf path targets # (which don't yet exist if they've never been built) -MXML = $(wildcard [0-9]*-*/*.mxml) $(wildcard custom-*/*.mxml) -SWFS = $(patsubst %.mxml,%.swf,$(MXML)) +MXML = $(wildcard ./*-*/*.mxml) +TEST_CLASSES = $(wildcard ./*-*/*/tests/Test*.as) \ + $(wildcard ./*-*/tests/Test*.as) \ + $(wildcard ./*-*/*/*/tests/Test*.as) +SWFS = $(patsubst %.mxml,%.swf,$(MXML)) $(patsubst %.as,%.swf,$(TEST_CLASSES)) # glob up all component files as well, since changes to them @@ -49,6 +52,10 @@ swfs: @echo $(SWFS) +test_classes: + @echo $(TEST_CLASSES) + + # remove all swf files in the tree clean: find -name \*.swf -exec rm {} \; ; \ diff --git a/custom-03g1-debugging/me/DebuggingApp.as b/custom-03g1-debugging/me/DebuggingApp.as index 2dc84a4..ada1b1a 100644 --- a/custom-03g1-debugging/me/DebuggingApp.as +++ b/custom-03g1-debugging/me/DebuggingApp.as @@ -1,5 +1,6 @@ package me { + //namespace me = "me.*"; import mx.core.Application; import mx.controls.Alert; import mx.controls.Button; diff --git a/custom-03g1-debugging/me/tests/TestDebugging.as b/custom-03g1-debugging/me/tests/TestDebugging.as index 40a265c..c20c801 100644 --- a/custom-03g1-debugging/me/tests/TestDebugging.as +++ b/custom-03g1-debugging/me/tests/TestDebugging.as @@ -1,16 +1,16 @@ package me.tests { - import me.DebuggingApp; + //import me.DebuggingApp; import mx.core.Application; - import org.flexunit.listeners.UIListener; - import org.flexunit.runner.TestRunnerBase; - import org.flexunit.runner.FlexUnitCore; + //import org.flexunit.listeners.UIListener; + //import org.flexunit.runner.TestRunnerBase; + //import org.flexunit.runner.FlexUnitCore; public class TestDebugging extends Application { - public var uiListener:TestRunnerBase; - private var core:FlexUnitCore; + //public var uiListener:TestRunnerBase; + //private var core:FlexUnitCore; public function TestDebugging():void { @@ -19,9 +19,9 @@ package me.tests public function runMe():void { - core = new FlexUnitCore(); - core.addListener(new UIListener(uiListener)); - core.run(Debugging); + //core = new FlexUnitCore(); + //core.addListener(new UIListener(uiListener)); + //core.run(Debugging); } } } diff --git a/custom-03g1-debugging/me/tests/TestFoo.as b/custom-03g1-debugging/me/tests/TestFoo.as new file mode 100644 index 0000000..c10ddad --- /dev/null +++ b/custom-03g1-debugging/me/tests/TestFoo.as @@ -0,0 +1,19 @@ +package me.tests +{ + import mx.core.Application; + import mx.controls.Alert; + import flash.events.Event; + + public class TestFoo extends Application + { + public function TestFoo():void + { + this.addEventListener("creationComplete", alertPoo); + } + + public function alertPoo(event:Event):void + { + Alert.show("poo!"); + } + } +} diff --git a/mktargets.py b/mktargets.py index d9846f4..6a805c6 100755 --- a/mktargets.py +++ b/mktargets.py @@ -19,8 +19,11 @@ RULE_SEP = '\n\n' TARGET_FMT = '{target}:' + DEP_SEP + '{deps}' RULE_FMT = '\\\n\t'.join([ '\t$(MXMLC) {primary_dep} ', - '$(MXMLC_FLAGS) -l+={parent_dir} ', - '-l+={package_base} -o {target}', + '$(MXMLC_FLAGS) ', + '-l+={parent_dir} ', + '-l+={package_base} ', + '-sp+={package_base} ', + '-o {target}', ]) @@ -91,7 +94,8 @@ class TargetMaker(object): pattern_rule_kwargs = \ self._get_pattern_rule_kwargs(primary_dep, target) - print(TARGET_FMT.format(target=target, + rel_target = './' + target.lstrip('./') + print(TARGET_FMT.format(target=rel_target, deps=DEP_SEP.join(deps)), file=self.outstream) print(RULE_FMT.format(**pattern_rule_kwargs) + RULE_SEP, file=self.outstream) diff --git a/targets.mk b/targets.mk index cb4d22f..b169b1d 100644 --- a/targets.mk +++ b/targets.mk @@ -1,409 +1,575 @@ # ******** AUTOGENERATED by mktargets.py ******************** -01-flickr/FlickrRIA.swf: \ +./01-flickr/FlickrRIA.swf: \ 01-flickr/FlickrThumbnail.mxml \ 01-flickr/FlickrRIA.mxml $(MXMLC) 01-flickr/FlickrRIA.mxml \ - $(MXMLC_FLAGS) -l+=01-flickr \ - -l+=01-flickr -o 01-flickr/FlickrRIA.swf + $(MXMLC_FLAGS) \ + -l+=01-flickr \ + -l+=01-flickr \ + -sp+=01-flickr \ + -o 01-flickr/FlickrRIA.swf -01-flickr/FlickrThumbnail.swf: \ +./01-flickr/FlickrThumbnail.swf: \ 01-flickr/FlickrThumbnail.mxml \ 01-flickr/FlickrRIA.mxml $(MXMLC) 01-flickr/FlickrThumbnail.mxml \ - $(MXMLC_FLAGS) -l+=01-flickr \ - -l+=01-flickr -o 01-flickr/FlickrThumbnail.swf + $(MXMLC_FLAGS) \ + -l+=01-flickr \ + -l+=01-flickr \ + -sp+=01-flickr \ + -o 01-flickr/FlickrThumbnail.swf -02-shipping/PlainText.swf: \ +./02-shipping/PlainText.swf: \ 02-shipping/PlainText.mxml $(MXMLC) 02-shipping/PlainText.mxml \ - $(MXMLC_FLAGS) -l+=02-shipping \ - -l+=02-shipping -o 02-shipping/PlainText.swf + $(MXMLC_FLAGS) \ + -l+=02-shipping \ + -l+=02-shipping \ + -sp+=02-shipping \ + -o 02-shipping/PlainText.swf -03a1-binding-and-modeling/YahooWeather.swf: \ +./03a1-binding-and-modeling/YahooWeather.swf: \ 03a1-binding-and-modeling/YahooWeather.mxml $(MXMLC) 03a1-binding-and-modeling/YahooWeather.mxml \ - $(MXMLC_FLAGS) -l+=03a1-binding-and-modeling \ - -l+=03a1-binding-and-modeling -o 03a1-binding-and-modeling/YahooWeather.swf + $(MXMLC_FLAGS) \ + -l+=03a1-binding-and-modeling \ + -l+=03a1-binding-and-modeling \ + -sp+=03a1-binding-and-modeling \ + -o 03a1-binding-and-modeling/YahooWeather.swf -03a2-crud-dynamic/CRUDDynamic.swf: \ +./03a2-crud-dynamic/CRUDDynamic.swf: \ 03a2-crud-dynamic/CRUDDynamic.mxml \ 03a2-crud-dynamic/dyn-employees.as $(MXMLC) 03a2-crud-dynamic/CRUDDynamic.mxml \ - $(MXMLC_FLAGS) -l+=03a2-crud-dynamic \ - -l+=03a2-crud-dynamic -o 03a2-crud-dynamic/CRUDDynamic.swf + $(MXMLC_FLAGS) \ + -l+=03a2-crud-dynamic \ + -l+=03a2-crud-dynamic \ + -sp+=03a2-crud-dynamic \ + -o 03a2-crud-dynamic/CRUDDynamic.swf -03a3-crud-static/CRUDStatic.swf: \ +./03a3-crud-static/CRUDStatic.swf: \ 03a3-crud-static/CRUDStatic.mxml \ 03a3-crud-static/static-employees.as $(MXMLC) 03a3-crud-static/CRUDStatic.mxml \ - $(MXMLC_FLAGS) -l+=03a3-crud-static \ - -l+=03a3-crud-static -o 03a3-crud-static/CRUDStatic.swf + $(MXMLC_FLAGS) \ + -l+=03a3-crud-static \ + -l+=03a3-crud-static \ + -sp+=03a3-crud-static \ + -o 03a3-crud-static/CRUDStatic.swf -03a4-external-interface/Main.swf: \ +./03a4-external-interface/Main.swf: \ 03a4-external-interface/Main.mxml $(MXMLC) 03a4-external-interface/Main.mxml \ - $(MXMLC_FLAGS) -l+=03a4-external-interface \ - -l+=03a4-external-interface -o 03a4-external-interface/Main.swf + $(MXMLC_FLAGS) \ + -l+=03a4-external-interface \ + -l+=03a4-external-interface \ + -sp+=03a4-external-interface \ + -o 03a4-external-interface/Main.swf -03a5-local-connections/BasicTaskReceiver.swf: \ +./03a5-local-connections/BasicTaskReceiver.swf: \ 03a5-local-connections/BasicTaskReceiver.mxml \ 03a5-local-connections/TaskSender.mxml $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml \ - $(MXMLC_FLAGS) -l+=03a5-local-connections \ - -l+=03a5-local-connections -o 03a5-local-connections/BasicTaskReceiver.swf + $(MXMLC_FLAGS) \ + -l+=03a5-local-connections \ + -l+=03a5-local-connections \ + -sp+=03a5-local-connections \ + -o 03a5-local-connections/BasicTaskReceiver.swf -03a5-local-connections/TaskSender.swf: \ +./03a5-local-connections/TaskSender.swf: \ 03a5-local-connections/BasicTaskReceiver.mxml \ 03a5-local-connections/TaskSender.mxml $(MXMLC) 03a5-local-connections/TaskSender.mxml \ - $(MXMLC_FLAGS) -l+=03a5-local-connections \ - -l+=03a5-local-connections -o 03a5-local-connections/TaskSender.swf + $(MXMLC_FLAGS) \ + -l+=03a5-local-connections \ + -l+=03a5-local-connections \ + -sp+=03a5-local-connections \ + -o 03a5-local-connections/TaskSender.swf -03a6-shared-objects/SharedObjectExample.swf: \ +./03a6-shared-objects/SharedObjectExample.swf: \ 03a6-shared-objects/SharedObjectExample.mxml $(MXMLC) 03a6-shared-objects/SharedObjectExample.mxml \ - $(MXMLC_FLAGS) -l+=03a6-shared-objects \ - -l+=03a6-shared-objects -o 03a6-shared-objects/SharedObjectExample.swf + $(MXMLC_FLAGS) \ + -l+=03a6-shared-objects \ + -l+=03a6-shared-objects \ + -sp+=03a6-shared-objects \ + -o 03a6-shared-objects/SharedObjectExample.swf -03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf: \ +./03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf: \ 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml $(MXMLC) 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.mxml \ - $(MXMLC_FLAGS) -l+=03a7-validation-and-formatting \ - -l+=03a7-validation-and-formatting -o 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf + $(MXMLC_FLAGS) \ + -l+=03a7-validation-and-formatting \ + -l+=03a7-validation-and-formatting \ + -sp+=03a7-validation-and-formatting \ + -o 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf -03b-handling-events/TwitterTimeline.swf: \ +./03b-handling-events/TwitterTimeline.swf: \ 03b-handling-events/TwitterTimeline.mxml $(MXMLC) 03b-handling-events/TwitterTimeline.mxml \ - $(MXMLC_FLAGS) -l+=03b-handling-events \ - -l+=03b-handling-events -o 03b-handling-events/TwitterTimeline.swf + $(MXMLC_FLAGS) \ + -l+=03b-handling-events \ + -l+=03b-handling-events \ + -sp+=03b-handling-events \ + -o 03b-handling-events/TwitterTimeline.swf -03b1-event-listeners/VBoxDemo.swf: \ +./03b1-event-listeners/VBoxDemo.swf: \ 03b1-event-listeners/VBoxDemo.mxml $(MXMLC) 03b1-event-listeners/VBoxDemo.mxml \ - $(MXMLC_FLAGS) -l+=03b1-event-listeners \ - -l+=03b1-event-listeners -o 03b1-event-listeners/VBoxDemo.swf + $(MXMLC_FLAGS) \ + -l+=03b1-event-listeners \ + -l+=03b1-event-listeners \ + -sp+=03b1-event-listeners \ + -o 03b1-event-listeners/VBoxDemo.swf -03b2-event-propagation/DemoApplication.swf: \ +./03b2-event-propagation/DemoApplication.swf: \ 03b2-event-propagation/DemoApplication.mxml $(MXMLC) 03b2-event-propagation/DemoApplication.mxml \ - $(MXMLC_FLAGS) -l+=03b2-event-propagation \ - -l+=03b2-event-propagation -o 03b2-event-propagation/DemoApplication.swf + $(MXMLC_FLAGS) \ + -l+=03b2-event-propagation \ + -l+=03b2-event-propagation \ + -sp+=03b2-event-propagation \ + -o 03b2-event-propagation/DemoApplication.swf -03b3-simple-ui-event/Example1.swf: \ +./03b3-simple-ui-event/Example1.swf: \ 03b3-simple-ui-event/Example1.mxml \ 03b3-simple-ui-event/Example2.mxml $(MXMLC) 03b3-simple-ui-event/Example1.mxml \ - $(MXMLC_FLAGS) -l+=03b3-simple-ui-event \ - -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example1.swf + $(MXMLC_FLAGS) \ + -l+=03b3-simple-ui-event \ + -l+=03b3-simple-ui-event \ + -sp+=03b3-simple-ui-event \ + -o 03b3-simple-ui-event/Example1.swf -03b3-simple-ui-event/Example2.swf: \ +./03b3-simple-ui-event/Example2.swf: \ 03b3-simple-ui-event/Example1.mxml \ 03b3-simple-ui-event/Example2.mxml $(MXMLC) 03b3-simple-ui-event/Example2.mxml \ - $(MXMLC_FLAGS) -l+=03b3-simple-ui-event \ - -l+=03b3-simple-ui-event -o 03b3-simple-ui-event/Example2.swf + $(MXMLC_FLAGS) \ + -l+=03b3-simple-ui-event \ + -l+=03b3-simple-ui-event \ + -sp+=03b3-simple-ui-event \ + -o 03b3-simple-ui-event/Example2.swf -03c1-application-container/Demo.swf: \ +./03c1-application-container/Demo.swf: \ 03c1-application-container/Demo.mxml $(MXMLC) 03c1-application-container/Demo.mxml \ - $(MXMLC_FLAGS) -l+=03c1-application-container \ - -l+=03c1-application-container -o 03c1-application-container/Demo.swf + $(MXMLC_FLAGS) \ + -l+=03c1-application-container \ + -l+=03c1-application-container \ + -sp+=03c1-application-container \ + -o 03c1-application-container/Demo.swf -03c2-box-model/HBoxExample.swf: \ +./03c2-box-model/HBoxExample.swf: \ 03c2-box-model/VBoxExample.mxml \ 03c2-box-model/VBoxHBoxCombo.mxml \ 03c2-box-model/HBoxExample.mxml $(MXMLC) 03c2-box-model/HBoxExample.mxml \ - $(MXMLC_FLAGS) -l+=03c2-box-model \ - -l+=03c2-box-model -o 03c2-box-model/HBoxExample.swf + $(MXMLC_FLAGS) \ + -l+=03c2-box-model \ + -l+=03c2-box-model \ + -sp+=03c2-box-model \ + -o 03c2-box-model/HBoxExample.swf -03c2-box-model/VBoxExample.swf: \ +./03c2-box-model/VBoxExample.swf: \ 03c2-box-model/VBoxExample.mxml \ 03c2-box-model/VBoxHBoxCombo.mxml \ 03c2-box-model/HBoxExample.mxml $(MXMLC) 03c2-box-model/VBoxExample.mxml \ - $(MXMLC_FLAGS) -l+=03c2-box-model \ - -l+=03c2-box-model -o 03c2-box-model/VBoxExample.swf + $(MXMLC_FLAGS) \ + -l+=03c2-box-model \ + -l+=03c2-box-model \ + -sp+=03c2-box-model \ + -o 03c2-box-model/VBoxExample.swf -03c2-box-model/VBoxHBoxCombo.swf: \ +./03c2-box-model/VBoxHBoxCombo.swf: \ 03c2-box-model/VBoxExample.mxml \ 03c2-box-model/VBoxHBoxCombo.mxml \ 03c2-box-model/HBoxExample.mxml $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml \ - $(MXMLC_FLAGS) -l+=03c2-box-model \ - -l+=03c2-box-model -o 03c2-box-model/VBoxHBoxCombo.swf + $(MXMLC_FLAGS) \ + -l+=03c2-box-model \ + -l+=03c2-box-model \ + -sp+=03c2-box-model \ + -o 03c2-box-model/VBoxHBoxCombo.swf -03c3-canvas-absolute/Example.swf: \ +./03c3-canvas-absolute/Example.swf: \ 03c3-canvas-absolute/Example.mxml $(MXMLC) 03c3-canvas-absolute/Example.mxml \ - $(MXMLC_FLAGS) -l+=03c3-canvas-absolute \ - -l+=03c3-canvas-absolute -o 03c3-canvas-absolute/Example.swf + $(MXMLC_FLAGS) \ + -l+=03c3-canvas-absolute \ + -l+=03c3-canvas-absolute \ + -sp+=03c3-canvas-absolute \ + -o 03c3-canvas-absolute/Example.swf -03c4-canvas-relative/Photo.swf: \ +./03c4-canvas-relative/Photo.swf: \ 03c4-canvas-relative/Photo.mxml $(MXMLC) 03c4-canvas-relative/Photo.mxml \ - $(MXMLC_FLAGS) -l+=03c4-canvas-relative \ - -l+=03c4-canvas-relative -o 03c4-canvas-relative/Photo.swf + $(MXMLC_FLAGS) \ + -l+=03c4-canvas-relative \ + -l+=03c4-canvas-relative \ + -sp+=03c4-canvas-relative \ + -o 03c4-canvas-relative/Photo.swf -03c5-combined-layout/Combined.swf: \ +./03c5-combined-layout/Combined.swf: \ 03c5-combined-layout/Combined.mxml $(MXMLC) 03c5-combined-layout/Combined.mxml \ - $(MXMLC_FLAGS) -l+=03c5-combined-layout \ - -l+=03c5-combined-layout -o 03c5-combined-layout/Combined.swf + $(MXMLC_FLAGS) \ + -l+=03c5-combined-layout \ + -l+=03c5-combined-layout \ + -sp+=03c5-combined-layout \ + -o 03c5-combined-layout/Combined.swf -03c6-form/CommentForm.swf: \ +./03c6-form/CommentForm.swf: \ 03c6-form/CommentForm.mxml $(MXMLC) 03c6-form/CommentForm.mxml \ - $(MXMLC_FLAGS) -l+=03c6-form \ - -l+=03c6-form -o 03c6-form/CommentForm.swf + $(MXMLC_FLAGS) \ + -l+=03c6-form \ + -l+=03c6-form \ + -sp+=03c6-form \ + -o 03c6-form/CommentForm.swf -03c7-mxml-vs-as3/WithAs3.swf: \ +./03c7-mxml-vs-as3/WithAs3.swf: \ 03c7-mxml-vs-as3/WithAs3.mxml \ 03c7-mxml-vs-as3/WithMxml.mxml $(MXMLC) 03c7-mxml-vs-as3/WithAs3.mxml \ - $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 \ - -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithAs3.swf + $(MXMLC_FLAGS) \ + -l+=03c7-mxml-vs-as3 \ + -l+=03c7-mxml-vs-as3 \ + -sp+=03c7-mxml-vs-as3 \ + -o 03c7-mxml-vs-as3/WithAs3.swf -03c7-mxml-vs-as3/WithMxml.swf: \ +./03c7-mxml-vs-as3/WithMxml.swf: \ 03c7-mxml-vs-as3/WithMxml.mxml \ 03c7-mxml-vs-as3/WithAs3.mxml $(MXMLC) 03c7-mxml-vs-as3/WithMxml.mxml \ - $(MXMLC_FLAGS) -l+=03c7-mxml-vs-as3 \ - -l+=03c7-mxml-vs-as3 -o 03c7-mxml-vs-as3/WithMxml.swf + $(MXMLC_FLAGS) \ + -l+=03c7-mxml-vs-as3 \ + -l+=03c7-mxml-vs-as3 \ + -sp+=03c7-mxml-vs-as3 \ + -o 03c7-mxml-vs-as3/WithMxml.swf -03c8-panel/Photo.swf: \ +./03c8-panel/Photo.swf: \ 03c8-panel/Photo.mxml $(MXMLC) 03c8-panel/Photo.mxml \ - $(MXMLC_FLAGS) -l+=03c8-panel \ - -l+=03c8-panel -o 03c8-panel/Photo.swf + $(MXMLC_FLAGS) \ + -l+=03c8-panel \ + -l+=03c8-panel \ + -sp+=03c8-panel \ + -o 03c8-panel/Photo.swf -03d1-datagrid/DataGridExample.swf: \ +./03d1-datagrid/DataGridExample.swf: \ 03d1-datagrid/DataGridExample.mxml \ 03d1-datagrid/RequestParams.as \ 03d1-datagrid/DataGridApp.as $(MXMLC) 03d1-datagrid/DataGridExample.mxml \ - $(MXMLC_FLAGS) -l+=03d1-datagrid \ - -l+=03d1-datagrid -o 03d1-datagrid/DataGridExample.swf + $(MXMLC_FLAGS) \ + -l+=03d1-datagrid \ + -l+=03d1-datagrid \ + -sp+=03d1-datagrid \ + -o 03d1-datagrid/DataGridExample.swf -03d2-item-renderers/HBoxWeatherDisplay.swf: \ +./03d2-item-renderers/HBoxWeatherDisplay.swf: \ 03d2-item-renderers/HBoxWeatherDisplay.mxml \ 03d2-item-renderers/WeatherDisplay.mxml $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml \ - $(MXMLC_FLAGS) -l+=03d2-item-renderers \ - -l+=03d2-item-renderers -o 03d2-item-renderers/HBoxWeatherDisplay.swf + $(MXMLC_FLAGS) \ + -l+=03d2-item-renderers \ + -l+=03d2-item-renderers \ + -sp+=03d2-item-renderers \ + -o 03d2-item-renderers/HBoxWeatherDisplay.swf -03d2-item-renderers/WeatherDisplay.swf: \ +./03d2-item-renderers/WeatherDisplay.swf: \ 03d2-item-renderers/HBoxWeatherDisplay.mxml \ 03d2-item-renderers/WeatherDisplay.mxml $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml \ - $(MXMLC_FLAGS) -l+=03d2-item-renderers \ - -l+=03d2-item-renderers -o 03d2-item-renderers/WeatherDisplay.swf + $(MXMLC_FLAGS) \ + -l+=03d2-item-renderers \ + -l+=03d2-item-renderers \ + -sp+=03d2-item-renderers \ + -o 03d2-item-renderers/WeatherDisplay.swf -03d3-lists/HorizontalListControl.swf: \ +./03d3-lists/HorizontalListControl.swf: \ 03d3-lists/ListControl.mxml \ 03d3-lists/HorizontalListControl.mxml $(MXMLC) 03d3-lists/HorizontalListControl.mxml \ - $(MXMLC_FLAGS) -l+=03d3-lists \ - -l+=03d3-lists -o 03d3-lists/HorizontalListControl.swf + $(MXMLC_FLAGS) \ + -l+=03d3-lists \ + -l+=03d3-lists \ + -sp+=03d3-lists \ + -o 03d3-lists/HorizontalListControl.swf -03d3-lists/ListControl.swf: \ +./03d3-lists/ListControl.swf: \ 03d3-lists/ListControl.mxml \ 03d3-lists/HorizontalListControl.mxml $(MXMLC) 03d3-lists/ListControl.mxml \ - $(MXMLC_FLAGS) -l+=03d3-lists \ - -l+=03d3-lists -o 03d3-lists/ListControl.swf + $(MXMLC_FLAGS) \ + -l+=03d3-lists \ + -l+=03d3-lists \ + -sp+=03d3-lists \ + -o 03d3-lists/ListControl.swf -03d4-tilelist/TileListExample.swf: \ +./03d4-tilelist/TileListExample.swf: \ 03d4-tilelist/TileListExample.mxml $(MXMLC) 03d4-tilelist/TileListExample.mxml \ - $(MXMLC_FLAGS) -l+=03d4-tilelist \ - -l+=03d4-tilelist -o 03d4-tilelist/TileListExample.swf + $(MXMLC_FLAGS) \ + -l+=03d4-tilelist \ + -l+=03d4-tilelist \ + -sp+=03d4-tilelist \ + -o 03d4-tilelist/TileListExample.swf -03e1-accordion/Recipe.swf: \ +./03e1-accordion/Recipe.swf: \ 03e1-accordion/Recipe.mxml $(MXMLC) 03e1-accordion/Recipe.mxml \ - $(MXMLC_FLAGS) -l+=03e1-accordion \ - -l+=03e1-accordion -o 03e1-accordion/Recipe.swf + $(MXMLC_FLAGS) \ + -l+=03e1-accordion \ + -l+=03e1-accordion \ + -sp+=03e1-accordion \ + -o 03e1-accordion/Recipe.swf -03e2-tabbar-linkbar/LinkBar.swf: \ +./03e2-tabbar-linkbar/LinkBar.swf: \ 03e2-tabbar-linkbar/LinkBar.mxml \ 03e2-tabbar-linkbar/TabBarDemo.mxml $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml \ - $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar \ - -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/LinkBar.swf + $(MXMLC_FLAGS) \ + -l+=03e2-tabbar-linkbar \ + -l+=03e2-tabbar-linkbar \ + -sp+=03e2-tabbar-linkbar \ + -o 03e2-tabbar-linkbar/LinkBar.swf -03e2-tabbar-linkbar/TabBarDemo.swf: \ +./03e2-tabbar-linkbar/TabBarDemo.swf: \ 03e2-tabbar-linkbar/LinkBar.mxml \ 03e2-tabbar-linkbar/TabBarDemo.mxml $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml \ - $(MXMLC_FLAGS) -l+=03e2-tabbar-linkbar \ - -l+=03e2-tabbar-linkbar -o 03e2-tabbar-linkbar/TabBarDemo.swf + $(MXMLC_FLAGS) \ + -l+=03e2-tabbar-linkbar \ + -l+=03e2-tabbar-linkbar \ + -sp+=03e2-tabbar-linkbar \ + -o 03e2-tabbar-linkbar/TabBarDemo.swf -03e3-tabnavigator/Shopping.swf: \ +./03e3-tabnavigator/Shopping.swf: \ 03e3-tabnavigator/Shopping.mxml $(MXMLC) 03e3-tabnavigator/Shopping.mxml \ - $(MXMLC_FLAGS) -l+=03e3-tabnavigator \ - -l+=03e3-tabnavigator -o 03e3-tabnavigator/Shopping.swf + $(MXMLC_FLAGS) \ + -l+=03e3-tabnavigator \ + -l+=03e3-tabnavigator \ + -sp+=03e3-tabnavigator \ + -o 03e3-tabnavigator/Shopping.swf -03e4-viewstack/ViewStackDemo.swf: \ +./03e4-viewstack/ViewStackDemo.swf: \ 03e4-viewstack/ViewStackDemo.mxml $(MXMLC) 03e4-viewstack/ViewStackDemo.mxml \ - $(MXMLC_FLAGS) -l+=03e4-viewstack \ - -l+=03e4-viewstack -o 03e4-viewstack/ViewStackDemo.swf + $(MXMLC_FLAGS) \ + -l+=03e4-viewstack \ + -l+=03e4-viewstack \ + -sp+=03e4-viewstack \ + -o 03e4-viewstack/ViewStackDemo.swf -03f1-custom-components/MainForm.swf: \ +./03f1-custom-components/MainForm.swf: \ 03f1-custom-components/MainForm.mxml \ 03f1-custom-components/com/mycustom/components/TextInputEmail.as $(MXMLC) 03f1-custom-components/MainForm.mxml \ - $(MXMLC_FLAGS) -l+=03f1-custom-components \ - -l+=03f1-custom-components -o 03f1-custom-components/MainForm.swf + $(MXMLC_FLAGS) \ + -l+=03f1-custom-components \ + -l+=03f1-custom-components \ + -sp+=03f1-custom-components \ + -o 03f1-custom-components/MainForm.swf -03f2-code-behind/CodeBehindDisplay.swf: \ +./03f2-code-behind/CodeBehindDisplay.swf: \ 03f2-code-behind/CodeBehindDisplay.mxml \ 03f2-code-behind/CodeExample.mxml \ 03f2-code-behind/as_components/ComboBoxCodeBehind.as $(MXMLC) 03f2-code-behind/CodeBehindDisplay.mxml \ - $(MXMLC_FLAGS) -l+=03f2-code-behind \ - -l+=03f2-code-behind -o 03f2-code-behind/CodeBehindDisplay.swf + $(MXMLC_FLAGS) \ + -l+=03f2-code-behind \ + -l+=03f2-code-behind \ + -sp+=03f2-code-behind \ + -o 03f2-code-behind/CodeBehindDisplay.swf -03f2-code-behind/CodeExample.swf: \ +./03f2-code-behind/CodeExample.swf: \ 03f2-code-behind/CodeBehindDisplay.mxml \ 03f2-code-behind/CodeExample.mxml \ 03f2-code-behind/as_components/ComboBoxCodeBehind.as $(MXMLC) 03f2-code-behind/CodeExample.mxml \ - $(MXMLC_FLAGS) -l+=03f2-code-behind \ - -l+=03f2-code-behind -o 03f2-code-behind/CodeExample.swf + $(MXMLC_FLAGS) \ + -l+=03f2-code-behind \ + -l+=03f2-code-behind \ + -sp+=03f2-code-behind \ + -o 03f2-code-behind/CodeExample.swf -03f3-composite-component/ComponentForm.swf: \ +./03f3-composite-component/ComponentForm.swf: \ 03f3-composite-component/components/ComboBoxDateEntry.mxml \ 03f3-composite-component/ComponentForm.mxml \ 03f3-composite-component/components/ComboBoxMonths.mxml $(MXMLC) 03f3-composite-component/ComponentForm.mxml \ - $(MXMLC_FLAGS) -l+=03f3-composite-component \ - -l+=03f3-composite-component -o 03f3-composite-component/ComponentForm.swf + $(MXMLC_FLAGS) \ + -l+=03f3-composite-component \ + -l+=03f3-composite-component \ + -sp+=03f3-composite-component \ + -o 03f3-composite-component/ComponentForm.swf -03f4-multiple-composite-components/Main.swf: \ +./03f4-multiple-composite-components/Main.swf: \ 03f4-multiple-composite-components/Main.mxml \ 03f4-multiple-composite-components/components/ComboBoxDateEntry.mxml \ 03f4-multiple-composite-components/components/ComboBoxMonths.as $(MXMLC) 03f4-multiple-composite-components/Main.mxml \ - $(MXMLC_FLAGS) -l+=03f4-multiple-composite-components \ - -l+=03f4-multiple-composite-components -o 03f4-multiple-composite-components/Main.swf + $(MXMLC_FLAGS) \ + -l+=03f4-multiple-composite-components \ + -l+=03f4-multiple-composite-components \ + -sp+=03f4-multiple-composite-components \ + -o 03f4-multiple-composite-components/Main.swf -03f5-mxml/MainForm.swf: \ +./03f5-mxml/MainForm.swf: \ 03f5-mxml/MainForm.mxml \ 03f5-mxml/components/ComboBoxMonths.mxml $(MXMLC) 03f5-mxml/MainForm.mxml \ - $(MXMLC_FLAGS) -l+=03f5-mxml \ - -l+=03f5-mxml -o 03f5-mxml/MainForm.swf + $(MXMLC_FLAGS) \ + -l+=03f5-mxml \ + -l+=03f5-mxml \ + -sp+=03f5-mxml \ + -o 03f5-mxml/MainForm.swf -03g1-debugging/Debugging.swf: \ +./03g1-debugging/Debugging.swf: \ 03g1-debugging/Debugging.mxml $(MXMLC) 03g1-debugging/Debugging.mxml \ - $(MXMLC_FLAGS) -l+=03g1-debugging \ - -l+=03g1-debugging -o 03g1-debugging/Debugging.swf + $(MXMLC_FLAGS) \ + -l+=03g1-debugging \ + -l+=03g1-debugging \ + -sp+=03g1-debugging \ + -o 03g1-debugging/Debugging.swf -custom-03d1-datagrid/Snarf.swf: \ +./custom-03d1-datagrid/Snarf.swf: \ custom-03d1-datagrid/Snarf.mxml \ custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml \ - $(MXMLC_FLAGS) -l+=custom-03d1-datagrid \ - -l+=custom-03d1-datagrid -o custom-03d1-datagrid/Snarf.swf + $(MXMLC_FLAGS) \ + -l+=custom-03d1-datagrid \ + -l+=custom-03d1-datagrid \ + -sp+=custom-03d1-datagrid \ + -o custom-03d1-datagrid/Snarf.swf -custom-03d2-item-renderers/HBoxWeatherDisplay.swf: \ +./custom-03d2-item-renderers/HBoxWeatherDisplay.swf: \ custom-03d2-item-renderers/HBoxWeatherDisplay.mxml \ custom-03d2-item-renderers/WeatherDisplay.mxml \ custom-03d2-item-renderers/WeatherApp.as $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml \ - $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers \ - -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/HBoxWeatherDisplay.swf + $(MXMLC_FLAGS) \ + -l+=custom-03d2-item-renderers \ + -l+=custom-03d2-item-renderers \ + -sp+=custom-03d2-item-renderers \ + -o custom-03d2-item-renderers/HBoxWeatherDisplay.swf -custom-03d2-item-renderers/WeatherDisplay.swf: \ +./custom-03d2-item-renderers/WeatherDisplay.swf: \ custom-03d2-item-renderers/HBoxWeatherDisplay.mxml \ custom-03d2-item-renderers/WeatherDisplay.mxml \ custom-03d2-item-renderers/WeatherApp.as $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml \ - $(MXMLC_FLAGS) -l+=custom-03d2-item-renderers \ - -l+=custom-03d2-item-renderers -o custom-03d2-item-renderers/WeatherDisplay.swf + $(MXMLC_FLAGS) \ + -l+=custom-03d2-item-renderers \ + -l+=custom-03d2-item-renderers \ + -sp+=custom-03d2-item-renderers \ + -o custom-03d2-item-renderers/WeatherDisplay.swf -custom-03d3-lists/ListControl.swf: \ +./custom-03d3-lists/ListControl.swf: \ custom-03d3-lists/ListControl.mxml \ custom-03d3-lists/listapp.css \ custom-03d3-lists/ListApp.as $(MXMLC) custom-03d3-lists/ListControl.mxml \ - $(MXMLC_FLAGS) -l+=custom-03d3-lists \ - -l+=custom-03d3-lists -o custom-03d3-lists/ListControl.swf + $(MXMLC_FLAGS) \ + -l+=custom-03d3-lists \ + -l+=custom-03d3-lists \ + -sp+=custom-03d3-lists \ + -o custom-03d3-lists/ListControl.swf -custom-03d4-tilelist/TileListExample.swf: \ +./custom-03d4-tilelist/TileListExample.swf: \ custom-03d4-tilelist/TileListExample.mxml \ custom-03d4-tilelist/tilelist.css \ custom-03d4-tilelist/TileListApp.as $(MXMLC) custom-03d4-tilelist/TileListExample.mxml \ - $(MXMLC_FLAGS) -l+=custom-03d4-tilelist \ - -l+=custom-03d4-tilelist -o custom-03d4-tilelist/TileListExample.swf + $(MXMLC_FLAGS) \ + -l+=custom-03d4-tilelist \ + -l+=custom-03d4-tilelist \ + -sp+=custom-03d4-tilelist \ + -o custom-03d4-tilelist/TileListExample.swf -custom-03g1-debugging/Debugging.swf: \ +./custom-03g1-debugging/Debugging.swf: \ custom-03g1-debugging/Debugging.mxml \ custom-03g1-debugging/me/DebuggingApp.as $(MXMLC) custom-03g1-debugging/Debugging.mxml \ - $(MXMLC_FLAGS) -l+=custom-03g1-debugging \ - -l+=custom-03g1-debugging -o custom-03g1-debugging/Debugging.swf + $(MXMLC_FLAGS) \ + -l+=custom-03g1-debugging \ + -l+=custom-03g1-debugging \ + -sp+=custom-03g1-debugging \ + -o custom-03g1-debugging/Debugging.swf -custom-03g1-debugging/me/tests/TestDebugging.swf: \ +./custom-03g1-debugging/me/tests/TestDebugging.swf: \ custom-03g1-debugging/me/tests/TestDebugging.as $(MXMLC) custom-03g1-debugging/me/tests/TestDebugging.as \ - $(MXMLC_FLAGS) -l+=custom-03g1-debugging/me/tests \ - -l+=custom-03g1-debugging -o custom-03g1-debugging/me/tests/TestDebugging.swf + $(MXMLC_FLAGS) \ + -l+=custom-03g1-debugging/me/tests \ + -l+=custom-03g1-debugging \ + -sp+=custom-03g1-debugging \ + -o custom-03g1-debugging/me/tests/TestDebugging.swf + + +./custom-03g1-debugging/me/tests/TestFoo.swf: \ + custom-03g1-debugging/me/tests/TestFoo.as + $(MXMLC) custom-03g1-debugging/me/tests/TestFoo.as \ + $(MXMLC_FLAGS) \ + -l+=custom-03g1-debugging/me/tests \ + -l+=custom-03g1-debugging \ + -sp+=custom-03g1-debugging \ + -o custom-03g1-debugging/me/tests/TestFoo.swf From 22ba96dbdd7a9e7deff8c0a23b95028e09380855 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 24 Feb 2010 21:03:28 -0500 Subject: [PATCH 88/92] more futzing with flexunit 4, about to switch from GNU make to Ant --- .../me/tests/TestDebugging.as | 27 ---- custom-03g1-debugging/me/tests/TestFoo.as | 19 --- custom-03g1-debugging/me/tests/TestSuite.as | 18 +++ .../me/tests/cases/TestCase01.as | 17 +++ mktargets.py | 37 +++--- targets.mk | 125 +++++++++++++++--- 6 files changed, 167 insertions(+), 76 deletions(-) delete mode 100644 custom-03g1-debugging/me/tests/TestDebugging.as delete mode 100644 custom-03g1-debugging/me/tests/TestFoo.as create mode 100644 custom-03g1-debugging/me/tests/TestSuite.as create mode 100644 custom-03g1-debugging/me/tests/cases/TestCase01.as diff --git a/custom-03g1-debugging/me/tests/TestDebugging.as b/custom-03g1-debugging/me/tests/TestDebugging.as deleted file mode 100644 index c20c801..0000000 --- a/custom-03g1-debugging/me/tests/TestDebugging.as +++ /dev/null @@ -1,27 +0,0 @@ -package me.tests -{ - //import me.DebuggingApp; - - import mx.core.Application; - //import org.flexunit.listeners.UIListener; - //import org.flexunit.runner.TestRunnerBase; - //import org.flexunit.runner.FlexUnitCore; - - public class TestDebugging extends Application - { - //public var uiListener:TestRunnerBase; - //private var core:FlexUnitCore; - - public function TestDebugging():void - { - this.addEventListener("creationComplete", runMe); - } - - public function runMe():void - { - //core = new FlexUnitCore(); - //core.addListener(new UIListener(uiListener)); - //core.run(Debugging); - } - } -} diff --git a/custom-03g1-debugging/me/tests/TestFoo.as b/custom-03g1-debugging/me/tests/TestFoo.as deleted file mode 100644 index c10ddad..0000000 --- a/custom-03g1-debugging/me/tests/TestFoo.as +++ /dev/null @@ -1,19 +0,0 @@ -package me.tests -{ - import mx.core.Application; - import mx.controls.Alert; - import flash.events.Event; - - public class TestFoo extends Application - { - public function TestFoo():void - { - this.addEventListener("creationComplete", alertPoo); - } - - public function alertPoo(event:Event):void - { - Alert.show("poo!"); - } - } -} diff --git a/custom-03g1-debugging/me/tests/TestSuite.as b/custom-03g1-debugging/me/tests/TestSuite.as new file mode 100644 index 0000000..8f65d31 --- /dev/null +++ b/custom-03g1-debugging/me/tests/TestSuite.as @@ -0,0 +1,18 @@ +package me.tests +{ + import me.tests.cases.TestCase01; + + import mx.core.Application; + import org.flexunit.Assert; + + [Suite] + [RunWith("org.flexunit.runners.Suite")] + public class TestSuite extends Application + { + public var t1:TestCase01; + + public function TestSuite():void + { + } + } +} diff --git a/custom-03g1-debugging/me/tests/cases/TestCase01.as b/custom-03g1-debugging/me/tests/cases/TestCase01.as new file mode 100644 index 0000000..5649303 --- /dev/null +++ b/custom-03g1-debugging/me/tests/cases/TestCase01.as @@ -0,0 +1,17 @@ +package me.tests.cases +{ + import org.flexunit.Assert; + + public class TestCase01 + { + public function TestCase01():void + { + } + + [Test] + public function testMathIsRealistic():void + { + Assert.assertEquals(12, 2 * 6); + } + } +} diff --git a/mktargets.py b/mktargets.py index 6a805c6..f82fe93 100755 --- a/mktargets.py +++ b/mktargets.py @@ -12,6 +12,7 @@ from os.path import join as pathjoin, relpath, dirname, \ HERE = dirname(abspath(__file__)) +FLEXUNIT = pathjoin('$(HOME)', '.local', 'share', 'flexunit') AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + ('*' * 20)).format(basename(sys.argv[0])) DEP_SEP = ' \\\n ' @@ -22,7 +23,9 @@ RULE_FMT = '\\\n\t'.join([ '$(MXMLC_FLAGS) ', '-l+={parent_dir} ', '-l+={package_base} ', + '-l+={flexunit} ', '-sp+={package_base} ', + '-sp+={flexunit} ', '-o {target}', ]) @@ -49,7 +52,7 @@ class TargetMaker(object): def make(self): self._glob_for_top_level_mxml_targets() - self._find_test_class_targets() + self._find_test_suite_targets() self._write_out_targets() def _glob_for_top_level_mxml_targets(self): @@ -57,16 +60,16 @@ class TargetMaker(object): for mxml in glob.glob(pattern): self._add_target_from_mxml(mxml) - def _find_test_class_targets(self): + def _find_test_suite_targets(self): for dirpath, dirnames, filenames in os.walk(HERE): filter_generated_dirs(dirnames) for filename in filenames: - if is_test_class(filename): - test_class = pathjoin(dirpath, filename) - self._add_target_from_test_class(test_class) + if is_test_suite(filename): + test_suite = pathjoin(dirpath, filename) + self._add_target_from_test_suite(test_suite) - def _add_target_from_test_class(self, test_class): - rel_class = relpath(test_class, HERE) + def _add_target_from_test_suite(self, test_suite): + rel_class = relpath(test_suite, HERE) as_swf = re.sub('(.*)\.as$', '\\1.swf', rel_class) self.targets[as_swf] = set([rel_class]) @@ -80,7 +83,7 @@ class TargetMaker(object): basedir = dirname(rel_mxml) for dirpath, dirnames, filenames in os.walk(basedir): filter_generated_dirs(dirnames) - filter_test_classes(filenames) + filter_test_suitees(filenames) for filename in filenames: if ext(filename) in self._source_fileexts: rel_source = relpath(pathjoin(dirpath, filename), HERE) @@ -96,9 +99,12 @@ class TargetMaker(object): rel_target = './' + target.lstrip('./') print(TARGET_FMT.format(target=rel_target, - deps=DEP_SEP.join(deps)), file=self.outstream) + deps=DEP_SEP.join(deps), + ), file=self.outstream + ) print(RULE_FMT.format(**pattern_rule_kwargs) + - RULE_SEP, file=self.outstream) + RULE_SEP, file=self.outstream + ) def _get_deps_for_target(self, target): deps = [] @@ -120,7 +126,8 @@ class TargetMaker(object): primary_dep=primary_dep, parent_dir=dirname(primary_dep), package_base=primary_dep.strip('./').split(pathsep)[0], - target=target + target=target, + flexunit=FLEXUNIT ) return ret @@ -140,16 +147,16 @@ def filter_generated_dirs(dirnames): dirnames[:] = list(ifilter(None, dirnames)) -def filter_test_classes(filenames): +def filter_test_suitees(filenames): for i, filename in enumerate(filenames[:]): - if is_test_class(filename): + if is_test_suite(filename): filenames[i] = None filenames[:] = list(ifilter(None, filenames)) -def is_test_class(filename): +def is_test_suite(filename): base_filename = basename(filename) - return base_filename.startswith('Test') and \ + return base_filename.startswith('TestSuite') and \ ext(filename) == '.as' diff --git a/targets.mk b/targets.mk index b169b1d..6584ce4 100644 --- a/targets.mk +++ b/targets.mk @@ -6,7 +6,9 @@ $(MXMLC_FLAGS) \ -l+=01-flickr \ -l+=01-flickr \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=01-flickr \ + -sp+=$(HOME)/.local/share/flexunit \ -o 01-flickr/FlickrRIA.swf @@ -17,7 +19,9 @@ $(MXMLC_FLAGS) \ -l+=01-flickr \ -l+=01-flickr \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=01-flickr \ + -sp+=$(HOME)/.local/share/flexunit \ -o 01-flickr/FlickrThumbnail.swf @@ -27,7 +31,9 @@ $(MXMLC_FLAGS) \ -l+=02-shipping \ -l+=02-shipping \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=02-shipping \ + -sp+=$(HOME)/.local/share/flexunit \ -o 02-shipping/PlainText.swf @@ -37,7 +43,9 @@ $(MXMLC_FLAGS) \ -l+=03a1-binding-and-modeling \ -l+=03a1-binding-and-modeling \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a1-binding-and-modeling \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a1-binding-and-modeling/YahooWeather.swf @@ -48,7 +56,9 @@ $(MXMLC_FLAGS) \ -l+=03a2-crud-dynamic \ -l+=03a2-crud-dynamic \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a2-crud-dynamic \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a2-crud-dynamic/CRUDDynamic.swf @@ -59,7 +69,9 @@ $(MXMLC_FLAGS) \ -l+=03a3-crud-static \ -l+=03a3-crud-static \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a3-crud-static \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a3-crud-static/CRUDStatic.swf @@ -69,7 +81,9 @@ $(MXMLC_FLAGS) \ -l+=03a4-external-interface \ -l+=03a4-external-interface \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a4-external-interface \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a4-external-interface/Main.swf @@ -80,7 +94,9 @@ $(MXMLC_FLAGS) \ -l+=03a5-local-connections \ -l+=03a5-local-connections \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a5-local-connections \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a5-local-connections/BasicTaskReceiver.swf @@ -91,7 +107,9 @@ $(MXMLC_FLAGS) \ -l+=03a5-local-connections \ -l+=03a5-local-connections \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a5-local-connections \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a5-local-connections/TaskSender.swf @@ -101,7 +119,9 @@ $(MXMLC_FLAGS) \ -l+=03a6-shared-objects \ -l+=03a6-shared-objects \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a6-shared-objects \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a6-shared-objects/SharedObjectExample.swf @@ -111,7 +131,9 @@ $(MXMLC_FLAGS) \ -l+=03a7-validation-and-formatting \ -l+=03a7-validation-and-formatting \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03a7-validation-and-formatting \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03a7-validation-and-formatting/ValidatorsandFormattersExampleWithAreaCodeLookup.swf @@ -121,7 +143,9 @@ $(MXMLC_FLAGS) \ -l+=03b-handling-events \ -l+=03b-handling-events \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03b-handling-events \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03b-handling-events/TwitterTimeline.swf @@ -131,7 +155,9 @@ $(MXMLC_FLAGS) \ -l+=03b1-event-listeners \ -l+=03b1-event-listeners \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03b1-event-listeners \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03b1-event-listeners/VBoxDemo.swf @@ -141,7 +167,9 @@ $(MXMLC_FLAGS) \ -l+=03b2-event-propagation \ -l+=03b2-event-propagation \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03b2-event-propagation \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03b2-event-propagation/DemoApplication.swf @@ -152,7 +180,9 @@ $(MXMLC_FLAGS) \ -l+=03b3-simple-ui-event \ -l+=03b3-simple-ui-event \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03b3-simple-ui-event \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03b3-simple-ui-event/Example1.swf @@ -163,7 +193,9 @@ $(MXMLC_FLAGS) \ -l+=03b3-simple-ui-event \ -l+=03b3-simple-ui-event \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03b3-simple-ui-event \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03b3-simple-ui-event/Example2.swf @@ -173,7 +205,9 @@ $(MXMLC_FLAGS) \ -l+=03c1-application-container \ -l+=03c1-application-container \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c1-application-container \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c1-application-container/Demo.swf @@ -185,7 +219,9 @@ $(MXMLC_FLAGS) \ -l+=03c2-box-model \ -l+=03c2-box-model \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c2-box-model \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c2-box-model/HBoxExample.swf @@ -197,7 +233,9 @@ $(MXMLC_FLAGS) \ -l+=03c2-box-model \ -l+=03c2-box-model \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c2-box-model \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c2-box-model/VBoxExample.swf @@ -209,7 +247,9 @@ $(MXMLC_FLAGS) \ -l+=03c2-box-model \ -l+=03c2-box-model \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c2-box-model \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c2-box-model/VBoxHBoxCombo.swf @@ -219,7 +259,9 @@ $(MXMLC_FLAGS) \ -l+=03c3-canvas-absolute \ -l+=03c3-canvas-absolute \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c3-canvas-absolute \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c3-canvas-absolute/Example.swf @@ -229,7 +271,9 @@ $(MXMLC_FLAGS) \ -l+=03c4-canvas-relative \ -l+=03c4-canvas-relative \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c4-canvas-relative \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c4-canvas-relative/Photo.swf @@ -239,7 +283,9 @@ $(MXMLC_FLAGS) \ -l+=03c5-combined-layout \ -l+=03c5-combined-layout \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c5-combined-layout \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c5-combined-layout/Combined.swf @@ -249,7 +295,9 @@ $(MXMLC_FLAGS) \ -l+=03c6-form \ -l+=03c6-form \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c6-form \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c6-form/CommentForm.swf @@ -260,7 +308,9 @@ $(MXMLC_FLAGS) \ -l+=03c7-mxml-vs-as3 \ -l+=03c7-mxml-vs-as3 \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c7-mxml-vs-as3 \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c7-mxml-vs-as3/WithAs3.swf @@ -271,7 +321,9 @@ $(MXMLC_FLAGS) \ -l+=03c7-mxml-vs-as3 \ -l+=03c7-mxml-vs-as3 \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c7-mxml-vs-as3 \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c7-mxml-vs-as3/WithMxml.swf @@ -281,7 +333,9 @@ $(MXMLC_FLAGS) \ -l+=03c8-panel \ -l+=03c8-panel \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03c8-panel \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03c8-panel/Photo.swf @@ -293,7 +347,9 @@ $(MXMLC_FLAGS) \ -l+=03d1-datagrid \ -l+=03d1-datagrid \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03d1-datagrid \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03d1-datagrid/DataGridExample.swf @@ -304,7 +360,9 @@ $(MXMLC_FLAGS) \ -l+=03d2-item-renderers \ -l+=03d2-item-renderers \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03d2-item-renderers \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03d2-item-renderers/HBoxWeatherDisplay.swf @@ -315,7 +373,9 @@ $(MXMLC_FLAGS) \ -l+=03d2-item-renderers \ -l+=03d2-item-renderers \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03d2-item-renderers \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03d2-item-renderers/WeatherDisplay.swf @@ -326,7 +386,9 @@ $(MXMLC_FLAGS) \ -l+=03d3-lists \ -l+=03d3-lists \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03d3-lists \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03d3-lists/HorizontalListControl.swf @@ -337,7 +399,9 @@ $(MXMLC_FLAGS) \ -l+=03d3-lists \ -l+=03d3-lists \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03d3-lists \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03d3-lists/ListControl.swf @@ -347,7 +411,9 @@ $(MXMLC_FLAGS) \ -l+=03d4-tilelist \ -l+=03d4-tilelist \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03d4-tilelist \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03d4-tilelist/TileListExample.swf @@ -357,7 +423,9 @@ $(MXMLC_FLAGS) \ -l+=03e1-accordion \ -l+=03e1-accordion \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03e1-accordion \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03e1-accordion/Recipe.swf @@ -368,7 +436,9 @@ $(MXMLC_FLAGS) \ -l+=03e2-tabbar-linkbar \ -l+=03e2-tabbar-linkbar \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03e2-tabbar-linkbar \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03e2-tabbar-linkbar/LinkBar.swf @@ -379,7 +449,9 @@ $(MXMLC_FLAGS) \ -l+=03e2-tabbar-linkbar \ -l+=03e2-tabbar-linkbar \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03e2-tabbar-linkbar \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03e2-tabbar-linkbar/TabBarDemo.swf @@ -389,7 +461,9 @@ $(MXMLC_FLAGS) \ -l+=03e3-tabnavigator \ -l+=03e3-tabnavigator \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03e3-tabnavigator \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03e3-tabnavigator/Shopping.swf @@ -399,7 +473,9 @@ $(MXMLC_FLAGS) \ -l+=03e4-viewstack \ -l+=03e4-viewstack \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03e4-viewstack \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03e4-viewstack/ViewStackDemo.swf @@ -410,7 +486,9 @@ $(MXMLC_FLAGS) \ -l+=03f1-custom-components \ -l+=03f1-custom-components \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03f1-custom-components \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03f1-custom-components/MainForm.swf @@ -422,7 +500,9 @@ $(MXMLC_FLAGS) \ -l+=03f2-code-behind \ -l+=03f2-code-behind \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03f2-code-behind \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03f2-code-behind/CodeBehindDisplay.swf @@ -434,7 +514,9 @@ $(MXMLC_FLAGS) \ -l+=03f2-code-behind \ -l+=03f2-code-behind \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03f2-code-behind \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03f2-code-behind/CodeExample.swf @@ -446,7 +528,9 @@ $(MXMLC_FLAGS) \ -l+=03f3-composite-component \ -l+=03f3-composite-component \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03f3-composite-component \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03f3-composite-component/ComponentForm.swf @@ -458,7 +542,9 @@ $(MXMLC_FLAGS) \ -l+=03f4-multiple-composite-components \ -l+=03f4-multiple-composite-components \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03f4-multiple-composite-components \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03f4-multiple-composite-components/Main.swf @@ -469,7 +555,9 @@ $(MXMLC_FLAGS) \ -l+=03f5-mxml \ -l+=03f5-mxml \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03f5-mxml \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03f5-mxml/MainForm.swf @@ -479,7 +567,9 @@ $(MXMLC_FLAGS) \ -l+=03g1-debugging \ -l+=03g1-debugging \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=03g1-debugging \ + -sp+=$(HOME)/.local/share/flexunit \ -o 03g1-debugging/Debugging.swf @@ -490,7 +580,9 @@ $(MXMLC_FLAGS) \ -l+=custom-03d1-datagrid \ -l+=custom-03d1-datagrid \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=custom-03d1-datagrid \ + -sp+=$(HOME)/.local/share/flexunit \ -o custom-03d1-datagrid/Snarf.swf @@ -502,7 +594,9 @@ $(MXMLC_FLAGS) \ -l+=custom-03d2-item-renderers \ -l+=custom-03d2-item-renderers \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=custom-03d2-item-renderers \ + -sp+=$(HOME)/.local/share/flexunit \ -o custom-03d2-item-renderers/HBoxWeatherDisplay.swf @@ -514,7 +608,9 @@ $(MXMLC_FLAGS) \ -l+=custom-03d2-item-renderers \ -l+=custom-03d2-item-renderers \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=custom-03d2-item-renderers \ + -sp+=$(HOME)/.local/share/flexunit \ -o custom-03d2-item-renderers/WeatherDisplay.swf @@ -526,7 +622,9 @@ $(MXMLC_FLAGS) \ -l+=custom-03d3-lists \ -l+=custom-03d3-lists \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=custom-03d3-lists \ + -sp+=$(HOME)/.local/share/flexunit \ -o custom-03d3-lists/ListControl.swf @@ -538,38 +636,35 @@ $(MXMLC_FLAGS) \ -l+=custom-03d4-tilelist \ -l+=custom-03d4-tilelist \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=custom-03d4-tilelist \ + -sp+=$(HOME)/.local/share/flexunit \ -o custom-03d4-tilelist/TileListExample.swf ./custom-03g1-debugging/Debugging.swf: \ custom-03g1-debugging/Debugging.mxml \ - custom-03g1-debugging/me/DebuggingApp.as + custom-03g1-debugging/me/DebuggingApp.as \ + custom-03g1-debugging/me/tests/cases/TestCase01.as $(MXMLC) custom-03g1-debugging/Debugging.mxml \ $(MXMLC_FLAGS) \ -l+=custom-03g1-debugging \ -l+=custom-03g1-debugging \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=custom-03g1-debugging \ + -sp+=$(HOME)/.local/share/flexunit \ -o custom-03g1-debugging/Debugging.swf -./custom-03g1-debugging/me/tests/TestDebugging.swf: \ - custom-03g1-debugging/me/tests/TestDebugging.as - $(MXMLC) custom-03g1-debugging/me/tests/TestDebugging.as \ +./custom-03g1-debugging/me/tests/TestSuite.swf: \ + custom-03g1-debugging/me/tests/TestSuite.as + $(MXMLC) custom-03g1-debugging/me/tests/TestSuite.as \ $(MXMLC_FLAGS) \ -l+=custom-03g1-debugging/me/tests \ -l+=custom-03g1-debugging \ + -l+=$(HOME)/.local/share/flexunit \ -sp+=custom-03g1-debugging \ - -o custom-03g1-debugging/me/tests/TestDebugging.swf - - -./custom-03g1-debugging/me/tests/TestFoo.swf: \ - custom-03g1-debugging/me/tests/TestFoo.as - $(MXMLC) custom-03g1-debugging/me/tests/TestFoo.as \ - $(MXMLC_FLAGS) \ - -l+=custom-03g1-debugging/me/tests \ - -l+=custom-03g1-debugging \ - -sp+=custom-03g1-debugging \ - -o custom-03g1-debugging/me/tests/TestFoo.swf + -sp+=$(HOME)/.local/share/flexunit \ + -o custom-03g1-debugging/me/tests/TestSuite.swf From 171ddc7c596a2ce293b8d976239cd965c0848020 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 24 Feb 2010 22:23:19 -0500 Subject: [PATCH 89/92] playing around with ant --- .gitignore | 1 + build.xml | 61 +++++++++++++++++ mkbuildxml.py | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 244 insertions(+) create mode 100644 build.xml create mode 100755 mkbuildxml.py diff --git a/.gitignore b/.gitignore index b970591..7a51d17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.pyc *.swf *.swc *.swf.cache diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..20c755c --- /dev/null +++ b/build.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mkbuildxml.py b/mkbuildxml.py new file mode 100755 index 0000000..268d93d --- /dev/null +++ b/mkbuildxml.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python +from __future__ import print_function + +import os +import re +import sys +import glob +from io import BytesIO +from fnmatch import fnmatch +from itertools import ifilter +from os.path import join as pathjoin, relpath, dirname, \ + abspath, basename, splitext, sep as pathsep + +import lxml.etree as ET + + +HERE = dirname(abspath(__file__)) +AUTOGEN_WARNING = ('').format(basename(sys.argv[0])) + +ROOT = BytesIO(''.join([_line.strip() for _line in """\ + + + + + + + + + +""".splitlines() if _line.strip()])) +# TARGET_FMT = '{target}:' + DEP_SEP + '{deps}' +# RULE_FMT = '\\\n\t'.join([ +# '\t$(MXMLC) {primary_dep} ', +# '$(MXMLC_FLAGS) ', +# '-l+={parent_dir} ', +# '-l+={package_base} ', +# '-l+={flexunit} ', +# '-sp+={package_base} ', +# '-sp+={flexunit} ', +# '-o {target}', +# ]) + + +def main(sysargs=sys.argv[:]): + build_xml = pathjoin(HERE, 'build.xml') + os.chmod(build_xml, 0600) + buildxml_maker = BuildXMLMaker(outstream=open(build_xml, 'wb')) + buildxml_maker.make() + os.chmod(build_xml, 0444) + return 0 + + +class BuildXMLMaker(object): + _to_glob = ( + pathjoin(HERE, '[0-9]*-*', '*.mxml'), + pathjoin(HERE, 'custom-*', '*.mxml'), + ) + _source_fileexts = ('.mxml', '.as', '.css') + + def __init__(self, outstream=sys.stdout): + self.outstream = outstream + self.targets = {'compc': {}, 'mxmlc': {}} + self.tree = ET.parse(ROOT) + self.root = self.tree.getroot() + self.build = self.tree.xpath('//target[@name="build"]')[0] + + def make(self): + self._glob_for_top_level_mxml_targets() + self._find_test_suite_targets() + self._write_out_targets() + + def _glob_for_top_level_mxml_targets(self): + for pattern in self._to_glob: + for mxml in glob.glob(pattern): + self._add_target_from_mxml(mxml) + + def _find_test_suite_targets(self): + for dirpath, dirnames, filenames in os.walk(HERE): + filter_generated_dirs(dirnames) + for filename in filenames: + if is_test_suite(filename): + test_suite = pathjoin(dirpath, filename) + self._add_target_from_test_suite(test_suite) + + def _add_target_from_test_suite(self, test_suite): + rel_class = relpath(test_suite, HERE) + self.targets['compc'][rel_class] = dict() + + def _add_target_from_mxml(self, mxml): + rel_mxml = relpath(mxml, HERE) + self.targets['mxmlc'][rel_mxml] = {} #dict(sources='') + self._add_deps_from_alt_source_file_extensions(rel_mxml) + + def _add_deps_from_alt_source_file_extensions(self, rel_mxml): + basedir = dirname(rel_mxml) + # sources = self.targets['mxmlc'][rel_mxml]['sources'] + + for dirpath, dirnames, filenames in os.walk(basedir): + filter_generated_dirs(dirnames) + filter_test_suitees(filenames) + for filename in filenames: + if ext(filename) in self._source_fileexts: + rel_source = relpath(pathjoin(dirpath, filename), HERE) + # sources += (' ' + rel_source) + + def _write_out_targets(self): + for mxml in sorted(self.targets['mxmlc'].iterkeys()): + rel_target = './' + mxml.lstrip('./') + attrs = dict(file=rel_target, as3='true') + attrs.update(self.targets['mxmlc'][mxml]) + ET.SubElement(self.build, 'mxmlc', **attrs) + + for as3 in sorted(self.targets['compc'].iterkeys()): + rel_target = './' + as3.lstrip('./') + as_swf = re.sub('(.*).as$', '\\1.swf', rel_target) + attrs = {'output': as_swf, 'source-path': '${basedir}'} + attrs.update(self.targets['compc'][as3]) + ET.SubElement(self.build, 'compc', **attrs) + + print(ET.tostring(self.root, pretty_print=True), + file=self.outstream) + + def _get_deps_for_target(self, target): + deps = [] + for dep in reversed(sorted(list(self.targets[target]), key=ext)): + deps.append(dep) + return deps + + def _get_primary_dep(self, target, deps): + primary_dep = deps[0] + + for dependency in deps: + if fnmatch(target, namebase(dependency) + '.*'): + primary_dep = dependency + + return primary_dep + + def _get_pattern_rule_kwargs(self, primary_dep, target): + ret = dict( + primary_dep=primary_dep, + parent_dir=dirname(primary_dep), + package_base=primary_dep.strip('./').split(pathsep)[0], + target=target, + flexunit=FLEXUNIT + ) + return ret + + +def ext(filename): + return splitext(filename)[-1] + + +def namebase(filename): + return splitext(filename)[0] + + +def filter_generated_dirs(dirnames): + for i, directory in enumerate(dirnames[:]): + if directory == 'generated': + dirnames[i] = None + dirnames[:] = list(ifilter(None, dirnames)) + + +def filter_test_suitees(filenames): + for i, filename in enumerate(filenames[:]): + if is_test_suite(filename): + filenames[i] = None + filenames[:] = list(ifilter(None, filenames)) + + +def is_test_suite(filename): + base_filename = basename(filename) + return base_filename.startswith('TestSuite') and \ + ext(filename) == '.as' + + +if __name__ == '__main__': + sys.exit(main()) + +# vim:filetype=python From 099ac36cbe079f1e1a6c808949a2da978c9118fb Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 24 Feb 2010 22:27:20 -0500 Subject: [PATCH 90/92] yet more ant tweaking --- build.xml | 2 +- mkbuildxml.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.xml b/build.xml index 20c755c..794587a 100644 --- a/build.xml +++ b/build.xml @@ -55,7 +55,7 @@ - + diff --git a/mkbuildxml.py b/mkbuildxml.py index 268d93d..55bffd3 100755 --- a/mkbuildxml.py +++ b/mkbuildxml.py @@ -115,7 +115,7 @@ class BuildXMLMaker(object): for as3 in sorted(self.targets['compc'].iterkeys()): rel_target = './' + as3.lstrip('./') as_swf = re.sub('(.*).as$', '\\1.swf', rel_target) - attrs = {'output': as_swf, 'source-path': '${basedir}'} + attrs = dict(output=as_swf) attrs.update(self.targets['compc'][as3]) ET.SubElement(self.build, 'compc', **attrs) From 0544f8f67440b6566d367a0346e00d13d14798a9 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 1 Mar 2010 12:49:32 -0500 Subject: [PATCH 91/92] adding option for compiling to swf 9, ignoring all generated dirs --- .gitignore | 2 +- Makefile | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7a51d17..32c69e6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ *.swf *.swc *.swf.cache -*/generated +*generated diff --git a/Makefile b/Makefile index 8cf1bb9..78c8e91 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,11 @@ ifdef DEBUG else MXMLC_FLAGS ?= -warnings -strict endif + +ifdef OLD + MXMLC_FLAGS += -target-player 9.0.0 +endif + MXMLC_FLAGS += -l+=$(HOME)/.local/share/flexunit From c3a2ffae984308b2928d45e6ffc2974499f158d3 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Wed, 3 Mar 2010 14:58:17 -0500 Subject: [PATCH 92/92] more futzing with ant crap --- build.xml | 19 +++++++++++++-- mkbuildxml.py | 64 +++++++++++++++++++++++++++++---------------------- 2 files changed, 53 insertions(+), 30 deletions(-) diff --git a/build.xml b/build.xml index 794587a..7d4cae9 100644 --- a/build.xml +++ b/build.xml @@ -1,7 +1,7 @@ - + @@ -55,7 +55,22 @@ - + + + + + + + + + + + + + + + + diff --git a/mkbuildxml.py b/mkbuildxml.py index 55bffd3..3ba5989 100755 --- a/mkbuildxml.py +++ b/mkbuildxml.py @@ -18,35 +18,35 @@ HERE = dirname(abspath(__file__)) AUTOGEN_WARNING = ('').format(basename(sys.argv[0])) -ROOT = BytesIO(''.join([_line.strip() for _line in """\ - - - - - - - - +ROOT = ''.join([_line.strip() for _line in """\ + + + + + + + + + + + + + + + + + + -""".splitlines() if _line.strip()])) -# TARGET_FMT = '{target}:' + DEP_SEP + '{deps}' -# RULE_FMT = '\\\n\t'.join([ -# '\t$(MXMLC) {primary_dep} ', -# '$(MXMLC_FLAGS) ', -# '-l+={parent_dir} ', -# '-l+={package_base} ', -# '-l+={flexunit} ', -# '-sp+={package_base} ', -# '-sp+={flexunit} ', -# '-o {target}', -# ]) +""".splitlines() if _line.strip()]) def main(sysargs=sys.argv[:]): build_xml = pathjoin(HERE, 'build.xml') os.chmod(build_xml, 0600) - buildxml_maker = BuildXMLMaker(outstream=open(build_xml, 'wb')) + buildxml_maker = \ + BuildXMLMaker(project_name=sysargs[1], outstream=open(build_xml, 'wb')) buildxml_maker.make() os.chmod(build_xml, 0444) return 0 @@ -59,10 +59,10 @@ class BuildXMLMaker(object): ) _source_fileexts = ('.mxml', '.as', '.css') - def __init__(self, outstream=sys.stdout): + def __init__(self, project_name='%PROJECT%', outstream=sys.stdout): self.outstream = outstream self.targets = {'compc': {}, 'mxmlc': {}} - self.tree = ET.parse(ROOT) + self.tree = ET.parse(BytesIO(ROOT.format(PROJECT_NAME=project_name))) self.root = self.tree.getroot() self.build = self.tree.xpath('//target[@name="build"]')[0] @@ -86,7 +86,7 @@ class BuildXMLMaker(object): def _add_target_from_test_suite(self, test_suite): rel_class = relpath(test_suite, HERE) - self.targets['compc'][rel_class] = dict() + self.targets['compc'][rel_class] = {} def _add_target_from_mxml(self, mxml): rel_mxml = relpath(mxml, HERE) @@ -115,9 +115,17 @@ class BuildXMLMaker(object): for as3 in sorted(self.targets['compc'].iterkeys()): rel_target = './' + as3.lstrip('./') as_swf = re.sub('(.*).as$', '\\1.swf', rel_target) - attrs = dict(output=as_swf) + as_class = re.sub('(.*).as$', '\\1', rel_target).replace('/', '.') + class_parts = as_class.strip('./').split('.') + as_class = '.'.join(class_parts[1:]) + source_path_dir = './' + '/'.join(class_parts[:1]) + attrs = {'output': as_swf, 'include-classes': as_class} attrs.update(self.targets['compc'][as3]) - ET.SubElement(self.build, 'compc', **attrs) + compc_element = ET.SubElement(self.build, 'compc', **attrs) + ET.SubElement(compc_element, 'sp', + **{'path-element': source_path_dir}) + library_path = ET.SubElement(compc_element, 'l', + **{'dir': '${FLEXUNIT_HOME}', 'append': 'yes'}) print(ET.tostring(self.root, pretty_print=True), file=self.outstream)