From ab263ca96e02e3444c93459f67ddcc8b5b304f56 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 23 Jul 2023 00:28:10 +0200 Subject: [PATCH 01/57] Automatically use embeddable URL for media items --- app/models/commercial.rb | 11 ++++++++- lib/embeddable_url.rb | 42 +++++++++++++++++++++++++++++++++ spec/lib/embeddable_url_spec.rb | 17 +++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 lib/embeddable_url.rb create mode 100644 spec/lib/embeddable_url_spec.rb diff --git a/app/models/commercial.rb b/app/models/commercial.rb index d5ac9a463..a08a890e6 100644 --- a/app/models/commercial.rb +++ b/app/models/commercial.rb @@ -38,14 +38,17 @@ def self.render_from_url(url) end def self.iframe_fallback(url) - "".html_safe + url = EmbeddableURL.new(url).iframe_url + "".html_safe end def self.read_file(file) + require 'csv' errors = {} errors[:no_event] = [] errors[:validation_errors] = [] + file. file.read.each_line do |line| # Get the event id (text before :) id = line.match(/:/).pre_match.to_i @@ -66,6 +69,12 @@ def self.read_file(file) private + def optional_params + return '' unless self.url.match(%r{snap.berkeley}) + + 'allow="geolocation;microphone;camera"' + end + def valid_url result = Commercial.render_from_url(url) errors.add(:base, result[:error]) if result[:error] diff --git a/lib/embeddable_url.rb b/lib/embeddable_url.rb new file mode 100644 index 000000000..0a4872bc5 --- /dev/null +++ b/lib/embeddable_url.rb @@ -0,0 +1,42 @@ +# Transform a URL to a version that allows iframes + +class EmbeddableURL + attr_accessor :url + + TRANSFORMATIONS = { + /snap\.berkeley\.edu/ => snap, + /docs\.google\.com/ => google_docs, + /dropbox\.com/ => dropbox + }.freeze + + def iframe_url + TRANSFORMATIONS.each do |regex, fn| + return fn.call(url) if url.match?(regex) + end + url + end + + private + + def google_docs(url) + # replace /edit, /share ,/comment with /embed and remove the querystring + url.gsub(%r{(/edit|/share|/comment).*}, '/embed') + end + + def dropbox(url) + uri = URI.parse(url) + query = CGI.parse(uri.query) + query.delete('dl') + query['raw'] = '1' + uri.query = query.to_query + uri.to_s + end + + def snap(url) + uri = URI.parse(url) + query = CGI.parse(uri.query) + username = query['username'][0] || query['user'][0] + project = query['projectname'][0] || query['project'][0] + "https://snap.berkeley.edu/embed?projectname=#{project}&username=#{username}&showTitle=true&showAuthor=true&editButton=true&pauseButton=true" + end +end diff --git a/spec/lib/embeddable_url_spec.rb b/spec/lib/embeddable_url_spec.rb new file mode 100644 index 000000000..3282d2dc6 --- /dev/null +++ b/spec/lib/embeddable_url_spec.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe EmbeddableURL do + describe '#iframe_url' do + it 'returns the original url if no transformations apply' do + url = 'https://example.com' + expect(EmbeddableURL.new(url).iframe_url).to eq url + end + + it 'returns the transformed url if a transformation applies' do + url = 'https://docs.google.com' + expect(EmbeddableURL.new(url).iframe_url).to include '/embed' + end + end +end From 28e751bd3cc108cf17bd40f5f2e695387cb61e32 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 24 Jul 2023 18:41:49 -0700 Subject: [PATCH 02/57] WIP Cleanup registrations datatable to show price+attendance --- app/datatables/registration_datatable.rb | 20 ++++++++++++++-- app/views/admin/registrations/index.html.haml | 23 ++++++++++++++----- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/app/datatables/registration_datatable.rb b/app/datatables/registration_datatable.rb index 1639ef422..7a6305ae2 100644 --- a/app/datatables/registration_datatable.rb +++ b/app/datatables/registration_datatable.rb @@ -5,6 +5,9 @@ class RegistrationDatatable < AjaxDatatablesRails::ActiveRecord def_delegator :@view, :dom_id def_delegator :@view, :edit_admin_conference_registration_path + # def_delegator :@view, :delete_admin_conference_registration_path + def_delegator :@view, :admin_conference_registration_toggle_attendance_path + def initialize(params, opts = {}) @view = opts[:view_context] @@ -17,6 +20,8 @@ def view_columns name: { source: 'User.name' }, email: { source: 'User.email' }, accepted_code_of_conduct: { source: 'Registration.accepted_code_of_conduct', searchable: false }, + attended: { source: 'Registration.attended', searchable: false }, + ticket_price: { source: 'TicketPurchase.amount_paid' }, ticket_type: { source: 'Ticket.title' }, actions: { source: 'Registration.id', searchable: false, orderable: false } } @@ -34,6 +39,14 @@ def conference_role_titles(record) end.compact end + def registration_ticket(record) + record.user.tickets.for_registration(conference) + end + + def registration_ticket_price(record) + record.user.ticket_purchases.where(ticket: registration_ticket(record)).first.amount_paid + end + def data records.map do |record| { @@ -42,15 +55,18 @@ def data roles: conference_role_titles(record.user), email: record.email, accepted_code_of_conduct: !!record.accepted_code_of_conduct, # rubocop:disable Style/DoubleNegation - ticket_type: record.user.tickets.where(conference: conference).pluck(:title), + ticket_type: registration_ticket(record).title, + ticket_price: registration_ticket_price(record), + attended: false, edit_url: edit_admin_conference_registration_path(conference, record), + # delete_url: delete_admin_conference_registration_path(conference, record), DT_RowId: dom_id(record) } end end def get_raw_records # rubocop:disable Naming/AccessorMethodName - conference.registrations.includes(user: %i[roles tickets]).references(:users, :roles).distinct + conference.registrations.includes(user: %i[roles tickets ticket_purchases]).references(:users, :roles).distinct end # override upstream santitation, which converts everything to strings diff --git a/app/views/admin/registrations/index.html.haml b/app/views/admin/registrations/index.html.haml index 45f66b232..f1fe910a6 100644 --- a/app/views/admin/registrations/index.html.haml +++ b/app/views/admin/registrations/index.html.haml @@ -28,8 +28,11 @@ %th{ width: '25%' } Name %th{ width: '0' } E-Mail %th{ width: '0' } Ticket Type - %th{ width: '0' } - %abbr{ title: 'Code of Conduct' } CoC + %th{ width: '0' } Price + %th{ width: '0' } Attended + - if @code_of_conduct + %th{ width: '0' } + %abbr{ title: 'Code of Conduct' } CoC %th{ width: '0' } Actions %tbody @@ -69,20 +72,28 @@ { "data": "ticket_type" }, + { + "data": "ticket_price", + "render": (data) => `$${data}` + }, + { + "data": "attended" + }, { "data": "accepted_code_of_conduct", "className": "code-of-conduct text-center", "searchable": false, + // TODO: conditionally hide }, { "data": "actions", "className": "actions", "searchable": false, "sortable": false, - "render": function (data, type, row, meta) { - return '
'+ - 'Edit'+ - '
'; + "render": (data, type, row, meta) => { + return `
+ Edit +
`; } } ] From 2d426d1ce467585e2cf97806a24498ce0c1af81d Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sat, 29 Jul 2023 10:41:06 -0700 Subject: [PATCH 03/57] Fix CoC visibility on reg page --- app/views/admin/registrations/index.html.haml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/views/admin/registrations/index.html.haml b/app/views/admin/registrations/index.html.haml index f1fe910a6..a73a814e5 100644 --- a/app/views/admin/registrations/index.html.haml +++ b/app/views/admin/registrations/index.html.haml @@ -30,9 +30,8 @@ %th{ width: '0' } Ticket Type %th{ width: '0' } Price %th{ width: '0' } Attended - - if @code_of_conduct - %th{ width: '0' } - %abbr{ title: 'Code of Conduct' } CoC + %th{ width: '0' } + %abbr{ title: 'Code of Conduct' } CoC %th{ width: '0' } Actions %tbody @@ -83,7 +82,7 @@ "data": "accepted_code_of_conduct", "className": "code-of-conduct text-center", "searchable": false, - // TODO: conditionally hide + "visible": codeOfConductPresent }, { "data": "actions", From ece1d7d8644ea5b73c7442d00cd06a6cf9d9b2a2 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sat, 29 Jul 2023 11:21:12 -0700 Subject: [PATCH 04/57] Registrations table refactoring complete, I think --- app/assets/javascripts/osem-switch.js | 4 +-- app/datatables/registration_datatable.rb | 3 +-- app/views/admin/registrations/index.html.haml | 26 ++++++++++++++----- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/osem-switch.js b/app/assets/javascripts/osem-switch.js index 5e8c47921..b4517c1cb 100644 --- a/app/assets/javascripts/osem-switch.js +++ b/app/assets/javascripts/osem-switch.js @@ -1,7 +1,5 @@ function checkboxSwitch(selector){ - $(selector).bootstrapSwitch( - - ); + $(selector).bootstrapSwitch(); $(selector).on('switchChange.bootstrapSwitch', function(event, state) { var url = $(this).attr('url') + state; diff --git a/app/datatables/registration_datatable.rb b/app/datatables/registration_datatable.rb index 7a6305ae2..f25d73fdc 100644 --- a/app/datatables/registration_datatable.rb +++ b/app/datatables/registration_datatable.rb @@ -57,9 +57,8 @@ def data accepted_code_of_conduct: !!record.accepted_code_of_conduct, # rubocop:disable Style/DoubleNegation ticket_type: registration_ticket(record).title, ticket_price: registration_ticket_price(record), - attended: false, + attended: record.attended?, edit_url: edit_admin_conference_registration_path(conference, record), - # delete_url: delete_admin_conference_registration_path(conference, record), DT_RowId: dom_id(record) } end diff --git a/app/views/admin/registrations/index.html.haml b/app/views/admin/registrations/index.html.haml index a73a814e5..4ddafe6dc 100644 --- a/app/views/admin/registrations/index.html.haml +++ b/app/views/admin/registrations/index.html.haml @@ -57,12 +57,12 @@ { "data": "name", "className": "truncate", - "render": function(data, type, row) { - var content = '' + data + '
'; - $.each(row.roles, function(index, role){ - content += ' ' + role + '' - }); - return content; + "render": (data, type, row) => { + return ` + ${data} +
+ ${row.roles.map(role => ` ${role}`)} + `; } }, { @@ -76,7 +76,19 @@ "render": (data) => `$${data}` }, { - "data": "attended" + "data": "attended", + "render": (data, _type, row) => { + let js_url = "#{toggle_attendance_admin_conference_registration_path(@conference.short_title, id: 'ROW_ID')}"; + return ` + + `; + } }, { "data": "accepted_code_of_conduct", From 6a05fd8747fc7564d10eadd182032e3e341e643d Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sat, 29 Jul 2023 11:37:06 -0700 Subject: [PATCH 05/57] I think the reg datatable is good now. :) --- app/views/admin/registrations/index.html.haml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/views/admin/registrations/index.html.haml b/app/views/admin/registrations/index.html.haml index 4ddafe6dc..c756e8dd2 100644 --- a/app/views/admin/registrations/index.html.haml +++ b/app/views/admin/registrations/index.html.haml @@ -73,13 +73,15 @@ }, { "data": "ticket_price", - "render": (data) => `$${data}` + "render": data => `$${data}` }, { "data": "attended", + "search": data => data, "render": (data, _type, row) => { let js_url = "#{toggle_attendance_admin_conference_registration_path(@conference.short_title, id: 'ROW_ID')}"; return ` + ${data} { + "render": (data, type, row) => { return ``; From 32144e4d1c564746d6b12b29a7d4c6874857b7ee Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 30 Jul 2023 14:45:02 -0700 Subject: [PATCH 06/57] use CSV to create a commercial/materials --- app/models/commercial.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/models/commercial.rb b/app/models/commercial.rb index a08a890e6..622739b13 100644 --- a/app/models/commercial.rb +++ b/app/models/commercial.rb @@ -48,18 +48,17 @@ def self.read_file(file) errors[:no_event] = [] errors[:validation_errors] = [] - file. - file.read.each_line do |line| - # Get the event id (text before :) - id = line.match(/:/).pre_match.to_i - # Get the commercial url (text after :) - url = line.match(/:/).post_match + # parse file as a CSV with a header of id, title, url + CSV.parse(file, headers: true) do |row| + id = row['id'].to_i + title = row['title'] + url = row['url'] event = Event.find_by(id: id) # Go to next event, if the event is not found (errors[:no_event] << id) && next unless event - commercial = event.commercials.new(url: url) + commercial = event.commercials.new(url: url, title: title) unless commercial.save errors[:validation_errors] << ("Could not create materials for event with ID #{event.id} (" + commercial.errors.full_messages.to_sentence + ')') end From 1134f16401bf090b5026177ae14cb74dba14a129 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 13 Aug 2023 15:24:51 -0700 Subject: [PATCH 07/57] Refactor embedding slides, etc --- app/lib/embeddable_url.rb | 71 +++++++++++++++++++++++++++++++++ app/models/commercial.rb | 17 ++------ lib/embeddable_url.rb | 42 ------------------- spec/lib/embeddable_url_spec.rb | 20 ++++++++-- 4 files changed, 91 insertions(+), 59 deletions(-) create mode 100644 app/lib/embeddable_url.rb delete mode 100644 lib/embeddable_url.rb diff --git a/app/lib/embeddable_url.rb b/app/lib/embeddable_url.rb new file mode 100644 index 000000000..7dc8a992c --- /dev/null +++ b/app/lib/embeddable_url.rb @@ -0,0 +1,71 @@ +# Transform a URL to a version that allows iframes + +class EmbeddableURL + attr_accessor :url + + DEFAULT_FRAME_ATTRS = 'width=560 height=315 frameborder=0 allowfullscreen'.freeze + + TRANSFORMATIONS = { + /snap\.berkeley\.edu/ => :snap, + /docs\.google\.com/ => :google_docs, + /dropbox\.com/ => :dropbox + }.freeze + + def initialize(url) + self.url = url + end + + def render_embed + return render_dropbox if url.match?(/dropbox\.com/) + + "" + end + + def iframe_url + TRANSFORMATIONS.each do |regex, fn| + return send(fn, url) if url.match?(regex) + end + url + end + + # TODO: Consider adjusting the id / loading if > 1 dropbox embed per page. + def render_dropbox + <<~HTML +
+ + +
+ HTML + end + + private + + def optional_params + return '' unless url.match?(/snap\.berkeley/) + + 'allow="geolocation;microphone;camera"' + end + + def google_docs(url) + # replace /edit, /share, /comment with /embed and remove the querystring + url.gsub(%r{(/edit|/share|/comment).*}, '/embed') + end + + def dropbox(url) + uri = URI.parse(url) + query = CGI.parse(uri.query) + query.delete('dl') + query['raw'] = '1' + uri.query = query.to_query + uri.to_s + end + + def snap(url) + uri = URI.parse(url) + query = CGI.parse(uri.query) + username = query['username'][0] || query['user'][0] + project = query['projectname'][0] || query['project'][0] + "https://snap.berkeley.edu/embed?projectname=#{project}&username=#{username}&showTitle=true&showAuthor=true&editButton=true&pauseButton=true" + end +end diff --git a/app/models/commercial.rb b/app/models/commercial.rb index 622739b13..b027354b1 100644 --- a/app/models/commercial.rb +++ b/app/models/commercial.rb @@ -16,6 +16,7 @@ # class Commercial < ApplicationRecord require 'oembed' + require_relative '../lib/embeddable_url' belongs_to :commercialable, polymorphic: true, touch: true @@ -32,16 +33,11 @@ def self.render_from_url(url) resource = OEmbed::Providers.get(url, maxwidth: 560, maxheight: 315) { html: resource.html.html_safe } rescue StandardError - { html: iframe_fallback(url) } + { html: EmbeddableURL.new(url).render_embed.html_safe } # { error: exception.message } end end - def self.iframe_fallback(url) - url = EmbeddableURL.new(url).iframe_url - "".html_safe - end - def self.read_file(file) require 'csv' errors = {} @@ -60,7 +56,8 @@ def self.read_file(file) commercial = event.commercials.new(url: url, title: title) unless commercial.save - errors[:validation_errors] << ("Could not create materials for event with ID #{event.id} (" + commercial.errors.full_messages.to_sentence + ')') + errors[:validation_errors] << + "Could not create materials for event with ID #{event.id} (#{commercial.errors.full_messages.to_sentence})" end end errors @@ -68,12 +65,6 @@ def self.read_file(file) private - def optional_params - return '' unless self.url.match(%r{snap.berkeley}) - - 'allow="geolocation;microphone;camera"' - end - def valid_url result = Commercial.render_from_url(url) errors.add(:base, result[:error]) if result[:error] diff --git a/lib/embeddable_url.rb b/lib/embeddable_url.rb deleted file mode 100644 index 0a4872bc5..000000000 --- a/lib/embeddable_url.rb +++ /dev/null @@ -1,42 +0,0 @@ -# Transform a URL to a version that allows iframes - -class EmbeddableURL - attr_accessor :url - - TRANSFORMATIONS = { - /snap\.berkeley\.edu/ => snap, - /docs\.google\.com/ => google_docs, - /dropbox\.com/ => dropbox - }.freeze - - def iframe_url - TRANSFORMATIONS.each do |regex, fn| - return fn.call(url) if url.match?(regex) - end - url - end - - private - - def google_docs(url) - # replace /edit, /share ,/comment with /embed and remove the querystring - url.gsub(%r{(/edit|/share|/comment).*}, '/embed') - end - - def dropbox(url) - uri = URI.parse(url) - query = CGI.parse(uri.query) - query.delete('dl') - query['raw'] = '1' - uri.query = query.to_query - uri.to_s - end - - def snap(url) - uri = URI.parse(url) - query = CGI.parse(uri.query) - username = query['username'][0] || query['user'][0] - project = query['projectname'][0] || query['project'][0] - "https://snap.berkeley.edu/embed?projectname=#{project}&username=#{username}&showTitle=true&showAuthor=true&editButton=true&pauseButton=true" - end -end diff --git a/spec/lib/embeddable_url_spec.rb b/spec/lib/embeddable_url_spec.rb index 3282d2dc6..1e4f3f81c 100644 --- a/spec/lib/embeddable_url_spec.rb +++ b/spec/lib/embeddable_url_spec.rb @@ -9,9 +9,21 @@ expect(EmbeddableURL.new(url).iframe_url).to eq url end - it 'returns the transformed url if a transformation applies' do - url = 'https://docs.google.com' - expect(EmbeddableURL.new(url).iframe_url).to include '/embed' + it 'transforms a Google Drive URL' do + url = EmbeddableURL.new('https://docs.google.com/presentation/d/1eGbEQtcOPW2N2P5rKfBVfSo2zn4C307Sh6C7vpJsruE/edit#slide=id.g1088c029399_0_47').iframe_url + expect(url).to include '/embed' + expect(url).to_not include('/edit') end - end + + it 'transforms a Dropbox URL' do + url = EmbeddableURL.new('https://www.dropbox.com/scl/fi/49gkp6ghfnxgqex64zvzd/Guzdial-SnapCon23.pdf?rlkey=ecwvmcmfscqtwfq21l3kzqcul&dl=1').iframe_url + expect(url).to include('raw=1') + expect(url).to_not include('dl=') + end + + it 'transforms a Snap! Project URL' do + url = EmbeddableURL.new('').iframe_url + expect(url).to include('/embed') + end + end From 48a6292418f1bf29695464b3701592f18b4b85b9 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 13 Aug 2023 15:39:37 -0700 Subject: [PATCH 08/57] Move embeddable_url to services --- app/models/commercial.rb | 2 +- app/{lib => services}/embeddable_url.rb | 4 ++-- spec/{lib => services}/embeddable_url_spec.rb | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename app/{lib => services}/embeddable_url.rb (97%) rename spec/{lib => services}/embeddable_url_spec.rb (80%) diff --git a/app/models/commercial.rb b/app/models/commercial.rb index b027354b1..47a45755b 100644 --- a/app/models/commercial.rb +++ b/app/models/commercial.rb @@ -16,7 +16,7 @@ # class Commercial < ApplicationRecord require 'oembed' - require_relative '../lib/embeddable_url' + # require_relative '../lib/embeddable_url' belongs_to :commercialable, polymorphic: true, touch: true diff --git a/app/lib/embeddable_url.rb b/app/services/embeddable_url.rb similarity index 97% rename from app/lib/embeddable_url.rb rename to app/services/embeddable_url.rb index 7dc8a992c..6e4ed3830 100644 --- a/app/lib/embeddable_url.rb +++ b/app/services/embeddable_url.rb @@ -55,8 +55,8 @@ def google_docs(url) def dropbox(url) uri = URI.parse(url) query = CGI.parse(uri.query) - query.delete('dl') - query['raw'] = '1' + query.delete('raw') + query['dl'] = '0' uri.query = query.to_query uri.to_s end diff --git a/spec/lib/embeddable_url_spec.rb b/spec/services/embeddable_url_spec.rb similarity index 80% rename from spec/lib/embeddable_url_spec.rb rename to spec/services/embeddable_url_spec.rb index 1e4f3f81c..d9dcb6f1a 100644 --- a/spec/lib/embeddable_url_spec.rb +++ b/spec/services/embeddable_url_spec.rb @@ -17,12 +17,12 @@ it 'transforms a Dropbox URL' do url = EmbeddableURL.new('https://www.dropbox.com/scl/fi/49gkp6ghfnxgqex64zvzd/Guzdial-SnapCon23.pdf?rlkey=ecwvmcmfscqtwfq21l3kzqcul&dl=1').iframe_url - expect(url).to include('raw=1') - expect(url).to_not include('dl=') + expect(url).to include('dl=0') + expect(url).to_not include('raw=') end it 'transforms a Snap! Project URL' do - url = EmbeddableURL.new('').iframe_url + url = EmbeddableURL.new('https://snap.berkeley.edu/project?username=jedi_force&projectname=Autograder%2dlite').iframe_url expect(url).to include('/embed') end From 89c1e1bd56ff5daf70109e71068fd613880519fa Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 13 Aug 2023 15:47:50 -0700 Subject: [PATCH 09/57] Class autoloads as EmbeddableURL now, Dropbox works, but function is broken... --- app/models/commercial.rb | 1 - app/services/embeddable_url.rb | 2 +- config/initializers/inflections.rb | 6 +++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/models/commercial.rb b/app/models/commercial.rb index 47a45755b..7b67cd5d5 100644 --- a/app/models/commercial.rb +++ b/app/models/commercial.rb @@ -16,7 +16,6 @@ # class Commercial < ApplicationRecord require 'oembed' - # require_relative '../lib/embeddable_url' belongs_to :commercialable, polymorphic: true, touch: true diff --git a/app/services/embeddable_url.rb b/app/services/embeddable_url.rb index 6e4ed3830..9d5a520ca 100644 --- a/app/services/embeddable_url.rb +++ b/app/services/embeddable_url.rb @@ -33,7 +33,7 @@ def render_dropbox <<~HTML
-
HTML diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index ac033bf9d..90ac51ca2 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -11,6 +11,6 @@ # end # These inflection rules are supported but not enabled by default: -# ActiveSupport::Inflector.inflections(:en) do |inflect| -# inflect.acronym 'RESTful' -# end +ActiveSupport::Inflector.inflections(:en) do |inflect| + inflect.acronym 'URL' +end From 20cc01852392bd5631e482556816aba214d9f7a5 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 13 Aug 2023 18:03:56 -0700 Subject: [PATCH 10/57] Attempt to fix dropbox URL generation --- app/services/embeddable_url.rb | 12 +++++++----- config/puma.rb | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/services/embeddable_url.rb b/app/services/embeddable_url.rb index 9d5a520ca..396e26f07 100644 --- a/app/services/embeddable_url.rb +++ b/app/services/embeddable_url.rb @@ -33,7 +33,7 @@ def render_dropbox <<~HTML
-
HTML @@ -53,11 +53,13 @@ def google_docs(url) end def dropbox(url) + # debugger uri = URI.parse(url) - query = CGI.parse(uri.query) - query.delete('raw') - query['dl'] = '0' - uri.query = query.to_query + params = URI.decode_www_form(uri.query) + params.delete('raw') + params['dl'] = '0' + # params['rlkey'] = params['rlkey'] + uri.query = params uri.to_s end diff --git a/config/puma.rb b/config/puma.rb index 35d73834e..c401d6fc2 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -25,12 +25,13 @@ # processes). # workers ENV.fetch('WEB_CONCURRENCY') { 2 } +# Set a 10 minute timeout in development for debugging. +worker_timeout 60 * 60 * 10 if ENV.fetch('RAILS_ENV') == 'development' # Use the `preload_app!` method when specifying a `workers` number. # This directive tells Puma to first boot the application and load code # before forking the application. This takes advantage of Copy On Write # process behavior so workers use less memory. -# preload_app! lowlevel_error_handler do |ex, env| From e82d13094c643961fc56ec5778b94a7c5b313c32 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 14 Aug 2023 02:06:13 -0700 Subject: [PATCH 11/57] fix messup in spec file --- spec/services/embeddable_url_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/services/embeddable_url_spec.rb b/spec/services/embeddable_url_spec.rb index d9dcb6f1a..5e54fbc88 100644 --- a/spec/services/embeddable_url_spec.rb +++ b/spec/services/embeddable_url_spec.rb @@ -25,5 +25,5 @@ url = EmbeddableURL.new('https://snap.berkeley.edu/project?username=jedi_force&projectname=Autograder%2dlite').iframe_url expect(url).to include('/embed') end - + end end From 4c83a217d3744a0a393e7536576127ebc405c1e0 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 14 Aug 2023 02:09:22 -0700 Subject: [PATCH 12/57] delete spec which leads to warning about being ineffective --- spec/models/track_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/models/track_spec.rb b/spec/models/track_spec.rb index 7c8df641a..a054de04b 100644 --- a/spec/models/track_spec.rb +++ b/spec/models/track_spec.rb @@ -61,8 +61,6 @@ withdrawn]) } - it { is_expected.to validate_inclusion_of(:cfp_active).in_array([true, false]) } - context 'when self_organized_and_accepted_or_confirmed? returns true' do before do allow(subject).to receive(:self_organized_and_accepted_or_confirmed?).and_return(true) From 01865c526052552638363f033e9eb0f4b6220bb3 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 7 Nov 2023 11:52:20 -0800 Subject: [PATCH 13/57] safer ics categories... --- app/helpers/conference_helper.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/helpers/conference_helper.rb b/app/helpers/conference_helper.rb index d393b6099..3a2c3a136 100644 --- a/app/helpers/conference_helper.rb +++ b/app/helpers/conference_helper.rb @@ -55,8 +55,9 @@ def icalendar_proposals(calendar, proposals, conference) location += "#{v.country_name}, " if v.country_name e.location = location end - e.categories = conference.title, "Difficulty: #{proposal.difficulty_level.title}", - "Track: #{proposal.track.name}" + e.categories = conference.title + e.categories << "Difficulty: #{proposal.difficulty_level.title}" if proposal.difficulty_level.present? + e.categories << "Track: #{proposal.track.name}" if proposal.track.present? end end calendar From d712445453360a48c8d087c59c6b3c50514d3e2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 01:52:37 +0000 Subject: [PATCH 14/57] Bump the bundler group group with 2 updates Bumps the bundler group group with 2 updates: [rails](https://github.com/rails/rails) and [rack](https://github.com/rack/rack). Updates `rails` from 7.0.8 to 7.0.8.1 - [Release notes](https://github.com/rails/rails/releases) - [Commits](https://github.com/rails/rails/compare/v7.0.8...v7.0.8.1) Updates `rack` from 2.2.8 to 2.2.8.1 - [Release notes](https://github.com/rack/rack/releases) - [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md) - [Commits](https://github.com/rack/rack/compare/v2.2.8...v2.2.8.1) --- updated-dependencies: - dependency-name: rails dependency-type: direct:production dependency-group: bundler-security-group - dependency-name: rack dependency-type: indirect dependency-group: bundler-security-group ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 112 +++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e1534953f..576e11285 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -35,47 +35,47 @@ GEM remote: https://rubygems.org/ specs: Ascii85 (1.1.0) - actioncable (7.0.8) - actionpack (= 7.0.8) - activesupport (= 7.0.8) + actioncable (7.0.8.1) + actionpack (= 7.0.8.1) + activesupport (= 7.0.8.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8) - actionpack (= 7.0.8) - activejob (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) + actionmailbox (7.0.8.1) + actionpack (= 7.0.8.1) + activejob (= 7.0.8.1) + activerecord (= 7.0.8.1) + activestorage (= 7.0.8.1) + activesupport (= 7.0.8.1) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.8) - actionpack (= 7.0.8) - actionview (= 7.0.8) - activejob (= 7.0.8) - activesupport (= 7.0.8) + actionmailer (7.0.8.1) + actionpack (= 7.0.8.1) + actionview (= 7.0.8.1) + activejob (= 7.0.8.1) + activesupport (= 7.0.8.1) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.8) - actionview (= 7.0.8) - activesupport (= 7.0.8) + actionpack (7.0.8.1) + actionview (= 7.0.8.1) + activesupport (= 7.0.8.1) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8) - actionpack (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) + actiontext (7.0.8.1) + actionpack (= 7.0.8.1) + activerecord (= 7.0.8.1) + activestorage (= 7.0.8.1) + activesupport (= 7.0.8.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8) - activesupport (= 7.0.8) + actionview (7.0.8.1) + activesupport (= 7.0.8.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -85,22 +85,22 @@ GEM activemodel (>= 4.1, < 7.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.0.8) - activesupport (= 7.0.8) + activejob (7.0.8.1) + activesupport (= 7.0.8.1) globalid (>= 0.3.6) - activemodel (7.0.8) - activesupport (= 7.0.8) - activerecord (7.0.8) - activemodel (= 7.0.8) - activesupport (= 7.0.8) - activestorage (7.0.8) - actionpack (= 7.0.8) - activejob (= 7.0.8) - activerecord (= 7.0.8) - activesupport (= 7.0.8) + activemodel (7.0.8.1) + activesupport (= 7.0.8.1) + activerecord (7.0.8.1) + activemodel (= 7.0.8.1) + activesupport (= 7.0.8.1) + activestorage (7.0.8.1) + actionpack (= 7.0.8.1) + activejob (= 7.0.8.1) + activerecord (= 7.0.8.1) + activesupport (= 7.0.8.1) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.8) + activesupport (7.0.8.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -363,7 +363,7 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.3) matrix (0.4.2) method_source (1.0.0) mime-types (3.4.1) @@ -489,7 +489,7 @@ GEM puma (6.4.2) nio4r (~> 2.0) racc (1.7.3) - rack (2.2.8) + rack (2.2.8.1) rack-openid (1.4.2) rack (>= 1.1.0) ruby-openid (>= 2.1.8) @@ -497,20 +497,20 @@ GEM rack rack-test (2.1.0) rack (>= 1.3) - rails (7.0.8) - actioncable (= 7.0.8) - actionmailbox (= 7.0.8) - actionmailer (= 7.0.8) - actionpack (= 7.0.8) - actiontext (= 7.0.8) - actionview (= 7.0.8) - activejob (= 7.0.8) - activemodel (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) + rails (7.0.8.1) + actioncable (= 7.0.8.1) + actionmailbox (= 7.0.8.1) + actionmailer (= 7.0.8.1) + actionpack (= 7.0.8.1) + actiontext (= 7.0.8.1) + actionview (= 7.0.8.1) + activejob (= 7.0.8.1) + activemodel (= 7.0.8.1) + activerecord (= 7.0.8.1) + activestorage (= 7.0.8.1) + activesupport (= 7.0.8.1) bundler (>= 1.15.0) - railties (= 7.0.8) + railties (= 7.0.8.1) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -525,9 +525,9 @@ GEM rails-i18n (7.0.7) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.8) - actionpack (= 7.0.8) - activesupport (= 7.0.8) + railties (7.0.8.1) + actionpack (= 7.0.8.1) + activesupport (= 7.0.8.1) method_source rake (>= 12.2) thor (~> 1.0) @@ -672,7 +672,7 @@ GEM temple (0.10.1) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - thor (1.3.0) + thor (1.3.1) tilt (2.1.0) timecop (0.9.6) timeout (0.4.1) From 51a903f8774283982477c8404d320d51762de942 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Mar 2024 00:13:39 +0000 Subject: [PATCH 15/57] Bump the bundler group group with 1 update Bumps the bundler group group with 1 update: [rack](https://github.com/rack/rack). Updates `rack` from 2.2.8 to 2.2.8.1 - [Release notes](https://github.com/rack/rack/releases) - [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md) - [Commits](https://github.com/rack/rack/compare/v2.2.8...v2.2.8.1) --- updated-dependencies: - dependency-name: rack dependency-type: indirect dependency-group: bundler-security-group ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e1534953f..dc201c62d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -489,7 +489,7 @@ GEM puma (6.4.2) nio4r (~> 2.0) racc (1.7.3) - rack (2.2.8) + rack (2.2.8.1) rack-openid (1.4.2) rack (>= 1.1.0) ruby-openid (>= 2.1.8) From 60395e30cbf378bcdd16d385be0ad64fead9455e Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:51:30 +0000 Subject: [PATCH 16/57] Update nokogiri to version 1.16.2 --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 21f27da98..c8c1193a3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -312,7 +312,7 @@ GEM rake mini_magick (4.12.0) mini_mime (1.1.2) - mini_portile2 (2.8.4) + mini_portile2 (2.8.5) minitest (5.18.1) momentjs-rails (2.29.4.1) railties (>= 3.1) @@ -341,7 +341,7 @@ GEM next_rails (1.2.4) colorize (>= 0.8.1) nio4r (2.5.9) - nokogiri (1.15.3) + nokogiri (1.16.2) mini_portile2 (~> 2.8.2) racc (~> 1.4) oauth2 (2.0.9) @@ -407,7 +407,7 @@ GEM public_suffix (5.0.1) puma (6.2.2) nio4r (~> 2.0) - racc (1.7.1) + racc (1.7.3) rack (2.2.7) rack-openid (1.4.2) rack (>= 1.1.0) From 4dead61399e76db3f1f5ab75ac0106b26ab6e101 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:01:40 +0000 Subject: [PATCH 17/57] Update rack to version 2.2.8.1 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c8c1193a3..a30276f11 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -408,7 +408,7 @@ GEM puma (6.2.2) nio4r (~> 2.0) racc (1.7.3) - rack (2.2.7) + rack (2.2.8.1) rack-openid (1.4.2) rack (>= 1.1.0) ruby-openid (>= 2.1.8) From ef4ee83f13933c0bc9c6b15615910ab8349cc687 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:02:08 +0000 Subject: [PATCH 18/57] Update carrierwave to version 2.2.5 --- Gemfile.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index c8c1193a3..c6b17daff 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -102,7 +102,7 @@ GEM awesome_nested_set (>= 3.0) acts_as_list (1.1.0) activerecord (>= 4.2) - addressable (2.8.4) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) afm (0.2.2) ajax-datatables-rails (1.4.0) @@ -136,7 +136,7 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - carrierwave (2.2.4) + carrierwave (2.2.5) activemodel (>= 5.0.0) activesupport (>= 5.0.0) addressable (~> 2.6) @@ -167,7 +167,7 @@ GEM rest-client (>= 2.0.0) cocoon (1.2.15) colorize (0.8.1) - concurrent-ruby (1.2.2) + concurrent-ruby (1.2.3) countable-rails (0.0.1) railties (>= 3.1) crack (0.4.5) @@ -219,7 +219,7 @@ GEM faraday-net_http (3.0.2) fastimage (2.2.7) feature (1.4.0) - ffi (1.15.5) + ffi (1.16.3) font-awesome-sass (6.4.0) sassc (~> 2.0) geckodriver-helper (0.24.0) @@ -301,7 +301,7 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.4) matrix (0.4.2) method_source (1.0.0) mime-types (3.4.1) @@ -311,9 +311,9 @@ GEM open4 (~> 1.3.4) rake mini_magick (4.12.0) - mini_mime (1.1.2) + mini_mime (1.1.5) mini_portile2 (2.8.5) - minitest (5.18.1) + minitest (5.22.2) momentjs-rails (2.29.4.1) railties (>= 3.1) monetize (1.12.0) @@ -404,7 +404,7 @@ GEM prawn-table prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) - public_suffix (5.0.1) + public_suffix (5.0.4) puma (6.2.2) nio4r (~> 2.0) racc (1.7.3) @@ -519,7 +519,7 @@ GEM ruby-openid (2.9.2) ruby-progressbar (1.13.0) ruby-rc4 (0.1.5) - ruby-vips (2.1.4) + ruby-vips (2.2.1) ffi (~> 1.12) ruby2_keywords (0.0.5) rubyzip (2.3.2) @@ -569,7 +569,7 @@ GEM sprockets (>= 3.0.0) sqlite3 (1.6.3) mini_portile2 (~> 2.8.0) - ssrf_filter (1.1.1) + ssrf_filter (1.1.2) stripe (5.53.0) stripe-ruby-mock (3.1.0.rc3) dante (>= 0.2.0) From 74c2551ed858329c2fec033c5095c9a32de14b7a Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:49:23 +0000 Subject: [PATCH 19/57] Update rubocop-rspec to version 2.23.0 --- .rubocop.yml | 1 + .rubocop_todo.yml | 127 +++++++++++++++++++++++++++++++++++----------- Gemfile.lock | 30 ++++++----- 3 files changed, 115 insertions(+), 43 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index c8635706b..e6c0a8538 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,6 +3,7 @@ require: - rubocop-rails - rubocop-capybara - rubocop-performance + - rubocop-factory_bot inherit_from: .rubocop_todo.yml diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 1f07e324b..7e343ea1b 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2023-05-08 16:19:23 UTC using RuboCop version 1.50.2. +# on 2024-03-04 16:04:49 UTC using RuboCop version 1.61.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -14,6 +14,12 @@ Bundler/OrderedGems: Exclude: - 'Gemfile' +# Offense count: 161 +# Configuration parameters: EnforcedStyle. +# SupportedStyles: link_or_button, strict +Capybara/ClickLinkOrButtonStyle: + Enabled: false + # Offense count: 350 # This cop supports safe autocorrection (--autocorrect). Capybara/CurrentPathExpectation: @@ -31,13 +37,27 @@ Capybara/CurrentPathExpectation: - 'spec/features/track_organizer_ability_spec.rb' - 'spec/features/user_ability_spec.rb' -# Offense count: 1 +# Offense count: 3 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: have_no, not_to Capybara/NegationMatcher: Exclude: - - 'spec/features/versions_spec.rb' + - 'spec/features/code_of_conduct_spec.rb' + +# Offense count: 14 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: DefaultSelector. +Capybara/RSpec/HaveSelector: + Exclude: + - 'spec/features/cfp_ability_spec.rb' + - 'spec/features/info_desk_ability_spec.rb' + - 'spec/features/organization_admin_ability_spec.rb' + - 'spec/features/organizer_ability_spec.rb' + - 'spec/features/proposals_spec.rb' + - 'spec/features/sponsor_spec.rb' + - 'spec/features/track_organizer_ability_spec.rb' + - 'spec/features/voting_spec.rb' # Offense count: 82 # This cop supports safe autocorrection (--autocorrect). @@ -49,6 +69,40 @@ Capybara/SpecificMatcher: Exclude: - 'spec/features/sponsor_spec.rb' +# Offense count: 7 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, NonImplicitAssociationMethodNames. +# SupportedStyles: explicit, implicit +FactoryBot/AssociationStyle: + Exclude: + - 'spec/factories/comments.rb' + - 'spec/factories/commercials.rb' + - 'spec/factories/conferences.rb' + - 'spec/factories/surveys.rb' + - 'spec/factories/tracks.rb' + +# Offense count: 12 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: Include, EnforcedStyle, ExplicitOnly. +# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb +# SupportedStyles: require_parentheses, omit_parentheses +FactoryBot/ConsistentParenthesesStyle: + Exclude: + - 'spec/controllers/proposals_controller_spec.rb' + - 'spec/features/proposals_spec.rb' + - 'spec/features/roles_spec.rb' + - 'spec/features/surveys_spec.rb' + - 'spec/models/resource_spec.rb' + - 'spec/models/ticket_spec.rb' + +# Offense count: 3 +# Configuration parameters: Include. +# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb +FactoryBot/FactoryAssociationWithStrategy: + Exclude: + - 'spec/factories/booths.rb' + - 'spec/factories/users.rb' + # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: IndentationWidth. @@ -283,8 +337,9 @@ Layout/SpaceAroundMethodCallOperator: # Offense count: 2 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator. +# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator, EnforcedStyleForRationalLiterals. # SupportedStylesForExponentOperator: space, no_space +# SupportedStylesForRationalLiterals: space, no_space Layout/SpaceAroundOperators: Exclude: - 'app/views/admin/events/_all_with_comments.xlsx.axlsx' @@ -393,6 +448,7 @@ Layout/TrailingEmptyLines: - 'lib/tasks/roles.rake' # Offense count: 13 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowedMethods, AllowedPatterns. Lint/AmbiguousBlockAssociation: Exclude: @@ -456,14 +512,14 @@ Lint/RedundantCopDisableDirective: # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments. +# Configuration parameters: AutoCorrect, IgnoreEmptyBlocks, AllowUnusedKeywordArguments. Lint/UnusedBlockArgument: Exclude: - 'lib/tasks/user.rake' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods. +# Configuration parameters: AutoCorrect, AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods. Lint/UnusedMethodArgument: Exclude: - 'config/initializers/fuckups.rb' @@ -746,19 +802,6 @@ RSpec/ExpectChange: - 'spec/models/event_spec.rb' - 'spec/models/user_spec.rb' -# Offense count: 12 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: require_parentheses, omit_parentheses -RSpec/FactoryBot/ConsistentParenthesesStyle: - Exclude: - - 'spec/controllers/proposals_controller_spec.rb' - - 'spec/features/proposals_spec.rb' - - 'spec/features/roles_spec.rb' - - 'spec/features/surveys_spec.rb' - - 'spec/models/resource_spec.rb' - - 'spec/models/ticket_spec.rb' - # Offense count: 9 # Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly. # Include: **/*_spec*rb*, **/spec/**/* @@ -825,7 +868,7 @@ RSpec/ImplicitSubject: - 'spec/models/ticket_spec.rb' # Offense count: 19 -# Configuration parameters: Max. +# Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns. RSpec/IndexedLet: Exclude: - 'spec/controllers/admin/reports_controller_spec.rb' @@ -962,6 +1005,12 @@ RSpec/Rails/InferredSpecType: - 'spec/helpers/users_helper_spec.rb' - 'spec/routing/routing_spec.rb' +# Offense count: 12 +# This cop supports safe autocorrection (--autocorrect). +RSpec/ReceiveMessages: + Exclude: + - 'spec/models/track_spec.rb' + # Offense count: 4 RSpec/RepeatedDescription: Exclude: @@ -1417,6 +1466,14 @@ Security/Open: Exclude: - 'app/pdfs/ticket_pdf.rb' +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: separated, grouped +Style/AccessorGrouping: + Exclude: + - 'app/models/payment.rb' + # Offense count: 3 # This cop supports unsafe autocorrection (--autocorrect-all). Style/ArrayIntersect: @@ -1447,6 +1504,7 @@ Style/ColonMethodCall: - 'app/models/contact.rb' # Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). Style/CombinableLoops: Exclude: - 'db/migrate/20140820093735_migrating_supporter_registrations_to_ticket_users.rb' @@ -1489,7 +1547,7 @@ Style/EmptyLiteral: # Offense count: 7 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. +# Configuration parameters: AutoCorrect, EnforcedStyle. # SupportedStyles: compact, expanded Style/EmptyMethod: Exclude: @@ -1543,7 +1601,7 @@ Style/HashAsLastArrayItem: - 'app/models/user.rb' # Offense count: 5 -# This cop supports safe autocorrection (--autocorrect). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: AllowSplatArgument. Style/HashConversion: Exclude: @@ -1743,7 +1801,7 @@ Style/PreferredHashMethods: - 'lib/tasks/migrate_config.rake' # Offense count: 6 -# This cop supports safe autocorrection (--autocorrect). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: AllowedCompactTypes. # SupportedStyles: compact, exploded Style/RaiseArgs: @@ -1784,17 +1842,24 @@ Style/RedundantFetchBlock: - 'config/puma.rb' # Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -Style/RedundantParentheses: +# This cop supports unsafe autocorrection (--autocorrect-all). +Style/RedundantFilterChain: Exclude: - - 'app/controllers/admin/base_controller.rb' + - 'app/models/program.rb' -# Offense count: 6 +# Offense count: 12 # This cop supports safe autocorrection (--autocorrect). -Style/RedundantRegexpEscape: +Style/RedundantParentheses: Exclude: - - 'spec/models/room_spec.rb' - - 'spec/models/user_spec.rb' + - 'app/controllers/admin/base_controller.rb' + - 'app/controllers/application_controller.rb' + - 'app/helpers/application_helper.rb' + - 'app/helpers/format_helper.rb' + - 'app/models/admin_ability.rb' + - 'app/models/conference.rb' + - 'app/models/program.rb' + - 'app/models/venue.rb' + - 'lib/tasks/version.rake' # Offense count: 3 # This cop supports safe autocorrection (--autocorrect). @@ -1919,7 +1984,7 @@ Style/TrailingCommaInHashLiteral: - 'db/migrate/20140701123203_add_events_per_week_to_conference.rb' - 'spec/models/conference_spec.rb' -# Offense count: 3 +# Offense count: 4 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: WordRegex. # SupportedStyles: percent, brackets diff --git a/Gemfile.lock b/Gemfile.lock index 21f27da98..21acba9ab 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -272,11 +272,12 @@ GEM thor (>= 0.14, < 2.0) jquery-ui-rails (6.0.1) railties (>= 3.2.16) - json (2.6.3) + json (2.7.1) json-schema (4.0.0) addressable (>= 2.8) jsonapi-renderer (0.2.2) jwt (2.7.1) + language_server-protocol (3.17.0.3) launchy (2.5.2) addressable (~> 2.8) leaflet-rails (1.9.3) @@ -379,9 +380,10 @@ GEM paper_trail (12.3.0) activerecord (>= 5.2) request_store (~> 1.1) - parallel (1.23.0) - parser (3.2.2.1) + parallel (1.24.0) + parser (3.3.0.5) ast (~> 2.4.1) + racc pdf-core (0.9.0) pdf-inspector (1.3.0) pdf-reader (>= 1.0, < 3.0.a) @@ -453,7 +455,7 @@ GEM rake (13.0.6) recaptcha (5.14.0) redcarpet (3.6.0) - regexp_parser (2.8.1) + regexp_parser (2.9.0) request_store (1.5.1) rack (>= 1.4) responders (3.1.0) @@ -491,19 +493,22 @@ GEM rspec-mocks (~> 3.12) rspec-support (~> 3.12) rspec-support (3.12.0) - rubocop (1.51.0) + rubocop (1.61.0) json (~> 2.3) + language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.2.0.0) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.28.0, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.28.1) - parser (>= 3.2.1.0) - rubocop-capybara (2.18.0) + rubocop-ast (1.31.1) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-factory_bot (2.25.1) rubocop (~> 1.41) rubocop-performance (1.17.1) rubocop (>= 1.7.0, < 2.0) @@ -512,9 +517,10 @@ GEM activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) - rubocop-rspec (2.20.0) + rubocop-rspec (2.23.0) rubocop (~> 1.33) rubocop-capybara (~> 2.17) + rubocop-factory_bot (~> 2.22) ruby-oembed (0.16.1) ruby-openid (2.9.2) ruby-progressbar (1.13.0) @@ -593,7 +599,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) - unicode-display_width (2.4.2) + unicode-display_width (2.5.0) unobtrusive_flash (3.3.1) railties version_gem (1.1.2) From d440b7029185f4086b16234d95d9b4c52c175f5a Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Mon, 4 Mar 2024 17:39:58 +0100 Subject: [PATCH 20/57] Update rails to 7.0.8.1 --- Gemfile.lock | 122 +++++++++++++++++++++++++-------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6f8473c0c..76ca425a9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -26,47 +26,47 @@ GEM remote: https://rubygems.org/ specs: Ascii85 (1.1.0) - actioncable (7.0.4.3) - actionpack (= 7.0.4.3) - activesupport (= 7.0.4.3) + actioncable (7.0.8.1) + actionpack (= 7.0.8.1) + activesupport (= 7.0.8.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.4.3) - actionpack (= 7.0.4.3) - activejob (= 7.0.4.3) - activerecord (= 7.0.4.3) - activestorage (= 7.0.4.3) - activesupport (= 7.0.4.3) + actionmailbox (7.0.8.1) + actionpack (= 7.0.8.1) + activejob (= 7.0.8.1) + activerecord (= 7.0.8.1) + activestorage (= 7.0.8.1) + activesupport (= 7.0.8.1) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.4.3) - actionpack (= 7.0.4.3) - actionview (= 7.0.4.3) - activejob (= 7.0.4.3) - activesupport (= 7.0.4.3) + actionmailer (7.0.8.1) + actionpack (= 7.0.8.1) + actionview (= 7.0.8.1) + activejob (= 7.0.8.1) + activesupport (= 7.0.8.1) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.4.3) - actionview (= 7.0.4.3) - activesupport (= 7.0.4.3) - rack (~> 2.0, >= 2.2.0) + actionpack (7.0.8.1) + actionview (= 7.0.8.1) + activesupport (= 7.0.8.1) + rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.4.3) - actionpack (= 7.0.4.3) - activerecord (= 7.0.4.3) - activestorage (= 7.0.4.3) - activesupport (= 7.0.4.3) + actiontext (7.0.8.1) + actionpack (= 7.0.8.1) + activerecord (= 7.0.8.1) + activestorage (= 7.0.8.1) + activesupport (= 7.0.8.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.4.3) - activesupport (= 7.0.4.3) + actionview (7.0.8.1) + activesupport (= 7.0.8.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -76,22 +76,22 @@ GEM activemodel (>= 4.1, < 7.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.0.4.3) - activesupport (= 7.0.4.3) + activejob (7.0.8.1) + activesupport (= 7.0.8.1) globalid (>= 0.3.6) - activemodel (7.0.4.3) - activesupport (= 7.0.4.3) - activerecord (7.0.4.3) - activemodel (= 7.0.4.3) - activesupport (= 7.0.4.3) - activestorage (7.0.4.3) - actionpack (= 7.0.4.3) - activejob (= 7.0.4.3) - activerecord (= 7.0.4.3) - activesupport (= 7.0.4.3) + activemodel (7.0.8.1) + activesupport (= 7.0.8.1) + activerecord (7.0.8.1) + activemodel (= 7.0.8.1) + activesupport (= 7.0.8.1) + activestorage (7.0.8.1) + actionpack (= 7.0.8.1) + activejob (= 7.0.8.1) + activerecord (= 7.0.8.1) + activesupport (= 7.0.8.1) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.4.3) + activesupport (7.0.8.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -182,7 +182,7 @@ GEM activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) - date (3.3.3) + date (3.3.4) delayed_job (4.1.11) activesupport (>= 3.0, < 8.0) delayed_job_active_record (4.1.7) @@ -294,7 +294,7 @@ GEM activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.21.3) + loofah (2.21.4) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -329,14 +329,14 @@ GEM multi_json (1.15.0) multi_xml (0.6.0) mysql2 (0.5.5) - net-imap (0.3.4) + net-imap (0.3.7) date net-protocol net-pop (0.1.2) net-protocol - net-protocol (0.2.1) + net-protocol (0.2.2) timeout - net-smtp (0.3.3) + net-smtp (0.3.4) net-protocol netrc (0.11.0) next_rails (1.2.4) @@ -418,20 +418,20 @@ GEM rack rack-test (2.1.0) rack (>= 1.3) - rails (7.0.4.3) - actioncable (= 7.0.4.3) - actionmailbox (= 7.0.4.3) - actionmailer (= 7.0.4.3) - actionpack (= 7.0.4.3) - actiontext (= 7.0.4.3) - actionview (= 7.0.4.3) - activejob (= 7.0.4.3) - activemodel (= 7.0.4.3) - activerecord (= 7.0.4.3) - activestorage (= 7.0.4.3) - activesupport (= 7.0.4.3) + rails (7.0.8.1) + actioncable (= 7.0.8.1) + actionmailbox (= 7.0.8.1) + actionmailer (= 7.0.8.1) + actionpack (= 7.0.8.1) + actiontext (= 7.0.8.1) + actionview (= 7.0.8.1) + activejob (= 7.0.8.1) + activemodel (= 7.0.8.1) + activerecord (= 7.0.8.1) + activestorage (= 7.0.8.1) + activesupport (= 7.0.8.1) bundler (>= 1.15.0) - railties (= 7.0.4.3) + railties (= 7.0.8.1) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -444,9 +444,9 @@ GEM rails-i18n (7.0.7) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.4.3) - actionpack (= 7.0.4.3) - activesupport (= 7.0.4.3) + railties (7.0.8.1) + actionpack (= 7.0.8.1) + activesupport (= 7.0.8.1) method_source rake (>= 12.2) thor (~> 1.0) @@ -619,14 +619,14 @@ GEM crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) websocket (1.2.9) - websocket-driver (0.7.5) + websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) whenever (1.0.0) chronic (>= 0.6.3) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.8) + zeitwerk (2.6.13) PLATFORMS ruby From 30bc21c96aa79ac4e98a4b7f40a795b23a118b6e Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 5 Mar 2024 15:32:14 +0100 Subject: [PATCH 21/57] Move word counting javascript to the page It really does not need to run on every page load... --- .haml-lint_todo.yml | 3 ++- app/assets/javascripts/osem.js | 23 ----------------------- app/views/proposals/_form.html.haml | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 8d6474cdc..76ec92e79 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -45,6 +45,7 @@ linters: - "app/views/layouts/_admin_sidebar.html.haml" - "app/views/proposals/index.html.haml" - "app/views/proposals/show.html.haml" + - "app/views/proposals/_form.html.haml" # Offense count: 28 IdNames: @@ -145,4 +146,4 @@ linters: # Offense count: 1 FinalNewline: exclude: - - "app/views/layouts/_admin.html.haml" \ No newline at end of file + - "app/views/layouts/_admin.html.haml" diff --git a/app/assets/javascripts/osem.js b/app/assets/javascripts/osem.js index 55c528b2c..240a48c95 100644 --- a/app/assets/javascripts/osem.js +++ b/app/assets/javascripts/osem.js @@ -142,29 +142,6 @@ function word_count(text, divId, maxcount) { }); }; -/* Wait for the DOM to be ready before attaching events to the elements */ -$( document ).ready(function() { - /* Set the minimum and maximum proposal abstract word length */ - function updateEventTypeRequirements() { - var $selected = $("#event_event_type_id option:selected") - var max = $selected.data("max-words"); - var min = $selected.data("min-words"); - - $("#abstract-maximum-word-count").text(max); - $("#abstract-minimum-word-count").text(min); - word_count($('#event_abstract').get(0), 'abstract-count', max); - } - $("#event_event_type_id").change(updateEventTypeRequirements); - updateEventTypeRequirements(); - - /* Count the proposal abstract length */ - $("#event_abstract").on('input', function() { - var $selected = $("#event_event_type_id option:selected") - var max = $selected.data("max-words"); - word_count(this, 'abstract-count', max); - } ); -}); - /* Commodity function for modal windows */ window.build_dialog = function(selector, content) { diff --git a/app/views/proposals/_form.html.haml b/app/views/proposals/_form.html.haml index e1c40e8a5..928d4a9c4 100644 --- a/app/views/proposals/_form.html.haml +++ b/app/views/proposals/_form.html.haml @@ -90,3 +90,27 @@ - submit_copy = action_is_edit ? 'Update Proposal' : 'Create Proposal' = f.submit submit_copy, class: 'btn btn-success' +- content_for :script_head do + :javascript + /* Wait for the DOM to be ready before attaching events to the elements */ + $( document ).ready(function() { + /* Set the minimum and maximum proposal abstract word length */ + function updateEventTypeRequirements() { + var $selected = $("#event_event_type_id option:selected") + var max = $selected.data("max-words"); + var min = $selected.data("min-words"); + + $("#abstract-maximum-word-count").text(max); + $("#abstract-minimum-word-count").text(min); + word_count($('#event_abstract').get(0), 'abstract-count', max); + } + $("#event_event_type_id").change(updateEventTypeRequirements); + updateEventTypeRequirements(); + + /* Count the proposal abstract length */ + $("#event_abstract").on('input', function() { + var $selected = $("#event_event_type_id option:selected") + var max = $selected.data("max-words"); + word_count(this, 'abstract-count', max); + } ); + }); From b6560dbb3439321228e6e26e0750934da513187d Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 5 Mar 2024 15:30:53 +0100 Subject: [PATCH 22/57] Get off off rails-assets Just moving the things we currently use (and should drop in the ASAP) to vendor/assets --- Gemfile | 31 - Gemfile.lock | 36 - vendor/assets/images/holderjs/test/image.jpg | Bin 0 -> 10011 bytes .../assets/javascripts/bootstrap-markdown.js | 1 + .../bootstrap-markdown/bootstrap-markdown.js | 1390 ++ vendor/assets/javascripts/bootstrap-select.js | 1 + .../bootstrap-select/bootstrap-select.js | 3138 +++ .../bootstrap-select/i18n/defaults-am_ET.js | 45 + .../bootstrap-select/i18n/defaults-ar_AR.js | 50 + .../bootstrap-select/i18n/defaults-bg_BG.js | 45 + .../bootstrap-select/i18n/defaults-cs_CZ.js | 38 + .../bootstrap-select/i18n/defaults-da_DK.js | 45 + .../bootstrap-select/i18n/defaults-de_DE.js | 45 + .../bootstrap-select/i18n/defaults-en_US.js | 45 + .../bootstrap-select/i18n/defaults-es_CL.js | 38 + .../bootstrap-select/i18n/defaults-es_ES.js | 38 + .../bootstrap-select/i18n/defaults-et_EE.js | 45 + .../bootstrap-select/i18n/defaults-eu.js | 38 + .../bootstrap-select/i18n/defaults-fa_IR.js | 38 + .../bootstrap-select/i18n/defaults-fi_FI.js | 45 + .../bootstrap-select/i18n/defaults-fr_FR.js | 45 + .../bootstrap-select/i18n/defaults-hr_HR.js | 45 + .../bootstrap-select/i18n/defaults-hu_HU.js | 45 + .../bootstrap-select/i18n/defaults-id_ID.js | 38 + .../bootstrap-select/i18n/defaults-it_IT.js | 40 + .../bootstrap-select/i18n/defaults-ja_JP.js | 38 + .../bootstrap-select/i18n/defaults-kh_KM.js | 45 + .../bootstrap-select/i18n/defaults-ko_KR.js | 45 + .../bootstrap-select/i18n/defaults-lt_LT.js | 45 + .../bootstrap-select/i18n/defaults-lv_LV.js | 45 + .../bootstrap-select/i18n/defaults-nb_NO.js | 45 + .../bootstrap-select/i18n/defaults-nl_NL.js | 38 + .../bootstrap-select/i18n/defaults-pl_PL.js | 38 + .../bootstrap-select/i18n/defaults-pt_BR.js | 38 + .../bootstrap-select/i18n/defaults-pt_PT.js | 38 + .../bootstrap-select/i18n/defaults-ro_RO.js | 39 + .../bootstrap-select/i18n/defaults-ru_RU.js | 39 + .../bootstrap-select/i18n/defaults-sk_SK.js | 38 + .../bootstrap-select/i18n/defaults-sl_SI.js | 43 + .../bootstrap-select/i18n/defaults-sv_SE.js | 45 + .../bootstrap-select/i18n/defaults-tr_TR.js | 45 + .../bootstrap-select/i18n/defaults-ua_UA.js | 38 + .../bootstrap-select/i18n/defaults-vi_VN.js | 45 + .../bootstrap-select/i18n/defaults-zh_CN.js | 38 + .../bootstrap-select/i18n/defaults-zh_TW.js | 38 + vendor/assets/javascripts/date.format.js | 1 + .../javascripts/date.format/date.format.js | 126 + vendor/assets/javascripts/holderjs.js | 1 + .../assets/javascripts/holderjs/gulpfile.js | 114 + vendor/assets/javascripts/holderjs/holder.js | 3070 +++ vendor/assets/javascripts/holderjs/package.js | 12 + .../assets/javascripts/holderjs/src/index.js | 6 + .../javascripts/holderjs/src/lib/color.js | 202 + .../javascripts/holderjs/src/lib/constants.js | 4 + .../javascripts/holderjs/src/lib/dom.js | 62 + .../javascripts/holderjs/src/lib/index.js | 1198 + .../holderjs/src/lib/renderers/canvas.js | 64 + .../holderjs/src/lib/renderers/svg-dom.js | 122 + .../holderjs/src/lib/renderers/svg-text.js | 157 + .../holderjs/src/lib/scenegraph.js | 105 + .../javascripts/holderjs/src/lib/svg.js | 109 + .../javascripts/holderjs/src/lib/utils.js | 173 + .../holderjs/src/lib/vendor/ondomready.js | 155 + .../holderjs/src/lib/vendor/polyfills.js | 234 + .../holderjs/src/lib/vendor/querystring.js | 102 + .../holderjs/src/meteor/package.js | 12 + .../javascripts/holderjs/src/meteor/shim.js | 5 + .../javascripts/holderjs/test/holder.js | 3050 +++ .../assets/javascripts/holderjs/test/index.js | 19 + .../javascripts/holderjs/test/phantom.js | 15 + .../releases/holder-master/holder.js | 3050 +++ .../javascripts/holderjs/test/runner.js | 37 + .../javascripts/jquery-smooth-scroll.js | 1 + .../jquery.smooth-scroll.js | 358 + vendor/assets/javascripts/markdown.js | 1 + vendor/assets/javascripts/markdown/index.js | 3 + .../assets/javascripts/markdown/markdown.js | 1725 ++ vendor/assets/javascripts/momentjs.js | 1 + .../javascripts/momentjs/dist/locale/af.js | 71 + .../javascripts/momentjs/dist/locale/ar-dz.js | 156 + .../javascripts/momentjs/dist/locale/ar-kw.js | 55 + .../javascripts/momentjs/dist/locale/ar-ly.js | 171 + .../javascripts/momentjs/dist/locale/ar-ma.js | 56 + .../javascripts/momentjs/dist/locale/ar-sa.js | 105 + .../javascripts/momentjs/dist/locale/ar-tn.js | 55 + .../javascripts/momentjs/dist/locale/ar.js | 189 + .../javascripts/momentjs/dist/locale/az.js | 102 + .../javascripts/momentjs/dist/locale/be.js | 142 + .../javascripts/momentjs/dist/locale/bg.js | 87 + .../javascripts/momentjs/dist/locale/bm.js | 52 + .../javascripts/momentjs/dist/locale/bn-bd.js | 129 + .../javascripts/momentjs/dist/locale/bn.js | 119 + .../javascripts/momentjs/dist/locale/bo.js | 124 + .../javascripts/momentjs/dist/locale/br.js | 168 + .../javascripts/momentjs/dist/locale/bs.js | 150 + .../javascripts/momentjs/dist/locale/ca.js | 100 + .../javascripts/momentjs/dist/locale/cs.js | 180 + .../javascripts/momentjs/dist/locale/cv.js | 63 + .../javascripts/momentjs/dist/locale/cy.js | 98 + .../javascripts/momentjs/dist/locale/da.js | 53 + .../javascripts/momentjs/dist/locale/de-at.js | 79 + .../javascripts/momentjs/dist/locale/de-ch.js | 78 + .../javascripts/momentjs/dist/locale/de.js | 78 + .../javascripts/momentjs/dist/locale/dv.js | 90 + .../javascripts/momentjs/dist/locale/el.js | 106 + .../javascripts/momentjs/dist/locale/en-au.js | 68 + .../javascripts/momentjs/dist/locale/en-ca.js | 64 + .../javascripts/momentjs/dist/locale/en-gb.js | 68 + .../javascripts/momentjs/dist/locale/en-ie.js | 68 + .../javascripts/momentjs/dist/locale/en-il.js | 64 + .../javascripts/momentjs/dist/locale/en-in.js | 68 + .../javascripts/momentjs/dist/locale/en-nz.js | 68 + .../javascripts/momentjs/dist/locale/en-sg.js | 68 + .../javascripts/momentjs/dist/locale/eo.js | 68 + .../javascripts/momentjs/dist/locale/es-do.js | 108 + .../javascripts/momentjs/dist/locale/es-mx.js | 110 + .../javascripts/momentjs/dist/locale/es-us.js | 110 + .../javascripts/momentjs/dist/locale/es.js | 110 + .../javascripts/momentjs/dist/locale/et.js | 78 + .../javascripts/momentjs/dist/locale/eu.js | 65 + .../javascripts/momentjs/dist/locale/fa.js | 113 + .../javascripts/momentjs/dist/locale/fi.js | 124 + .../javascripts/momentjs/dist/locale/fil.js | 58 + .../javascripts/momentjs/dist/locale/fo.js | 57 + .../javascripts/momentjs/dist/locale/fr-ca.js | 70 + .../javascripts/momentjs/dist/locale/fr-ch.js | 74 + .../javascripts/momentjs/dist/locale/fr.js | 108 + .../javascripts/momentjs/dist/locale/fy.js | 75 + .../javascripts/momentjs/dist/locale/ga.js | 95 + .../javascripts/momentjs/dist/locale/gd.js | 95 + .../javascripts/momentjs/dist/locale/gl.js | 75 + .../momentjs/dist/locale/gom-deva.js | 126 + .../momentjs/dist/locale/gom-latn.js | 124 + .../javascripts/momentjs/dist/locale/gu.js | 122 + .../javascripts/momentjs/dist/locale/he.js | 94 + .../javascripts/momentjs/dist/locale/hi.js | 168 + .../javascripts/momentjs/dist/locale/hr.js | 156 + .../javascripts/momentjs/dist/locale/hu.js | 118 + .../javascripts/momentjs/dist/locale/hy-am.js | 94 + .../javascripts/momentjs/dist/locale/id.js | 76 + .../javascripts/momentjs/dist/locale/is.js | 140 + .../javascripts/momentjs/dist/locale/it-ch.js | 64 + .../javascripts/momentjs/dist/locale/it.js | 106 + .../javascripts/momentjs/dist/locale/ja.js | 148 + .../javascripts/momentjs/dist/locale/jv.js | 76 + .../javascripts/momentjs/dist/locale/ka.js | 92 + .../javascripts/momentjs/dist/locale/kk.js | 82 + .../javascripts/momentjs/dist/locale/km.js | 103 + .../javascripts/momentjs/dist/locale/kn.js | 124 + .../javascripts/momentjs/dist/locale/ko.js | 75 + .../javascripts/momentjs/dist/locale/ku.js | 118 + .../javascripts/momentjs/dist/locale/ky.js | 84 + .../javascripts/momentjs/dist/locale/lb.js | 137 + .../javascripts/momentjs/dist/locale/lo.js | 66 + .../javascripts/momentjs/dist/locale/lt.js | 125 + .../javascripts/momentjs/dist/locale/lv.js | 94 + .../javascripts/momentjs/dist/locale/me.js | 117 + .../javascripts/momentjs/dist/locale/mi.js | 60 + .../javascripts/momentjs/dist/locale/mk.js | 85 + .../javascripts/momentjs/dist/locale/ml.js | 82 + .../javascripts/momentjs/dist/locale/mn.js | 100 + .../javascripts/momentjs/dist/locale/mr.js | 203 + .../javascripts/momentjs/dist/locale/ms-my.js | 76 + .../javascripts/momentjs/dist/locale/ms.js | 75 + .../javascripts/momentjs/dist/locale/mt.js | 56 + .../javascripts/momentjs/dist/locale/my.js | 91 + .../javascripts/momentjs/dist/locale/nb.js | 60 + .../javascripts/momentjs/dist/locale/ne.js | 121 + .../javascripts/momentjs/dist/locale/nl-be.js | 102 + .../javascripts/momentjs/dist/locale/nl.js | 104 + .../javascripts/momentjs/dist/locale/nn.js | 59 + .../momentjs/dist/locale/oc-lnc.js | 85 + .../javascripts/momentjs/dist/locale/pa-in.js | 122 + .../javascripts/momentjs/dist/locale/pl.js | 140 + .../javascripts/momentjs/dist/locale/pt-br.js | 58 + .../javascripts/momentjs/dist/locale/pt.js | 63 + .../javascripts/momentjs/dist/locale/ro.js | 76 + .../javascripts/momentjs/dist/locale/ru.js | 213 + .../javascripts/momentjs/dist/locale/sd.js | 81 + .../javascripts/momentjs/dist/locale/se.js | 57 + .../javascripts/momentjs/dist/locale/si.js | 69 + .../javascripts/momentjs/dist/locale/sk.js | 145 + .../javascripts/momentjs/dist/locale/sl.js | 171 + .../javascripts/momentjs/dist/locale/sq.js | 65 + .../momentjs/dist/locale/sr-cyrl.js | 127 + .../javascripts/momentjs/dist/locale/sr.js | 129 + .../javascripts/momentjs/dist/locale/ss.js | 84 + .../javascripts/momentjs/dist/locale/sv.js | 68 + .../javascripts/momentjs/dist/locale/sw.js | 55 + .../javascripts/momentjs/dist/locale/ta.js | 131 + .../javascripts/momentjs/dist/locale/te.js | 88 + .../javascripts/momentjs/dist/locale/tet.js | 68 + .../javascripts/momentjs/dist/locale/tg.js | 117 + .../javascripts/momentjs/dist/locale/th.js | 65 + .../javascripts/momentjs/dist/locale/tk.js | 91 + .../javascripts/momentjs/dist/locale/tl-ph.js | 57 + .../javascripts/momentjs/dist/locale/tlh.js | 124 + .../javascripts/momentjs/dist/locale/tr.js | 106 + .../javascripts/momentjs/dist/locale/tzl.js | 89 + .../momentjs/dist/locale/tzm-latn.js | 54 + .../javascripts/momentjs/dist/locale/tzm.js | 54 + .../javascripts/momentjs/dist/locale/ug-cn.js | 111 + .../javascripts/momentjs/dist/locale/uk.js | 167 + .../javascripts/momentjs/dist/locale/ur.js | 82 + .../momentjs/dist/locale/uz-latn.js | 54 + .../javascripts/momentjs/dist/locale/uz.js | 51 + .../javascripts/momentjs/dist/locale/vi.js | 80 + .../momentjs/dist/locale/x-pseudo.js | 73 + .../javascripts/momentjs/dist/locale/yo.js | 53 + .../javascripts/momentjs/dist/locale/zh-cn.js | 120 + .../javascripts/momentjs/dist/locale/zh-hk.js | 101 + .../javascripts/momentjs/dist/locale/zh-mo.js | 100 + .../javascripts/momentjs/dist/locale/zh-tw.js | 99 + .../javascripts/momentjs/dist/moment.js | 5677 +++++ .../assets/javascripts/momentjs/locale/af.js | 82 + .../javascripts/momentjs/locale/ar-dz.js | 167 + .../javascripts/momentjs/locale/ar-kw.js | 66 + .../javascripts/momentjs/locale/ar-ly.js | 182 + .../javascripts/momentjs/locale/ar-ma.js | 67 + .../javascripts/momentjs/locale/ar-sa.js | 116 + .../javascripts/momentjs/locale/ar-tn.js | 66 + .../assets/javascripts/momentjs/locale/ar.js | 200 + .../assets/javascripts/momentjs/locale/az.js | 113 + .../assets/javascripts/momentjs/locale/be.js | 153 + .../assets/javascripts/momentjs/locale/bg.js | 98 + .../assets/javascripts/momentjs/locale/bm.js | 62 + .../javascripts/momentjs/locale/bn-bd.js | 140 + .../assets/javascripts/momentjs/locale/bn.js | 130 + .../assets/javascripts/momentjs/locale/bo.js | 135 + .../assets/javascripts/momentjs/locale/br.js | 179 + .../assets/javascripts/momentjs/locale/bs.js | 161 + .../assets/javascripts/momentjs/locale/ca.js | 111 + .../assets/javascripts/momentjs/locale/cs.js | 191 + .../assets/javascripts/momentjs/locale/cv.js | 74 + .../assets/javascripts/momentjs/locale/cy.js | 109 + .../assets/javascripts/momentjs/locale/da.js | 64 + .../javascripts/momentjs/locale/de-at.js | 90 + .../javascripts/momentjs/locale/de-ch.js | 87 + .../assets/javascripts/momentjs/locale/de.js | 89 + .../assets/javascripts/momentjs/locale/dv.js | 101 + .../assets/javascripts/momentjs/locale/el.js | 117 + .../javascripts/momentjs/locale/en-au.js | 79 + .../javascripts/momentjs/locale/en-ca.js | 75 + .../javascripts/momentjs/locale/en-gb.js | 79 + .../javascripts/momentjs/locale/en-ie.js | 79 + .../javascripts/momentjs/locale/en-il.js | 75 + .../javascripts/momentjs/locale/en-in.js | 79 + .../javascripts/momentjs/locale/en-nz.js | 79 + .../javascripts/momentjs/locale/en-sg.js | 79 + .../assets/javascripts/momentjs/locale/eo.js | 79 + .../javascripts/momentjs/locale/es-do.js | 119 + .../javascripts/momentjs/locale/es-mx.js | 121 + .../javascripts/momentjs/locale/es-us.js | 121 + .../assets/javascripts/momentjs/locale/es.js | 121 + .../assets/javascripts/momentjs/locale/et.js | 89 + .../assets/javascripts/momentjs/locale/eu.js | 76 + .../assets/javascripts/momentjs/locale/fa.js | 124 + .../assets/javascripts/momentjs/locale/fi.js | 135 + .../assets/javascripts/momentjs/locale/fil.js | 69 + .../assets/javascripts/momentjs/locale/fo.js | 68 + .../javascripts/momentjs/locale/fr-ca.js | 81 + .../javascripts/momentjs/locale/fr-ch.js | 85 + .../assets/javascripts/momentjs/locale/fr.js | 119 + .../assets/javascripts/momentjs/locale/fy.js | 86 + .../assets/javascripts/momentjs/locale/ga.js | 106 + .../assets/javascripts/momentjs/locale/gd.js | 106 + .../assets/javascripts/momentjs/locale/gl.js | 86 + .../javascripts/momentjs/locale/gom-deva.js | 137 + .../javascripts/momentjs/locale/gom-latn.js | 135 + .../assets/javascripts/momentjs/locale/gu.js | 133 + .../assets/javascripts/momentjs/locale/he.js | 105 + .../assets/javascripts/momentjs/locale/hi.js | 179 + .../assets/javascripts/momentjs/locale/hr.js | 167 + .../assets/javascripts/momentjs/locale/hu.js | 129 + .../javascripts/momentjs/locale/hy-am.js | 105 + .../assets/javascripts/momentjs/locale/id.js | 87 + .../assets/javascripts/momentjs/locale/is.js | 151 + .../javascripts/momentjs/locale/it-ch.js | 75 + .../assets/javascripts/momentjs/locale/it.js | 117 + .../assets/javascripts/momentjs/locale/ja.js | 159 + .../assets/javascripts/momentjs/locale/jv.js | 87 + .../assets/javascripts/momentjs/locale/ka.js | 103 + .../assets/javascripts/momentjs/locale/kk.js | 93 + .../assets/javascripts/momentjs/locale/km.js | 114 + .../assets/javascripts/momentjs/locale/kn.js | 135 + .../assets/javascripts/momentjs/locale/ko.js | 86 + .../assets/javascripts/momentjs/locale/ku.js | 129 + .../assets/javascripts/momentjs/locale/ky.js | 95 + .../assets/javascripts/momentjs/locale/lb.js | 148 + .../assets/javascripts/momentjs/locale/lo.js | 77 + .../assets/javascripts/momentjs/locale/lt.js | 136 + .../assets/javascripts/momentjs/locale/lv.js | 105 + .../assets/javascripts/momentjs/locale/me.js | 128 + .../assets/javascripts/momentjs/locale/mi.js | 71 + .../assets/javascripts/momentjs/locale/mk.js | 97 + .../assets/javascripts/momentjs/locale/ml.js | 93 + .../assets/javascripts/momentjs/locale/mn.js | 111 + .../assets/javascripts/momentjs/locale/mr.js | 214 + .../javascripts/momentjs/locale/ms-my.js | 87 + .../assets/javascripts/momentjs/locale/ms.js | 86 + .../assets/javascripts/momentjs/locale/mt.js | 67 + .../assets/javascripts/momentjs/locale/my.js | 102 + .../assets/javascripts/momentjs/locale/nb.js | 71 + .../assets/javascripts/momentjs/locale/ne.js | 132 + .../javascripts/momentjs/locale/nl-be.js | 113 + .../assets/javascripts/momentjs/locale/nl.js | 115 + .../assets/javascripts/momentjs/locale/nn.js | 70 + .../javascripts/momentjs/locale/oc-lnc.js | 96 + .../javascripts/momentjs/locale/pa-in.js | 133 + .../assets/javascripts/momentjs/locale/pl.js | 151 + .../javascripts/momentjs/locale/pt-br.js | 69 + .../assets/javascripts/momentjs/locale/pt.js | 74 + .../assets/javascripts/momentjs/locale/ro.js | 87 + .../assets/javascripts/momentjs/locale/ru.js | 224 + .../assets/javascripts/momentjs/locale/sd.js | 92 + .../assets/javascripts/momentjs/locale/se.js | 68 + .../assets/javascripts/momentjs/locale/si.js | 80 + .../assets/javascripts/momentjs/locale/sk.js | 156 + .../assets/javascripts/momentjs/locale/sl.js | 182 + .../assets/javascripts/momentjs/locale/sq.js | 76 + .../javascripts/momentjs/locale/sr-cyrl.js | 138 + .../assets/javascripts/momentjs/locale/sr.js | 140 + .../assets/javascripts/momentjs/locale/ss.js | 95 + .../assets/javascripts/momentjs/locale/sv.js | 79 + .../assets/javascripts/momentjs/locale/sw.js | 66 + .../assets/javascripts/momentjs/locale/ta.js | 142 + .../assets/javascripts/momentjs/locale/te.js | 99 + .../assets/javascripts/momentjs/locale/tet.js | 79 + .../assets/javascripts/momentjs/locale/tg.js | 128 + .../assets/javascripts/momentjs/locale/th.js | 76 + .../assets/javascripts/momentjs/locale/tk.js | 102 + .../javascripts/momentjs/locale/tl-ph.js | 68 + .../assets/javascripts/momentjs/locale/tlh.js | 135 + .../assets/javascripts/momentjs/locale/tr.js | 117 + .../assets/javascripts/momentjs/locale/tzl.js | 100 + .../javascripts/momentjs/locale/tzm-latn.js | 65 + .../assets/javascripts/momentjs/locale/tzm.js | 65 + .../javascripts/momentjs/locale/ug-cn.js | 122 + .../assets/javascripts/momentjs/locale/uk.js | 178 + .../assets/javascripts/momentjs/locale/ur.js | 93 + .../javascripts/momentjs/locale/uz-latn.js | 65 + .../assets/javascripts/momentjs/locale/uz.js | 62 + .../assets/javascripts/momentjs/locale/vi.js | 91 + .../javascripts/momentjs/locale/x-pseudo.js | 84 + .../assets/javascripts/momentjs/locale/yo.js | 64 + .../javascripts/momentjs/locale/zh-cn.js | 131 + .../javascripts/momentjs/locale/zh-hk.js | 112 + .../javascripts/momentjs/locale/zh-mo.js | 111 + .../javascripts/momentjs/locale/zh-tw.js | 110 + .../javascripts/momentjs/min/locales.js | 12570 +++++++++++ .../momentjs/min/moment-with-locales.js | 18239 ++++++++++++++++ .../javascripts/momentjs/min/moment.min.js | 1 + vendor/assets/javascripts/momentjs/moment.js | 5685 +++++ .../momentjs/src/lib/create/check-overflow.js | 57 + .../src/lib/create/date-from-array.js | 35 + .../momentjs/src/lib/create/from-anything.js | 117 + .../momentjs/src/lib/create/from-array.js | 187 + .../momentjs/src/lib/create/from-object.js | 20 + .../src/lib/create/from-string-and-array.js | 67 + .../src/lib/create/from-string-and-format.js | 135 + .../momentjs/src/lib/create/from-string.js | 258 + .../momentjs/src/lib/create/local.js | 5 + .../momentjs/src/lib/create/parsing-flags.js | 28 + .../momentjs/src/lib/create/utc.js | 5 + .../momentjs/src/lib/create/valid.js | 51 + .../momentjs/src/lib/duration/abs.js | 18 + .../momentjs/src/lib/duration/add-subtract.js | 21 + .../momentjs/src/lib/duration/as.js | 88 + .../momentjs/src/lib/duration/bubble.js | 68 + .../momentjs/src/lib/duration/clone.js | 5 + .../momentjs/src/lib/duration/constructor.js | 42 + .../momentjs/src/lib/duration/create.js | 133 + .../momentjs/src/lib/duration/duration.js | 16 + .../momentjs/src/lib/duration/get.js | 27 + .../momentjs/src/lib/duration/humanize.js | 114 + .../momentjs/src/lib/duration/iso-string.js | 68 + .../momentjs/src/lib/duration/prototype.js | 78 + .../momentjs/src/lib/duration/valid.js | 55 + .../momentjs/src/lib/format/format.js | 104 + .../momentjs/src/lib/locale/base-config.js | 41 + .../momentjs/src/lib/locale/calendar.js | 15 + .../momentjs/src/lib/locale/constructor.js | 5 + .../javascripts/momentjs/src/lib/locale/en.js | 39 + .../momentjs/src/lib/locale/formats.js | 36 + .../momentjs/src/lib/locale/invalid.js | 5 + .../momentjs/src/lib/locale/lists.js | 93 + .../momentjs/src/lib/locale/locale.js | 45 + .../momentjs/src/lib/locale/locales.js | 248 + .../momentjs/src/lib/locale/ordinal.js | 8 + .../src/lib/locale/pre-post-format.js | 3 + .../momentjs/src/lib/locale/prototype.js | 88 + .../momentjs/src/lib/locale/relative.js | 32 + .../momentjs/src/lib/locale/set.js | 56 + .../momentjs/src/lib/moment/add-subtract.js | 61 + .../momentjs/src/lib/moment/calendar.js | 53 + .../momentjs/src/lib/moment/clone.js | 5 + .../momentjs/src/lib/moment/compare.js | 72 + .../momentjs/src/lib/moment/constructor.js | 80 + .../momentjs/src/lib/moment/creation-data.js | 9 + .../momentjs/src/lib/moment/diff.js | 79 + .../momentjs/src/lib/moment/format.js | 78 + .../momentjs/src/lib/moment/from.js | 20 + .../momentjs/src/lib/moment/get-set.js | 73 + .../momentjs/src/lib/moment/locale.js | 34 + .../momentjs/src/lib/moment/min-max.js | 62 + .../momentjs/src/lib/moment/moment.js | 28 + .../momentjs/src/lib/moment/now.js | 3 + .../momentjs/src/lib/moment/prototype.js | 197 + .../momentjs/src/lib/moment/start-end-of.js | 164 + .../momentjs/src/lib/moment/to-type.js | 42 + .../javascripts/momentjs/src/lib/moment/to.js | 20 + .../momentjs/src/lib/moment/valid.js | 15 + .../momentjs/src/lib/parse/regex.js | 80 + .../momentjs/src/lib/parse/token.js | 36 + .../momentjs/src/lib/units/aliases.js | 31 + .../momentjs/src/lib/units/constants.js | 9 + .../momentjs/src/lib/units/day-of-month.js | 39 + .../momentjs/src/lib/units/day-of-week.js | 443 + .../momentjs/src/lib/units/day-of-year.js | 37 + .../javascripts/momentjs/src/lib/units/era.js | 287 + .../momentjs/src/lib/units/hour.js | 159 + .../momentjs/src/lib/units/millisecond.js | 76 + .../momentjs/src/lib/units/minute.js | 29 + .../momentjs/src/lib/units/month.js | 349 + .../momentjs/src/lib/units/offset.js | 249 + .../momentjs/src/lib/units/priorities.js | 21 + .../momentjs/src/lib/units/quarter.js | 34 + .../momentjs/src/lib/units/second.js | 29 + .../momentjs/src/lib/units/timestamp.js | 20 + .../momentjs/src/lib/units/timezone.js | 16 + .../momentjs/src/lib/units/units.js | 20 + .../src/lib/units/week-calendar-utils.js | 66 + .../momentjs/src/lib/units/week-year.js | 138 + .../momentjs/src/lib/units/week.js | 69 + .../momentjs/src/lib/units/year.js | 85 + .../momentjs/src/lib/utils/abs-ceil.js | 7 + .../momentjs/src/lib/utils/abs-floor.js | 8 + .../momentjs/src/lib/utils/abs-round.js | 7 + .../momentjs/src/lib/utils/compare-arrays.js | 18 + .../momentjs/src/lib/utils/defaults.js | 10 + .../momentjs/src/lib/utils/deprecate.js | 69 + .../momentjs/src/lib/utils/extend.js | 19 + .../momentjs/src/lib/utils/has-own-prop.js | 3 + .../momentjs/src/lib/utils/hooks.js | 13 + .../momentjs/src/lib/utils/index-of.js | 18 + .../momentjs/src/lib/utils/is-array.js | 6 + .../src/lib/utils/is-calendar-spec.js | 25 + .../momentjs/src/lib/utils/is-date.js | 6 + .../momentjs/src/lib/utils/is-function.js | 6 + .../momentjs/src/lib/utils/is-leap-year.js | 3 + .../momentjs/src/lib/utils/is-moment-input.js | 75 + .../momentjs/src/lib/utils/is-number.js | 6 + .../momentjs/src/lib/utils/is-object-empty.js | 15 + .../momentjs/src/lib/utils/is-object.js | 8 + .../momentjs/src/lib/utils/is-string.js | 3 + .../momentjs/src/lib/utils/is-undefined.js | 3 + .../momentjs/src/lib/utils/keys.js | 20 + .../javascripts/momentjs/src/lib/utils/map.js | 9 + .../javascripts/momentjs/src/lib/utils/mod.js | 3 + .../momentjs/src/lib/utils/some.js | 20 + .../momentjs/src/lib/utils/to-int.js | 12 + .../momentjs/src/lib/utils/zero-fill.js | 10 + .../javascripts/momentjs/src/locale/af.js | 71 + .../javascripts/momentjs/src/locale/ar-dz.js | 156 + .../javascripts/momentjs/src/locale/ar-kw.js | 55 + .../javascripts/momentjs/src/locale/ar-ly.js | 171 + .../javascripts/momentjs/src/locale/ar-ma.js | 56 + .../javascripts/momentjs/src/locale/ar-sa.js | 105 + .../javascripts/momentjs/src/locale/ar-tn.js | 55 + .../javascripts/momentjs/src/locale/ar.js | 189 + .../javascripts/momentjs/src/locale/az.js | 102 + .../javascripts/momentjs/src/locale/be.js | 142 + .../javascripts/momentjs/src/locale/bg.js | 87 + .../javascripts/momentjs/src/locale/bm.js | 52 + .../javascripts/momentjs/src/locale/bn-bd.js | 129 + .../javascripts/momentjs/src/locale/bn.js | 119 + .../javascripts/momentjs/src/locale/bo.js | 124 + .../javascripts/momentjs/src/locale/br.js | 168 + .../javascripts/momentjs/src/locale/bs.js | 150 + .../javascripts/momentjs/src/locale/ca.js | 100 + .../javascripts/momentjs/src/locale/cs.js | 180 + .../javascripts/momentjs/src/locale/cv.js | 63 + .../javascripts/momentjs/src/locale/cy.js | 98 + .../javascripts/momentjs/src/locale/da.js | 53 + .../javascripts/momentjs/src/locale/de-at.js | 79 + .../javascripts/momentjs/src/locale/de-ch.js | 78 + .../javascripts/momentjs/src/locale/de.js | 78 + .../javascripts/momentjs/src/locale/dv.js | 90 + .../javascripts/momentjs/src/locale/el.js | 106 + .../javascripts/momentjs/src/locale/en-au.js | 68 + .../javascripts/momentjs/src/locale/en-ca.js | 64 + .../javascripts/momentjs/src/locale/en-gb.js | 68 + .../javascripts/momentjs/src/locale/en-ie.js | 68 + .../javascripts/momentjs/src/locale/en-il.js | 64 + .../javascripts/momentjs/src/locale/en-in.js | 68 + .../javascripts/momentjs/src/locale/en-nz.js | 68 + .../javascripts/momentjs/src/locale/en-sg.js | 68 + .../javascripts/momentjs/src/locale/eo.js | 68 + .../javascripts/momentjs/src/locale/es-do.js | 108 + .../javascripts/momentjs/src/locale/es-mx.js | 110 + .../javascripts/momentjs/src/locale/es-us.js | 110 + .../javascripts/momentjs/src/locale/es.js | 110 + .../javascripts/momentjs/src/locale/et.js | 78 + .../javascripts/momentjs/src/locale/eu.js | 65 + .../javascripts/momentjs/src/locale/fa.js | 113 + .../javascripts/momentjs/src/locale/fi.js | 124 + .../javascripts/momentjs/src/locale/fil.js | 58 + .../javascripts/momentjs/src/locale/fo.js | 57 + .../javascripts/momentjs/src/locale/fr-ca.js | 70 + .../javascripts/momentjs/src/locale/fr-ch.js | 74 + .../javascripts/momentjs/src/locale/fr.js | 108 + .../javascripts/momentjs/src/locale/fy.js | 75 + .../javascripts/momentjs/src/locale/ga.js | 95 + .../javascripts/momentjs/src/locale/gd.js | 95 + .../javascripts/momentjs/src/locale/gl.js | 75 + .../momentjs/src/locale/gom-deva.js | 126 + .../momentjs/src/locale/gom-latn.js | 124 + .../javascripts/momentjs/src/locale/gu.js | 122 + .../javascripts/momentjs/src/locale/he.js | 94 + .../javascripts/momentjs/src/locale/hi.js | 168 + .../javascripts/momentjs/src/locale/hr.js | 156 + .../javascripts/momentjs/src/locale/hu.js | 118 + .../javascripts/momentjs/src/locale/hy-am.js | 94 + .../javascripts/momentjs/src/locale/id.js | 76 + .../javascripts/momentjs/src/locale/is.js | 140 + .../javascripts/momentjs/src/locale/it-ch.js | 64 + .../javascripts/momentjs/src/locale/it.js | 106 + .../javascripts/momentjs/src/locale/ja.js | 148 + .../javascripts/momentjs/src/locale/jv.js | 76 + .../javascripts/momentjs/src/locale/ka.js | 92 + .../javascripts/momentjs/src/locale/kk.js | 82 + .../javascripts/momentjs/src/locale/km.js | 103 + .../javascripts/momentjs/src/locale/kn.js | 124 + .../javascripts/momentjs/src/locale/ko.js | 75 + .../javascripts/momentjs/src/locale/ku.js | 118 + .../javascripts/momentjs/src/locale/ky.js | 84 + .../javascripts/momentjs/src/locale/lb.js | 137 + .../javascripts/momentjs/src/locale/lo.js | 66 + .../javascripts/momentjs/src/locale/lt.js | 125 + .../javascripts/momentjs/src/locale/lv.js | 94 + .../javascripts/momentjs/src/locale/me.js | 117 + .../javascripts/momentjs/src/locale/mi.js | 60 + .../javascripts/momentjs/src/locale/mk.js | 85 + .../javascripts/momentjs/src/locale/ml.js | 82 + .../javascripts/momentjs/src/locale/mn.js | 100 + .../javascripts/momentjs/src/locale/mr.js | 203 + .../javascripts/momentjs/src/locale/ms-my.js | 76 + .../javascripts/momentjs/src/locale/ms.js | 75 + .../javascripts/momentjs/src/locale/mt.js | 56 + .../javascripts/momentjs/src/locale/my.js | 91 + .../javascripts/momentjs/src/locale/nb.js | 60 + .../javascripts/momentjs/src/locale/ne.js | 121 + .../javascripts/momentjs/src/locale/nl-be.js | 102 + .../javascripts/momentjs/src/locale/nl.js | 104 + .../javascripts/momentjs/src/locale/nn.js | 59 + .../javascripts/momentjs/src/locale/oc-lnc.js | 85 + .../javascripts/momentjs/src/locale/pa-in.js | 122 + .../javascripts/momentjs/src/locale/pl.js | 140 + .../javascripts/momentjs/src/locale/pt-br.js | 58 + .../javascripts/momentjs/src/locale/pt.js | 63 + .../javascripts/momentjs/src/locale/ro.js | 76 + .../javascripts/momentjs/src/locale/ru.js | 213 + .../javascripts/momentjs/src/locale/sd.js | 81 + .../javascripts/momentjs/src/locale/se.js | 57 + .../javascripts/momentjs/src/locale/si.js | 69 + .../javascripts/momentjs/src/locale/sk.js | 145 + .../javascripts/momentjs/src/locale/sl.js | 171 + .../javascripts/momentjs/src/locale/sq.js | 65 + .../momentjs/src/locale/sr-cyrl.js | 127 + .../javascripts/momentjs/src/locale/sr.js | 129 + .../javascripts/momentjs/src/locale/ss.js | 84 + .../javascripts/momentjs/src/locale/sv.js | 68 + .../javascripts/momentjs/src/locale/sw.js | 55 + .../javascripts/momentjs/src/locale/ta.js | 131 + .../javascripts/momentjs/src/locale/te.js | 88 + .../javascripts/momentjs/src/locale/tet.js | 68 + .../javascripts/momentjs/src/locale/tg.js | 117 + .../javascripts/momentjs/src/locale/th.js | 65 + .../javascripts/momentjs/src/locale/tk.js | 91 + .../javascripts/momentjs/src/locale/tl-ph.js | 57 + .../javascripts/momentjs/src/locale/tlh.js | 124 + .../javascripts/momentjs/src/locale/tr.js | 106 + .../javascripts/momentjs/src/locale/tzl.js | 89 + .../momentjs/src/locale/tzm-latn.js | 54 + .../javascripts/momentjs/src/locale/tzm.js | 54 + .../javascripts/momentjs/src/locale/ug-cn.js | 111 + .../javascripts/momentjs/src/locale/uk.js | 167 + .../javascripts/momentjs/src/locale/ur.js | 82 + .../momentjs/src/locale/uz-latn.js | 54 + .../javascripts/momentjs/src/locale/uz.js | 51 + .../javascripts/momentjs/src/locale/vi.js | 80 + .../momentjs/src/locale/x-pseudo.js | 73 + .../javascripts/momentjs/src/locale/yo.js | 53 + .../javascripts/momentjs/src/locale/zh-cn.js | 120 + .../javascripts/momentjs/src/locale/zh-hk.js | 101 + .../javascripts/momentjs/src/locale/zh-mo.js | 100 + .../javascripts/momentjs/src/locale/zh-tw.js | 99 + .../assets/javascripts/momentjs/src/moment.js | 93 + .../javascripts/momentjs/templates/default.js | 5 + .../javascripts/momentjs/templates/empty.js | 0 .../momentjs/templates/locale-header.js | 6 + .../momentjs/templates/test-header.js | 6 + vendor/assets/javascripts/spectrum.js | 1 + .../spectrum/i18n/jquery.spectrum-ar.js | 17 + .../spectrum/i18n/jquery.spectrum-de.js | 18 + .../spectrum/i18n/jquery.spectrum-dk.js | 14 + .../spectrum/i18n/jquery.spectrum-es.js | 18 + .../spectrum/i18n/jquery.spectrum-fa.js | 14 + .../spectrum/i18n/jquery.spectrum-fi.js | 14 + .../spectrum/i18n/jquery.spectrum-fr.js | 18 + .../spectrum/i18n/jquery.spectrum-gr.js | 18 + .../spectrum/i18n/jquery.spectrum-he.js | 18 + .../spectrum/i18n/jquery.spectrum-hr.js | 18 + .../spectrum/i18n/jquery.spectrum-id.js | 18 + .../spectrum/i18n/jquery.spectrum-it.js | 16 + .../spectrum/i18n/jquery.spectrum-ja.js | 14 + .../spectrum/i18n/jquery.spectrum-lt.js | 18 + .../spectrum/i18n/jquery.spectrum-nl.js | 17 + .../spectrum/i18n/jquery.spectrum-pl.js | 18 + .../spectrum/i18n/jquery.spectrum-pt-br.js | 18 + .../spectrum/i18n/jquery.spectrum-ru.js | 18 + .../spectrum/i18n/jquery.spectrum-sv.js | 14 + .../spectrum/i18n/jquery.spectrum-tr.js | 14 + .../spectrum/i18n/jquery.spectrum-zh-cn.js | 18 + .../spectrum/i18n/jquery.spectrum-zh-tw.js | 18 + .../assets/javascripts/spectrum/spectrum.js | 2323 ++ vendor/assets/javascripts/tinycolor.js | 1 + vendor/assets/javascripts/tinycolor/build.js | 101 + .../tinycolor/dist/tinycolor-min.js | 1 + vendor/assets/javascripts/tinycolor/mod.js | 1275 ++ .../javascripts/tinycolor/npm/cjs/test.js | 2191 ++ .../tinycolor/npm/cjs/test_template.js | 26 + .../tinycolor/npm/cjs/tinycolor.js | 1188 + .../tinycolor/npm/dist/tinycolor-min.js | 5 + .../javascripts/tinycolor/npm/esm/test.js | 2189 ++ .../tinycolor/npm/esm/test_template.js | 24 + .../tinycolor/npm/esm/tinycolor.js | 1180 + .../javascripts/tinycolor/npm/tinycolor.js | 1191 + vendor/assets/javascripts/tinycolor/test.js | 2174 ++ .../assets/javascripts/tinycolor/tinycolor.js | 1187 + vendor/assets/javascripts/to-markdown.js | 1 + .../javascripts/to-markdown/to-markdown.js | 789 + vendor/assets/javascripts/trianglify.js | 1 + .../javascripts/trianglify/trianglify.min.js | 1 + vendor/assets/javascripts/waypoints.js | 1 + .../javascripts/waypoints/jquery.waypoints.js | 649 + .../waypoints/noframework.waypoints.js | 745 + .../waypoints/shortcuts/infinite.js | 84 + .../javascripts/waypoints/shortcuts/inview.js | 120 + .../javascripts/waypoints/shortcuts/sticky.js | 70 + .../javascripts/waypoints/waypoints.debug.js | 46 + .../javascripts/waypoints/zepto.waypoints.js | 692 + .../stylesheets/bootstrap-markdown.scss | 1 + .../bootstrap-markdown.min.scss | 1 + .../assets/stylesheets/bootstrap-select.scss | 1 + .../bootstrap-select/bootstrap-select.scss | 428 + vendor/assets/stylesheets/spectrum.scss | 1 + .../assets/stylesheets/spectrum/spectrum.scss | 507 + .../stylesheets/spectrum/themes/sp-dark.scss | 128 + 659 files changed, 129299 insertions(+), 67 deletions(-) create mode 100644 vendor/assets/images/holderjs/test/image.jpg create mode 100644 vendor/assets/javascripts/bootstrap-markdown.js create mode 100644 vendor/assets/javascripts/bootstrap-markdown/bootstrap-markdown.js create mode 100644 vendor/assets/javascripts/bootstrap-select.js create mode 100644 vendor/assets/javascripts/bootstrap-select/bootstrap-select.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-am_ET.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-ar_AR.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-bg_BG.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-cs_CZ.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-da_DK.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-de_DE.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-en_US.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-es_CL.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-es_ES.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-et_EE.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-eu.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-fa_IR.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-fi_FI.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-fr_FR.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-hr_HR.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-hu_HU.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-id_ID.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-it_IT.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-ja_JP.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-kh_KM.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-ko_KR.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-lt_LT.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-lv_LV.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-nb_NO.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-nl_NL.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-pl_PL.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-pt_BR.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-pt_PT.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-ro_RO.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-ru_RU.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-sk_SK.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-sl_SI.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-sv_SE.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-tr_TR.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-ua_UA.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-vi_VN.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-zh_CN.js create mode 100644 vendor/assets/javascripts/bootstrap-select/i18n/defaults-zh_TW.js create mode 100644 vendor/assets/javascripts/date.format.js create mode 100644 vendor/assets/javascripts/date.format/date.format.js create mode 100644 vendor/assets/javascripts/holderjs.js create mode 100644 vendor/assets/javascripts/holderjs/gulpfile.js create mode 100644 vendor/assets/javascripts/holderjs/holder.js create mode 100644 vendor/assets/javascripts/holderjs/package.js create mode 100644 vendor/assets/javascripts/holderjs/src/index.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/color.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/constants.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/dom.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/index.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/renderers/canvas.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/renderers/svg-dom.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/renderers/svg-text.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/scenegraph.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/svg.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/utils.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/vendor/ondomready.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/vendor/polyfills.js create mode 100644 vendor/assets/javascripts/holderjs/src/lib/vendor/querystring.js create mode 100644 vendor/assets/javascripts/holderjs/src/meteor/package.js create mode 100644 vendor/assets/javascripts/holderjs/src/meteor/shim.js create mode 100644 vendor/assets/javascripts/holderjs/test/holder.js create mode 100644 vendor/assets/javascripts/holderjs/test/index.js create mode 100644 vendor/assets/javascripts/holderjs/test/phantom.js create mode 100644 vendor/assets/javascripts/holderjs/test/renderperf/releases/holder-master/holder.js create mode 100644 vendor/assets/javascripts/holderjs/test/runner.js create mode 100644 vendor/assets/javascripts/jquery-smooth-scroll.js create mode 100644 vendor/assets/javascripts/jquery-smooth-scroll/jquery.smooth-scroll.js create mode 100644 vendor/assets/javascripts/markdown.js create mode 100644 vendor/assets/javascripts/markdown/index.js create mode 100644 vendor/assets/javascripts/markdown/markdown.js create mode 100644 vendor/assets/javascripts/momentjs.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/af.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ar-dz.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ar-kw.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ar-ly.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ar-ma.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ar-sa.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ar-tn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ar.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/az.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/be.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/bg.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/bm.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/bn-bd.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/bn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/bo.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/br.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/bs.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ca.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/cs.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/cv.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/cy.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/da.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/de-at.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/de-ch.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/de.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/dv.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/el.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-au.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-ca.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-gb.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-ie.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-il.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-in.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-nz.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/en-sg.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/eo.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/es-do.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/es-mx.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/es-us.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/es.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/et.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/eu.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fa.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fi.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fil.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fo.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fr-ca.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fr-ch.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fr.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/fy.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ga.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/gd.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/gl.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/gom-deva.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/gom-latn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/gu.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/he.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/hi.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/hr.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/hu.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/hy-am.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/id.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/is.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/it-ch.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/it.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ja.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/jv.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ka.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/kk.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/km.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/kn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ko.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ku.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ky.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/lb.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/lo.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/lt.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/lv.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/me.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/mi.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/mk.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ml.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/mn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/mr.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ms-my.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ms.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/mt.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/my.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/nb.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ne.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/nl-be.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/nl.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/nn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/oc-lnc.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/pa-in.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/pl.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/pt-br.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/pt.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ro.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ru.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sd.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/se.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/si.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sk.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sl.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sq.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sr-cyrl.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sr.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ss.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sv.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/sw.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ta.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/te.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tet.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tg.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/th.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tk.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tl-ph.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tlh.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tr.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tzl.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tzm-latn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/tzm.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ug-cn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/uk.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/ur.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/uz-latn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/uz.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/vi.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/x-pseudo.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/yo.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/zh-cn.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/zh-hk.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/zh-mo.js create mode 100644 vendor/assets/javascripts/momentjs/dist/locale/zh-tw.js create mode 100644 vendor/assets/javascripts/momentjs/dist/moment.js create mode 100644 vendor/assets/javascripts/momentjs/locale/af.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ar-dz.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ar-kw.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ar-ly.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ar-ma.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ar-sa.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ar-tn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ar.js create mode 100644 vendor/assets/javascripts/momentjs/locale/az.js create mode 100644 vendor/assets/javascripts/momentjs/locale/be.js create mode 100644 vendor/assets/javascripts/momentjs/locale/bg.js create mode 100644 vendor/assets/javascripts/momentjs/locale/bm.js create mode 100644 vendor/assets/javascripts/momentjs/locale/bn-bd.js create mode 100644 vendor/assets/javascripts/momentjs/locale/bn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/bo.js create mode 100644 vendor/assets/javascripts/momentjs/locale/br.js create mode 100644 vendor/assets/javascripts/momentjs/locale/bs.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ca.js create mode 100644 vendor/assets/javascripts/momentjs/locale/cs.js create mode 100644 vendor/assets/javascripts/momentjs/locale/cv.js create mode 100644 vendor/assets/javascripts/momentjs/locale/cy.js create mode 100644 vendor/assets/javascripts/momentjs/locale/da.js create mode 100644 vendor/assets/javascripts/momentjs/locale/de-at.js create mode 100644 vendor/assets/javascripts/momentjs/locale/de-ch.js create mode 100644 vendor/assets/javascripts/momentjs/locale/de.js create mode 100644 vendor/assets/javascripts/momentjs/locale/dv.js create mode 100644 vendor/assets/javascripts/momentjs/locale/el.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-au.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-ca.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-gb.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-ie.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-il.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-in.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-nz.js create mode 100644 vendor/assets/javascripts/momentjs/locale/en-sg.js create mode 100644 vendor/assets/javascripts/momentjs/locale/eo.js create mode 100644 vendor/assets/javascripts/momentjs/locale/es-do.js create mode 100644 vendor/assets/javascripts/momentjs/locale/es-mx.js create mode 100644 vendor/assets/javascripts/momentjs/locale/es-us.js create mode 100644 vendor/assets/javascripts/momentjs/locale/es.js create mode 100644 vendor/assets/javascripts/momentjs/locale/et.js create mode 100644 vendor/assets/javascripts/momentjs/locale/eu.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fa.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fi.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fil.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fo.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fr-ca.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fr-ch.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fr.js create mode 100644 vendor/assets/javascripts/momentjs/locale/fy.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ga.js create mode 100644 vendor/assets/javascripts/momentjs/locale/gd.js create mode 100644 vendor/assets/javascripts/momentjs/locale/gl.js create mode 100644 vendor/assets/javascripts/momentjs/locale/gom-deva.js create mode 100644 vendor/assets/javascripts/momentjs/locale/gom-latn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/gu.js create mode 100644 vendor/assets/javascripts/momentjs/locale/he.js create mode 100644 vendor/assets/javascripts/momentjs/locale/hi.js create mode 100644 vendor/assets/javascripts/momentjs/locale/hr.js create mode 100644 vendor/assets/javascripts/momentjs/locale/hu.js create mode 100644 vendor/assets/javascripts/momentjs/locale/hy-am.js create mode 100644 vendor/assets/javascripts/momentjs/locale/id.js create mode 100644 vendor/assets/javascripts/momentjs/locale/is.js create mode 100644 vendor/assets/javascripts/momentjs/locale/it-ch.js create mode 100644 vendor/assets/javascripts/momentjs/locale/it.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ja.js create mode 100644 vendor/assets/javascripts/momentjs/locale/jv.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ka.js create mode 100644 vendor/assets/javascripts/momentjs/locale/kk.js create mode 100644 vendor/assets/javascripts/momentjs/locale/km.js create mode 100644 vendor/assets/javascripts/momentjs/locale/kn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ko.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ku.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ky.js create mode 100644 vendor/assets/javascripts/momentjs/locale/lb.js create mode 100644 vendor/assets/javascripts/momentjs/locale/lo.js create mode 100644 vendor/assets/javascripts/momentjs/locale/lt.js create mode 100644 vendor/assets/javascripts/momentjs/locale/lv.js create mode 100644 vendor/assets/javascripts/momentjs/locale/me.js create mode 100644 vendor/assets/javascripts/momentjs/locale/mi.js create mode 100644 vendor/assets/javascripts/momentjs/locale/mk.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ml.js create mode 100644 vendor/assets/javascripts/momentjs/locale/mn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/mr.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ms-my.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ms.js create mode 100644 vendor/assets/javascripts/momentjs/locale/mt.js create mode 100644 vendor/assets/javascripts/momentjs/locale/my.js create mode 100644 vendor/assets/javascripts/momentjs/locale/nb.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ne.js create mode 100644 vendor/assets/javascripts/momentjs/locale/nl-be.js create mode 100644 vendor/assets/javascripts/momentjs/locale/nl.js create mode 100644 vendor/assets/javascripts/momentjs/locale/nn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/oc-lnc.js create mode 100644 vendor/assets/javascripts/momentjs/locale/pa-in.js create mode 100644 vendor/assets/javascripts/momentjs/locale/pl.js create mode 100644 vendor/assets/javascripts/momentjs/locale/pt-br.js create mode 100644 vendor/assets/javascripts/momentjs/locale/pt.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ro.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ru.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sd.js create mode 100644 vendor/assets/javascripts/momentjs/locale/se.js create mode 100644 vendor/assets/javascripts/momentjs/locale/si.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sk.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sl.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sq.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sr-cyrl.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sr.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ss.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sv.js create mode 100644 vendor/assets/javascripts/momentjs/locale/sw.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ta.js create mode 100644 vendor/assets/javascripts/momentjs/locale/te.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tet.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tg.js create mode 100644 vendor/assets/javascripts/momentjs/locale/th.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tk.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tl-ph.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tlh.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tr.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tzl.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tzm-latn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/tzm.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ug-cn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/uk.js create mode 100644 vendor/assets/javascripts/momentjs/locale/ur.js create mode 100644 vendor/assets/javascripts/momentjs/locale/uz-latn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/uz.js create mode 100644 vendor/assets/javascripts/momentjs/locale/vi.js create mode 100644 vendor/assets/javascripts/momentjs/locale/x-pseudo.js create mode 100644 vendor/assets/javascripts/momentjs/locale/yo.js create mode 100644 vendor/assets/javascripts/momentjs/locale/zh-cn.js create mode 100644 vendor/assets/javascripts/momentjs/locale/zh-hk.js create mode 100644 vendor/assets/javascripts/momentjs/locale/zh-mo.js create mode 100644 vendor/assets/javascripts/momentjs/locale/zh-tw.js create mode 100644 vendor/assets/javascripts/momentjs/min/locales.js create mode 100644 vendor/assets/javascripts/momentjs/min/moment-with-locales.js create mode 100644 vendor/assets/javascripts/momentjs/min/moment.min.js create mode 100644 vendor/assets/javascripts/momentjs/moment.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/check-overflow.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/date-from-array.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/from-anything.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/from-array.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/from-object.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/from-string-and-array.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/from-string-and-format.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/from-string.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/local.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/parsing-flags.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/utc.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/create/valid.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/abs.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/add-subtract.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/as.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/bubble.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/clone.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/constructor.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/create.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/duration.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/get.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/humanize.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/iso-string.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/prototype.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/duration/valid.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/format/format.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/base-config.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/calendar.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/constructor.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/en.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/formats.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/invalid.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/lists.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/locale.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/locales.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/ordinal.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/pre-post-format.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/prototype.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/relative.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/locale/set.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/add-subtract.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/calendar.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/clone.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/compare.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/constructor.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/creation-data.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/diff.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/format.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/from.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/get-set.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/locale.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/min-max.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/moment.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/now.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/prototype.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/start-end-of.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/to-type.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/to.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/moment/valid.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/parse/regex.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/parse/token.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/aliases.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/constants.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/day-of-month.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/day-of-week.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/day-of-year.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/era.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/hour.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/millisecond.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/minute.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/month.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/offset.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/priorities.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/quarter.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/second.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/timestamp.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/timezone.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/units.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/week-calendar-utils.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/week-year.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/week.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/units/year.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/abs-ceil.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/abs-floor.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/abs-round.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/compare-arrays.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/defaults.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/deprecate.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/extend.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/has-own-prop.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/hooks.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/index-of.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-array.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-calendar-spec.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-date.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-function.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-leap-year.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-moment-input.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-number.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-object-empty.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-object.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-string.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/is-undefined.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/keys.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/map.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/mod.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/some.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/to-int.js create mode 100644 vendor/assets/javascripts/momentjs/src/lib/utils/zero-fill.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/af.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ar-dz.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ar-kw.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ar-ly.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ar-ma.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ar-sa.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ar-tn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ar.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/az.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/be.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/bg.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/bm.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/bn-bd.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/bn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/bo.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/br.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/bs.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ca.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/cs.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/cv.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/cy.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/da.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/de-at.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/de-ch.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/de.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/dv.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/el.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-au.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-ca.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-gb.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-ie.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-il.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-in.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-nz.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/en-sg.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/eo.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/es-do.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/es-mx.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/es-us.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/es.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/et.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/eu.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fa.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fi.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fil.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fo.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fr-ca.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fr-ch.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fr.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/fy.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ga.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/gd.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/gl.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/gom-deva.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/gom-latn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/gu.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/he.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/hi.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/hr.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/hu.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/hy-am.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/id.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/is.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/it-ch.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/it.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ja.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/jv.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ka.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/kk.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/km.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/kn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ko.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ku.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ky.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/lb.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/lo.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/lt.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/lv.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/me.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/mi.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/mk.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ml.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/mn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/mr.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ms-my.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ms.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/mt.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/my.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/nb.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ne.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/nl-be.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/nl.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/nn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/oc-lnc.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/pa-in.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/pl.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/pt-br.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/pt.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ro.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ru.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sd.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/se.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/si.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sk.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sl.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sq.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sr-cyrl.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sr.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ss.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sv.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/sw.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ta.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/te.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tet.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tg.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/th.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tk.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tl-ph.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tlh.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tr.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tzl.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tzm-latn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/tzm.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ug-cn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/uk.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/ur.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/uz-latn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/uz.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/vi.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/x-pseudo.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/yo.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/zh-cn.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/zh-hk.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/zh-mo.js create mode 100644 vendor/assets/javascripts/momentjs/src/locale/zh-tw.js create mode 100644 vendor/assets/javascripts/momentjs/src/moment.js create mode 100644 vendor/assets/javascripts/momentjs/templates/default.js create mode 100644 vendor/assets/javascripts/momentjs/templates/empty.js create mode 100644 vendor/assets/javascripts/momentjs/templates/locale-header.js create mode 100644 vendor/assets/javascripts/momentjs/templates/test-header.js create mode 100644 vendor/assets/javascripts/spectrum.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-ar.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-de.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-dk.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-es.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-fa.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-fi.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-fr.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-gr.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-he.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-hr.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-id.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-it.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-ja.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-lt.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-nl.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-pl.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-pt-br.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-ru.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-sv.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-tr.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-zh-cn.js create mode 100644 vendor/assets/javascripts/spectrum/i18n/jquery.spectrum-zh-tw.js create mode 100644 vendor/assets/javascripts/spectrum/spectrum.js create mode 100644 vendor/assets/javascripts/tinycolor.js create mode 100644 vendor/assets/javascripts/tinycolor/build.js create mode 100644 vendor/assets/javascripts/tinycolor/dist/tinycolor-min.js create mode 100644 vendor/assets/javascripts/tinycolor/mod.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/cjs/test.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/cjs/test_template.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/cjs/tinycolor.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/dist/tinycolor-min.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/esm/test.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/esm/test_template.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/esm/tinycolor.js create mode 100644 vendor/assets/javascripts/tinycolor/npm/tinycolor.js create mode 100644 vendor/assets/javascripts/tinycolor/test.js create mode 100644 vendor/assets/javascripts/tinycolor/tinycolor.js create mode 100644 vendor/assets/javascripts/to-markdown.js create mode 100644 vendor/assets/javascripts/to-markdown/to-markdown.js create mode 100644 vendor/assets/javascripts/trianglify.js create mode 100644 vendor/assets/javascripts/trianglify/trianglify.min.js create mode 100644 vendor/assets/javascripts/waypoints.js create mode 100644 vendor/assets/javascripts/waypoints/jquery.waypoints.js create mode 100644 vendor/assets/javascripts/waypoints/noframework.waypoints.js create mode 100644 vendor/assets/javascripts/waypoints/shortcuts/infinite.js create mode 100644 vendor/assets/javascripts/waypoints/shortcuts/inview.js create mode 100644 vendor/assets/javascripts/waypoints/shortcuts/sticky.js create mode 100644 vendor/assets/javascripts/waypoints/waypoints.debug.js create mode 100644 vendor/assets/javascripts/waypoints/zepto.waypoints.js create mode 100644 vendor/assets/stylesheets/bootstrap-markdown.scss create mode 100644 vendor/assets/stylesheets/bootstrap-markdown/bootstrap-markdown.min.scss create mode 100644 vendor/assets/stylesheets/bootstrap-select.scss create mode 100644 vendor/assets/stylesheets/bootstrap-select/bootstrap-select.scss create mode 100644 vendor/assets/stylesheets/spectrum.scss create mode 100644 vendor/assets/stylesheets/spectrum/spectrum.scss create mode 100644 vendor/assets/stylesheets/spectrum/themes/sp-dark.scss diff --git a/Gemfile b/Gemfile index 0118219d0..05e824acb 100644 --- a/Gemfile +++ b/Gemfile @@ -8,11 +8,6 @@ source 'https://rubygems.org' ruby ENV.fetch('OSEM_RUBY_VERSION', '3.1.4') -# rails-assets requires >= 1.8.4 -if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4') - abort "Bundler version >= 1.8.4 is required" -end - # as web framework if next? gem 'rails', '~> 7.1' @@ -94,32 +89,6 @@ gem 'jquery-ui-rails', '~> 6.0.1' # for languages validation gem 'iso-639' -# frontend javascripts -source 'https://rails-assets.org' do - # for placeholder images - gem 'rails-assets-holderjs' - # for formating dates - gem 'rails-assets-date.format' - # for or parsing, validating, manipulating, and formatting dates - gem 'rails-assets-momentjs' - # for smooth scrolling - gem 'rails-assets-jquery-smooth-scroll' - # as color picker - gem 'rails-assets-spectrum' - # for color manipulation - gem 'rails-assets-tinycolor' - # for drawing triangle backgrounds - gem 'rails-assets-trianglify' - # for scroll way points - gem 'rails-assets-waypoints' - # for markdown editors - gem 'rails-assets-bootstrap-markdown' - # for select with icon - gem 'rails-assets-bootstrap-select' - gem 'rails-assets-markdown' - gem 'rails-assets-to-markdown', '~> 3' -end - # as date picker gem 'bootstrap3-datetimepicker-rails', '~> 4.17.47' diff --git a/Gemfile.lock b/Gemfile.lock index 76ca425a9..64dc765e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,27 +1,3 @@ -GEM - remote: https://rails-assets.org/ - specs: - rails-assets-bootstrap (3.4.1) - rails-assets-jquery (>= 1.9.1, < 4) - rails-assets-bootstrap-markdown (2.10.0) - rails-assets-bootstrap (~> 3) - rails-assets-bootstrap-select (1.13.10) - rails-assets-bootstrap (>= 3.0.0) - rails-assets-jquery (>= 1.9.1, < 4) - rails-assets-date.format (1.2.3) - rails-assets-holderjs (2.9.6) - rails-assets-jquery (3.4.1) - rails-assets-jquery-smooth-scroll (2.2.0) - rails-assets-jquery (>= 1.7.0) - rails-assets-markdown (0.5.0) - rails-assets-momentjs (2.29.4) - rails-assets-spectrum (1.8.0) - rails-assets-jquery (>= 1.7.2) - rails-assets-tinycolor (1.6.0) - rails-assets-to-markdown (3.1.1) - rails-assets-trianglify (1.2.0) - rails-assets-waypoints (4.0.1) - GEM remote: https://rubygems.org/ specs: @@ -697,18 +673,6 @@ DEPENDENCIES prawn-rails puma rails (~> 7.0) - rails-assets-bootstrap-markdown! - rails-assets-bootstrap-select! - rails-assets-date.format! - rails-assets-holderjs! - rails-assets-jquery-smooth-scroll! - rails-assets-markdown! - rails-assets-momentjs! - rails-assets-spectrum! - rails-assets-tinycolor! - rails-assets-to-markdown (~> 3)! - rails-assets-trianglify! - rails-assets-waypoints! rails-controller-testing rails-i18n recaptcha diff --git a/vendor/assets/images/holderjs/test/image.jpg b/vendor/assets/images/holderjs/test/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d7fa14c942faae1eaaa2059670aac16d1bc1ac0 GIT binary patch literal 10011 zcmb7IRZtvEkY1c@aCZq19D=(C5AGV0#oaBzgS!Wp#oaZyLvUwtcegAo9Dmh4-0RJ} z%v5*v*VR2eEw4+jn*b~Y8F?8192^`#?rj5JApj`=G9nT(5+X7(5;6)3GAa-Y2z>Vr zh=+lRhDC@+L_~;3KtMuHM@d3TLqk(iS86Dz|fItE6D|AfGypr8Oz zfw({*E&~Yx3B&(;y>Gwo&OormjK1lIr{3WRk!E5Z=u5eqLfNQ8wyF=psrH9m;|3)*P!#<6oN9?a14#BEFW`&G`e*HcGp-LpE!6S6i{7 z+ZuVkDTFD&oL}*6t{7zdNo7xWYn~Ma_Fc5o6{KBz(V})qzb9QhrJREAqV)s(O<1as z?IkmGwcxoF+@G#W|2PG4Ip*8bqddwIrri6}kpejf3!Z0dB^Nn-!2aVicRiUW;Arz) zzD9DjokfKJeW2<7ypc@T(yZ7GoWQIUy}LJu!)O=#gIWq%Fxh>O9E!k;rfV_*#xW zv;;no$&%fr)2UD8;^`aI&fU~k_BqW@^W~0AivJGd`x|s!k$LrneBs9LFA~+&7f>M> zd(-q4z{Fj4OXzvJ_uO^V=J-<9mNk$y+W#GXPa`Sw_S?UO#dqD+Y%roL>5jeejvy%( zKI9`}%!bMoQd9Jpp-OLGj0|nfIj{huvlpyTPz#To(5;n6P$PGiaZMS)$SRwQEZ1i) zekPW?pJE-)H8VnZ7S2F*B}{FKN=-FS96rH8I$&!vm#5t$u>KTSA?WqIb_H z2QSp&K7PJK9c!P;i!WA(Lf;>OD|h?7K-a~fEhEM-`2D>)uGv?BlFciiN3kk@&1LNb zb0SyIF{aYNNl4yirQjFm^=Ni=*lL8+z&340JM0Ol`Dxlpk2wD_=C|_a=FdN3AFcMb z$Z0_zcc1!x2HS}BjJ-%is&zS~A&Wvae{%WEZ~4Q!vpb7Q=52F0j6WrnZs{c4a|Ul2 z5q&m2wbw&%KEQE%1;}LElgtt&R)xfl|EuRektEQV)7 z{L45W+7y0V_}!|zIjM|4Ma!c7Nv%zl?Ms(LW6N+{zZ2sv4hb)i;ao9%d|zWv7Gz`b2^)U85q-Ez+M4Izjmv)8oTnuJ|D>b z5sWxWCpoIu`(s7Tl;&&F|AS^2)>!*Tf6ijn!JP>R(M-^pl> zFqkW(T`%1bxnZ*)KoNf?#+?W}j!&){1TL7K#d38`7X%36>E(TalMF_i0_1(RH1|gW z;&F*1Ne1HsfJ}l+;y@-mMt_E$g6SzFWf4IN!{49@4?5Xsl$tPRI1+%DGvK7dEuL4% zBWEyt*8Bl;@DGd*RIRpp!1_yUT=o^fkpF|Ii97+6N#-1jV5FrKGWR9RXFEFqT}Hxy zAyh8TPg8BkHa8c@yMKOzKdniW8{TynEyAtrE_3^{lyouk&WQJ{@rbIqo%iw=8vb{w zR(hfM?Bm-RHsu}C1?o~rnG>_!f@s$QPX$%H>z+@Veq`tc8QSrpA7YfBdjUI!VSHzG zDS3N=+I6`t@20ny1BHydXdrMjKZuFDFTgyM`S-mm;3|;~IVoYT2AJw(F$wdV0&2Q8m(+>mGSdrOGVH;UW z)+F&0_RpUd=0 z!Xx3hU9+Krc_@+*t@S6`@yb(F*lJ{n<6eFnzs~3*-5Khmxfsh`=R`|*_3yXD zGfDf3a=AshL0W}54i&$Ngto>$#&*7DG5T&~w49=4og0t|KP?v>8!TcOo(m@}KK)-9 zeXuNn)60{8bGq#hrHg{*ubv;0?;so3`9gKCfU4uaHH&U|iSr$OSK!#CuWrcq84p%o zD8FlG!o73+Mx)f&wI3qBlan(uY$uXjsjyTHqa|WVa+w}b*$U?1Hn%nU9*;hD90WxW z$ldC&PN*2U`VkU{_|+nA!_zh0-;NXh_>o#=LlXlmhd0x3(qbbQP)yI zY^6(x^A!mi%<~m+qq@+`gW9zc+wxqdZO!S|@Qg0P5{_p_TU8Rl`F99_Nw#1)9$C`7 zcz>@@*Q>h4dqR986!Id zrG9NwRSP?=v6u(J*i9({n(-Zfl?i>GaHBzTclR7JieUIfviyzgkVJ$8ji-O};qP+4 z)fKr2c&5ISt!ts`Lvv$GGWQyH?x`*Jh(1HSw{tUtwu9Hwj)@?~d1yaWvraUluN>*V z&{L5+mLo;ppw!|!3NNyXA({tz8Km!-89!+~tCYWe&S2r-TXNJZ;PcN{0PrlBM`~Xd zU!kt5lCU;{{aw9t&UC7V3uQ$Di4Q-IoWK;F=%e9ce(%)YfOZ!&?ZM-YYhou5@}1wS z3kLe9z8FNiks692@d{|m8SOwra^_FeSE4|KLrcX8TCR2+^12?uSF3>3g%wIj8;$(F z&*_u2!`S9;(6Wfx7toUKl-JS29){$8D&fIcQJE$*g{<_wyEl!JAnnz^ zV<71(98IK5fi72{W9EV1uW+afcBNmTkR{)7@TA(bfR`W5q?{=C=GNhzfaS2nxAdX8 zIIKGJBAQ-g-)!4-kaG5h9k6j_KYRIAlblDmuWn`NEX7sM6zD719pH+OFCZ)WfS%PJWz5;?hD&3eBE8MyAKzF*Eu#kH3 zgOXw#Tek_3`5p}flt1o5N1$WYf+}kx-u#dC?RMJdt8nQ3d9u>0u{Db_6b!9OMbWer z!i6e(4?46p8iw}nedH*kwa(n>l|ut5T^HM?qF*p~B9bw2j?~G#)u}K2uE$LdH4VXT z#+fY^Hr#q8@z%U9fbVSqJ(o`ETpMe84T~R3i@PhPXT8>w)1`2844)Zd8?vF)XU|BE zZuU&Grsh6u@AM=LxC5vC zY{<^;vpSEf){on=mR~qZ*IIp-7>P15!$7bZY z<~bwd$~`d4O~@}qWs_NSyV7{@L6=K^f;P4R{V!g0tM~;4k0Oktuo`B)A$FB`Qy_+A z#UQrwZSq;-x)QYPs>A6QD9UR5B<-shal8<8(t5qiy}4lb>60n_15@-f{mi03TWE3k zb18kqZLUYFia+SO{Lu}gdi5(_e;3`UF{O4u%oz1UCEvGFx~76=ql_A|;?z|a&H6zS z^_|CV(Zh{rZrP~YyqBxkSAf+kpikDZ@1^#qB0e;l*30bA5-UG$D^vhfqMu-HHDbC_OX+FF+nUP^oj1d3~3jdUCwUB)Nr1QRzQ1wH#o|B z>^D_KHFx3oZmN3D@5`WAm*NYqq5jGk_Uy%XJ%w6J2Slag1JWTX{=1m<<1BtzPdcZv z#KcCKQ&;oaj%a}@q_q~&Vt$#((g{x4IEcvHKm$gq_?BB~a50{9-!ubJRz$UQ<7wQOS8_#_W{NJWO6{R1 zy3&GUZimk^l4<6#i04a(A}>7S;StGvpz8OGGWo5p+yb@o;{-N?BK4^QMqtPD+@`B= zw)73GKxKiaIuyg(p)9Ym4WrJvs${lC^QQ1H;$STR#UT=2b2tm@o{MjSTm zF|=Lm7GiQvO#SOF@&V-Vfwthvj(#29b67`5zX5H0(?1F#doxi>o4M1K2*#f5ua>jU z)@s)*9&L6NGruc&)(q5AGc32+mWhwOJO+gsE&~EvNcHKZj$maF4}-^KembU|L3smz2eBC5N9h%VS zAB|$g*W-l2{NRwr$fN+8CcV{7DG%GQ)1Pp}h>rkyQTS>X1IwlwV)NNE{G_*+Ea*YD zgXl?ey%i`lAQJbEJ@iWsu+wn}ccj8nN06ZD^dTi;R{zUWlg!dr(7kYE} zXOD=866iZ*)LzS#A^%rqo1i(#zc`(DP-b(7pEUZus&#ADn6PyOcqWFkG}{RC3uUt_ z{<=6WMuW&i3Rl~ls$Xd++c(-*)71w2(T>mmU|PMUnfOy)C^pvT19M-jUWdsi_ewC? zA1+2=NJC^Ncc6~}q!MaQ^a>bKeETK$_xOy9U2t-D*2XmlI>}cXw%4QEyw3C;=Em72 zZI0Bn=wO~kgopH~vz2s8 zH*0T{v4DN?JEi^Ay9C*Xyp4;p(e+m7cvluyry2BM+d9cd&S9#KQif71{Ay1Kb{pE- z1kaFVDiMyUG;y^Eu*S&s9*^}ApL0Vwh{SM4@OZh{WmGi#5d*vkT!i#frhPO)angP+ zQ>vUpcf&O{My=d2IiF#?mrdala;>;(6p)oi9m;ZX^HI=l`Q5H>(s&hu! zA80Lk*u;1A3TS5sr2cDlpM*Zn*N5|<+BS#?Y0lifjWkXk;#qrFy2Y{Mh$u{1r=RHenhz0q2Agv-vJ(SQQe^X zRD!GUvtk#yVUwX11$Hg?isbso@6~YRypX#oj*r0F5MCD@upf@hD}W%cFU6iV zQnQojT+y-RF@<~Yg7^^K_Okw~s4P1d68gokUFYb{leG?ph!w`V>vCJ%x#7aKV=8NX zHbB1Jl3Sd!&=7lHrArGa%DzH0kpvunGIvTPFm;+Zt>C>3}7O1d*9P`uzMyYR$> zrEw?6e=e4V4a#nLSj0#dawEpn-&zyWujg$`PFKNHC5jvUsTtjKgIv!h2Bn(K2{}KQ z8hEni9X1W5&uP#`K#GIsN`M>uH*Q;Wy-0kfL17LaDb>xrJE#8oVY@-83T-WI>(esy zEY^pC?{=~!_NH3ZNfz#s9m|?e=fQ=waPD#6l1=>+D$)KPMU^riJ?%WMHk4{>)8O_i zu@tWFz@i1!D7HbT=Zlfh@709&m6Cvsk-@Ov*9ffl%^Z&lLB0A81qR%c*oiY} zB}cLL4E?70an6Oio;zaG-+8M-u^f>Dz?Yw!Rc-E5e@fZI%I`Hw1zsyxz<{1r|BQ5*)9DfQzkD zN$8Tof0it$ju*>Z)x~N}OEH>{0G%s1va@dIdxuqsEiaFucGZMd9m)CYkU#a^62w{L zQqG%h!hcLS#cFKQfexb?VKZk`5B$X(3o!_^Qm5S zKJtf#GpzU$oD4=obQTW!leC9$A@EfC5UcJg@~)%t9I^_FmTGPrJp1&Jzyw51llLN4 z_C`bz^DIOFAS`BxT@F2#o`eLjj62;Ge7i_|K5X~$fH@2`QfBes^w3}h9?Jll@HK6b z<&S@at|>L7{4@TXL;la{pZW!w&uW5s(p{XNCFVp%ip=+dPN$s8bdwQGuI~a~PBonH zvVX3hOS4^`sGgPRjdwIzV)P*SV_T;w4>^O?nIx-)p!?J3#s zG5N49r~0WmNeh4<%~1_9Y?FHs_*b!PzCop$x6sA>J>A(D1p~U$SA`{eunY8fITQbi z4{?!QES`6}KDDyiQ)d(O*Yd|>1|h^7r`9MFLshp#M9J+68Uq=}`kdYe^IkV!r=0#p z?Xw+KF$~CzzDhaYk6$WuoXF_a5oWD~x|cg4jfeynrhg7F9hGil;AEEji^ZX>jY2VD z)rqpev(B&sE+YM*IlCpR8{HTSB5#f0wX9u#&&f6+zq;sfq;Z&X=Wx5^NyIR-vLwaL zWf(Tv;%o0R9u;z@ymm5MXnZ%p)VyhoRo9f2pBRQzpw?!3GxmXs>=XkyNJ{Vc-oxT! zw)P|b%+z3*W@$0rIht-O?YKTvS3f1UWlz8B(w-JF z!pB8#dhc|R54A-?{0|a(3VZ+x3QhIZGT;+gi+2vscCpWmwn2v~!FKt^(+>7>Js{dG zm%SQNpU{cAyxYV9b^A7dV*Zt7%m+&`$}7-k!{a(<+)?045m!w1fKU^G;_z)q8hUhe zlJ)|2A5w)>GEF3~3?+m~%CMXBOZnEBPULGi{~Ig$Kj%IQtDu!^7q)!l6h zdKN`%!4djFFU*N-ZQ@Aj`Q$eIiDFRvy58i_a*6uN$~kgvF?P;U;xms|M$m2N6k&4M zx%xbL3$9{TWU6rM5_V#&@A4DVxv6S4xd>LsJWFdGFV;wu=K;AdB}p*z(WvvvFZP`= zgrNI)ec>G0HVINgETKs@Q8ye1a2EAk*@iQj8kpE zce!O-Yj&?5n!!Gh(!N{#qai9Q?yX`Ic?;|e+AgJ0k42N$(accVdiPVk)Ae_->O^*A{upFA9wa$Vq0W?CeY;*1YV{ zSDi|l-v{5BM5ooENP~#@m(KLWq4daK(A}{7ZkJzRa$oZmZDSV0-p3w7KvynWX|6cN zg|ab^Z95U{W88_{a4TO%*BheT4@`Jbl9)CD09610PD?K*)1UAC!@{iHtwHW!P}5x1 z8tfQ+S$gF|c3EL^GvY=~f!+*>2u!RE(Nl6j&6r`8?r~-M)oLvDWZ?EdURnd%>(QQ! zv6*tueAnv)n6#tyxAzJ!E$t89Yg|dYHzKK1CI`csk{_4Fb{b{cLV(1u) zAy+~>I{_m~P+9TSJT=75l^v};nmVAU=Lehoo#a{3=b45_)x3x`-lCa&?pIrryiaK0 zBUnxF=M)GSdT!S#u=iw^)ZV`}FzK8?H8y%1ASzWOTge^cjAH5#?bB2z6QE7z?RRT} z9&29#zh~wwoUF26iaJD|$!3>RAA@sB+{tq7?sX&~3N_+rDfckn3TwP& z-T=h27Hb1(7Js#$83p-g}-thZ2qNgr{zAzaGg?=V*m1=IlJ z^g7kd^^^L@RFr*QsDfcm0dewfz4jg{N`TzarVR7^HmMAqq!cxZ;|COqXN}GvWGQcM z^yuzAggu!aFA6!!>H=wsz(PV3f>pQ&j7}e`YUvIpJY6!=cxcwc&7d6Q>Wb&2Fl1c- zKB-YgOtVBFKlv>G+awV2XaWmcrng-vmk8EUB*nR1kk;N%T zcv`b;aT)Q4T;10-Z4;TbYSNI^sL)#bl@;R;wzbVQqA*d#OJz3UUF^%B7^fzP2$y0{ zdZ4hos+>4HLFUjUN!_)+`O!1M^t2vCO-(iaj*Q{AhFE6u^mo=Dg*#y-dyx$eNU;ad zv=1-3L;N3mKUIY@T#}a}H?}KAT7EFsN)ZaN|HkRth`a_kMoA{xW)3569q5?xf5)_1 z0NY^7FsxX(;o{!vqze$R-<|`VvrbF|`Qh`-)@(ifBTTCz*+MavPy6k4ok`i&kl|y$ zu%$UR_MWnwdeCPmugW;@F#q4W?}VZkfLQ8}>{_R67E9jmt>w$m0(vWmvIOy@fQcwS zN~1$Z~axa}}ACvzgKO_Z21Z&=OktN3Cs=O!_9AE zU-cJv(I!}}VSmT5p|3ezjMwuqp3y;5_I^-PtRxlyBQxx%&C9c_??fE2Wm#j@x&N@p zKoJvkbG_AEVTC@S5Ir5Xy~i?Hko?@su)~53H@Lg$v1$6uSU6_}2j9lrZk8rySo^YS z-R#1xPMYaV9%i_6G47f$h{mWRG3w|t7Nx-@f%A!xMb?%q;CN?C`B2+Jjb<+gp*-vf);kFXUpcU?9p&Y81sa-#jHcx4xUDn^}`xr2SGG60f1v4#cYq8fD~ zxRz|W4LA51)dIOF?hxD?Dy99q27lxBsAG7v5VPz`M04*XOOa@AtmaCrH&CDA z^*bXpZB3=_fd8qy_=u0z4ubpE)#Lq}J=*~t(^&NH(BR#=HXmUXNhToyVl1+6Hy zBk$V30v1&{4U>fHEJW67#RQMNxe4{_ZFmrt z-e*GU|vaSzA9Z;zD`mn53M`n)yy|KnF?+ zddfgSi_-l!B{Imk&PH{E)-^!?rUxt)ce3LDfcc+0M^is2J>ghX^p6B;<&$1ehH64&w@R7rIlQ*^8%_nT1zwYkRSHTetd>ob2 zOt-!_MNSkIE{bciMFy}4%ZVk^oy&=RJ&?2M$?6YUb$OgZ*q&IUk=0dga!MgvTX*%q z8mxfNuTthEI?t1gL)?_{QECD`L>N_AKOXE0_`pDt!2qRLl}0A{Fx-75;)Vd_X}12U zJh|_AjX{Z?JsSs#1U0CO*z9jvGZ=tf(?~ZGz<1KzmZ3;$_zIvVrZ1)8W>DpjoLQ59 z4+IF8j@YqIQRpUl_Z4R|sOCzVH3jQ=fz&#AOP(X@Wc|5zHWq?`0AE7}alk6snbM&% z&#Y1SWiO{B8eH`7n}PvZrh#l~(8i6?Xc|dJHK$l09s?XJjtl;-Ap@e_OnMw*I-OF| z9mN|ad=|c89H3`_(u`=Ymtn#s;7vcWn!((-Ab}!d)YjBHn^_Uz64hK{%;~M@X_{y? zVtFPoAU^uor~(_cwHL#_^(Ig9cW^SAjMcE3vOF=QYezDe`WK#ibhB*tb)mcU>>w&c zWC)Kz6)|l`c|1VXX{XDF^Gc?@%>QS{?Hj%}EtQ$H_@9VR seLNy@ACKZ(R+WHwzqjQh76`vIfPQ=2irkjF>Vy#zi$d`j174T^2i!eVX8-^I literal 0 HcmV?d00001 diff --git a/vendor/assets/javascripts/bootstrap-markdown.js b/vendor/assets/javascripts/bootstrap-markdown.js new file mode 100644 index 000000000..eb380aeef --- /dev/null +++ b/vendor/assets/javascripts/bootstrap-markdown.js @@ -0,0 +1 @@ +//= require bootstrap-markdown/bootstrap-markdown.js diff --git a/vendor/assets/javascripts/bootstrap-markdown/bootstrap-markdown.js b/vendor/assets/javascripts/bootstrap-markdown/bootstrap-markdown.js new file mode 100644 index 000000000..21e8c60ea --- /dev/null +++ b/vendor/assets/javascripts/bootstrap-markdown/bootstrap-markdown.js @@ -0,0 +1,1390 @@ +/* =================================================== + * bootstrap-markdown.js v2.10.0 + * http://github.com/toopay/bootstrap-markdown + * =================================================== + * Copyright 2013-2016 Taufan Aditya + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + +(function(factory){ + if (typeof define === "function" && define.amd) { + //RequireJS + define(["jquery"], factory); + } else if (typeof exports === 'object') { + //Backbone.js + factory(require('jquery')); + } else { + //Jquery plugin + factory(jQuery); + } +}(function($){ + "use strict"; // jshint ;_; + + /* MARKDOWN CLASS DEFINITION + * ========================== */ + + var Markdown = function (element, options) { + // @TODO : remove this BC on next major release + // @see : https://github.com/toopay/bootstrap-markdown/issues/109 + var opts = ['autofocus', 'savable', 'hideable', 'width', + 'height', 'resize', 'iconlibrary', 'language', + 'footer', 'fullscreen', 'hiddenButtons', 'disabledButtons']; + $.each(opts,function(_, opt){ + if (typeof $(element).data(opt) !== 'undefined') { + options = typeof options == 'object' ? options : {} + options[opt] = $(element).data(opt) + } + }); + // End BC + + // Class Properties + this.$ns = 'bootstrap-markdown'; + this.$element = $(element); + this.$editable = {el:null, type:null,attrKeys:[], attrValues:[], content:null}; + this.$options = $.extend(true, {}, $.fn.markdown.defaults, options, this.$element.data('options')); + this.$oldContent = null; + this.$isPreview = false; + this.$isFullscreen = false; + this.$editor = null; + this.$textarea = null; + this.$handler = []; + this.$callback = []; + this.$nextTab = []; + + this.showEditor(); + }; + + Markdown.prototype = { + + constructor: Markdown + + , __alterButtons: function(name,alter) { + var handler = this.$handler, isAll = (name == 'all'),that = this; + + $.each(handler,function(k,v) { + var halt = true; + if (isAll) { + halt = false; + } else { + halt = v.indexOf(name) < 0; + } + + if (halt === false) { + alter(that.$editor.find('button[data-handler="'+v+'"]')); + } + }); + } + + , __buildButtons: function(buttonsArray, container) { + var i, + ns = this.$ns, + handler = this.$handler, + callback = this.$callback; + + for (i=0;i', { + 'class': 'btn-group' + }); + + for (z=0;z'); + buttonContainer.text(' ' + this.__localize(btnText)).addClass('btn-default btn-sm').addClass(btnClass); + if(btnClass.match(/btn\-(primary|success|info|warning|danger|link)/)){ + buttonContainer.removeClass('btn-default'); + } + buttonContainer.attr({ + 'type': 'button', + 'title': this.__localize(button.title) + hotkeyCaption, + 'tabindex': tabIndex, + 'data-provider': ns, + 'data-handler': buttonHandler, + 'data-hotkey': hotkey + }); + if (button.toggle === true){ + buttonContainer.attr('data-toggle', 'button'); + } + buttonIconContainer = $(''); + buttonIconContainer.addClass(buttonIcon); + buttonIconContainer.prependTo(buttonContainer); + + // Attach the button object + btnGroupContainer.append(buttonContainer); + + // Register handler and callback + handler.push(buttonHandler); + callback.push(button.callback); + } + + // Attach the button group into container dom + container.append(btnGroupContainer); + } + } + + return container; + } + , __setListener: function() { + // Set size and resizable Properties + var hasRows = typeof this.$textarea.attr('rows') !== 'undefined', + maxRows = this.$textarea.val().split("\n").length > 5 ? this.$textarea.val().split("\n").length : '5', + rowsVal = hasRows ? this.$textarea.attr('rows') : maxRows; + + this.$textarea.attr('rows',rowsVal); + if (this.$options.resize) { + this.$textarea.css('resize',this.$options.resize); + } + + this.$textarea.on({ + 'focus' : $.proxy(this.focus, this), + 'keyup' : $.proxy(this.keyup, this), + 'change' : $.proxy(this.change, this), + 'select' : $.proxy(this.select, this) + }); + + if (this.eventSupported('keydown')) { + this.$textarea.on('keydown', $.proxy(this.keydown, this)); + } + + if (this.eventSupported('keypress')) { + this.$textarea.on('keypress', $.proxy(this.keypress, this)) + } + + // Re-attach markdown data + this.$textarea.data('markdown',this); + } + + , __handle: function(e) { + var target = $(e.currentTarget), + handler = this.$handler, + callback = this.$callback, + handlerName = target.attr('data-handler'), + callbackIndex = handler.indexOf(handlerName), + callbackHandler = callback[callbackIndex]; + + // Trigger the focusin + $(e.currentTarget).focus(); + + callbackHandler(this); + + // Trigger onChange for each button handle + this.change(this); + + // Unless it was the save handler, + // focusin the textarea + if (handlerName.indexOf('cmdSave') < 0) { + this.$textarea.focus(); + } + + e.preventDefault(); + } + + , __localize: function(string) { + var messages = $.fn.markdown.messages, + language = this.$options.language; + if ( + typeof messages !== 'undefined' && + typeof messages[language] !== 'undefined' && + typeof messages[language][string] !== 'undefined' + ) { + return messages[language][string]; + } + return string; + } + + , __getIcon: function(src) { + return typeof src == 'object' ? src[this.$options.iconlibrary] : src; + } + + , setFullscreen: function(mode) { + var $editor = this.$editor, + $textarea = this.$textarea; + + if (mode === true) { + $editor.addClass('md-fullscreen-mode'); + $('body').addClass('md-nooverflow'); + this.$options.onFullscreen(this); + } else { + $editor.removeClass('md-fullscreen-mode'); + $('body').removeClass('md-nooverflow'); + + if (this.$isPreview == true) this.hidePreview().showPreview() + } + + this.$isFullscreen = mode; + $textarea.focus(); + } + + , showEditor: function() { + var instance = this, + textarea, + ns = this.$ns, + container = this.$element, + originalHeigth = container.css('height'), + originalWidth = container.css('width'), + editable = this.$editable, + handler = this.$handler, + callback = this.$callback, + options = this.$options, + editor = $( '
', { + 'class': 'md-editor', + click: function() { + instance.focus(); + } + }); + + // Prepare the editor + if (this.$editor === null) { + // Create the panel + var editorHeader = $('
', { + 'class': 'md-header btn-toolbar' + }); + + // Merge the main & additional button groups together + var allBtnGroups = []; + if (options.buttons.length > 0) allBtnGroups = allBtnGroups.concat(options.buttons[0]); + if (options.additionalButtons.length > 0) { + // iterate the additional button groups + $.each(options.additionalButtons[0], function(idx, buttonGroup){ + + // see if the group name of the addional group matches an existing group + var matchingGroups = $.grep(allBtnGroups, function(allButtonGroup, allIdx){ + return allButtonGroup.name === buttonGroup.name; + }); + + // if it matches add the addional buttons to that group, if not just add it to the all buttons group + if(matchingGroups.length > 0) { + matchingGroups[0].data = matchingGroups[0].data.concat(buttonGroup.data); + } else { + allBtnGroups.push(options.additionalButtons[0][idx]); + } + + }); + } + + // Reduce and/or reorder the button groups + if (options.reorderButtonGroups.length > 0) { + allBtnGroups = allBtnGroups + .filter(function(btnGroup) { + return options.reorderButtonGroups.indexOf(btnGroup.name) > -1; + }) + .sort(function(a, b) { + if (options.reorderButtonGroups.indexOf(a.name) < options.reorderButtonGroups.indexOf(b.name)) return -1; + if (options.reorderButtonGroups.indexOf(a.name) > options.reorderButtonGroups.indexOf(b.name)) return 1; + return 0; + }); + } + + // Build the buttons + if (allBtnGroups.length > 0) { + editorHeader = this.__buildButtons([allBtnGroups], editorHeader); + } + + if (options.fullscreen.enable) { + editorHeader.append('
').on('click', '.md-control-fullscreen', function(e) { + e.preventDefault(); + instance.setFullscreen(true); + }); + } + + editor.append(editorHeader); + + // Wrap the textarea + if (container.is('textarea')) { + container.before(editor); + textarea = container; + textarea.addClass('md-input'); + editor.append(textarea); + } else { + var rawContent = (typeof toMarkdown == 'function') ? toMarkdown(container.html()) : container.html(), + currentContent = $.trim(rawContent); + + // This is some arbitrary content that could be edited + textarea = $('