From a679e95df3a6af877185b10618d2ffb6ec1faf02 Mon Sep 17 00:00:00 2001 From: Suraj Vadgama Date: Wed, 21 Feb 2018 14:19:17 +0000 Subject: [PATCH 01/10] Resolve #296 Fund Stubs displayed when no recommended or eligible funds available --- app/controllers/funds_controller.rb | 7 + app/views/funds/_stubs.haml | 9 + app/views/funds/index.haml | 2 + app/views/funds/themed.haml | 2 + spec/features/browse_spec.rb | 247 +++++++++++++++------------- 5 files changed, 151 insertions(+), 116 deletions(-) create mode 100644 app/views/funds/_stubs.haml diff --git a/app/controllers/funds_controller.rb b/app/controllers/funds_controller.rb index 761cca49..45398216 100644 --- a/app/controllers/funds_controller.rb +++ b/app/controllers/funds_controller.rb @@ -11,12 +11,14 @@ def show def index update_analysis(query) if @proposal @funds = query.page(params[:page]) + load_stubs(@funds) end def themed @theme = Theme.find_by(slug: params[:theme]) redirect_to funds_path(@proposal), alert: 'Not found' unless @theme @funds = themed_query.page(params[:page]) + load_stubs(@funds) end def hidden @@ -64,4 +66,9 @@ def load_fund .where("state = 'active' OR state = 'stub'") .find_by_hashid(params[:id]) end + + def load_stubs(funds) + @fund_stubs = Fund.stubs.includes(:funder).order('RANDOM()').limit(5) if + funds.empty? + end end diff --git a/app/views/funds/_stubs.haml b/app/views/funds/_stubs.haml new file mode 100644 index 00000000..feb328a6 --- /dev/null +++ b/app/views/funds/_stubs.haml @@ -0,0 +1,9 @@ +- if @fund_stubs + .mb40.border.border-silver.rounded.shadow + .p20.bg-ice + %h3.mb15 Can't find the fund you’re looking for? + .night + = mail_to 'support@beehivegiving.org', 'Email', subject: 'Request Fund Update' + us the name of the fund you’d like added, or follow the links below to request an incomplete fund to be updated. + - @fund_stubs.each do |stub| + %h6.p20.border-top.border-silver= link_to stub.funder.name, fund_path(stub, @proposal) \ No newline at end of file diff --git a/app/views/funds/index.haml b/app/views/funds/index.haml index 5f8aad4e..5834732c 100644 --- a/app/views/funds/index.haml +++ b/app/views/funds/index.haml @@ -52,4 +52,6 @@ - else = render(partial: 'fund_redacted', locals: { fund: fund }) + = render partial: 'stubs' + .mb40.center= paginate @funds diff --git a/app/views/funds/themed.haml b/app/views/funds/themed.haml index 18f37c51..b9be80fb 100644 --- a/app/views/funds/themed.haml +++ b/app/views/funds/themed.haml @@ -26,4 +26,6 @@ - else = render(partial: 'fund_redacted', locals: { fund: fund }) + = render partial: 'stubs' + .mb40.center= paginate @funds diff --git a/spec/features/browse_spec.rb b/spec/features/browse_spec.rb index 44edab89..74c9272a 100644 --- a/spec/features/browse_spec.rb +++ b/spec/features/browse_spec.rb @@ -1,144 +1,159 @@ require 'rails_helper' feature 'Browse' do - before(:each) do - @app.seed_test_db - .setup_funds(num: 7, open_data: true) - .setup_fund_stubs(num: 5) - .create_recipient - .with_user - .create_registered_proposal - @db = @app.instances - @fund_stubs = @app.instances[:fund_stubs] - @proposal = @db[:registered_proposal] - @theme = @db[:themes].first - @themes = @db[:themes] - visit sign_in_path - end - - scenario 'When I sign in, - I want to see my recommended fund, - so I can see my results' do - fill_in :email, with: @db[:user].email - fill_in :password, with: @db[:user].password - click_button 'Sign in' - expect(current_path).to eq funds_path(@proposal) - end + context 'stubs displayed when no results' do + scenario 'funde#index' do + visit funds_path + expect(page).to have_text("Can't find the fund you’re looking for?") + end - scenario 'When I browse the site, - there is a list of fund themes in the footer' do - Fund.active.first.update themes: [@themes.first, @themes.second] - Fund.active.second.update themes: [@themes.first] - visit root_path - expect(page).to have_text 'FUNDING' - expect(page).to have_text @themes.first.name - expect(page).to have_text @themes.second.name - expect(page).to have_text @themes.third.name + scenario 'funde#themed' do + visit theme_path(build(:theme, slug: 'no-funds')) + expect(page).to have_text("Can't find the fund you’re looking for?") + end end - context 'signed in' do + context do + # TODO: refactor before(:each) do - @unsuitable_fund = Fund.active.first - @low_fund = Fund.active.find_by(name: 'Awards for All 2') - @top_fund = Fund.active.last - @recipient = @db[:recipient] - @app.sign_in - visit root_path + @app.seed_test_db + .setup_funds(num: 7, open_data: true) + .setup_fund_stubs(num: 5) + .create_recipient + .with_user + .create_registered_proposal + @db = @app.instances + @fund_stubs = @app.instances[:fund_stubs] + @proposal = @db[:registered_proposal] + @theme = @db[:themes].first + @themes = @db[:themes] + visit sign_in_path end - context 'cannot visit inactive fund' do - before do - @fund = Fund.first - @fund.update(state: 'inactive') - end - - it 'hidden' do - visit hidden_path(@fund, @proposal) - expect(current_path).to eq(funds_path(@proposal)) - end - - it 'revealed' do - @proposal.recipient.update(reveals: [@fund.slug]) - visit fund_path(@fund, @proposal) - expect(current_path).to eq(funds_path(@proposal)) - end + scenario 'When I sign in, + I want to see my recommended fund, + so I can see my results' do + fill_in :email, with: @db[:user].email + fill_in :password, with: @db[:user].password + click_button 'Sign in' + expect(current_path).to eq funds_path(@proposal) end - scenario 'fund stub selection shown on proposal fund page' - - scenario "When I visit a fund that doesn't exist, - I want to be redirected to where I came from and see a message, - so I avoid an error and understand what happened" do - visit fund_path('missing-fund', @proposal) - expect(current_path).to eq(funds_path(@proposal)) + scenario 'When I browse the site, + there is a list of fund themes in the footer' do + Fund.active.first.update themes: [@themes.first, @themes.second] + Fund.active.second.update themes: [@themes.first] + visit root_path + expect(page).to have_text 'FUNDING' + expect(page).to have_text @themes.first.name + expect(page).to have_text @themes.second.name + expect(page).to have_text @themes.third.name end - scenario "When I find a funding theme I'm interested in, - I want to see similar funds, - so I can discover new funding opportunties" do - click_link @theme.name, match: :first - expect(current_path).to eq(theme_path(@theme.slug, @proposal)) - expect(page).to have_css('h3', count: 6) - end + context 'signed in' do + before(:each) do + @unsuitable_fund = Fund.active.first + @low_fund = Fund.active.find_by(name: 'Awards for All 2') + @top_fund = Fund.active.last + @recipient = @db[:recipient] + @app.sign_in + visit root_path + end - scenario 'Themes redacted on second page and CTA not shown' do - click_link @theme.name, match: :first - click_link '2' - expect(page).to have_link('Hidden fund', count: 1) - end + context 'cannot visit inactive fund' do + before do + @fund = Fund.first + @fund.update(state: 'inactive') + end + + it 'hidden' do + visit hidden_path(@fund, @proposal) + expect(current_path).to eq(funds_path(@proposal)) + end + + it 'revealed' do + @proposal.recipient.update(reveals: [@fund.slug]) + visit fund_path(@fund, @proposal) + expect(current_path).to eq(funds_path(@proposal)) + end + end - scenario "When I visit a funding theme which isn't listed, - I want to see a message and be directed to safety, - so I can continue my search" do - visit theme_path('missing', @proposal) - # TODO: v2 flash notices #391 - # expect(page.all('body script', visible: false)[0].native.text) - # .to have_text 'Fund not found' - expect(current_path).to eq(funds_path(@proposal)) - - visit theme_path('missing', @proposal) - # TODO: v2 flash notices #391 - # expect(page.all('body script', visible: false)[0].native.text) - # .to have_text 'Not found' - expect(current_path).to eq funds_path(@proposal) - end + scenario 'fund stub selection shown on proposal fund page' - def subscribe_and_visit(path) - @recipient.subscribe! - visit path - expect(current_path).to eq path - end + scenario "When I visit a fund that doesn't exist, + I want to be redirected to where I came from and see a message, + so I avoid an error and understand what happened" do + visit fund_path('missing-fund', @proposal) + expect(current_path).to eq(funds_path(@proposal)) + end - context 'When I view fund a with open data' do - before(:each) do - click_link 'Hidden fund', match: :first + scenario "When I find a funding theme I'm interested in, + I want to see similar funds, + so I can discover new funding opportunties" do + click_link @theme.name, match: :first + expect(current_path).to eq(theme_path(@theme.slug, @proposal)) + expect(page).to have_css('h3', count: 6) end - scenario 'I want to see which time period the analysis relates to, - so I can understand how up to date it is' do - expect(page).to have_text 1.year.ago.strftime('%b %Y') + - ' - ' + - Time.zone.today.strftime('%b %Y') + scenario 'Themes redacted on second page and CTA not shown' do + click_link @theme.name, match: :first + click_link '2' + expect(page).to have_link('Hidden fund', count: 1) end - scenario 'I want to see the grant_count, - so I can evaluate my chances of success' do - expect(page).to have_text( - "Awarded #{@top_fund.grant_count} grants" - ) + scenario "When I visit a funding theme which isn't listed, + I want to see a message and be directed to safety, + so I can continue my search" do + visit theme_path('missing', @proposal) + # TODO: v2 flash notices #391 + # expect(page.all('body script', visible: false)[0].native.text) + # .to have_text 'Fund not found' + expect(current_path).to eq(funds_path(@proposal)) + + visit theme_path('missing', @proposal) + # TODO: v2 flash notices #391 + # expect(page.all('body script', visible: false)[0].native.text) + # .to have_text 'Not found' + expect(current_path).to eq funds_path(@proposal) end - scenario 'I want to see the top_award_months, - so I can evaluate my chances of success' do - expect(page).to have_text( - 'Awarded the most funding in January and February' - ) + def subscribe_and_visit(path) + @recipient.subscribe! + visit path + expect(current_path).to eq path end - scenario 'I want to see the sources of open data, - so I can further my research' do - expect(page).to have_link('License', href: 'https://creativecommons.org/licenses/by/4.0/') - expect(page).to have_link('Source', href: 'http://www.example.com') + context 'When I view fund a with open data' do + before(:each) do + click_link 'Hidden fund', match: :first + end + + scenario 'I want to see which time period the analysis relates to, + so I can understand how up to date it is' do + expect(page).to have_text 1.year.ago.strftime('%b %Y') + + ' - ' + + Time.zone.today.strftime('%b %Y') + end + + scenario 'I want to see the grant_count, + so I can evaluate my chances of success' do + expect(page).to have_text( + "Awarded #{@top_fund.grant_count} grants" + ) + end + + scenario 'I want to see the top_award_months, + so I can evaluate my chances of success' do + expect(page).to have_text( + 'Awarded the most funding in January and February' + ) + end + + scenario 'I want to see the sources of open data, + so I can further my research' do + expect(page).to have_link('License', href: 'https://creativecommons.org/licenses/by/4.0/') + expect(page).to have_link('Source', href: 'http://www.example.com') + end end end end From 6888db61ac833d2cc91e514f3335595bdf7c40d6 Mon Sep 17 00:00:00 2001 From: Suraj Vadgama Date: Thu, 22 Feb 2018 13:02:16 +0000 Subject: [PATCH 02/10] Resolve #532 User can filter revealed funds --- app/controllers/funds_controller.rb | 1 + app/controllers/reveals_controller.rb | 7 ++++--- app/models/fund.rb | 8 ++++++++ app/policies/fund_policy.rb | 2 +- app/views/funds/_sidebar.haml | 3 ++- app/views/funds/hidden.haml | 4 ++-- .../20180221165129_add_revealed_to_assessments.rb | 14 ++++++++++++++ db/schema.rb | 3 ++- spec/features/reveal_spec.rb | 3 +++ 9 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 db/migrate/20180221165129_add_revealed_to_assessments.rb diff --git a/app/controllers/funds_controller.rb b/app/controllers/funds_controller.rb index 45398216..3cc1c2e7 100644 --- a/app/controllers/funds_controller.rb +++ b/app/controllers/funds_controller.rb @@ -53,6 +53,7 @@ def query .order_by(params[:sort]) .eligibility(params[:eligibility]) .duration(@proposal, params[:duration]) + .revealed(params[:revealed]) .active .select('funds.*', 'assessments.eligibility_status') end diff --git a/app/controllers/reveals_controller.rb b/app/controllers/reveals_controller.rb index f206b9a6..8e480121 100644 --- a/app/controllers/reveals_controller.rb +++ b/app/controllers/reveals_controller.rb @@ -3,10 +3,11 @@ class RevealsController < ApplicationController def create authorize :reveal - fund = Fund.find_by_hashid(params[:fund]) - @recipient.reveals << fund.slug + assessment = Assessment.find(params[:assessment]) + assessment.update(revealed: true) + @recipient.reveals << assessment.fund.slug @recipient.save - redirect_to fund_path(fund, @proposal) + redirect_to fund_path(assessment.fund, @proposal) end private diff --git a/app/models/fund.rb b/app/models/fund.rb index 22cdeb20..593358dd 100644 --- a/app/models/fund.rb +++ b/app/models/fund.rb @@ -128,6 +128,14 @@ def self.duration(proposal, state) end end + def self.revealed(state) + if state == 'true' + where('assessments.revealed': state) + else + where('assessments.revealed IS NULL') + end + end + def to_param hashid end diff --git a/app/policies/fund_policy.rb b/app/policies/fund_policy.rb index 753509bb..daca9726 100644 --- a/app/policies/fund_policy.rb +++ b/app/policies/fund_policy.rb @@ -1,5 +1,5 @@ class FundPolicy < ApplicationPolicy - def show? + def show? # TODO: refactor return false unless record.fund return true if record.featured || record.stub? return false unless record.proposal diff --git a/app/views/funds/_sidebar.haml b/app/views/funds/_sidebar.haml index 9407e16a..44166766 100644 --- a/app/views/funds/_sidebar.haml +++ b/app/views/funds/_sidebar.haml @@ -1,7 +1,8 @@ .pills.mb35 %h4.bold.mb15 Shortcuts - .mb15= link_to 'All funds', funds_path(@proposal) + = link_to 'All funds', funds_path(@proposal) + .mb15= link_to 'Revealed', funds_path(@proposal, revealed: true) %h6.bold.slate.mb10 Eligibility diff --git a/app/views/funds/hidden.haml b/app/views/funds/hidden.haml index e5336b2a..de54bea7 100644 --- a/app/views/funds/hidden.haml +++ b/app/views/funds/hidden.haml @@ -14,7 +14,7 @@ .flex.flex-wrap.mb40 %section.perc50.md.mb40.px20 - = link_to 'Reveal Fund Identity', reveals_path(fund: @fund), method: :post, class: 'button white bg-blue caps shadow mb20' + = link_to 'Reveal Fund Identity', reveals_path(assessment: @assessment), method: :post, class: 'button white bg-blue caps shadow mb20' %h1.mb10.italic Hidden Fund .mb30 @@ -58,7 +58,7 @@ = cell(:fund_insight, @fund).call(:grant_count) = cell(:fund_insight, @fund).call(:award_months) %li - = link_to 'Reveal', reveals_path(fund: @fund), method: :post, class: 'bold blue' + = link_to 'Reveal', reveals_path(assessment: @assessment), method: :post, class: 'bold blue' this fund to see recent grants = render partial: 'checks' diff --git a/db/migrate/20180221165129_add_revealed_to_assessments.rb b/db/migrate/20180221165129_add_revealed_to_assessments.rb new file mode 100644 index 00000000..b9a89dbb --- /dev/null +++ b/db/migrate/20180221165129_add_revealed_to_assessments.rb @@ -0,0 +1,14 @@ +class AddRevealedToAssessments < ActiveRecord::Migration[5.1] + def up + add_column :assessments, :revealed, :boolean + + Recipient.where("reveals != '[]'::jsonb").find_each do |r| + Assessment.where(recipient: r, fund: Fund.where(slug: r.reveals)) + .update_all(revealed: true) + end + end + + def down + remove_column :assessments, :revealed + end +end diff --git a/db/schema.rb b/db/schema.rb index e1708452..50efcaf1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180213142055) do +ActiveRecord::Schema.define(version: 20180221165129) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -96,6 +96,7 @@ t.datetime "created_at", null: false t.datetime "updated_at", null: false t.bigint "fund_version" + t.boolean "revealed" t.index ["fund_id"], name: "index_assessments_on_fund_id" t.index ["proposal_id"], name: "index_assessments_on_proposal_id" t.index ["recipient_id"], name: "index_assessments_on_recipient_id" diff --git a/spec/features/reveal_spec.rb b/spec/features/reveal_spec.rb index 7b39174a..acc6677a 100644 --- a/spec/features/reveal_spec.rb +++ b/spec/features/reveal_spec.rb @@ -1,6 +1,7 @@ require 'rails_helper' require_relative '../support/eligibility_helper' +# TODO: refactor feature 'RevealFunds' do before(:each) do @app.seed_test_db @@ -22,6 +23,8 @@ end scenario 'reveal button hidden once revealed' do + visit funds_path(@proposal) + visit fund_path(@fund, @proposal) click_link('Reveal') expect(page).not_to have_link('Reveal') expect(@user.reveals.size).to eq(1) From 4b10bba21bbe5829cb17a8f154266be66c3674b8 Mon Sep 17 00:00:00 2001 From: Suraj Vadgama Date: Thu, 22 Feb 2018 14:04:35 +0000 Subject: [PATCH 03/10] Resolve #154 Order eligible/ineligible funds by visibility --- app/models/fund.rb | 7 ++----- app/views/funds/_sidebar.haml | 3 ++- spec/features/browse_spec.rb | 18 ++++++++++++++++++ spec/models/fund_spec.rb | 19 +++++++++++++++++++ 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/app/models/fund.rb b/app/models/fund.rb index 593358dd..72bc1727 100644 --- a/app/models/fund.rb +++ b/app/models/fund.rb @@ -92,6 +92,7 @@ def self.join(proposal = nil) def self.order_by(col = nil) order = [ 'funds.featured DESC', + 'assessments.revealed', ('assessments.eligibility_status DESC' unless col == 'name'), 'funds.name' ] @@ -129,11 +130,7 @@ def self.duration(proposal, state) end def self.revealed(state) - if state == 'true' - where('assessments.revealed': state) - else - where('assessments.revealed IS NULL') - end + state.to_s == 'true' ? where('assessments.revealed': state) : all end def to_param diff --git a/app/views/funds/_sidebar.haml b/app/views/funds/_sidebar.haml index 44166766..8da96fc8 100644 --- a/app/views/funds/_sidebar.haml +++ b/app/views/funds/_sidebar.haml @@ -2,7 +2,8 @@ %h4.bold.mb15 Shortcuts = link_to 'All funds', funds_path(@proposal) - .mb15= link_to 'Revealed', funds_path(@proposal, revealed: true) + - unless @current_user&.subscription_active? + .mb15= link_to 'Revealed', funds_path(@proposal, revealed: true) %h6.bold.slate.mb10 Eligibility diff --git a/spec/features/browse_spec.rb b/spec/features/browse_spec.rb index 74c9272a..5e8333c1 100644 --- a/spec/features/browse_spec.rb +++ b/spec/features/browse_spec.rb @@ -60,6 +60,24 @@ visit root_path end + # TODO: sidebar_spec? + context do + scenario 'can filter revealed funds' do + @recipient.update(reveals: [@top_fund.slug]) + Assessment.last.update(revealed: true) + visit funds_path(@proposal, revealed: true) + + expect(page).to have_text('Awards for All', count: 1) + end + + scenario 'hidden if subscribed' do + @recipient.subscribe! + visit funds_path(@proposal) + + expect(page).not_to have_text('Revealed') + end + end + context 'cannot visit inactive fund' do before do @fund = Fund.first diff --git a/spec/models/fund_spec.rb b/spec/models/fund_spec.rb index 3454f454..fb17fff2 100644 --- a/spec/models/fund_spec.rb +++ b/spec/models/fund_spec.rb @@ -44,6 +44,8 @@ it 'ineligible featured fund' + it 'revealed funds ordered first in each eligibility state' + context 'name' do before { @funds[:ineligible].update(name: '0') } let(:col) { 'name' } @@ -84,6 +86,23 @@ it { is_expected.to contain_exactly(@funds[:orphan], @funds[:incomplete]) } end end + + context '#revealed' do + subject { Fund.join(proposal).revealed(revealed) } + + let(:revealed) { nil } + + context 'default all' do + it { is_expected.to contain_exactly(*@funds.values) } + end + + context 'revealed' do + before { Assessment.last.update(revealed: true) } + let(:revealed) { true } + + it { is_expected.to contain_exactly(@funds[:ineligible]) } + end + end end context 'single' do From 25668667fb58ffb22144022ae1f6b2d20baaaa09 Mon Sep 17 00:00:00 2001 From: Suraj Vadgama Date: Thu, 22 Feb 2018 17:07:35 +0000 Subject: [PATCH 04/10] Resolve #72 Clean up recipient_funder_accesses --- app/admin/dashboard.rb | 2 -- app/admin/recipient.rb | 1 - app/models/recipient.rb | 1 - app/views/metrics/_daily_chart.html.haml | 2 +- app/views/metrics/_weekly_chart.html.haml | 2 +- .../20180222164524_drop_recipient_funder_accesses.rb | 6 ++++++ db/schema.rb | 10 +--------- 7 files changed, 9 insertions(+), 15 deletions(-) create mode 100644 db/migrate/20180222164524_drop_recipient_funder_accesses.rb diff --git a/app/admin/dashboard.rb b/app/admin/dashboard.rb index 5601161b..92ca5a95 100644 --- a/app/admin/dashboard.rb +++ b/app/admin/dashboard.rb @@ -24,8 +24,6 @@ span class: 'blank_slate' do h3 'Non-profits' - h5 'Unlocks' - h1 number_with_delimiter RecipientFunderAccess.all.count h5 'Quiz answers' h1 number_with_delimiter Answer.all.count end diff --git a/app/admin/recipient.rb b/app/admin/recipient.rb index 94a7c13c..d5f947eb 100644 --- a/app/admin/recipient.rb +++ b/app/admin/recipient.rb @@ -17,7 +17,6 @@ def find_resource filter :registered filter :founded_on filter :created_at - filter :recipient_funder_accesses_count, label: 'Unlocks' index do selectable_column diff --git a/app/models/recipient.rb b/app/models/recipient.rb index 85212881..50177128 100644 --- a/app/models/recipient.rb +++ b/app/models/recipient.rb @@ -13,7 +13,6 @@ class Recipient < ApplicationRecord has_many :proposals has_many :requests has_many :users, as: :organisation, dependent: :destroy - has_many :recipient_funder_accesses # TODO: deprecated has_one :subscription, dependent: :destroy diff --git a/app/views/metrics/_daily_chart.html.haml b/app/views/metrics/_daily_chart.html.haml index dd01d8e6..8a4b065e 100644 --- a/app/views/metrics/_daily_chart.html.haml +++ b/app/views/metrics/_daily_chart.html.haml @@ -1,2 +1,2 @@ = javascript_include_tag "//www.google.com/jsapi", "chartkick" -= line_chart [{name: "Users", data: User.recipient.group_by_day(:created_at, week_start: :mon, range: 2.weeks.ago..Time.now).count}, {name: "Non-profits", data: Recipient.joins(:users).group_by_day('users.created_at', week_start: :mon, range: 2.weeks.ago..Time.now).count}, {name: "1 unlock", data: Recipient.joins(:users).where('recipient_funder_accesses_count = ?', 1).group_by_day('users.created_at', week_start: :mon, range: 2.weeks.ago..Time.now).count}, {name: "2 unlocks", data: Recipient.joins(:users).where('recipient_funder_accesses_count = ?', 2).group_by_day('users.created_at', week_start: :mon, range: 2.weeks.ago..Time.now).count}, {name: "3 unlocks", data: Recipient.joins(:users).where('recipient_funder_accesses_count = ?', 3).group_by_day('users.created_at', week_start: :mon, range: 2.weeks.ago..Time.now).count}, {name: "Proposals", data: Proposal.all.group_by_day('created_at', week_start: :mon, range: 2.weeks.ago..Time.now).count}], height: '400px' += line_chart [{name: "Users", data: User.recipient.group_by_day(:created_at, week_start: :mon, range: 2.weeks.ago..Time.now).count}, {name: "Non-profits", data: Recipient.joins(:users).group_by_day('users.created_at', week_start: :mon, range: 2.weeks.ago..Time.now).count}, {name: "Proposals", data: Proposal.all.group_by_day('created_at', week_start: :mon, range: 2.weeks.ago..Time.now).count}], height: '400px' diff --git a/app/views/metrics/_weekly_chart.html.haml b/app/views/metrics/_weekly_chart.html.haml index 20022c6e..95cb7d2f 100644 --- a/app/views/metrics/_weekly_chart.html.haml +++ b/app/views/metrics/_weekly_chart.html.haml @@ -1,2 +1,2 @@ = javascript_include_tag "//www.google.com/jsapi", "chartkick" -= line_chart [{name: "Users", data: User.recipient.group_by_week(:created_at, week_start: :mon, range: 12.weeks.ago..Time.now).count}, {name: "Non-profits", data: Recipient.joins(:users).group_by_week('users.created_at', week_start: :mon, range: 12.weeks.ago..Time.now).count}, {name: "1 unlock", data: Recipient.joins(:users).where('recipient_funder_accesses_count = ?', 1).group_by_week('users.created_at', week_start: :mon, range: 12.weeks.ago..Time.now).count}, {name: "2 unlocks", data: Recipient.joins(:users).where('recipient_funder_accesses_count = ?', 2).group_by_week('users.created_at', week_start: :mon, range: 12.weeks.ago..Time.now).count}, {name: "3 unlocks", data: Recipient.joins(:users).where('recipient_funder_accesses_count = ?', 3).group_by_week('users.created_at', week_start: :mon, range: 12.weeks.ago..Time.now).count}, {name: "Proposals", data: Proposal.all.group_by_week('created_at', week_start: :mon, range: 12.weeks.ago..Time.now).count}], height: '400px' += line_chart [{name: "Users", data: User.recipient.group_by_week(:created_at, week_start: :mon, range: 12.weeks.ago..Time.now).count}, {name: "Non-profits", data: Recipient.joins(:users).group_by_week('users.created_at', week_start: :mon, range: 12.weeks.ago..Time.now).count}, {name: "Proposals", data: Proposal.all.group_by_week('created_at', week_start: :mon, range: 12.weeks.ago..Time.now).count}], height: '400px' diff --git a/db/migrate/20180222164524_drop_recipient_funder_accesses.rb b/db/migrate/20180222164524_drop_recipient_funder_accesses.rb new file mode 100644 index 00000000..338f3dc2 --- /dev/null +++ b/db/migrate/20180222164524_drop_recipient_funder_accesses.rb @@ -0,0 +1,6 @@ +class DropRecipientFunderAccesses < ActiveRecord::Migration[5.1] + def change + drop_table :recipient_funder_accesses + remove_column :recipients, :recipient_funder_accesses_count + end +end diff --git a/db/schema.rb b/db/schema.rb index 50efcaf1..e3c6b0e8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180221165129) do +ActiveRecord::Schema.define(version: 20180222164524) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -390,13 +390,6 @@ t.index ["fund_id"], name: "index_questions_on_fund_id" end - create_table "recipient_funder_accesses", id: :serial, force: :cascade do |t| - t.integer "recipient_id" - t.integer "funder_id" - t.datetime "created_at" - t.datetime "updated_at" - end - create_table "recipients", id: :serial, force: :cascade do |t| t.string "name", limit: 255 t.string "contact_number", limit: 255 @@ -417,7 +410,6 @@ t.boolean "active_on_beehive" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "recipient_funder_accesses_count" t.integer "org_type" t.float "latitude" t.float "longitude" From a95ee5335cde9c37c82a2e1769efad36295238e6 Mon Sep 17 00:00:00 2001 From: Suraj Vadgama Date: Mon, 26 Feb 2018 16:31:22 +0000 Subject: [PATCH 05/10] Update filter cell --- app/cells/current_proposal/show.slim | 2 +- app/cells/current_proposal_cell.rb | 2 +- app/cells/filter/show.slim | 14 +++---- app/cells/filter_cell.rb | 23 +++++------ app/javascript/__tests__/filter.test.js | 36 ----------------- app/javascript/modules/filter.js | 30 --------------- app/javascript/packs/application.js | 3 -- app/models/fund.rb | 2 +- app/views/funds/_context.haml | 6 +-- app/views/funds/_sidebar.haml | 2 +- spec/cells/filter_cell_spec.rb | 51 ++++++++++++------------- spec/models/fund_spec.rb | 4 +- 12 files changed, 45 insertions(+), 130 deletions(-) delete mode 100644 app/javascript/__tests__/filter.test.js delete mode 100644 app/javascript/modules/filter.js diff --git a/app/cells/current_proposal/show.slim b/app/cells/current_proposal/show.slim index 047a437d..1d15807a 100644 --- a/app/cells/current_proposal/show.slim +++ b/app/cells/current_proposal/show.slim @@ -2,4 +2,4 @@ .flex.justify-between.mb10 h5.bold = title = link_to('Change', proposals_path, class: 'fs15') if model - .fs15.lh20 = proposal_summary \ No newline at end of file + .fs15 = proposal_summary \ No newline at end of file diff --git a/app/cells/current_proposal_cell.rb b/app/cells/current_proposal_cell.rb index d838d693..0755ed1f 100644 --- a/app/cells/current_proposal_cell.rb +++ b/app/cells/current_proposal_cell.rb @@ -24,7 +24,7 @@ def incompelte model.assessments.group(:eligibility_status).size )[INCOMPLETE] str = pluralize(incomplete, 'fund') + ' unchecked' - link_to(str, funds_path(model, eligibility: 'to_check')) + link_to(str, funds_path(model, eligibility: 'to-check')) end def proposal_summary diff --git a/app/cells/filter/show.slim b/app/cells/filter/show.slim index 0d20b358..f909b650 100644 --- a/app/cells/filter/show.slim +++ b/app/cells/filter/show.slim @@ -1,9 +1,5 @@ -form.filter.fs15.flex.flex-wrap - - .md.inline-block.mr10 - | Eligibility: - = select 'eligibility', %w[all eligible ineligible to_check] - - .md.inline-block - | Grant duration: - = select 'duration', [["all", "All"], proposal_duration, ["up-to-2y", "Up to 2 years"], ["2y-plus", "More than 2 years"]].compact +.p20 + .flex.justify-between.mb10 + h5.bold Filter by + = clear_filters + .fs15 = active_filters diff --git a/app/cells/filter_cell.rb b/app/cells/filter_cell.rb index 24524f98..bb8712a0 100644 --- a/app/cells/filter_cell.rb +++ b/app/cells/filter_cell.rb @@ -1,27 +1,22 @@ -include ERB::Util - class FilterCell < Cell::ViewModel def show + @proposal = options[:proposal] render end private - def selected?(id, value) - model[id.to_sym] == value + def filter_params + model.permit(:duration, :eligibility) end - def select(id, options) - tag.select id: id do - options.map do |opt| - opt = [opt, opt.humanize.capitalize] unless opt.is_a?(Array) - tag.option(opt[1], value: url_encode(opt[0]), selected: selected?(id, opt[0])) - end.reduce(:+) - end + def clear_filters + return if filter_params.empty? + link_to('Clear all filters', funds_path(@proposal), class: 'fs15') end - def proposal_duration - ['proposal', "Your proposal (#{options[:funding_duration]} months)"] if - options[:funding_duration] + def active_filters + return 'Add filter' if filter_params.empty? + filter_params.to_h.map { |k, v| "#{k}:#{v}" }.join(', ') end end diff --git a/app/javascript/__tests__/filter.test.js b/app/javascript/__tests__/filter.test.js deleted file mode 100644 index 125301dd..00000000 --- a/app/javascript/__tests__/filter.test.js +++ /dev/null @@ -1,36 +0,0 @@ -/* eslint-env jest */ - -import Filter from '../modules/filter' - -const filter = new Filter() -const dom = ` -
- - -
-` - -test('_parseInputs', () => { - document.body.innerHTML = dom - const $form = document.querySelector('.filter') - - expect(filter._parseInputs($form)) - .toEqual('eligibility=eligible&duration=up-to-2y') -}) - -test('_combinedQueryString', () => { - document.body.innerHTML = dom + ` -
- -
- ` - - expect(filter._combinedQueryString('.filter')) - .toEqual('?eligibility=eligible&duration=up-to-2y&sort=name') -}) diff --git a/app/javascript/modules/filter.js b/app/javascript/modules/filter.js deleted file mode 100644 index 86d3c01c..00000000 --- a/app/javascript/modules/filter.js +++ /dev/null @@ -1,30 +0,0 @@ -export default class Filter { - init (cls) { - this._filterOnChange(cls) - } - - _filterOnChange (cls) { - const self = this - document.addEventListener('change', function (e) { - const $form = e.target.form - if ($form.classList.contains(cls.substring(1))) { - e.preventDefault() - if (window.Turbolinks) { - window.Turbolinks.visit(self._combinedQueryString(cls)) - } else { - window.location = self._combinedQueryString(cls) - } - } - }) - } - - _parseInputs (form) { - return [...form.elements].map((el) => `${el.id}=${el.value}`).join('&') - } - - _combinedQueryString (cls) { - return '?' + [ - ...document.querySelectorAll(cls) - ].map(f => this._parseInputs(f)).join('&') - } -} diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 17cbde62..5dfafb92 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -8,14 +8,11 @@ // layout file, like app/views/layouts/application.html.erb import 'babel-polyfill' -import Filter from '../modules/filter' import Select from '../modules/select' -const filter = new Filter() const select = new Select() document.addEventListener('turbolinks:load', () => { - filter.init('.filter') select.orgType(['user', 'basics_step', 'eligibility_step']) const eligibilityStepOpts = { diff --git a/app/models/fund.rb b/app/models/fund.rb index 72bc1727..df2be4da 100644 --- a/app/models/fund.rb +++ b/app/models/fund.rb @@ -103,7 +103,7 @@ def self.eligibility(state = nil) eligibility = { 'eligible' => ELIGIBLE, 'ineligible' => INELIGIBLE, - 'to_check' => [UNASSESSED, INCOMPLETE] + 'to-check' => [UNASSESSED, INCOMPLETE] }[state] eligibility ? where('assessments.eligibility_status': eligibility) : all diff --git a/app/views/funds/_context.haml b/app/views/funds/_context.haml index 2a0c3c61..32ed8403 100644 --- a/app/views/funds/_context.haml +++ b/app/views/funds/_context.haml @@ -3,8 +3,4 @@ = cell(:current_proposal, @proposal) %section.perc50.md.px20.mb40 .rounded.border.border-mist - .p20 - .flex.justify-between.mb10 - %h5.bold Filter by - = link_to 'Clear all filters', funds_path(@proposal), class: 'fs15' - = cell(:filter, params, funding_duration: @proposal&.funding_duration) \ No newline at end of file + = cell(:filter, params, proposal: @proposal) diff --git a/app/views/funds/_sidebar.haml b/app/views/funds/_sidebar.haml index 8da96fc8..7874e667 100644 --- a/app/views/funds/_sidebar.haml +++ b/app/views/funds/_sidebar.haml @@ -7,7 +7,7 @@ %h6.bold.slate.mb10 Eligibility - = link_to 'Incomplete', funds_path(@proposal, eligibility: 'to_check'), class: selected('to_check', params) + = link_to 'Incomplete', funds_path(@proposal, eligibility: 'to-check'), class: selected('to-check', params) = link_to 'Eligible', funds_path(@proposal, eligibility: 'eligible'), class: selected('eligible', params) = link_to 'Ineligible', funds_path(@proposal, eligibility: 'ineligible'), class: selected('ineligible', params) diff --git a/spec/cells/filter_cell_spec.rb b/spec/cells/filter_cell_spec.rb index 4bc4bb94..fdf1e942 100644 --- a/spec/cells/filter_cell_spec.rb +++ b/spec/cells/filter_cell_spec.rb @@ -1,38 +1,35 @@ require 'rails_helper' describe FilterCell do - let(:funding_duration) { 12 } - let(:filter) do - cell( - :filter, - { eligibility: 'eligible' }, - funding_duration: funding_duration - ).call(:show) - end + controller ApplicationController - it 'has correct options' do - [ - 'All', - 'Eligible', - 'Ineligible', - 'To check', - 'Your proposal', - 'Up to 2 years', - 'More than 2 years' - ].each do |option| - expect(filter).to have_text(option) - end + subject { filter } + + let(:filter) { cell(:filter, params, proposal: proposal).call(:show) } + let(:params) { ActionController::Parameters.new } + let(:proposal) { nil } + + context 'no active filters' do + it { is_expected.to have_text('Add filter') } + it { is_expected.not_to have_link('Clear all filters') } end - context 'funding_duration missing' do - let(:funding_duration) { nil } + context 'unpermitted params' do + let(:params) { ActionController::Parameters.new(unpermitted: 'param') } + it { is_expected.to have_text('Add filter') } + end - it 'hides proposal duration option' do - expect(filter).not_to have_text('Your proposal') + context 'active filters' do + let(:params) do + ActionController::Parameters.new(eligibility: 'eligible', duration: 'all') end - end - it 'selected option' do - expect(filter).to have_select('eligibility', selected: 'Eligible') + it { is_expected.to have_link('Clear all filters', href: '/funds') } + it { is_expected.to have_text('duration:all, eligibility:eligible') } + + context 'with proposal' do + let(:proposal) { build(:proposal, id: 1) } + it { is_expected.to have_link('Clear all filters', href: '/funds/1') } + end end end diff --git a/spec/models/fund_spec.rb b/spec/models/fund_spec.rb index fb17fff2..b141b44d 100644 --- a/spec/models/fund_spec.rb +++ b/spec/models/fund_spec.rb @@ -81,8 +81,8 @@ it { is_expected.to contain_exactly(@funds[:ineligible]) } end - context 'to_check' do - let(:eligibility) { 'to_check' } + context 'to-check' do + let(:eligibility) { 'to-check' } it { is_expected.to contain_exactly(@funds[:orphan], @funds[:incomplete]) } end end From 29bbc5739803d154ad01417428d62686fbc23075 Mon Sep 17 00:00:00 2001 From: Suraj Vadgama Date: Wed, 28 Feb 2018 17:18:06 +0000 Subject: [PATCH 06/10] Update funds sort --- app/assets/stylesheets/v2/application.sass | 2 + app/assets/stylesheets/v2/custom.sass | 20 +- app/assets/stylesheets/v2/modules/button.sass | 3 + app/cells/current_proposal/show.slim | 2 +- app/cells/filter/show.slim | 21 +- app/cells/filter_cell.rb | 37 +- app/javascript/__tests__/dialog.test.js | 26 + app/javascript/__tests__/sort.test.js | 36 + app/javascript/modules/dialog.js | 19 + app/javascript/modules/sort.js | 22 + app/javascript/packs/application.js | 7 + app/views/funds/_context.haml | 2 +- app/views/funds/_sort.haml | 2 +- package.json | 2 + public/packs-test/application.js | 7480 ++++++++++++++++- spec/cells/filter_cell_spec.rb | 38 +- spec/features/filter_spec.rb | 19 + spec/features/sort_spec.rb | 9 + yarn.lock | 16 + 19 files changed, 7716 insertions(+), 47 deletions(-) create mode 100644 app/javascript/__tests__/dialog.test.js create mode 100644 app/javascript/__tests__/sort.test.js create mode 100644 app/javascript/modules/dialog.js create mode 100644 app/javascript/modules/sort.js create mode 100644 spec/features/filter_spec.rb create mode 100644 spec/features/sort_spec.rb diff --git a/app/assets/stylesheets/v2/application.sass b/app/assets/stylesheets/v2/application.sass index b7dc9618..02b6000a 100644 --- a/app/assets/stylesheets/v2/application.sass +++ b/app/assets/stylesheets/v2/application.sass @@ -18,3 +18,5 @@ @import modules/typography @import custom + +@import dialog-polyfill/dialog-polyfill \ No newline at end of file diff --git a/app/assets/stylesheets/v2/custom.sass b/app/assets/stylesheets/v2/custom.sass index 4f6d4856..40e7898e 100644 --- a/app/assets/stylesheets/v2/custom.sass +++ b/app/assets/stylesheets/v2/custom.sass @@ -115,7 +115,7 @@ article.featured .copy text-align: left -.filter +#sort-form select +prefix(appearance, none, webkit moz) border: none @@ -383,3 +383,21 @@ article.featured max-height: 0 overflow: hidden +prefix(transition, max-height .40s, webkit o) + +// Dialog +// ========================================================================= + +// native +dialog::backdrop + background-color: rgba(0, 0, 0, 0.8) !important +// polyfill +dialog + .backdrop + background-color: rgba(0, 0, 0, 0.8) !important + +dialog + min-width: 320px + padding: 0 !important + +.js-open-modal + height: 100vh + overflow: hidden diff --git a/app/assets/stylesheets/v2/modules/button.sass b/app/assets/stylesheets/v2/modules/button.sass index 16097a17..e793717e 100644 --- a/app/assets/stylesheets/v2/modules/button.sass +++ b/app/assets/stylesheets/v2/modules/button.sass @@ -20,9 +20,12 @@ color: inherit background-color: transparent border-radius: $base-radius + transition: opacity .2s &:hover text-decoration: none + opacity: .6 + cursor: pointer &:focus outline: none diff --git a/app/cells/current_proposal/show.slim b/app/cells/current_proposal/show.slim index 1d15807a..047a437d 100644 --- a/app/cells/current_proposal/show.slim +++ b/app/cells/current_proposal/show.slim @@ -2,4 +2,4 @@ .flex.justify-between.mb10 h5.bold = title = link_to('Change', proposals_path, class: 'fs15') if model - .fs15 = proposal_summary \ No newline at end of file + .fs15.lh20 = proposal_summary \ No newline at end of file diff --git a/app/cells/filter/show.slim b/app/cells/filter/show.slim index f909b650..f727494f 100644 --- a/app/cells/filter/show.slim +++ b/app/cells/filter/show.slim @@ -1,5 +1,22 @@ .p20 .flex.justify-between.mb10 h5.bold Filter by - = clear_filters - .fs15 = active_filters + .fs15 = clear_filters + .fs15.lh20 = active_filters + +dialog.rounded.shadow.border.border-silver + .p20.bg-ice.flex.justify-between.items-center + h4.bold Filter funds by + a.js-close-modal Close + + = form_tag(query_path, method: :get, enforce_utf8: false) do + .p20.border-top.border-silver + .mb15 + h6.bold.slate.mb5 Eligibility + = select 'eligibility', %w[all eligible ineligible to-check] + h6.bold.slate.mb5 Funding Duration + = select 'duration', [["all", "All"], proposal_duration, ["up-to-2y", "Up to 2 years"], ["2y-plus", "More than 2 years"]].compact + + .p20.border-top.border-silver.center.bg-ice + = submit_tag 'Filter', name: nil, class: 'white btn bg-blue' + = link_to 'Reset', funds_path(@proposal), class: 'btn blue bg-white border-blue ml10' diff --git a/app/cells/filter_cell.rb b/app/cells/filter_cell.rb index bb8712a0..494c304e 100644 --- a/app/cells/filter_cell.rb +++ b/app/cells/filter_cell.rb @@ -1,22 +1,53 @@ +include ERB::Util + class FilterCell < Cell::ViewModel def show @proposal = options[:proposal] + @url = options[:url] render end private + def selected?(id, value) + model[id.to_sym] == value + end + + def select(id, options) + tag.select id: id, name: id, class: 'input' do + options.map do |opt| + opt = [opt, opt.gsub('-', ' ').capitalize] unless opt.is_a?(Array) + tag.option(opt[1], value: url_encode(opt[0]), selected: selected?(id, opt[0])) + end.reduce(:+) + end + end + + def proposal_duration + ['proposal', "Your proposal (#{options[:funding_duration]} months)"] if + options[:funding_duration] + end + def filter_params model.permit(:duration, :eligibility) end def clear_filters - return if filter_params.empty? - link_to('Clear all filters', funds_path(@proposal), class: 'fs15') + if filter_params.empty? + 'Add filter' + else + [ + 'Edit', + link_to('Clear filters', funds_path(@proposal)) + ].join(' • ') + end end def active_filters - return 'Add filter' if filter_params.empty? + return 'None' if filter_params.empty? filter_params.to_h.map { |k, v| "#{k}:#{v}" }.join(', ') end + + def query_path + @url || funds_path(@proposal) + end end diff --git a/app/javascript/__tests__/dialog.test.js b/app/javascript/__tests__/dialog.test.js new file mode 100644 index 00000000..0cdd971d --- /dev/null +++ b/app/javascript/__tests__/dialog.test.js @@ -0,0 +1,26 @@ +/* eslint-env jest */ + +import Dialog from '../modules/dialog' + +const dialog = new Dialog() + +document.body.innerHTML = ` + + Show + Close + + +` +dialog.init() + +const $dialog = document.querySelector('dialog') + +test('#init, show modal', () => { + document.querySelector('.js-show-modal').click() + expect($dialog.hasAttribute('open')).toEqual(true) +}) + +test('#init, close modal', () => { + document.querySelector('.js-close-modal').click() + expect($dialog.hasAttribute('open')).toEqual(false) +}) diff --git a/app/javascript/__tests__/sort.test.js b/app/javascript/__tests__/sort.test.js new file mode 100644 index 00000000..6e2167a9 --- /dev/null +++ b/app/javascript/__tests__/sort.test.js @@ -0,0 +1,36 @@ +/* eslint-env jest */ + +import Sort from '../modules/sort' + +const sort = new Sort() + +const triggerChange = (id) => { + const $form = document.getElementById(id) + $form.dispatchEvent(new Event('change')) +} + +document.body.innerHTML = ` +
+ +
+` + +Object.defineProperty( + window.location, 'search', { value: '?existing=query', writable: true } +) + +sort.init('sort-form') + +test('appends query string', () => { + triggerChange('sort-form') + expect(window.location.search).toEqual('existing=query&sort=eligibility') +}) + +test('appends query string', () => { + document.getElementById('sort').children[1].selected = true + triggerChange('sort-form') + expect(window.location.search).toEqual('existing=query&sort=name') +}) diff --git a/app/javascript/modules/dialog.js b/app/javascript/modules/dialog.js new file mode 100644 index 00000000..1e1334f5 --- /dev/null +++ b/app/javascript/modules/dialog.js @@ -0,0 +1,19 @@ +import dialogPolyfill from 'dialog-polyfill' + +export default class Dialog { + init ($body = document.body, dialog = 'dialog') { + const $modal = document.querySelector(dialog) + if (!$modal) return + dialogPolyfill.registerDialog($modal) + + document.querySelector('.js-show-modal').onclick = () => { + $body.classList.add('js-open-modal') + $modal.showModal() + } + + document.querySelector('.js-close-modal').onclick = () => { + $body.classList.remove('js-open-modal') + $modal.close() + } + } +} diff --git a/app/javascript/modules/sort.js b/app/javascript/modules/sort.js new file mode 100644 index 00000000..43c2dac0 --- /dev/null +++ b/app/javascript/modules/sort.js @@ -0,0 +1,22 @@ +import qs from 'query-string' + +export default class Sort { + // id: id of HTML form tag + init (id) { + this._filterOnChange(id) + } + + _filterOnChange (id) { + const $form = document.getElementById(id) + if (!$form) return + + $form.addEventListener('change', function (e) { + e.preventDefault() + const queryString = qs.parse(window.location.search) + Array.from($form.elements).forEach(el => { + queryString[el.id] = el.value + }) + window.location.search = qs.stringify(queryString) + }) + } +} diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 5dfafb92..65da9e98 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -8,11 +8,18 @@ // layout file, like app/views/layouts/application.html.erb import 'babel-polyfill' +import Dialog from '../modules/dialog' import Select from '../modules/select' +import Sort from '../modules/sort' +const dialog = new Dialog() const select = new Select() +const sort = new Sort() document.addEventListener('turbolinks:load', () => { + dialog.init() + sort.init('sort-form') + select.orgType(['user', 'basics_step', 'eligibility_step']) const eligibilityStepOpts = { diff --git a/app/views/funds/_context.haml b/app/views/funds/_context.haml index 32ed8403..ce22ff07 100644 --- a/app/views/funds/_context.haml +++ b/app/views/funds/_context.haml @@ -3,4 +3,4 @@ = cell(:current_proposal, @proposal) %section.perc50.md.px20.mb40 .rounded.border.border-mist - = cell(:filter, params, proposal: @proposal) + = cell(:filter, params, funding_duration: @proposal&.funding_duration, proposal: @proposal, url: request.original_url) diff --git a/app/views/funds/_sort.haml b/app/views/funds/_sort.haml index 1ccc1b9a..4ed67822 100644 --- a/app/views/funds/_sort.haml +++ b/app/views/funds/_sort.haml @@ -1,7 +1,7 @@ .flex.justify-between.mb40 .night.truncate.pr30= page_entries_info @funds - %form.filter.flex + %form#sort-form.flex Sort: %select#sort %option{ value: 'eligibility' } Eligibility diff --git a/package.json b/package.json index a459c0d5..d56e6c5f 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "coffee-script": "^1.12.7", "compression-webpack-plugin": "^1.0.0", "css-loader": "^0.28.4", + "dialog-polyfill": "^0.4.9", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^0.11.2", "glob": "^7.1.2", @@ -30,6 +31,7 @@ "postcss-loader": "^2.0.6", "postcss-smart-import": "^0.7.5", "precss": "^2.0.0", + "query-string": "^5.1.0", "rails-erb-loader": "^5.0.2", "resolve-url-loader": "^2.1.0", "sass-loader": "^6.0.6", diff --git a/public/packs-test/application.js b/public/packs-test/application.js index 40116ab5..9088bd66 100644 --- a/public/packs-test/application.js +++ b/public/packs-test/application.js @@ -60,37 +60,7005 @@ /******/ __webpack_require__.p = "/packs-test/"; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ return __webpack_require__(__webpack_require__.s = 87); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { +var global = __webpack_require__(1) + , core = __webpack_require__(31) + , hide = __webpack_require__(10) + , redefine = __webpack_require__(15) + , ctx = __webpack_require__(12) + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}) + , key, own, out, exp; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if(target)redefine(target, key, out, type & $export.U); + // export + if(exports[key] != out)hide(exports, key, exp); + if(IS_PROTO && expProto[key] != out)expProto[key] = out; + } +}; +global.core = core; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(3); +module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; +}; + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + +module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(51)('wks') + , uid = __webpack_require__(18) + , Symbol = __webpack_require__(1).Symbol + , USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function(name){ + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(2) + , IE8_DOM_DEFINE = __webpack_require__(65) + , toPrimitive = __webpack_require__(32) + , dP = Object.defineProperty; + +exports.f = __webpack_require__(9) ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; + +/***/ }), +/* 7 */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function(it, key){ + return hasOwnProperty.call(it, key); +}; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.15 ToLength +var toInteger = __webpack_require__(24) + , min = Math.min; +module.exports = function(it){ + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(5)(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; +}); + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(6) + , createDesc = __webpack_require__(14); +module.exports = __webpack_require__(9) ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(48) + , defined = __webpack_require__(16); +module.exports = function(it){ + return IObject(defined(it)); +}; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(19); +module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; +}; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +if(__webpack_require__(9)){ + var LIBRARY = __webpack_require__(21) + , global = __webpack_require__(1) + , fails = __webpack_require__(5) + , $export = __webpack_require__(0) + , $typed = __webpack_require__(47) + , $buffer = __webpack_require__(66) + , ctx = __webpack_require__(12) + , anInstance = __webpack_require__(23) + , propertyDesc = __webpack_require__(14) + , hide = __webpack_require__(10) + , redefineAll = __webpack_require__(22) + , toInteger = __webpack_require__(24) + , toLength = __webpack_require__(8) + , toIndex = __webpack_require__(26) + , toPrimitive = __webpack_require__(32) + , has = __webpack_require__(7) + , same = __webpack_require__(68) + , classof = __webpack_require__(55) + , isObject = __webpack_require__(3) + , toObject = __webpack_require__(20) + , isArrayIter = __webpack_require__(56) + , create = __webpack_require__(34) + , getPrototypeOf = __webpack_require__(35) + , gOPN = __webpack_require__(33).f + , getIterFn = __webpack_require__(57) + , uid = __webpack_require__(18) + , wks = __webpack_require__(4) + , createArrayMethod = __webpack_require__(36) + , createArrayIncludes = __webpack_require__(49) + , speciesConstructor = __webpack_require__(54) + , ArrayIterators = __webpack_require__(58) + , Iterators = __webpack_require__(28) + , $iterDetect = __webpack_require__(40) + , setSpecies = __webpack_require__(39) + , arrayFill = __webpack_require__(53) + , arrayCopyWithin = __webpack_require__(73) + , $DP = __webpack_require__(6) + , $GOPD = __webpack_require__(17) + , dP = $DP.f + , gOPD = $GOPD.f + , RangeError = global.RangeError + , TypeError = global.TypeError + , Uint8Array = global.Uint8Array + , ARRAY_BUFFER = 'ArrayBuffer' + , SHARED_BUFFER = 'Shared' + ARRAY_BUFFER + , BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT' + , PROTOTYPE = 'prototype' + , ArrayProto = Array[PROTOTYPE] + , $ArrayBuffer = $buffer.ArrayBuffer + , $DataView = $buffer.DataView + , arrayForEach = createArrayMethod(0) + , arrayFilter = createArrayMethod(2) + , arraySome = createArrayMethod(3) + , arrayEvery = createArrayMethod(4) + , arrayFind = createArrayMethod(5) + , arrayFindIndex = createArrayMethod(6) + , arrayIncludes = createArrayIncludes(true) + , arrayIndexOf = createArrayIncludes(false) + , arrayValues = ArrayIterators.values + , arrayKeys = ArrayIterators.keys + , arrayEntries = ArrayIterators.entries + , arrayLastIndexOf = ArrayProto.lastIndexOf + , arrayReduce = ArrayProto.reduce + , arrayReduceRight = ArrayProto.reduceRight + , arrayJoin = ArrayProto.join + , arraySort = ArrayProto.sort + , arraySlice = ArrayProto.slice + , arrayToString = ArrayProto.toString + , arrayToLocaleString = ArrayProto.toLocaleString + , ITERATOR = wks('iterator') + , TAG = wks('toStringTag') + , TYPED_CONSTRUCTOR = uid('typed_constructor') + , DEF_CONSTRUCTOR = uid('def_constructor') + , ALL_CONSTRUCTORS = $typed.CONSTR + , TYPED_ARRAY = $typed.TYPED + , VIEW = $typed.VIEW + , WRONG_LENGTH = 'Wrong length!'; + + var $map = createArrayMethod(1, function(O, length){ + return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length); + }); + + var LITTLE_ENDIAN = fails(function(){ + return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; + }); + + var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){ + new Uint8Array(1).set({}); + }); + + var strictToLength = function(it, SAME){ + if(it === undefined)throw TypeError(WRONG_LENGTH); + var number = +it + , length = toLength(it); + if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH); + return length; + }; + + var toOffset = function(it, BYTES){ + var offset = toInteger(it); + if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!'); + return offset; + }; + + var validate = function(it){ + if(isObject(it) && TYPED_ARRAY in it)return it; + throw TypeError(it + ' is not a typed array!'); + }; + + var allocate = function(C, length){ + if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){ + throw TypeError('It is not a typed array constructor!'); + } return new C(length); + }; + + var speciesFromList = function(O, list){ + return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list); + }; + + var fromList = function(C, list){ + var index = 0 + , length = list.length + , result = allocate(C, length); + while(length > index)result[index] = list[index++]; + return result; + }; + + var addGetter = function(it, key, internal){ + dP(it, key, {get: function(){ return this._d[internal]; }}); + }; + + var $from = function from(source /*, mapfn, thisArg */){ + var O = toObject(source) + , aLen = arguments.length + , mapfn = aLen > 1 ? arguments[1] : undefined + , mapping = mapfn !== undefined + , iterFn = getIterFn(O) + , i, length, values, result, step, iterator; + if(iterFn != undefined && !isArrayIter(iterFn)){ + for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){ + values.push(step.value); + } O = values; + } + if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2); + for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){ + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + return result; + }; + + var $of = function of(/*...items*/){ + var index = 0 + , length = arguments.length + , result = allocate(this, length); + while(length > index)result[index] = arguments[index++]; + return result; + }; + + // iOS Safari 6.x fails here + var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); }); + + var $toLocaleString = function toLocaleString(){ + return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments); + }; + + var proto = { + copyWithin: function copyWithin(target, start /*, end */){ + return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined); + }, + every: function every(callbackfn /*, thisArg */){ + return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars + return arrayFill.apply(validate(this), arguments); + }, + filter: function filter(callbackfn /*, thisArg */){ + return speciesFromList(this, arrayFilter(validate(this), callbackfn, + arguments.length > 1 ? arguments[1] : undefined)); + }, + find: function find(predicate /*, thisArg */){ + return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + findIndex: function findIndex(predicate /*, thisArg */){ + return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + forEach: function forEach(callbackfn /*, thisArg */){ + arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + indexOf: function indexOf(searchElement /*, fromIndex */){ + return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + includes: function includes(searchElement /*, fromIndex */){ + return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + join: function join(separator){ // eslint-disable-line no-unused-vars + return arrayJoin.apply(validate(this), arguments); + }, + lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars + return arrayLastIndexOf.apply(validate(this), arguments); + }, + map: function map(mapfn /*, thisArg */){ + return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined); + }, + reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars + return arrayReduce.apply(validate(this), arguments); + }, + reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars + return arrayReduceRight.apply(validate(this), arguments); + }, + reverse: function reverse(){ + var that = this + , length = validate(that).length + , middle = Math.floor(length / 2) + , index = 0 + , value; + while(index < middle){ + value = that[index]; + that[index++] = that[--length]; + that[length] = value; + } return that; + }, + some: function some(callbackfn /*, thisArg */){ + return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + sort: function sort(comparefn){ + return arraySort.call(validate(this), comparefn); + }, + subarray: function subarray(begin, end){ + var O = validate(this) + , length = O.length + , $begin = toIndex(begin, length); + return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))( + O.buffer, + O.byteOffset + $begin * O.BYTES_PER_ELEMENT, + toLength((end === undefined ? length : toIndex(end, length)) - $begin) + ); + } + }; + + var $slice = function slice(start, end){ + return speciesFromList(this, arraySlice.call(validate(this), start, end)); + }; + + var $set = function set(arrayLike /*, offset */){ + validate(this); + var offset = toOffset(arguments[1], 1) + , length = this.length + , src = toObject(arrayLike) + , len = toLength(src.length) + , index = 0; + if(len + offset > length)throw RangeError(WRONG_LENGTH); + while(index < len)this[offset + index] = src[index++]; + }; + + var $iterators = { + entries: function entries(){ + return arrayEntries.call(validate(this)); + }, + keys: function keys(){ + return arrayKeys.call(validate(this)); + }, + values: function values(){ + return arrayValues.call(validate(this)); + } + }; + + var isTAIndex = function(target, key){ + return isObject(target) + && target[TYPED_ARRAY] + && typeof key != 'symbol' + && key in target + && String(+key) == String(key); + }; + var $getDesc = function getOwnPropertyDescriptor(target, key){ + return isTAIndex(target, key = toPrimitive(key, true)) + ? propertyDesc(2, target[key]) + : gOPD(target, key); + }; + var $setDesc = function defineProperty(target, key, desc){ + if(isTAIndex(target, key = toPrimitive(key, true)) + && isObject(desc) + && has(desc, 'value') + && !has(desc, 'get') + && !has(desc, 'set') + // TODO: add validation descriptor w/o calling accessors + && !desc.configurable + && (!has(desc, 'writable') || desc.writable) + && (!has(desc, 'enumerable') || desc.enumerable) + ){ + target[key] = desc.value; + return target; + } else return dP(target, key, desc); + }; + + if(!ALL_CONSTRUCTORS){ + $GOPD.f = $getDesc; + $DP.f = $setDesc; + } + + $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', { + getOwnPropertyDescriptor: $getDesc, + defineProperty: $setDesc + }); + + if(fails(function(){ arrayToString.call({}); })){ + arrayToString = arrayToLocaleString = function toString(){ + return arrayJoin.call(this); + } + } + + var $TypedArrayPrototype$ = redefineAll({}, proto); + redefineAll($TypedArrayPrototype$, $iterators); + hide($TypedArrayPrototype$, ITERATOR, $iterators.values); + redefineAll($TypedArrayPrototype$, { + slice: $slice, + set: $set, + constructor: function(){ /* noop */ }, + toString: arrayToString, + toLocaleString: $toLocaleString + }); + addGetter($TypedArrayPrototype$, 'buffer', 'b'); + addGetter($TypedArrayPrototype$, 'byteOffset', 'o'); + addGetter($TypedArrayPrototype$, 'byteLength', 'l'); + addGetter($TypedArrayPrototype$, 'length', 'e'); + dP($TypedArrayPrototype$, TAG, { + get: function(){ return this[TYPED_ARRAY]; } + }); + + module.exports = function(KEY, BYTES, wrapper, CLAMPED){ + CLAMPED = !!CLAMPED; + var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array' + , ISNT_UINT8 = NAME != 'Uint8Array' + , GETTER = 'get' + KEY + , SETTER = 'set' + KEY + , TypedArray = global[NAME] + , Base = TypedArray || {} + , TAC = TypedArray && getPrototypeOf(TypedArray) + , FORCED = !TypedArray || !$typed.ABV + , O = {} + , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE]; + var getter = function(that, index){ + var data = that._d; + return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN); + }; + var setter = function(that, index, value){ + var data = that._d; + if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff; + data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN); + }; + var addElement = function(that, index){ + dP(that, index, { + get: function(){ + return getter(this, index); + }, + set: function(value){ + return setter(this, index, value); + }, + enumerable: true + }); + }; + if(FORCED){ + TypedArray = wrapper(function(that, data, $offset, $length){ + anInstance(that, TypedArray, NAME, '_d'); + var index = 0 + , offset = 0 + , buffer, byteLength, length, klass; + if(!isObject(data)){ + length = strictToLength(data, true) + byteLength = length * BYTES; + buffer = new $ArrayBuffer(byteLength); + } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){ + buffer = data; + offset = toOffset($offset, BYTES); + var $len = data.byteLength; + if($length === undefined){ + if($len % BYTES)throw RangeError(WRONG_LENGTH); + byteLength = $len - offset; + if(byteLength < 0)throw RangeError(WRONG_LENGTH); + } else { + byteLength = toLength($length) * BYTES; + if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH); + } + length = byteLength / BYTES; + } else if(TYPED_ARRAY in data){ + return fromList(TypedArray, data); + } else { + return $from.call(TypedArray, data); + } + hide(that, '_d', { + b: buffer, + o: offset, + l: byteLength, + e: length, + v: new $DataView(buffer) + }); + while(index < length)addElement(that, index++); + }); + TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$); + hide(TypedArrayPrototype, 'constructor', TypedArray); + } else if(!$iterDetect(function(iter){ + // V8 works with iterators, but fails in many other cases + // https://code.google.com/p/v8/issues/detail?id=4552 + new TypedArray(null); // eslint-disable-line no-new + new TypedArray(iter); // eslint-disable-line no-new + }, true)){ + TypedArray = wrapper(function(that, data, $offset, $length){ + anInstance(that, TypedArray, NAME); + var klass; + // `ws` module bug, temporarily remove validation length for Uint8Array + // https://github.com/websockets/ws/pull/645 + if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8)); + if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){ + return $length !== undefined + ? new Base(data, toOffset($offset, BYTES), $length) + : $offset !== undefined + ? new Base(data, toOffset($offset, BYTES)) + : new Base(data); + } + if(TYPED_ARRAY in data)return fromList(TypedArray, data); + return $from.call(TypedArray, data); + }); + arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){ + if(!(key in TypedArray))hide(TypedArray, key, Base[key]); + }); + TypedArray[PROTOTYPE] = TypedArrayPrototype; + if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray; + } + var $nativeIterator = TypedArrayPrototype[ITERATOR] + , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined) + , $iterator = $iterators.values; + hide(TypedArray, TYPED_CONSTRUCTOR, true); + hide(TypedArrayPrototype, TYPED_ARRAY, NAME); + hide(TypedArrayPrototype, VIEW, true); + hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray); + + if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){ + dP(TypedArrayPrototype, TAG, { + get: function(){ return NAME; } + }); + } + + O[NAME] = TypedArray; + + $export($export.G + $export.W + $export.F * (TypedArray != Base), O); + + $export($export.S, NAME, { + BYTES_PER_ELEMENT: BYTES, + from: $from, + of: $of + }); + + if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES); + + $export($export.P, NAME, proto); + + setSpecies(NAME); + + $export($export.P + $export.F * FORCED_SET, NAME, {set: $set}); + + $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators); + + $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString}); + + $export($export.P + $export.F * fails(function(){ + new TypedArray(1).slice(); + }), NAME, {slice: $slice}); + + $export($export.P + $export.F * (fails(function(){ + return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString() + }) || !fails(function(){ + TypedArrayPrototype.toLocaleString.call([1, 2]); + })), NAME, {toLocaleString: $toLocaleString}); + + Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator; + if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator); + }; +} else module.exports = function(){ /* empty */ }; + +/***/ }), +/* 14 */ +/***/ (function(module, exports) { + +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(1) + , hide = __webpack_require__(10) + , has = __webpack_require__(7) + , SRC = __webpack_require__(18)('src') + , TO_STRING = 'toString' + , $toString = Function[TO_STRING] + , TPL = ('' + $toString).split(TO_STRING); + +__webpack_require__(31).inspectSource = function(it){ + return $toString.call(it); +}; + +(module.exports = function(O, key, val, safe){ + var isFunction = typeof val == 'function'; + if(isFunction)has(val, 'name') || hide(val, 'name', key); + if(O[key] === val)return; + if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if(O === global){ + O[key] = val; + } else { + if(!safe){ + delete O[key]; + hide(O, key, val); + } else { + if(O[key])O[key] = val; + else hide(O, key, val); + } + } +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, TO_STRING, function toString(){ + return typeof this == 'function' && this[SRC] || $toString.call(this); +}); + +/***/ }), +/* 16 */ +/***/ (function(module, exports) { + +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function(it){ + if(it == undefined)throw TypeError("Can't call method on " + it); + return it; +}; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +var pIE = __webpack_require__(37) + , createDesc = __webpack_require__(14) + , toIObject = __webpack_require__(11) + , toPrimitive = __webpack_require__(32) + , has = __webpack_require__(7) + , IE8_DOM_DEFINE = __webpack_require__(65) + , gOPD = Object.getOwnPropertyDescriptor; + +exports.f = __webpack_require__(9) ? gOPD : function getOwnPropertyDescriptor(O, P){ + O = toIObject(O); + P = toPrimitive(P, true); + if(IE8_DOM_DEFINE)try { + return gOPD(O, P); + } catch(e){ /* empty */ } + if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]); +}; + +/***/ }), +/* 18 */ +/***/ (function(module, exports) { + +var id = 0 + , px = Math.random(); +module.exports = function(key){ + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + +/***/ }), +/* 19 */ +/***/ (function(module, exports) { + +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.13 ToObject(argument) +var defined = __webpack_require__(16); +module.exports = function(it){ + return Object(defined(it)); +}; + +/***/ }), +/* 21 */ +/***/ (function(module, exports) { + +module.exports = false; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +var redefine = __webpack_require__(15); +module.exports = function(target, src, safe){ + for(var key in src)redefine(target, key, src[key], safe); + return target; +}; + +/***/ }), +/* 23 */ +/***/ (function(module, exports) { + +module.exports = function(it, Constructor, name, forbiddenField){ + if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){ + throw TypeError(name + ': incorrect invocation!'); + } return it; +}; + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil + , floor = Math.floor; +module.exports = function(it){ + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(24) + , max = Math.max + , min = Math.min; +module.exports = function(index, length){ + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +var def = __webpack_require__(6).f + , has = __webpack_require__(7) + , TAG = __webpack_require__(4)('toStringTag'); + +module.exports = function(it, tag, stat){ + if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); +}; + +/***/ }), +/* 28 */ +/***/ (function(module, exports) { + +module.exports = {}; + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = __webpack_require__(67) + , enumBugKeys = __webpack_require__(52); + +module.exports = Object.keys || function keys(O){ + return $keys(O, enumBugKeys); +}; + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +// 22.1.3.31 Array.prototype[@@unscopables] +var UNSCOPABLES = __webpack_require__(4)('unscopables') + , ArrayProto = Array.prototype; +if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(10)(ArrayProto, UNSCOPABLES, {}); +module.exports = function(key){ + ArrayProto[UNSCOPABLES][key] = true; +}; + +/***/ }), +/* 31 */ +/***/ (function(module, exports) { + +var core = module.exports = {version: '2.4.0'}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = __webpack_require__(3); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); +}; + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) +var $keys = __webpack_require__(67) + , hiddenKeys = __webpack_require__(52).concat('length', 'prototype'); + +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ + return $keys(O, hiddenKeys); +}; + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = __webpack_require__(2) + , dPs = __webpack_require__(90) + , enumBugKeys = __webpack_require__(52) + , IE_PROTO = __webpack_require__(50)('IE_PROTO') + , Empty = function(){ /* empty */ } + , PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function(){ + // Thrash, waste and sodomy: IE GC bug + var iframe = __webpack_require__(46)('iframe') + , i = enumBugKeys.length + , lt = '<' + , gt = '>' + , iframeDocument; + iframe.style.display = 'none'; + __webpack_require__(69).appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties){ + var result; + if(O !== null){ + Empty[PROTOTYPE] = anObject(O); + result = new Empty; + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) +var has = __webpack_require__(7) + , toObject = __webpack_require__(20) + , IE_PROTO = __webpack_require__(50)('IE_PROTO') + , ObjectProto = Object.prototype; + +module.exports = Object.getPrototypeOf || function(O){ + O = toObject(O); + if(has(O, IE_PROTO))return O[IE_PROTO]; + if(typeof O.constructor == 'function' && O instanceof O.constructor){ + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; +}; + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex +var ctx = __webpack_require__(12) + , IObject = __webpack_require__(48) + , toObject = __webpack_require__(20) + , toLength = __webpack_require__(8) + , asc = __webpack_require__(91); +module.exports = function(TYPE, $create){ + var IS_MAP = TYPE == 1 + , IS_FILTER = TYPE == 2 + , IS_SOME = TYPE == 3 + , IS_EVERY = TYPE == 4 + , IS_FIND_INDEX = TYPE == 6 + , NO_HOLES = TYPE == 5 || IS_FIND_INDEX + , create = $create || asc; + return function($this, callbackfn, that){ + var O = toObject($this) + , self = IObject(O) + , f = ctx(callbackfn, that, 3) + , length = toLength(self.length) + , index = 0 + , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined + , val, res; + for(;length > index; index++)if(NO_HOLES || index in self){ + val = self[index]; + res = f(val, index, O); + if(TYPE){ + if(IS_MAP)result[index] = res; // map + else if(res)switch(TYPE){ + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if(IS_EVERY)return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; +}; + +/***/ }), +/* 37 */ +/***/ (function(module, exports) { + +exports.f = {}.propertyIsEnumerable; + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +var META = __webpack_require__(18)('meta') + , isObject = __webpack_require__(3) + , has = __webpack_require__(7) + , setDesc = __webpack_require__(6).f + , id = 0; +var isExtensible = Object.isExtensible || function(){ + return true; +}; +var FREEZE = !__webpack_require__(5)(function(){ + return isExtensible(Object.preventExtensions({})); +}); +var setMeta = function(it){ + setDesc(it, META, {value: { + i: 'O' + ++id, // object ID + w: {} // weak collections IDs + }}); +}; +var fastKey = function(it, create){ + // return primitive with prefix + if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if(!has(it, META)){ + // can't set metadata to uncaught frozen object + if(!isExtensible(it))return 'F'; + // not necessary to add metadata + if(!create)return 'E'; + // add missing metadata + setMeta(it); + // return object ID + } return it[META].i; +}; +var getWeak = function(it, create){ + if(!has(it, META)){ + // can't set metadata to uncaught frozen object + if(!isExtensible(it))return true; + // not necessary to add metadata + if(!create)return false; + // add missing metadata + setMeta(it); + // return hash weak collections IDs + } return it[META].w; +}; +// add metadata on freeze-family methods calling +var onFreeze = function(it){ + if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it); + return it; +}; +var meta = module.exports = { + KEY: META, + NEED: false, + fastKey: fastKey, + getWeak: getWeak, + onFreeze: onFreeze +}; + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var global = __webpack_require__(1) + , dP = __webpack_require__(6) + , DESCRIPTORS = __webpack_require__(9) + , SPECIES = __webpack_require__(4)('species'); + +module.exports = function(KEY){ + var C = global[KEY]; + if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, { + configurable: true, + get: function(){ return this; } + }); +}; + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + +var ITERATOR = __webpack_require__(4)('iterator') + , SAFE_CLOSING = false; + +try { + var riter = [7][ITERATOR](); + riter['return'] = function(){ SAFE_CLOSING = true; }; + Array.from(riter, function(){ throw 2; }); +} catch(e){ /* empty */ } + +module.exports = function(exec, skipClosing){ + if(!skipClosing && !SAFE_CLOSING)return false; + var safe = false; + try { + var arr = [7] + , iter = arr[ITERATOR](); + iter.next = function(){ return {done: safe = true}; }; + arr[ITERATOR] = function(){ return iter; }; + exec(arr); + } catch(e){ /* empty */ } + return safe; +}; + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + +var ctx = __webpack_require__(12) + , call = __webpack_require__(75) + , isArrayIter = __webpack_require__(56) + , anObject = __webpack_require__(2) + , toLength = __webpack_require__(8) + , getIterFn = __webpack_require__(57) + , BREAK = {} + , RETURN = {}; +var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){ + var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable) + , f = ctx(fn, that, entries ? 2 : 1) + , index = 0 + , length, step, iterator, result; + if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!'); + // fast case for arrays with default iterator + if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){ + result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + if(result === BREAK || result === RETURN)return result; + } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){ + result = call(iterator, f, step.value, entries); + if(result === BREAK || result === RETURN)return result; + } +}; +exports.BREAK = BREAK; +exports.RETURN = RETURN; + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var global = __webpack_require__(1) + , $export = __webpack_require__(0) + , redefine = __webpack_require__(15) + , redefineAll = __webpack_require__(22) + , meta = __webpack_require__(38) + , forOf = __webpack_require__(41) + , anInstance = __webpack_require__(23) + , isObject = __webpack_require__(3) + , fails = __webpack_require__(5) + , $iterDetect = __webpack_require__(40) + , setToStringTag = __webpack_require__(27) + , inheritIfRequired = __webpack_require__(103); + +module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ + var Base = global[NAME] + , C = Base + , ADDER = IS_MAP ? 'set' : 'add' + , proto = C && C.prototype + , O = {}; + var fixMethod = function(KEY){ + var fn = proto[KEY]; + redefine(proto, KEY, + KEY == 'delete' ? function(a){ + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'has' ? function has(a){ + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'get' ? function get(a){ + return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; } + : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; } + ); + }; + if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){ + new C().entries().next(); + }))){ + // create collection constructor + C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); + redefineAll(C.prototype, methods); + meta.NEED = true; + } else { + var instance = new C + // early implementations not supports chaining + , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); }) + // most early implementations doesn't supports iterables, most modern - not close it correctly + , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new + // for early implementations -0 and +0 not the same + , BUGGY_ZERO = !IS_WEAK && fails(function(){ + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new C() + , index = 5; + while(index--)$instance[ADDER](index, index); + return !$instance.has(-0); + }); + if(!ACCEPT_ITERABLES){ + C = wrapper(function(target, iterable){ + anInstance(target, C, NAME); + var that = inheritIfRequired(new Base, target, C); + if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); + return that; + }); + C.prototype = proto; + proto.constructor = C; + } + if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){ + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER); + // weak collections should not contains .clear method + if(IS_WEAK && proto.clear)delete proto.clear; + } + + setToStringTag(C, NAME); + + O[NAME] = C; + $export($export.G + $export.W + $export.F * (C != Base), O); + + if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); + + return C; +}; + +/***/ }), +/* 43 */ +/***/ (function(module, exports) { + +exports.f = Object.getOwnPropertySymbols; + +/***/ }), +/* 44 */ +/***/ (function(module, exports) { + +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function(fn, args, that){ + var un = that === undefined; + switch(args.length){ + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var hide = __webpack_require__(10) + , redefine = __webpack_require__(15) + , fails = __webpack_require__(5) + , defined = __webpack_require__(16) + , wks = __webpack_require__(4); + +module.exports = function(KEY, length, exec){ + var SYMBOL = wks(KEY) + , fns = exec(defined, SYMBOL, ''[KEY]) + , strfn = fns[0] + , rxfn = fns[1]; + if(fails(function(){ + var O = {}; + O[SYMBOL] = function(){ return 7; }; + return ''[KEY](O) != 7; + })){ + redefine(String.prototype, KEY, strfn); + hide(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function(string, arg){ return rxfn.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function(string){ return rxfn.call(string, this); } + ); + } +}; + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(3) + , document = __webpack_require__(1).document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); +module.exports = function(it){ + return is ? document.createElement(it) : {}; +}; + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(1) + , hide = __webpack_require__(10) + , uid = __webpack_require__(18) + , TYPED = uid('typed_array') + , VIEW = uid('view') + , ABV = !!(global.ArrayBuffer && global.DataView) + , CONSTR = ABV + , i = 0, l = 9, Typed; + +var TypedArrayConstructors = ( + 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array' +).split(','); + +while(i < l){ + if(Typed = global[TypedArrayConstructors[i++]]){ + hide(Typed.prototype, TYPED, true); + hide(Typed.prototype, VIEW, true); + } else CONSTR = false; +} + +module.exports = { + ABV: ABV, + CONSTR: CONSTR, + TYPED: TYPED, + VIEW: VIEW +}; + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = __webpack_require__(25); +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); +}; + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + +// false -> Array#indexOf +// true -> Array#includes +var toIObject = __webpack_require__(11) + , toLength = __webpack_require__(8) + , toIndex = __webpack_require__(26); +module.exports = function(IS_INCLUDES){ + return function($this, el, fromIndex){ + var O = toIObject($this) + , length = toLength(O.length) + , index = toIndex(fromIndex, length) + , value; + // Array#includes uses SameValueZero equality algorithm + if(IS_INCLUDES && el != el)while(length > index){ + value = O[index++]; + if(value != value)return true; + // Array#toIndex ignores holes, Array#includes - not + } else for(;length > index; index++)if(IS_INCLUDES || index in O){ + if(O[index] === el)return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(51)('keys') + , uid = __webpack_require__(18); +module.exports = function(key){ + return shared[key] || (shared[key] = uid(key)); +}; + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(1) + , SHARED = '__core-js_shared__' + , store = global[SHARED] || (global[SHARED] = {}); +module.exports = function(key){ + return store[key] || (store[key] = {}); +}; + +/***/ }), +/* 52 */ +/***/ (function(module, exports) { + +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) + +var toObject = __webpack_require__(20) + , toIndex = __webpack_require__(26) + , toLength = __webpack_require__(8); +module.exports = function fill(value /*, start = 0, end = @length */){ + var O = toObject(this) + , length = toLength(O.length) + , aLen = arguments.length + , index = toIndex(aLen > 1 ? arguments[1] : undefined, length) + , end = aLen > 2 ? arguments[2] : undefined + , endPos = end === undefined ? length : toIndex(end, length); + while(endPos > index)O[index++] = value; + return O; +}; + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.3.20 SpeciesConstructor(O, defaultConstructor) +var anObject = __webpack_require__(2) + , aFunction = __webpack_require__(19) + , SPECIES = __webpack_require__(4)('species'); +module.exports = function(O, D){ + var C = anObject(O).constructor, S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); +}; + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + +// getting tag from 19.1.3.6 Object.prototype.toString() +var cof = __webpack_require__(25) + , TAG = __webpack_require__(4)('toStringTag') + // ES3 wrong here + , ARG = cof(function(){ return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function(it, key){ + try { + return it[key]; + } catch(e){ /* empty */ } +}; + +module.exports = function(it){ + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; +}; + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + +// check on default Array iterator +var Iterators = __webpack_require__(28) + , ITERATOR = __webpack_require__(4)('iterator') + , ArrayProto = Array.prototype; + +module.exports = function(it){ + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); +}; + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(55) + , ITERATOR = __webpack_require__(4)('iterator') + , Iterators = __webpack_require__(28); +module.exports = __webpack_require__(31).getIteratorMethod = function(it){ + if(it != undefined)return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var addToUnscopables = __webpack_require__(30) + , step = __webpack_require__(71) + , Iterators = __webpack_require__(28) + , toIObject = __webpack_require__(11); + +// 22.1.3.4 Array.prototype.entries() +// 22.1.3.13 Array.prototype.keys() +// 22.1.3.29 Array.prototype.values() +// 22.1.3.30 Array.prototype[@@iterator]() +module.exports = __webpack_require__(72)(Array, 'Array', function(iterated, kind){ + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind +// 22.1.5.2.1 %ArrayIteratorPrototype%.next() +}, function(){ + var O = this._t + , kind = this._k + , index = this._i++; + if(!O || index >= O.length){ + this._t = undefined; + return step(1); + } + if(kind == 'keys' )return step(0, index); + if(kind == 'values')return step(0, O[index]); + return step(0, [index, O[index]]); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) +Iterators.Arguments = Iterators.Array; + +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + +var ctx = __webpack_require__(12) + , invoke = __webpack_require__(44) + , html = __webpack_require__(69) + , cel = __webpack_require__(46) + , global = __webpack_require__(1) + , process = global.process + , setTask = global.setImmediate + , clearTask = global.clearImmediate + , MessageChannel = global.MessageChannel + , counter = 0 + , queue = {} + , ONREADYSTATECHANGE = 'onreadystatechange' + , defer, channel, port; +var run = function(){ + var id = +this; + if(queue.hasOwnProperty(id)){ + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function(event){ + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if(!setTask || !clearTask){ + setTask = function setImmediate(fn){ + var args = [], i = 1; + while(arguments.length > i)args.push(arguments[i++]); + queue[++counter] = function(){ + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id){ + delete queue[id]; + }; + // Node.js 0.8- + if(__webpack_require__(25)(process) == 'process'){ + defer = function(id){ + process.nextTick(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if(MessageChannel){ + channel = new MessageChannel; + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ + defer = function(id){ + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if(ONREADYSTATECHANGE in cel('script')){ + defer = function(id){ + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function(id){ + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + +// helper for String#{startsWith, endsWith, includes} +var isRegExp = __webpack_require__(82) + , defined = __webpack_require__(16); + +module.exports = function(that, searchString, NAME){ + if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!"); + return String(defined(that)); +}; + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + +var MATCH = __webpack_require__(4)('match'); +module.exports = function(KEY){ + var re = /./; + try { + '/./'[KEY](re); + } catch(e){ + try { + re[MATCH] = false; + return !'/./'[KEY](re); + } catch(f){ /* empty */ } + } return true; +}; + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $defineProperty = __webpack_require__(6) + , createDesc = __webpack_require__(14); + +module.exports = function(object, index, value){ + if(index in object)$defineProperty.f(object, index, createDesc(0, value)); + else object[index] = value; +}; + +/***/ }), +/* 63 */ +/***/ (function(module, exports) { + +// 20.2.2.28 Math.sign(x) +module.exports = Math.sign || function sign(x){ + return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; +}; + +/***/ }), +/* 64 */ +/***/ (function(module, exports) { + +// 20.2.2.14 Math.expm1(x) +var $expm1 = Math.expm1; +module.exports = (!$expm1 + // Old FF bug + || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 + // Tor Browser bug + || $expm1(-2e-17) != -2e-17 +) ? function expm1(x){ + return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1; +} : $expm1; + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = !__webpack_require__(9) && !__webpack_require__(5)(function(){ + return Object.defineProperty(__webpack_require__(46)('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var global = __webpack_require__(1) + , DESCRIPTORS = __webpack_require__(9) + , LIBRARY = __webpack_require__(21) + , $typed = __webpack_require__(47) + , hide = __webpack_require__(10) + , redefineAll = __webpack_require__(22) + , fails = __webpack_require__(5) + , anInstance = __webpack_require__(23) + , toInteger = __webpack_require__(24) + , toLength = __webpack_require__(8) + , gOPN = __webpack_require__(33).f + , dP = __webpack_require__(6).f + , arrayFill = __webpack_require__(53) + , setToStringTag = __webpack_require__(27) + , ARRAY_BUFFER = 'ArrayBuffer' + , DATA_VIEW = 'DataView' + , PROTOTYPE = 'prototype' + , WRONG_LENGTH = 'Wrong length!' + , WRONG_INDEX = 'Wrong index!' + , $ArrayBuffer = global[ARRAY_BUFFER] + , $DataView = global[DATA_VIEW] + , Math = global.Math + , RangeError = global.RangeError + , Infinity = global.Infinity + , BaseBuffer = $ArrayBuffer + , abs = Math.abs + , pow = Math.pow + , floor = Math.floor + , log = Math.log + , LN2 = Math.LN2 + , BUFFER = 'buffer' + , BYTE_LENGTH = 'byteLength' + , BYTE_OFFSET = 'byteOffset' + , $BUFFER = DESCRIPTORS ? '_b' : BUFFER + , $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH + , $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET; + +// IEEE754 conversions based on https://github.com/feross/ieee754 +var packIEEE754 = function(value, mLen, nBytes){ + var buffer = Array(nBytes) + , eLen = nBytes * 8 - mLen - 1 + , eMax = (1 << eLen) - 1 + , eBias = eMax >> 1 + , rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0 + , i = 0 + , s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0 + , e, m, c; + value = abs(value) + if(value != value || value === Infinity){ + m = value != value ? 1 : 0; + e = eMax; + } else { + e = floor(log(value) / LN2); + if(value * (c = pow(2, -e)) < 1){ + e--; + c *= 2; + } + if(e + eBias >= 1){ + value += rt / c; + } else { + value += rt * pow(2, 1 - eBias); + } + if(value * c >= 2){ + e++; + c /= 2; + } + if(e + eBias >= eMax){ + m = 0; + e = eMax; + } else if(e + eBias >= 1){ + m = (value * c - 1) * pow(2, mLen); + e = e + eBias; + } else { + m = value * pow(2, eBias - 1) * pow(2, mLen); + e = 0; + } + } + for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8); + e = e << mLen | m; + eLen += mLen; + for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8); + buffer[--i] |= s * 128; + return buffer; +}; +var unpackIEEE754 = function(buffer, mLen, nBytes){ + var eLen = nBytes * 8 - mLen - 1 + , eMax = (1 << eLen) - 1 + , eBias = eMax >> 1 + , nBits = eLen - 7 + , i = nBytes - 1 + , s = buffer[i--] + , e = s & 127 + , m; + s >>= 7; + for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8); + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8); + if(e === 0){ + e = 1 - eBias; + } else if(e === eMax){ + return m ? NaN : s ? -Infinity : Infinity; + } else { + m = m + pow(2, mLen); + e = e - eBias; + } return (s ? -1 : 1) * m * pow(2, e - mLen); +}; + +var unpackI32 = function(bytes){ + return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; +}; +var packI8 = function(it){ + return [it & 0xff]; +}; +var packI16 = function(it){ + return [it & 0xff, it >> 8 & 0xff]; +}; +var packI32 = function(it){ + return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff]; +}; +var packF64 = function(it){ + return packIEEE754(it, 52, 8); +}; +var packF32 = function(it){ + return packIEEE754(it, 23, 4); +}; + +var addGetter = function(C, key, internal){ + dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }}); +}; + +var get = function(view, bytes, index, isLittleEndian){ + var numIndex = +index + , intIndex = toInteger(numIndex); + if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b + , start = intIndex + view[$OFFSET] + , pack = store.slice(start, start + bytes); + return isLittleEndian ? pack : pack.reverse(); +}; +var set = function(view, bytes, index, conversion, value, isLittleEndian){ + var numIndex = +index + , intIndex = toInteger(numIndex); + if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b + , start = intIndex + view[$OFFSET] + , pack = conversion(+value); + for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1]; +}; + +var validateArrayBufferArguments = function(that, length){ + anInstance(that, $ArrayBuffer, ARRAY_BUFFER); + var numberLength = +length + , byteLength = toLength(numberLength); + if(numberLength != byteLength)throw RangeError(WRONG_LENGTH); + return byteLength; +}; + +if(!$typed.ABV){ + $ArrayBuffer = function ArrayBuffer(length){ + var byteLength = validateArrayBufferArguments(this, length); + this._b = arrayFill.call(Array(byteLength), 0); + this[$LENGTH] = byteLength; + }; + + $DataView = function DataView(buffer, byteOffset, byteLength){ + anInstance(this, $DataView, DATA_VIEW); + anInstance(buffer, $ArrayBuffer, DATA_VIEW); + var bufferLength = buffer[$LENGTH] + , offset = toInteger(byteOffset); + if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!'); + byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); + if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH); + this[$BUFFER] = buffer; + this[$OFFSET] = offset; + this[$LENGTH] = byteLength; + }; + + if(DESCRIPTORS){ + addGetter($ArrayBuffer, BYTE_LENGTH, '_l'); + addGetter($DataView, BUFFER, '_b'); + addGetter($DataView, BYTE_LENGTH, '_l'); + addGetter($DataView, BYTE_OFFSET, '_o'); + } + + redefineAll($DataView[PROTOTYPE], { + getInt8: function getInt8(byteOffset){ + return get(this, 1, byteOffset)[0] << 24 >> 24; + }, + getUint8: function getUint8(byteOffset){ + return get(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset /*, littleEndian */){ + var bytes = get(this, 2, byteOffset, arguments[1]); + return (bytes[1] << 8 | bytes[0]) << 16 >> 16; + }, + getUint16: function getUint16(byteOffset /*, littleEndian */){ + var bytes = get(this, 2, byteOffset, arguments[1]); + return bytes[1] << 8 | bytes[0]; + }, + getInt32: function getInt32(byteOffset /*, littleEndian */){ + return unpackI32(get(this, 4, byteOffset, arguments[1])); + }, + getUint32: function getUint32(byteOffset /*, littleEndian */){ + return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0; + }, + getFloat32: function getFloat32(byteOffset /*, littleEndian */){ + return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4); + }, + getFloat64: function getFloat64(byteOffset /*, littleEndian */){ + return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8); + }, + setInt8: function setInt8(byteOffset, value){ + set(this, 1, byteOffset, packI8, value); + }, + setUint8: function setUint8(byteOffset, value){ + set(this, 1, byteOffset, packI8, value); + }, + setInt16: function setInt16(byteOffset, value /*, littleEndian */){ + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setUint16: function setUint16(byteOffset, value /*, littleEndian */){ + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setInt32: function setInt32(byteOffset, value /*, littleEndian */){ + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setUint32: function setUint32(byteOffset, value /*, littleEndian */){ + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){ + set(this, 4, byteOffset, packF32, value, arguments[2]); + }, + setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){ + set(this, 8, byteOffset, packF64, value, arguments[2]); + } + }); +} else { + if(!fails(function(){ + new $ArrayBuffer; // eslint-disable-line no-new + }) || !fails(function(){ + new $ArrayBuffer(.5); // eslint-disable-line no-new + })){ + $ArrayBuffer = function ArrayBuffer(length){ + return new BaseBuffer(validateArrayBufferArguments(this, length)); + }; + var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE]; + for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){ + if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]); + }; + if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer; + } + // iOS Safari 7.x bug + var view = new $DataView(new $ArrayBuffer(2)) + , $setInt8 = $DataView[PROTOTYPE].setInt8; + view.setInt8(0, 2147483648); + view.setInt8(1, 2147483649); + if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], { + setInt8: function setInt8(byteOffset, value){ + $setInt8.call(this, byteOffset, value << 24 >> 24); + }, + setUint8: function setUint8(byteOffset, value){ + $setInt8.call(this, byteOffset, value << 24 >> 24); + } + }, true); +} +setToStringTag($ArrayBuffer, ARRAY_BUFFER); +setToStringTag($DataView, DATA_VIEW); +hide($DataView[PROTOTYPE], $typed.VIEW, true); +exports[ARRAY_BUFFER] = $ArrayBuffer; +exports[DATA_VIEW] = $DataView; + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(7) + , toIObject = __webpack_require__(11) + , arrayIndexOf = __webpack_require__(49)(false) + , IE_PROTO = __webpack_require__(50)('IE_PROTO'); + +module.exports = function(object, names){ + var O = toIObject(object) + , i = 0 + , result = [] + , key; + for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while(names.length > i)if(has(O, key = names[i++])){ + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + +/***/ }), +/* 68 */ +/***/ (function(module, exports) { + +// 7.2.9 SameValue(x, y) +module.exports = Object.is || function is(x, y){ + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; +}; + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(1).document && document.documentElement; + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.2.2 IsArray(argument) +var cof = __webpack_require__(25); +module.exports = Array.isArray || function isArray(arg){ + return cof(arg) == 'Array'; +}; + +/***/ }), +/* 71 */ +/***/ (function(module, exports) { + +module.exports = function(done, value){ + return {value: value, done: !!done}; +}; + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var LIBRARY = __webpack_require__(21) + , $export = __webpack_require__(0) + , redefine = __webpack_require__(15) + , hide = __webpack_require__(10) + , has = __webpack_require__(7) + , Iterators = __webpack_require__(28) + , $iterCreate = __webpack_require__(93) + , setToStringTag = __webpack_require__(27) + , getPrototypeOf = __webpack_require__(35) + , ITERATOR = __webpack_require__(4)('iterator') + , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` + , FF_ITERATOR = '@@iterator' + , KEYS = 'keys' + , VALUES = 'values'; + +var returnThis = function(){ return this; }; + +module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ + $iterCreate(Constructor, NAME, next); + var getMethod = function(kind){ + if(!BUGGY && kind in proto)return proto[kind]; + switch(kind){ + case KEYS: return function keys(){ return new Constructor(this, kind); }; + case VALUES: return function values(){ return new Constructor(this, kind); }; + } return function entries(){ return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator' + , DEF_VALUES = DEFAULT == VALUES + , VALUES_BUG = false + , proto = Base.prototype + , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] + , $default = $native || getMethod(DEFAULT) + , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined + , $anyNative = NAME == 'Array' ? proto.entries || $native : $native + , methods, key, IteratorPrototype; + // Fix native + if($anyNative){ + IteratorPrototype = getPrototypeOf($anyNative.call(new Base)); + if(IteratorPrototype !== Object.prototype){ + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if(DEF_VALUES && $native && $native.name !== VALUES){ + VALUES_BUG = true; + $default = function values(){ return $native.call(this); }; + } + // Define iterator + if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if(DEFAULT){ + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if(FORCED)for(key in methods){ + if(!(key in proto))redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; +}; + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) + +var toObject = __webpack_require__(20) + , toIndex = __webpack_require__(26) + , toLength = __webpack_require__(8); + +module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){ + var O = toObject(this) + , len = toLength(O.length) + , to = toIndex(target, len) + , from = toIndex(start, len) + , end = arguments.length > 2 ? arguments[2] : undefined + , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to) + , inc = 1; + if(from < to && to < from + count){ + inc = -1; + from += count - 1; + to += count - 1; + } + while(count-- > 0){ + if(from in O)O[to] = O[from]; + else delete O[to]; + to += inc; + from += inc; + } return O; +}; + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var dP = __webpack_require__(6).f + , create = __webpack_require__(34) + , redefineAll = __webpack_require__(22) + , ctx = __webpack_require__(12) + , anInstance = __webpack_require__(23) + , defined = __webpack_require__(16) + , forOf = __webpack_require__(41) + , $iterDefine = __webpack_require__(72) + , step = __webpack_require__(71) + , setSpecies = __webpack_require__(39) + , DESCRIPTORS = __webpack_require__(9) + , fastKey = __webpack_require__(38).fastKey + , SIZE = DESCRIPTORS ? '_s' : 'size'; + +var getEntry = function(that, key){ + // fast case + var index = fastKey(key), entry; + if(index !== 'F')return that._i[index]; + // frozen object case + for(entry = that._f; entry; entry = entry.n){ + if(entry.k == key)return entry; + } +}; + +module.exports = { + getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ + var C = wrapper(function(that, iterable){ + anInstance(that, C, NAME, '_i'); + that._i = create(null); // index + that._f = undefined; // first entry + that._l = undefined; // last entry + that[SIZE] = 0; // size + if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear(){ + for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){ + entry.r = true; + if(entry.p)entry.p = entry.p.n = undefined; + delete data[entry.i]; + } + that._f = that._l = undefined; + that[SIZE] = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + 'delete': function(key){ + var that = this + , entry = getEntry(that, key); + if(entry){ + var next = entry.n + , prev = entry.p; + delete that._i[entry.i]; + entry.r = true; + if(prev)prev.n = next; + if(next)next.p = prev; + if(that._f == entry)that._f = next; + if(that._l == entry)that._l = prev; + that[SIZE]--; + } return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /*, that = undefined */){ + anInstance(this, C, 'forEach'); + var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3) + , entry; + while(entry = entry ? entry.n : this._f){ + f(entry.v, entry.k, this); + // revert to the last existing entry + while(entry && entry.r)entry = entry.p; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key){ + return !!getEntry(this, key); + } + }); + if(DESCRIPTORS)dP(C.prototype, 'size', { + get: function(){ + return defined(this[SIZE]); + } + }); + return C; + }, + def: function(that, key, value){ + var entry = getEntry(that, key) + , prev, index; + // change existing entry + if(entry){ + entry.v = value; + // create new entry + } else { + that._l = entry = { + i: index = fastKey(key, true), // <- index + k: key, // <- key + v: value, // <- value + p: prev = that._l, // <- previous entry + n: undefined, // <- next entry + r: false // <- removed + }; + if(!that._f)that._f = entry; + if(prev)prev.n = entry; + that[SIZE]++; + // add to index + if(index !== 'F')that._i[index] = entry; + } return that; + }, + getEntry: getEntry, + setStrong: function(C, NAME, IS_MAP){ + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + $iterDefine(C, NAME, function(iterated, kind){ + this._t = iterated; // target + this._k = kind; // kind + this._l = undefined; // previous + }, function(){ + var that = this + , kind = that._k + , entry = that._l; + // revert to the last existing entry + while(entry && entry.r)entry = entry.p; + // get next entry + if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){ + // or finish the iteration + that._t = undefined; + return step(1); + } + // return step by kind + if(kind == 'keys' )return step(0, entry.k); + if(kind == 'values')return step(0, entry.v); + return step(0, [entry.k, entry.v]); + }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(NAME); + } +}; + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + +// call something on iterator step with safe closing on error +var anObject = __webpack_require__(2); +module.exports = function(iterator, fn, value, entries){ + try { + return entries ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch(e){ + var ret = iterator['return']; + if(ret !== undefined)anObject(ret.call(iterator)); + throw e; + } +}; + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + +// Works with __proto__ only. Old v8 can't work with null proto objects. +/* eslint-disable no-proto */ +var isObject = __webpack_require__(3) + , anObject = __webpack_require__(2); +var check = function(O, proto){ + anObject(O); + if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); +}; +module.exports = { + set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line + function(test, buggy, set){ + try { + set = __webpack_require__(12)(Function.call, __webpack_require__(17).f(Object.prototype, '__proto__').set, 2); + set(test, []); + buggy = !(test instanceof Array); + } catch(e){ buggy = true; } + return function setPrototypeOf(O, proto){ + check(O, proto); + if(buggy)O.__proto__ = proto; + else set(O, proto); + return O; + }; + }({}, false) : undefined), + check: check +}; + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// 19.1.2.1 Object.assign(target, source, ...) +var getKeys = __webpack_require__(29) + , gOPS = __webpack_require__(43) + , pIE = __webpack_require__(37) + , toObject = __webpack_require__(20) + , IObject = __webpack_require__(48) + , $assign = Object.assign; + +// should work with symbols and should have deterministic property order (V8 bug) +module.exports = !$assign || __webpack_require__(5)(function(){ + var A = {} + , B = {} + , S = Symbol() + , K = 'abcdefghijklmnopqrst'; + A[S] = 7; + K.split('').forEach(function(k){ B[k] = k; }); + return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; +}) ? function assign(target, source){ // eslint-disable-line no-unused-vars + var T = toObject(target) + , aLen = arguments.length + , index = 1 + , getSymbols = gOPS.f + , isEnum = pIE.f; + while(aLen > index){ + var S = IObject(arguments[index++]) + , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) + , length = keys.length + , j = 0 + , key; + while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; + } return T; +} : $assign; + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var redefineAll = __webpack_require__(22) + , getWeak = __webpack_require__(38).getWeak + , anObject = __webpack_require__(2) + , isObject = __webpack_require__(3) + , anInstance = __webpack_require__(23) + , forOf = __webpack_require__(41) + , createArrayMethod = __webpack_require__(36) + , $has = __webpack_require__(7) + , arrayFind = createArrayMethod(5) + , arrayFindIndex = createArrayMethod(6) + , id = 0; + +// fallback for uncaught frozen keys +var uncaughtFrozenStore = function(that){ + return that._l || (that._l = new UncaughtFrozenStore); +}; +var UncaughtFrozenStore = function(){ + this.a = []; +}; +var findUncaughtFrozen = function(store, key){ + return arrayFind(store.a, function(it){ + return it[0] === key; + }); +}; +UncaughtFrozenStore.prototype = { + get: function(key){ + var entry = findUncaughtFrozen(this, key); + if(entry)return entry[1]; + }, + has: function(key){ + return !!findUncaughtFrozen(this, key); + }, + set: function(key, value){ + var entry = findUncaughtFrozen(this, key); + if(entry)entry[1] = value; + else this.a.push([key, value]); + }, + 'delete': function(key){ + var index = arrayFindIndex(this.a, function(it){ + return it[0] === key; + }); + if(~index)this.a.splice(index, 1); + return !!~index; + } +}; + +module.exports = { + getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ + var C = wrapper(function(that, iterable){ + anInstance(that, C, NAME, '_i'); + that._i = id++; // collection id + that._l = undefined; // leak store for uncaught frozen objects + if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.3.3.2 WeakMap.prototype.delete(key) + // 23.4.3.3 WeakSet.prototype.delete(value) + 'delete': function(key){ + if(!isObject(key))return false; + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this)['delete'](key); + return data && $has(data, this._i) && delete data[this._i]; + }, + // 23.3.3.4 WeakMap.prototype.has(key) + // 23.4.3.4 WeakSet.prototype.has(value) + has: function has(key){ + if(!isObject(key))return false; + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this).has(key); + return data && $has(data, this._i); + } + }); + return C; + }, + def: function(that, key, value){ + var data = getWeak(anObject(key), true); + if(data === true)uncaughtFrozenStore(that).set(key, value); + else data[that._i] = value; + return that; + }, + ufstore: uncaughtFrozenStore +}; + +/***/ }), +/* 79 */ +/***/ (function(module, exports, __webpack_require__) { + +// all object keys, includes non-enumerable and symbols +var gOPN = __webpack_require__(33) + , gOPS = __webpack_require__(43) + , anObject = __webpack_require__(2) + , Reflect = __webpack_require__(1).Reflect; +module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){ + var keys = gOPN.f(anObject(it)) + , getSymbols = gOPS.f; + return getSymbols ? keys.concat(getSymbols(it)) : keys; +}; + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + +exports.f = __webpack_require__(4); + +/***/ }), +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var toInteger = __webpack_require__(24) + , defined = __webpack_require__(16); + +module.exports = function repeat(count){ + var str = String(defined(this)) + , res = '' + , n = toInteger(count); + if(n < 0 || n == Infinity)throw RangeError("Count can't be negative"); + for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str; + return res; +}; + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.2.8 IsRegExp(argument) +var isObject = __webpack_require__(3) + , cof = __webpack_require__(25) + , MATCH = __webpack_require__(4)('match'); +module.exports = function(it){ + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); +}; + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.3 Number.isInteger(number) +var isObject = __webpack_require__(3) + , floor = Math.floor; +module.exports = function isInteger(it){ + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + +/***/ }), +/* 84 */ +/***/ (function(module, exports) { + +// 20.2.2.20 Math.log1p(x) +module.exports = Math.log1p || function log1p(x){ + return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x); +}; + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + +var getKeys = __webpack_require__(29) + , toIObject = __webpack_require__(11) + , isEnum = __webpack_require__(37).f; +module.exports = function(isEntries){ + return function(it){ + var O = toIObject(it) + , keys = getKeys(O) + , length = keys.length + , i = 0 + , result = [] + , key; + while(length > i)if(isEnum.call(O, key = keys[i++])){ + result.push(isEntries ? [key, O[key]] : O[key]); + } return result; + }; +}; + +/***/ }), +/* 86 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://github.com/tc39/proposal-string-pad-start-end +var toLength = __webpack_require__(8) + , repeat = __webpack_require__(81) + , defined = __webpack_require__(16); + +module.exports = function(that, maxLength, fillString, left){ + var S = String(defined(that)) + , stringLength = S.length + , fillStr = fillString === undefined ? ' ' : String(fillString) + , intMaxLength = toLength(maxLength); + if(intMaxLength <= stringLength || fillStr == '')return S; + var fillLen = intMaxLength - stringLength + , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); + if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen); + return left ? stringFiller + S : S + stringFiller; +}; + + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +__webpack_require__(88); + +__webpack_require__(89); + +__webpack_require__(94); + +__webpack_require__(95); + +__webpack_require__(96); + +__webpack_require__(97); + +__webpack_require__(98); + +__webpack_require__(99); + +__webpack_require__(100); + +__webpack_require__(101); + +__webpack_require__(102); + +__webpack_require__(104); + +__webpack_require__(105); + +__webpack_require__(106); + +__webpack_require__(107); + +__webpack_require__(108); + +__webpack_require__(110); + +__webpack_require__(111); + +__webpack_require__(112); + +__webpack_require__(113); + +__webpack_require__(114); + +__webpack_require__(115); + +__webpack_require__(116); + +__webpack_require__(117); + +__webpack_require__(118); + +__webpack_require__(119); + +__webpack_require__(120); + +__webpack_require__(121); + +__webpack_require__(123); + +__webpack_require__(128); + +__webpack_require__(129); + +__webpack_require__(130); + +__webpack_require__(131); + +__webpack_require__(132); + +__webpack_require__(133); + +__webpack_require__(135); + +__webpack_require__(136); + +__webpack_require__(137); + +__webpack_require__(138); + +__webpack_require__(139); + +__webpack_require__(141); + +__webpack_require__(142); + +__webpack_require__(143); + +__webpack_require__(144); + +__webpack_require__(145); + +__webpack_require__(146); + +__webpack_require__(147); + +__webpack_require__(148); + +__webpack_require__(149); + +__webpack_require__(150); + +__webpack_require__(58); + +__webpack_require__(151); + +__webpack_require__(152); + +__webpack_require__(153); + +__webpack_require__(154); + +__webpack_require__(155); + +__webpack_require__(156); + +__webpack_require__(157); + +__webpack_require__(158); + +__webpack_require__(159); + +__webpack_require__(160); + +__webpack_require__(161); + +__webpack_require__(162); + +__webpack_require__(163); + +__webpack_require__(164); + +__webpack_require__(165); + +__webpack_require__(166); + +__webpack_require__(167); + +__webpack_require__(168); + +__webpack_require__(169); + +__webpack_require__(170); + +__webpack_require__(171); + +__webpack_require__(172); + +__webpack_require__(173); + +__webpack_require__(174); + +__webpack_require__(175); + +__webpack_require__(176); + +__webpack_require__(177); + +__webpack_require__(178); + +__webpack_require__(179); + +__webpack_require__(180); + +__webpack_require__(181); + +__webpack_require__(184); + +__webpack_require__(185); + +__webpack_require__(186); + +var _dialog = __webpack_require__(188); + +var _dialog2 = _interopRequireDefault(_dialog); + +var _select = __webpack_require__(191); + +var _select2 = _interopRequireDefault(_select); + +var _sort = __webpack_require__(192); + +var _sort2 = _interopRequireDefault(_sort); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/* eslint no-console:0 */ +// This file is automatically compiled by Webpack, along with any other files +// present in this directory. You're encouraged to place your actual application logic in +// a relevant structure within app/javascript and only use these pack files to reference +// that code so it'll be compiled. +// +// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate +// layout file, like app/views/layouts/application.html.erb + +var dialog = new _dialog2.default(); +var select = new _select2.default(); +var sort = new _sort2.default(); + +document.addEventListener('turbolinks:load', function () { + dialog.init(); + sort.init('sort-form'); + + select.orgType(['user', 'basics_step', 'eligibility_step']); + + var eligibilityStepOpts = { + '0': ['districts'], + '1': ['districts'], + '2': ['recipient_country'], + '3': ['eligibility_step_country_ids'] + }; + select.init('eligibility_step_affect_geo', eligibilityStepOpts); +}); + +document.addEventListener('ajax:success', function () { + select.orgType('user'); +}); + +// Prevent turbolinks on funds#show and funds#hidden for Google Optimize +document.addEventListener('turbolinks:before-visit', function (e) { + if (/\/proposals\/[0-9]+\/funds\/[^theme]|\/hidden/.test(e.data.url)) { + e.preventDefault(); + window.location = e.data.url; + } +}); + +// Utility +window.trackOutboundLink = function (url) { + window.ga('send', 'event', 'outbound', 'click', url, { + 'transport': 'beacon', + 'hitCallback': function hitCallback() { + window.open(url); + } + }); +}; + +/***/ }), +/* 88 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $export = __webpack_require__(0) + , $typed = __webpack_require__(47) + , buffer = __webpack_require__(66) + , anObject = __webpack_require__(2) + , toIndex = __webpack_require__(26) + , toLength = __webpack_require__(8) + , isObject = __webpack_require__(3) + , ArrayBuffer = __webpack_require__(1).ArrayBuffer + , speciesConstructor = __webpack_require__(54) + , $ArrayBuffer = buffer.ArrayBuffer + , $DataView = buffer.DataView + , $isView = $typed.ABV && ArrayBuffer.isView + , $slice = $ArrayBuffer.prototype.slice + , VIEW = $typed.VIEW + , ARRAY_BUFFER = 'ArrayBuffer'; + +$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer}); + +$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, { + // 24.1.3.1 ArrayBuffer.isView(arg) + isView: function isView(it){ + return $isView && $isView(it) || isObject(it) && VIEW in it; + } +}); + +$export($export.P + $export.U + $export.F * __webpack_require__(5)(function(){ + return !new $ArrayBuffer(2).slice(1, undefined).byteLength; +}), ARRAY_BUFFER, { + // 24.1.4.3 ArrayBuffer.prototype.slice(start, end) + slice: function slice(start, end){ + if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix + var len = anObject(this).byteLength + , first = toIndex(start, len) + , final = toIndex(end === undefined ? len : end, len) + , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first)) + , viewS = new $DataView(this) + , viewT = new $DataView(result) + , index = 0; + while(first < final){ + viewT.setUint8(index++, viewS.getUint8(first++)); + } return result; + } +}); + +__webpack_require__(39)(ARRAY_BUFFER); + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Int8', 1, function(init){ + return function Int8Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(6) + , anObject = __webpack_require__(2) + , getKeys = __webpack_require__(29); + +module.exports = __webpack_require__(9) ? Object.defineProperties : function defineProperties(O, Properties){ + anObject(O); + var keys = getKeys(Properties) + , length = keys.length + , i = 0 + , P; + while(length > i)dP.f(O, P = keys[i++], Properties[P]); + return O; +}; + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + +// 9.4.2.3 ArraySpeciesCreate(originalArray, length) +var speciesConstructor = __webpack_require__(92); + +module.exports = function(original, length){ + return new (speciesConstructor(original))(length); +}; + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(3) + , isArray = __webpack_require__(70) + , SPECIES = __webpack_require__(4)('species'); + +module.exports = function(original){ + var C; + if(isArray(original)){ + C = original.constructor; + // cross-realm fallback + if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined; + if(isObject(C)){ + C = C[SPECIES]; + if(C === null)C = undefined; + } + } return C === undefined ? Array : C; +}; + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var create = __webpack_require__(34) + , descriptor = __webpack_require__(14) + , setToStringTag = __webpack_require__(27) + , IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +__webpack_require__(10)(IteratorPrototype, __webpack_require__(4)('iterator'), function(){ return this; }); + +module.exports = function(Constructor, NAME, next){ + Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); + setToStringTag(Constructor, NAME + ' Iterator'); +}; + +/***/ }), +/* 94 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Uint8', 1, function(init){ + return function Uint8Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Uint8', 1, function(init){ + return function Uint8ClampedArray(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}, true); + +/***/ }), +/* 96 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Int16', 2, function(init){ + return function Int16Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 97 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Uint16', 2, function(init){ + return function Uint16Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 98 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Int32', 4, function(init){ + return function Int32Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 99 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Uint32', 4, function(init){ + return function Uint32Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 100 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Float32', 4, function(init){ + return function Float32Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(13)('Float64', 8, function(init){ + return function Float64Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; +}); + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var strong = __webpack_require__(74); + +// 23.1 Map Objects +module.exports = __webpack_require__(42)('Map', function(get){ + return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.1.3.6 Map.prototype.get(key) + get: function get(key){ + var entry = strong.getEntry(this, key); + return entry && entry.v; + }, + // 23.1.3.9 Map.prototype.set(key, value) + set: function set(key, value){ + return strong.def(this, key === 0 ? 0 : key, value); + } +}, strong, true); + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(3) + , setPrototypeOf = __webpack_require__(76).set; +module.exports = function(that, target, C){ + var P, S = target.constructor; + if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){ + setPrototypeOf(that, P); + } return that; +}; + +/***/ }), +/* 104 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var strong = __webpack_require__(74); + +// 23.2 Set Objects +module.exports = __webpack_require__(42)('Set', function(get){ + return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value){ + return strong.def(this, value = value === 0 ? 0 : value, value); + } +}, strong); + +/***/ }), +/* 105 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var each = __webpack_require__(36)(0) + , redefine = __webpack_require__(15) + , meta = __webpack_require__(38) + , assign = __webpack_require__(77) + , weak = __webpack_require__(78) + , isObject = __webpack_require__(3) + , getWeak = meta.getWeak + , isExtensible = Object.isExtensible + , uncaughtFrozenStore = weak.ufstore + , tmp = {} + , InternalMap; + +var wrapper = function(get){ + return function WeakMap(){ + return get(this, arguments.length > 0 ? arguments[0] : undefined); + }; +}; + +var methods = { + // 23.3.3.3 WeakMap.prototype.get(key) + get: function get(key){ + if(isObject(key)){ + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this).get(key); + return data ? data[this._i] : undefined; + } + }, + // 23.3.3.5 WeakMap.prototype.set(key, value) + set: function set(key, value){ + return weak.def(this, key, value); + } +}; + +// 23.3 WeakMap Objects +var $WeakMap = module.exports = __webpack_require__(42)('WeakMap', wrapper, methods, weak, true, true); + +// IE11 WeakMap frozen keys fix +if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){ + InternalMap = weak.getConstructor(wrapper); + assign(InternalMap.prototype, methods); + meta.NEED = true; + each(['delete', 'has', 'get', 'set'], function(key){ + var proto = $WeakMap.prototype + , method = proto[key]; + redefine(proto, key, function(a, b){ + // store frozen objects on internal weakmap shim + if(isObject(a) && !isExtensible(a)){ + if(!this._f)this._f = new InternalMap; + var result = this._f[key](a, b); + return key == 'set' ? this : result; + // store all the rest on native weakmap + } return method.call(this, a, b); + }); + }); +} + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var weak = __webpack_require__(78); + +// 23.4 WeakSet Objects +__webpack_require__(42)('WeakSet', function(get){ + return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.4.3.1 WeakSet.prototype.add(value) + add: function add(value){ + return weak.def(this, value, true); + } +}, weak, false, true); + +/***/ }), +/* 107 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.1 Reflect.apply(target, thisArgument, argumentsList) +var $export = __webpack_require__(0) + , aFunction = __webpack_require__(19) + , anObject = __webpack_require__(2) + , rApply = (__webpack_require__(1).Reflect || {}).apply + , fApply = Function.apply; +// MS Edge argumentsList argument is optional +$export($export.S + $export.F * !__webpack_require__(5)(function(){ + rApply(function(){}); +}), 'Reflect', { + apply: function apply(target, thisArgument, argumentsList){ + var T = aFunction(target) + , L = anObject(argumentsList); + return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L); + } +}); + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.2 Reflect.construct(target, argumentsList [, newTarget]) +var $export = __webpack_require__(0) + , create = __webpack_require__(34) + , aFunction = __webpack_require__(19) + , anObject = __webpack_require__(2) + , isObject = __webpack_require__(3) + , fails = __webpack_require__(5) + , bind = __webpack_require__(109) + , rConstruct = (__webpack_require__(1).Reflect || {}).construct; + +// MS Edge supports only 2 arguments and argumentsList argument is optional +// FF Nightly sets third argument as `new.target`, but does not create `this` from it +var NEW_TARGET_BUG = fails(function(){ + function F(){} + return !(rConstruct(function(){}, [], F) instanceof F); +}); +var ARGS_BUG = !fails(function(){ + rConstruct(function(){}); +}); + +$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { + construct: function construct(Target, args /*, newTarget*/){ + aFunction(Target); + anObject(args); + var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]); + if(ARGS_BUG && !NEW_TARGET_BUG)return rConstruct(Target, args, newTarget); + if(Target == newTarget){ + // w/o altered newTarget, optimization for 0-4 arguments + switch(args.length){ + case 0: return new Target; + case 1: return new Target(args[0]); + case 2: return new Target(args[0], args[1]); + case 3: return new Target(args[0], args[1], args[2]); + case 4: return new Target(args[0], args[1], args[2], args[3]); + } + // w/o altered newTarget, lot of arguments case + var $args = [null]; + $args.push.apply($args, args); + return new (bind.apply(Target, $args)); + } + // with altered newTarget, not support built-in constructors + var proto = newTarget.prototype + , instance = create(isObject(proto) ? proto : Object.prototype) + , result = Function.apply.call(Target, instance, args); + return isObject(result) ? result : instance; + } +}); + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var aFunction = __webpack_require__(19) + , isObject = __webpack_require__(3) + , invoke = __webpack_require__(44) + , arraySlice = [].slice + , factories = {}; + +var construct = function(F, len, args){ + if(!(len in factories)){ + for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']'; + factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')'); + } return factories[len](F, args); +}; + +module.exports = Function.bind || function bind(that /*, args... */){ + var fn = aFunction(this) + , partArgs = arraySlice.call(arguments, 1); + var bound = function(/* args... */){ + var args = partArgs.concat(arraySlice.call(arguments)); + return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that); + }; + if(isObject(fn.prototype))bound.prototype = fn.prototype; + return bound; +}; + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes) +var dP = __webpack_require__(6) + , $export = __webpack_require__(0) + , anObject = __webpack_require__(2) + , toPrimitive = __webpack_require__(32); + +// MS Edge has broken Reflect.defineProperty - throwing instead of returning false +$export($export.S + $export.F * __webpack_require__(5)(function(){ + Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2}); +}), 'Reflect', { + defineProperty: function defineProperty(target, propertyKey, attributes){ + anObject(target); + propertyKey = toPrimitive(propertyKey, true); + anObject(attributes); + try { + dP.f(target, propertyKey, attributes); + return true; + } catch(e){ + return false; + } + } +}); + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.4 Reflect.deleteProperty(target, propertyKey) +var $export = __webpack_require__(0) + , gOPD = __webpack_require__(17).f + , anObject = __webpack_require__(2); + +$export($export.S, 'Reflect', { + deleteProperty: function deleteProperty(target, propertyKey){ + var desc = gOPD(anObject(target), propertyKey); + return desc && !desc.configurable ? false : delete target[propertyKey]; + } +}); + +/***/ }), +/* 112 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.6 Reflect.get(target, propertyKey [, receiver]) +var gOPD = __webpack_require__(17) + , getPrototypeOf = __webpack_require__(35) + , has = __webpack_require__(7) + , $export = __webpack_require__(0) + , isObject = __webpack_require__(3) + , anObject = __webpack_require__(2); + +function get(target, propertyKey/*, receiver*/){ + var receiver = arguments.length < 3 ? target : arguments[2] + , desc, proto; + if(anObject(target) === receiver)return target[propertyKey]; + if(desc = gOPD.f(target, propertyKey))return has(desc, 'value') + ? desc.value + : desc.get !== undefined + ? desc.get.call(receiver) + : undefined; + if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver); +} + +$export($export.S, 'Reflect', {get: get}); + +/***/ }), +/* 113 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey) +var gOPD = __webpack_require__(17) + , $export = __webpack_require__(0) + , anObject = __webpack_require__(2); + +$export($export.S, 'Reflect', { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){ + return gOPD.f(anObject(target), propertyKey); + } +}); + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.8 Reflect.getPrototypeOf(target) +var $export = __webpack_require__(0) + , getProto = __webpack_require__(35) + , anObject = __webpack_require__(2); + +$export($export.S, 'Reflect', { + getPrototypeOf: function getPrototypeOf(target){ + return getProto(anObject(target)); + } +}); + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.9 Reflect.has(target, propertyKey) +var $export = __webpack_require__(0); + +$export($export.S, 'Reflect', { + has: function has(target, propertyKey){ + return propertyKey in target; + } +}); + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.10 Reflect.isExtensible(target) +var $export = __webpack_require__(0) + , anObject = __webpack_require__(2) + , $isExtensible = Object.isExtensible; + +$export($export.S, 'Reflect', { + isExtensible: function isExtensible(target){ + anObject(target); + return $isExtensible ? $isExtensible(target) : true; + } +}); + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.11 Reflect.ownKeys(target) +var $export = __webpack_require__(0); + +$export($export.S, 'Reflect', {ownKeys: __webpack_require__(79)}); + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.12 Reflect.preventExtensions(target) +var $export = __webpack_require__(0) + , anObject = __webpack_require__(2) + , $preventExtensions = Object.preventExtensions; + +$export($export.S, 'Reflect', { + preventExtensions: function preventExtensions(target){ + anObject(target); + try { + if($preventExtensions)$preventExtensions(target); + return true; + } catch(e){ + return false; + } + } +}); + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.13 Reflect.set(target, propertyKey, V [, receiver]) +var dP = __webpack_require__(6) + , gOPD = __webpack_require__(17) + , getPrototypeOf = __webpack_require__(35) + , has = __webpack_require__(7) + , $export = __webpack_require__(0) + , createDesc = __webpack_require__(14) + , anObject = __webpack_require__(2) + , isObject = __webpack_require__(3); + +function set(target, propertyKey, V/*, receiver*/){ + var receiver = arguments.length < 4 ? target : arguments[3] + , ownDesc = gOPD.f(anObject(target), propertyKey) + , existingDescriptor, proto; + if(!ownDesc){ + if(isObject(proto = getPrototypeOf(target))){ + return set(proto, propertyKey, V, receiver); + } + ownDesc = createDesc(0); + } + if(has(ownDesc, 'value')){ + if(ownDesc.writable === false || !isObject(receiver))return false; + existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0); + existingDescriptor.value = V; + dP.f(receiver, propertyKey, existingDescriptor); + return true; + } + return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true); +} + +$export($export.S, 'Reflect', {set: set}); + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + +// 26.1.14 Reflect.setPrototypeOf(target, proto) +var $export = __webpack_require__(0) + , setProto = __webpack_require__(76); + +if(setProto)$export($export.S, 'Reflect', { + setPrototypeOf: function setPrototypeOf(target, proto){ + setProto.check(target, proto); + try { + setProto.set(target, proto); + return true; + } catch(e){ + return false; + } + } +}); + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var LIBRARY = __webpack_require__(21) + , global = __webpack_require__(1) + , ctx = __webpack_require__(12) + , classof = __webpack_require__(55) + , $export = __webpack_require__(0) + , isObject = __webpack_require__(3) + , aFunction = __webpack_require__(19) + , anInstance = __webpack_require__(23) + , forOf = __webpack_require__(41) + , speciesConstructor = __webpack_require__(54) + , task = __webpack_require__(59).set + , microtask = __webpack_require__(122)() + , PROMISE = 'Promise' + , TypeError = global.TypeError + , process = global.process + , $Promise = global[PROMISE] + , process = global.process + , isNode = classof(process) == 'process' + , empty = function(){ /* empty */ } + , Internal, GenericPromiseCapability, Wrapper; + +var USE_NATIVE = !!function(){ + try { + // correct subclassing with @@species support + var promise = $Promise.resolve(1) + , FakePromise = (promise.constructor = {})[__webpack_require__(4)('species')] = function(exec){ exec(empty, empty); }; + // unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; + } catch(e){ /* empty */ } +}(); + +// helpers +var sameConstructor = function(a, b){ + // with library wrapper special case + return a === b || a === $Promise && b === Wrapper; +}; +var isThenable = function(it){ + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; +}; +var newPromiseCapability = function(C){ + return sameConstructor($Promise, C) + ? new PromiseCapability(C) + : new GenericPromiseCapability(C); +}; +var PromiseCapability = GenericPromiseCapability = function(C){ + var resolve, reject; + this.promise = new C(function($$resolve, $$reject){ + if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); +}; +var perform = function(exec){ + try { + exec(); + } catch(e){ + return {error: e}; + } +}; +var notify = function(promise, isReject){ + if(promise._n)return; + promise._n = true; + var chain = promise._c; + microtask(function(){ + var value = promise._v + , ok = promise._s == 1 + , i = 0; + var run = function(reaction){ + var handler = ok ? reaction.ok : reaction.fail + , resolve = reaction.resolve + , reject = reaction.reject + , domain = reaction.domain + , result, then; + try { + if(handler){ + if(!ok){ + if(promise._h == 2)onHandleUnhandled(promise); + promise._h = 1; + } + if(handler === true)result = value; + else { + if(domain)domain.enter(); + result = handler(value); + if(domain)domain.exit(); + } + if(result === reaction.promise){ + reject(TypeError('Promise-chain cycle')); + } else if(then = isThenable(result)){ + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch(e){ + reject(e); + } + }; + while(chain.length > i)run(chain[i++]); // variable length - can't use forEach + promise._c = []; + promise._n = false; + if(isReject && !promise._h)onUnhandled(promise); + }); +}; +var onUnhandled = function(promise){ + task.call(global, function(){ + var value = promise._v + , abrupt, handler, console; + if(isUnhandled(promise)){ + abrupt = perform(function(){ + if(isNode){ + process.emit('unhandledRejection', value, promise); + } else if(handler = global.onunhandledrejection){ + handler({promise: promise, reason: value}); + } else if((console = global.console) && console.error){ + console.error('Unhandled promise rejection', value); + } + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + promise._h = isNode || isUnhandled(promise) ? 2 : 1; + } promise._a = undefined; + if(abrupt)throw abrupt.error; + }); +}; +var isUnhandled = function(promise){ + if(promise._h == 1)return false; + var chain = promise._a || promise._c + , i = 0 + , reaction; + while(chain.length > i){ + reaction = chain[i++]; + if(reaction.fail || !isUnhandled(reaction.promise))return false; + } return true; +}; +var onHandleUnhandled = function(promise){ + task.call(global, function(){ + var handler; + if(isNode){ + process.emit('rejectionHandled', promise); + } else if(handler = global.onrejectionhandled){ + handler({promise: promise, reason: promise._v}); + } + }); +}; +var $reject = function(value){ + var promise = this; + if(promise._d)return; + promise._d = true; + promise = promise._w || promise; // unwrap + promise._v = value; + promise._s = 2; + if(!promise._a)promise._a = promise._c.slice(); + notify(promise, true); +}; +var $resolve = function(value){ + var promise = this + , then; + if(promise._d)return; + promise._d = true; + promise = promise._w || promise; // unwrap + try { + if(promise === value)throw TypeError("Promise can't be resolved itself"); + if(then = isThenable(value)){ + microtask(function(){ + var wrapper = {_w: promise, _d: false}; // wrap + try { + then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); + } catch(e){ + $reject.call(wrapper, e); + } + }); + } else { + promise._v = value; + promise._s = 1; + notify(promise, false); + } + } catch(e){ + $reject.call({_w: promise, _d: false}, e); // wrap + } +}; + +// constructor polyfill +if(!USE_NATIVE){ + // 25.4.3.1 Promise(executor) + $Promise = function Promise(executor){ + anInstance(this, $Promise, PROMISE, '_h'); + aFunction(executor); + Internal.call(this); + try { + executor(ctx($resolve, this, 1), ctx($reject, this, 1)); + } catch(err){ + $reject.call(this, err); + } + }; + Internal = function Promise(executor){ + this._c = []; // <- awaiting reactions + this._a = undefined; // <- checked in isUnhandled reactions + this._s = 0; // <- state + this._d = false; // <- done + this._v = undefined; // <- value + this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled + this._n = false; // <- notify + }; + Internal.prototype = __webpack_require__(22)($Promise.prototype, { + // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) + then: function then(onFulfilled, onRejected){ + var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = isNode ? process.domain : undefined; + this._c.push(reaction); + if(this._a)this._a.push(reaction); + if(this._s)notify(this, false); + return reaction.promise; + }, + // 25.4.5.1 Promise.prototype.catch(onRejected) + 'catch': function(onRejected){ + return this.then(undefined, onRejected); + } + }); + PromiseCapability = function(){ + var promise = new Internal; + this.promise = promise; + this.resolve = ctx($resolve, promise, 1); + this.reject = ctx($reject, promise, 1); + }; +} + +$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise}); +__webpack_require__(27)($Promise, PROMISE); +__webpack_require__(39)(PROMISE); +Wrapper = __webpack_require__(31)[PROMISE]; + +// statics +$export($export.S + $export.F * !USE_NATIVE, PROMISE, { + // 25.4.4.5 Promise.reject(r) + reject: function reject(r){ + var capability = newPromiseCapability(this) + , $$reject = capability.reject; + $$reject(r); + return capability.promise; + } +}); +$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { + // 25.4.4.6 Promise.resolve(x) + resolve: function resolve(x){ + // instanceof instead of internal slot check because we should fix it without replacement native Promise core + if(x instanceof $Promise && sameConstructor(x.constructor, this))return x; + var capability = newPromiseCapability(this) + , $$resolve = capability.resolve; + $$resolve(x); + return capability.promise; + } +}); +$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(40)(function(iter){ + $Promise.all(iter)['catch'](empty); +})), PROMISE, { + // 25.4.4.1 Promise.all(iterable) + all: function all(iterable){ + var C = this + , capability = newPromiseCapability(C) + , resolve = capability.resolve + , reject = capability.reject; + var abrupt = perform(function(){ + var values = [] + , index = 0 + , remaining = 1; + forOf(iterable, false, function(promise){ + var $index = index++ + , alreadyCalled = false; + values.push(undefined); + remaining++; + C.resolve(promise).then(function(value){ + if(alreadyCalled)return; + alreadyCalled = true; + values[$index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if(abrupt)reject(abrupt.error); + return capability.promise; + }, + // 25.4.4.4 Promise.race(iterable) + race: function race(iterable){ + var C = this + , capability = newPromiseCapability(C) + , reject = capability.reject; + var abrupt = perform(function(){ + forOf(iterable, false, function(promise){ + C.resolve(promise).then(capability.resolve, reject); + }); + }); + if(abrupt)reject(abrupt.error); + return capability.promise; + } +}); + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(1) + , macrotask = __webpack_require__(59).set + , Observer = global.MutationObserver || global.WebKitMutationObserver + , process = global.process + , Promise = global.Promise + , isNode = __webpack_require__(25)(process) == 'process'; + +module.exports = function(){ + var head, last, notify; + + var flush = function(){ + var parent, fn; + if(isNode && (parent = process.domain))parent.exit(); + while(head){ + fn = head.fn; + head = head.next; + try { + fn(); + } catch(e){ + if(head)notify(); + else last = undefined; + throw e; + } + } last = undefined; + if(parent)parent.enter(); + }; + + // Node.js + if(isNode){ + notify = function(){ + process.nextTick(flush); + }; + // browsers with MutationObserver + } else if(Observer){ + var toggle = true + , node = document.createTextNode(''); + new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new + notify = function(){ + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if(Promise && Promise.resolve){ + var promise = Promise.resolve(); + notify = function(){ + promise.then(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function(){ + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } + + return function(fn){ + var task = {fn: fn, next: undefined}; + if(last)last.next = task; + if(!head){ + head = task; + notify(); + } last = task; + }; +}; + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// ECMAScript 6 symbols shim +var global = __webpack_require__(1) + , has = __webpack_require__(7) + , DESCRIPTORS = __webpack_require__(9) + , $export = __webpack_require__(0) + , redefine = __webpack_require__(15) + , META = __webpack_require__(38).KEY + , $fails = __webpack_require__(5) + , shared = __webpack_require__(51) + , setToStringTag = __webpack_require__(27) + , uid = __webpack_require__(18) + , wks = __webpack_require__(4) + , wksExt = __webpack_require__(80) + , wksDefine = __webpack_require__(124) + , keyOf = __webpack_require__(125) + , enumKeys = __webpack_require__(126) + , isArray = __webpack_require__(70) + , anObject = __webpack_require__(2) + , toIObject = __webpack_require__(11) + , toPrimitive = __webpack_require__(32) + , createDesc = __webpack_require__(14) + , _create = __webpack_require__(34) + , gOPNExt = __webpack_require__(127) + , $GOPD = __webpack_require__(17) + , $DP = __webpack_require__(6) + , $keys = __webpack_require__(29) + , gOPD = $GOPD.f + , dP = $DP.f + , gOPN = gOPNExt.f + , $Symbol = global.Symbol + , $JSON = global.JSON + , _stringify = $JSON && $JSON.stringify + , PROTOTYPE = 'prototype' + , HIDDEN = wks('_hidden') + , TO_PRIMITIVE = wks('toPrimitive') + , isEnum = {}.propertyIsEnumerable + , SymbolRegistry = shared('symbol-registry') + , AllSymbols = shared('symbols') + , OPSymbols = shared('op-symbols') + , ObjectProto = Object[PROTOTYPE] + , USE_NATIVE = typeof $Symbol == 'function' + , QObject = global.QObject; +// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 +var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + +// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 +var setSymbolDesc = DESCRIPTORS && $fails(function(){ + return _create(dP({}, 'a', { + get: function(){ return dP(this, 'a', {value: 7}).a; } + })).a != 7; +}) ? function(it, key, D){ + var protoDesc = gOPD(ObjectProto, key); + if(protoDesc)delete ObjectProto[key]; + dP(it, key, D); + if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc); +} : dP; + +var wrap = function(tag){ + var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); + sym._k = tag; + return sym; +}; + +var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){ + return typeof it == 'symbol'; +} : function(it){ + return it instanceof $Symbol; +}; + +var $defineProperty = function defineProperty(it, key, D){ + if(it === ObjectProto)$defineProperty(OPSymbols, key, D); + anObject(it); + key = toPrimitive(key, true); + anObject(D); + if(has(AllSymbols, key)){ + if(!D.enumerable){ + if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {})); + it[HIDDEN][key] = true; + } else { + if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false; + D = _create(D, {enumerable: createDesc(0, false)}); + } return setSymbolDesc(it, key, D); + } return dP(it, key, D); +}; +var $defineProperties = function defineProperties(it, P){ + anObject(it); + var keys = enumKeys(P = toIObject(P)) + , i = 0 + , l = keys.length + , key; + while(l > i)$defineProperty(it, key = keys[i++], P[key]); + return it; +}; +var $create = function create(it, P){ + return P === undefined ? _create(it) : $defineProperties(_create(it), P); +}; +var $propertyIsEnumerable = function propertyIsEnumerable(key){ + var E = isEnum.call(this, key = toPrimitive(key, true)); + if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false; + return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; +}; +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){ + it = toIObject(it); + key = toPrimitive(key, true); + if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return; + var D = gOPD(it, key); + if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true; + return D; +}; +var $getOwnPropertyNames = function getOwnPropertyNames(it){ + var names = gOPN(toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i){ + if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key); + } return result; +}; +var $getOwnPropertySymbols = function getOwnPropertySymbols(it){ + var IS_OP = it === ObjectProto + , names = gOPN(IS_OP ? OPSymbols : toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i){ + if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]); + } return result; +}; + +// 19.4.1.1 Symbol([description]) +if(!USE_NATIVE){ + $Symbol = function Symbol(){ + if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!'); + var tag = uid(arguments.length > 0 ? arguments[0] : undefined); + var $set = function(value){ + if(this === ObjectProto)$set.call(OPSymbols, value); + if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false; + setSymbolDesc(this, tag, createDesc(1, value)); + }; + if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set}); + return wrap(tag); + }; + redefine($Symbol[PROTOTYPE], 'toString', function toString(){ + return this._k; + }); + + $GOPD.f = $getOwnPropertyDescriptor; + $DP.f = $defineProperty; + __webpack_require__(33).f = gOPNExt.f = $getOwnPropertyNames; + __webpack_require__(37).f = $propertyIsEnumerable; + __webpack_require__(43).f = $getOwnPropertySymbols; + + if(DESCRIPTORS && !__webpack_require__(21)){ + redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); + } + + wksExt.f = function(name){ + return wrap(wks(name)); + } +} + +$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol}); + +for(var symbols = ( + // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 + 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' +).split(','), i = 0; symbols.length > i; )wks(symbols[i++]); + +for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]); + +$export($export.S + $export.F * !USE_NATIVE, 'Symbol', { + // 19.4.2.1 Symbol.for(key) + 'for': function(key){ + return has(SymbolRegistry, key += '') + ? SymbolRegistry[key] + : SymbolRegistry[key] = $Symbol(key); + }, + // 19.4.2.5 Symbol.keyFor(sym) + keyFor: function keyFor(key){ + if(isSymbol(key))return keyOf(SymbolRegistry, key); + throw TypeError(key + ' is not a symbol!'); + }, + useSetter: function(){ setter = true; }, + useSimple: function(){ setter = false; } +}); + +$export($export.S + $export.F * !USE_NATIVE, 'Object', { + // 19.1.2.2 Object.create(O [, Properties]) + create: $create, + // 19.1.2.4 Object.defineProperty(O, P, Attributes) + defineProperty: $defineProperty, + // 19.1.2.3 Object.defineProperties(O, Properties) + defineProperties: $defineProperties, + // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) + getOwnPropertyDescriptor: $getOwnPropertyDescriptor, + // 19.1.2.7 Object.getOwnPropertyNames(O) + getOwnPropertyNames: $getOwnPropertyNames, + // 19.1.2.8 Object.getOwnPropertySymbols(O) + getOwnPropertySymbols: $getOwnPropertySymbols +}); + +// 24.3.2 JSON.stringify(value [, replacer [, space]]) +$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){ + var S = $Symbol(); + // MS Edge converts symbol values to JSON as {} + // WebKit converts symbol values to JSON as null + // V8 throws on boxed symbols + return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}'; +})), 'JSON', { + stringify: function stringify(it){ + if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined + var args = [it] + , i = 1 + , replacer, $replacer; + while(arguments.length > i)args.push(arguments[i++]); + replacer = args[1]; + if(typeof replacer == 'function')$replacer = replacer; + if($replacer || !isArray(replacer))replacer = function(key, value){ + if($replacer)value = $replacer.call(this, key, value); + if(!isSymbol(value))return value; + }; + args[1] = replacer; + return _stringify.apply($JSON, args); + } +}); + +// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) +$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(10)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); +// 19.4.3.5 Symbol.prototype[@@toStringTag] +setToStringTag($Symbol, 'Symbol'); +// 20.2.1.9 Math[@@toStringTag] +setToStringTag(Math, 'Math', true); +// 24.3.3 JSON[@@toStringTag] +setToStringTag(global.JSON, 'JSON', true); + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(1) + , core = __webpack_require__(31) + , LIBRARY = __webpack_require__(21) + , wksExt = __webpack_require__(80) + , defineProperty = __webpack_require__(6).f; +module.exports = function(name){ + var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); + if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)}); +}; + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + +var getKeys = __webpack_require__(29) + , toIObject = __webpack_require__(11); +module.exports = function(object, el){ + var O = toIObject(object) + , keys = getKeys(O) + , length = keys.length + , index = 0 + , key; + while(length > index)if(O[key = keys[index++]] === el)return key; +}; + +/***/ }), +/* 126 */ +/***/ (function(module, exports, __webpack_require__) { + +// all enumerable object keys, includes symbols +var getKeys = __webpack_require__(29) + , gOPS = __webpack_require__(43) + , pIE = __webpack_require__(37); +module.exports = function(it){ + var result = getKeys(it) + , getSymbols = gOPS.f; + if(getSymbols){ + var symbols = getSymbols(it) + , isEnum = pIE.f + , i = 0 + , key; + while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key); + } return result; +}; + +/***/ }), +/* 127 */ +/***/ (function(module, exports, __webpack_require__) { + +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +var toIObject = __webpack_require__(11) + , gOPN = __webpack_require__(33).f + , toString = {}.toString; + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function(it){ + try { + return gOPN(it); + } catch(e){ + return windowNames.slice(); + } +}; + +module.exports.f = function getOwnPropertyNames(it){ + return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); +}; + + +/***/ }), +/* 128 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.3.1 Object.assign(target, source) +var $export = __webpack_require__(0); + +$export($export.S + $export.F, 'Object', {assign: __webpack_require__(77)}); + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.3.10 Object.is(value1, value2) +var $export = __webpack_require__(0); +$export($export.S, 'Object', {is: __webpack_require__(68)}); + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(6).f + , createDesc = __webpack_require__(14) + , has = __webpack_require__(7) + , FProto = Function.prototype + , nameRE = /^\s*function ([^ (]*)/ + , NAME = 'name'; + +var isExtensible = Object.isExtensible || function(){ + return true; +}; + +// 19.2.4.2 name +NAME in FProto || __webpack_require__(9) && dP(FProto, NAME, { + configurable: true, + get: function(){ + try { + var that = this + , name = ('' + that).match(nameRE)[1]; + has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name)); + return name; + } catch(e){ + return ''; + } + } +}); + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(0) + , toIObject = __webpack_require__(11) + , toLength = __webpack_require__(8); + +$export($export.S, 'String', { + // 21.1.2.4 String.raw(callSite, ...substitutions) + raw: function raw(callSite){ + var tpl = toIObject(callSite.raw) + , len = toLength(tpl.length) + , aLen = arguments.length + , res = [] + , i = 0; + while(len > i){ + res.push(String(tpl[i++])); + if(i < aLen)res.push(String(arguments[i])); + } return res.join(''); + } +}); + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(0) + , toIndex = __webpack_require__(26) + , fromCharCode = String.fromCharCode + , $fromCodePoint = String.fromCodePoint; + +// length should be 1, old FF problem +$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars + var res = [] + , aLen = arguments.length + , i = 0 + , code; + while(aLen > i){ + code = +arguments[i++]; + if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point'); + res.push(code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) + ); + } return res.join(''); + } +}); + +/***/ }), +/* 133 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $export = __webpack_require__(0) + , $at = __webpack_require__(134)(false); +$export($export.P, 'String', { + // 21.1.3.3 String.prototype.codePointAt(pos) + codePointAt: function codePointAt(pos){ + return $at(this, pos); + } +}); + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(24) + , defined = __webpack_require__(16); +// true -> String#at +// false -> String#codePointAt +module.exports = function(TO_STRING){ + return function(that, pos){ + var s = String(defined(that)) + , i = toInteger(pos) + , l = s.length + , a, b; + if(i < 0 || i >= l)return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; +}; + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(0); + +$export($export.P, 'String', { + // 21.1.3.13 String.prototype.repeat(count) + repeat: __webpack_require__(81) +}); + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// 21.1.3.18 String.prototype.startsWith(searchString [, position ]) + +var $export = __webpack_require__(0) + , toLength = __webpack_require__(8) + , context = __webpack_require__(60) + , STARTS_WITH = 'startsWith' + , $startsWith = ''[STARTS_WITH]; + +$export($export.P + $export.F * __webpack_require__(61)(STARTS_WITH), 'String', { + startsWith: function startsWith(searchString /*, position = 0 */){ + var that = context(this, searchString, STARTS_WITH) + , index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)) + , search = String(searchString); + return $startsWith + ? $startsWith.call(that, search, index) + : that.slice(index, index + search.length) === search; + } +}); + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition]) + +var $export = __webpack_require__(0) + , toLength = __webpack_require__(8) + , context = __webpack_require__(60) + , ENDS_WITH = 'endsWith' + , $endsWith = ''[ENDS_WITH]; + +$export($export.P + $export.F * __webpack_require__(61)(ENDS_WITH), 'String', { + endsWith: function endsWith(searchString /*, endPosition = @length */){ + var that = context(this, searchString, ENDS_WITH) + , endPosition = arguments.length > 1 ? arguments[1] : undefined + , len = toLength(that.length) + , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len) + , search = String(searchString); + return $endsWith + ? $endsWith.call(that, search, end) + : that.slice(end - search.length, end) === search; + } +}); + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// 21.1.3.7 String.prototype.includes(searchString, position = 0) + +var $export = __webpack_require__(0) + , context = __webpack_require__(60) + , INCLUDES = 'includes'; + +$export($export.P + $export.F * __webpack_require__(61)(INCLUDES), 'String', { + includes: function includes(searchString /*, position = 0 */){ + return !!~context(this, searchString, INCLUDES) + .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + +// 21.2.5.3 get RegExp.prototype.flags() +if(__webpack_require__(9) && /./g.flags != 'g')__webpack_require__(6).f(RegExp.prototype, 'flags', { + configurable: true, + get: __webpack_require__(140) +}); + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// 21.2.5.3 get RegExp.prototype.flags +var anObject = __webpack_require__(2); +module.exports = function(){ + var that = anObject(this) + , result = ''; + if(that.global) result += 'g'; + if(that.ignoreCase) result += 'i'; + if(that.multiline) result += 'm'; + if(that.unicode) result += 'u'; + if(that.sticky) result += 'y'; + return result; +}; + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + +// @@match logic +__webpack_require__(45)('match', 1, function(defined, MATCH, $match){ + // 21.1.3.11 String.prototype.match(regexp) + return [function match(regexp){ + 'use strict'; + var O = defined(this) + , fn = regexp == undefined ? undefined : regexp[MATCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); + }, $match]; +}); + +/***/ }), +/* 142 */ +/***/ (function(module, exports, __webpack_require__) { + +// @@replace logic +__webpack_require__(45)('replace', 2, function(defined, REPLACE, $replace){ + // 21.1.3.14 String.prototype.replace(searchValue, replaceValue) + return [function replace(searchValue, replaceValue){ + 'use strict'; + var O = defined(this) + , fn = searchValue == undefined ? undefined : searchValue[REPLACE]; + return fn !== undefined + ? fn.call(searchValue, O, replaceValue) + : $replace.call(String(O), searchValue, replaceValue); + }, $replace]; +}); + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + +// @@split logic +__webpack_require__(45)('split', 2, function(defined, SPLIT, $split){ + 'use strict'; + var isRegExp = __webpack_require__(82) + , _split = $split + , $push = [].push + , $SPLIT = 'split' + , LENGTH = 'length' + , LAST_INDEX = 'lastIndex'; + if( + 'abbc'[$SPLIT](/(b)*/)[1] == 'c' || + 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || + 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || + '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || + '.'[$SPLIT](/()()/)[LENGTH] > 1 || + ''[$SPLIT](/.?/)[LENGTH] + ){ + var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group + // based on es5-shim implementation, need to rework it + $split = function(separator, limit){ + var string = String(this); + if(separator === undefined && limit === 0)return []; + // If `separator` is not a regex, use native split + if(!isRegExp(separator))return _split.call(string, separator, limit); + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + var splitLimit = limit === undefined ? 4294967295 : limit >>> 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var separator2, match, lastIndex, lastLength, i; + // Doesn't need flags gy, but they don't hurt + if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags); + while(match = separatorCopy.exec(string)){ + // `separatorCopy.lastIndex` is not reliable cross-browser + lastIndex = match.index + match[0][LENGTH]; + if(lastIndex > lastLastIndex){ + output.push(string.slice(lastLastIndex, match.index)); + // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG + if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){ + for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined; + }); + if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1)); + lastLength = match[0][LENGTH]; + lastLastIndex = lastIndex; + if(output[LENGTH] >= splitLimit)break; + } + if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop + } + if(lastLastIndex === string[LENGTH]){ + if(lastLength || !separatorCopy.test(''))output.push(''); + } else output.push(string.slice(lastLastIndex)); + return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output; + }; + // Chakra, V8 + } else if('0'[$SPLIT](undefined, 0)[LENGTH]){ + $split = function(separator, limit){ + return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit); + }; + } + // 21.1.3.17 String.prototype.split(separator, limit) + return [function split(separator, limit){ + var O = defined(this) + , fn = separator == undefined ? undefined : separator[SPLIT]; + return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit); + }, $split]; +}); + +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { + +// @@search logic +__webpack_require__(45)('search', 1, function(defined, SEARCH, $search){ + // 21.1.3.15 String.prototype.search(regexp) + return [function search(regexp){ + 'use strict'; + var O = defined(this) + , fn = regexp == undefined ? undefined : regexp[SEARCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); + }, $search]; +}); + +/***/ }), +/* 145 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var ctx = __webpack_require__(12) + , $export = __webpack_require__(0) + , toObject = __webpack_require__(20) + , call = __webpack_require__(75) + , isArrayIter = __webpack_require__(56) + , toLength = __webpack_require__(8) + , createProperty = __webpack_require__(62) + , getIterFn = __webpack_require__(57); + +$export($export.S + $export.F * !__webpack_require__(40)(function(iter){ Array.from(iter); }), 'Array', { + // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) + from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){ + var O = toObject(arrayLike) + , C = typeof this == 'function' ? this : Array + , aLen = arguments.length + , mapfn = aLen > 1 ? arguments[1] : undefined + , mapping = mapfn !== undefined + , index = 0 + , iterFn = getIterFn(O) + , length, result, step, iterator; + if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); + // if object isn't iterable or it's array with default iterator - use simple case + if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){ + for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){ + createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); + } + } else { + length = toLength(O.length); + for(result = new C(length); length > index; index++){ + createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); + } + } + result.length = index; + return result; + } +}); + + +/***/ }), +/* 146 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $export = __webpack_require__(0) + , createProperty = __webpack_require__(62); + +// WebKit Array.of isn't generic +$export($export.S + $export.F * __webpack_require__(5)(function(){ + function F(){} + return !(Array.of.call(F) instanceof F); +}), 'Array', { + // 22.1.2.3 Array.of( ...items) + of: function of(/* ...args */){ + var index = 0 + , aLen = arguments.length + , result = new (typeof this == 'function' ? this : Array)(aLen); + while(aLen > index)createProperty(result, index, arguments[index++]); + result.length = aLen; + return result; + } +}); + +/***/ }), +/* 147 */ +/***/ (function(module, exports, __webpack_require__) { + +// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) +var $export = __webpack_require__(0); + +$export($export.P, 'Array', {copyWithin: __webpack_require__(73)}); + +__webpack_require__(30)('copyWithin'); + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) +var $export = __webpack_require__(0) + , $find = __webpack_require__(36)(5) + , KEY = 'find' + , forced = true; +// Shouldn't skip holes +if(KEY in [])Array(1)[KEY](function(){ forced = false; }); +$export($export.P + $export.F * forced, 'Array', { + find: function find(callbackfn/*, that = undefined */){ + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +__webpack_require__(30)(KEY); + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) +var $export = __webpack_require__(0) + , $find = __webpack_require__(36)(6) + , KEY = 'findIndex' + , forced = true; +// Shouldn't skip holes +if(KEY in [])Array(1)[KEY](function(){ forced = false; }); +$export($export.P + $export.F * forced, 'Array', { + findIndex: function findIndex(callbackfn/*, that = undefined */){ + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +__webpack_require__(30)(KEY); + +/***/ }), +/* 150 */ +/***/ (function(module, exports, __webpack_require__) { + +// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) +var $export = __webpack_require__(0); + +$export($export.P, 'Array', {fill: __webpack_require__(53)}); + +__webpack_require__(30)('fill'); + +/***/ }), +/* 151 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.2 Number.isFinite(number) +var $export = __webpack_require__(0) + , _isFinite = __webpack_require__(1).isFinite; + +$export($export.S, 'Number', { + isFinite: function isFinite(it){ + return typeof it == 'number' && _isFinite(it); + } +}); + +/***/ }), +/* 152 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.3 Number.isInteger(number) +var $export = __webpack_require__(0); + +$export($export.S, 'Number', {isInteger: __webpack_require__(83)}); + +/***/ }), +/* 153 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.5 Number.isSafeInteger(number) +var $export = __webpack_require__(0) + , isInteger = __webpack_require__(83) + , abs = Math.abs; + +$export($export.S, 'Number', { + isSafeInteger: function isSafeInteger(number){ + return isInteger(number) && abs(number) <= 0x1fffffffffffff; + } +}); + +/***/ }), +/* 154 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.4 Number.isNaN(number) +var $export = __webpack_require__(0); + +$export($export.S, 'Number', { + isNaN: function isNaN(number){ + return number != number; + } +}); + +/***/ }), +/* 155 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.1 Number.EPSILON +var $export = __webpack_require__(0); + +$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)}); + +/***/ }), +/* 156 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.10 Number.MIN_SAFE_INTEGER +var $export = __webpack_require__(0); + +$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff}); + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.1.2.6 Number.MAX_SAFE_INTEGER +var $export = __webpack_require__(0); + +$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff}); + +/***/ }), +/* 158 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.3 Math.acosh(x) +var $export = __webpack_require__(0) + , log1p = __webpack_require__(84) + , sqrt = Math.sqrt + , $acosh = Math.acosh; + +$export($export.S + $export.F * !($acosh + // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 + && Math.floor($acosh(Number.MAX_VALUE)) == 710 + // Tor Browser bug: Math.acosh(Infinity) -> NaN + && $acosh(Infinity) == Infinity +), 'Math', { + acosh: function acosh(x){ + return (x = +x) < 1 ? NaN : x > 94906265.62425156 + ? Math.log(x) + Math.LN2 + : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1)); + } +}); + +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.5 Math.asinh(x) +var $export = __webpack_require__(0) + , $asinh = Math.asinh; + +function asinh(x){ + return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1)); +} + +// Tor Browser bug: Math.asinh(0) -> -0 +$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh}); + +/***/ }), +/* 160 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.7 Math.atanh(x) +var $export = __webpack_require__(0) + , $atanh = Math.atanh; + +// Tor Browser bug: Math.atanh(-0) -> 0 +$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { + atanh: function atanh(x){ + return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2; + } +}); + +/***/ }), +/* 161 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.9 Math.cbrt(x) +var $export = __webpack_require__(0) + , sign = __webpack_require__(63); + +$export($export.S, 'Math', { + cbrt: function cbrt(x){ + return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3); + } +}); + +/***/ }), +/* 162 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.11 Math.clz32(x) +var $export = __webpack_require__(0); + +$export($export.S, 'Math', { + clz32: function clz32(x){ + return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32; + } +}); + +/***/ }), +/* 163 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.12 Math.cosh(x) +var $export = __webpack_require__(0) + , exp = Math.exp; + +$export($export.S, 'Math', { + cosh: function cosh(x){ + return (exp(x = +x) + exp(-x)) / 2; + } +}); + +/***/ }), +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.14 Math.expm1(x) +var $export = __webpack_require__(0) + , $expm1 = __webpack_require__(64); + +$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1}); + +/***/ }), +/* 165 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.16 Math.fround(x) +var $export = __webpack_require__(0) + , sign = __webpack_require__(63) + , pow = Math.pow + , EPSILON = pow(2, -52) + , EPSILON32 = pow(2, -23) + , MAX32 = pow(2, 127) * (2 - EPSILON32) + , MIN32 = pow(2, -126); + +var roundTiesToEven = function(n){ + return n + 1 / EPSILON - 1 / EPSILON; +}; + + +$export($export.S, 'Math', { + fround: function fround(x){ + var $abs = Math.abs(x) + , $sign = sign(x) + , a, result; + if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; + a = (1 + EPSILON32 / EPSILON) * $abs; + result = a - (a - $abs); + if(result > MAX32 || result != result)return $sign * Infinity; + return $sign * result; + } +}); + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) +var $export = __webpack_require__(0) + , abs = Math.abs; + +$export($export.S, 'Math', { + hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars + var sum = 0 + , i = 0 + , aLen = arguments.length + , larg = 0 + , arg, div; + while(i < aLen){ + arg = abs(arguments[i++]); + if(larg < arg){ + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if(arg > 0){ + div = arg / larg; + sum += div * div; + } else sum += arg; + } + return larg === Infinity ? Infinity : larg * Math.sqrt(sum); + } +}); + +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.18 Math.imul(x, y) +var $export = __webpack_require__(0) + , $imul = Math.imul; + +// some WebKit versions fails with big numbers, some has wrong arity +$export($export.S + $export.F * __webpack_require__(5)(function(){ + return $imul(0xffffffff, 5) != -5 || $imul.length != 2; +}), 'Math', { + imul: function imul(x, y){ + var UINT16 = 0xffff + , xn = +x + , yn = +y + , xl = UINT16 & xn + , yl = UINT16 & yn; + return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); + } +}); + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.20 Math.log1p(x) +var $export = __webpack_require__(0); + +$export($export.S, 'Math', {log1p: __webpack_require__(84)}); + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.21 Math.log10(x) +var $export = __webpack_require__(0); + +$export($export.S, 'Math', { + log10: function log10(x){ + return Math.log(x) / Math.LN10; + } +}); + +/***/ }), +/* 170 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.22 Math.log2(x) +var $export = __webpack_require__(0); + +$export($export.S, 'Math', { + log2: function log2(x){ + return Math.log(x) / Math.LN2; + } +}); + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.28 Math.sign(x) +var $export = __webpack_require__(0); + +$export($export.S, 'Math', {sign: __webpack_require__(63)}); + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.30 Math.sinh(x) +var $export = __webpack_require__(0) + , expm1 = __webpack_require__(64) + , exp = Math.exp; + +// V8 near Chromium 38 has a problem with very small numbers +$export($export.S + $export.F * __webpack_require__(5)(function(){ + return !Math.sinh(-2e-17) != -2e-17; +}), 'Math', { + sinh: function sinh(x){ + return Math.abs(x = +x) < 1 + ? (expm1(x) - expm1(-x)) / 2 + : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2); + } +}); + +/***/ }), +/* 173 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.33 Math.tanh(x) +var $export = __webpack_require__(0) + , expm1 = __webpack_require__(64) + , exp = Math.exp; + +$export($export.S, 'Math', { + tanh: function tanh(x){ + var a = expm1(x = +x) + , b = expm1(-x); + return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x)); + } +}); + +/***/ }), +/* 174 */ +/***/ (function(module, exports, __webpack_require__) { + +// 20.2.2.34 Math.trunc(x) +var $export = __webpack_require__(0); + +$export($export.S, 'Math', { + trunc: function trunc(it){ + return (it > 0 ? Math.floor : Math.ceil)(it); + } +}); + +/***/ }), +/* 175 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://github.com/tc39/Array.prototype.includes +var $export = __webpack_require__(0) + , $includes = __webpack_require__(49)(true); + +$export($export.P, 'Array', { + includes: function includes(el /*, fromIndex = 0 */){ + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +__webpack_require__(30)('includes'); + +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://github.com/tc39/proposal-object-values-entries +var $export = __webpack_require__(0) + , $values = __webpack_require__(85)(false); + +$export($export.S, 'Object', { + values: function values(it){ + return $values(it); + } +}); + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://github.com/tc39/proposal-object-values-entries +var $export = __webpack_require__(0) + , $entries = __webpack_require__(85)(true); + +$export($export.S, 'Object', { + entries: function entries(it){ + return $entries(it); + } +}); + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://github.com/tc39/proposal-object-getownpropertydescriptors +var $export = __webpack_require__(0) + , ownKeys = __webpack_require__(79) + , toIObject = __webpack_require__(11) + , gOPD = __webpack_require__(17) + , createProperty = __webpack_require__(62); + +$export($export.S, 'Object', { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){ + var O = toIObject(object) + , getDesc = gOPD.f + , keys = ownKeys(O) + , result = {} + , i = 0 + , key; + while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key)); + return result; + } +}); + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://github.com/tc39/proposal-string-pad-start-end +var $export = __webpack_require__(0) + , $pad = __webpack_require__(86); + +$export($export.P, 'String', { + padStart: function padStart(maxLength /*, fillString = ' ' */){ + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); + } +}); + +/***/ }), +/* 180 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://github.com/tc39/proposal-string-pad-start-end +var $export = __webpack_require__(0) + , $pad = __webpack_require__(86); + +$export($export.P, 'String', { + padEnd: function padEnd(maxLength /*, fillString = ' ' */){ + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); + } +}); + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + +// ie9- setTimeout & setInterval additional parameters fix +var global = __webpack_require__(1) + , $export = __webpack_require__(0) + , invoke = __webpack_require__(44) + , partial = __webpack_require__(182) + , navigator = global.navigator + , MSIE = !!navigator && /MSIE .\./.test(navigator.userAgent); // <- dirty ie9- check +var wrap = function(set){ + return MSIE ? function(fn, time /*, ...args */){ + return set(invoke( + partial, + [].slice.call(arguments, 2), + typeof fn == 'function' ? fn : Function(fn) + ), time); + } : set; +}; +$export($export.G + $export.B + $export.F * MSIE, { + setTimeout: wrap(global.setTimeout), + setInterval: wrap(global.setInterval) +}); + +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var path = __webpack_require__(183) + , invoke = __webpack_require__(44) + , aFunction = __webpack_require__(19); +module.exports = function(/* ...pargs */){ + var fn = aFunction(this) + , length = arguments.length + , pargs = Array(length) + , i = 0 + , _ = path._ + , holder = false; + while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true; + return function(/* ...args */){ + var that = this + , aLen = arguments.length + , j = 0, k = 0, args; + if(!holder && !aLen)return invoke(fn, pargs, that); + args = pargs.slice(); + if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++]; + while(aLen > k)args.push(arguments[k++]); + return invoke(fn, args, that); + }; +}; + +/***/ }), +/* 183 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(1); + +/***/ }), +/* 184 */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(0) + , $task = __webpack_require__(59); +$export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear +}); + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + +var $iterators = __webpack_require__(58) + , redefine = __webpack_require__(15) + , global = __webpack_require__(1) + , hide = __webpack_require__(10) + , Iterators = __webpack_require__(28) + , wks = __webpack_require__(4) + , ITERATOR = wks('iterator') + , TO_STRING_TAG = wks('toStringTag') + , ArrayValues = Iterators.Array; + +for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){ + var NAME = collections[i] + , Collection = global[NAME] + , proto = Collection && Collection.prototype + , key; + if(proto){ + if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues); + if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME); + Iterators[NAME] = ArrayValues; + for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true); + } +} + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {/** + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * https://raw.github.com/facebook/regenerator/master/LICENSE file. An + * additional grant of patent rights can be found in the PATENTS file in + * the same directory. + */ + +!(function(global) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + runtime.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } + } + + if (typeof global.process === "object" && global.process.domain) { + invoke = global.process.domain.bind(invoke); + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + runtime.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator.return) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; + } + }; +})( + // Among the various tricks for obtaining a reference to the global + // object, this seems to be the most reliable technique that does not + // use indirect eval (which violates Content Security Policy). + typeof global === "object" ? global : + typeof window === "object" ? window : + typeof self === "object" ? self : this +); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(187))) + +/***/ }), +/* 187 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + "use strict"; -var _filter = __webpack_require__(1); +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _dialogPolyfill = __webpack_require__(189); + +var _dialogPolyfill2 = _interopRequireDefault(_dialogPolyfill); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Dialog = function () { + function Dialog() { + _classCallCheck(this, Dialog); + } + + _createClass(Dialog, [{ + key: 'init', + value: function init() { + var $body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body; + var dialog = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'dialog'; + + var $modal = document.querySelector(dialog); + if (!$modal) return; + _dialogPolyfill2.default.registerDialog($modal); + + document.querySelector('.js-show-modal').onclick = function () { + $body.classList.add('js-open-modal'); + $modal.showModal(); + }; + + document.querySelector('.js-close-modal').onclick = function () { + $body.classList.remove('js-open-modal'); + $modal.close(); + }; + } + }]); + + return Dialog; +}(); + +exports.default = Dialog; + +/***/ }), +/* 189 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_RESULT__;(function() { + + // nb. This is for IE10 and lower _only_. + var supportCustomEvent = window.CustomEvent; + if (!supportCustomEvent || typeof supportCustomEvent === 'object') { + supportCustomEvent = function CustomEvent(event, x) { + x = x || {}; + var ev = document.createEvent('CustomEvent'); + ev.initCustomEvent(event, !!x.bubbles, !!x.cancelable, x.detail || null); + return ev; + }; + supportCustomEvent.prototype = window.Event.prototype; + } + + /** + * @param {Element} el to check for stacking context + * @return {boolean} whether this el or its parents creates a stacking context + */ + function createsStackingContext(el) { + while (el && el !== document.body) { + var s = window.getComputedStyle(el); + var invalid = function(k, ok) { + return !(s[k] === undefined || s[k] === ok); + } + if (s.opacity < 1 || + invalid('zIndex', 'auto') || + invalid('transform', 'none') || + invalid('mixBlendMode', 'normal') || + invalid('filter', 'none') || + invalid('perspective', 'none') || + s['isolation'] === 'isolate' || + s.position === 'fixed' || + s.webkitOverflowScrolling === 'touch') { + return true; + } + el = el.parentElement; + } + return false; + } + + /** + * Finds the nearest from the passed element. + * + * @param {Element} el to search from + * @return {HTMLDialogElement} dialog found + */ + function findNearestDialog(el) { + while (el) { + if (el.localName === 'dialog') { + return /** @type {HTMLDialogElement} */ (el); + } + el = el.parentElement; + } + return null; + } + + /** + * Blur the specified element, as long as it's not the HTML body element. + * This works around an IE9/10 bug - blurring the body causes Windows to + * blur the whole application. + * + * @param {Element} el to blur + */ + function safeBlur(el) { + if (el && el.blur && el !== document.body) { + el.blur(); + } + } + + /** + * @param {!NodeList} nodeList to search + * @param {Node} node to find + * @return {boolean} whether node is inside nodeList + */ + function inNodeList(nodeList, node) { + for (var i = 0; i < nodeList.length; ++i) { + if (nodeList[i] === node) { + return true; + } + } + return false; + } + + /** + * @param {HTMLFormElement} el to check + * @return {boolean} whether this form has method="dialog" + */ + function isFormMethodDialog(el) { + if (!el || !el.hasAttribute('method')) { + return false; + } + return el.getAttribute('method').toLowerCase() === 'dialog'; + } + + /** + * @param {!HTMLDialogElement} dialog to upgrade + * @constructor + */ + function dialogPolyfillInfo(dialog) { + this.dialog_ = dialog; + this.replacedStyleTop_ = false; + this.openAsModal_ = false; + + // Set a11y role. Browsers that support dialog implicitly know this already. + if (!dialog.hasAttribute('role')) { + dialog.setAttribute('role', 'dialog'); + } + + dialog.show = this.show.bind(this); + dialog.showModal = this.showModal.bind(this); + dialog.close = this.close.bind(this); + + if (!('returnValue' in dialog)) { + dialog.returnValue = ''; + } + + if ('MutationObserver' in window) { + var mo = new MutationObserver(this.maybeHideModal.bind(this)); + mo.observe(dialog, {attributes: true, attributeFilter: ['open']}); + } else { + // IE10 and below support. Note that DOMNodeRemoved etc fire _before_ removal. They also + // seem to fire even if the element was removed as part of a parent removal. Use the removed + // events to force downgrade (useful if removed/immediately added). + var removed = false; + var cb = function() { + removed ? this.downgradeModal() : this.maybeHideModal(); + removed = false; + }.bind(this); + var timeout; + var delayModel = function(ev) { + if (ev.target !== dialog) { return; } // not for a child element + var cand = 'DOMNodeRemoved'; + removed |= (ev.type.substr(0, cand.length) === cand); + window.clearTimeout(timeout); + timeout = window.setTimeout(cb, 0); + }; + ['DOMAttrModified', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument'].forEach(function(name) { + dialog.addEventListener(name, delayModel); + }); + } + // Note that the DOM is observed inside DialogManager while any dialog + // is being displayed as a modal, to catch modal removal from the DOM. + + Object.defineProperty(dialog, 'open', { + set: this.setOpen.bind(this), + get: dialog.hasAttribute.bind(dialog, 'open') + }); + + this.backdrop_ = document.createElement('div'); + this.backdrop_.className = 'backdrop'; + this.backdrop_.addEventListener('click', this.backdropClick_.bind(this)); + } -var _filter2 = _interopRequireDefault(_filter); + dialogPolyfillInfo.prototype = { -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + get dialog() { + return this.dialog_; + }, -var filter = new _filter2.default(); /* eslint no-console:0 */ -// This file is automatically compiled by Webpack, along with any other files -// present in this directory. You're encouraged to place your actual application logic in -// a relevant structure within app/javascript and only use these pack files to reference -// that code so it'll be compiled. -// -// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate -// layout file, like app/views/layouts/application.html.erb + /** + * Maybe remove this dialog from the modal top layer. This is called when + * a modal dialog may no longer be tenable, e.g., when the dialog is no + * longer open or is no longer part of the DOM. + */ + maybeHideModal: function() { + if (this.dialog_.hasAttribute('open') && document.body.contains(this.dialog_)) { return; } + this.downgradeModal(); + }, -document.addEventListener('turbolinks:load', function () { - filter.init('filter'); + /** + * Remove this dialog from the modal top layer, leaving it as a non-modal. + */ + downgradeModal: function() { + if (!this.openAsModal_) { return; } + this.openAsModal_ = false; + this.dialog_.style.zIndex = ''; + + // This won't match the native exactly because if the user set top on a centered + // polyfill dialog, that top gets thrown away when the dialog is closed. Not sure it's + // possible to polyfill this perfectly. + if (this.replacedStyleTop_) { + this.dialog_.style.top = ''; + this.replacedStyleTop_ = false; + } + + // Clear the backdrop and remove from the manager. + this.backdrop_.parentNode && this.backdrop_.parentNode.removeChild(this.backdrop_); + dialogPolyfill.dm.removeDialog(this); + }, + + /** + * @param {boolean} value whether to open or close this dialog + */ + setOpen: function(value) { + if (value) { + this.dialog_.hasAttribute('open') || this.dialog_.setAttribute('open', ''); + } else { + this.dialog_.removeAttribute('open'); + this.maybeHideModal(); // nb. redundant with MutationObserver + } + }, + + /** + * Handles clicks on the fake .backdrop element, redirecting them as if + * they were on the dialog itself. + * + * @param {!Event} e to redirect + */ + backdropClick_: function(e) { + if (!this.dialog_.hasAttribute('tabindex')) { + // Clicking on the backdrop should move the implicit cursor, even if dialog cannot be + // focused. Create a fake thing to focus on. If the backdrop was _before_ the dialog, this + // would not be needed - clicks would move the implicit cursor there. + var fake = document.createElement('div'); + this.dialog_.insertBefore(fake, this.dialog_.firstChild); + fake.tabIndex = -1; + fake.focus(); + this.dialog_.removeChild(fake); + } else { + this.dialog_.focus(); + } + + var redirectedEvent = document.createEvent('MouseEvents'); + redirectedEvent.initMouseEvent(e.type, e.bubbles, e.cancelable, window, + e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, + e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget); + this.dialog_.dispatchEvent(redirectedEvent); + e.stopPropagation(); + }, + + /** + * Focuses on the first focusable element within the dialog. This will always blur the current + * focus, even if nothing within the dialog is found. + */ + focus_: function() { + // Find element with `autofocus` attribute, or fall back to the first form/tabindex control. + var target = this.dialog_.querySelector('[autofocus]:not([disabled])'); + if (!target && this.dialog_.tabIndex >= 0) { + target = this.dialog_; + } + if (!target) { + // Note that this is 'any focusable area'. This list is probably not exhaustive, but the + // alternative involves stepping through and trying to focus everything. + var opts = ['button', 'input', 'keygen', 'select', 'textarea']; + var query = opts.map(function(el) { + return el + ':not([disabled])'; + }); + // TODO(samthor): tabindex values that are not numeric are not focusable. + query.push('[tabindex]:not([disabled]):not([tabindex=""])'); // tabindex != "", not disabled + target = this.dialog_.querySelector(query.join(', ')); + } + safeBlur(document.activeElement); + target && target.focus(); + }, + + /** + * Sets the zIndex for the backdrop and dialog. + * + * @param {number} dialogZ + * @param {number} backdropZ + */ + updateZIndex: function(dialogZ, backdropZ) { + if (dialogZ < backdropZ) { + throw new Error('dialogZ should never be < backdropZ'); + } + this.dialog_.style.zIndex = dialogZ; + this.backdrop_.style.zIndex = backdropZ; + }, + + /** + * Shows the dialog. If the dialog is already open, this does nothing. + */ + show: function() { + if (!this.dialog_.open) { + this.setOpen(true); + this.focus_(); + } + }, + + /** + * Show this dialog modally. + */ + showModal: function() { + if (this.dialog_.hasAttribute('open')) { + throw new Error('Failed to execute \'showModal\' on dialog: The element is already open, and therefore cannot be opened modally.'); + } + if (!document.body.contains(this.dialog_)) { + throw new Error('Failed to execute \'showModal\' on dialog: The element is not in a Document.'); + } + if (!dialogPolyfill.dm.pushDialog(this)) { + throw new Error('Failed to execute \'showModal\' on dialog: There are too many open modal dialogs.'); + } + + if (createsStackingContext(this.dialog_.parentElement)) { + console.warn('A dialog is being shown inside a stacking context. ' + + 'This may cause it to be unusable. For more information, see this link: ' + + 'https://github.com/GoogleChrome/dialog-polyfill/#stacking-context'); + } + + this.setOpen(true); + this.openAsModal_ = true; + + // Optionally center vertically, relative to the current viewport. + if (dialogPolyfill.needsCentering(this.dialog_)) { + dialogPolyfill.reposition(this.dialog_); + this.replacedStyleTop_ = true; + } else { + this.replacedStyleTop_ = false; + } + + // Insert backdrop. + this.dialog_.parentNode.insertBefore(this.backdrop_, this.dialog_.nextSibling); + + // Focus on whatever inside the dialog. + this.focus_(); + }, + + /** + * Closes this HTMLDialogElement. This is optional vs clearing the open + * attribute, however this fires a 'close' event. + * + * @param {string=} opt_returnValue to use as the returnValue + */ + close: function(opt_returnValue) { + if (!this.dialog_.hasAttribute('open')) { + throw new Error('Failed to execute \'close\' on dialog: The element does not have an \'open\' attribute, and therefore cannot be closed.'); + } + this.setOpen(false); + + // Leave returnValue untouched in case it was set directly on the element + if (opt_returnValue !== undefined) { + this.dialog_.returnValue = opt_returnValue; + } + + // Triggering "close" event for any attached listeners on the . + var closeEvent = new supportCustomEvent('close', { + bubbles: false, + cancelable: false + }); + this.dialog_.dispatchEvent(closeEvent); + } + + }; + + var dialogPolyfill = {}; + + dialogPolyfill.reposition = function(element) { + var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; + var topValue = scrollTop + (window.innerHeight - element.offsetHeight) / 2; + element.style.top = Math.max(scrollTop, topValue) + 'px'; + }; + + dialogPolyfill.isInlinePositionSetByStylesheet = function(element) { + for (var i = 0; i < document.styleSheets.length; ++i) { + var styleSheet = document.styleSheets[i]; + var cssRules = null; + // Some browsers throw on cssRules. + try { + cssRules = styleSheet.cssRules; + } catch (e) {} + if (!cssRules) { continue; } + for (var j = 0; j < cssRules.length; ++j) { + var rule = cssRules[j]; + var selectedNodes = null; + // Ignore errors on invalid selector texts. + try { + selectedNodes = document.querySelectorAll(rule.selectorText); + } catch(e) {} + if (!selectedNodes || !inNodeList(selectedNodes, element)) { + continue; + } + var cssTop = rule.style.getPropertyValue('top'); + var cssBottom = rule.style.getPropertyValue('bottom'); + if ((cssTop && cssTop !== 'auto') || (cssBottom && cssBottom !== 'auto')) { + return true; + } + } + } + return false; + }; + + dialogPolyfill.needsCentering = function(dialog) { + var computedStyle = window.getComputedStyle(dialog); + if (computedStyle.position !== 'absolute') { + return false; + } + + // We must determine whether the top/bottom specified value is non-auto. In + // WebKit/Blink, checking computedStyle.top == 'auto' is sufficient, but + // Firefox returns the used value. So we do this crazy thing instead: check + // the inline style and then go through CSS rules. + if ((dialog.style.top !== 'auto' && dialog.style.top !== '') || + (dialog.style.bottom !== 'auto' && dialog.style.bottom !== '')) { + return false; + } + return !dialogPolyfill.isInlinePositionSetByStylesheet(dialog); + }; + + /** + * @param {!Element} element to force upgrade + */ + dialogPolyfill.forceRegisterDialog = function(element) { + if (window.HTMLDialogElement || element.showModal) { + console.warn('This browser already supports , the polyfill ' + + 'may not work correctly', element); + } + if (element.localName !== 'dialog') { + throw new Error('Failed to register dialog: The element is not a dialog.'); + } + new dialogPolyfillInfo(/** @type {!HTMLDialogElement} */ (element)); + }; + + /** + * @param {!Element} element to upgrade, if necessary + */ + dialogPolyfill.registerDialog = function(element) { + if (!element.showModal) { + dialogPolyfill.forceRegisterDialog(element); + } + }; + + /** + * @constructor + */ + dialogPolyfill.DialogManager = function() { + /** @type {!Array} */ + this.pendingDialogStack = []; + + var checkDOM = this.checkDOM_.bind(this); + + // The overlay is used to simulate how a modal dialog blocks the document. + // The blocking dialog is positioned on top of the overlay, and the rest of + // the dialogs on the pending dialog stack are positioned below it. In the + // actual implementation, the modal dialog stacking is controlled by the + // top layer, where z-index has no effect. + this.overlay = document.createElement('div'); + this.overlay.className = '_dialog_overlay'; + this.overlay.addEventListener('click', function(e) { + this.forwardTab_ = undefined; + e.stopPropagation(); + checkDOM([]); // sanity-check DOM + }.bind(this)); + + this.handleKey_ = this.handleKey_.bind(this); + this.handleFocus_ = this.handleFocus_.bind(this); + + this.zIndexLow_ = 100000; + this.zIndexHigh_ = 100000 + 150; + + this.forwardTab_ = undefined; + + if ('MutationObserver' in window) { + this.mo_ = new MutationObserver(function(records) { + var removed = []; + records.forEach(function(rec) { + for (var i = 0, c; c = rec.removedNodes[i]; ++i) { + if (!(c instanceof Element)) { + continue; + } else if (c.localName === 'dialog') { + removed.push(c); + } + removed = removed.concat(c.querySelectorAll('dialog')); + } + }); + removed.length && checkDOM(removed); + }); + } + }; + + /** + * Called on the first modal dialog being shown. Adds the overlay and related + * handlers. + */ + dialogPolyfill.DialogManager.prototype.blockDocument = function() { + document.documentElement.addEventListener('focus', this.handleFocus_, true); + document.addEventListener('keydown', this.handleKey_); + this.mo_ && this.mo_.observe(document, {childList: true, subtree: true}); + }; + + /** + * Called on the first modal dialog being removed, i.e., when no more modal + * dialogs are visible. + */ + dialogPolyfill.DialogManager.prototype.unblockDocument = function() { + document.documentElement.removeEventListener('focus', this.handleFocus_, true); + document.removeEventListener('keydown', this.handleKey_); + this.mo_ && this.mo_.disconnect(); + }; + + /** + * Updates the stacking of all known dialogs. + */ + dialogPolyfill.DialogManager.prototype.updateStacking = function() { + var zIndex = this.zIndexHigh_; + + for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) { + dpi.updateZIndex(--zIndex, --zIndex); + if (i === 0) { + this.overlay.style.zIndex = --zIndex; + } + } + + // Make the overlay a sibling of the dialog itself. + var last = this.pendingDialogStack[0]; + if (last) { + var p = last.dialog.parentNode || document.body; + p.appendChild(this.overlay); + } else if (this.overlay.parentNode) { + this.overlay.parentNode.removeChild(this.overlay); + } + }; + + /** + * @param {Element} candidate to check if contained or is the top-most modal dialog + * @return {boolean} whether candidate is contained in top dialog + */ + dialogPolyfill.DialogManager.prototype.containedByTopDialog_ = function(candidate) { + while (candidate = findNearestDialog(candidate)) { + for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) { + if (dpi.dialog === candidate) { + return i === 0; // only valid if top-most + } + } + candidate = candidate.parentElement; + } + return false; + }; + + dialogPolyfill.DialogManager.prototype.handleFocus_ = function(event) { + if (this.containedByTopDialog_(event.target)) { return; } + + event.preventDefault(); + event.stopPropagation(); + safeBlur(/** @type {Element} */ (event.target)); + + if (this.forwardTab_ === undefined) { return; } // move focus only from a tab key + + var dpi = this.pendingDialogStack[0]; + var dialog = dpi.dialog; + var position = dialog.compareDocumentPosition(event.target); + if (position & Node.DOCUMENT_POSITION_PRECEDING) { + if (this.forwardTab_) { // forward + dpi.focus_(); + } else { // backwards + document.documentElement.focus(); + } + } else { + // TODO: Focus after the dialog, is ignored. + } + + return false; + }; + + dialogPolyfill.DialogManager.prototype.handleKey_ = function(event) { + this.forwardTab_ = undefined; + if (event.keyCode === 27) { + event.preventDefault(); + event.stopPropagation(); + var cancelEvent = new supportCustomEvent('cancel', { + bubbles: false, + cancelable: true + }); + var dpi = this.pendingDialogStack[0]; + if (dpi && dpi.dialog.dispatchEvent(cancelEvent)) { + dpi.dialog.close(); + } + } else if (event.keyCode === 9) { + this.forwardTab_ = !event.shiftKey; + } + }; + + /** + * Finds and downgrades any known modal dialogs that are no longer displayed. Dialogs that are + * removed and immediately readded don't stay modal, they become normal. + * + * @param {!Array} removed that have definitely been removed + */ + dialogPolyfill.DialogManager.prototype.checkDOM_ = function(removed) { + // This operates on a clone because it may cause it to change. Each change also calls + // updateStacking, which only actually needs to happen once. But who removes many modal dialogs + // at a time?! + var clone = this.pendingDialogStack.slice(); + clone.forEach(function(dpi) { + if (removed.indexOf(dpi.dialog) !== -1) { + dpi.downgradeModal(); + } else { + dpi.maybeHideModal(); + } + }); + }; + + /** + * @param {!dialogPolyfillInfo} dpi + * @return {boolean} whether the dialog was allowed + */ + dialogPolyfill.DialogManager.prototype.pushDialog = function(dpi) { + var allowed = (this.zIndexHigh_ - this.zIndexLow_) / 2 - 1; + if (this.pendingDialogStack.length >= allowed) { + return false; + } + if (this.pendingDialogStack.unshift(dpi) === 1) { + this.blockDocument(); + } + this.updateStacking(); + return true; + }; + + /** + * @param {!dialogPolyfillInfo} dpi + */ + dialogPolyfill.DialogManager.prototype.removeDialog = function(dpi) { + var index = this.pendingDialogStack.indexOf(dpi); + if (index === -1) { return; } + + this.pendingDialogStack.splice(index, 1); + if (this.pendingDialogStack.length === 0) { + this.unblockDocument(); + } + this.updateStacking(); + }; + + dialogPolyfill.dm = new dialogPolyfill.DialogManager(); + dialogPolyfill.formSubmitter = null; + dialogPolyfill.useValue = null; + + /** + * Installs global handlers, such as click listers and native method overrides. These are needed + * even if a no dialog is registered, as they deal with
. + */ + if (window.HTMLDialogElement === undefined) { + + /** + * If HTMLFormElement translates method="DIALOG" into 'get', then replace the descriptor with + * one that returns the correct value. + */ + var testForm = document.createElement('form'); + testForm.setAttribute('method', 'dialog'); + if (testForm.method !== 'dialog') { + var methodDescriptor = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, 'method'); + if (methodDescriptor) { + // TODO: older iOS and older PhantomJS fail to return the descriptor here + var realGet = methodDescriptor.get; + methodDescriptor.get = function() { + if (isFormMethodDialog(this)) { + return 'dialog'; + } + return realGet.call(this); + }; + var realSet = methodDescriptor.set; + methodDescriptor.set = function(v) { + if (typeof v === 'string' && v.toLowerCase() === 'dialog') { + return this.setAttribute('method', v); + } + return realSet.call(this, v); + }; + Object.defineProperty(HTMLFormElement.prototype, 'method', methodDescriptor); + } + } + + /** + * Global 'click' handler, to capture the or