Skip to content

Instantly share code, notes, and snippets.

@yarko
Last active August 29, 2015 14:04
Show Gist options
  • Save yarko/d7f3d0a92a9405e16ed6 to your computer and use it in GitHub Desktop.
Save yarko/d7f3d0a92a9405e16ed6 to your computer and use it in GitHub Desktop.
paper-in-dart example
# This from:
# Dart Editor version 1.6.0.dev_04_00 (DEV)
# Dart SDK version 1.6.0-dev.4.0
#
# Run on https://github.com/zoechi/so_question_24723315
# (modernizer-2.6.2 line commented out in index.html)
#
--- 1:25:04 PM Running pub upgrade on /Users/yak007/workspace/Angular/angular-dart/paper-in-dart-example ... ---
Resolving dependencies...
! analyzer 0.15.7 (overridden) (0.21.1 available)
angular 0.12.0 (0.13.0 available)
angular_node_bind 0.2.0
args 0.10.0+2 (0.12.0+1 available)
barback 0.13.0 (0.14.1+3 available)
! browser 0.10.0+2 (overridden)
> code_transformers 0.1.5 (was 0.1.4+2)
collection 0.9.4
core_elements 0.0.6
csslib 0.10.0+1
di 0.0.40 (2.0.1 available)
! html5lib 0.11.0+1 (overridden)
intl 0.9.10 (0.11.3 available)
> logging 0.9.2 (was 0.9.1+1)
observe 0.11.0-dev
paper_elements 0.0.1
> path 1.2.2 (was 1.2.1)
perf_api 0.0.8
! polymer 0.12.0-dev (overridden)
polymer_expressions 0.12.0-dev
quiver 0.18.2 (0.19.0-dev.3 available)
route_hierarchical 0.4.21
shadow_dom 0.10.0
smoke 0.1.0+1
> source_maps 0.9.3 (was 0.9.2+3)
stack_trace 0.9.3+2 (1.0.2 available)
string_scanner 0.0.3 (0.1.0 available)
template_binding 0.12.0-dev
> utf 0.9.0+1 (was 0.9.0)
! web_components 0.4.0 (overridden)
yaml 1.1.1 (2.0.0 available)
Warning: You are using these overridden dependencies:
! analyzer 0.15.7 (0.21.1 available)
! browser 0.10.0+2
! html5lib 0.11.0+1
! polymer 0.12.0-dev
! web_components 0.4.0
Downloading logging 0.9.2...
Downloading path 1.2.2...
Downloading source_maps 0.9.3...
Downloading code_transformers 0.1.5...
Downloading utf 0.9.0+1...
Changed 5 dependencies!
--- 1:25:26 PM Starting pub serve : paper-in-dart-example ---
[web] GET /index.html => blah|web/index.html
[web] GET /js/flowtype.js => blah|web/js/flowtype.js
[web] GET /js/main.js => blah|web/js/main.js
[web] GET /packages/web_components/platform.js => web_components|lib/platform.js
[web] GET /packages/web_components/dart_support.js => web_components|lib/dart_support.js
[web] GET /packages/polymer/src/js/polymer/polymer.js => polymer|lib/src/js/polymer/polymer.js
[web] GET /packages/shadow_dom/shadow_dom.debug.js => shadow_dom|lib/shadow_dom.debug.js
[web] GET /index.html_bootstrap.dart => blah|web/index.html_bootstrap.dart
[web] GET /packages/browser/dart.js => browser|lib/dart.js
[web] GET /packages/polymer/polymer.dart => polymer|lib/polymer.dart
[web] GET /packages/core_elements/core_selection.dart => core_elements|lib/core_selection.dart
[web] GET /packages/core_elements/core_selector.dart => core_elements|lib/core_selector.dart
[web] GET /packages/paper_elements/paper_ripple.dart => paper_elements|lib/paper_ripple.dart
[web] GET /packages/paper_elements/paper_tabs.dart => paper_elements|lib/paper_tabs.dart
[web] GET /packages/paper_elements/paper_tab.dart => paper_elements|lib/paper_tab.dart
[web] GET /Application.dart => blah|web/Application.dart
[web] GET /index.html_bootstrap_static_expressions.dart => blah|web/index.html_bootstrap_static_expressions.dart
[web] GET /packages/smoke/smoke.dart => smoke|lib/smoke.dart
[web] GET /index.html_bootstrap_static_metadata.dart => blah|web/index.html_bootstrap_static_metadata.dart
[web] GET /index.html_bootstrap_static_injector.dart => blah|web/index.html_bootstrap_static_injector.dart
[web] GET /packages/core_elements/core_header_panel.dart => core_elements|lib/core_header_panel.dart
[web] GET /packages/core_elements/core_toolbar.dart => core_elements|lib/core_toolbar.dart
[web] GET /packages/smoke/static.dart => smoke|lib/static.dart
[web] GET /packages/logging/logging.dart => logging|lib/logging.dart
[web] GET /packages/observe/observe.dart => observe|lib/observe.dart
[web] GET /packages/observe/src/dirty_check.dart => observe|lib/src/dirty_check.dart
[web] GET /packages/polymer_expressions/polymer_expressions.dart => polymer_expressions|lib/polymer_expressions.dart
[web] GET /packages/template_binding/template_binding.dart => template_binding|lib/template_binding.dart
[web] GET /packages/polymer/auto_binding.dart => polymer|lib/auto_binding.dart
[web] GET /packages/polymer/deserialize.dart => polymer|lib/deserialize.dart
[web] GET /packages/polymer/src/instance.dart => polymer|lib/src/instance.dart
[web] GET /packages/observe/html.dart => observe|lib/html.dart
[web] GET /packages/polymer/src/static_loader.dart => polymer|lib/src/static_loader.dart
[web] GET /packages/polymer/src/job.dart => polymer|lib/src/job.dart
[web] GET /packages/polymer/src/events.dart => polymer|lib/src/events.dart
[web] GET /packages/polymer/src/declaration.dart => polymer|lib/src/declaration.dart
[web] GET /packages/polymer/src/loader.dart => polymer|lib/src/loader.dart
[web] GET /packages/angular/angular.dart => angular|lib/angular.dart
[web] GET /packages/angular_node_bind/angular_node_bind.dart => angular_node_bind|lib/angular_node_bind.dart
[web] GET /packages/web_components/interop.dart => web_components|lib/interop.dart
[web] GET /packages/core_elements/src/common.dart => core_elements|lib/src/common.dart
[web] GET /packages/angular/application_factory_static.dart => angular|lib/application_factory_static.dart
[web] GET /Application_static_expressions.dart => blah|web/Application_static_expressions.dart
[web] GET /Application_static_metadata.dart => blah|web/Application_static_metadata.dart
[web] GET /Application_static_injector.dart => blah|web/Application_static_injector.dart
[web] GET /packages/smoke/src/implementation.dart => smoke|lib/src/implementation.dart
[web] GET /packages/angular/change_detection/change_detection.dart => angular|lib/change_detection/change_detection.dart
[web] GET /packages/smoke/src/common.dart => smoke|lib/src/common.dart
[web] GET /packages/angular/core/registry.dart => angular|lib/core/registry.dart
[web] GET /packages/di/di.dart => di|lib/di.dart
[web] GET /packages/angular/core_dom/module_internal.dart => angular|lib/core_dom/module_internal.dart
[web] GET /packages/angular/core/annotation_src.dart => angular|lib/core/annotation_src.dart
[web] GET /packages/angular/directive/module.dart => angular|lib/directive/module.dart
[web] GET /packages/angular/formatter/module_internal.dart => angular|lib/formatter/module_internal.dart
[web] GET /packages/angular/routing/module.dart => angular|lib/routing/module.dart
[web] GET /packages/angular/core/module_internal.dart => angular|lib/core/module_internal.dart
[web] GET /packages/angular/core/parser/parser.dart => angular|lib/core/parser/parser.dart
[web] GET /packages/perf_api/perf_api.dart => perf_api|lib/perf_api.dart
[web] GET /packages/angular/core/parser/dynamic_parser.dart => angular|lib/core/parser/dynamic_parser.dart
[web] GET /packages/di/static_injector.dart => di|lib/static_injector.dart
[web] GET /packages/angular/core/parser/lexer.dart => angular|lib/core/parser/lexer.dart
[web] GET /packages/route_hierarchical/client.dart => route_hierarchical|lib/client.dart
[web] GET /packages/angular/application.dart => angular|lib/application.dart
[web] GET /packages/collection/wrappers.dart => collection|lib/wrappers.dart
[web] GET /packages/observe/src/bindable.dart => observe|lib/src/bindable.dart
[web] GET /packages/observe/src/bind_property.dart => observe|lib/src/bind_property.dart
[web] GET /packages/observe/src/change_notifier.dart => observe|lib/src/change_notifier.dart
[web] GET /packages/observe/src/change_record.dart => observe|lib/src/change_record.dart
[web] GET /packages/observe/src/list_path_observer.dart => observe|lib/src/list_path_observer.dart
[web] GET /packages/observe/src/list_diff.dart => observe|lib/src/list_diff.dart
[web] GET /packages/observe/src/metadata.dart => observe|lib/src/metadata.dart
[web] GET /packages/observe/src/observable.dart => observe|lib/src/observable.dart
[web] GET /packages/observe/src/observable_box.dart => observe|lib/src/observable_box.dart
[web] GET /packages/observe/src/observable_list.dart => observe|lib/src/observable_list.dart
[web] GET /packages/observe/src/observable_map.dart => observe|lib/src/observable_map.dart
[web] GET /packages/observe/src/observer_transform.dart => observe|lib/src/observer_transform.dart
[web] GET /packages/observe/src/path_observer.dart => observe|lib/src/path_observer.dart
[web] GET /packages/observe/src/to_observable.dart => observe|lib/src/to_observable.dart
[web] GET /packages/polymer_expressions/eval.dart => polymer_expressions|lib/eval.dart
[web] GET /packages/polymer_expressions/expression.dart => polymer_expressions|lib/expression.dart
[web] GET /packages/polymer_expressions/parser.dart => polymer_expressions|lib/parser.dart
[web] GET /packages/polymer_expressions/src/globals.dart => polymer_expressions|lib/src/globals.dart
[web] GET /packages/template_binding/src/mustache_tokens.dart => template_binding|lib/src/mustache_tokens.dart
[web] GET /packages/template_binding/src/binding_delegate.dart => template_binding|lib/src/binding_delegate.dart
[web] GET /packages/template_binding/src/instance_binding_map.dart => template_binding|lib/src/instance_binding_map.dart
[web] GET /packages/template_binding/src/node.dart => template_binding|lib/src/node.dart
[web] GET /packages/template_binding/src/template.dart => template_binding|lib/src/template.dart
[web] GET /packages/template_binding/src/template_iterator.dart => template_binding|lib/src/template_iterator.dart
[web] GET /packages/angular/core/module.dart => angular|lib/core/module.dart
[web] GET /packages/angular/core/annotation.dart => angular|lib/core/annotation.dart
[web] GET /packages/angular/introspection.dart => angular|lib/introspection.dart
[web] GET /packages/angular/formatter/module.dart => angular|lib/formatter/module.dart
[web] GET /packages/angular/core/parser/syntax.dart => angular|lib/core/parser/syntax.dart
[web] GET /packages/di/src/provider.dart => di|lib/src/provider.dart
[web] GET /packages/di/key.dart => di|lib/key.dart
[web] GET /packages/di/src/injector.dart => di|lib/src/injector.dart
[web] GET /packages/di/src/module.dart => di|lib/src/module.dart
[web] GET /packages/di/src/errors.dart => di|lib/src/errors.dart
[web] GET /packages/angular/core_dom/dom_util.dart => angular|lib/core_dom/dom_util.dart
[web] GET /packages/angular/change_detection/watch_group.dart => angular|lib/change_detection/watch_group.dart
[web] GET /packages/angular/core_dom/animation.dart => angular|lib/core_dom/animation.dart
[web] GET /packages/angular/core/parser/parser_static.dart => angular|lib/core/parser/parser_static.dart
[web] GET /packages/angular/core/registry_static.dart => angular|lib/core/registry_static.dart
[web] GET /packages/angular/core_dom/common.dart => angular|lib/core_dom/common.dart
[web] GET /packages/angular/change_detection/dirty_checking_change_detector_static.dart => angular|lib/change_detection/dirty_checking_change_detector_static.dart
[web] GET /packages/angular/core_dom/view.dart => angular|lib/core_dom/view.dart
[web] GET /packages/angular/core_dom/view_factory.dart => angular|lib/core_dom/view_factory.dart
[web] GET /packages/angular/core_dom/compiler.dart => angular|lib/core_dom/compiler.dart
[web] GET /packages/angular/core_dom/cookies.dart => angular|lib/core_dom/cookies.dart
[web] GET /packages/angular/core_dom/directive.dart => angular|lib/core_dom/directive.dart
[web] GET /packages/angular/core_dom/directive_map.dart => angular|lib/core_dom/directive_map.dart
[web] GET /packages/angular/core_dom/element_binder.dart => angular|lib/core_dom/element_binder.dart
[web] GET /packages/angular/core_dom/event_handler.dart => angular|lib/core_dom/event_handler.dart
[web] GET /packages/angular/core_dom/element_binder_builder.dart => angular|lib/core_dom/element_binder_builder.dart
[web] GET /packages/angular/core_dom/http.dart => angular|lib/core_dom/http.dart
[web] GET /packages/angular/core_dom/mustache.dart => angular|lib/core_dom/mustache.dart
[web] GET /packages/angular/core_dom/node_cursor.dart => angular|lib/core_dom/node_cursor.dart
[web] GET /packages/angular/core_dom/web_platform.dart => angular|lib/core_dom/web_platform.dart
[web] GET /packages/angular/core_dom/selector.dart => angular|lib/core_dom/selector.dart
[web] GET /packages/angular/core_dom/shadow_dom_component_factory.dart => angular|lib/core_dom/shadow_dom_component_factory.dart
[web] GET /packages/angular/core_dom/shadowless_shadow_root.dart => angular|lib/core_dom/shadowless_shadow_root.dart
[web] GET /packages/angular/core_dom/tagging_compiler.dart => angular|lib/core_dom/tagging_compiler.dart
[web] GET /packages/angular/core_dom/tagging_view_factory.dart => angular|lib/core_dom/tagging_view_factory.dart
[web] GET /packages/angular/core_dom/template_cache.dart => angular|lib/core_dom/template_cache.dart
[web] GET /packages/angular/core_dom/transcluding_component_factory.dart => angular|lib/core_dom/transcluding_component_factory.dart
[web] GET /packages/angular/core_dom/tree_sanitizer.dart => angular|lib/core_dom/tree_sanitizer.dart
[web] GET /packages/angular/core_dom/walking_compiler.dart => angular|lib/core_dom/walking_compiler.dart
[web] GET /packages/angular/core_dom/ng_element.dart => angular|lib/core_dom/ng_element.dart
[web] GET /packages/angular/core_dom/static_keys.dart => angular|lib/core_dom/static_keys.dart
[web] GET /packages/intl/intl.dart => intl|lib/intl.dart
[web] GET /packages/angular/utils.dart => angular|lib/utils.dart
[web] GET /packages/angular/directive/ng_bind_template.dart => angular|lib/directive/ng_bind_template.dart
[web] GET /packages/angular/directive/a_href.dart => angular|lib/directive/a_href.dart
[web] GET /packages/angular/directive/ng_base_css.dart => angular|lib/directive/ng_base_css.dart
[web] GET /packages/angular/directive/ng_bind.dart => angular|lib/directive/ng_bind.dart
[web] GET /packages/angular/directive/ng_bind_html.dart => angular|lib/directive/ng_bind_html.dart
[web] GET /packages/angular/directive/ng_class.dart => angular|lib/directive/ng_class.dart
[web] GET /packages/angular/directive/ng_events.dart => angular|lib/directive/ng_events.dart
[web] GET /packages/angular/directive/ng_cloak.dart => angular|lib/directive/ng_cloak.dart
[web] GET /packages/angular/directive/ng_if.dart => angular|lib/directive/ng_if.dart
[web] GET /packages/angular/directive/ng_include.dart => angular|lib/directive/ng_include.dart
[web] GET /packages/angular/directive/ng_control.dart => angular|lib/directive/ng_control.dart
[web] GET /packages/angular/directive/ng_model.dart => angular|lib/directive/ng_model.dart
[web] GET /packages/angular/directive/ng_pluralize.dart => angular|lib/directive/ng_pluralize.dart
[web] GET /packages/angular/directive/ng_repeat.dart => angular|lib/directive/ng_repeat.dart
[web] GET /packages/angular/directive/ng_template.dart => angular|lib/directive/ng_template.dart
[web] GET /packages/angular/directive/ng_show_hide.dart => angular|lib/directive/ng_show_hide.dart
[web] GET /packages/angular/directive/ng_src_boolean.dart => angular|lib/directive/ng_src_boolean.dart
[web] GET /packages/angular/directive/ng_style.dart => angular|lib/directive/ng_style.dart
[web] GET /packages/angular/directive/ng_switch.dart => angular|lib/directive/ng_switch.dart
[web] GET /packages/angular/directive/ng_non_bindable.dart => angular|lib/directive/ng_non_bindable.dart
[web] GET /packages/angular/directive/ng_model_select.dart => angular|lib/directive/ng_model_select.dart
[web] GET /packages/angular/directive/ng_form.dart => angular|lib/directive/ng_form.dart
[web] GET /packages/angular/directive/ng_model_validators.dart => angular|lib/directive/ng_model_validators.dart
[web] GET /packages/angular/directive/ng_model_options.dart => angular|lib/directive/ng_model_options.dart
[web] GET /packages/angular/formatter/currency.dart => angular|lib/formatter/currency.dart
[web] GET /packages/angular/formatter/date.dart => angular|lib/formatter/date.dart
[web] GET /packages/angular/formatter/filter.dart => angular|lib/formatter/filter.dart
[web] GET /packages/angular/formatter/json.dart => angular|lib/formatter/json.dart
[web] GET /packages/angular/formatter/limit_to.dart => angular|lib/formatter/limit_to.dart
[web] GET /packages/angular/formatter/lowercase.dart => angular|lib/formatter/lowercase.dart
[web] GET /packages/angular/formatter/arrayify.dart => angular|lib/formatter/arrayify.dart
[web] GET /packages/angular/formatter/number.dart => angular|lib/formatter/number.dart
[web] GET /packages/angular/formatter/order_by.dart => angular|lib/formatter/order_by.dart
[web] GET /packages/angular/formatter/uppercase.dart => angular|lib/formatter/uppercase.dart
[web] GET /packages/angular/formatter/stringify.dart => angular|lib/formatter/stringify.dart
[web] GET /packages/angular/routing/routing.dart => angular|lib/routing/routing.dart
[web] GET /packages/angular/routing/ng_view.dart => angular|lib/routing/ng_view.dart
[web] GET /packages/angular/core/parser/utils.dart => angular|lib/core/parser/utils.dart
[web] GET /packages/angular/routing/ng_bind_route.dart => angular|lib/routing/ng_bind_route.dart
[web] GET /packages/angular/change_detection/dirty_checking_change_detector.dart => angular|lib/change_detection/dirty_checking_change_detector.dart
[web] GET /packages/angular/core/cache.dart => angular|lib/core/cache.dart
[web] GET /packages/angular/core/exception_handler.dart => angular|lib/core/exception_handler.dart
[web] GET /packages/angular/core/formatter.dart => angular|lib/core/formatter.dart
[web] GET /packages/angular/core/interpolate.dart => angular|lib/core/interpolate.dart
[web] GET /packages/angular/core/scope.dart => angular|lib/core/scope.dart
[web] GET /packages/angular/core/zone.dart => angular|lib/core/zone.dart
[web] GET /packages/di/src/error_helper.dart => di|lib/src/error_helper.dart
[web] GET /packages/di/src/base_injector.dart => di|lib/src/base_injector.dart
[web] GET /packages/angular/core/parser/dynamic_parser_impl.dart => angular|lib/core/parser/dynamic_parser_impl.dart
[web] GET /packages/angular/core/parser/eval.dart => angular|lib/core/parser/eval.dart
[web] GET /packages/angular/core/parser/characters.dart => angular|lib/core/parser/characters.dart
[web] GET /packages/angular/core/parser/tokens.dart => angular|lib/core/parser/tokens.dart
[web] GET /packages/di/annotations.dart => di|lib/annotations.dart
[web] GET /packages/route_hierarchical/src/utils.dart => route_hierarchical|lib/src/utils.dart
[web] GET /packages/route_hierarchical/link_matcher.dart => route_hierarchical|lib/link_matcher.dart
[web] GET /packages/route_hierarchical/click_handler.dart => route_hierarchical|lib/click_handler.dart
[web] GET /packages/route_hierarchical/url_matcher.dart => route_hierarchical|lib/url_matcher.dart
[web] GET /packages/route_hierarchical/url_template.dart => route_hierarchical|lib/url_template.dart
[web] GET /packages/intl/date_symbol_data_local.dart => intl|lib/date_symbol_data_local.dart
[web] GET /packages/angular/perf/module.dart => angular|lib/perf/module.dart
[web] GET /packages/angular/introspection_js.dart => angular|lib/introspection_js.dart
[web] GET /packages/collection/src/canonicalized_map.dart => collection|lib/src/canonicalized_map.dart
[web] GET /packages/collection/src/unmodifiable_wrappers.dart => collection|lib/src/unmodifiable_wrappers.dart
[web] GET /packages/polymer_expressions/async.dart => polymer_expressions|lib/async.dart
[web] GET /packages/polymer_expressions/filter.dart => polymer_expressions|lib/filter.dart
[web] GET /packages/polymer_expressions/visitor.dart => polymer_expressions|lib/visitor.dart
[web] GET /packages/polymer_expressions/tokenizer.dart => polymer_expressions|lib/tokenizer.dart
[web] GET /packages/di/src/injector_delagate.dart => di|lib/src/injector_delagate.dart
[web] GET /packages/angular/change_detection/linked_list.dart => angular|lib/change_detection/linked_list.dart
[web] GET /packages/angular/change_detection/ast.dart => angular|lib/change_detection/ast.dart
[web] GET /packages/angular/change_detection/prototype_map.dart => angular|lib/change_detection/prototype_map.dart
[web] GET /packages/intl/src/intl_helpers.dart => intl|lib/src/intl_helpers.dart
[web] GET /packages/intl/date_symbols.dart => intl|lib/date_symbols.dart
[web] GET /packages/intl/src/date_format_internal.dart => intl|lib/src/date_format_internal.dart
[web] GET /packages/intl/number_symbols.dart => intl|lib/number_symbols.dart
[web] GET /packages/route_hierarchical/route_handle.dart => route_hierarchical|lib/route_handle.dart
[web] GET /packages/angular/core/parser/unparser.dart => angular|lib/core/parser/unparser.dart
[web] GET /packages/intl/number_symbols_data.dart => intl|lib/number_symbols_data.dart
[web] GET /packages/intl/src/temporary_debugging.dart => intl|lib/src/temporary_debugging.dart
[web] GET /packages/intl/date_format.dart => intl|lib/date_format.dart
[web] GET /packages/intl/src/date_format_field.dart => intl|lib/src/date_format_field.dart
[web] GET /packages/intl/bidi_formatter.dart => intl|lib/bidi_formatter.dart
[web] GET /packages/intl/bidi_utils.dart => intl|lib/bidi_utils.dart
[web] GET /packages/intl/number_format.dart => intl|lib/number_format.dart
[web] GET /packages/collection/collection.dart => collection|lib/collection.dart
[web] GET /packages/angular/core/parser/eval_access.dart => angular|lib/core/parser/eval_access.dart
[web] GET /packages/angular/core/parser/eval_calls.dart => angular|lib/core/parser/eval_calls.dart
[web] GET /packages/angular/perf/dev_tools_timeline.dart => angular|lib/perf/dev_tools_timeline.dart
[web] GET /packages/collection/src/utils.dart => collection|lib/src/utils.dart
[web] GET /packages/intl/date_time_patterns.dart => intl|lib/date_time_patterns.dart
[web] GET /packages/collection/algorithms.dart => collection|lib/algorithms.dart
[web] GET /packages/collection/equality.dart => collection|lib/equality.dart
[web] GET /packages/collection/iterable_zip.dart => collection|lib/iterable_zip.dart
[web] GET /packages/collection/priority_queue.dart => collection|lib/priority_queue.dart
[web] GET /packages/intl/src/date_format_helpers.dart => intl|lib/src/date_format_helpers.dart
[web] GET /favicon.ico => Could not find asset blah|web/favicon.ico.
<!DOCTYPE html><!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--><!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--><!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--><!--[if gt IE 8]><!--><html class="no-js"><!--<![endif]--><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>GTHR</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Latest compiled and minified CSS -->
<!-- Optional theme -->
</head>
<body fullbleed="" layout="" vertical=""><link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"><link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"><style media="screen, projection" type="text/css"></style><script src="packages/web_components/platform.js"></script><script src="packages/web_components/dart_support.js"></script>
<!-- unminfied for debugging:
<link rel="import" href="src/js/polymer/layout.html">
<script src="src/js/polymer/polymer.concat.js"></script>
-->
<style shim-shadowdom="">
/*******************************
Flex Layout
*******************************/
html /deep/ [layout][horizontal], html /deep/ [layout][vertical] {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
html /deep/ [layout][horizontal][inline], html /deep/ [layout][vertical][inline] {
display: -ms-inline-flexbox;
display: -webkit-inline-flex;
display: inline-flex;
}
html /deep/ [layout][horizontal] {
-ms-flex-direction: row;
-webkit-flex-direction: row;
flex-direction: row;
}
html /deep/ [layout][horizontal][reverse] {
-ms-flex-direction: row-reverse;
-webkit-flex-direction: row-reverse;
flex-direction: row-reverse;
}
html /deep/ [layout][vertical] {
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
}
html /deep/ [layout][vertical][reverse] {
-ms-flex-direction: column-reverse;
-webkit-flex-direction: column-reverse;
flex-direction: column-reverse;
}
html /deep/ [layout][wrap] {
-ms-flex-wrap: wrap;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
}
html /deep/ [layout][wrap-reverse] {
-ms-flex-wrap: wrap-reverse;
-webkit-flex-wrap: wrap-reverse;
flex-wrap: wrap-reverse;
}
html /deep/ [flex] {
-ms-flex: 1;
-webkit-flex: 1;
flex: 1;
}
html /deep/ [flex][auto] {
-ms-flex: 1 1 auto;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
}
html /deep/ [flex][none] {
-ms-flex: none;
-webkit-flex: none;
flex: none;
}
html /deep/ [flex][one] {
-ms-flex: 1;
-webkit-flex: 1;
flex: 1;
}
html /deep/ [flex][two] {
-ms-flex: 2;
-webkit-flex: 2;
flex: 2;
}
html /deep/ [flex][three] {
-ms-flex: 3;
-webkit-flex: 3;
flex: 3;
}
html /deep/ [flex][four] {
-ms-flex: 4;
-webkit-flex: 4;
flex: 4;
}
html /deep/ [flex][five] {
-ms-flex: 5;
-webkit-flex: 5;
flex: 5;
}
html /deep/ [flex][six] {
-ms-flex: 6;
-webkit-flex: 6;
flex: 6;
}
html /deep/ [flex][seven] {
-ms-flex: 7;
-webkit-flex: 7;
flex: 7;
}
html /deep/ [flex][eight] {
-ms-flex: 8;
-webkit-flex: 8;
flex: 8;
}
html /deep/ [flex][nine] {
-ms-flex: 9;
-webkit-flex: 9;
flex: 9;
}
html /deep/ [flex][ten] {
-ms-flex: 10;
-webkit-flex: 10;
flex: 10;
}
html /deep/ [flex][eleven] {
-ms-flex: 11;
-webkit-flex: 11;
flex: 11;
}
html /deep/ [flex][twelve] {
-ms-flex: 12;
-webkit-flex: 12;
flex: 12;
}
/* alignment in cross axis */
html /deep/ [layout][start] {
-ms-flex-align: start;
-webkit-align-items: flex-start;
align-items: flex-start;
}
html /deep/ [layout][center] {
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
}
html /deep/ [layout][end] {
-ms-flex-align: end;
-webkit-align-items: flex-end;
align-items: flex-end;
}
/* alignment in main axis */
html /deep/ [layout][start-justified] {
-ms-flex-pack: start;
-webkit-justify-content: flex-start;
justify-content: flex-start;
}
html /deep/ [layout][center-justified] {
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
html /deep/ [layout][end-justified] {
-ms-flex-pack: end;
-webkit-justify-content: flex-end;
justify-content: flex-end;
}
html /deep/ [layout][around-justified] {
-ms-flex-pack: around;
-webkit-justify-content: space-around;
justify-content: space-around;
}
html /deep/ [layout][justified] {
-ms-flex-pack: justify;
-webkit-justify-content: space-between;
justify-content: space-between;
}
/* self alignment */
html /deep/ [self-start] {
-ms-align-self: flex-start;
-webkit-align-self: flex-start;
align-self: flex-start;
}
html /deep/ [self-center] {
-ms-align-self: center;
-webkit-align-self: center;
align-self: center;
}
html /deep/ [self-end] {
-ms-align-self: flex-end;
-webkit-align-self: flex-end;
align-self: flex-end;
}
html /deep/ [self-stretch] {
-ms-align-self: stretch;
-webkit-align-self: stretch;
align-self: stretch;
}
/*******************************
Other Layout
*******************************/
html /deep/ [block] {
display: block;
}
/* ie support for hidden */
html /deep/ [hidden] {
display: none !important;
}
html /deep/ [relative] {
position: relative;
}
html /deep/ [fit] {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
body[fullbleed] {
margin: 0;
height: 100vh;
}
/*******************************
Other
*******************************/
html /deep/ [segment], html /deep/ segment {
display: block;
position: relative;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
margin: 1em 0.5em;
padding: 1em;
background-color: white;
-webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
border-radius: 5px 5px 5px 5px;
}
</style><script src="packages/polymer/src/js/polymer/polymer.js"></script><script>
// TODO(sigmund): remove this script tag (dartbug.com/19650). This empty
// script tag is necessary to work around a bug in Chrome 36.
</script><script>
// This empty script is here to workaround issue
// https://github.com/dart-lang/core-elements/issues/11
</script>
<polymer-element name="core-selection" attributes="multi" hidden="">
<script>
Polymer('core-selection', {
/**
* If true, multiple selections are allowed.
*
* @attribute multi
* @type boolean
* @default false
*/
multi: false,
ready: function() {
this.clear();
},
clear: function() {
this.selection = [];
},
/**
* Retrieves the selected item(s).
* @method getSelection
* @returns Returns the selected item(s). If the multi property is true,
* getSelection will return an array, otherwise it will return
* the selected item or undefined if there is no selection.
*/
getSelection: function() {
return this.multi ? this.selection : this.selection[0];
},
/**
* Indicates if a given item is selected.
* @method isSelected
* @param {any} item The item whose selection state should be checked.
* @returns Returns true if `item` is selected.
*/
isSelected: function(item) {
return this.selection.indexOf(item) >= 0;
},
setItemSelected: function(item, isSelected) {
if (item !== undefined && item !== null) {
if (isSelected) {
this.selection.push(item);
} else {
var i = this.selection.indexOf(item);
if (i >= 0) {
this.selection.splice(i, 1);
}
}
this.fire("core-select", {isSelected: isSelected, item: item});
}
},
/**
* Set the selection state for a given `item`. If the multi property
* is true, then the selected state of `item` will be toggled; otherwise
* the `item` will be selected.
* @method select
* @param {any} item: The item to select.
*/
select: function(item) {
if (this.multi) {
this.toggle(item);
} else if (this.getSelection() !== item) {
this.setItemSelected(this.getSelection(), false);
this.setItemSelected(item, true);
}
},
/**
* Toggles the selection state for `item`.
* @method toggle
* @param {any} item: The item to toggle.
*/
toggle: function(item) {
this.setItemSelected(item, !this.isSelected(item));
}
});
</script>
</polymer-element>
<polymer-element name="core-selector" attributes="selected multi valueattr selectedClass selectedProperty selectedAttribute selectedItem selectedModel selectedIndex notap target itemsSelector activateEvent">
<template>
<core-selection id="selection" multi="{{multi}}" on-core-select="{{selectionSelect}}"></core-selection>
<content id="items" select="*"></content>
</template>
<script>
Polymer('core-selector', {
/**
* Gets or sets the selected element. Default to use the index
* of the item element.
*
* If you want a specific attribute value of the element to be
* used instead of index, set "valueattr" to that attribute name.
*
* Example:
*
* <core-selector valueattr="label" selected="foo">
* <div label="foo"></div>
* <div label="bar"></div>
* <div label="zot"></div>
* </core-selector>
*
* In multi-selection this should be an array of values.
*
* Example:
*
* <core-selector id="selector" valueattr="label" multi>
* <div label="foo"></div>
* <div label="bar"></div>
* <div label="zot"></div>
* </core-selector>
*
* this.$.selector.selected = ['foo', 'zot'];
*
* @attribute selected
* @type Object
* @default null
*/
selected: null,
/**
* If true, multiple selections are allowed.
*
* @attribute multi
* @type boolean
* @default false
*/
multi: false,
/**
* Specifies the attribute to be used for "selected" attribute.
*
* @attribute valueattr
* @type string
* @default 'name'
*/
valueattr: 'name',
/**
* Specifies the CSS class to be used to add to the selected element.
*
* @attribute selectedClass
* @type string
* @default 'core-selected'
*/
selectedClass: 'core-selected',
/**
* Specifies the property to be used to set on the selected element
* to indicate its active state.
*
* @attribute selectedProperty
* @type string
* @default ''
*/
selectedProperty: '',
/**
* Specifies the attribute to set on the selected element to indicate
* its active state.
*
* @attribute selectedAttribute
* @type string
* @default 'active'
*/
selectedAttribute: 'active',
/**
* Returns the currently selected element. In multi-selection this returns
* an array of selected elements.
*
* @attribute selectedItem
* @type Object
* @default null
*/
selectedItem: null,
/**
* In single selection, this returns the model associated with the
* selected element.
*
* @attribute selectedModel
* @type Object
* @default null
*/
selectedModel: null,
/**
* In single selection, this returns the selected index.
*
* @attribute selectedIndex
* @type number
* @default -1
*/
selectedIndex: -1,
/**
* The target element that contains items. If this is not set
* core-selector is the container.
*
* @attribute target
* @type Object
* @default null
*/
target: null,
/**
* This can be used to query nodes from the target node to be used for
* selection items. Note this only works if the 'target' property is set.
*
* Example:
*
* <core-selector target="{{$.myForm}}" itemsSelector="input[type=radio]"></core-selector>
* <form id="myForm">
* <label><input type="radio" name="color" value="red"> Red</label> <br>
* <label><input type="radio" name="color" value="green"> Green</label> <br>
* <label><input type="radio" name="color" value="blue"> Blue</label> <br>
* <p>color = {{color}}</p>
* </form>
*
* @attribute itemSelector
* @type string
* @default ''
*/
itemsSelector: '',
/**
* The event that would be fired from the item element to indicate
* it is being selected.
*
* @attribute activateEvent
* @type string
* @default 'tap'
*/
activateEvent: 'tap',
/**
* Set this to true to disallow changing the selection via the
* `activateEvent`.
*
* @attribute notap
* @type boolean
* @default false
*/
notap: false,
ready: function() {
this.activateListener = this.activateHandler.bind(this);
this.observer = new MutationObserver(this.updateSelected.bind(this));
if (!this.target) {
this.target = this;
}
},
get items() {
if (!this.target) {
return [];
}
var nodes = this.target !== this ? (this.itemsSelector ?
this.target.querySelectorAll(this.itemsSelector) :
this.target.children) : this.$.items.getDistributedNodes();
return Array.prototype.filter.call(nodes || [], function(n) {
return n && n.localName !== 'template';
});
},
targetChanged: function(old) {
if (old) {
this.removeListener(old);
this.observer.disconnect();
this.clearSelection();
}
if (this.target) {
this.addListener(this.target);
this.observer.observe(this.target, {childList: true});
this.updateSelected();
}
},
addListener: function(node) {
node.addEventListener(this.activateEvent, this.activateListener);
},
removeListener: function(node) {
node.removeEventListener(this.activateEvent, this.activateListener);
},
get selection() {
return this.$.selection.getSelection();
},
selectedChanged: function() {
this.updateSelected();
},
updateSelected: function() {
this.validateSelected();
if (this.multi) {
this.clearSelection();
this.selected && this.selected.forEach(function(s) {
this.valueToSelection(s);
}, this);
} else {
this.valueToSelection(this.selected);
}
},
validateSelected: function() {
// convert to an array for multi-selection
if (this.multi && !Array.isArray(this.selected) &&
this.selected !== null && this.selected !== undefined) {
this.selected = [this.selected];
}
},
clearSelection: function() {
if (this.multi) {
this.selection.slice().forEach(function(s) {
this.$.selection.setItemSelected(s, false);
}, this);
} else {
this.$.selection.setItemSelected(this.selection, false);
}
this.selectedItem = null;
this.$.selection.clear();
},
valueToSelection: function(value) {
var item = (value === null || value === undefined) ?
null : this.items[this.valueToIndex(value)];
this.$.selection.select(item);
},
updateSelectedItem: function() {
this.selectedItem = this.selection;
},
selectedItemChanged: function() {
if (this.selectedItem) {
var t = this.selectedItem.templateInstance;
this.selectedModel = t ? t.model : undefined;
} else {
this.selectedModel = null;
}
this.selectedIndex = this.selectedItem ?
parseInt(this.valueToIndex(this.selected)) : -1;
},
valueToIndex: function(value) {
// find an item with value == value and return it's index
for (var i=0, items=this.items, c; (c=items[i]); i++) {
if (this.valueForNode(c) == value) {
return i;
}
}
// if no item found, the value itself is probably the index
return value;
},
valueForNode: function(node) {
return node[this.valueattr] || node.getAttribute(this.valueattr);
},
// events fired from <core-selection> object
selectionSelect: function(e, detail) {
this.updateSelectedItem();
if (detail.item) {
this.applySelection(detail.item, detail.isSelected);
}
},
applySelection: function(item, isSelected) {
if (this.selectedClass) {
item.classList.toggle(this.selectedClass, isSelected);
}
if (this.selectedProperty) {
item[this.selectedProperty] = isSelected;
}
if (this.selectedAttribute && item.setAttribute) {
if (isSelected) {
item.setAttribute(this.selectedAttribute, '');
} else {
item.removeAttribute(this.selectedAttribute);
}
}
},
// event fired from host
activateHandler: function(e) {
if (!this.notap) {
var i = this.findDistributedTarget(e.target, this.items);
if (i >= 0) {
var item = this.items[i];
var s = this.valueForNode(item) || i;
if (this.multi) {
if (this.selected) {
this.addRemoveSelected(s);
} else {
this.selected = [s];
}
} else {
this.selected = s;
}
this.asyncFire('core-activate', {item: item});
}
}
},
addRemoveSelected: function(value) {
var i = this.selected.indexOf(value);
if (i >= 0) {
this.selected.splice(i, 1);
} else {
this.selected.push(value);
}
this.valueToSelection(value);
},
findDistributedTarget: function(target, nodes) {
// find first ancestor of target (including itself) that
// is in nodes, if any
while (target && target != this) {
var i = Array.prototype.indexOf.call(nodes, target);
if (i >= 0) {
return i;
}
target = target.parentNode;
}
}
});
</script>
</polymer-element>
<script>
// This empty script is here to workaround issue
// https://github.com/dart-lang/core-elements/issues/11
</script>
<script>
// This empty script is here to workaround issue
// https://github.com/dart-lang/core-elements/issues/11
</script><polymer-element name="paper-ripple" attributes="initialOpacity opacityDecayVelocity">
<template>
<style>
:host {
display: block;
position: relative;
}
#canvas {
pointer-events: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
:host(.circle) #canvas {
border-radius: 50%;
}
</style>
</template>
<script>
(function() {
var waveMaxRadius = 150;
//
// INK EQUATIONS
//
function waveRadiusFn(touchDownMs, touchUpMs, anim) {
// Convert from ms to s.
var touchDown = touchDownMs / 1000;
var touchUp = touchUpMs / 1000;
var totalElapsed = touchDown + touchUp;
var ww = anim.width, hh = anim.height;
// use diagonal size of container to avoid floating point math sadness
var waveRadius = Math.min(Math.sqrt(ww * ww + hh * hh), waveMaxRadius) * 1.1 + 5;
var duration = 1.1 - .2 * (waveRadius / waveMaxRadius);
var tt = (totalElapsed / duration);
var size = waveRadius * (1 - Math.pow(80, -tt));
return Math.abs(size);
}
function waveOpacityFn(td, tu, anim) {
// Convert from ms to s.
var touchDown = td / 1000;
var touchUp = tu / 1000;
var totalElapsed = touchDown + touchUp;
if (tu <= 0) { // before touch up
return anim.initialOpacity;
}
return Math.max(0, anim.initialOpacity - touchUp * anim.opacityDecayVelocity);
}
function waveOuterOpacityFn(td, tu, anim) {
// Convert from ms to s.
var touchDown = td / 1000;
var touchUp = tu / 1000;
// Linear increase in background opacity, capped at the opacity
// of the wavefront (waveOpacity).
var outerOpacity = touchDown * 0.3;
var waveOpacity = waveOpacityFn(td, tu, anim);
return Math.max(0, Math.min(outerOpacity, waveOpacity));
}
function waveGravityToCenterPercentageFn(td, tu, r) {
// Convert from ms to s.
var touchDown = td / 1000;
var touchUp = tu / 1000;
var totalElapsed = touchDown + touchUp;
return Math.min(1.0, touchUp * 6);
}
// Determines whether the wave should be completely removed.
function waveDidFinish(wave, radius, anim) {
var waveOpacity = waveOpacityFn(wave.tDown, wave.tUp, anim);
// If the wave opacity is 0 and the radius exceeds the bounds
// of the element, then this is finished.
if (waveOpacity < 0.01 && radius >= Math.min(wave.maxRadius, waveMaxRadius)) {
return true;
}
return false;
};
function waveAtMaximum(wave, radius, anim) {
var waveOpacity = waveOpacityFn(wave.tDown, wave.tUp, anim);
if (waveOpacity >= anim.initialOpacity && radius >= Math.min(wave.maxRadius, waveMaxRadius)) {
return true;
}
return false;
}
//
// DRAWING
//
function drawRipple(ctx, x, y, radius, innerColor, outerColor) {
if (outerColor) {
ctx.fillStyle = outerColor;
ctx.fillRect(0,0,ctx.canvas.width, ctx.canvas.height);
}
ctx.beginPath();
ctx.arc(x, y, radius, 0, 2 * Math.PI, false);
ctx.fillStyle = innerColor;
ctx.fill();
}
//
// SETUP
//
function createWave(elem) {
var elementStyle = window.getComputedStyle(elem);
var fgColor = elementStyle.color;
var wave = {
waveColor: fgColor,
maxRadius: 0,
isMouseDown: false,
mouseDownStart: 0.0,
mouseUpStart: 0.0,
tDown: 0,
tUp: 0
};
return wave;
}
function removeWaveFromScope(scope, wave) {
if (scope.waves) {
var pos = scope.waves.indexOf(wave);
scope.waves.splice(pos, 1);
}
};
// Shortcuts.
var pow = Math.pow;
var now = Date.now;
if (window.performance && performance.now) {
now = performance.now.bind(performance);
}
function cssColorWithAlpha(cssColor, alpha) {
var parts = cssColor.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
if (typeof alpha == 'undefined') {
alpha = 1;
}
if (!parts) {
return 'rgba(255, 255, 255, ' + alpha + ')';
}
return 'rgba(' + parts[1] + ', ' + parts[2] + ', ' + parts[3] + ', ' + alpha + ')';
}
function dist(p1, p2) {
return Math.sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
function distanceFromPointToFurthestCorner(point, size) {
var tl_d = dist(point, {x: 0, y: 0});
var tr_d = dist(point, {x: size.w, y: 0});
var bl_d = dist(point, {x: 0, y: size.h});
var br_d = dist(point, {x: size.w, y: size.h});
return Math.max(tl_d, tr_d, bl_d, br_d);
}
Polymer('paper-ripple', {
/**
* The initial opacity set on the wave.
*
* @attribute initialOpacity
* @type number
* @default 0.25
*/
initialOpacity: 0.25,
/**
* How fast (opacity per second) the wave fades out.
*
* @attribute opacityDecayVelocity
* @type number
* @default 0.8
*/
opacityDecayVelocity: 0.8,
backgroundFill: true,
pixelDensity: 2,
eventDelegates: {
down: 'downAction',
up: 'upAction'
},
attached: function() {
// create the canvas element manually becase ios
// does not render the canvas element if it is not created in the
// main document (component templates are created in a
// different document). See:
// https://bugs.webkit.org/show_bug.cgi?id=109073.
if (!this.$.canvas) {
var canvas = document.createElement('canvas');
canvas.id = 'canvas';
this.shadowRoot.appendChild(canvas);
this.$.canvas = canvas;
}
},
ready: function() {
this.waves = [];
},
setupCanvas: function() {
this.$.canvas.setAttribute('width', this.$.canvas.clientWidth * this.pixelDensity + "px");
this.$.canvas.setAttribute('height', this.$.canvas.clientHeight * this.pixelDensity + "px");
var ctx = this.$.canvas.getContext('2d');
ctx.scale(this.pixelDensity, this.pixelDensity);
if (!this._loop) {
this._loop = this.animate.bind(this, ctx);
}
},
downAction: function(e) {
this.setupCanvas();
var wave = createWave(this.$.canvas);
this.cancelled = false;
wave.isMouseDown = true;
wave.tDown = 0.0;
wave.tUp = 0.0;
wave.mouseUpStart = 0.0;
wave.mouseDownStart = now();
var width = this.$.canvas.width / 2; // Retina canvas
var height = this.$.canvas.height / 2;
var rect = this.getBoundingClientRect();
var touchX = e.x - rect.left;
var touchY = e.y - rect.top;
wave.startPosition = {x:touchX, y:touchY};
if (this.classList.contains("recenteringTouch")) {
wave.endPosition = {x: width / 2, y: height / 2};
wave.slideDistance = dist(wave.startPosition, wave.endPosition);
}
wave.containerSize = Math.max(width, height);
wave.maxRadius = distanceFromPointToFurthestCorner(wave.startPosition, {w: width, h: height});
this.waves.push(wave);
requestAnimationFrame(this._loop);
},
upAction: function() {
for (var i = 0; i < this.waves.length; i++) {
// Declare the next wave that has mouse down to be mouse'ed up.
var wave = this.waves[i];
if (wave.isMouseDown) {
wave.isMouseDown = false
wave.mouseUpStart = now();
wave.mouseDownStart = 0;
wave.tUp = 0.0;
break;
}
}
this._loop && requestAnimationFrame(this._loop);
},
cancel: function() {
this.cancelled = true;
},
animate: function(ctx) {
var shouldRenderNextFrame = false;
// Clear the canvas
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
var deleteTheseWaves = [];
// The oldest wave's touch down duration
var longestTouchDownDuration = 0;
var longestTouchUpDuration = 0;
// Save the last known wave color
var lastWaveColor = null;
// wave animation values
var anim = {
initialOpacity: this.initialOpacity,
opacityDecayVelocity: this.opacityDecayVelocity,
height: ctx.canvas.height,
width: ctx.canvas.width
}
for (var i = 0; i < this.waves.length; i++) {
var wave = this.waves[i];
if (wave.mouseDownStart > 0) {
wave.tDown = now() - wave.mouseDownStart;
}
if (wave.mouseUpStart > 0) {
wave.tUp = now() - wave.mouseUpStart;
}
// Determine how long the touch has been up or down.
var tUp = wave.tUp;
var tDown = wave.tDown;
longestTouchDownDuration = Math.max(longestTouchDownDuration, tDown);
longestTouchUpDuration = Math.max(longestTouchUpDuration, tUp);
// Obtain the instantenous size and alpha of the ripple.
var radius = waveRadiusFn(tDown, tUp, anim);
var waveAlpha = waveOpacityFn(tDown, tUp, anim);
var waveColor = cssColorWithAlpha(wave.waveColor, waveAlpha);
lastWaveColor = wave.waveColor;
// Position of the ripple.
var x = wave.startPosition.x;
var y = wave.startPosition.y;
// Ripple gravitational pull to the center of the canvas.
if (wave.endPosition) {
var translateFraction = waveGravityToCenterPercentageFn(tDown, tUp, wave.maxRadius);
// This translates from the origin to the center of the view based on the max dimension of
var translateFraction = Math.min(1, radius / wave.containerSize * 2 / Math.sqrt(2) );
x += translateFraction * (wave.endPosition.x - wave.startPosition.x);
y += translateFraction * (wave.endPosition.y - wave.startPosition.y);
}
// If we do a background fill fade too, work out the correct color.
var bgFillColor = null;
if (this.backgroundFill) {
var bgFillAlpha = waveOuterOpacityFn(tDown, tUp, anim);
bgFillColor = cssColorWithAlpha(wave.waveColor, bgFillAlpha);
}
// Draw the ripple.
drawRipple(ctx, x, y, radius, waveColor, bgFillColor);
// Determine whether there is any more rendering to be done.
var maximumWave = waveAtMaximum(wave, radius, anim);
var waveDissipated = waveDidFinish(wave, radius, anim);
var shouldKeepWave = !waveDissipated || maximumWave;
var shouldRenderWaveAgain = !waveDissipated && !maximumWave;
shouldRenderNextFrame = shouldRenderNextFrame || shouldRenderWaveAgain;
if (!shouldKeepWave || this.cancelled) {
deleteTheseWaves.push(wave);
}
}
if (shouldRenderNextFrame) {
requestAnimationFrame(this._loop);
}
for (var i = 0; i < deleteTheseWaves.length; ++i) {
var wave = deleteTheseWaves[i];
removeWaveFromScope(this, wave);
}
if (!this.waves.length) {
// If there is nothing to draw, clear any drawn waves now because
// we're not going to get another requestAnimationFrame any more.
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
this._loop = null;
}
}
});
})();
</script>
</polymer-element>
<polymer-element name="paper-tab" attributes="noink">
<template>
<style>/*
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
:host {
display: block;
position: relative;
overflow: hidden;
}
#tabContainer {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.tab-content {
transition: opacity .1s cubic-bezier(0.4, 0.0, 1, 1), color .1s cubic-bezier(0.4, 0.0, 1, 1);
cursor: default;
pointer-events: none;
}
:host(:not(.core-selected)) .tab-content {
opacity: 0.6;
}
#ink {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
color: #ffff8d;
}
:host[noink] #ink {
pointer-events: none;
}
:host-context(paper-tabs[noink]) #ink {
pointer-events: none;
}
</style>
<div id="tabContainer" center-justified="" center="" horizontal="" layout="">
<div class="tab-content"><content></content></div>
<paper-ripple id="ink" initialopacity="0.95" opacitydecayvelocity="0.98"></paper-ripple>
</div>
</template>
<script>
Polymer('paper-tab', {
/**
* If true, ink ripple effect is disabled.
*
* @attribute noink
* @type boolean
* @default false
*/
noink: false
});
</script>
</polymer-element>
<polymer-element name="paper-tabs" extends="core-selector" attributes="noink nobar">
<template>
<style>/*
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
:host {
display: block;
position: relative;
font-size: 14px;
font-weight: 500;
height: 48px;
overflow: hidden;
}
#tabsContainer {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
white-space: nowrap;
}
#selectionBar {
position: absolute;
height: 2px;
bottom: 0;
left: 0;
width: 0;
background-color: #ffff8d;
transition: width, left;
}
#selectionBar[hidden] {
display: hidden;
}
#selectionBar.expand {
transition-duration: 0.15s;
transition-timing-function: cubic-bezier(0.4, 0.0, 1, 1);
}
#selectionBar.contract {
transition-duration: 0.1s;
transition-timing-function: cubic-bezier(0.0, 0.0, 0.2, 1);
}
polyfill-next-selector { content: '#tabsContainer > *:not(#selectionBar)'; }
::content > * {
-ms-flex: 1;
-webkit-flex: 1;
flex: 1;
}
</style>
<div id="tabsContainer" horizontal="" layout="">
<shadow></shadow>
<div id="selectionBar" hidden?="{{nobar}}" on-transitionend="{{barTransitionEnd}}"></div>
</div>
</template>
<script>
Polymer('paper-tabs', {
/**
* If true, ink effect is disabled.
*
* @attribute noink
* @type boolean
* @default false
*/
noink: false,
/**
* If true, the bottom bar to indicate the selected tab will not be shown.
*
* @attribute nobar
* @type boolean
* @default false
*/
nobar: false,
activateEvent: 'down',
nostretch: false,
selectedIndexChanged: function(old) {
var s = this.$.selectionBar.style;
if (!this.selectedItem) {
s.width = 0;
s.left = 0;
return;
}
var w = 100 / this.items.length;
if (this.nostretch || old === null || old === -1) {
s.width = w + '%';
s.left = this.selectedIndex * w + '%';
return;
}
var m = 5;
this.$.selectionBar.classList.add('expand');
if (old < this.selectedIndex) {
s.width = w + w * (this.selectedIndex - old) - m + '%';
} else {
s.width = w + w * (old - this.selectedIndex) - m + '%';
s.left = this.selectedIndex * w + m + '%';
}
},
barTransitionEnd: function() {
var cl = this.$.selectionBar.classList;
if (cl.contains('expand')) {
cl.remove('expand');
cl.add('contract');
var s = this.$.selectionBar.style;
var w = 100 / this.items.length;
s.width = w + '%';
s.left = this.selectedIndex * w + '%';
} else if (cl.contains('contract')) {
cl.remove('contract');
}
}
});
</script>
</polymer-element>
<polymer-element name="core-header-panel">
<template>
<style>/*
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
:host {
display: block;
position: relative;
}
#outerContainer {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow-y: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
}
#mainPanel {
position: relative;
}
#mainContainer {
position: relative;
overflow-y: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
}
#dropShadow {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 6px;
box-shadow: inset 0px 5px 6px -3px rgba(0, 0, 0, 0.4);
}
#dropShadow.hidden {
display: none;
}
/*
mode: scroll
*/
:host([mode=scroll]) #mainContainer {
overflow: visible;
}
/*
mode: cover
*/
:host([mode=cover]) #mainPanel {
position: static;
}
:host([mode=cover]) #mainContainer {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
:host([mode=cover]) #dropShadow {
position: static;
width: 100%;
}
</style>
<div id="outerContainer" on-scroll="{{scroll}}" vertical="" layout="">
<content id="headerContent" select="core-toolbar, .core-header"></content>
<div id="mainPanel" flex="" vertical="" layout="">
<div id="mainContainer" flex?="{{mode !== 'cover'}}" on-scroll="{{scroll}}">
<content id="mainContent" select="*"></content>
</div>
<div id="dropShadow"></div>
</div>
</div>
</template>
<script>
Polymer('core-header-panel', {
publish: {
/**
* Controls header and scrolling behavior. Options are
* `standard`, `seamed`, `waterfall`, `waterfall-tall`,
* `waterfall-medium-tall`, `scroll` and `cover`.
* Default is `standard`.
*
* `standard`: The header is a step above the panel. The header will consume the
* panel at the point of entry, preventing it from passing through to the
* opposite side.
*
* `seamed`: The header is presented as seamed with the panel.
*
* `waterfall`: Similar to standard mode, but header is initially presented as
* seamed with panel, but then separates to form the step.
*
* `waterfall-tall`: The header is initially taller (`tall` class is added to
* the header). As the user scrolls, the header separates (forming an edge)
* while condensing (`tall` class is removed from the header).
*
* `scroll`: The header keeps its seam with the panel, and is pushed off screen.
*
* `cover`: The panel covers the whole `core-header-panel` including the
* header. This allows user to style the panel in such a way that the panel is
* partially covering the header.
*
* <style>
* core-header-panel[mode=cover]::shadow #mainContainer {
* left: 80px;
* }
* .content {
* margin: 60px 60px 60px 0;
* }
* </style>
*
* <core-header-panel mode="cover">
* <core-appbar class="tall">
* <core-icon-button icon="menu"></core-icon-button>
* </core-appbar>
* <div class="content"></div>
* </core-header-panel>
*
* @attribute mode
* @type string
* @default ''
*/
mode: {value: '', reflect: true},
/**
* The class used in waterfall-tall mode. Change this if the header
* accepts a different class for toggling height, e.g. "medium-tall"
*
* @attribute tallClass
* @type string
* @default 'tall'
*/
tallClass: 'tall',
/**
* If true, the drop-shadow is always shown no matter what mode is set to.
*
* @attribute shadow
* @type boolean
* @default false
*/
shadow: false,
},
domReady: function() {
this.async('scroll');
},
modeChanged: function() {
this.scroll();
},
get header() {
return this.$.headerContent.getDistributedNodes()[0];
},
scroll: function() {
var shadowMode = {'waterfall': 1, 'waterfall-tall': 1};
var noShadow = {'seamed': 1, 'cover': 1, 'scroll': 1};
var tallMode = {'waterfall-tall': 1};
var main = this.$.mainContainer;
var header = this.header;
var sTop = main.scrollTop;
var atTop = sTop === 0;
if (header) {
this.$.dropShadow.classList.toggle('hidden', !this.shadow &&
(atTop && shadowMode[this.mode] || noShadow[this.mode]));
if (tallMode[this.mode]) {
header.classList.toggle(this.tallClass, atTop);
}
header.classList.toggle('animate', tallMode[this.mode]);
}
}
});
</script>
</polymer-element>
<polymer-element name="core-toolbar" noscript="">
<template>
<style>/*
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
:host {
/* technical */
display: block;
position: relative;
box-sizing: border-box;
-moz-box-sizing: border-box;
/* size */
height: 64px;
/* typography */
font-size: 1.3em;
}
:host(.animate) {
/* transition */
transition: height 0.18s ease-in;
}
:host(.medium-tall) {
height: 128px;
}
:host(.tall) {
height: 192px;
}
.toolbar-tools {
height: 64px;
padding: 0 8px;
pointer-events: none;
}
/* narrow layout */
:host(.narrow) {
height: 56px;
}
:host(.narrow.medium-tall) {
height: 112px;
}
:host(.narrow.tall) {
height: 168px;
}
:host(.narrow) .toolbar-tools {
height: 56px;
padding: 0;
}
/* middle bar */
#middleBar {
position: absolute;
top: 0;
right: 0;
left: 0;
}
:host(.tall, .medium-tall) #middleBar {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
/* bottom bar */
#bottomBar {
position: absolute;
right: 0;
bottom: 0;
left: 0;
}
/* shows bottom bar only when in normal height (!tall && !medium-tall) */
:host(.animate.no-overlap) > #topBar,
:host(.animate.no-overlap) > #middleBar {
transition: -webkit-transform 0.18s ease-in;
transition: transform 0.18s ease-in;
}
:host(.no-overlap:not(.medium-tall):not(.tall)) > #topBar {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
:host(.no-overlap:not(.medium-tall):not(.tall)) > #middleBar {
-webkit-transform: translateY(-200%);
transform: translateY(-200%);
}
/* make elements (e.g. buttons) respond to mouse/touch events */
polyfill-next-selector { content: '.toolbar-tools > *'; }
::content > * {
pointer-events: auto;
}
/* elements spacing */
polyfill-next-selector { content: '.toolbar-tools > *'; }
::content > * {
margin: 0px 8px;
}
/* misc helpers */
polyfill-next-selector { content: '.toolbar-tools > .fit'; }
::content > .fit {
position: absolute;
top: auto;
right: 0;
bottom: 0;
left: 0;
width: auto;
margin: 0;
}
polyfill-next-selector { content: ':host .indent'; }
::content > .indent {
margin-left: 60px;
}
</style>
<div id="bottomBar" class="toolbar-tools" center="" horizontal="" layout="">
<content select=".bottom"></content>
</div>
<div id="middleBar" class="toolbar-tools" center="" horizontal="" layout="">
<content select=".middle"></content>
</div>
<div id="topBar" class="toolbar-tools" center="" horizontal="" layout="">
<content></content>
</div>
</template>
</polymer-element>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<core-header-panel mode="waterfall">
<div class="core-header">
My App
</div>
<div>
<core-toolbar>
<paper-tabs selected="0" role="tablist">
<paper-tab>World</paper-tab>
<paper-tab>Followers</paper-tab>
<paper-tab>Mine</paper-tab>
</paper-tabs>
</core-toolbar>
</div>
</core-header-panel>
<div class="main-container">
<div class="main wrapper clearfix">
</div> <!-- #main -->
</div> <!-- #main-container -->
<div class="footer-container">
<footer class="wrapper">
<h3>footer</h3>
</footer>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.11.0.min.js"><\/script>')</script>
<!-- Latest compiled and minified JavaScript -->
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="packages/shadow_dom/shadow_dom.debug.js"></script>
<script src="js/flowtype.js"></script>
<script src="js/main.js"></script>
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
<script>
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='http://www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
ga('create','UA-XXXXX-X');ga('send','pageview');
</script>
<script type="application/dart" src="index.html_bootstrap.dart"></script><script src="packages/browser/dart.js"></script></body></html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment