Last active
August 29, 2015 14:04
-
-
Save yarko/d7f3d0a92a9405e16ed6 to your computer and use it in GitHub Desktop.
paper-in-dart example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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