diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..3fd51a377 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle +/vendor/cache + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp + +# uploads and public assets +/public/uploads +/public/assets + +# MacOS and IDE files +.idea +.DS_Store + +# machine specific database config +/config/database.yml diff --git a/.rspec b/.rspec new file mode 100644 index 000000000..b7df9466d --- /dev/null +++ b/.rspec @@ -0,0 +1,4 @@ +--color +--require spec_helper +--format documentation +--backtrace diff --git a/.ruby-gemset b/.ruby-gemset new file mode 100644 index 000000000..9fc221411 --- /dev/null +++ b/.ruby-gemset @@ -0,0 +1 @@ +fabmanager diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 000000000..58f65ad57 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +ruby-2.2.1 diff --git a/Capfile b/Capfile new file mode 100644 index 000000000..9981cdc91 --- /dev/null +++ b/Capfile @@ -0,0 +1,6 @@ +load 'deploy' +# Uncomment if you are using Rails' asset pipeline +load 'deploy/assets' +load 'config/deploy' # remove this line to skip loading any of the default tasks + +require 'capistrano/sidekiq' \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..1d0f8e89a --- /dev/null +++ b/Gemfile @@ -0,0 +1,113 @@ +source 'https://rubygems.org' + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.1' +# Use SCSS for stylesheets +gem 'sass-rails', '5.0.1' +gem 'compass-rails', '2.0.4' + +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .js.coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/sstephenson/execjs#readme for more supported runtimes +gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +gem 'forgery' +gem 'responders', '~> 2.0' + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' + + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' + + gem 'factory_girl_rails' + gem 'rspec-rails' + gem 'spring-commands-rspec' + + gem 'guard-rspec', require: false +end + +group :development do + # Preview mail in the browser + gem 'letter_opener' + gem 'awesome_print' + + gem "puma" + gem 'foreman' + + gem 'capistrano' + gem 'rvm-capistrano', require: false + gem 'capistrano-sidekiq', require: false +end + +group :test do + gem 'database_cleaner' + gem 'faker' +end + +group :production do + gem 'unicorn' + gem 'rails_12factor' +end + +gem 'seed_dump' + +gem 'pg' + +gem 'devise' +gem 'devise-async' + +gem 'rolify' + +gem 'kaminari' + +gem 'figaro' + +gem 'bootstrap-sass' +gem 'font-awesome-rails' + +gem 'angularjs-rails' + +# Image processing ruby wrapper for ImageMagick +gem 'mini_magick' +# upload files +gem 'carrierwave' + +gem 'twitter' +gem 'twitter-text' + +# slug url +gem 'friendly_id', '~> 5.1.0' + +# state machine +gem 'aasm' + +# Background job processing +gem 'sidekiq' +gem 'sinatra', require: false +# Recurring jobs for Sidekiq +gem 'sidekiq-cron' + +gem 'recurrence' + +# Fork de la gem avec support Attachments +gem 'mandrill_dm', github: 'AbleTech/mandrill_dm' + +gem 'disqus_api' + +gem 'notify_with' + +gem 'pundit' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..ec4903259 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,452 @@ +GIT + remote: git://github.com/AbleTech/mandrill_dm.git + revision: 2bbb35dd81887bb915f606699d63a723b450711d + specs: + mandrill_dm (1.1.0) + mandrill-api (~> 1.0.51) + +GEM + remote: https://rubygems.org/ + specs: + aasm (4.1.0) + actionmailer (4.2.1) + actionpack (= 4.2.1) + actionview (= 4.2.1) + activejob (= 4.2.1) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.1) + actionview (= 4.2.1) + activesupport (= 4.2.1) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.1) + actionview (4.2.1) + activesupport (= 4.2.1) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.1) + activejob (4.2.1) + activesupport (= 4.2.1) + globalid (>= 0.3.0) + activemodel (4.2.1) + activesupport (= 4.2.1) + builder (~> 3.1) + activerecord (4.2.1) + activemodel (= 4.2.1) + activesupport (= 4.2.1) + arel (~> 6.0) + activesupport (4.2.1) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.3.8) + angularjs-rails (1.3.15) + arel (6.0.0) + autoprefixer-rails (5.1.8) + execjs + json + awesome_print (1.6.1) + bcrypt (3.1.10) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) + bootstrap-sass (3.3.4.1) + autoprefixer-rails (>= 5.0.0.1) + sass (>= 3.2.19) + buftok (0.2.0) + builder (3.2.2) + byebug (4.0.4) + columnize (= 0.9.0) + capistrano (2.15.5) + highline + net-scp (>= 1.0.0) + net-sftp (>= 2.0.0) + net-ssh (>= 2.0.14) + net-ssh-gateway (>= 1.1.0) + capistrano-sidekiq (0.5.2) + capistrano + sidekiq + carrierwave (0.10.0) + activemodel (>= 3.2.0) + activesupport (>= 3.2.0) + json (>= 1.7) + mime-types (>= 1.16) + celluloid (0.16.0) + timers (~> 4.0.0) + chunky_png (1.3.4) + coderay (1.1.0) + coffee-rails (4.1.0) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.0) + coffee-script (2.3.0) + coffee-script-source + execjs + coffee-script-source (1.9.1) + columnize (0.9.0) + compass (1.0.3) + chunky_png (~> 1.2) + compass-core (~> 1.0.2) + compass-import-once (~> 1.0.5) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9) + sass (>= 3.3.13, < 3.5) + compass-core (1.0.3) + multi_json (~> 1.0) + sass (>= 3.3.0, < 3.5) + compass-import-once (1.0.5) + sass (>= 3.2, < 3.5) + compass-rails (2.0.4) + compass (~> 1.0.0) + sass-rails (<= 5.0.1) + sprockets (< 2.13) + connection_pool (2.1.3) + database_cleaner (1.4.1) + debug_inspector (0.0.2) + devise (3.4.1) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 3.2.6, < 5) + responders + thread_safe (~> 0.1) + warden (~> 1.2.3) + devise-async (0.9.0) + devise (~> 3.2) + diff-lcs (1.2.5) + disqus_api (0.0.4) + activesupport (>= 3.0.0) + faraday (>= 0.8) + faraday_middleware (>= 0.9) + equalizer (0.0.11) + erubis (2.7.0) + excon (0.45.1) + execjs (2.4.0) + factory_girl (4.5.0) + activesupport (>= 3.0.0) + factory_girl_rails (4.5.0) + factory_girl (~> 4.5.0) + railties (>= 3.0.0) + faker (1.4.3) + i18n (~> 0.5) + faraday (0.9.1) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.9.1) + faraday (>= 0.7.4, < 0.10) + ffi (1.9.8) + figaro (1.1.0) + thor (~> 0.14) + font-awesome-rails (4.3.0.0) + railties (>= 3.2, < 5.0) + foreman (0.78.0) + thor (~> 0.19.1) + forgery (0.6.0) + formatador (0.2.5) + friendly_id (5.1.0) + activerecord (>= 4.0.0) + globalid (0.3.3) + activesupport (>= 4.1.0) + guard (2.12.5) + formatador (>= 0.2.4) + listen (~> 2.7) + lumberjack (~> 1.0) + nenv (~> 0.1) + notiffany (~> 0.0) + pry (>= 0.9.12) + shellany (~> 0.0) + thor (>= 0.18.1) + guard-compat (1.2.1) + guard-rspec (4.5.0) + guard (~> 2.1) + guard-compat (~> 1.1) + rspec (>= 2.99.0, < 4.0) + highline (1.7.1) + hike (1.2.3) + hitimes (1.2.2) + http (0.6.4) + http_parser.rb (~> 0.6.0) + http_parser.rb (0.6.0) + i18n (0.7.0) + jbuilder (2.2.12) + activesupport (>= 3.0.0, < 5) + multi_json (~> 1.2) + jquery-rails (4.0.3) + rails-dom-testing (~> 1.0) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.2) + kaminari (0.16.3) + actionpack (>= 3.0.0) + activesupport (>= 3.0.0) + kgio (2.9.3) + launchy (2.4.3) + addressable (~> 2.3) + letter_opener (1.3.0) + launchy (~> 2.2) + libv8 (3.16.14.7) + listen (2.10.0) + celluloid (~> 0.16.0) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9) + loofah (2.0.1) + nokogiri (>= 1.5.9) + lumberjack (1.0.9) + mail (2.6.3) + mime-types (>= 1.16, < 3) + mandrill-api (1.0.53) + excon (>= 0.16.0, < 1.0) + json (>= 1.7.7, < 2.0) + memoizable (0.4.2) + thread_safe (~> 0.3, >= 0.3.1) + method_source (0.8.2) + mime-types (2.4.3) + mini_magick (4.2.0) + mini_portile (0.6.2) + minitest (5.5.1) + multi_json (1.11.0) + multipart-post (2.0.0) + naught (1.0.0) + nenv (0.2.0) + net-scp (1.2.1) + net-ssh (>= 2.6.5) + net-sftp (2.1.2) + net-ssh (>= 2.6.5) + net-ssh (2.9.2) + net-ssh-gateway (1.2.0) + net-ssh (>= 2.6.5) + nokogiri (1.6.6.2) + mini_portile (~> 0.6.0) + notiffany (0.0.6) + nenv (~> 0.1) + shellany (~> 0.0) + notify_with (0.0.2) + jbuilder (~> 2.0) + rails (>= 4.2.0) + responders (~> 2.0) + orm_adapter (0.5.0) + pg (0.18.1) + pry (0.10.1) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) + puma (2.11.1) + rack (>= 1.1, < 2.0) + pundit (1.0.0) + activesupport (>= 3.0.0) + rack (1.6.0) + rack-protection (1.5.3) + rack + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.1) + actionmailer (= 4.2.1) + actionpack (= 4.2.1) + actionview (= 4.2.1) + activejob (= 4.2.1) + activemodel (= 4.2.1) + activerecord (= 4.2.1) + activesupport (= 4.2.1) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.1) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.6) + activesupport (>= 4.2.0.beta, < 5.0) + nokogiri (~> 1.6.0) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.2) + loofah (~> 2.0) + rails_12factor (0.0.3) + rails_serve_static_assets + rails_stdout_logging + rails_serve_static_assets (0.0.4) + rails_stdout_logging (0.0.3) + railties (4.2.1) + actionpack (= 4.2.1) + activesupport (= 4.2.1) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + raindrops (0.13.0) + rake (10.4.2) + rb-fsevent (0.9.4) + rb-inotify (0.9.5) + ffi (>= 0.5.0) + rdoc (4.2.0) + recurrence (1.3.0) + activesupport + i18n + redis (3.2.1) + redis-namespace (1.5.2) + redis (~> 3.0, >= 3.0.4) + ref (1.0.5) + responders (2.1.0) + railties (>= 4.2.0, < 5) + rolify (4.0.0) + rspec (3.2.0) + rspec-core (~> 3.2.0) + rspec-expectations (~> 3.2.0) + rspec-mocks (~> 3.2.0) + rspec-core (3.2.2) + rspec-support (~> 3.2.0) + rspec-expectations (3.2.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.2.0) + rspec-mocks (3.2.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.2.0) + rspec-rails (3.2.1) + actionpack (>= 3.0, < 4.3) + activesupport (>= 3.0, < 4.3) + railties (>= 3.0, < 4.3) + rspec-core (~> 3.2.0) + rspec-expectations (~> 3.2.0) + rspec-mocks (~> 3.2.0) + rspec-support (~> 3.2.0) + rspec-support (3.2.2) + rufus-scheduler (3.0.9) + tzinfo + rvm-capistrano (1.5.6) + capistrano (~> 2.15.4) + sass (3.4.13) + sass-rails (5.0.1) + railties (>= 4.0.0, < 5.0) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (~> 1.1) + sdoc (0.4.1) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + seed_dump (3.2.2) + activerecord (~> 4) + activesupport (~> 4) + shellany (0.0.1) + sidekiq (3.3.3) + celluloid (>= 0.16.0) + connection_pool (>= 2.1.1) + json + redis (>= 3.0.6) + redis-namespace (>= 1.3.1) + sidekiq-cron (0.2.0) + rufus-scheduler (>= 2.0.24) + sidekiq (>= 2.17.3) + tilt (< 2.0.0) + simple_oauth (0.3.1) + sinatra (1.4.6) + rack (~> 1.4) + rack-protection (~> 1.4) + tilt (>= 1.3, < 3) + slop (3.6.0) + spring (1.3.3) + spring-commands-rspec (1.0.4) + spring (>= 0.9.1) + sprockets (2.12.3) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sprockets-rails (2.2.4) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (>= 2.8, < 4.0) + therubyracer (0.12.1) + libv8 (~> 3.16.14.0) + ref + thor (0.19.1) + thread_safe (0.3.5) + tilt (1.4.1) + timers (4.0.1) + hitimes + twitter (5.14.0) + addressable (~> 2.3) + buftok (~> 0.2.0) + equalizer (~> 0.0.9) + faraday (~> 0.9.0) + http (~> 0.6.0) + http_parser.rb (~> 0.6.0) + json (~> 1.8) + memoizable (~> 0.4.0) + naught (~> 1.0) + simple_oauth (~> 0.3.0) + twitter-text (1.11.0) + unf (~> 0.1.0) + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (2.7.1) + execjs (>= 0.3.0) + json (>= 1.8.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.6) + unicorn (4.8.3) + kgio (~> 2.6) + rack + raindrops (~> 0.7) + warden (1.2.3) + rack (>= 1.0) + web-console (2.1.2) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + aasm + angularjs-rails + awesome_print + bootstrap-sass + byebug + capistrano + capistrano-sidekiq + carrierwave + coffee-rails (~> 4.1.0) + compass-rails (= 2.0.4) + database_cleaner + devise + devise-async + disqus_api + factory_girl_rails + faker + figaro + font-awesome-rails + foreman + forgery + friendly_id (~> 5.1.0) + guard-rspec + jbuilder (~> 2.0) + jquery-rails + kaminari + letter_opener + mandrill_dm! + mini_magick + notify_with + pg + puma + pundit + rails (= 4.2.1) + rails_12factor + recurrence + responders (~> 2.0) + rolify + rspec-rails + rvm-capistrano + sass-rails (= 5.0.1) + sdoc (~> 0.4.0) + seed_dump + sidekiq + sidekiq-cron + sinatra + spring + spring-commands-rspec + therubyracer + twitter + twitter-text + uglifier (>= 1.3.0) + unicorn + web-console (~> 2.0) diff --git a/Guardfile b/Guardfile new file mode 100644 index 000000000..4301edb3d --- /dev/null +++ b/Guardfile @@ -0,0 +1,86 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +## Uncomment and set this to only include directories you want to watch +# directories %w(app lib config test spec features) + +## Uncomment to clear the screen before every task +# clearing :on + +## Guard internally checks for changes in the Guardfile and exits. +## If you want Guard to automatically start up again, run guard in a +## shell loop, e.g.: +## +## $ while bundle exec guard; do echo "Restarting Guard..."; done +## +## Note: if you are using the `directories` clause above and you are not +## watching the project directory ('.'), then you will want to move +## the Guardfile to a watched dir and symlink it back, e.g. +# +# $ mkdir config +# $ mv Guardfile config/ +# $ ln -s config/Guardfile . +# +# and, you'll have to watch "config/Guardfile" instead of "Guardfile" + +# Note: The cmd option is now required due to the increasing number of ways +# rspec may be run, below are examples of the most common uses. +# * bundler: 'bundle exec rspec' +# * bundler binstubs: 'bin/rspec' +# * spring: 'bin/rspec' (This will use spring if running and you have +# installed the spring binstubs per the docs) +# * zeus: 'zeus rspec' (requires the server to be started separately) +# * 'just' rspec: 'rspec' + +guard :rspec, cmd: "bundle exec spring rspec" do + require "guard/rspec/dsl" + dsl = Guard::RSpec::Dsl.new(self) + + # Feel free to open issues for suggestions and improvements + + # RSpec files + rspec = dsl.rspec + watch(rspec.spec_helper) { rspec.spec_dir } + watch(rspec.spec_support) { rspec.spec_dir } + watch(rspec.spec_files) + + # Ruby files + ruby = dsl.ruby + dsl.watch_spec_files_for(ruby.lib_files) + + # Rails files + rails = dsl.rails(view_extensions: %w(erb haml slim)) + dsl.watch_spec_files_for(rails.app_files) + dsl.watch_spec_files_for(rails.views) + + watch(rails.controllers) do |m| + [ + rspec.spec.("routing/#{m[1]}_routing"), + rspec.spec.("controllers/#{m[1]}_controller"), + rspec.spec.("acceptance/#{m[1]}") + ] + end + + # Rails config changes + watch(rails.spec_helper) { rspec.spec_dir } + watch(rails.routes) { "#{rspec.spec_dir}/routing" } + watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" } + + # Capybara features specs + watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") } + + # Turnip features and steps + watch(%r{^spec/acceptance/(.+)\.feature$}) + watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m| + Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance" + end + + watch('spec/spec_helper.rb') { "spec" } + watch('config/routes.rb') { "spec/routing" } + watch('app/controllers/application_controller.rb') { "spec/controllers" } + watch(%r{^spec/.+_spec\.rb$}) + watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } + watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" } + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] } +end diff --git a/Procfile b/Procfile new file mode 100644 index 000000000..fdfc448f5 --- /dev/null +++ b/Procfile @@ -0,0 +1,2 @@ +web: bundle exec rails server puma -p $PORT +worker: bundle exec sidekiq -C ./config/sidekiq.yml diff --git a/README.md b/README.md new file mode 100644 index 000000000..dd9fc255b --- /dev/null +++ b/README.md @@ -0,0 +1,127 @@ +# README + +This project is the FabLab Manager web application. + +The purpose of this web application is to allow users to document their FabLab projects. The FabLab also have the ability +to plan some events (workshops or courses) and to expose them to its users. + +This product can be extended to be used as a complete internal management system for a FabLab. + +The underlying technologies are: +- `Ruby on Rails` for the backend application (server RESTful API) +- `AngularJS` for the frontend application (web-based graphical user interface) + + + +## 1. Configuration + +The following files must be filled with the correct configuration to allow FabManager to run correctly: + +- config/environments/production.rb + - `mandrill` -> change this if you're using a different mailing system + +- config/environments/staging.rb + - `config.action_mailer.default_url_options` -> change the URL according to the staging deployment url + - `mandrill` -> change this if you're using a different mailing system + +- config/application.yml + - `DEVISE_KEY` -> generate any secret phrase to secure the Devise authentication. You can use the `$ rake secret` command for this purpose. + - `SECRET_KEY_BASE` -> generate any secret phrase here to prevent XSS attacks. You can use the `$ rake secret` command for this purpose. + - `DEFAULT_MAIL_FROM` -> default e-mail address from which the emails are sent + - `MANDRILL_USERNAME` -> if you plan to use mandrill + - `MANDRILL_APIKEY` -> if you plan to use mandrill + - `TWITTER_NAME` -> twitter api configuration + - `TWITTER_CONSUMER_KEY` -> twitter api configuration + - `TWITTER_CONSUMER_SECRET` -> twitter api configuration + - `TWITTER_ACCESS_TOKEN` -> twitter api configuration + - `TWITTER_ACCESS_TOKEN_SECRET` -> twitter api configuration + - `GOOGLE_ANALYTICS_ACCOUNT` -> Google analytics account identifier (if you want to use GA) + - `APPLICATION_ROOT_URL` -> The public URL where you application is deployed in production (eg. fablab.lacasemate.com) + +- config/mandrill.rb + You may change this if you don't want to use mandrill as your production mailing system + +- config/database.yml.default + Copy/Paste this file to `config/database.yml` and modify the configuration according to your postgreSQL configuration + +- config/disqus_api.yml + Insert here your identifiers for the Disqus API + + + +## 2. Setup a development environment + +1. Install RVM with latest ruby version + See http://rvm.io/rvm/install + +2. Retrieve the project from Git + `$ git clone git@github.com:LaCasemate/fab-manager.git` + +3. Install the dependencies + - Ubuntu: `$ sudo apt-get install libpq-dev postgresql redis-server imagemagick` + - MacOS: `$ brew install postgresql redis imagemagick` + +4. Init the RVM instance and check it was correctly configured + ``` + $ cd fab-manager + $ rvm current + ``` + +5. Setup the project requirements + `$ bundle install` + +6. Build the database. You may have to configure your postgreSQL instance before, as described in chapter `3.2 Setup the FabManager database in PostgreSQL` + `$ rake db:setup` + +7. Create the pids folder used by sidekiq. If you want to use a different location, you can configure it in `config/sidekiq.yml` + `$ mkdir -p tmp/pids` + +8. Configure the application environment variables, as explained in chapter `1. Configuration` + +9. Start the development web server + `$ foreman s -p 3000` + + + +## 3. PostgreSQL + +### 3.1 Launch PostgreSQL on MacOS + + $ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents + $ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist + + The first command will start postgresql at login with launchd. The second will load postgresql now. + +### 3.2 Setup the FabManager database in PostgreSQL + +1. Login as the postgres user + `$ sudo -i -u postgres` + +2. Run the postgreSQL administration command line interface + `$ psql` + +3. Create a new user in postgres (in this example, the user will be named "sleede") + `# CREATE USER sleede;` + +4. Grant him the right to create databases + `# ALTER ROLE sleede WITH CREATEDB;` + +5. Then create the fablab database + `# CREATE DATABASE fabmanager_development OWNER sleede;` + +6. To finish, attribute a password to this user + `# ALTER USER sleede WITH ENCRYPTED PASSWORD 'sleede';` + + + +## 4. Know issues + + If you encounter a problem with bundler (unable to run `$ rails c` or `$ rails g`), you can fix it running the following commands: + + $ bundle pack + $ bundle install --path vendor/cache + + + +## 5. Related Documentation +- Angular-Bootstrap: http://angular-ui.github.io/bootstrap/ diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..ba6b733dd --- /dev/null +++ b/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/app/assets/images/.keep b/app/assets/images/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/assets/images/about-fablab.jpg b/app/assets/images/about-fablab.jpg new file mode 100644 index 000000000..4f8abb2dd Binary files /dev/null and b/app/assets/images/about-fablab.jpg differ diff --git a/app/assets/images/fablab-w.png b/app/assets/images/fablab-w.png new file mode 100644 index 000000000..e3f4e140c Binary files /dev/null and b/app/assets/images/fablab-w.png differ diff --git a/app/assets/images/fablab.jpg b/app/assets/images/fablab.jpg new file mode 100644 index 000000000..1f0db4733 Binary files /dev/null and b/app/assets/images/fablab.jpg differ diff --git a/app/assets/images/fablab.png b/app/assets/images/fablab.png new file mode 100644 index 000000000..680b29cad Binary files /dev/null and b/app/assets/images/fablab.png differ diff --git a/app/assets/images/favicons/favicon.ico b/app/assets/images/favicons/favicon.ico new file mode 100644 index 000000000..e835f896f Binary files /dev/null and b/app/assets/images/favicons/favicon.ico differ diff --git a/app/assets/images/fleche-left.png b/app/assets/images/fleche-left.png new file mode 100644 index 000000000..1098a2fd4 Binary files /dev/null and b/app/assets/images/fleche-left.png differ diff --git a/app/assets/images/no_avatar.png b/app/assets/images/no_avatar.png new file mode 100755 index 000000000..dbbb16222 Binary files /dev/null and b/app/assets/images/no_avatar.png differ diff --git a/app/assets/images/select2/select2-spinner.gif b/app/assets/images/select2/select2-spinner.gif new file mode 100644 index 000000000..5b33f7e54 Binary files /dev/null and b/app/assets/images/select2/select2-spinner.gif differ diff --git a/app/assets/images/select2/select2.png b/app/assets/images/select2/select2.png new file mode 100644 index 000000000..1d804ffb9 Binary files /dev/null and b/app/assets/images/select2/select2.png differ diff --git a/app/assets/images/select2/select2x2.png b/app/assets/images/select2/select2x2.png new file mode 100644 index 000000000..4bdd5c961 Binary files /dev/null and b/app/assets/images/select2/select2x2.png differ diff --git a/app/assets/javascripts/app.js.erb b/app/assets/javascripts/app.js.erb new file mode 100644 index 000000000..6851ff3e9 --- /dev/null +++ b/app/assets/javascripts/app.js.erb @@ -0,0 +1,91 @@ +'use strict'; + +/** +* The application file bootstraps the angular app by initializing the main module and +* creating namespaces and moduled for controllers, filters, services, and directives. +*/ + +var Application = Application || {}; + +Application.Constants = angular.module('application.constants', []); +Application.Services = angular.module('application.services', []); +Application.Controllers = angular.module('application.controllers', []); +Application.Filters = angular.module('application.filters', []); +Application.Directives = angular.module('application.directives', []); + + +angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ngAnimate', 'ngCookies', 'ui.router', 'ui.bootstrap', + 'ngUpload', 'duScroll', 'application.filters','application.services', 'application.directives', + 'application.constants', 'application.controllers', 'application.router', 'ui.select2', 'angularMoment', + 'Devise', 'DeviseModal', 'angular-growl', 'xeditable', 'checklist-model', 'unsavedChanges', 'angular-loading-bar', + 'ngTouch', 'angular-google-analytics', 'angularUtils.directives.dirDisqus', 'angular-redactor']). +config(['$locationProvider', '$httpProvider', 'AuthProvider', "growlProvider", "unsavedWarningsConfigProvider", "AnalyticsProvider", "datepickerPopupConfig", + function($locationProvider, $httpProvider, AuthProvider, growlProvider, unsavedWarningsConfigProvider, AnalyticsProvider, datepickerPopupConfig) { + + + <% if Rails.env.production? and ENV["GOOGLE_ANALYTICS_ACCOUNT"] != 'UA-YOUR_ID_HERE' and ENV["GOOGLE_ANALYTICS_ACCOUNT"] != nil %> + AnalyticsProvider.setAccount('<%= ENV["GOOGLE_ANALYTICS_ACCOUNT"] %>'); + // track all routes (or not) + AnalyticsProvider.trackPages(true); + AnalyticsProvider.setDomainName('<%= ENV["APPLICATION_ROOT_URL"] %>'); + AnalyticsProvider.useAnalytics(true); + AnalyticsProvider.setPageEvent('$stateChangeSuccess'); + <% else %> + AnalyticsProvider.setAccount('DISABLED'); + <% end %> + + datepickerPopupConfig.closeText = "Fermer"; + datepickerPopupConfig.cleartext = "Effacer"; + datepickerPopupConfig.currentText = "Aujourd'hui"; + + // custom message for angular-unsavedChanges + unsavedWarningsConfigProvider.navigateMessage = "Vous perdrez les modifications non enregistrées si vous quittez cette page"; + unsavedWarningsConfigProvider.reloadMessage = "Vous perdrez les modifications non enregistrées si vous rechargez cette page"; + + growlProvider.globalTimeToLive(5000); + growlProvider.globalEnableHtml(true); + + $locationProvider.hashPrefix('!'); + + }]).run(["$rootScope", "$log", "AuthService", "Auth", "amMoment", "$state", "editableOptions", "$location", "Analytics", function($rootScope, $log, AuthService, Auth, amMoment, $state, editableOptions, $location, Analytics){ + + amMoment.changeLocale('fr'); + + editableOptions.theme = 'bs3'; + + $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){ + $state.prevState = fromState; + $state.prevParams = fromParams; + }); + + $rootScope.backPrevLocation = function(event){ + event.preventDefault(); + event.stopPropagation(); + if($state.prevState.name == ""){ + $state.prevState = "app.public.home"; + } + $state.go($state.prevState, $state.prevParams); + }; + + }]).filter('array', function() { + return function(arrayLength) { + if (arrayLength) { + arrayLength = Math.ceil(arrayLength); + var arr = new Array(arrayLength), i = 0; + for (; i < arrayLength; i++) { + arr[i] = i; + } + return arr; + } + }; +}).directive('datepickerPopup', function (){ + // fixes https://github.com/angular-ui/bootstrap/issues/2659 + return { + restrict: 'EAC', + require: 'ngModel', + link: function(scope, element, attr, controller) { + //remove the default formatter from the input directive to prevent conflict + controller.$formatters.shift(); + } + } +}); diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 000000000..3ebf7de3d --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,59 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require jquery-ui/ui/jquery.ui.core +//= require jquery-ui/ui/jquery.ui.widget +//= require jquery-ui/ui/jquery.ui.mouse +//= require jquery-ui/ui/jquery.ui.draggable +//= require jquery-ui/ui/jquery.ui.droppable +//= require jquery-ui/ui/jquery.ui.resizable +//= require angular +//= require angular-i18n/angular-locale_fr-fr.js +//= require angular-cookies +//= require angular-resource +//= require angular-sanitize +//= require angular-animate +//= require angular-cookies +//= require angular-touch +//= require angular-ui-router/release/angular-ui-router +//= require angular-bootstrap/ui-bootstrap-tpls +//= require select2/select2 +//= require select2/select2_locale_fr +//= require angular-ui-select2/src/select2 +//= require moment/moment +//= require moment/locale/fr +//= require angular-moment/angular-moment +//= require ngUpload/ng-upload +//= require jasny-bootstrap/js/fileinput +//= require holderjs/holder +//= require angular-devise/lib/devise +//= require devise-modal +//= require angular-growl/build/angular-growl +//= require angular-xeditable/dist/js/xeditable +//= require checklist-model/checklist-model +//= require angular-unsavedChanges/src/unsavedChanges +//= require angular-loading-bar/src/loading-bar +//= require angular-scroll/angular-scroll +//= require angular-google-analytics/src/angular-google-analytics +//= require dirDisqus +//= require humanize +//= require redactor +//= require angular-redactor/angular-redactor +//= require underscore/underscore +//= require app +//= require router +//= require_tree ./controllers +//= require_tree ./services +//= require_tree ./directives +//= require_tree ./filters \ No newline at end of file diff --git a/app/assets/javascripts/controllers/admin/events.coffee b/app/assets/javascripts/controllers/admin/events.coffee new file mode 100644 index 000000000..5d782709d --- /dev/null +++ b/app/assets/javascripts/controllers/admin/events.coffee @@ -0,0 +1,242 @@ +'use strict' + +### COMMON CODE ### + +## +# Provides a set of common properties and methods to the $scope parameter. They are used +# in the various events' admin controllers. +# +# Provides : +# - $scope.categories = [{Category}] +# - $scope.datePicker = {} +# - $scope.submited(content) +# - $scope.cancel() +# - $scope.addFile() +# - $scope.deleteFile(file) +# - $scope.fileinputClass(v) +# - $scope.openStartDatePicker($event) +# - $scope.openEndDatePicker($event) +# - $scope.toggleRecurrenceEnd(e) +# +# Requires : +# - $scope.event.event_files_attributes = [] +# - $state (Ui-Router) [ 'app.public.events_list' ] +## +class EventsController + constructor: ($scope, $state, Event, Category) -> + + ## Retrieve the list of categories from the server (stage, atelier, ...) + Category.query().$promise.then (data)-> + $scope.categories = data.map (d) -> + id: d.id + name: d.name + + ## default parameters for AngularUI-Bootstrap datepicker + $scope.datePicker = + format: 'dd/MM/yyyy' + startOpened: false # default: datePicker is not shown + endOpened: false + recurrenceEndOpened: false + options: + startingDay: 1 # France: the week starts on monday + + + + ## + # For use with ngUpload (https://github.com/twilson63/ngUpload). + # Intended to be the callback when an upload is done: any raised error will be stacked in the + # $scope.alerts array. If everything goes fine, the user is redirected to the project page. + # @param content {Object} JSON - The upload's result + ## + $scope.submited = (content) -> + if !content.id? + $scope.alerts = [] + angular.forEach content, (v, k)-> + angular.forEach v, (err)-> + $scope.alerts.push({msg: k+': '+err, type: 'danger'}) + else + $state.go('app.public.events_list') + + + + ## + # Changes the user's view to the events list page + ## + $scope.cancel = -> + $state.go('app.public.events_list') + + + + ## + # For use with 'ng-class', returns the CSS class name for the uploads previews. + # The preview may show a placeholder or the content of the file depending on the upload state. + # @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules) + ## + $scope.fileinputClass = (v)-> + if v + 'fileinput-exists' + else + 'fileinput-new' + + + + ## + # This will create a single new empty entry into the event's attachements list. + ## + $scope.addFile = -> + $scope.event.event_files_attributes.push {} + + + + ## + # This will remove the given file from the event's attachements list. If the file was previously uploaded + # to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from + # the attachements array. + # @param file {Object} the file to delete + ## + $scope.deleteFile = (file) -> + index = $scope.event.event_files_attributes.indexOf(file) + if file.id? + file._destroy = true + else + $scope.event.event_files_attributes.splice(index, 1) + + + + ## + # Show/Hide the "start" datepicker (open the drop down/close it) + ## + $scope.toggleStartDatePicker = ($event) -> + $event.preventDefault() + $event.stopPropagation() + $scope.datePicker.startOpened = !$scope.datePicker.startOpened + + + + ## + # Show/Hide the "end" datepicker (open the drop down/close it) + ## + $scope.toggleEndDatePicker = ($event) -> + $event.preventDefault() + $event.stopPropagation() + $scope.datePicker.endOpened = !$scope.datePicker.endOpened + + + + ## + # Masks/displays the recurrence pane allowing the admin to set the current event as recursive + ## + $scope.toggleRecurrenceEnd = (e)-> + e.preventDefault() + e.stopPropagation() + $scope.datePicker.recurrenceEndOpened = !$scope.datePicker.recurrenceEndOpened + + + +## +# Controller used in the events listing page (admin view) +## +Application.Controllers.controller "adminEventsController", ["$scope", "$state", 'Event', ($scope, $state, Event) -> + + + + ### PUBLIC SCOPE ### + + ## The events displayed on the page + $scope.events = [] + + ## By default, the pagination mode is activated to limit the page size + $scope.paginateActive = true + + ## The currently displayed page number + $scope.page = 1 + + + ## + # Adds a bucket of events to the bottom of the page, grouped by month + ## + $scope.loadMoreEvents = -> + Event.query {page: $scope.page}, (data)-> + $scope.events = $scope.events.concat data + if data.length + $scope.paginateActive = false if $scope.events.length >= data[0].nb_total_events + else + $scope.paginateActive = false + $scope.page += 1 + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + $scope.loadMoreEvents() + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] + + + +## +# Controller used in the event creation page +## +Application.Controllers.controller "newEventController", ["$scope", "$state", 'Event', 'Category', 'CSRF', ($scope, $state, Event, Category, CSRF) -> + CSRF.setMetaTags() + + ## API URL where the form will be posted + $scope.actionUrl = "/api/events/" + + ## Form action on the above URL + $scope.method = 'post' + + ## Default event parameters + $scope.event = + event_files_attributes: [] + start_date: new Date() + end_date: new Date() + start_time: new Date() + end_time: new Date() + all_day: 'false' + recurrence: 'none' + + ## Possible types of recurrences for an event + $scope.recurrenceTypes = [ + {label: 'Aucune', value: 'none'}, + {label: 'Tous les jours', value: 'day'}, + {label: 'Chaque semaine', value: 'week'}, + {label: 'Chaque mois', value: 'month'}, + {label: 'Chaque année', value: 'year'} + ] + + ## Using the EventsController + new EventsController($scope, $state, Event, Category) +] + + + +## +# Controller used in the events edition page +## +Application.Controllers.controller "editEventController", ["$scope", "$state", "$stateParams", 'Event', 'Category', 'CSRF', ($scope, $state, $stateParams, Event, Category, CSRF) -> + CSRF.setMetaTags() + + ## API URL where the form will be posted + $scope.actionUrl = "/api/events/" + $stateParams.id + + ## Form action on the above URL + $scope.method = 'put' + + ## Retrieve the event details, in case of error the user is redirected to the events listing + Event.get {id: $stateParams.id} + , (event)-> + $scope.event = event + return + , -> + $state.go('app.public.events_list') + + ## Using the EventsController + new EventsController($scope, $state, Event, Category) +] diff --git a/app/assets/javascripts/controllers/admin/members.coffee b/app/assets/javascripts/controllers/admin/members.coffee new file mode 100644 index 000000000..a9117e411 --- /dev/null +++ b/app/assets/javascripts/controllers/admin/members.coffee @@ -0,0 +1,153 @@ +'use strict' + +### COMMON CODE ### + +## +# Provides a set of common properties and methods to the $scope parameter. They are used +# in the various members' admin controllers. +# +# Provides : +# - $scope.groups = [{Group}] +# - $scope.datePicker = {} +# - $scope.submited(content) +# - $scope.cancel() +# - $scope.fileinputClass(v) +# - $scope.openDatePicker($event) +# +# Requires : +# - $state (Ui-Router) [ 'app.admin.members' ] +## +class MembersController + constructor: ($scope, $state, Group) -> + + ## Retrieve the profiles groups (eg. students ...) + Group.query (groups) -> + $scope.groups = groups + $scope.user.group_id = $scope.groups[0].id + + ## Default parameters for AngularUI-Bootstrap datepicker + $scope.datePicker = + format: 'dd/MM/yyyy' + opened: false # default: datePicker is not shown + options: + startingDay: 1 # France: the week starts on monday + + + ## + # Shows the birth day datepicker + # @param $event {Object} jQuery event object + ## + $scope.openDatePicker = ($event) -> + $event.preventDefault() + $event.stopPropagation() + $scope.datePicker.opened = true + + + + ## + # For use with ngUpload (https://github.com/twilson63/ngUpload). + # Intended to be the callback when an upload is done: any raised error will be stacked in the + # $scope.alerts array. If everything goes fine, the user is redirected to the members listing page. + # @param content {Object} JSON - The upload's result + ## + $scope.submited = (content) -> + if !content.id? + $scope.alerts = [] + angular.forEach content, (v, k)-> + angular.forEach v, (err)-> + $scope.alerts.push + msg: k+': '+err, + type: 'danger' + else + $state.go('app.admin.members') + + + + ## + # Changes the admin's view to the members list page + ## + $scope.cancel = -> + $state.go('app.admin.members') + + + + ## + # For use with 'ng-class', returns the CSS class name for the uploads previews. + # The preview may show a placeholder or the content of the file depending on the upload state. + # @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules) + ## + $scope.fileinputClass = (v)-> + if v + 'fileinput-exists' + else + 'fileinput-new' + + + +## +# Controller used in the member edition page +## +Application.Controllers.controller "editMemberController", ["$scope", "$state", "$stateParams", "Member", 'dialogs', 'growl', 'Group', 'CSRF', ($scope, $state, $stateParams, Member, dialogs, growl, Group, CSRF) -> + CSRF.setMetaTags() + + + ### PUBLIC SCOPE ### + + ## API URL where the form will be posted + $scope.actionUrl = "/api/members/" + $stateParams.id + + ## Form action on the above URL + $scope.method = 'patch' + + ## The user to edit + $scope.user = {} + + ## Profiles types (student/standard/...) + $scope.groups = [] + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + ## Retrieve the member's profile details + Member.get {id: $stateParams.id}, (resp)-> + $scope.user = resp + + ## Using the MembersController + new MembersController($scope, $state, Group) + + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] + + + +## +# Controller used in the member's creation page (admin view) +## +Application.Controllers.controller "newMemberController", ["$scope", "$state", "$stateParams", "Member", 'Group', 'CSRF', ($scope, $state, $stateParams, Member, Group, CSRF) -> + CSRF.setMetaTags() + + ### PUBLIC SCOPE ### + + ## API URL where the form will be posted + $scope.actionUrl = "/api/members" + + ## Form action on the above URL + $scope.method = 'post' + + ## Default member's profile parameters + $scope.user = + plan_interval: '' + + + + ## Using the MembersController + new MembersController($scope, $state, Group) +] diff --git a/app/assets/javascripts/controllers/admin/project_elements.coffee b/app/assets/javascripts/controllers/admin/project_elements.coffee new file mode 100644 index 000000000..e5f9e0460 --- /dev/null +++ b/app/assets/javascripts/controllers/admin/project_elements.coffee @@ -0,0 +1,157 @@ +'use strict' + +Application.Controllers.controller "projectElementsController", ["$scope", "$state", 'Component', 'Licence', 'Theme', ($scope, $state, Component, Licence, Theme) -> + + ## Materials list (plastic, wood ...) + $scope.components = Component.query() + + ## Licences list (Creative Common ...) + $scope.licences = Licence.query() + + ## Themes list (cooking, sport ...) + $scope.themes = Theme.query() + + + + ## + # Saves a new component / Update an existing material to the server (form validation callback) + # @param data {Object} component name + # @param [data] {number} component id, in case of update + ## + $scope.saveComponent = (data, id) -> + if id? + Component.update {id: id}, data + else + Component.save data, (resp)-> + $scope.components[$scope.components.length-1].id = resp.id + + + + ## + # Deletes the component at the specified index + # @param index {number} component index in the $scope.components array + ## + $scope.removeComponent = (index) -> + Component.delete $scope.components[index] + $scope.components.splice(index, 1) + + + + ## + # Creates a new empty entry in the $scope.components array + ## + $scope.addComponent = -> + $scope.inserted = + name: '' + $scope.components.push($scope.inserted) + + + + ## + # Removes the newly inserted but not saved component / Cancel the current component modification + # @param rowform {Object} see http://vitalets.github.io/angular-xeditable/ + # @param index {number} component index in the $scope.components array + ## + $scope.cancelComponent = (rowform, index) -> + if $scope.components[index].id? + rowform.$cancel() + else + $scope.components.splice(index, 1) + + + + ## + # Saves a new theme / Update an existing theme to the server (form validation callback) + # @param data {Object} theme name + # @param [data] {number} theme id, in case of update + ## + $scope.saveTheme = (data, id) -> + if id? + Theme.update {id: id}, data + else + Theme.save data, (resp)-> + $scope.themes[$scope.themes.length-1].id = resp.id + + + + ## + # Deletes the theme at the specified index + # @param index {number} theme index in the $scope.themes array + ## + $scope.removeTheme = (index) -> + Theme.delete $scope.themes[index] + $scope.themes.splice(index, 1) + + + + ## + # Creates a new empty entry in the $scope.themes array + ## + $scope.addTheme = -> + $scope.inserted = + name: '' + $scope.themes.push($scope.inserted) + + + + ## + # Removes the newly inserted but not saved theme / Cancel the current theme modification + # @param rowform {Object} see http://vitalets.github.io/angular-xeditable/ + # @param index {number} theme index in the $scope.themes array + ## + $scope.cancelTheme = (rowform, index) -> + if $scope.themes[index].id? + rowform.$cancel() + else + $scope.themes.splice(index, 1) + + + + ## + # Saves a new licence / Update an existing licence to the server (form validation callback) + # @param data {Object} licence name and description + # @param [data] {number} licence id, in case of update + ## + $scope.saveLicence = (data, id) -> + if id? + Licence.update {id: id}, data + else + Licence.save data, (resp)-> + $scope.licences[$scope.licences.length-1].id = resp.id + + + + ## + # Deletes the licence at the specified index + # @param index {number} licence index in the $scope.licences array + ## + $scope.removeLicence = (index) -> + Licence.delete $scope.licences[index] + $scope.licences.splice(index, 1) + + + + ## + # Creates a new empty entry in the $scope.licences array + ## + $scope.addLicence = -> + $scope.inserted = + name: '' + description: '' + $scope.licences.push($scope.inserted) + + + + ## + # Removes the newly inserted but not saved licence / Cancel the current licence modification + # @param rowform {Object} see http://vitalets.github.io/angular-xeditable/ + # @param index {number} licence index in the $scope.licences array + ## + $scope.cancelLicence = (rowform, index) -> + if $scope.licences[index].id? + rowform.$cancel() + else + $scope.licences.splice(index, 1) +] + + diff --git a/app/assets/javascripts/controllers/application.coffee.erb b/app/assets/javascripts/controllers/application.coffee.erb new file mode 100644 index 000000000..49cefa6db --- /dev/null +++ b/app/assets/javascripts/controllers/application.coffee.erb @@ -0,0 +1,330 @@ +'use strict' + +Application.Controllers.controller 'ApplicationController', ["$rootScope", "$scope", "Session", "AuthService", "Auth", "$modal", "$state", 'growl', 'Notification', '$interval', ($rootScope, $scope, Session, AuthService, Auth, $modal, $state, growl, Notification, $interval) -> + + + + ### PRIVATE STATIC CONSTANTS ### + + # User's notifications will get refreshed every 30s + NOTIFICATIONS_CHECK_PERIOD = 30000 + + + + ### PUBLIC SCOPE ### + + ## + # Set the current user to the provided value and initialize the session + # @param user {Object} Rails/Devise user + ## + $scope.setCurrentUser = (user) -> + $scope.currentUser = user + Session.create(user); + getNotifications() + + + ## + # Login callback + # @param e {Object} jQuery event + # @param callback {function} + ## + $scope.login = (e, callback) -> + e.preventDefault() if e + openLoginModal null, null, callback + + + + ## + # Logout callback + # @param e {Object} jQuery event + ## + $scope.logout = (e) -> + e.preventDefault() + Auth.logout().then (oldUser) -> + # console.log(oldUser.name + " you're signed out now."); + Session.destroy() + $scope.currentUser = null + $rootScope.toCheckNotifications = false + $scope.notifications = [] + $state.go('app.public.home') + , (error) -> + # An error occurred logging out. + + + + ## + # Open the modal window allowing the user to create an account. + # @param e {Object} jQuery event + ## + $scope.signup = (e) -> + e.preventDefault() if e + + $modal.open + templateUrl: '<%= asset_path "shared/signupModal.html" %>' + size: 'md' + controller: ['$scope', '$modalInstance', 'Group', ($scope, $modalInstance, Group) -> + # default parameters for the date picker in the account creation modal + $scope.datePicker = + format: 'dd/MM/yyyy' + opened: false + options: + startingDay: 1 + + # callback to open the date picker (account creation modal) + $scope.openDatePicker = ($event) -> + $event.preventDefault() + $event.stopPropagation() + $scope.datePicker.opened = true + + # retrieve the groups (standard, student ...) + Group.query (groups) -> + $scope.groups = groups + + # default user's parameters + $scope.user = + is_allow_contact: true + + # Errors display + $scope.alerts = [] + $scope.closeAlert = (index) -> + $scope.alerts.splice(index, 1) + + # callback for form validation + $scope.ok = -> + # try to create the account + $scope.alerts = [] + Auth.register($scope.user).then (user) -> + # creation successful + $modalInstance.close(user) + , (error) -> + # creation failed... + angular.forEach error.data.errors, (v, k) -> + angular.forEach v, (err) -> + $scope.alerts.push + msg: k+': '+err + type: 'danger' + ] + .result['finally'](null).then (user) -> + # when the account was created succesfully, set the session to the newly created account + $scope.setCurrentUser(user) + + + ## + # Open the modal window allowing the user to change his password. + # @param token {string} security token for password changing. The user should have recieved it by mail + ## + $scope.editPassword = (token) -> + $modal.open + templateUrl: '<%= asset_path "shared/passwordEditModal.html" %>' + size: 'md' + controller: ['$scope', '$modalInstance', '$http', ($scope, $modalInstance, $http) -> + $scope.user = + reset_password_token: token + $scope.alerts = [] + $scope.closeAlert = (index) -> + $scope.alerts.splice(index, 1) + + $scope.changePassword = -> + $scope.alerts = [] + $http.put('/users/password.json', {user: $scope.user}).success (data) -> + $modalInstance.close() + .error (data) -> + angular.forEach data.errors, (v, k) -> + angular.forEach v, (err) -> + $scope.alerts.push + msg: k+': '+err + type: 'danger' + ] + .result['finally'](null).then (user) -> + growl.addInfoMessage('Votre mot de passe a bien été modifié.') + Auth.login().then (user) -> + $scope.setCurrentUser(user) + , (error) -> + # Authentication failed... + + + ## + # Compact/Expend the width of the left navigation bar + # @param e {Object} jQuery event object + ## + $scope.toggleNavSize = (event) -> + if typeof event == 'undefined' + console.error '[applicationController::toggleNavSize] Missing event parameter' + return + + toggler = $(event.target) + toggler = toggler.closest('[data-toggle^="class"]') unless toggler.data('toggle') + + $class = toggler.data()['toggle'] + $target = toggler.data('target') or toggler.attr('data-link') + + if $class + $tmp = $class.split(':')[1] + $classes = $tmp.split(',') if $tmp + + if $target + $targets = $target.split(',') + + if $classes and $classes.length + $.each $targets, ( index, value ) -> + if $classes[index].indexOf( '*' ) != -1 + patt = new RegExp( '\\s' + + $classes[index].replace( /\*/g, '[A-Za-z0-9-_]+' ).split( ' ' ).join( '\\s|\\s' ) + + '\\s', 'g' ) + $(toggler).each ( i, it ) -> + cn = ' ' + it.className + ' ' + while patt.test( cn ) + cn = cn.replace( patt, ' ' ) + it.className = $.trim( cn ) + + ($targets[index] !='#') and $($targets[index]).toggleClass($classes[index]) or toggler.toggleClass($classes[index]) + + toggler.toggleClass('active') + return + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + # try to retrieve any currently logged user + Auth.login().then (user) -> + $scope.setCurrentUser(user) + , (error) -> + # Authentication failed... + $rootScope.toCheckNotifications = false + + # bind to the $stateChangeStart event (AngularJS/UI-Router) + $rootScope.$on '$stateChangeStart', (event, toState, toParams, fromState, fromParams) -> + return unless toState.data + + authorizedRoles = toState.data.authorizedRoles + unless AuthService.isAuthorized(authorizedRoles) + event.preventDefault() + if AuthService.isAuthenticated() + # user is not allowed + console.log('user is not allowed') + else + # user is not logged in + openLoginModal(toState, toParams) + + + # shorthands + $scope.isAuthenticated = Auth.isAuthenticated; + $scope.isAuthorized = AuthService.isAuthorized; + + + + ## + # Retreive once the notifications from the server and display a message popup for each new one. + # Then, periodically check for new notifications. + ## + getNotifications = -> + $rootScope.toCheckNotifications = true + unless $rootScope.checkNotificationsIsInit or !$scope.currentUser + $scope.notifications = Notification.query {is_read: false} + $scope.$watch 'notifications', (newValue, oldValue) -> + diff = [] + angular.forEach newValue, (value) -> + find = false + for i in [0..oldValue.length] by 1 + if oldValue[i] and (value.id is oldValue[i].id) + find = true + break + + unless find + diff.push(value) + + + angular.forEach diff, (notification, key) -> + growl.addInfoMessage(notification.message.description) + + , true + + checkNotifications = -> + if $rootScope.toCheckNotifications + Notification.query({is_read: false}).$promise.then (data) -> + $scope.notifications = data; + + $interval(checkNotifications, NOTIFICATIONS_CHECK_PERIOD) + $rootScope.checkNotificationsIsInit = true + + + + ## + # Open the modal window allowing the user to log in. + ## + openLoginModal = (toState, toParams, callback) -> + $modal.open + templateUrl: '<%= asset_path "shared/deviseModal.html" %>' + size: 'sm' + controller: ['$scope', '$modalInstance', ($scope, $modalInstance) -> + user = $scope.user = {} + $scope.login = () -> + Auth.login(user).then (user) -> + # Authentification succeeded ... + $modalInstance.close(user) + if callback and typeof callback is "function" + callback(user) + , (error) -> + # Authentication failed... + $scope.alerts = [] + $scope.alerts.push + msg: 'E-mail ou mot de passe incorrect.' + type: 'danger' + + # handle modal behaviors. The provided reason will be used to define the following actions + $scope.dismiss = -> + $modalInstance.dismiss('cancel') + + $scope.openSignup = (e) -> + e.preventDefault() + $modalInstance.dismiss('signup') + + $scope.openResetPassword = (e) -> + e.preventDefault() + $modalInstance.dismiss('resetPassword') + ] + + # what to do when the modal is closed + .result['finally'](null).then (user) -> + # authentification succeeded, set the session, gather the notifications and redirect + $scope.setCurrentUser(user) + + if toState isnt null and toParams isnt null + $state.go(toState, toParams) + + , (reason) -> + # authentification did not ended successfully + if reason is 'signup' + # open signup modal + $scope.signup() + else if reason is 'resetPassword' + # open the 'reset password' modal + $modal.open + templateUrl: '<%= asset_path "shared/passwordNewModal.html" %>' + size: 'sm' + controller: ['$scope', '$modalInstance', '$http', ($scope, $modalInstance, $http) -> + $scope.user = {email: ''} + $scope.sendReset = () -> + $scope.alerts = [] + $http.post('/users/password.json', {user: $scope.user}).success -> + $modalInstance.close() + .error -> + $scope.alerts.push + msg: "Votre adresse email n'existe pas." + type: 'danger' + + ] + .result['finally'](null).then -> + growl.addInfoMessage('Vous allez recevoir sous quelques minutes un e-mail vous indiquant comment réinitialiser votre mot de passe.') + + # otherwise the user just closed the modal + + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] diff --git a/app/assets/javascripts/controllers/dashboard.coffee b/app/assets/javascripts/controllers/dashboard.coffee new file mode 100644 index 000000000..e01bde51e --- /dev/null +++ b/app/assets/javascripts/controllers/dashboard.coffee @@ -0,0 +1,43 @@ +'use strict' + +## +# Controller used on the private projects listing page (my dashboard/projects) +## +Application.Controllers.controller "dashboardProjectsController", ["$scope", 'Member', ($scope, Member) -> + +## Current user's profile + $scope.user = Member.get {id: $scope.currentUser.id} +] + + + +## +# Controller used on the personal trainings page (my dashboard/trainings) +## +Application.Controllers.controller "dashboardTrainingsController", ["$scope", 'Member', ($scope, Member) -> + +## Current user's profile + $scope.user = Member.get {id: $scope.currentUser.id} +] + + + +## +# Controller used on the private events page (my dashboard/events) +## +Application.Controllers.controller "dashboardEventsController", ["$scope", 'Member', ($scope, Member) -> + +## Current user's profile + $scope.user = Member.get {id: $scope.currentUser.id} +] + + + +## +# Controller used on the personal invoices listing page (my dashboard/invoices) +## +Application.Controllers.controller "dashboardInvoicesController", ["$scope", 'Member', ($scope, Member) -> + +## Current user's profile + $scope.user = Member.get {id: $scope.currentUser.id} +] diff --git a/app/assets/javascripts/controllers/events.coffee.erb b/app/assets/javascripts/controllers/events.coffee.erb new file mode 100644 index 000000000..21eab3d96 --- /dev/null +++ b/app/assets/javascripts/controllers/events.coffee.erb @@ -0,0 +1,120 @@ +'use strict' + +Application.Controllers.controller "eventsController", ["$scope", "$state", 'Event', ($scope, $state, Event) -> + + + + ### PRIVATE STATIC CONSTANTS ### + + # Number of events added to the page when the user clicks on 'load next events' + EVENTS_PER_PAGE = 12 + + + + ### PUBLIC SCOPE ### + + ## The events displayed on the page + $scope.events = [] + + ## By default, the pagination mode is activated to limit the page size + $scope.paginateActive = true + + ## The currently displayed page number + $scope.page = 1 + + ## + # Adds EVENTS_PER_PAGE events to the bottom of the page, grouped by month + ## + $scope.loadMoreEvents = -> + Event.query {page: $scope.page}, (data) -> + $scope.events = $scope.events.concat data + if data.length > 0 + $scope.paginateActive = false if ($scope.page-2)*EVENTS_PER_PAGE+data.length >= data[0].nb_total_events + + $scope.eventsGroupByMonth = _.groupBy($scope.events, (obj) -> + _.map ['month', 'year'], (key, value) -> obj[key] + ) + $scope.monthOrder = _.sortBy _.keys($scope.eventsGroupByMonth), (k)-> + monthYearArray = k.split(',') + date = new Date() + date.setMonth(monthYearArray[0]) + date.setYear(monthYearArray[1]) + return -date.getTime() + else + $scope.paginateActive = false + $scope.page += 1 + + + + ## + # Callback to redirect the user to the specified event page + # @param event {{id:number}} + ## + $scope.showEvent = (event) -> + $state.go('app.public.events_show', {id: event.id}) + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + $scope.loadMoreEvents() + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] + + + + + + + +Application.Controllers.controller "showEventController", ["$scope", "$state", "$stateParams", "Event", '$modal', 'Member', ($scope, $state, $stateParams, Event, $modal, Member) -> + + + + ### PUBLIC SCOPE ### + + ## current event details + $scope.event = {} + + + + ## + # Callback to delete the provided event (admins only) + # @param event {$resource} angular's Event $resource + ## + $scope.deleteEvent = (event) -> + event.$delete -> + $state.go('app.public.events_list') + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + + # get the details for the current event (event's id is recovered from the current URL) + Event.get {id: $stateParams.id} + , (data) -> + $scope.event = data + if !$scope.event.reduced_amount + $scope.event.reduced_amount = 0 + return + , -> + $state.go('app.public.events_list') + + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] + diff --git a/app/assets/javascripts/controllers/home.coffee b/app/assets/javascripts/controllers/home.coffee new file mode 100644 index 000000000..5215748e4 --- /dev/null +++ b/app/assets/javascripts/controllers/home.coffee @@ -0,0 +1,60 @@ +'use strict' + +Application.Controllers.controller "homeController", ['$scope', '$stateParams', 'Member', 'Twitter', 'Project', 'Event', ($scope, $stateParams, Member, Twitter, Project, Event) -> + + + + ### PRIVATE STATIC CONSTANTS ### + + # The 4 last users will be displayed on the home page + LAST_MEMBERS_LIMIT = 4 + + # Only the last tweet is shown + LAST_TWEETS_LIMIT = 1 + + # The 3 closest events are shown + LAST_EVENTS_LIMIT = 3 + + + + ### PUBLIC SCOPE ### + + ## The last registered members who confirmed their addresses + $scope.last_members = [] + + ## The last tweets from the Fablab official twitter account + $scope.last_tweets = [] + + ## The last projects published/documented on the plateform + $scope.last_projects = [] + + ## The closest upcoming events + $scope.upcoming_events = [] + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + # display the reset password dialog if the parameter was provided + if $stateParams.reset_password_token + $scope.$parent.editPassword($stateParams.reset_password_token) + + # initialize the homepage data + Member.lastSubscribed {limit: LAST_MEMBERS_LIMIT}, (members) -> + $scope.last_members = members + Twitter.query {limit: LAST_TWEETS_LIMIT}, (tweets) -> + $scope.last_tweets = tweets + Project.lastPublished (projects) -> + $scope.last_projects = projects + Event.upcoming {limit: LAST_EVENTS_LIMIT}, (events) -> + $scope.upcoming_events = events + + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] diff --git a/app/assets/javascripts/controllers/machines.coffee.erb b/app/assets/javascripts/controllers/machines.coffee.erb new file mode 100644 index 000000000..f5bfa0ec1 --- /dev/null +++ b/app/assets/javascripts/controllers/machines.coffee.erb @@ -0,0 +1,164 @@ +'use strict' + +### COMMON CODE ### + +## +# Provides a set of common callback methods to the $scope parameter. These methods are used +# in the various machines' admin controllers. +# +# Provides : +# - $scope.submited(content) +# - $scope.cancel() +# - $scope.fileinputClass(v) +# - $scope.addFile() +# - $scope.deleteFile(file) +# +# Requires : +# - $scope.machine.machine_files_attributes = [] +# - $state (Ui-Router) [ 'app.public.machines_list' ] +## +class MachinesController + constructor: ($scope, $state)-> + ## + # For use with ngUpload (https://github.com/twilson63/ngUpload). + # Intended to be the callback when the upload is done: any raised error will be stacked in the + # $scope.alerts array. If everything goes fine, the user is redirected to the machines list. + # @param content {Object} JSON - The upload's result + ## + $scope.submited = (content) -> + if !content.id? + $scope.alerts = [] + angular.forEach content, (v, k)-> + angular.forEach v, (err)-> + $scope.alerts.push + msg: k+': '+err + type: 'danger' + else + $state.go('app.public.machines_list') + + ## + # Changes the current user's view, redirecting him to the machines list + ## + $scope.cancel = -> + $state.go('app.public.machines_list') + + ## + # For use with 'ng-class', returns the CSS class name for the uploads previews. + # The preview may show a placeholder or the content of the file depending on the upload state. + # @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules) + ## + $scope.fileinputClass = (v)-> + if v + 'fileinput-exists' + else + 'fileinput-new' + + ## + # This will create a single new empty entry into the machine attachements list. + ## + $scope.addFile = -> + $scope.machine.machine_files_attributes.push {} + + ## + # This will remove the given file from the machine attachements list. If the file was previously uploaded + # to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from + # the attachements array. + # @param file {Object} the file to delete + ## + $scope.deleteFile = (file) -> + index = $scope.machine.machine_files_attributes.indexOf(file) + if file.id? + file._destroy = true + else + $scope.machine.machine_files_attributes.splice(index, 1) + + + +## +# Controller used in the public listing page, allowing everyone to see the list of machines +## +Application.Controllers.controller "machinesController", ["$scope", "$state", 'Machine', '$modal', ($scope, $state, Machine, $modal) -> + + ## Retrieve the list of machines + $scope.machines = Machine.query() + + ## + # Redirect the user to the machine details page + ## + $scope.showMachine = (machine) -> + $state.go('app.public.machines_show', {id: machine.slug}) +] + + + +## +# Controller used in the machine creation page (admin) +## +Application.Controllers.controller "newMachineController", ["$scope", "$state", 'CSRF', ($scope, $state, CSRF) -> + CSRF.setMetaTags() + + ## API URL where the form will be posted + $scope.actionUrl = "/api/machines/" + + ## Form action on the above URL + $scope.method = "post" + + ## default machine parameters + $scope.machine = + machine_files_attributes: [] + + ## Using the MachinesController + new MachinesController($scope, $state) +] + + + +## +# Controller used in the machine edition page (admin) +## +Application.Controllers.controller "editMachineController", ["$scope", "$state", '$stateParams', 'Machine', 'CSRF', ($scope, $state, $stateParams, Machine, CSRF) -> + CSRF.setMetaTags() + + ## API URL where the form will be posted + $scope.actionUrl = "/api/machines/" + $stateParams.id + + ## Form action on the above URL + $scope.method = "put" + + ## Retrieve the details for the machine id in the URL, if an error occurs redirect the user to the machines list + $scope.machine = Machine.get {id: $stateParams.id} + , -> + return + , -> + $state.go('app.public.machines_list') + + ## Using the MachinesController + new MachinesController($scope, $state) +] + + + +## +# Controller used in the machine details page (public) +## +Application.Controllers.controller "showMachineController", ['$scope', '$state', '$modal', '$stateParams', 'Machine', ($scope, $state, $modal, $stateParams, Machine) -> + + ## Retrieve the details for the machine id in the URL, if an error occurs redirect the user to the machines list + $scope.machine = Machine.get {id: $stateParams.id} + , -> + return + , -> + $state.go('app.public.machines_list') + + ## + # Callback to delete the current machine (admins only) + ## + $scope.delete = (machine) -> + # check the permissions + if $scope.currentUser.role isnt 'admin' + console.error 'Unauthorized operation' + else + # delete the machine then redirect to the machines listing + machine.$delete -> + $state.go('app.public.machines_list') +] diff --git a/app/assets/javascripts/controllers/main_nav.coffee.erb b/app/assets/javascripts/controllers/main_nav.coffee.erb new file mode 100644 index 000000000..0f05d63c9 --- /dev/null +++ b/app/assets/javascripts/controllers/main_nav.coffee.erb @@ -0,0 +1,57 @@ +'use strict' + +## +# Navigation controller. List the links availables in the left navigation pane and their icon. +## +Application.Controllers.controller "mainNavController", ["$scope", "$location", "$cookies", ($scope, $location, $cookies) -> + +## Common links (public application) + $scope.navLinks = [ + { + state: 'app.public.home' + linkText: 'Accueil' + linkIcon: 'home' + } + + { + state: 'app.public.machines_list' + linkText: 'Liste des machines' + linkIcon: 'gears' + } + { + state: 'app.public.events_list' + linkText: 'Liste des stages et ateliers' + linkIcon: 'tags' + } + { + state: 'app.public.projects_list' + linkText: 'Galerie de projets' + linkIcon: 'th' + } + ] + + ## Admin links (backoffice application) + $scope.adminNavLinks = [ + { + state: 'app.admin.members' + linkText: 'Suivi utilisateurs' + linkIcon: 'users' + } + { + state: 'app.admin.events' + linkText: 'Suivi stages et ateliers' + linkIcon: 'tags' + } + { + state: 'app.public.machines_list' + linkText: 'Gérer les machines' + linkIcon: 'cogs' + } + { + state: 'app.admin.project_elements' + linkText: 'Gérer les éléments Projets' + linkIcon: 'tasks' + } + ] + +] diff --git a/app/assets/javascripts/controllers/members.coffee b/app/assets/javascripts/controllers/members.coffee new file mode 100644 index 000000000..594996380 --- /dev/null +++ b/app/assets/javascripts/controllers/members.coffee @@ -0,0 +1,109 @@ +'use strict' + +## +# Controller used in the members listing page +## +Application.Controllers.controller "membersController", ["$scope", "$state", 'Member', ($scope, $state, Member) -> + + ## members list + $scope.members = Member.query() + + ## Merbers ordering/sorting. Default: not sorted + $scope.orderMember = null + + ## + # Change the members ordering criterion to the one provided + # @param orderBy {string} ordering criterion + ## + $scope.setOrderMember = (orderBy)-> + if $scope.orderMember == orderBy + $scope.orderMember = '-'+orderBy + else + $scope.orderMember = orderBy +] + + + +## +# Controller used when editing the current user's profile +## +Application.Controllers.controller "editProfileController", ["$scope", "$state", "Member", "Auth", 'growl', 'dialogs', 'CSRF', ($scope, $state, Member, Auth, growl, dialogs, CSRF) -> + CSRF.setMetaTags() + + ## API URL where the form will be posted + $scope.actionUrl = "/api/members/" + $scope.currentUser.id + + ## Form action on the above URL + $scope.method = 'patch' + + ## Current user's profile + $scope.user = Member.get {id: $scope.currentUser.id} + + ## Angular-Bootstrap datepicker configuration for birthday + $scope.datePicker = + format: 'dd/MM/yyyy' + opened: false # default: datePicker is not shown + options: + startingDay: 1 # France: the week starts on monday + + + + ## + # Callback to diplay the datepicker as a dropdown when clicking on the input field + # @param $event {Object} jQuery event object + ## + $scope.openDatePicker = ($event) -> + $event.preventDefault() + $event.stopPropagation() + $scope.datePicker.opened = true + + + + ## + # For use with ngUpload (https://github.com/twilson63/ngUpload). + # Intended to be the callback when the upload is done: any raised error will be stacked in the + # $scope.alerts array. If everything goes fine, the user's profile is updated and the user is + # redirected to the home page + # @param content {Object} JSON - The upload's result + ## + $scope.submited = (content) -> + if !content.id? + $scope.alerts = [] + angular.forEach content, (v, k)-> + angular.forEach v, (err)-> + $scope.alerts.push + msg: k+': '+err, + type: 'danger' + else + $scope.currentUser.profile.user_avatar = content.profile.user_avatar + Auth._currentUser.profile.user_avatar = content.profile.user_avatar + $scope.currentUser.name = content.name + Auth._currentUser.name = content.name + $scope.currentUser = content + Auth._currentUser = content + $state.go('app.public.home') + + + + ## + # For use with 'ng-class', returns the CSS class name for the uploads previews. + # The preview may show a placeholder or the content of the file depending on the upload state. + # @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules) + ## + $scope.fileinputClass = (v)-> + if v + 'fileinput-exists' + else + 'fileinput-new' +] + + + +## +# Controller used on the public user's profile page (seeing another user's profile) +## +Application.Controllers.controller "showProfileController", ["$scope", "$stateParams", 'Member', ($scope, $stateParams, Member) -> + + ## Selected user's profile (id from the current URL) + $scope.user = Member.get {id: $stateParams.id} +] diff --git a/app/assets/javascripts/controllers/notifications.coffee b/app/assets/javascripts/controllers/notifications.coffee new file mode 100644 index 000000000..05c7457f6 --- /dev/null +++ b/app/assets/javascripts/controllers/notifications.coffee @@ -0,0 +1,87 @@ +'use strict' + +## +# Controller used in notifications page +# inherits $scope.$parent.notifications (unread notifications) from ApplicationController +## +Application.Controllers.controller "notificationsController", ["$scope", 'Notification', ($scope, Notification) -> + + + + ### PRIVATE STATIC CONSTANTS ### + + # Number of notifications added to the page when the user clicks on 'load next notifications' + NOTIFICATIONS_PER_PAGE = 15 + + + + ### PUBLIC SCOPE ### + + ## Array containg the archived notifications (already read) + $scope.notificationsRead = [] + + ## By default, the pagination mode is activated to limit the page size + $scope.paginateActive = true + + ## The currently displayed page number + $scope.page = 1 + + + + ## + # Mark the provided notification as read, updating its status on the server and moving it + # to the already read notifications list. + # @param notification {{id:number}} the notification to mark as read + # @param e {Object} jQuery event object + ## + $scope.markAsRead = (notification, e) -> + e.preventDefault() + Notification.update {id: notification.id}, + id: notification.id + is_read: true + , -> + index = $scope.$parent.notifications.indexOf(notification) + $scope.$parent.notifications.splice(index,1) + $scope.notificationsRead.push notification + + + + ## + # Mark every unread notifications as read and move them for the unread list to to read array. + ## + $scope.markAllAsRead = -> + Notification.update {} + , -> # success + angular.forEach $scope.$parent.notifications, (n)-> + $scope.notificationsRead.push n + + $scope.$parent.notifications.splice(0, $scope.$parent.notifications.length) + + + + ## + # Request the server to retrieve the next undisplayed notifications and add them + # to the archived notifications list. + ## + $scope.addMoreNotificationsReaded = -> + Notification.query {is_read: true, page: $scope.page}, (notifications) -> + $scope.notificationsRead = $scope.notificationsRead.concat notifications + $scope.paginateActive = false if notifications.length < NOTIFICATIONS_PER_PAGE + + $scope.page += 1 + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + $scope.addMoreNotificationsReaded() + + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] diff --git a/app/assets/javascripts/controllers/projects.coffee b/app/assets/javascripts/controllers/projects.coffee new file mode 100644 index 000000000..4fa8f55ae --- /dev/null +++ b/app/assets/javascripts/controllers/projects.coffee @@ -0,0 +1,358 @@ +'use strict' + +### COMMON CODE ### + +## +# Provides a set of common properties and methods to the $scope parameter. They are used +# in the various projects' admin controllers. +# +# Provides : +# - $scope.machines = [{Machine}] +# - $scope.components = [{Component}] +# - $scope.themes = [{Theme}] +# - $scope.licences = [{Licence}] +# - $scope.submited(content) +# - $scope.cancel() +# - $scope.addFile() +# - $scope.deleteFile(file) +# - $scope.addStep() +# - $scope.deleteStep(step) +# +# Requires : +# - $scope.project.project_caos_attributes = [] +# - $scope.project.project_steps_attributes = [] +# - $state (Ui-Router) [ 'app.public.projects_show', 'app.public.projects_list' ] +## +class ProjectsController + constructor: ($scope, $state, Project, Machine, Member, Component, Theme, Licence, $document)-> + + ## Retrieve the list of machines from the server + Machine.query().$promise.then (data)-> + $scope.machines = data.map (d) -> + id: d.id + name: d.name + + ## Retrieve the list of components from the server + Component.query().$promise.then (data)-> + $scope.components = data.map (d) -> + id: d.id + name: d.name + + ## Retrieve the list of themes from the server + Theme.query().$promise.then (data)-> + $scope.themes = data.map (d) -> + id: d.id + name: d.name + + ## Retrieve the list of licences from the server + Licence.query().$promise.then (data)-> + $scope.licences = data.map (d) -> + id: d.id + name: d.name + + + + ## + # For use with ngUpload (https://github.com/twilson63/ngUpload). + # Intended to be the callback when an upload is done: any raised error will be stacked in the + # $scope.alerts array. If everything goes fine, the user is redirected to the project page. + # @param content {Object} JSON - The upload's result + ## + $scope.submited = (content) -> + if !content.id? + $scope.alerts = [] + angular.forEach content, (v, k)-> + angular.forEach v, (err)-> + $scope.alerts.push + msg: k+': '+err + type: 'danger' + # using https://github.com/oblador/angular-scroll + $('section[ui-view=main]').scrollTop(0, 200) + return + else + $state.go('app.public.projects_show', {id: content.id}) + + + + ## + # Changes the user's view to the projects list page + ## + $scope.cancel = -> + $state.go('app.public.projects_list') + + + + ## + # For use with 'ng-class', returns the CSS class name for the uploads previews. + # The preview may show a placeholder or the content of the file depending on the upload state. + # @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules) + ## + $scope.fileinputClass = (v)-> + if v + 'fileinput-exists' + else + 'fileinput-new' + + + + ## + # This will create a single new empty entry into the project's CAO attachements list. + ## + $scope.addFile = -> + $scope.project.project_caos_attributes.push {} + + + + ## + # This will remove the given file from the project's CAO attachements list. If the file was previously uploaded + # to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from + # the CAO attachements array. + # @param file {Object} the file to delete + ## + $scope.deleteFile = (file) -> + index = $scope.project.project_caos_attributes.indexOf(file) + if file.id? + file._destroy = true + else + $scope.project.project_caos_attributes.splice(index, 1) + + + + ## + # This will create a single new empty entry into the project's steps list. + ## + $scope.addStep = -> + $scope.project.project_steps_attributes.push {} + + + + ## + # This will remove the given stip from the project's steps list. If the step was previously saved + # on the server, it will be marked for deletion for the next saving. Otherwise, it will be simply truncated from + # the steps array. + # @param file {Object} the file to delete + ## + $scope.deleteStep = (step) -> + index = $scope.project.project_steps_attributes.indexOf(step) + if step.id? + step._destroy = true + else + $scope.project.project_steps_attributes.splice(index, 1) + + + +## +# Controller used on projects listing page +## +Application.Controllers.controller "projectsController", ["$scope", "$state", 'Project', 'Machine', 'Theme', 'Component', ($scope, $state, Project, Machine, Theme, Component) -> + + + + ### PRIVATE STATIC CONSTANTS ### + + # Number of notifications added to the page when the user clicks on 'load next notifications' + PROJECTS_PER_PAGE = 12 + + + + ### PUBLIC SCOPE ### + + ## list of projects to display + $scope.projects = [] + + ## list of machines / used for filtering + $scope.machines = [] + + ## list of themes / used for filtering + $scope.themes = Theme.query() + + ## list of components / used for filtering + $scope.components = Component.query() + + ## By default, the pagination mode is activated to limit the page size + $scope.paginateActive = true + + ## The currently displayed page number + $scope.page = 1 + + + + ## + # Request the server to retrieve the next undisplayed projects and add them + # to the local projects list. + ## + $scope.loadMoreProjects = -> + Project.query {page: $scope.page}, (projects) -> + $scope.projects = $scope.projects.concat projects + $scope.paginateActive = false if projects.length < PROJECTS_PER_PAGE + + $scope.page += 1 + + + + ## + # Callback to switch the user's view to the detailled project page + # @param project {{slug:string}} The project to display + ## + $scope.showProject = (project) -> + $state.go('app.public.projects_show', {id: project.slug}) + + + + ## + # Callback to delete the provided project. Then, the projects list page is refreshed (admins only) + ## + $scope.delete = (project) -> + # check the permissions + if $scope.currentUser.role isnt 'admin' + console.error 'Unauthorized operation' + else + # delete the project then refresh the projects list + project.$delete -> + $state.go('app.public.projects_list', {}, {reload: true}) + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + Machine.query().$promise.then (data)-> + $scope.machines = data.map (d) -> + id: d.id + name: d.name + + $scope.loadMoreProjects() + + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] + + + +## +# Controller used in the project creation page +## +Application.Controllers.controller "newProjectController", ["$scope", "$state", 'Project', 'Machine', 'Member', 'Component', 'Theme', 'Licence', '$document', 'CSRF', ($scope, $state, Project, Machine, Member, Component, Theme, Licence, $document, CSRF) -> + CSRF.setMetaTags() + + ## API URL where the form will be posted + $scope.actionUrl = "/api/projects/" + + ## Form action on the above URL + $scope.method = 'post' + + ## Button litteral text value + $scope.submitName = 'Enregistrer comme brouillon' + + ## Default project parameters + $scope.project = + project_steps_attributes: [] + project_caos_attributes: [] + + ## Other members list (project collaborators) + Member.query().$promise.then (data)-> + $scope.members = data.filter (m) -> + m.id != $scope.currentUser.id + .map (d) -> + id: d.id + name: d.name + + ## Using the ProjectsController + new ProjectsController($scope, $state, Project, Machine, Member, Component, Theme, Licence, $document) +] + + + +## +# Controller used in the project edition page +## +Application.Controllers.controller "editProjectController", ["$scope", "$state", '$stateParams', 'Project', 'Machine', 'Member', 'Component', 'Theme', 'Licence', '$document', 'CSRF', ($scope, $state, $stateParams, Project, Machine, Member, Component, Theme, Licence, $document, CSRF) -> + CSRF.setMetaTags() + + ## API URL where the form will be posted + $scope.actionUrl = "/api/projects/" + $stateParams.id + + ## Form action on the above URL + $scope.method = 'put' + + ## Button litteral text value + $scope.submitName = 'Enregistrer' + + ## Retrieve the project's details, if an error occured, redirect the user to the projects list page + $scope.project = Project.get {id: $stateParams.id} + , -> # success + return + , -> # failed + $state.go('app.public.projects_list') + + ## Other members list (project collaborators) + Member.query().$promise.then (data)-> + $scope.members = data.filter (m) -> + m.id != $scope.project.author_id + .map (d) -> + id: d.id + name: d.name + + ## Using the ProjectsController + new ProjectsController($scope, $state, Project, Machine, Member, Component, Theme, Licence, $document) +] + + + +## +# Controller used in the public project's details page +## +Application.Controllers.controller "showProjectController", ["$scope", "$state", "$stateParams", "Project", '$location', ($scope, $state, $stateParams, Project, $location) -> + + + + ### PUBLIC SCOPE ### + + ## Will be set to true once the project details are loaded. Used to load the Disqus plugin at the right moment + $scope.contentLoaded = false + + ## Store the project's details + $scope.project = {} + + + + ## + # Test if the provided user has the edition rights on the current project + # @param [user] {{id:number}} (optional) the user to check rights + # @returns boolean + ## + $scope.projectEditableBy = (user) -> + return false if not user? + return true if $scope.project.author_id == user.id + canEdit = false + angular.forEach $scope.project.project_users, (u)-> + canEdit = true if u.id == user.id and u.is_valid + return canEdit + + + + ### PRIVATE SCOPE ### + + ## + # Kind of constructor: these actions will be realized first when the controller is loaded + ## + initialize = -> + ## Retrieve the project content + $scope.project = Project.get {id: $stateParams.id} + , -> # success + $scope.contentLoaded = true + $scope.project_url = $location.absUrl() + return + , -> # failed, redirect the user to the projects listing + $state.go('app.public.projects_list') + + + + ## !!! MUST BE CALLED AT THE END of the controller + initialize() +] diff --git a/app/assets/javascripts/directives/bs-jasny-fileinput.js b/app/assets/javascripts/directives/bs-jasny-fileinput.js new file mode 100644 index 000000000..b95a615fc --- /dev/null +++ b/app/assets/javascripts/directives/bs-jasny-fileinput.js @@ -0,0 +1,37 @@ +'use strict'; + +Application.Directives.directive('bsJasnyFileinput', [function(){ + return { + require : ['ngModel'], + link : function($scope, elm, attrs, requiredCtrls){ + var ngModelCtrl = requiredCtrls[0]; + var fileinput = elm.parents('[data-provides=fileinput]'); + var filetypeRegex = attrs.bsJasnyFileinput; + fileinput.on('clear.bs.fileinput', function(e){ + if(ngModelCtrl){ + ngModelCtrl.$setViewValue(null); + ngModelCtrl.$setPristine(); + $scope.$apply(); + } + }); + fileinput.on('change.bs.fileinput', function(e, files){ + if(ngModelCtrl){ + if(files){ + ngModelCtrl.$setViewValue(files.result); + } else { + ngModelCtrl.$setPristine(); + } + + // TODO: ne marche pas pour filetype + if (filetypeRegex) { + if(files && typeof files.type !== "undefined" && files.type.match(new RegExp(filetypeRegex))) + ngModelCtrl.$setValidity('filetype', true); + else + ngModelCtrl.$setValidity('filetype', false); + } + } + $scope.$apply(); + }); + } + } +}]); diff --git a/app/assets/javascripts/directives/directives.coffee b/app/assets/javascripts/directives/directives.coffee new file mode 100644 index 000000000..8c4d5a748 --- /dev/null +++ b/app/assets/javascripts/directives/directives.coffee @@ -0,0 +1,68 @@ +'use strict' + +Application.Directives.directive 'fileread', [ -> + { + scope: + fileread: "=" + + link: (scope, element, attributes) -> + element.bind "change", (changeEvent) -> + scope.$apply -> + scope.fileread = changeEvent.target.files[0] + } +] + +# This `bsHolder` angular directive is a workaround for +# an incompatability between angular and the holder.js +# image placeholder library. +# +# To use, simply define `bs-holder` on any element +Application.Directives.directive 'bsHolder', [ -> + { + link: (scope, element, attrs) -> + Holder.addTheme("icon", { background: "white", foreground: "#e9e9e9", size: 80, font: "FontAwesome"}) + .addTheme("avatar", { background: "#eeeeee", foreground: "#555555", size: 16, font: "FontAwesome"}) + .run(element[0]) + return + } +] + +Application.Directives.directive 'match', [ -> + { + require: 'ngModel' + restrict: 'A' + scope: + match: '=' + link: (scope, elem, attrs, ctrl) -> + scope.$watch -> + (ctrl.$pristine && angular.isUndefined(ctrl.$modelValue)) || scope.match == ctrl.$modelValue + , (currentValue) -> + ctrl.$setValidity('match', currentValue) + } +] + +Application.Directives.directive 'publishProject', [ -> + { + restrict: 'A' + link: (scope, elem, attrs, ctrl) -> + elem.bind 'click', ($event)-> + if ($event) + $event.preventDefault() + $event.stopPropagation() + + return if (elem.attr('disabled')) + input = angular.element('') + form = angular.element('form') + form.append(input) + form.triggerHandler('submit') + form[0].submit() + } +] + + +Application.Directives.directive "disableAnimation", ($animate) -> + restrict: "A" + link: (scope, elem, attrs) -> + attrs.$observe "disableAnimation", (value) -> + $animate.enabled not value, elem + diff --git a/app/assets/javascripts/directives/fab_user_avatar.coffee.erb b/app/assets/javascripts/directives/fab_user_avatar.coffee.erb new file mode 100644 index 000000000..2440715dc --- /dev/null +++ b/app/assets/javascripts/directives/fab_user_avatar.coffee.erb @@ -0,0 +1,10 @@ +Application.Directives.directive 'fabUserAvatar', [ -> + { + restrict: 'E' + scope: + userAvatar: "=ngModel" + avatarClass: '@' + templateUrl: '<%= asset_path "shared/_user_avatar.html" %>' + } +] + diff --git a/app/assets/javascripts/filters/filters.coffee b/app/assets/javascripts/filters/filters.coffee new file mode 100644 index 000000000..e3277355a --- /dev/null +++ b/app/assets/javascripts/filters/filters.coffee @@ -0,0 +1,119 @@ +'use strict' + +# filter for projects and trainings +Application.Controllers.filter "machineFilter", [ -> + (elements, selectedMachine) -> + if !angular.isUndefined(elements) and !angular.isUndefined(selectedMachine) and elements? and selectedMachine? + filteredElements = [] + angular.forEach elements, (element)-> + if element.machine_ids.indexOf(selectedMachine) != -1 + filteredElements.push(element) + filteredElements + else + elements +] + +Application.Controllers.filter "projectMemberFilter", [ "Auth", (Auth)-> + (projects, selectedMember) -> + if !angular.isUndefined(projects) and angular.isDefined(selectedMember) and projects? and selectedMember? and selectedMember != "" + filteredProject = [] + # Mes projets + if selectedMember == '0' + angular.forEach projects, (project)-> + if project.author_id == Auth._currentUser.id + filteredProject.push(project) + # les projets auxquels je collabore + else + angular.forEach projects, (project)-> + if project.user_ids.indexOf(Auth._currentUser.id) != -1 + filteredProject.push(project) + filteredProject + else + projects +] + +Application.Controllers.filter "themeFilter", [ -> + (projects, selectedTheme) -> + if !angular.isUndefined(projects) and !angular.isUndefined(selectedTheme) and projects? and selectedTheme? + filteredProjects = [] + angular.forEach projects, (project)-> + if project.theme_ids.indexOf(selectedTheme) != -1 + filteredProjects.push(project) + filteredProjects + else + projects +] + +Application.Controllers.filter "componentFilter", [ -> + (projects, selectedComponent) -> + if !angular.isUndefined(projects) and !angular.isUndefined(selectedComponent) and projects? and selectedComponent? + filteredProjects = [] + angular.forEach projects, (project)-> + if project.component_ids.indexOf(selectedComponent) != -1 + filteredProjects.push(project) + filteredProjects + else + projects +] + +Application.Controllers.filter "projectsByAuthor", [ -> + (projects, authorId) -> + if !angular.isUndefined(projects) and angular.isDefined(authorId) and projects? and authorId? and authorId != "" + filteredProject = [] + angular.forEach projects, (project)-> + if project.author_id == authorId + filteredProject.push(project) + filteredProject + else + projects +] + +Application.Controllers.filter "projectsCollabored", [ -> + (projects, memberId) -> + if !angular.isUndefined(projects) and angular.isDefined(memberId) and projects? and memberId? and memberId != "" + filteredProject = [] + angular.forEach projects, (project)-> + if project.user_ids.indexOf(memberId) != -1 + filteredProject.push(project) + filteredProject + else + projects +] + +# depend on humanize.js lib in /vendor +Application.Controllers.filter "humanize", [ -> + (element, param) -> + Humanize.truncate(element, param, null) +] + +Application.Controllers.filter "breakFilter", [ -> + (text) -> + if text != undefined + text.replace(/\n/g, '
') +] + +Application.Controllers.filter "toTrusted", [ "$sce", ($sce) -> + (text) -> + $sce.trustAsHtml text +] + + +Application.Controllers.filter "eventsFilter", [ -> + (elements, selectedScope) -> + if !angular.isUndefined(elements) and !angular.isUndefined(selectedScope) and elements? and selectedScope? and selectedScope != "" + filteredElements = [] + angular.forEach elements, (element)-> + element.start_at = element.availability.start_at if angular.isUndefined(element.start_at) + switch selectedScope + when "future" + if new Date(element.start_at) > new Date + filteredElements.push(element) + when "passed" + if new Date(element.start_at) <= new Date + filteredElements.push(element) + else + return [] + filteredElements + else + elements +] diff --git a/app/assets/javascripts/router.coffee.erb b/app/assets/javascripts/router.coffee.erb new file mode 100644 index 000000000..96ec7a69b --- /dev/null +++ b/app/assets/javascripts/router.coffee.erb @@ -0,0 +1,222 @@ +angular.module('application.router', ['ui.router']). + config ['$stateProvider', '$urlRouterProvider', '$locationProvider', ($stateProvider, $urlRouterProvider, $locationProvider) -> + $locationProvider.hashPrefix('!') + $urlRouterProvider.otherwise("/") + + # abstract root parents states + # these states controls the access rights to the various routes inherited from them + $stateProvider + .state 'app', + abstract: true + views: + 'header': { templateUrl: '<%= asset_path "shared/header.html" %>' } + 'leftnav': + templateUrl: '<%= asset_path "shared/leftnav.html" %>' + controller: 'mainNavController' + 'main': + templateUrl: '<%= asset_path "home.html" %>' + controller: 'homeController' + .state 'app.public', + abstract: true + .state 'app.logged', + abstract: true + data: + authorizedRoles: ['member', 'admin'] + resolve: + currentUser: ['Auth', (Auth)-> + Auth.currentUser() + ] + onEnter: ["currentUser", "$rootScope", (currentUser, $rootScope)-> + $rootScope.currentUser = currentUser + ] + .state 'app.admin', + abstract: true + data: + authorizedRoles: ['admin'] + resolve: + currentUser: ['Auth', (Auth)-> + Auth.currentUser() + ] + onEnter: ["currentUser", "$rootScope", (currentUser, $rootScope)-> + $rootScope.currentUser = currentUser + ] + + + + # main pages + .state 'app.public.about', + url: '/about' + views: + 'content@': { templateUrl: '<%= asset_path "shared/about.html" %>' } + .state 'app.public.home', + url: '/?reset_password_token' + views: + 'main': + templateUrl: '<%= asset_path "home.html" %>' + controller: 'homeController' + + + # dashboard + .state 'app.logged.dashboard_profile', + url: '/dashboard/profile' + views: + 'main@': + templateUrl: '<%= asset_path "dashboard/profile.html" %>' + controller: 'editProfileController' + .state 'app.logged.dashboard_projects', + url: '/dashboard/projects' + views: + 'main@': + templateUrl: '<%= asset_path "dashboard/projects.html" %>' + controller: 'dashboardProjectsController' + + + # members + .state 'app.logged.members_show', + url: '/members/:id' + views: + 'main@': + templateUrl: '<%= asset_path "members/show.html" %>' + controller: 'showProfileController' + .state 'app.logged.members', + url: '/members' + views: + 'main@': + templateUrl: '<%= asset_path "members/index.html" %>' + controller: 'membersController' + + + # projects + .state 'app.public.projects_list', + url: '/projects' + views: + 'main@': + templateUrl: '<%= asset_path "projects/index.html" %>' + controller: 'projectsController' + .state 'app.public.projects_show', + url: '/projects/:id' + views: + 'main@': + templateUrl: '<%= asset_path "projects/show.html" %>' + controller: 'showProjectController' + .state 'app.logged.projects_new', + url: '/projects/new' + views: + 'main@': + templateUrl: '<%= asset_path "projects/new.html" %>' + controller: 'newProjectController' + .state 'app.logged.projects_edit', + url: '/projects/:id/edit' + views: + 'main@': + templateUrl: '<%= asset_path "projects/edit.html" %>' + controller: 'editProjectController' + + + + # machines + .state 'app.public.machines_list', + url: '/machines' + views: + 'main@': + templateUrl: '<%= asset_path "machines/index.html" %>' + controller: 'machinesController' + .state 'app.public.machines_show', + url: '/machines/:id' + views: + 'main@': + templateUrl: '<%= asset_path "machines/show.html" %>' + controller: 'showMachineController' + .state 'app.admin.machines_new', + url: '/machines/new' + views: + 'main@': + templateUrl: '<%= asset_path "machines/new.html" %>' + controller: 'newMachineController' + .state 'app.admin.machines_edit', + url: '/machines/:id/edit' + views: + 'main@': + templateUrl: '<%= asset_path "machines/edit.html" %>' + controller: 'editMachineController' + + + # notifications + .state 'app.logged.notifications', + url: '/notifications' + views: + 'main@': + templateUrl: '<%= asset_path "notifications/index.html" %>' + controller: 'notificationsController' + + + # events + .state 'app.public.events_list', + url: '/events' + views: + 'main@': + templateUrl: '<%= asset_path "events/index.html" %>' + controller: 'eventsController' + .state 'app.public.events_show', + url: '/events/:id' + views: + 'main@': + templateUrl: '<%= asset_path "events/show.html" %>' + controller: 'showEventController' + + + # --- namespace /admin/... --- + + + # project's elements + .state 'app.admin.project_elements', + url: '/admin/project_elements' + views: + 'main@': + templateUrl: '<%= asset_path "admin/project_elements/index.html" %>' + controller: 'projectElementsController' + + + # events + .state 'app.admin.events', + url: '/admin/events' + views: + 'main@': + templateUrl: '<%= asset_path "admin/events/index.html" %>' + controller: 'adminEventsController' + .state 'app.admin.events_new', + url: '/admin/events/new' + views: + 'main@': + templateUrl: '<%= asset_path "events/new.html" %>' + controller: 'newEventController' + .state 'app.admin.events_edit', + url: '/admin/events/:id/edit' + views: + 'main@': + templateUrl: '<%= asset_path "events/edit.html" %>' + controller: 'editEventController' + + + # members + .state 'app.admin.members', + url: '/admin/members' + views: + 'main@': + templateUrl: '<%= asset_path "admin/members/index.html" %>' + controller: 'membersController' + .state 'app.admin.members_new', + url: '/admin/members/new' + views: + 'main@': + templateUrl: '<%= asset_path "admin/members/new.html" %>' + controller: 'newMemberController' + .state 'app.admin.members_edit', + url: '/admin/members/:id/edit' + views: + 'main@': + templateUrl: '<%= asset_path "admin/members/edit.html" %>' + controller: 'editMemberController' + + +] diff --git a/app/assets/javascripts/services/auth.coffee b/app/assets/javascripts/services/auth.coffee new file mode 100644 index 000000000..0f8042f06 --- /dev/null +++ b/app/assets/javascripts/services/auth.coffee @@ -0,0 +1,12 @@ +'use strict' + +Application.Services.factory 'AuthService', ["Session", (Session) -> + isAuthenticated: -> + Session.currentUser? and Session.currentUser.id? + + isAuthorized: (authorizedRoles) -> + if !angular.isArray(authorizedRoles) + authorizedRoles = [authorizedRoles] + + @isAuthenticated() and authorizedRoles.indexOf(Session.currentUser.role) != -1 + ] diff --git a/app/assets/javascripts/services/category.coffee b/app/assets/javascripts/services/category.coffee new file mode 100644 index 000000000..f34ae8b5c --- /dev/null +++ b/app/assets/javascripts/services/category.coffee @@ -0,0 +1,8 @@ +'use strict' + +Application.Services.factory 'Category', ["$resource", ($resource)-> + $resource "/api/categories/:id", + {id: "@id"}, + update: + method: 'PUT' +] diff --git a/app/assets/javascripts/services/component.coffee b/app/assets/javascripts/services/component.coffee new file mode 100644 index 000000000..af4994267 --- /dev/null +++ b/app/assets/javascripts/services/component.coffee @@ -0,0 +1,8 @@ +'use strict' + +Application.Services.factory 'Component', ["$resource", ($resource)-> + $resource "/api/components/:id", + {id: "@id"}, + update: + method: 'PUT' +] diff --git a/app/assets/javascripts/services/csrf.coffee b/app/assets/javascripts/services/csrf.coffee new file mode 100644 index 000000000..c37bfd911 --- /dev/null +++ b/app/assets/javascripts/services/csrf.coffee @@ -0,0 +1,14 @@ +'use strict' + +Application.Services.service 'CSRF', ['$cookies', + ($cookies)-> + return { + setMetaTags: -> + if angular.element('meta[name="csrf-param"]').length == 0 + angular.element('head').append("") + angular.element('head').append("") + else + angular.element('meta[name="csrf-token"]').replaceWith("") + return + } +] diff --git a/app/assets/javascripts/services/dialogs.coffee.erb b/app/assets/javascripts/services/dialogs.coffee.erb new file mode 100644 index 000000000..d10983921 --- /dev/null +++ b/app/assets/javascripts/services/dialogs.coffee.erb @@ -0,0 +1,27 @@ +'use strict' + +Application.Services.factory 'dialogs', ["$modal", ($modal) -> + confirm: (options, success, error)-> + defaultOpts = + templateUrl: '<%= asset_path "shared/confirm_modal.html" %>' + size: 'sm' + resolve: + object: -> + title: 'Titre de confirmation' + msg: 'Message de confiramtion' + controller: ['$scope', '$modalInstance', '$state', 'object', ($scope, $modalInstance, $state, object) -> + $scope.object = object + $scope.ok = -> + $modalInstance.close() + $scope.cancel = -> + $modalInstance.dismiss('cancel') + ] + angular.extend(defaultOpts, options) if angular.isObject options + $modal.open defaultOpts + .result['finally'](null).then -> + if angular.isFunction(success) + success() + , -> + if angular.isFunction(error) + error() + ] diff --git a/app/assets/javascripts/services/event.coffee b/app/assets/javascripts/services/event.coffee new file mode 100644 index 000000000..59efa120a --- /dev/null +++ b/app/assets/javascripts/services/event.coffee @@ -0,0 +1,13 @@ +'use strict' + +Application.Services.factory 'Event', ["$resource", ($resource)-> + $resource "/api/events/:id", + {id: "@id"}, + update: + method: 'PUT' + upcoming: + method: 'GET' + url: '/api/events/upcoming/:limit' + params: {limit: "@limit"} + isArray: true +] diff --git a/app/assets/javascripts/services/group.coffee b/app/assets/javascripts/services/group.coffee new file mode 100644 index 000000000..a4192f7d6 --- /dev/null +++ b/app/assets/javascripts/services/group.coffee @@ -0,0 +1,6 @@ +'use strict' + +Application.Services.factory 'Group', ["$resource", ($resource)-> + $resource "/api/groups/:id", + {id: "@id"} +] diff --git a/app/assets/javascripts/services/licence.coffee b/app/assets/javascripts/services/licence.coffee new file mode 100644 index 000000000..0727d44f2 --- /dev/null +++ b/app/assets/javascripts/services/licence.coffee @@ -0,0 +1,8 @@ +'use strict' + +Application.Services.factory 'Licence', ["$resource", ($resource)-> + $resource "/api/licences/:id", + {id: "@id"}, + update: + method: 'PUT' +] diff --git a/app/assets/javascripts/services/machine.coffee b/app/assets/javascripts/services/machine.coffee new file mode 100644 index 000000000..8c431f5e7 --- /dev/null +++ b/app/assets/javascripts/services/machine.coffee @@ -0,0 +1,8 @@ +'use strict' + +Application.Services.factory 'Machine', ["$resource", ($resource)-> + $resource "/api/machines/:id", + {id: "@id"}, + update: + method: 'PUT' +] diff --git a/app/assets/javascripts/services/member.coffee b/app/assets/javascripts/services/member.coffee new file mode 100644 index 000000000..4d2a7afd3 --- /dev/null +++ b/app/assets/javascripts/services/member.coffee @@ -0,0 +1,11 @@ +'use strict' + +Application.Services.factory 'Member', ["$resource", ($resource)-> + $resource "/api/members/:id", + {id: "@id"}, + lastSubscribed: + method: 'GET' + url: '/api/last_subscribed/:limit' + params: {limit: "@limit"} + isArray: true +] diff --git a/app/assets/javascripts/services/notification.coffee b/app/assets/javascripts/services/notification.coffee new file mode 100644 index 000000000..56709c43c --- /dev/null +++ b/app/assets/javascripts/services/notification.coffee @@ -0,0 +1,8 @@ +'use strict' + +Application.Services.factory 'Notification', ["$resource", ($resource)-> + $resource "/api/notifications/:id", + {id: "@id"}, + update: + method: 'PUT' +] diff --git a/app/assets/javascripts/services/project.coffee b/app/assets/javascripts/services/project.coffee new file mode 100644 index 000000000..637f59b53 --- /dev/null +++ b/app/assets/javascripts/services/project.coffee @@ -0,0 +1,10 @@ +'use strict' + +Application.Services.factory 'Project', ["$resource", ($resource)-> + $resource "/api/projects/:id", + {id: "@id"}, + lastPublished: + method: 'GET' + url: '/api/projects/last_published' + isArray: true +] diff --git a/app/assets/javascripts/services/session.coffee b/app/assets/javascripts/services/session.coffee new file mode 100644 index 000000000..8813b5bbf --- /dev/null +++ b/app/assets/javascripts/services/session.coffee @@ -0,0 +1,11 @@ +'use strict' + +Application.Services.service 'Session', [ -> + @create = (user)-> + @currentUser = user + + @destroy = -> + @currentUser = null + + return @ +] diff --git a/app/assets/javascripts/services/theme.coffee b/app/assets/javascripts/services/theme.coffee new file mode 100644 index 000000000..50475265d --- /dev/null +++ b/app/assets/javascripts/services/theme.coffee @@ -0,0 +1,8 @@ +'use strict' + +Application.Services.factory 'Theme', ["$resource", ($resource)-> + $resource "/api/themes/:id", + {id: "@id"}, + update: + method: 'PUT' +] diff --git a/app/assets/javascripts/services/twitter.coffee b/app/assets/javascripts/services/twitter.coffee new file mode 100644 index 000000000..7b527bfff --- /dev/null +++ b/app/assets/javascripts/services/twitter.coffee @@ -0,0 +1,5 @@ +'use strict' + +Application.Services.factory 'Twitter', ["$resource", ($resource)-> + $resource "/api/feeds/twitter_timelines" +] diff --git a/app/assets/stylesheets/app.base.scss b/app/assets/stylesheets/app.base.scss new file mode 100644 index 000000000..6d415b0c2 --- /dev/null +++ b/app/assets/stylesheets/app.base.scss @@ -0,0 +1,169 @@ +// reset +html { + overflow-x: hidden; +} +body { + -webkit-font-smoothing: antialiased; +} + +.h1, .h2, .h3, .h4, .h5, .h6{ + margin: 0; +} + +h1, .page-title { + line-height: rem-calc(24); + text-transform: uppercase; + font-weight: 900; +} +h2 { + color: $red; + line-height: rem-calc(24); + font-weight: 900; +} +h3 { font-weight: 600; } +h4 { font-weight: bold; } +h5 { + display: inline-block; + position: relative; + line-height: rem-calc(18); + color: $red; + font-size: rem-calc(16); + &:after { + position: absolute; + top: 18px; + left: 0px; + content: ''; + width: 35%; + height: 1px; + background-color: $red; + } +} + +// Links +// ------------------------- + +a { + color: $link-color; + text-decoration: none; +} +a:hover, +a:focus { + color: $link-hover-color; + text-decoration: none; +} + +label{ font-weight: 600; } +small, .small{font-size: $font-size-sm;} + +pre { padding: 0; } + +p { + font-size: rem-calc($font-size-base); + line-height: rem-calc(24); + + &.intro, .intro { + font-family: $font-proxima-condensed; + font-size: rem-calc(16); + line-height: rem-calc(24); + margin: 1.038em 0px 30px 0px; + font-weight: 600; + } +} + +dt { + color: $black-light; +} +dd { + color: $black-light; + margin-bottom: 20px; +} + + +// +// ------------------------- + +.col-0{clear:left;} + +.row.no-gutter{ + margin-left: 0; + margin-right: 0; +} + +.no-gutter > [class*="col"]{ + padding: 0; +} + +/* centered columns styles */ +.row-centered { + text-align:center; +} +.col-centered { + display:inline-block; + float:none; + /* reset the text-align */ + text-align:left; + /* inline-block space fix */ + margin-right:-4px; +} + + +::-webkit-input-placeholder { /* WebKit browsers */ + color: black; +} +:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: black; + opacity: 1; +} +::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: black; + opacity: 1; +} +:-ms-input-placeholder { /* Internet Explorer 10+ */ + color: black; +} + +// .ng-hide-remove-active { +// -webkit-transition:0.5s linear all; +// transition:0.5s linear all; +// } + +[ui-view].ng-enter, [ui-view].ng-leave { + position: absolute; + left: 0; + right: 0; + @include transition(all .7s ease-in-out); +} + +[ui-view].ng-enter { + opacity: 0; + // -webkit-transform:scale3d(0.5, 0.5, 0.5); + // -moz-transform:scale3d(0.5, 0.5, 0.5); + // transform:scale3d(0.5, 0.5, 0.5); +} + +[ui-view].ng-enter-active { + opacity: 1; + // -webkit-transform:scale3d(1, 1, 1); + // -moz-transform:scale3d(1, 1, 1); + // transform:scale3d(1, 1, 1); +} + +[ui-view].ng-leave { + opacity: 1; + /*padding-left: 0px;*/ + // -webkit-transform:translate3d(0, 0, 0); + // -moz-transform:translate3d(0, 0, 0); + // transform:translate3d(0, 0, 0); +} + +[ui-view].ng-leave-active { + opacity: 0; + /*padding-left: 100px;*/ + // -webkit-transform:translate3d(100px, 0, 0); + // -moz-transform:translate3d(100px, 0, 0); + // transform:translate3d(100px, 0, 0); +} + +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + display: none !important; +} diff --git a/app/assets/stylesheets/app.buttons.scss b/app/assets/stylesheets/app.buttons.scss new file mode 100644 index 000000000..cf6f2299f --- /dev/null +++ b/app/assets/stylesheets/app.buttons.scss @@ -0,0 +1,44 @@ + +.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { + + background-color: #f2f2f2; + +} + +.btn{ + > i{ + &.pull-left, + &.pull-right{ + line-height: 1.428571429; + } + } +} + +.btn-warning-full { + outline: 0; + text-transform: uppercase; + border: 3px solid $yellow; + background-color: $yellow; + &:hover { + background-color: white; + } +} + + +.btn-block { + padding-left: 12px; + padding-right: 12px; +} + +.btn-group-vertical > .btn:first-child:not(:last-child){ + border-top-right-radius: $border-radius-base; +} + +.btn-group-vertical > .btn:last-child:not(:first-child){ + border-bottom-left-radius: $border-radius-base; +} + +.btn-inactive{ + -webkit-box-shadow: none !important; + box-shadow: none !important; +} \ No newline at end of file diff --git a/app/assets/stylesheets/app.colors.scss b/app/assets/stylesheets/app.colors.scss new file mode 100644 index 000000000..def64aeb0 --- /dev/null +++ b/app/assets/stylesheets/app.colors.scss @@ -0,0 +1,36 @@ + +.bg-light { background-color: $brand-light; } +.bg-red { background-color: $red; color: white; } +.bg-red-dark { background-color: $red-dark; } +.bg-yellow { background-color: $yellow !important; } +.bg-machine { background-color: $beige; } +.bg-formation { background-color: $violet; } +.bg-atelier { background-color: $blue; } +.bg-stage { background-color: $violet; } +.bg-success { background-color: $brand-success; } +.bg-info { background-color: $brand-info; } + +.bg-black-light { background-color: #424242 !important; } + +.bg-white { + background-color: #fff; + color: $text-color; + a { + color: $link-color; + &:hover{ + color: darken($link-color, 10%); + } + } + .text-muted{color: $text-muted !important;} +} +.bg-white-only{background-color:#fff;} +.bg-empty{background-color: transparent;} + +.text-black{ color: #000 !important; }; +.text-black-light { color: #424242 !important; } +.text-gray { color: #5a5a5a !important; } +.text-white { color: #fff !important; } +.text-yellow { color: $yellow !important; } +.text-blue { color: $blue; } +.text-muted { color: $text-muted; } +.text-danger, .red { color: $red !important; } diff --git a/app/assets/stylesheets/app.components.scss b/app/assets/stylesheets/app.components.scss new file mode 100644 index 000000000..89ebad3fe --- /dev/null +++ b/app/assets/stylesheets/app.components.scss @@ -0,0 +1,438 @@ +.widget { + + h1, h2, h3 { + margin: 0; + line-height: rem-calc(18); + font-size: rem-calc(14); + font-weight: 600; + color: black; + } + h1 { + font-size: rem-calc(16); text-transform: uppercase; + } + h2 { font-weight: bold; } + h3 { color: $red; } + h4 { + font-size: rem-calc(12); + margin: 8px 0; + } + + + p { font-size: rem-calc(14); margin-top: 15px; } + + a { + color: $black-light; + &:hover { color: $red; } + } + .fa { + // color: $red; + } + + .widget-content { + font-size: rem-calc(14); + } + + .list-group-item { + &.no-b { + padding: 10px 15px; + } + } +} + + +//modal +.modal-dialog { top: 90px; } + +.modal-header { + .modal-logo { + position: absolute; + top: -70px; + left: 0; + right: 0; + margin: 0 auto; + } + h1 { + margin: 25px 0 20px 0; + font-weight: bold; + text-transform: uppercase; + text-align: center; + color: $red; + } +} + +.modal-backdrop { + height: 100%; +} + +.box-thumb { + opacity: 0.9; + &:hover { opacity: 1;} + &:hover .box-footer { opacity: 1; } + position: relative; + background-size: cover; + background-repeat: no-repeat; + border-radius: 8px; + margin-bottom: 30px; + cursor: pointer; + // todo + overflow: hidden; + height: 280px; + img { + opacity: 0.9; + + } + .project-caption { + text-shadow: rgba(29, 29, 29, 0.5) 0 -1px, rgba(29, 29, 29, 0.5) -1px 0, + rgba(29, 29, 29, 0.5) 1px 0, rgba(29, 29, 29, 0.5) 0 1px; + } + .box-content { + position: absolute; + top: 45px; + left: 0; + right: 0; + h1 { + padding: 0 20px; + color: white; + text-transform: uppercase; + font-size: rem-calc(24); + font-weight: 900; + line-height: rem-calc(30); + text-align: center; + } + } + .box-footer { + opacity: 0; + position: absolute; + bottom: 10px; + left: 0; + right: 0; + text-align: center; + } +} + +.article { + max-width: $screen-md-min; + margin: 0 auto; + + h2, h3, h4, h5 { margin: 1.8em 0 1em 0; } + + h2, h3 { + color: $red; + font-size: rem-calc(18); + font-weight: bold; + } + h2 { text-transform: uppercase; } + h4 { + font-weight: 600; + font-size: rem-calc(16); + color: #686868; + } + + .article-thumbnail { + max-height: 400px; + overflow: hidden; + } +} + +.label-staging { + position: absolute; + top: 10px; + right: -13px; +} + +.notification-open { + a { + position: relative; + .badge { + position: absolute; + top: 18px; right: 18px; + padding: 3px 6px 1px 6px; + } + } + .fa { color: black; font-size: rem-calc(24); } +} + + +.panel { + margin-bottom: 30px; + .panel-heading { + &.small { + padding: 15px 15px; + } + &.picture { + height: 250px; + background-size: cover; + background-position: center; + @include transition(opacity .5s ease); + cursor: pointer; + padding:0; + img { @include border-radius(6px 6px 0 0); } + &:hover { + opacity: 0.8; + } + } + .align { + position: relative; + top: -7px; + } + } +} + +.pricing-panel { + border: 1px solid $border-color; + + &:first-child { + border-right: none; + @include border-radius(3px 0 0 3px); + } + &:last-child { + @include border-radius(0 3px 3px 0); + } + .title { + margin: 10px 0; + font-size: rem-calc(16); + text-transform: uppercase; + } + .content { + padding: 15px 0; + background-color: $bg-gray; + .wrap { + width: 100px; height: 100px; + display: inline-block; + background: white; + @include border-radius(50%); + border: 3px solid $yellow; + } + .price { + position: relative; + top: 5px; left: 5px; + height: 84px; width: 84px; + background-color: black; + @include border-radius(50%); + + .amount { + padding-top: 16px; + font-weight: bold; + font-size: rem-calc(26); + color: white; + } + .period { + position: relative; + top: -14px; + font-size: rem-calc(14); + color: white; + } + } + } + .cta-button { + margin: 20px 0; + .btn { + outline: 0; + font-weight: 600; + font-size: rem-calc(16); + background-color: white; + padding-left: 30px; + padding-right: 30px; + &:hover { background-color: $yellow; } + } + } +} + +.well { + &.well-warning { + border-color: #ffdc4e; + background-color: #ffdc4e; + @include border-radius(3px); + padding: 5px 10px; + } +} + +.read { + opacity: 0.7; + background: #F2F2F2; +} + +.badge { + &.inverse { + color: black; + background-color: $yellow; + font-weight: 400; + } +} + +.avatar{ + position: relative; + display: block; + border-radius: 500px; + white-space: nowrap; + &.avatar-block { + white-space: inherit; + height: 76px; + .user-name { + display: block; + font-size: rem-calc(14); + line-height: rem-calc(14); + } + } + img{ + border-radius: 500px; + width: 100%; + } + i{ + position: absolute; + left: 0; + top: 0; + width: 10px; + height: 10px; + border-width: 2px; + border-style: solid; + border-radius: 100%; + &.md{ + width: 12px; + height: 12px; + margin: 1px; + } + &.right{ + left: auto; + right: 0; + } + &.bottom{ + left: auto; + top: auto; + bottom: 0; + right: 0; + } + &.on{ + background-color: $brand-success; + } + &.off{ + background-color: $text-muted; + } + &.busy{ + background-color: $brand-danger; + } + &.away{ + background-color: $brand-warning; + } + } +} + +.block-link { + cursor: pointer; + &:hover { background-color: $yellow; } +} + +.form-control.form-control-ui-select .select2-choices .select2-search-choice { + font-size: 85% !important; +} + +.about-link { + .label { + font-size: rem-calc(26); + padding: 0px 10px 0px 11px; + vertical-align: bottom; + &.label-icon { font-size: rem-calc(22); padding: 4px 9px 1px 10px; } + } +} + +.about-fablab { + position: relative; + z-index: 101; + height: 93%; + background-color: white; + @include transition(.5s linear all); + opacity:1; + + .about-picture { + padding: 70px 0; + height: 326px; + background: white asset-url("about-fablab.jpg") no-repeat; + background-size: cover; + margin-bottom: 30px; + } + .about-title { + margin: 0; + font-size: rem-calc(50); + line-height: rem-calc(48); + color: #fff; + font-weight: 900; //black + } + + .about-title-aside { + margin-top: 0; + font-size: rem-calc(18); + } + p { + font-size: rem-calc(18); + line-height: rem-calc(30); + color: $black-light; + text-align: justify; + } + + &.ng-hide { + opacity: 0; + @include transition(.5s linear all); + } + + &.ng-hide-add, + &.ng-hide-remove { + display:block!important; + } + + + +} + +.event { + transition: all 0.07s linear; +} + +.event:hover { +background-color: #cb1117; +color: white; +} + + +.event:hover * { +color: #eee; +border-color: #eee; +} + +.box-h-m { + height: 150px; + max-height: 150px; +} + +.half-w { + width: 50%; +} +.b-light-dark { +border-color: #d0d0d0; +} + +.p-sm { +padding: 10px; +} + +.crop-130 { + height: 130px; + width: 130px; + max-width: 130px; + max-height: 130px; + overflow: hidden; + vertical-align: bottom; +} + +.crop-130 img { + height: 130px; + width: auto; +} + +@media only screen and (max-width: 1280px) and (min-width: 770px) { + .crop-130 { + height: 90px; + width: 90px; + margin-top: 25px; + } +} + diff --git a/app/assets/stylesheets/app.functions.scss b/app/assets/stylesheets/app.functions.scss new file mode 100644 index 000000000..85119fe8e --- /dev/null +++ b/app/assets/stylesheets/app.functions.scss @@ -0,0 +1,63 @@ +// This is the default html and body font-size for the base rem value. +$rem-base: 10px !default; + + +// IMPORT ONCE +// We use this to prevent styles from being loaded multiple times for compenents that rely on other components. +$modules: () !default; +@mixin exports($name) { + @if (index($modules, $name) == false) { + $modules: append($modules, $name); + @content; + } +} + +// +// @functions +// + + +// STRIP UNIT +// It strips the unit of measure and returns it +@function strip-unit($num) { + @return $num / ($num * 0 + 1); +} + +// CONVERT TO REM +@function convert-to-rem($value, $base-value: $rem-base) { + $value: strip-unit($value) / strip-unit($base-value) * 1rem; + @if ($value == 0rem) { $value: 0; } // Turn 0rem into 0 + @return $value; +} + + +// REM CALC + +// New Syntax, allows to optionally calculate on a different base value to counter compounding effect of rem's. +// Call with 1, 2, 3 or 4 parameters, 'px' is not required but supported: +// +// rem-calc(10 20 30px 40); +// +// Space delimited, if you want to delimit using comma's, wrap it in another pair of brackets +// +// rem-calc((10, 20, 30, 40px)); +// +// Optionally call with a different base (eg: 8px) to calculate rem. +// +// rem-calc(16px 32px 48px, 8px); +// +// If you require to comma separate your list +// +// rem-calc((16px, 32px, 48), 8px); + +@function rem-calc($values, $base-value: $rem-base) { + $max: length($values); + + @if $max == 1 { @return convert-to-rem(nth($values, 1), $base-value); } + + $remValues: (); + @for $i from 1 through $max { + $remValues: append($remValues, convert-to-rem(nth($values, $i), $base-value)); + } + @return $remValues; +} diff --git a/app/assets/stylesheets/app.layout.scss b/app/assets/stylesheets/app.layout.scss new file mode 100644 index 000000000..ed17d7543 --- /dev/null +++ b/app/assets/stylesheets/app.layout.scss @@ -0,0 +1,344 @@ +/*layout*/ +.header, +.footer{ + min-height: 50px; + padding: 0 15px; + > p{ + margin-top: 15px; + display: inline-block; + } + > .btn, + > .btn-group, + > .btn-toolbar, + { + margin-top: 14px; + } + > .btn-lg{ + margin-top: 0; + } + .nav-tabs { + border: none; + margin-left: -15px; + margin-right: -15px; + > li { + a{ + border: none !important; + border-radius: 0; + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + &:hover, + &:focus + { + background-color: transparent; + } + } + &.active a{ + color: $text-color; + &, + &:hover{ + background-color: $body-bg; + } + } + } + &.nav-white{ + > li.active a{ + &, + &:hover{ + background-color: #fff; + } + } + } + } + &.navbar{ + border-radius: 0; + border: none; + margin-bottom: 0; + padding:0; + position: relative !important; + z-index: 1000; + } +} + +.header { + background-color: $header-bg; + @include box-shadow(0 1px 0px #cfcfcf); +} + + +.heading { + + .heading-btn { + a { + width: 100%; + padding: 35px 40%; + display: inline-block; + cursor: pointer; + color: black; + &:hover { + background-color: $yellow; + } + i:before { content: "\f177"; } + } + } + .heading-title { + overflow: hidden; + height: 94px; + h1 { + margin: 0 0 0 15px; + padding: 36px 15px; + } + } + .heading-actions { + height: 94px; + text-align: center; + } +} + + +body.container{ + padding: 0; +} + +.aside-md{ + width: 250px; +} + +@media (min-width: 768px) { + body.container{ + @include box-shadow(0 3px 60px rgba(0,0,0,0.3)); + border-left: 1px solid darken($border-color, 10%); + border-right: 1px solid darken($border-color, 10%); + } + .app{ + &, + body{ + height:100%; + overflow: hidden; + } + .hbox{ + &.stretch{ + height:100%; + } + } + .vbox{ + > section, + > footer{ + position: absolute; + } + &.flex{ + > section{ + > section{ + overflow: auto; + } + } + } + } + } + + .hbox{ + display: table; + table-layout: fixed; + border-spacing: 0; + width: 100%; + > aside, + > section{ + display: table-cell; + vertical-align: top; + height: 100%; + float: none; + &.show, + &.hidden-sm { + display: table-cell !important; + } + } + } + + .vbox{ + display: table; + border-spacing:0; + position: relative; + height: 100%; + width: 100%; + > section, + > footer { + top: 0; + bottom: 0; + width: 100%; + } + > header{ + ~ section { + top: 50px; + } + &.header-md{ + ~ section { + top: $header-md-height+2; + } + } + } + > section{ + &.w-f{ + bottom: 50px; + } + } + > footer { + top: auto; + z-index: 100; + ~ section { + bottom: 50px; + } + } + &.flex{ + > header, + > section, + > footer { + position: inherit; + } + > section{ + display: table-row; + height: 100%; + > section { + position: relative; + height: 100%; + -webkit-overflow-scrolling:touch; + .ie & { + display: table-cell; + } + > section { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + } + } + } + } + } + + .aside-xs{ + width: 60px; + } + .aside-sm{ + width: 150px; + } + .aside{ + width: 200px; + } + .aside-md{ + width: 250px; + } + .aside-lg{ + width: 300px; + } + .aside-xl{ + width: 360px; + } + .aside-xxl{ + width: 480px; + } + + .header-md{ + height: $header-md-height; + .navbar-form{ + margin-top: floor( ($header-md-height - 30)/2 ); + margin-bottom: floor( ($header-md-height - 30)/2 ); + } + } + + .scrollable{ + -webkit-overflow-scrolling:touch; + } + + ::-webkit-scrollbar { + width: 10px; + height: 10px; + } + ::-webkit-scrollbar-thumb { + background-color:rgba(50,50,50,0.25); + border: 2px solid transparent; + border-radius: 10px; + background-clip: padding-box; + } + ::-webkit-scrollbar-thumb:hover{ + background-color:rgba(50,50,50,0.5); + } + ::-webkit-scrollbar-track { + background-color:rgba(50,50,50,0.05); + } +} + +.scrollable{ + overflow-x: hidden; + overflow-y: auto; +} + +.no-touch { + .scrollable.hover { + overflow-y: hidden; + &:hover + { + overflow: visible; + overflow-y: auto; + } + } + ::-webkit-scrollbar-button { + width: 10px; + height: 6px; + background-color:rgba(50,50,50,0.05); + } +} + +.slimScrollBar{ + border-radius: 5px; + border: 2px solid transparent; + border-radius: 10px; + background-clip: padding-box !important; +} + + +@media print { + html, body, .hbox, .vbox{ + height: auto; + } + .vbox{ + > section, + > footer{ + position: relative; + } + } +} + + + +.datepicker-container { + position: relative; + z-index: 100; +} + +.datepicker-dropdown { + border: 1px solid #c7c5c5; + border-radius: 0.3em; + padding-top: 0.5em; + padding-bottom: 0.5em; + position: absolute; + right:0; + left: 0; + background-color: #ffffff; + + li { + padding-left: 0.8em; + padding-right: 0.8em; + margin-bottom: 1em; + line-height: 2.4em; + vertical-align: middle; + + div.input-group { + float:right; + + ul.dropdown-menu { + left: -5em !important; + } + } + } +} \ No newline at end of file diff --git a/app/assets/stylesheets/app.nav.scss b/app/assets/stylesheets/app.nav.scss new file mode 100644 index 000000000..85ce4d539 --- /dev/null +++ b/app/assets/stylesheets/app.nav.scss @@ -0,0 +1,456 @@ +/*primary nav*/ +.navbar-header{ + position: relative; + > .btn{ + position: absolute; + font-size: 1.3em; + padding: 9px 16px; + line-height: 30px; + right: 0; + } + .navbar-brand + .btn{ + right: 0; + top:0; + left: auto; + } +} + +.navbar-brand{ + float: none; + text-align: center; + font-size: 20px; + font-weight: 700; + height: auto; + line-height: 50px; + display: inline-block; + padding: 0 15px; + &:hover{ + text-decoration: none; + } + img{ + max-height: 20px; + margin-top: -4px; + vertical-align: middle; + display: initial; + } +} + +.nav-primary { + li { + > a > i{ + margin: floor(-($nav-primary-height - $line-height-computed)/2) -10px; + line-height: $nav-primary-height; + width: $nav-primary-height; + float: left; + margin-right: 5px; + text-align: center; + position: relative; + overflow: hidden; + &:before{ + position: relative; + z-index: 2; + } + } + } + ul.nav { + > li { + > a{ + padding: floor(($nav-primary-height - $line-height-computed)/2) 15px; + position: relative; + font-size: 14px; + @include transition(background-color .2s ease-in-out 0s); + .no-borders & { + border-width: 0 !important; + } + > .badge{ + font-size: 11px; + padding: 2px 5px 2px 4px; + margin-top: 2px; + } + > .text-muted{ + margin: 0 3px; + } + &.active{ + .text{ + display: none; + } + .text-active{ + display: inline-block !important; + } + } + } + li a{ + font-weight: normal; + text-transform: none; + } + &.active{ + > ul{ + display: block; + } + } + } + ul{ + display: none; + } + } + + .bg-black &{ + > ul.nav-main{ + > li{ + &:hover, + &:focus, + &:active, + &.active{ + > a{ + background-color: $brand-success; + } + } + } + } + } +} + +@media (min-width: 768px) { + .visible-nav-xs{display: none;} + .nav-xs { + width: $nav-xs-width; + > .nav-container { width: $nav-xs-width; } + .slimScrollDiv, + .slim-scroll { + overflow: visible !important; + } + .slimScrollBar, + .slimScrollRail { + display: none !important; + } + .scrollable{ + overflow: visible; + } + .nav-primary{ + > ul { + > li { + > a { + position: relative; + padding: 0 !important; + font-size: 11px; + text-align: center; + height: $nav-xs-height; + overflow-y: hidden; + border: none !important; + span { + display: table-cell; + vertical-align: middle; + height: $nav-xs-height; + width: $nav-xs-width; + &.pull-right{ + display: none !important; + } + } + i{ + width: auto; + float: none; + display: block; + font-size: 16px; + margin: 0; + line-height: $nav-xs-height; + border: none !important; + @include transition(margin-top 0.2s); + b{ + left: 0 !important; + } + } + .badge{ + position: absolute; + right: 10px; + top: 4px; + z-index: 3; + } + } + &:hover, + &:focus, + &:active, + &.active, + { + > a{ + i{ + margin-top: -$nav-xs-height; + } + } + } + } + ul{ + display: none !important; + position: absolute; + left: 100%; + top: 0; + z-index: 1050; + width: 220px; + -webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.1); + box-shadow: 0 2px 6px rgba(0,0,0,0.1); + } + } + li:hover, + li:focus, + li:active, + { + > ul{ + display: block !important; + } + } + } + &.nav-xs-right{ + .nav-primary > ul ul{ + left: auto; + right: 100%; + } + } + > .vbox > .header, + > .vbox > .footer { + padding:0 floor(($nav-xs-width - 30px)/2); + } + .hidden-nav-xs{ + display: none; + } + .visible-nav-xs{ + display: inherit; + } + .text-center-nav-xs{ + text-align: center; + } + + .nav-user{ + padding-left: 0; + padding-right: 0; + .avatar{ + float: none !important; + margin-right: 0; + } + .dropdown{ + > a{ + display: block; + text-align: center; + } + } + } + .navbar-header{ + float: none; + } + .navbar-brand{ + display: block; + padding: 0; + img{ + margin-right:0; + } + } + .navbar{ + padding: 0 + } + } + .navbar-brand{ + .header-md &{ + line-height: $header-md-height; + img{ + max-height: 44px; + } + } + } + .navbar-nav{ + > li{ + > a{ + .header-md &{ + padding: floor(($header-md-height - $line-height-computed)/2 - 1); + } + } + } + } +} + +@media (max-width: 767px) { + .navbar-fixed-top-xs{ + position: fixed !important; + left: 0; + width: 100%; + z-index: 1100; + // + *{ + // padding-top: 50px !important; + // } + } + .nav-bar-fixed-bottom{ + position: fixed; + left: 0; + bottom: 0; + width: 100%; + z-index: 1100; + } + /* .off screen nav from left or right*/ + html, body{ + overflow-x: hidden; + min-height: 100%; + } + .nav-primary{ + .dropdown-menu{ + position: relative; + float:none; + left: 0; + margin-left: 0; + padding: 0; + a{ + padding: 15px; + border-bottom: 1px solid #eee; + } + li:last-child{ + a{ + border-bottom: none; + } + } + } + } + .navbar-header{ + text-align: center; + } + .nav-user{ + margin: 0; + padding: 15px; + &.open{ + display: inherit !important; + } + .dropdown-menu{ + display: block; + position: static; + float: none; + } + .dropdown > a{ + display: block; + text-align: center; + font-size: 18px; + padding-bottom: 10px; + } + .avatar{ + width: 160px !important; + float: none !important; + display: block; + margin: 20px auto; + padding: 5px; + background-color: rgba(255, 255, 255, 0.1); + position: relative; + &:before { + content: ""; + position: absolute; + left: 5px; + right: 5px; + bottom: 5px; + top: 5px; + border: 4px solid #fff; + border-radius: 500px; + } + } + } + .nav-off-screen { + display: block !important; + position: absolute; + left: 0; + top: 0px; + bottom: 0; + width: $off-screen-nav-width; + visibility: visible; + overflow-x: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + .nav-primary{ + display: block !important; + } + .navbar-fixed-top-xs{ + width: $off-screen-nav-width; + } + &.push-right{ + .navbar-fixed-top-xs{ + left: 100% - $off-screen-nav-width; + } + } + &.push-right{ + left: auto; + right: 0; + + *{ + @include translate3d(-$off-screen-nav-width, 0px, 0px); + } + } + + *{ + background-color: $body-bg; + @include transition-transform(0.2s ease-in-out); + @include transition-delay(0s); + @include translate3d(0px, 0px, 0px); + @include backface-visibility(hidden); + @include translate3d($off-screen-nav-width, 0px, 0px); + overflow: hidden; + position: absolute; + width: 100%; + top: 0px; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + .nav-off-screen-block { + display:block !important; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 1950; + } + } + } + + .navbar + section{ + .nav-off-screen{ + top: 50px; + + *{ + top: 50px; + } + } + } + + .slimScrollDiv, + .slim-scroll { + overflow: visible !important; + height: auto !important; + } + .slimScrollBar, + .slimScrollRail { + display: none !important; + } +} + + +#nav { + // border-right: 1px solid $red-dark; + .nav { + background-color: $red; + > li { + > a { + padding: 13px 17px; + font-weight: 600; + color: white; + &:hover, + &:focus, &.active { + background-color: $red-light; + color: white; + } + &.active { + border-left: 3px solid #870003; + } + } + } + } +} + +// overrides bootstrap +.nav-justified > li, .nav-tabs.nav-justified > li { + cursor: pointer; +} + + +.user-profile-nav > a { + display: inline-block !important; + padding: 11px 44px !important; +} diff --git a/app/assets/stylesheets/app.plugins.scss b/app/assets/stylesheets/app.plugins.scss new file mode 100644 index 000000000..fde197caf --- /dev/null +++ b/app/assets/stylesheets/app.plugins.scss @@ -0,0 +1,297 @@ +// Redactor + +.redactor_editor, .redactor_editor:focus { + height: 200px; +} + + +// Growl +.growl { + top: 90px; + z-index: 1100; +} + + + +// UI Select + +.form-control { + &.form-control-ui-select { + height: auto; + .select2-choices { + border: none; + background: transparent; + .select2-search-choice { + @extend .label; + padding-left: .9em; + font-size: 100%; + font-weight: normal; + + } + } + } +} + + + + +.editable-input label { + display: block; +} + + + +/* ========================================================================== + Slider + ========================================================================== */ + +.carousel-caption { + left: 0 !important; + right: 0 !important; + bottom: 0px; + padding-left: 30px; + padding-right: 30px; + text-align: left; + background: rgba(29, 29, 29, 0.5); + + .title { + font-size: rem-calc(30); + line-height: rem-calc(24); + color: white; + font-weight: 800; + a { + color: white; + &:hover { color: $yellow; } + } + } + .description { + font-size: rem-calc(18); + line-height: rem-calc(18); + color: white; + } + +} + +.carousel-control { + cursor: pointer; + background: none; + @include border-radius($border-radius-base); + &:hover, &:focus { + color: $yellow; + } + + .glyphicon-chevron-left { + font-family: 'fontawesome' !important; + &:before { + content: "\f053" !important; + } + } + + .glyphicon-chevron-right { + font-family: 'fontawesome' !important; + &:before { + content: "\f054" !important; + } + } + +} +.carousel-indicators { + display: none; +} + + +.banner { } + +.slider { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + &.slider-min { + .slider-arrows { + bottom: 40%; + position: relative; + } + .slider-arrow { + margin-bottom: 0; + color: black; + border: none; + &.slider-arrow--left { + left: -16px; + } + &.slider-arrow--right { + right: -16px; + } + + .icon { + font-size: 24px; + &.icon-angle-left { + width: 18px; + } + &:hover { color: $yellow; } + } + + } + } + &.slider-actu { + .slider-arrows { + .slider-arrow--left { display: none; } + .slider-arrow--right { + bottom: 41px; + + } + } + } +} + +.slides { + width: 100%; + height: 100%; + /* Clear fix */ + overflow: hidden; + *zoom: 1; + /** + * Prevent blinking issue + * Not tested. Experimental. + */ + -webkit-backface-visibility: hidden; + -webkit-transform-style: preserve-3d; +} + +.slide { + height: 100%; + float: left; + clear: none; + &.content_article { + height: 620px; + -webkit-background-size: cover; + background-size: cover; + background-repeat: no-repeat; + background-position: center center; + color: #fff; + text-align: center; + position: relative; + } + .content_article-wrapper { + position: absolute; + bottom: 0; + top: 215px; + width: 45%; + margin: 0 auto; + left: 0; + right: 0; + .content_article-h { + font-weight: 900; + color: white; + font-size: 50px; + letter-spacing: 0.5px; + margin: 0; + text-transform: uppercase; + margin-bottom: 20px; + line-height: 50px; + } + .content_article-c { + color: $red; + font-size: 20px; + font-weight: 900; + margin-top: 0; + margin-bottom: 10px; + } + .content_article-p { + // font-family: $font-proxima-condensed; + font-size: 20px; + color: white; + margin: 0; + line-height: 30px; + } + .content_article-btns { + margin-top: 40px; + clear: both; + .header_nav-item-a { + color: #fff; + text-decoration: none; + } + .header_nav-item-a--btn { + padding: 12px 20px; + border-radius: 5px; + border: 2px solid $yellow; + background-color: transparent; + text-transform: uppercase; + font-family: "proxima-nova-condensed"; + font-weight: 600; + &:hover { + background-color: $yellow; + color: black; + } + } + } + } +} + +.slider-arrow { + position: absolute; + display: block; + margin-bottom: -20px; + padding: 20px; + color: white; + + width: 58px; height: 58px; + border: 3px solid white; + border-radius: 50%; + &:hover { border-color: $yellow; color: $yellow; } + .icon { + text-decoration: none; + display: inline-block; + font-size: 40px; + position: absolute; + top: 5px; + left: 0; + right: 0; + margin: 0 auto; + width: 12px; + &.icon-angle-left { + width: 18px; + } + &:hover { color: $yellow; } + } + +} + +.home { + .nav-branding { + display: none; + } +} + +.slider-arrow--right { + bottom: 50%; + right: 30px; +} + +.slider-arrow--left { + bottom: 50%; + left: 30px; +} + +.slider-nav { + position: absolute; + bottom: 30px; +} + +.slider-nav__item { + width: 12px; + height: 12px; + float: left; + clear: none; + display: block; + margin: 0 5px; + background: #fff; +} + +.slider-nav__item:hover { + background: #ccc; +} + +.slider-nav__item--current { + background: #ccc; +} diff --git a/app/assets/stylesheets/app.printer.scss b/app/assets/stylesheets/app.printer.scss new file mode 100644 index 000000000..f87ded6ed --- /dev/null +++ b/app/assets/stylesheets/app.printer.scss @@ -0,0 +1,3 @@ +/* + * Require here your print media stylesheets + */ \ No newline at end of file diff --git a/app/assets/stylesheets/app.responsive.scss b/app/assets/stylesheets/app.responsive.scss new file mode 100644 index 000000000..2d90248c9 --- /dev/null +++ b/app/assets/stylesheets/app.responsive.scss @@ -0,0 +1,38 @@ + +@media screen and (max-width: $screen-sm-min) { + .modal-dialog { top: 0; } + .modal-header { + .modal-logo { + display: none; + } + } + + .about-fablab { + .about-title { + font-size: rem-calc(30); + line-height: rem-calc(28); + text-align: center; + } + .about-picture { + padding: 70px 0; + height: 226px; + } + } + + +} + +@media screen and (max-width: $screen-md-min) { + + .heading { + .heading-title { + h1 { + font-size: rem-calc(16); + padding: 26px 15px; + } + } + } + +} + + diff --git a/app/assets/stylesheets/app.utilities.scss b/app/assets/stylesheets/app.utilities.scss new file mode 100644 index 000000000..2e077f4b5 --- /dev/null +++ b/app/assets/stylesheets/app.utilities.scss @@ -0,0 +1,334 @@ +.nopadding { + padding: 0 !important; + margin: 0 !important; +} + +.no-upper { + text-transform: none; +} + +.font-felt { font-family: $font-felt; } + +p.font-felt { + +} +p, .widget p { + &.font-felt, .font-felt { font-size: rem-calc(18) !important; } + &.fleche-left { + position: relative; + padding-left: 5px; + } + img.fleche-left { + position: absolute; + left: -35px; + top: 15px; + } +} + +.pos-rlt{position: relative;} +.pos-stc{position: static;} +.pos-abt{position: absolute;} +.line {*width: 100%;height: 2px;margin: 10px 0;font-size:0;overflow: hidden;} +.line-s{height: 1px;} +.line-xs{margin: 0} +.line-lg{margin-top:15px;margin-bottom: 15px} +.line-dashed{border-style: dashed !important;background-color: transparent;border-width:0;} +.no-line{border-width: 0} +.no-border, .no-borders{border-color:transparent;border-width:0} +.no-radius{border-radius: 0} +.block{display:block;} +.block.hide{display: none;} +.inline{display:inline-block !important;} +.none{display: none;} +.pull-right-lg{float: right;} +.pull-none{float: none;} +.rounded{border-radius: 500px;} + +.h480 { height: 480px; } + +// .btn-s-xs{min-width: 90px} +// .btn-s-sm{min-width: 100px} +// .btn-s-md{min-width: 120px} +// .btn-s-lg{min-width: 150px} +// .btn-s-xl{min-width: 200px} + +.l-h-2x{line-height: rem-calc(18);} +// .l-h-1x{line-height: 1.2;} +// .l-h{line-height: 1.5;} +.l-n { line-height: 1em; } +.v-middle{vertical-align: middle !important;} +.v-top{vertical-align: top !important;} +.v-bottom{vertical-align: bottom !important;} + +.font-normal{font-weight: normal;} +.font-thin{font-weight: 300;} +.font-sbold{font-weight: 600;} +.font-bold{font-weight: 700;} +.font-ebold{font-weight: 900;} + +.text-lg{font-size: $font-size-lg;} +.text-md{font-size: $font-size-md;} +.text-sm{font-size: $font-size-sm;} +.text-xs{font-size: $font-size-xs;} +.text-base{font-size: $font-size-base;} +.text-ellipsis{ + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow:ellipsis; +} +.text-u-c, .upper{text-transform: uppercase;} +.text-l-t{text-decoration: line-through;} +.text-u-l, .underline {text-decoration: underline;} +.text-c { text-transform: capitalize; } + +.text-center { text-align: center; } + +.text-active, .active > .text, .active > .auto .text{display: none !important;} +.active > .text-active, .active > .auto .text-active{display: inline-block !important;} +.box-shadow{ + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05); +} + +.cover { background-size:cover; } +.break-word { word-wrap: break-word; } + +.wrapper-xxs{padding: 4px 6px;} +.wrapper-sm{padding: 5px 10px;} +.wrapper{padding: 15px;} +.wrapper-md{padding: 20px;} +.wrapper-lg{padding: 30px;} +.wrapper-xl{padding: 50px;} +.padder{padding-left:15px;padding-right: 15px} +.padder-icon{padding-left:30px;padding-right: 0px; padding-top: 3px; height: 21px} +.padder-v{padding-top:15px;padding-bottom: 15px} +.no-padder{padding: 0 !important;} +.pull-in{margin-left: -15px;margin-right: -15px;} +.pull-out{margin:-10px -15px;} + +.width-70 { width: 70%; } + +.b{border: 1px solid rgba(0, 0, 0, 0.05)} +.b-a{border: 1px solid $border-color} +.b-t{border-top: 1px solid $border-color} +.b-r{border-right: 1px solid $border-color} +.b-b{border-bottom: 1px solid $border-color} +.b-l{border-left: 1px solid $border-color} +.b-light{border-color: darken($brand-light, 5%)} +.b-dark{border-color: lighten($brand-dark, 5%)} +.b-primary{border-color: lighten($brand-primary, 5%)} +.b-success{border-color: lighten($brand-success, 5%)} +.b-info{border-color: lighten($brand-info, 5%)} +.b-warning{border-color: lighten($brand-warning, 5%)} +.b-danger{border-color: lighten($brand-danger, 5%)} +.b-black{border-color: lighten($brand-black, 5%)} +.b-white{border-color: #fff} +.b-dashed{border-style: dashed !important;} + +.b-2x{border-width: 2px} +.b-3x{border-width: 3px} +.b-4x{border-width: 4px} +.b-5x{border-width: 5px} + +.no-b { border: none !important; } + +.r{ + border-radius: $border-radius-base $border-radius-base $border-radius-base $border-radius-base; +} +.r-l{ + border-radius: $border-radius-base 0 0 $border-radius-base; +} + +.r-r{ + border-radius: 0 $border-radius-base $border-radius-base 0; +} + +.r-t{ + border-radius: $border-radius-base $border-radius-base 0 0; +} + +.r-b{ + border-radius: 0 0 $border-radius-base $border-radius-base; +} +.r-n { border-radius: 0 0 0 0; } + +.p-lg { padding: 30px; } +.p-l { padding: 16px; } + +.m-xxs{margin: 2px 4px} +.m-xs{margin: 5px;} +.m-sm{margin: 10px;} +.m{margin: 15px;} +.m-md{margin: 20px;} +.m-lg{margin: 30px;} +.m-xl{margin: 50px;} +.m-n{margin: 0 !important} + +.m-l-none{margin-left: 0} +.m-l-xs{margin-left: 5px;} +.m-l-sm{margin-left: 10px;} +.m-l{margin-left: 15px} +.m-l-md{margin-left: 20px;} +.m-l-lg{margin-left: 30px;} +.m-l-xl{margin-left: 40px;} + +.m-l-n-xxs{margin-left: -1px} +.m-l-n-xs{margin-left: -5px} +.m-l-n-sm{margin-left: -10px} +.m-l-n{margin-left: -15px} +.m-l-n-md{margin-left: -20px} +.m-l-n-lg{margin-left: -30px} +.m-l-n-xl{margin-left: -40px} + +.m-t-none{margin-top:0} +.m-t-xxs{margin-top: 1px;} +.m-t-xs{margin-top: 5px;} +.m-t-sm{margin-top: 10px;} +.m-t{margin-top: 15px} +.m-t-md{margin-top: 20px;} +.m-t-lg{margin-top: 30px;} +.m-t-xl{margin-top: 40px;} + +.m-t-n-xxs{margin-top: -1px} +.m-t-n-xs{margin-top: -5px} +.m-t-n-sm{margin-top: -10px} +.m-t-n{margin-top: -15px} +.m-t-n-md{margin-top: -20px} +.m-t-n-lg{margin-top: -30px} +.m-t-n-xl{margin-top: -40px} + +.m-r-none{margin-right: 0} +.m-r-xxs{margin-right: 1px} +.m-r-xs{margin-right: 5px} +.m-r-sm{margin-right: 10px} +.m-r{margin-right: 15px} +.m-r-md{margin-right: 20px} +.m-r-lg{margin-right: 30px} +.m-r-xl{margin-right: 40px} + +.m-r-n-xxs{margin-right: -1px} +.m-r-n-xs{margin-right: -5px} +.m-r-n-sm{margin-right: -10px} +.m-r-n{margin-right: -15px} +.m-r-n-md{margin-right: -20px} +.m-r-n-lg{margin-right: -30px} +.m-r-n-xl{margin-right: -40px} + +.m-b-none{margin-bottom: 0} +.m-b-xxs{margin-bottom: 1px;} +.m-b-xs{margin-bottom: 5px;} +.m-b-sm{margin-bottom: 10px;} +.m-b{margin-bottom: 15px;} +.m-b-md{margin-bottom: 20px;} +.m-b-lg{margin-bottom: 30px;} +.m-b-xl{margin-bottom: 40px;} + +.m-b-n-xxs{margin-bottom: -1px} +.m-b-n-xs{margin-bottom: -5px} +.m-b-n-sm{margin-bottom: -10px} +.m-b-n{margin-bottom: -15px} +.m-b-n-md{margin-bottom: -20px} +.m-b-n-lg{margin-bottom: -30px} +.m-b-n-xl{margin-bottom: -40px} + +.media-xs{min-width: 50px} +.media-sm{min-width: 80px} +.media-md{min-width: 90px} +.media-lg{min-width: 120px} + +.thumb-38 { width: 38px !important; height: 38px; } +.thumb-50 { width: 50px !important; height: 50px; } +.thumb-128 { width: 128px !important; height: 128px; } +.thumb-128-wrapper { + img { + width: 128px !important; height: 128px; + @extend .img-circle; + } +} + +.thumb-lg{width: 128px;display: inline-block} +.thumb-md{width: 64px;display: inline-block} +.thumb{width: 50px;display: inline-block} +.thumb-sm{width: 34px;display: inline-block} +.thumb-xs{width: 24px;display: inline-block} +.thumb-wrapper{padding: 2px; border: 1px solid #ddd} +.thumb img, +.thumb-xs img, +.thumb-sm img, +.thumb-md img, +.thumb-lg img, +.thumb-btn img{ + // height: auto; + // max-width: 100%; + vertical-align: middle; +} +.img-full{ + max-width: 100%; + > img{ + max-width: 100%; + } +} +.clear{display:block;overflow: hidden;} + +.scroll-x, .scroll-y{overflow:hidden;-webkit-overflow-scrolling:touch;} +.scroll-y{overflow-y:auto;} +.scroll-x{overflow-x:auto;} +.no-touch { + .scroll-x, + .scroll-y{ + overflow: hidden; + } + .scroll-x{ + &:hover, + &:focus, + &:active{ + overflow-x: auto; + } + } + .scroll-y{ + &:hover, + &:focus, + &:active{ + overflow-y: auto; + } + } + .hover-action{ + display: none; + } + .hover:hover { + .hover-action{ + display: inherit; + } + } +} + +@media screen and (min-width: $screen-lg-min) { + .b-r-lg {border-right: 1px solid $border-color; } +} + + + +/*desktop*/ +@media screen and (min-width: $screen-md-min) { + .b-r-md {border-right: 1px solid $border-color; } + .col-lg-2-4{width: 20.000%;float: left;} + + .hide-b-md { border: none; } +} + +/*phone*/ +@media (max-width: 767px) { + .shift{display: none !important;} + .shift.in{display: block !important;} + .row-2 [class*="col"]{width: 50%;float: left} + .row-2 .col-0{clear: none} + .row-2 li:nth-child(odd) { clear: left;margin-left: 0} + .text-center-xs{text-align: center;} + .text-left-xs{text-align: left;} + .pull-none-xs{float: none !important;} + .dropdown-menu.pull-none-xs{left: 0;} + .hidden-xs.show{display: inherit !important;} + .wrapper-lg{padding: 15px;} +} + + diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss new file mode 100644 index 000000000..1b934e5fa --- /dev/null +++ b/app/assets/stylesheets/application.scss @@ -0,0 +1,27 @@ +/* + *= require_self + *= require select2/select2 + *= require jasny-bootstrap/dist/css/jasny-bootstrap + *= require angular-growl/build/angular-growl.min.css + *= require angular-xeditable/dist/css/xeditable + *= require redactor + *= require angular-loading-bar/src/loading-bar + *= require font-awesome + */ + +@import "app.functions"; +@import "compass"; +@import "bootstrap_and_overrides"; + +@import "app.utilities"; +@import "app.colors"; + +@import "app.base"; +@import "app.layout"; +@import "app.nav"; + +@import "app.buttons"; +@import "app.components"; +@import "app.plugins"; + +@import "app.responsive"; diff --git a/app/assets/stylesheets/bootstrap_and_overrides.scss b/app/assets/stylesheets/bootstrap_and_overrides.scss new file mode 100644 index 000000000..38249fa90 --- /dev/null +++ b/app/assets/stylesheets/bootstrap_and_overrides.scss @@ -0,0 +1,979 @@ +// a flag to toggle asset pipeline / compass integration +// defaults to true if twbs-font-path function is present (no function => twbs-font-path('') parsed as string == right side) +// in Sass 3.3 this can be improved with: function-exists(twbs-font-path) +$bootstrap-sass-asset-helper: (twbs-font-path("") != unquote('twbs-font-path("")')) !default; +// +// Variables +// -------------------------------------------------- + + +//== Colors +// +//## Gray and brand colors for use across Bootstrap. + +$gray-darker: lighten(#000, 13.5%) !default; // #222 +$gray-dark: lighten(#000, 20%) !default; // #333 +$gray: lighten(#000, 33.5%) !default; // #555 +$gray-light: lighten(#000, 60%) !default; // #999 +$gray-lighter: lighten(#000, 93.5%) !default; // #eee + +$brand-primary: #d92227 !default; +$brand-success: #7bca38 !default; +$brand-info: #1d98ec !default; +$brand-warning: #fdde3f !default; +$brand-danger: $brand-primary !default; + + +// ADD by sleede ------------------ +$brand-black: #12131a; +$brand-dark: #222733; +$brand-light: #f4f3f3; //#f1f3f7 +$brand-inverse: #433599; + +$black-light: #444444; + +$bg-gray: #f5f5f5; + +$red-dark: #cb1117; +$red: $red-dark; +$red-light: #e13f45; + +$yellow: #fd0; +$blue: $brand-info; +$green: $brand-success; +$beige: #e4cd78; +$violet: #bd7ae9; + +$border-color: #dddddd; +$header-bg: $bg-gray; + +$off-screen-nav-width: 75%; +$nav-primary-height: 36px; +$nav-xs-width: 90px; +$nav-xs-height: 50px; +$header-md-height: 73px; + + +//------------------------------------------ + +//== Scaffolding +// +//## Settings for some of the most global styles. + +//** Background color for ``. +$body-bg: #fff !default; +//** Global text color on ``. +$text-color: black !default; + +//** Global textual link color. +$link-color: #cb1117 !default; +//** Link hover color set via `darken()` function. +$link-hover-color: #840b0f !default; +//** Link hover decoration. +$link-hover-decoration: underline; + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +// Semibold = 600, Bold = 700, ExtraB = 800 + +$font-family-sans-serif: "proxima-nova", Helvetica, Arial, sans-serif !default; +$font-proxima-condensed: "proxima-nova-condensed", Helvetica, Arial, sans-serif !default; +$font-family-serif: Georgia, "Times New Roman", Times, serif !default; +$font-felt: "felt-tip-roman", sans-serif; + +//** Default monospace fonts for ``, ``, and `
`.
+// $font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
+
+$font-family-base:        $font-family-sans-serif !default;
+$font-family-monospace:   $font-family-base;
+
+$font-size-base:          16px !default;
+$font-size-large:         ceil(($font-size-base * 1.125)) !default; // ~18px
+$font-size-medium:        ceil(($font-size-base * 0.875)) !default; // ~14px
+$font-size-small:         ceil(($font-size-base * 0.75)) !default; // ~12px
+
+//add sleede
+$font-size-lg:            rem-calc(20);
+$font-size-md:            rem-calc(18);
+$font-size-sm:            rem-calc(14);
+$font-size-xs:            rem-calc(12); // ~11px
+
+$font-size-h1:            rem-calc(24) !default; // ~24px
+$font-size-h2:            rem-calc(20) !default; // ~20px
+$font-size-h3:            rem-calc(18) !default; // ~18px
+$font-size-h4:            rem-calc(16) !default; // ~16px
+$font-size-h5:            rem-calc(14) !default; // ~14px
+$font-size-h6:            rem-calc(12) !default; // ~12px
+
+
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base:        1.5 !default; // 24/16
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
+
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
+
+//** By default, this inherits from the ``.
+$headings-font-family:    $font-family-base !default;
+$headings-font-weight:    400 !default;
+$headings-line-height:    1.5 !default;
+$headings-color:          black !default;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+$icon-font-path: "bootstrap/" !default;
+//** File name for all font files.
+$icon-font-name:          "glyphicons-halflings-regular" !default;
+//** Element ID within SVG icon file.
+$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
+
+$icon-css-prefix:		  fa;
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+$padding-base-vertical:     6px !default;
+$padding-base-horizontal:   12px !default;
+
+$padding-large-vertical:    10px !default;
+$padding-large-horizontal:  16px !default;
+
+$padding-small-vertical:    5px !default;
+$padding-small-horizontal:  10px !default;
+
+$padding-xs-vertical:       1px !default;
+$padding-xs-horizontal:     5px !default;
+
+$line-height-large:         1.33 !default;
+$line-height-small:         1.5 !default;
+
+$border-radius-base:        4px !default;
+$border-radius-large:       6px !default;
+$border-radius-small:       3px !default;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color:    #fff !default;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg:       $gray-lighter !default;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+$caret-width-base:          4px !default;
+//** Carets increase slightly in size for larger components.
+$caret-width-large:         5px !default;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ``s.
+$table-cell-padding:            8px !default;
+//** Padding for cells in `.table-condensed`.
+$table-condensed-cell-padding:  5px !default;
+
+//** Default background color used for all tables.
+$table-bg:                      transparent !default;
+//** Background color used for `.table-striped`.
+$table-bg-accent:               #f9f9f9 !default;
+//** Background color used for `.table-hover`.
+$table-bg-hover:                $bg-gray !default;
+$table-bg-active:               $table-bg-hover !default;
+
+//** Border color for table and cell borders.
+$table-border-color:            #ddd !default;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+$btn-font-weight:                normal !default;
+
+$btn-default-color:              $text-color !default;
+$btn-default-bg:                 lighten($brand-light, 3%) !default;
+$btn-default-border:             darken($border-color, 8%) !default;
+
+$btn-primary-color:              #fff !default;;
+$btn-primary-bg:                 $brand-primary !default;;
+$btn-primary-border:             $btn-primary-bg !default;;
+
+$btn-success-color:              #fff  !default;
+$btn-success-bg:                 $brand-success !default;
+$btn-success-border:             $btn-success-bg !default;
+
+$btn-info-color:                 #fff !default;
+$btn-info-bg:                    $brand-info !default;
+$btn-info-border:                $btn-info-bg !default;
+
+$btn-warning-color:              #000 !default;
+$btn-warning-bg:                 $brand-warning !default;
+$btn-warning-border:             $btn-warning-bg !default;
+
+$btn-danger-color:               #fff !default;
+$btn-danger-bg:                  $red !default;
+$btn-danger-border:              $btn-default-border !default;
+
+$btn-link-disabled-color:        $gray-light !default;
+
+
+
+//== Forms
+//
+//##
+
+//** `` background color
+$input-bg:                       #fff !default;
+//** `` background color
+$input-bg-disabled:              $gray-lighter !default;
+
+//** Text color for ``s
+$input-color:                    $gray !default;
+//** `` border color
+$input-border:                   darken($border-color, 10%) !default;
+//** `` border radius
+$input-border-radius:            $border-radius-base !default;
+//** Border color for inputs on focus
+$input-border-focus:             $brand-warning !default;
+//** Large `.form-control` border radius
+$input-border-radius-large:      $border-radius-large;
+//** Small `.form-control` border radius
+$input-border-radius-small:      $border-radius-small;
+
+//** Placeholder text color
+$input-color-placeholder:        $gray-light !default;
+
+//** Default `.form-control` height
+$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
+//** Large `.form-control` height
+$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
+//** Small `.form-control` height
+$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
+
+$legend-color:                   $gray-dark !default;
+$legend-border-color:            #e5e5e5 !default;
+
+//** Background color for textual input addons
+$input-group-addon-bg:           $gray-lighter !default;
+//** Border color for textual input addons
+$input-group-addon-border-color: $input-border !default;
+//** Disabled cursor for form controls and buttons.
+$cursor-disabled:                not-allowed;
+$form-group-margin-bottom: 15px !default;
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+$dropdown-bg:                    #fff !default;
+//** Dropdown menu `border-color`.
+$dropdown-border:                rgba(0,0,0,.15) !default;
+//** Dropdown menu `border-color` **for IE8**.
+$dropdown-fallback-border:       #ccc !default;
+//** Divider color for between dropdown items.
+$dropdown-divider-bg:            #e5e5e5 !default;
+
+//** Dropdown link text color.
+$dropdown-link-color:            $gray-dark !default;
+//** Hover color for dropdown links.
+$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
+//** Hover background for dropdown links.
+$dropdown-link-hover-bg:         $bg-gray !default;
+
+//** Active dropdown menu item text color.
+$dropdown-link-active-color:     $component-active-color !default;
+//** Active dropdown menu item background color.
+$dropdown-link-active-bg:        $component-active-bg !default;
+
+//** Disabled dropdown menu item background color.
+$dropdown-link-disabled-color:   $gray-light !default;
+
+//** Text color for headers within dropdown menus.
+$dropdown-header-color:          $gray-light !default;
+
+//** Deprecated `$dropdown-caret-color` as of v3.1.0
+$dropdown-caret-color:           #000 !default;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+$zindex-navbar:            1000 !default;
+$zindex-dropdown:          1000 !default;
+$zindex-popover:           1060 !default;
+$zindex-tooltip:           1070 !default;
+$zindex-navbar-fixed:      1030 !default;
+$zindex-modal-background:  1040 !default;
+$zindex-modal:             1050 !default;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `$screen-xs` as of v3.0.1
+$screen-xs:                  480px !default;
+//** Deprecated `$screen-xs-min` as of v3.2.0
+$screen-xs-min:              $screen-xs !default;
+//** Deprecated `$screen-phone` as of v3.0.1
+$screen-phone:               $screen-xs-min !default;
+
+// Small screen / tablet
+//** Deprecated `$screen-sm` as of v3.0.1
+$screen-sm:                  768px !default;
+$screen-sm-min:              $screen-sm !default;
+//** Deprecated `$screen-tablet` as of v3.0.1
+$screen-tablet:              $screen-sm-min !default;
+
+// Medium screen / desktop
+//** Deprecated `$screen-md` as of v3.0.1
+$screen-md:                  992px !default;
+$screen-md-min:              $screen-md !default;
+//** Deprecated `$screen-desktop` as of v3.0.1
+$screen-desktop:             $screen-md-min !default;
+
+// Large screen / wide desktop
+//** Deprecated `$screen-lg` as of v3.0.1
+$screen-lg:                  1200px !default;
+$screen-lg-min:              $screen-lg !default;
+//** Deprecated `$screen-lg-desktop` as of v3.0.1
+$screen-lg-desktop:          $screen-lg-min !default;
+
+// So media queries don't overlap when required, provide a maximum
+$screen-xs-max:              ($screen-sm-min - 1) !default;
+$screen-sm-max:              ($screen-md-min - 1) !default;
+$screen-md-max:              ($screen-lg-min - 1) !default;
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+$grid-columns:              12 !default;
+//** Padding between columns. Gets divided in half for the left and right.
+$grid-gutter-width:         30px !default;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+$grid-float-breakpoint:     $screen-sm-min !default;
+//** Point at which the navbar begins collapsing.
+$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+$container-tablet:             ((720px + $grid-gutter-width)) !default;
+//** For `$screen-sm-min` and up.
+$container-sm:                 $container-tablet !default;
+
+// Medium screen / desktop
+$container-desktop:            ((940px + $grid-gutter-width)) !default;
+//** For `$screen-md-min` and up.
+$container-md:                 $container-desktop !default;
+
+// Large screen / wide desktop
+$container-large-desktop:      ((1140px + $grid-gutter-width)) !default;
+//** For `$screen-lg-min` and up.
+$container-lg:                 $container-large-desktop !default;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+$navbar-height:                    50px !default;
+$navbar-margin-bottom:             $line-height-computed !default;
+$navbar-border-radius:             $border-radius-base !default;
+$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
+$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
+$navbar-collapse-max-height:       340px !default;
+
+$navbar-default-color:             #777 !default;
+$navbar-default-bg:                #f8f8f8 !default;
+$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
+
+// Navbar links
+$navbar-default-link-color:                #777 !default;
+$navbar-default-link-hover-color:          #333 !default;
+$navbar-default-link-hover-bg:             transparent !default;
+$navbar-default-link-active-color:         #555 !default;
+$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
+$navbar-default-link-disabled-color:       #ccc !default;
+$navbar-default-link-disabled-bg:          transparent !default;
+
+// Navbar brand label
+$navbar-default-brand-color:               $navbar-default-link-color !default;
+$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
+$navbar-default-brand-hover-bg:            transparent !default;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg:           #ddd !default;
+$navbar-default-toggle-icon-bar-bg:        #888 !default;
+$navbar-default-toggle-border-color:       #ddd !default;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color:                      $gray-light !default;
+$navbar-inverse-bg:                         #222 !default;
+$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
+
+// Inverted navbar links
+$navbar-inverse-link-color:                 $gray-light !default;
+$navbar-inverse-link-hover-color:           #fff !default;
+$navbar-inverse-link-hover-bg:              transparent !default;
+$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
+$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
+$navbar-inverse-link-disabled-color:        #444 !default;
+$navbar-inverse-link-disabled-bg:           transparent !default;
+
+// Inverted navbar brand label
+$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
+$navbar-inverse-brand-hover-color:          #fff !default;
+$navbar-inverse-brand-hover-bg:             transparent !default;
+
+// Inverted navbar toggle
+$navbar-inverse-toggle-hover-bg:            #333 !default;
+$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
+$navbar-inverse-toggle-border-color:        #333 !default;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+$nav-link-padding:                          10px 15px !default;
+$nav-link-hover-bg:                         $gray-lighter !default;
+
+$nav-disabled-link-color:                   $gray-light !default;
+$nav-disabled-link-hover-color:             $gray-light !default;
+
+$nav-open-link-hover-color:                 #fff !default;
+
+//== Tabs
+$nav-tabs-border-color:                     #ddd !default;
+
+$nav-tabs-link-hover-border-color:          $gray-lighter !default;
+
+$nav-tabs-active-link-hover-bg:             $body-bg !default;
+$nav-tabs-active-link-hover-color:          $gray !default;
+$nav-tabs-active-link-hover-border-color:   #ddd !default;
+
+$nav-tabs-justified-link-border-color:            #ddd !default;
+$nav-tabs-justified-active-link-border-color:     $body-bg !default;
+
+//== Pills
+$nav-pills-border-radius:                   $border-radius-base !default;
+$nav-pills-active-link-hover-bg:            $component-active-bg !default;
+$nav-pills-active-link-hover-color:         $component-active-color !default;
+
+
+//== Pagination
+//
+//##
+
+$pagination-color:                     $link-color !default;
+$pagination-bg:                        #fff !default;
+$pagination-border:                    #ddd !default;
+
+$pagination-hover-color:               $link-hover-color !default;
+$pagination-hover-bg:                  $gray-lighter !default;
+$pagination-hover-border:              #ddd !default;
+
+$pagination-active-color:              #fff !default;
+$pagination-active-bg:                 $brand-primary !default;
+$pagination-active-border:             $brand-primary !default;
+
+$pagination-disabled-color:            $gray-light !default;
+$pagination-disabled-bg:               #fff !default;
+$pagination-disabled-border:           #ddd !default;
+
+
+//== Pager
+//
+//##
+
+$pager-bg:                             $pagination-bg !default;
+$pager-border:                         $pagination-border !default;
+$pager-border-radius:                  15px !default;
+
+$pager-hover-bg:                       $pagination-hover-bg !default;
+
+$pager-active-bg:                      $pagination-active-bg !default;
+$pager-active-color:                   $pagination-active-color !default;
+
+$pager-disabled-color:                 $pagination-disabled-color !default;
+
+
+//== Jumbotron
+//
+//##
+
+$jumbotron-padding:              30px !default;
+$jumbotron-color:                inherit !default;
+$jumbotron-bg:                   $gray-lighter !default;
+$jumbotron-heading-color:        inherit !default;
+$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+$state-success-text:             #3c763d !default;
+$state-success-bg:               #dff0d8 !default;
+$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;
+
+$state-info-text:                #31708f !default;
+$state-info-bg:                  #d9edf7 !default;
+$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;
+
+$state-warning-text:             #8a6d3b !default;
+$state-warning-bg:               #fcf8e3 !default;
+$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;
+
+$state-danger-text:              #a94442 !default;
+$state-danger-bg:                #f2dede !default;
+$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+$tooltip-max-width:           200px !default;
+//** Tooltip text color
+$tooltip-color:               white !default;
+//** Tooltip background color
+$tooltip-bg:                  #424242 !default;
+$tooltip-opacity:             .9 !default;
+
+//** Tooltip arrow width
+$tooltip-arrow-width:         5px !default;
+//** Tooltip arrow color
+$tooltip-arrow-color:         $tooltip-bg !default;
+
+//add sleede
+$tooltip-fallback-color:	  rgba(0,0,0,.9) !default;
+
+//== Arrow
+// add by sleede
+//##
+$arrow-width:         			 7px;
+$arrow-color:         			 #fff;
+$arrow-outer-width:   			 ($arrow-width + 1);
+$arrow-outer-color:   			 rgba(0,0,0,.1);
+$arrow-outer-fallback-color:  	 #eee;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+$popover-bg:                          #fff !default;
+//** Popover maximum width
+$popover-max-width:                   276px !default;
+//** Popover border color
+$popover-border-color:                rgba(0,0,0,.2) !default;
+//** Popover fallback border color
+$popover-fallback-border-color:       #ccc !default;
+
+//** Popover title background color
+$popover-title-bg:                    darken($popover-bg, 3%) !default;
+
+//** Popover arrow width
+$popover-arrow-width:                 10px !default;
+//** Popover arrow color
+$popover-arrow-color:                 #fff !default;
+
+//** Popover outer arrow width
+$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
+//** Popover outer arrow color
+$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;
+//** Popover outer arrow fallback color
+$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+$label-default-bg:            $gray-light !default;
+//** Primary label background color
+$label-primary-bg:            $brand-primary !default;
+//** Success label background color
+$label-success-bg:            $brand-success !default;
+//** Info label background color
+$label-info-bg:               $brand-info !default;
+//** Warning label background color
+$label-warning-bg:            $brand-warning !default;
+//** Danger label background color
+$label-danger-bg:             $brand-danger !default;
+
+//** Default label text color
+$label-color:                 #424242 !default;
+//** Default text color of a linked label
+$label-link-hover-color:      $red !default;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+$modal-inner-padding:         15px !default;
+
+//** Padding applied to the modal title
+$modal-title-padding:         8px !default;
+//** Modal title line-height
+$modal-title-line-height:     $line-height-base !default;
+
+//** Background color of modal content area
+$modal-content-bg:                             #fff !default;
+//** Modal content border color
+$modal-content-border-color:                   rgba(0,0,0,.2) !default;
+//** Modal content border color **for IE8**
+$modal-content-fallback-border-color:          #999 !default;
+
+//** Modal backdrop background color
+$modal-backdrop-bg:           #000 !default;
+//** Modal backdrop opacity
+$modal-backdrop-opacity:      .9 !default;
+//** Modal header border color
+$modal-header-border-color:   #e5e5e5 !default;
+//** Modal footer border color
+$modal-footer-border-color:   $modal-header-border-color !default;
+
+$modal-lg:                    600px !default;
+$modal-md:                    440px !default;
+$modal-sm:                    340px !default;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+$alert-padding:               15px !default;
+$alert-border-radius:         $border-radius-base !default;
+$alert-link-font-weight:      bold !default;
+
+$alert-success-bg:            $state-success-bg !default;
+$alert-success-text:          $state-success-text !default;
+$alert-success-border:        $state-success-border !default;
+
+$alert-info-bg:               $state-info-bg !default;
+$alert-info-text:             $state-info-text !default;
+$alert-info-border:           $state-info-border !default;
+
+$alert-warning-bg:            $state-warning-bg !default;
+$alert-warning-text:          $state-warning-text !default;
+$alert-warning-border:        $state-warning-border !default;
+
+$alert-danger-bg:             $state-danger-bg !default;
+$alert-danger-text:           $state-danger-text !default;
+$alert-danger-border:         $state-danger-border !default;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+$progress-bg:                 $bg-gray !default;
+//** Progress bar text color
+$progress-bar-color:          #fff !default;
+//** Variable for setting rounded corners on progress bar.
+$progress-border-radius:      $border-radius-base;
+
+//** Default progress bar color
+$progress-bar-bg:             $brand-primary !default;
+//** Success progress bar color
+$progress-bar-success-bg:     $brand-success !default;
+//** Warning progress bar color
+$progress-bar-warning-bg:     $brand-warning !default;
+//** Danger progress bar color
+$progress-bar-danger-bg:      $brand-danger !default;
+//** Info progress bar color
+$progress-bar-info-bg:        $brand-info !default;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+$list-group-bg:                 #fff !default;
+//** `.list-group-item` border color
+$list-group-border:             #ddd !default;
+//** List group border radius
+$list-group-border-radius:      $border-radius-base !default;
+
+//** Background color of single list items on hover
+$list-group-hover-bg:           $bg-gray !default;
+//** Text color of active list items
+$list-group-active-color:       $brand-info !default;
+//** Background color of active list items
+$list-group-active-bg:          $component-active-bg !default;
+//** Border color of active list elements
+$list-group-active-border:      $list-group-active-bg !default;
+//** Text color for content within active list items
+$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
+
+//** Text color of disabled list items
+$list-group-disabled-color:      $gray-light !default;
+//** Background color of disabled list items
+$list-group-disabled-bg:         $gray-lighter !default;
+//** Text color for content within disabled list items
+$list-group-disabled-text-color: $list-group-disabled-color !default;
+
+$list-group-link-color:         #555 !default;
+$list-group-link-hover-color:   $list-group-link-color !default;
+$list-group-link-heading-color: #333 !default;
+
+
+//== Panels
+//
+//##
+
+$panel-bg:                    #fff !default;
+$panel-body-padding:          15px !default;
+$panel-heading-padding:       18px 15px !default;
+$panel-footer-padding:        $panel-heading-padding !default;
+$panel-border-radius:         $border-radius-large !default;
+
+// add sleede
+$panel-border:                $border-color !default; 
+$panel-heading-bg:            #fff !default;
+$panel-footer-bg:             #fff !default;
+
+//** Border color for elements within panels
+$panel-inner-border:          #ddd !default;
+$panel-footer-bg:             $bg-gray !default;
+
+$panel-default-text:          $gray-dark !default;
+$panel-default-border:        #ddd !default;
+$panel-default-heading-bg:    $bg-gray !default;
+
+$panel-primary-text:          #fff !default;
+$panel-primary-border:        #cbcbcb !default;
+$panel-primary-heading-bg:    #fff !default;
+
+$panel-success-text:          $state-success-text !default;
+$panel-success-border:        $state-success-border !default;
+$panel-success-heading-bg:    $state-success-bg !default;
+
+$panel-info-text:             $state-info-text !default;
+$panel-info-border:           $state-info-border !default;
+$panel-info-heading-bg:       $state-info-bg !default;
+
+$panel-warning-text:          $state-warning-text !default;
+$panel-warning-border:        $state-warning-border !default;
+$panel-warning-heading-bg:    $state-warning-bg !default;
+
+$panel-danger-text:           $state-danger-text !default;
+$panel-danger-border:         $state-danger-border !default;
+$panel-danger-heading-bg:     $state-danger-bg !default;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+$thumbnail-padding:           4px !default;
+//** Thumbnail background color
+$thumbnail-bg:                $body-bg !default;
+//** Thumbnail border color
+$thumbnail-border:            #ddd !default;
+//** Thumbnail border radius
+$thumbnail-border-radius:     $border-radius-base !default;
+
+//** Custom text color for thumbnail captions
+$thumbnail-caption-color:     $text-color !default;
+//** Padding around the thumbnail caption
+$thumbnail-caption-padding:   9px !default;
+
+
+//== Wells
+//
+//##
+
+$well-bg:                     #fff !default;
+$well-border:                 darken($well-bg, 7%) !default;
+
+
+//== Badges
+//
+//##
+
+$badge-color:                 #fff !default;
+//** Linked badge text color on hover
+$badge-link-hover-color:      #fff !default;
+$badge-bg:                    $gray-light !default;
+
+//** Badge text color in active nav link
+$badge-active-color:          $link-color !default;
+//** Badge background color in active nav link
+$badge-active-bg:             #fff !default;
+
+$badge-font-weight:           bold !default;
+$badge-line-height:           1 !default;
+$badge-border-radius:         10px !default;
+
+
+//== Breadcrumbs
+//
+//##
+
+$breadcrumb-padding-vertical:   8px !default;
+$breadcrumb-padding-horizontal: 15px !default;
+//** Breadcrumb background color
+$breadcrumb-bg:                 $bg-gray !default;
+//** Breadcrumb text color
+$breadcrumb-color:              #ccc !default;
+//** Text color of current page in the breadcrumb
+$breadcrumb-active-color:       $gray-light !default;
+//** Textual separator for between breadcrumb elements
+$breadcrumb-separator:          "/" !default;
+
+
+//== Carousel
+//
+//##
+
+$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
+
+$carousel-control-color:                      #fff !default;
+$carousel-control-width:                      15% !default;
+$carousel-control-opacity:                    .5 !default;
+$carousel-control-font-size:                  20px !default;
+
+$carousel-indicator-active-bg:                #fff !default;
+$carousel-indicator-border-color:             #fff !default;
+
+$carousel-caption-color:                      #fff !default;
+
+
+//== Close
+//
+//##
+
+$close-font-weight:           bold !default;
+$close-color:                 #000 !default;
+$close-text-shadow:           0 1px 0 #fff !default;
+
+
+//== Code
+//
+//##
+
+$code-color:                  #c7254e !default;
+$code-bg:                     #f9f2f4 !default;
+
+$kbd-color:                   #fff !default;
+$kbd-bg:                      #333 !default;
+
+$pre-bg:                      transparent !default;
+$pre-color:                   $gray-dark !default;
+$pre-border-color:            transparent !default;
+$pre-scrollable-max-height:   340px !default;
+
+
+//== Type
+//
+//##
+//** Horizontal offset for forms and lists.
+$component-offset-horizontal: 180px !default;
+//** Text muted color
+$text-muted:                  $gray-light !default;
+//** Abbreviations and acronyms border color
+$abbr-border-color:           $gray-light !default;
+//** Headings small color
+$headings-small-color:        $gray-light !default;
+//** Blockquote small color
+$blockquote-small-color:      $gray-light !default;
+//** Blockquote font size
+$blockquote-font-size:        ($font-size-base * 1.25) !default;
+//** Blockquote border color
+$blockquote-border-color:     $gray-lighter !default;
+//** Page header border color
+$page-header-border-color:    $gray-lighter !default;
+//** Width of horizontal description list titles
+$dl-horizontal-offset:        $component-offset-horizontal !default;
+//** Horizontal line color.
+$hr-border:                   $gray-lighter !default;
+
+
+// Core variables and mixins
+// @import "bootstrap/variables";  //overrides
+@import "bootstrap/mixins";
+
+// Reset and dependencies
+@import "bootstrap/normalize";
+@import "bootstrap/print";
+@import "bootstrap/glyphicons";
+
+// Core CSS
+@import "bootstrap/scaffolding";
+@import "bootstrap/type";
+@import "bootstrap/code";
+@import "bootstrap/grid";
+@import "bootstrap/tables";
+@import "bootstrap/forms";
+@import "bootstrap/buttons";
+
+// Components
+@import "bootstrap/component-animations";
+@import "bootstrap/dropdowns";
+@import "bootstrap/button-groups";
+@import "bootstrap/input-groups";
+@import "bootstrap/navs";
+@import "bootstrap/navbar";
+// @import "bootstrap/breadcrumbs";
+@import "bootstrap/pagination";
+// @import "bootstrap/pager";
+@import "bootstrap/labels";
+@import "bootstrap/badges";
+//@import "bootstrap/jumbotron";
+@import "bootstrap/thumbnails";
+@import "bootstrap/alerts";
+@import "bootstrap/progress-bars";
+// @import "bootstrap/media";
+@import "bootstrap/list-group";
+@import "bootstrap/panels";
+@import "bootstrap/responsive-embed";
+@import "bootstrap/wells";
+@import "bootstrap/close";
+
+// Components w/ JavaScript
+@import "bootstrap/modals";
+@import "bootstrap/tooltip";
+@import "bootstrap/popovers";
+@import "bootstrap/carousel";
+
+// Utility classes
+@import "bootstrap/utilities";
+@import "bootstrap/responsive-utilities";
diff --git a/app/assets/templates/admin/events/index.html.erb b/app/assets/templates/admin/events/index.html.erb
new file mode 100644
index 000000000..fa538b729
--- /dev/null
+++ b/app/assets/templates/admin/events/index.html.erb
@@ -0,0 +1,80 @@
+
+
+
+
+ +
+
+
+
+

Les Stages et ateliers du Fab Lab

+
+
+ + +
+ +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + +
TitreDates
+ {{ event.title }} + + Du {{event.start_date | amDateFormat:'DD/MM/YYYY'}} au {{event.end_date | amDateFormat:'DD/MM/YYYY'}} +
+ Toute la journée + + De {{event.start_date | date:'HH:mm'}} + à + {{event.end_date | date:'HH:mm'}} + +
+
+ + <%#%> +
+
+
+
+ + +
+
+ + diff --git a/app/assets/templates/admin/members/_form.html.erb b/app/assets/templates/admin/members/_form.html.erb new file mode 100644 index 000000000..6de0a9c35 --- /dev/null +++ b/app/assets/templates/admin/members/_form.html.erb @@ -0,0 +1,9 @@ +
+ +
+ + + Le type d'utilisateur est obligatoire +
+
diff --git a/app/assets/templates/admin/members/edit.html.erb b/app/assets/templates/admin/members/edit.html.erb new file mode 100644 index 000000000..3e26192af --- /dev/null +++ b/app/assets/templates/admin/members/edit.html.erb @@ -0,0 +1,53 @@ +
+ +
+
+ +
+
+

Utilisateur : {{ user.name }}

+
+ +
+ +
+
+
+ Annuler +
+
+ +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + + + +
+ + + +
+
+ +
+
+
diff --git a/app/assets/templates/admin/members/index.html.erb b/app/assets/templates/admin/members/index.html.erb new file mode 100644 index 000000000..ed0a9e35e --- /dev/null +++ b/app/assets/templates/admin/members/index.html.erb @@ -0,0 +1,71 @@ +
+
+
+
+ +
+
+
+
+

Liste des membres

+
+
+ +
+
+ +
+
+
+
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nom Prénom Email Tel. Type utilisateur
{{ member.profile.last_name }}{{ member.profile.first_name }}{{ member.email }}{{ member.profile.phone }}{{ member.group.name }} +
+ +
+
+
+
+
diff --git a/app/assets/templates/admin/members/new.html.erb b/app/assets/templates/admin/members/new.html.erb new file mode 100644 index 000000000..9a141a64b --- /dev/null +++ b/app/assets/templates/admin/members/new.html.erb @@ -0,0 +1,52 @@ +
+ +
+
+ +
+
+

Ajouter un membre

+
+ +
+ +
+
+
+ Annuler +
+
+ +
+ +
+ +
+ + +
+
+ +
+ +
+
+ + + +
+ + + +
+
+ +
+
+
diff --git a/app/assets/templates/admin/project_elements/index.html.erb b/app/assets/templates/admin/project_elements/index.html.erb new file mode 100644 index 000000000..3254f262f --- /dev/null +++ b/app/assets/templates/admin/project_elements/index.html.erb @@ -0,0 +1,153 @@ +
+
+
+
+ +
+
+
+
+

Gestion des éléments projets

+
+
+ +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + +
Nom
+ + {{ component.name }} + + + +
+ + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + +
Nom
+ + {{ theme.name }} + + + +
+ + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + +
Nom
+ + {{ licence.name }} + + + +
+ + +
+
+ + +
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/app/assets/templates/dashboard/nav.html.erb b/app/assets/templates/dashboard/nav.html.erb new file mode 100644 index 000000000..9204b1145 --- /dev/null +++ b/app/assets/templates/dashboard/nav.html.erb @@ -0,0 +1,22 @@ +
+
+ +
+
+ +
+
+
+
+

Tableau de bord

+ +
+
+
+ +
+ + diff --git a/app/assets/templates/dashboard/profile.html.erb b/app/assets/templates/dashboard/profile.html.erb new file mode 100644 index 000000000..b22152862 --- /dev/null +++ b/app/assets/templates/dashboard/profile.html.erb @@ -0,0 +1,56 @@ +
+ + + + + +
+
+
+
+ + test + +
{{user.name}}
+
{{user.email}}
+
Dernière activité le {{user.last_sign_in_at | amDateFormat: 'Do MMMM '}}
+
+
+ +
+

Projets

+
    +
  • + {{p.name}} +
  • +
+
Aucun projet
+
+
+
+ +
+ +
+
+
+

Éditer votre profil

+
+
+
+
+
+ +
+
+
+ +
+
+ +
+ +
+
diff --git a/app/assets/templates/dashboard/projects.html.erb b/app/assets/templates/dashboard/projects.html.erb new file mode 100644 index 000000000..4e464b939 --- /dev/null +++ b/app/assets/templates/dashboard/projects.html.erb @@ -0,0 +1,80 @@ +
+ +
+
+ +
+
+ + +
+ +
Vous n'avez aucun projet.
+
+
+

{{project.name}}

{{project.author_id == currentUser.id ? 'Auteur' : 'Collaborateur'}} +
+ Consulter +
+
+
+ +
+
+
+

Description

+
+
+ + +
+
+
+
+ +
+
+
+

Machines et matériaux

+
+
+

Machines :

+
    +
  • {{m.name}}
  • +
+

Matériaux :

+
    +
  • {{c.name}}
  • +
+
+
+
+ +
+
+
+

Les collaborateurs

+
+
+
  • + + + + + + + {{collaborator.full_name}} + {{collaborator.username}} + + +
  • +
    +
    +
    + +
    +
    + +
    +
    diff --git a/app/assets/templates/events/_form.html.erb b/app/assets/templates/events/_form.html.erb new file mode 100644 index 000000000..26c028d36 --- /dev/null +++ b/app/assets/templates/events/_form.html.erb @@ -0,0 +1,216 @@ +
    + +
    + +
    +
    + + {{alert.msg}} + + + +
    + +
    + + Titre est obligatoire +
    +
    + + +
    + +
    +
    +
    + +
    +
    + +
    +
    + Choisir une image Modifier + + +
    +
    +
    +
    + +
    + +
    + + Description est obligatoire +
    +
    + +
    + +
    +
    + + + +
    +
    + {{file.attachment}} +
    + Parcourir + Modifier + +
    + +
    + Ajouter un nouveau fichier +
    +
    + + +
    + +
    + +
    + +
    + + +
    +
    +

    Type d'évènement

    +
    +
    + + +
    +
    + +
    +
    +

    Dates et horaires

    +
    +
    +
    + +
    + + +
    +
    + +
    + +
    + + + + + +
    +
    +
    + +
    + + + + + +
    +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    + et se terminera le +
    + + + + + +
    +
    +
    +
    +
    + +
    +
    +

    Tarifs et disponibilités

    +
    +
    +
    + +
    +
    + +
    +
    + 0 = gratuit +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/app/assets/templates/events/edit.html.erb b/app/assets/templates/events/edit.html.erb new file mode 100644 index 000000000..567220629 --- /dev/null +++ b/app/assets/templates/events/edit.html.erb @@ -0,0 +1,25 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Editer l'évènement

    +
    +
    +
    +
    + + +
    + + + +
    + +
    diff --git a/app/assets/templates/events/index.html.erb b/app/assets/templates/events/index.html.erb new file mode 100644 index 000000000..f45e17024 --- /dev/null +++ b/app/assets/templates/events/index.html.erb @@ -0,0 +1,61 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +

    Les Stages et ateliers du Fab Lab

    +
    +
    + + +
    + +
    + + + + + +
    +
    + + diff --git a/app/assets/templates/events/new.html.erb b/app/assets/templates/events/new.html.erb new file mode 100644 index 000000000..cc1e1d15f --- /dev/null +++ b/app/assets/templates/events/new.html.erb @@ -0,0 +1,25 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Ajouter un évènement

    +
    +
    +
    +
    + + +
    + + + +
    + +
    diff --git a/app/assets/templates/events/show.html.erb b/app/assets/templates/events/show.html.erb new file mode 100644 index 000000000..aab9e43c4 --- /dev/null +++ b/app/assets/templates/events/show.html.erb @@ -0,0 +1,100 @@ +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    {{ event.title }} {{event.categories[0].name}}

    +
    +
    + +
    +
    + + éditer + + +
    +
    +
    +
    + + +
    +
    + +
    + +
    + {{event.title}} +
    + +

    Description de l'évènement

    +

    +
    + +
    + +
    + +
    +
    + {{event.event_files_attributes.length}} +

    Documents à télécharger

    +
    + + +
    + +
    +
    +

    Informations

    +
    + +
    + +
    {{event.categories[0].name}}
    +
    +
    Dates :
    +
    Début: {{event.start_date | amDateFormat:'DD/MM/YYYY'}}
    Fin: {{event.end_date | amDateFormat:'DD/MM/YYYY'}}
    +
    Horaires :
    +
    Toute la journée
    +
    De {{event.start_date | amDateFormat:'HH:mm'}} à {{event.end_date | amDateFormat:'HH:mm'}}
    +
    + +
    +
    Plein tarif : {{ event.amount }} €
    +
    Tarif réduit* : {{ event.reduced_amount }} €
    +
    + +
    +
    Places disponibles: {{event.nb_total_places}}
    +
    +
    +
    Entrée libre
    +
    + +
    + +
    + + + +
    + +
    + + +
    diff --git a/app/assets/templates/home.html.erb b/app/assets/templates/home.html.erb new file mode 100644 index 000000000..a3e0b331f --- /dev/null +++ b/app/assets/templates/home.html.erb @@ -0,0 +1,126 @@ +
    + +
    +
    +

    Les derniers projets documentés

    + + + + + + +
    + + +
    + +
    +
    + +

    Les derniers tweets

    +
    + +
      +
    • +
    • +
    + +
    + +
    +
    +

    Derniers membres inscrits

    +
    + +
    + + +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    +

    Les prochains ateliers et stages du fablab Tous les événements

    + +
    + +
    + + +
    +
    + +
    +
    +
    +
    +

    {{event.title}}

    +
    +
    + {{event.categories[0].name}} +
    +
    +

    {{event.description | humanize : 500 }}

    + +
    +
    +
    + +
    Du {{event.start_date | amDateFormat:'DD/MM'}} au {{event.end_date | amDateFormat:'DD/MM'}}
    +
    +
    + +
    Toute la journéeDe {{event.start_date | date:'HH:mm'}} à {{event.end_date | date:'HH:mm'}}
    +
    +
    + +
    + Entrée Libre + Entrée Gratuite{{event.amount}} € Plein tarif
    {{event.reduced_amount}} € Tarif réduit
    +
    Événement complet.
    +
    + +
    + +
    +
    +
    Consulter
    +
    +
    +
    +
    +
    +
    + +
    + + +
    + diff --git a/app/assets/templates/machines/_form.html.erb b/app/assets/templates/machines/_form.html.erb new file mode 100644 index 000000000..c2199c55c --- /dev/null +++ b/app/assets/templates/machines/_form.html.erb @@ -0,0 +1,81 @@ +
    + + + +
    +
    + + {{alert.msg}} + +
    + +
    + + Le Nom est obligatoire. +
    +
    + +
    + +
    +
    +
    + +
    +
    + +
    +
    + Ajouter un visuel Modifier + + Supprimer +
    +
    +
    +
    + + +
    + +
    + + La Description est obligatoire. +
    +
    + +
    + +
    + + Les Caractéristiques techniques sont obligatoires. +
    +
    + +
    + +
    +
    + + + +
    +
    + {{file.attachment}} +
    + Joindre un fichier + Modifier + +
    + +
    + Ajouter une pièce jointe +
    +
    + +
    + + +
    +
    diff --git a/app/assets/templates/machines/edit.html.erb b/app/assets/templates/machines/edit.html.erb new file mode 100644 index 000000000..29af9bc3f --- /dev/null +++ b/app/assets/templates/machines/edit.html.erb @@ -0,0 +1,32 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    {{ machine.name }}

    +
    +
    + +
    +
    +
    + Annuler +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    diff --git a/app/assets/templates/machines/index.html.erb b/app/assets/templates/machines/index.html.erb new file mode 100644 index 000000000..5d8a31e15 --- /dev/null +++ b/app/assets/templates/machines/index.html.erb @@ -0,0 +1,59 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +

    Les machines du FabLab

    +
    +
    + + +
    +
    + + +
    + +
    + +
    + + +
    +
    + +
    +
    +
    +
    +

    {{machine.name}}

    +

    {{machine.description | humanize : 140 }}

    +
    + +
    + + +
    +
    + + + +
    diff --git a/app/assets/templates/machines/new.html.erb b/app/assets/templates/machines/new.html.erb new file mode 100644 index 000000000..367b96b29 --- /dev/null +++ b/app/assets/templates/machines/new.html.erb @@ -0,0 +1,29 @@ +
    +
    + +
    +
    +

    Déclarer une nouvelle machine

    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + +
    + +
    +
    diff --git a/app/assets/templates/machines/show.html.erb b/app/assets/templates/machines/show.html.erb new file mode 100644 index 000000000..44607baf6 --- /dev/null +++ b/app/assets/templates/machines/show.html.erb @@ -0,0 +1,85 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    {{ machine.name }}

    +
    +
    + +
    +
    + + Éditer + + +
    +
    +
    +
    + +
    +
    + +
    + +
    + {{machine.name}} +
    + + +

    + +
    + +
    + +
    + +
    +
    +

    Caractéristiques techniques

    +
    +
    +

    +

    {{machine.spec}}

    +
    +
    + +
    +
    + {{machine.machine_files_attributes.length}} +

    Fichiers à télécharger

    +
    + + +
    + +
    +
    +

    Projets utilisant la machine

    +
    + + +
    + +
    + + +
    + +
    diff --git a/app/assets/templates/members/index.html.erb b/app/assets/templates/members/index.html.erb new file mode 100644 index 000000000..ba1471c9b --- /dev/null +++ b/app/assets/templates/members/index.html.erb @@ -0,0 +1,54 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +

    Les membres du Fab Lab

    +
    +
    + +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    AvatarUtilisateurPseudoEmail
    + + + + {{ member.name }}{{ member.username }}{{ member.email }} +
    + +
    +
    +
    +
    +
    diff --git a/app/assets/templates/members/show.html.erb b/app/assets/templates/members/show.html.erb new file mode 100644 index 000000000..6f96db99c --- /dev/null +++ b/app/assets/templates/members/show.html.erb @@ -0,0 +1,93 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    {{user.name}}

    +
    +
    + + + +
    +
    + + +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    {{user.name}}
    + {{user.username}} +
    +
    +
    +
    +
    +
    + Dernière activité +
    le {{user.last_sign_in_at | amDateFormat: 'Do MMMM '}}
    +
    +
    + Email +
    {{user.email}}
    +
    +
    +
    +
    + Logiciels de conception maîtrisés +
    {{user.profile.software_mastered}}
    +
    +
    + Centres d'intérêts +
    {{user.profile.interest}}
    +
    +
    +
    +
    +
    +
    + +
    + +
    + + + +
    + +
    +
    diff --git a/app/assets/templates/notifications/index.html.erb b/app/assets/templates/notifications/index.html.erb new file mode 100644 index 000000000..4acf09641 --- /dev/null +++ b/app/assets/templates/notifications/index.html.erb @@ -0,0 +1,91 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +

    Centre de notifications

    +
    +
    + +
    +
    + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    DateIntitulée
    + + {{ notification.created_at | amDateFormat:'D MMMM YYYY H:mm' }}
    Aucune nouvelle notification.
    + +
    Archives
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + {{ n.created_at | amDateFormat:'D MMMM YYYY H:mm' }}
    Aucune notification archivée.
    + + Charger les notifications suivantes... + +
    + +
    +
    + + + + diff --git a/app/assets/templates/projects/_form.html.erb b/app/assets/templates/projects/_form.html.erb new file mode 100644 index 000000000..fef526d07 --- /dev/null +++ b/app/assets/templates/projects/_form.html.erb @@ -0,0 +1,188 @@ +
    + +
    + +
    +
    + + {{alert.msg}} + + + +
    + +
    + + Nom est obligatoire +
    +
    + + +
    + +
    +
    +
    + +
    +
    + +
    +
    + Ajouter un visuel Modifier + + Supprimer +
    +
    +
    +
    + + +
    + +
    +
    + + + +
    +
    + {{file.attachment}} +
    + Parcourir + Modifier + +
    + +
    + Ajouter un nouveau fichier +
    +
    + +
    + +
    + + Description est obligatoire +
    +
    + + +
    + +
    +
    +
    + Étape {{ $index+1 }}/{{project.project_steps_attributes.length}} + + + + + +
    + Ajouter une imageModifier l'image + + {{step.project_step_image}} + +
    + + +
    +
    + Ajouter une nouvelle étape +
    +
    + + + +
    + +
    + +
    + +
    + + +
    +
    +

    Matériaux utilisés

    +
    +
    + + +
    +
    + +
    +
    +

    Machines utilisées

    +
    +
    + + +
    +
    + +
    +
    +

    Collaborateurs

    +
    +
    + + +
    +
    + +
    +
    +

    Licences Creative Commons

    +
    +
    + <%# TODO: Bug concerne qu'on ne peut pas déselectionner un option %> + +
    +
    + +
    +
    +

    Thématiques

    +
    +
    + + +
    +
    + +
    +
    +

    Tags

    +
    +
    + +
    +
    + +
    + +
    \ No newline at end of file diff --git a/app/assets/templates/projects/edit.html.erb b/app/assets/templates/projects/edit.html.erb new file mode 100644 index 000000000..9eb93b999 --- /dev/null +++ b/app/assets/templates/projects/edit.html.erb @@ -0,0 +1,40 @@ +
    + + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Editer le projet Brouillon

    +
    +
    + +
    +
    + + +
    + Publier +
    + +
    +
    +
    +
    + + + + +
    + + +
    diff --git a/app/assets/templates/projects/index.html.erb b/app/assets/templates/projects/index.html.erb new file mode 100644 index 000000000..56634ed52 --- /dev/null +++ b/app/assets/templates/projects/index.html.erb @@ -0,0 +1,98 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +

    Les projets du FabLab

    +
    +
    + + + +
    +
    + + +
    + +
    + +

    Filtrer les projets

    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    +
    + + +
    + +
    + +
    + + + +
    +

    {{project.name}}

    +
    + +
    + +
    + +
    + + + +
    diff --git a/app/assets/templates/projects/new.html.erb b/app/assets/templates/projects/new.html.erb new file mode 100644 index 000000000..06fbeb0bf --- /dev/null +++ b/app/assets/templates/projects/new.html.erb @@ -0,0 +1,33 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Ajouter un nouveau projet

    +
    +
    + + +
    +
    + + +
    + + + +
    + +
    diff --git a/app/assets/templates/projects/show.html.erb b/app/assets/templates/projects/show.html.erb new file mode 100644 index 000000000..d73876fc0 --- /dev/null +++ b/app/assets/templates/projects/show.html.erb @@ -0,0 +1,141 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    {{ project.name }} Brouillon

    +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    + {{project.name}} +
    + +

    Description du projet

    +

    + +
    +
    +
    +

    Étape {{$index+1}} : {{step.title}}

    +
    +
    + {{step.title}} +
    +
    + +

    +
    + + +
    +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    + +
    + + posté le {{project.created_at | amDateFormat: 'Do MMMM YYYY'}} + + +
    + +
    +
    + {{project.project_caos_attributes.length}} +

    Fichier CAO à télécharger

    +
    + + +
    + +
    +
    + {{project.machines.length}} +

    Machines et matériaux

    +
    + + + +
      +
    • + {{component.name}} +
    • +
    +
    + +
    +
    + {{project.project_users.length}} +

    Les collaborateurs

    +
    + +
      + +
    +
    + + +
    + +
    + + +
    diff --git a/app/assets/templates/shared/_member_form.html.erb b/app/assets/templates/shared/_member_form.html.erb new file mode 100644 index 000000000..5d60bc73f --- /dev/null +++ b/app/assets/templates/shared/_member_form.html.erb @@ -0,0 +1,145 @@ +{{alert.msg}} + + + + +
    +
    +
    +
    +
    + " class="img-circle"> +
    +
    + +
    +
    + + + Ajouter un avatarModifier + + +
    +
    +
    + +
    +
    + +
    + + + Le genre est obligatoire +
    + + +
    +
    + + +
    + Le pseudo est obligatoire +
    + + + +
    +
    + + +
    + Le nom est obligatoire +
    + +
    +
    + + +
    + Le prénom est obligatoire +
    + +
    +
    + + +
    + L'email est obligatoire +
    + +
    + +
    + + +
    +
    + + +
    + Le mot de passe est obligatoire + Le mot de passe est trop court (au moins 8 caractères) +
    + +
    +
    + + +
    + Le mot de passe de confirmation est obligatoire + Le mot de passe de confirmation est trop court (au moins 8 caractères) +
    + +
    +
    + + +
    + La date de naissance est obligatoire +
    + +
    +
    + + + +
    +
    + +
    +
    + + +
    + Le numéro de téléphone est obligatoire. +
    + +
    + + +
    + +
    + + +
    + +
    + +
    + + diff --git a/app/assets/templates/shared/_member_select.html.erb b/app/assets/templates/shared/_member_select.html.erb new file mode 100644 index 000000000..57b45b043 --- /dev/null +++ b/app/assets/templates/shared/_member_select.html.erb @@ -0,0 +1,11 @@ +
    +
    +

    Sélectionnez un membre

    +
    +
    + + {{member}} +
    +
    diff --git a/app/assets/templates/shared/_user_avatar.html.erb b/app/assets/templates/shared/_user_avatar.html.erb new file mode 100644 index 000000000..310db728b --- /dev/null +++ b/app/assets/templates/shared/_user_avatar.html.erb @@ -0,0 +1,4 @@ +" class="img-circle" ng-class="avatarClass" + ng-if="!userAvatar || !userAvatar.attachment_url"> + diff --git a/app/assets/templates/shared/about.html.erb b/app/assets/templates/shared/about.html.erb new file mode 100644 index 000000000..0d602806f --- /dev/null +++ b/app/assets/templates/shared/about.html.erb @@ -0,0 +1,32 @@ +
    +
    +
    +
    +

    Imaginer, Fabriquer,
    Partager au Fab Lab

    +
    +
    +
    + +
    +
    +

    Le Fab Lab est un atelier de fabrication numérique où l’on peut utiliser des machines de découpe, des imprimantes 3D,… permettant de travailler sur des matériaux variés : plastique, bois, carton, vinyle, … afin de créer toute sorte d’objet grâce à la conception assistée par ordinateur ou à l’électronique. Mais le Fab Lab est aussi un lieu d’échange de compétences technique.

    +

    + Le Fab Lab est un espace permanent : ouvert à tous, il offre la possibilité de réaliser des objets soi-même, de partager ses compétences et d’apprendre au contact des médiateurs du Fab Lab et des autres usagers.

    +

    + La formation au Fab Lab s’appuie sur des projets et le partage de connaissances : vous devez prendre part à la capitalisation des connaissances et à l’instruction des autres utilisateurs. +

    +
    + +
    +

    Vos contacts au Fab Lab

    +
    +
    Manager Fab Lab :
    +
    @email
    +
    Responsable médiation :
    +
    @email
    +
    Animateur scientifique :
    +
    @email
    +
    +
    +
    +
    \ No newline at end of file diff --git a/app/assets/templates/shared/confirm_modal.html.erb b/app/assets/templates/shared/confirm_modal.html.erb new file mode 100644 index 000000000..b062fe5e0 --- /dev/null +++ b/app/assets/templates/shared/confirm_modal.html.erb @@ -0,0 +1,11 @@ + + + diff --git a/app/assets/templates/shared/deviseModal.html.erb b/app/assets/templates/shared/deviseModal.html.erb new file mode 100644 index 000000000..4679e15d8 --- /dev/null +++ b/app/assets/templates/shared/deviseModal.html.erb @@ -0,0 +1,46 @@ +
    + + + +
    diff --git a/app/assets/templates/shared/header.html.erb b/app/assets/templates/shared/header.html.erb new file mode 100644 index 000000000..56d643e10 --- /dev/null +++ b/app/assets/templates/shared/header.html.erb @@ -0,0 +1,44 @@ + + + + + + + \ No newline at end of file diff --git a/app/assets/templates/shared/leftnav.html.erb b/app/assets/templates/shared/leftnav.html.erb new file mode 100644 index 000000000..e29d204f6 --- /dev/null +++ b/app/assets/templates/shared/leftnav.html.erb @@ -0,0 +1,44 @@ + +
    +
    +
    + + + + +
    +
    + + +
    \ No newline at end of file diff --git a/app/assets/templates/shared/passwordEditModal.html.erb b/app/assets/templates/shared/passwordEditModal.html.erb new file mode 100644 index 000000000..390c03370 --- /dev/null +++ b/app/assets/templates/shared/passwordEditModal.html.erb @@ -0,0 +1,41 @@ +
    + + + +
    \ No newline at end of file diff --git a/app/assets/templates/shared/passwordNewModal.html.erb b/app/assets/templates/shared/passwordNewModal.html.erb new file mode 100644 index 000000000..2b220d428 --- /dev/null +++ b/app/assets/templates/shared/passwordNewModal.html.erb @@ -0,0 +1,30 @@ +
    + + + +
    \ No newline at end of file diff --git a/app/assets/templates/shared/signupModal.html.erb b/app/assets/templates/shared/signupModal.html.erb new file mode 100644 index 000000000..8ede78971 --- /dev/null +++ b/app/assets/templates/shared/signupModal.html.erb @@ -0,0 +1,133 @@ + +
    + {{alert.msg}} + +
    +
    +
    +
    + + + Sexe est obligatoire +
    +
    + +
    + +
    + + Prénom est obligatoire +
    +
    +
    + + Nom est obligatoire +
    +
    + +
    +
    +
    + + +
    + Pseudo est obligatoire +
    +
    + +
    +
    +
    + + +
    + Email est obligatoire +
    +
    + +
    +
    +
    + + +
    + Mot de passe est obligatoire + Mot de passe est trop court (au moins 8 caractères) +
    +
    + +
    +
    +
    + + +
    + Mot de passe de confirmation est obligatoire + Mot de passe ne concorde pas avec la confirmation +
    +
    + +
    +
    +
    + +
    + Le profil utilisateur est obligatoire +
    +
    + +
    +
    +
    + + +
    + La date de naissance est obligatoire +
    +
    + +
    +
    +
    + + +
    + Le numéro de téléphone est obligatoire. +
    +
    + +
    +
    + J'autorise les utilisateurs du Fab Lab inscrits sur le site à me contacter +
    +
    + +
    +
    + J'accepte et J'ai Lu la charte d'utilisation du Fab Lab +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/app/controllers/api/api_controller.rb b/app/controllers/api/api_controller.rb new file mode 100644 index 000000000..77a8f959e --- /dev/null +++ b/app/controllers/api/api_controller.rb @@ -0,0 +1,4 @@ +class API::ApiController < ApplicationController + + +end diff --git a/app/controllers/api/categories_controller.rb b/app/controllers/api/categories_controller.rb new file mode 100644 index 000000000..39419deb4 --- /dev/null +++ b/app/controllers/api/categories_controller.rb @@ -0,0 +1,5 @@ +class API::CategoriesController < API::ApiController + def index + @categories = Category.all + end +end diff --git a/app/controllers/api/components_controller.rb b/app/controllers/api/components_controller.rb new file mode 100644 index 000000000..2bf0cebc2 --- /dev/null +++ b/app/controllers/api/components_controller.rb @@ -0,0 +1,45 @@ +class API::ComponentsController < API::ApiController + before_action :authenticate_user!, except: [:index, :show] + before_action :set_component, only: [:show, :update, :destroy] + + def index + @components = Component.all + end + + def show + end + + def create + authorize Component + @component = Component.new(component_params) + if @component.save + render :show, status: :created, location: @component + else + render json: @component.errors, status: :unprocessable_entity + end + end + + def update + authorize Component + if @component.update(component_params) + render :show, status: :ok, location: @component + else + render json: @component.errors, status: :unprocessable_entity + end + end + + def destroy + authorize Component + @component.destroy + head :no_content + end + + private + def set_component + @component = Component.find(params[:id]) + end + + def component_params + params.require(:component).permit(:name) + end +end diff --git a/app/controllers/api/events_controller.rb b/app/controllers/api/events_controller.rb new file mode 100644 index 000000000..cdf804ad7 --- /dev/null +++ b/app/controllers/api/events_controller.rb @@ -0,0 +1,79 @@ +class API::EventsController < API::ApiController + before_action :set_event, only: [:show, :edit, :update, :destroy] + + def index + @events = policy_scope(Event) + @total = @events.count + @events = @events.page(params[:page]).per(12) + end + + # GET /events/upcoming/:limit + def upcoming + limit = params[:limit] + @events = Event.includes(:event_image, :event_files, :availability) + .where('availabilities.start_at >= ?', Time.now) + .order('availabilities.start_at ASC').references(:availabilities).limit(limit) + end + + def show + end + + def create + authorize Event + @event = Event.new(event_params.permit!) + if @event.save + render :show, status: :created, location: @event + else + render json: @event.errors, status: :unprocessable_entity + end + end + + def update + authorize Event + if @event.update(event_params.permit!) + render :show, status: :ok, location: @event + else + render json: @event.errors, status: :unprocessable_entity + end + end + + def destroy + authorize Event + if @event.destroy + head :no_content + else + head :unprocessable_entity + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_event + @event = Event.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def event_params + event_preparams = params.required(:event).permit(:title, :description, :start_date, :start_time, :end_date, :end_time, + :amount, :reduced_amount, :nb_total_places, :availability_id, + :all_day, :recurrence, :recurrence_end_at, :category_ids, category_ids: [], + event_image_attributes: [:attachment], event_files_attributes: [:id, :attachment, :_destroy]) + start_date = Time.parse(event_preparams[:start_date]) + end_date = Time.parse(event_preparams[:end_date]) + start_time = Time.parse(event_preparams[:start_time]) if event_preparams[:start_time] + end_time = Time.parse(event_preparams[:end_time]) if event_preparams[:end_time] + if event_preparams[:all_day] == 'true' + start_at = DateTime.new(start_date.year, start_date.month, start_date.day, 0, 0, 0, start_date.zone) + end_at = DateTime.new(end_date.year, end_date.month, end_date.day, 23, 59, 59, end_date.zone) + else + start_at = DateTime.new(start_date.year, start_date.month, start_date.day, start_time.hour, start_time.min, start_time.sec, start_date.zone) + end_at = DateTime.new(end_date.year, end_date.month, end_date.day, end_time.hour, end_time.min, end_time.sec, end_date.zone) + end + event_preparams.merge!(availability_attributes: {id: event_preparams[:availability_id], start_at: start_at, end_at: end_at, available_type: 'event'}) + .except!(:start_date, :end_date, :start_time, :end_time, :all_day) + event_preparams.merge!(amount: (event_preparams[:amount].to_i * 100 if event_preparams[:amount].present?), + reduced_amount: (event_preparams[:reduced_amount].to_i * 100 if event_preparams[:reduced_amount].present?)) + end + + +end diff --git a/app/controllers/api/feeds_controller.rb b/app/controllers/api/feeds_controller.rb new file mode 100644 index 000000000..720d5d8c8 --- /dev/null +++ b/app/controllers/api/feeds_controller.rb @@ -0,0 +1,14 @@ +class API::FeedsController < API::ApiController + + respond_to :json + + def twitter_timelines + if params + limit = params[:limit] + else + limit = 3 + end + @tweet_news = Feed.twitter.user_timeline(ENV['TWITTER_NAME'], {count: limit}) + end + +end diff --git a/app/controllers/api/groups_controller.rb b/app/controllers/api/groups_controller.rb new file mode 100644 index 000000000..77c8e2248 --- /dev/null +++ b/app/controllers/api/groups_controller.rb @@ -0,0 +1,5 @@ +class API::GroupsController < API::ApiController + def index + @groups = Group.all + end +end diff --git a/app/controllers/api/licences_controller.rb b/app/controllers/api/licences_controller.rb new file mode 100644 index 000000000..80b3a2a21 --- /dev/null +++ b/app/controllers/api/licences_controller.rb @@ -0,0 +1,45 @@ +class API::LicencesController < API::ApiController + before_action :authenticate_user!, except: [:index, :show] + before_action :set_licence, only: [:show, :update, :destroy] + + def index + @licences = Licence.all + end + + def show + end + + def create + authorize Licence + @licence = Licence.new(licence_params) + if @licence.save + render :show, status: :created, location: @licence + else + render json: @licence.errors, status: :unprocessable_entity + end + end + + def update + authorize Licence + if @licence.update(licence_params) + render :show, status: :ok, location: @licence + else + render json: @licence.errors, status: :unprocessable_entity + end + end + + def destroy + authorize Licence + @licence.destroy + head :no_content + end + + private + def set_licence + @licence = Licence.find(params[:id]) + end + + def licence_params + params.require(:licence).permit(:name, :description) + end +end diff --git a/app/controllers/api/machines_controller.rb b/app/controllers/api/machines_controller.rb new file mode 100644 index 000000000..067388dfb --- /dev/null +++ b/app/controllers/api/machines_controller.rb @@ -0,0 +1,49 @@ +class API::MachinesController < API::ApiController + before_action :authenticate_user!, except: [:index, :show] + before_action :set_machine, only: [:edit, :update, :destroy] + respond_to :json + + def index + @machines = Machine.all + end + + def show + @machine = Machine.includes(:machine_files, :projects).friendly.find(params[:id]) + end + + def create + authorize Machine + @machine = Machine.new(machine_params) + if @machine.save + render :show, status: :created, location: @machine + else + render json: @machine.errors, status: :unprocessable_entity + end + end + + def update + authorize Machine + if @machine.update(machine_params) + render :show, status: :ok, location: @machine + else + render json: @machine.errors, status: :unprocessable_entity + end + end + + def destroy + authorize Machine + @machine.destroy + head :no_content + end + + private + def set_machine + @machine = Machine.find(params[:id]) + end + + def machine_params + params.require(:machine).permit(:name, :description, :spec, :plan_ids, plan_ids: [], machine_image_attributes: [:attachment], + machine_files_attributes: [:id, :attachment, :_destroy]) + end + +end diff --git a/app/controllers/api/members_controller.rb b/app/controllers/api/members_controller.rb new file mode 100644 index 000000000..6f72aaeb9 --- /dev/null +++ b/app/controllers/api/members_controller.rb @@ -0,0 +1,81 @@ +class API::MembersController < API::ApiController + before_action :authenticate_user!, except: [:last_subscribed] + before_action :set_member, only: [:update] + respond_to :json + + def index + @members = policy_scope(User) + end + + def last_subscribed + @members = User.with_role(:member).includes(:profile).where('is_allow_contact = true AND confirmed_at IS NOT NULL').order('created_at desc').limit(params[:last]) + render :index + end + + def show + @member = User.friendly.find(params[:id]) + authorize @member + end + + def create + authorize User + if !user_params[:password] and !user_params[:password_confirmation] + generated_password = Devise.friendly_token.first(8) + @member = User.new(user_params.merge(password: generated_password).permit!) + else + @member = User.new(user_params.permit!) + end + + if @member.save + @member.send_confirmation_instructions + if !user_params[:password] and !user_params[:password_confirmation] + UsersMailer.delay.notify_member_account_is_created(@member, generated_password) + else + UsersMailer.delay.notify_member_account_is_created(@member, user_params[:password]) + end + render :show, status: :created, location: member_path(@member) + else + render json: @member.errors, status: :unprocessable_entity + end + end + + def update + authorize @member + + if @member.update(user_params.permit!) + + # Update password without logging out + sign_in(@member, :bypass => true) unless current_user.is_admin? + render :show, status: :ok, location: member_path(@member) + else + render json: @member.errors, status: :unprocessable_entity + end + end + + def export_members + authorize :export + @datas = User.with_role(:member).includes(:group, :profile) + respond_to do |format| + format.html + format.xls + end + end + + private + def set_member + @member = User.find(params[:id]) + end + + def user_params + if current_user.id == params[:id].to_i + params.require(:user).permit(:username, :email, :password, :password_confirmation, profile_attributes: [:id, :first_name, :last_name, + :gender, :birthday, :phone, :interest, :software_mastered, + :user_avatar_attributes => [:id, :attachment, :_destroy], :address_attributes => [:id, :address]]) + + elsif current_user.is_admin? + params.require(:user).permit! + else + params.require(:user) + end + end +end diff --git a/app/controllers/api/notifications_controller.rb b/app/controllers/api/notifications_controller.rb new file mode 100644 index 000000000..5f66f5f24 --- /dev/null +++ b/app/controllers/api/notifications_controller.rb @@ -0,0 +1,12 @@ +class API::NotificationsController < API::ApiController + include NotifyWith::NotificationsApi + before_action :authenticate_user! + + def index + if params[:is_read] + @notifications = current_user.notifications.where(is_read: params[:is_read] == "true").page(params[:page]).per(15).order('created_at DESC') + else + @notifications = current_user.notifications.order('created_at DESC') + end + end +end diff --git a/app/controllers/api/projects_controller.rb b/app/controllers/api/projects_controller.rb new file mode 100644 index 000000000..20f71a7d3 --- /dev/null +++ b/app/controllers/api/projects_controller.rb @@ -0,0 +1,64 @@ +class API::ProjectsController < API::ApiController + before_action :authenticate_user!, except: [:index, :show, :last_published] + before_action :set_project, only: [:update, :destroy] + respond_to :json + + def index + # DEPEND per(12) -> projects.coffee + @projects = policy_scope(Project).page(params[:page]).per(12) + end + + def last_published + @projects = Project.includes(:project_image).published.order('created_at desc').limit(5) + end + + def show + @project = Project.friendly.find(params[:id]) + end + + def create + @project = Project.new(project_params.merge(author_id: current_user.id)) + if @project.save + render :show, status: :created, location: @project + else + render json: @project.errors, status: :unprocessable_entity + end + end + + def update + authorize @project + if @project.update(project_params) + render :show, status: :ok, location: @project + else + render json: @project.errors, status: :unprocessable_entity + end + end + + def destroy + authorize Project + @project.destroy + head :no_content + end + + def collaborator_valid + project_user = ProjectUser.find_by_valid_token params[:valid_token] + if project_user + project_user.update(is_valid: true, valid_token: '') + redirect_to "/#!/projects/#{project_user.project.id}" and return + end + redirect_to root_url + end + + private + def set_project + @project = Project.find(params[:id]) + end + + def project_params + params.require(:project).permit(:name, :description, :tags, :machine_ids, :component_ids, :theme_ids, :licence_id, :author_id, :licence_id, :state, + user_ids: [], machine_ids: [], component_ids: [], theme_ids: [], project_image_attributes: [:attachment], + project_caos_attributes: [:id, :attachment, :_destroy], + project_steps_attributes: [:id, :description, :title, :_destroy, + :project_step_image_attributes => :attachment]) + end +end diff --git a/app/controllers/api/themes_controller.rb b/app/controllers/api/themes_controller.rb new file mode 100644 index 000000000..a5d9946a4 --- /dev/null +++ b/app/controllers/api/themes_controller.rb @@ -0,0 +1,45 @@ +class API::ThemesController < API::ApiController + before_action :authenticate_user!, except: [:index, :show] + before_action :set_theme, only: [:show, :update, :destroy] + + def index + @themes = Theme.all + end + + def show + end + + def create + authorize Theme + @theme = Theme.new(theme_params) + if @theme.save + render :show, status: :created, location: @theme + else + render json: @theme.errors, status: :unprocessable_entity + end + end + + def update + authorize Theme + if @theme.update(theme_params) + render :show, status: :ok, location: @theme + else + render json: @theme.errors, status: :unprocessable_entity + end + end + + def destroy + authorize Theme + @theme.destroy + head :no_content + end + + private + def set_theme + @theme = Theme.find(params[:id]) + end + + def theme_params + params.require(:theme).permit(:name) + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 000000000..d5adffb36 --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,34 @@ +class ApplicationController < ActionController::Base + include Pundit + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception + after_action :set_csrf_cookie + + respond_to :html, :json + + before_action :configure_permitted_parameters, if: :devise_controller? + + def index + end + + protected + def set_csrf_cookie + cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery? + end + + def verified_request? + super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN']) + end + + def configure_permitted_parameters + devise_parameter_sanitizer.for(:sign_up) << + {profile_attributes: [:phone, :last_name, :first_name, + :gender, :birthday, :interest, :software_mastered]} + devise_parameter_sanitizer.for(:sign_up).concat [:username, :is_allow_contact, :cgu, :group_id] + end + + def default_url_options + Rails.env.production? ? { protocol: 'https' } : {} + end +end diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/controllers/confirmations_controller.rb b/app/controllers/confirmations_controller.rb new file mode 100644 index 000000000..2aeb6930f --- /dev/null +++ b/app/controllers/confirmations_controller.rb @@ -0,0 +1,10 @@ +class ConfirmationsController < Devise::ConfirmationsController + # The path used after confirmation. + def after_confirmation_path_for(resource_name, resource) + if signed_in?(resource_name) + signed_in_root_path(resource) + else + signed_in_root_path(resource) + end + end +end diff --git a/app/controllers/passwords_controller.rb b/app/controllers/passwords_controller.rb new file mode 100644 index 000000000..644421379 --- /dev/null +++ b/app/controllers/passwords_controller.rb @@ -0,0 +1,13 @@ +class PasswordsController < Devise::PasswordsController + # POST /resource/password + def create + self.resource = resource_class.send_reset_password_instructions(resource_params) + yield resource if block_given? + + if successfully_sent?(resource) + respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name)) + else + head 404 + end + end +end diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb new file mode 100644 index 000000000..7744ee5f3 --- /dev/null +++ b/app/controllers/registrations_controller.rb @@ -0,0 +1,28 @@ +class RegistrationsController < Devise::RegistrationsController + # POST /resource + def create + build_resource(sign_up_params) + + resource_saved = resource.save + yield resource if block_given? + if resource_saved + if resource.active_for_authentication? + set_flash_message :notice, :signed_up if is_flashing_format? + + # Permet d'envoyer l'email de confirmation sans bloquer l'access au dashboard + resource.send_confirmation_instructions + + sign_up(resource_name, resource) + respond_with resource, location: after_sign_up_path_for(resource) + else + set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format? + expire_data_after_sign_in! + respond_with resource, location: after_inactive_sign_up_path_for(resource) + end + else + clean_up_passwords resource + respond_with resource + end + end + +end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 000000000..aa36c0a6b --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,8 @@ +class SessionsController < Devise::SessionsController + #before_action :set_csrf_headers, only: [:create, :destroy] + + protected + def set_csrf_headers + cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery? + end +end diff --git a/app/controllers/webhooks_controller.rb b/app/controllers/webhooks_controller.rb new file mode 100644 index 000000000..89cba22c1 --- /dev/null +++ b/app/controllers/webhooks_controller.rb @@ -0,0 +1,7 @@ +class WebhooksController < ApplicationController + def create + # data_json = JSON.parse request.body.read + + render nothing: true + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 000000000..ec097a951 --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,5 @@ +module ApplicationHelper + + include Twitter::Autolink + +end diff --git a/app/helpers/upload_helper.rb b/app/helpers/upload_helper.rb new file mode 100644 index 000000000..528fbe683 --- /dev/null +++ b/app/helpers/upload_helper.rb @@ -0,0 +1,15 @@ +module UploadHelper + + def delete_empty_dirs + + path = File.expand_path(store_dir, root) + Dir.delete(path) + + path = File.expand_path(base_store_dir, root) + Dir.delete(path) + + rescue SystemCallError + true # nothing, the dir is not empty + end + +end \ No newline at end of file diff --git a/app/mailers/.keep b/app/mailers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/mailers/base_mailer.rb b/app/mailers/base_mailer.rb new file mode 100644 index 000000000..49a2ebc5d --- /dev/null +++ b/app/mailers/base_mailer.rb @@ -0,0 +1,10 @@ +class BaseMailer < ActionMailer::Base + default :from => ENV['DEFAULT_MAIL_FROM'] + layout 'notifications_mailer' + + helper :application + + def helpers + ActionController::Base.helpers + end +end diff --git a/app/mailers/notifications_mailer.rb b/app/mailers/notifications_mailer.rb new file mode 100644 index 000000000..6d51b2f29 --- /dev/null +++ b/app/mailers/notifications_mailer.rb @@ -0,0 +1,10 @@ +class NotificationsMailer < NotifyWith::NotificationsMailer + default :from => ENV['DEFAULT_MAIL_FROM'] + layout 'notifications_mailer' + + helper :application + + def helpers + ActionController::Base.helpers + end +end diff --git a/app/mailers/users_mailer.rb b/app/mailers/users_mailer.rb new file mode 100644 index 000000000..f87a708bc --- /dev/null +++ b/app/mailers/users_mailer.rb @@ -0,0 +1,7 @@ +class UsersMailer < BaseMailer + def notify_member_account_is_created(user, generated_password) + @user = user + @generated_password = generated_password + mail(to: @user.email, subject: "Votre compte Fab Lab a bien été créé.") + end +end diff --git a/app/models/.keep b/app/models/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/models/address.rb b/app/models/address.rb new file mode 100644 index 000000000..68019e2ef --- /dev/null +++ b/app/models/address.rb @@ -0,0 +1,3 @@ +class Address < ActiveRecord::Base + belongs_to :placeable, polymorphic: true +end diff --git a/app/models/asset.rb b/app/models/asset.rb new file mode 100644 index 000000000..be970566a --- /dev/null +++ b/app/models/asset.rb @@ -0,0 +1,5 @@ +require 'file_size_validator' + +class Asset < ActiveRecord::Base + belongs_to :viewable, polymorphic: true +end diff --git a/app/models/availability.rb b/app/models/availability.rb new file mode 100644 index 000000000..fb316c0ba --- /dev/null +++ b/app/models/availability.rb @@ -0,0 +1,5 @@ +class Availability < ActiveRecord::Base + + has_one :event + +end diff --git a/app/models/category.rb b/app/models/category.rb new file mode 100644 index 000000000..e23925efb --- /dev/null +++ b/app/models/category.rb @@ -0,0 +1,3 @@ +class Category < ActiveRecord::Base + has_and_belongs_to_many :events, join_table: 'events_categories' +end diff --git a/app/models/component.rb b/app/models/component.rb new file mode 100644 index 000000000..fde0f0899 --- /dev/null +++ b/app/models/component.rb @@ -0,0 +1,4 @@ +class Component < ActiveRecord::Base + has_and_belongs_to_many :projects, join_table: 'projects_components' + validates :name, presence: true, length: { maximum: 50 } +end \ No newline at end of file diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/models/event.rb b/app/models/event.rb new file mode 100644 index 000000000..4fb5a4f59 --- /dev/null +++ b/app/models/event.rb @@ -0,0 +1,73 @@ +class Event < ActiveRecord::Base + include NotifyWith::NotificationAttachedObject + + has_one :event_image, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :event_image, allow_destroy: true + + has_many :event_files, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :event_files, allow_destroy: true + + has_and_belongs_to_many :categories, join_table: 'events_categories' + + belongs_to :availability, dependent: :destroy + accepts_nested_attributes_for :availability + + attr_accessor :recurrence, :recurrence_end_at + + after_create :event_recurrence + + def name + title + end + + def recurrence_events + Event.includes(:availability).where('events.recurrence_id = ? AND events.id != ? AND availabilities.start_at >= ?', recurrence_id, id, Time.now).references(:availabilities) + end + + private + def event_recurrence + if recurrence.present? and recurrence != 'none' + case recurrence + when 'day' + on = nil + when 'week' + on = availability.start_at.wday + when 'month' + on = availability.start_at.day + when 'year' + on = [availability.start_at.month, availability.start_at.day] + else + end + r = Recurrence.new(every: recurrence, on: on, starts: availability.start_at+1.day, until: recurrence_end_at) + r.events.each do |date| + days_diff = availability.end_at.day - availability.start_at.day + start_at = DateTime.new(date.year, date.month, date.day, availability.start_at.hour, availability.start_at.min, availability.start_at.sec, availability.start_at.zone) + end_date = date + days_diff.days + end_at = DateTime.new(end_date.year, end_date.month, end_date.day, availability.end_at.hour, availability.end_at.min, availability.end_at.sec, availability.end_at.zone) + if event_image + ei = EventImage.new(attachment: event_image.attachment) + end + efs = event_files.map do |f| + EventFile.new(attachment: f.attachment) + end + event = Event.new({ + recurrence: 'none', + title: title, + description: description, + event_image: ei, + event_files: efs, + availability: Availability.new(start_at: start_at, end_at: end_at, available_type: 'event'), + availability_id: nil, + category_ids: category_ids, + amount: amount, + reduced_amount: reduced_amount, + nb_total_places: nb_total_places, + recurrence_id: id + }) + event.save + end + update_columns(recurrence_id: id) + end + end + +end diff --git a/app/models/event_file.rb b/app/models/event_file.rb new file mode 100644 index 000000000..fb6c7e469 --- /dev/null +++ b/app/models/event_file.rb @@ -0,0 +1,5 @@ +class EventFile < Asset + mount_uploader :attachment, ProjectCaoUploader + + validates :attachment, file_size: { maximum: 20.megabytes.to_i } +end diff --git a/app/models/event_image.rb b/app/models/event_image.rb new file mode 100644 index 000000000..4cdafc2b3 --- /dev/null +++ b/app/models/event_image.rb @@ -0,0 +1,5 @@ +class EventImage < Asset + mount_uploader :attachment, ProjectImageUploader + + validates :attachment, file_size: { maximum: 2.megabytes.to_i } +end diff --git a/app/models/feed.rb b/app/models/feed.rb new file mode 100644 index 000000000..52f190d32 --- /dev/null +++ b/app/models/feed.rb @@ -0,0 +1,10 @@ +class Feed + mattr_accessor :twitter do + Twitter::REST::Client.new do |config| + config.consumer_key = ENV['TWITTER_CONSUMER_KEY'] + config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET'] + config.access_token = ENV['TWITTER_ACCESS_TOKEN'] + config.access_token_secret = ENV['TWITTER_ACCESS_TOKEN_SECRET'] + end + end +end diff --git a/app/models/group.rb b/app/models/group.rb new file mode 100644 index 000000000..093999848 --- /dev/null +++ b/app/models/group.rb @@ -0,0 +1,7 @@ +class Group < ActiveRecord::Base + has_many :plans + + has_many :trainings_pricings, dependent: :destroy + + has_many :machines_pricings, dependent: :destroy +end diff --git a/app/models/licence.rb b/app/models/licence.rb new file mode 100644 index 000000000..36fcdaccb --- /dev/null +++ b/app/models/licence.rb @@ -0,0 +1,5 @@ +class Licence < ActiveRecord::Base + + has_many :projects + validates :name, presence: true, length: { maximum: 160 } +end \ No newline at end of file diff --git a/app/models/machine.rb b/app/models/machine.rb new file mode 100644 index 000000000..8c5d83247 --- /dev/null +++ b/app/models/machine.rb @@ -0,0 +1,18 @@ +class Machine < ActiveRecord::Base + extend FriendlyId + friendly_id :name, use: :slugged + + has_one :machine_image, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :machine_image, allow_destroy: true + + has_many :machine_files, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :machine_files, allow_destroy: true + + has_and_belongs_to_many :projects, join_table: 'projects_machines' + + has_and_belongs_to_many :trainings, join_table: 'trainings_machines' + + validates :name, presence: true, length: { maximum: 50 } + validates :description, presence: true + +end diff --git a/app/models/machine_file.rb b/app/models/machine_file.rb new file mode 100644 index 000000000..5a78b0d9b --- /dev/null +++ b/app/models/machine_file.rb @@ -0,0 +1,3 @@ +class MachineFile < Asset + mount_uploader :attachment, MachineFileUploader +end diff --git a/app/models/machine_image.rb b/app/models/machine_image.rb new file mode 100644 index 000000000..101cfd339 --- /dev/null +++ b/app/models/machine_image.rb @@ -0,0 +1,3 @@ +class MachineImage < Asset + mount_uploader :attachment, MachineImageUploader +end diff --git a/app/models/machines_pricing.rb b/app/models/machines_pricing.rb new file mode 100644 index 000000000..d74538904 --- /dev/null +++ b/app/models/machines_pricing.rb @@ -0,0 +1,14 @@ +class MachinesPricing < ActiveRecord::Base + belongs_to :machine + belongs_to :group + + def amount_by_plan(plan) + return not_subscribe_amount if plan.blank? + plan = Plan.find(plan) + if plan.interval == 'month' + month_amount + else + year_amount + end + end +end diff --git a/app/models/notification.rb b/app/models/notification.rb new file mode 100644 index 000000000..1b8242af9 --- /dev/null +++ b/app/models/notification.rb @@ -0,0 +1,3 @@ +class Notification < ActiveRecord::Base + include NotifyWith::Notification +end diff --git a/app/models/notification_type.rb b/app/models/notification_type.rb new file mode 100644 index 000000000..66d3b6400 --- /dev/null +++ b/app/models/notification_type.rb @@ -0,0 +1,11 @@ +class NotificationType + include NotifyWith::NotificationType + + # DANGER: dont remove a notification type!!! + notification_type_names %w( + notify_admin_when_project_published + notify_project_collaborator_to_valid + notify_project_author_when_collaborator_valid + notify_admin_when_user_is_created + ) +end diff --git a/app/models/profile.rb b/app/models/profile.rb new file mode 100644 index 000000000..dd95011ca --- /dev/null +++ b/app/models/profile.rb @@ -0,0 +1,36 @@ +class Profile < ActiveRecord::Base + belongs_to :user + has_one :user_avatar, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :user_avatar, + allow_destroy: true, + reject_if: proc { |attributes| attributes['attachment'].blank? } + has_one :address, as: :placeable, dependent: :destroy + accepts_nested_attributes_for :address, allow_destroy: true + + validates :first_name, presence: true, length: { maximum: 30 } + validates :last_name, presence: true, length: { maximum: 30 } + validates :gender, :inclusion => {:in => [true, false]} + validates :birthday, presence: true + validates_numericality_of :phone, only_integer: true, allow_blank: false + + def full_name + first_name.humanize.titleize + ' ' + last_name.humanize.titleize + end + + def to_s + full_name + end + + def age + if birthday.present? + now = Time.now.utc.to_date + now.year - birthday.year - (birthday.to_date.change(:year => now.year) > now ? 1 : 0) + else + '' + end + end + + def str_gender + gender ? 'male' : 'female' + end +end diff --git a/app/models/project.rb b/app/models/project.rb new file mode 100644 index 000000000..7ef94aae5 --- /dev/null +++ b/app/models/project.rb @@ -0,0 +1,53 @@ +class Project < ActiveRecord::Base + include AASM + include NotifyWith::NotificationAttachedObject + + extend FriendlyId + friendly_id :name, use: :slugged + + has_one :project_image, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :project_image, allow_destroy: true + has_many :project_caos, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :project_caos, allow_destroy: true + + has_and_belongs_to_many :machines, join_table: :projects_machines + has_and_belongs_to_many :components, join_table: :projects_components + has_and_belongs_to_many :themes, join_table: :projects_themes + + has_many :project_users, dependent: :destroy + has_many :users, through: :project_users + + belongs_to :author, foreign_key: :author_id, class_name: 'User' + belongs_to :licence, foreign_key: :licence_id + + has_many :project_steps, dependent: :destroy + accepts_nested_attributes_for :project_steps, allow_destroy: true + + after_save :after_save_and_publish + + aasm :column => 'state' do + state :draft, initial: true + state :published + + event :publish, :after => :notify_admin_when_project_published do + transitions from: :draft, :to => :published + end + end + + #scopes + scope :published, -> { where("state = 'published'") } + + private + def notify_admin_when_project_published + NotificationCenter.call type: 'notify_admin_when_project_published', + receiver: User.admins, + attached_object: self + end + + def after_save_and_publish + if state_changed? and published? + update_columns(published_at: Time.now) + notify_admin_when_project_published + end + end +end diff --git a/app/models/project_cao.rb b/app/models/project_cao.rb new file mode 100644 index 000000000..a4b0ecf49 --- /dev/null +++ b/app/models/project_cao.rb @@ -0,0 +1,5 @@ +class ProjectCao < Asset + mount_uploader :attachment, ProjectCaoUploader + + validates :attachment, file_size: { maximum: 20.megabytes.to_i } +end diff --git a/app/models/project_image.rb b/app/models/project_image.rb new file mode 100644 index 000000000..366b12c1d --- /dev/null +++ b/app/models/project_image.rb @@ -0,0 +1,5 @@ +class ProjectImage < Asset + mount_uploader :attachment, ProjectImageUploader + + validates :attachment, file_size: { maximum: 2.megabytes.to_i } +end diff --git a/app/models/project_step.rb b/app/models/project_step.rb new file mode 100644 index 000000000..7d12cf85a --- /dev/null +++ b/app/models/project_step.rb @@ -0,0 +1,5 @@ +class ProjectStep < ActiveRecord::Base + belongs_to :project + has_one :project_step_image, as: :viewable, dependent: :destroy + accepts_nested_attributes_for :project_step_image, allow_destroy: true +end diff --git a/app/models/project_step_image.rb b/app/models/project_step_image.rb new file mode 100644 index 000000000..3e92d49fe --- /dev/null +++ b/app/models/project_step_image.rb @@ -0,0 +1,5 @@ +class ProjectStepImage < Asset + mount_uploader :attachment, ProjectImageUploader + + validates :attachment, file_size: { maximum: 2.megabytes.to_i } +end diff --git a/app/models/project_user.rb b/app/models/project_user.rb new file mode 100644 index 000000000..5e94de4f2 --- /dev/null +++ b/app/models/project_user.rb @@ -0,0 +1,29 @@ +class ProjectUser < ActiveRecord::Base + include NotifyWith::NotificationAttachedObject + + belongs_to :project + belongs_to :user + + before_create :generate_valid_token + after_create :notify_project_collaborator_to_valid + after_update :notify_project_author_when_collaborator_valid, if: :is_valid_changed? + + private + def generate_valid_token + begin + self.valid_token = SecureRandom.hex + end while self.class.exists?(valid_token: valid_token) + end + + def notify_project_collaborator_to_valid + NotificationCenter.call type: 'notify_project_collaborator_to_valid', + receiver: user, + attached_object: self + end + + def notify_project_author_when_collaborator_valid + NotificationCenter.call type: 'notify_project_author_when_collaborator_valid', + receiver: project.author, + attached_object: self + end +end diff --git a/app/models/role.rb b/app/models/role.rb new file mode 100644 index 000000000..f8583ab97 --- /dev/null +++ b/app/models/role.rb @@ -0,0 +1,10 @@ +class Role < ActiveRecord::Base + has_and_belongs_to_many :users, :join_table => :users_roles + belongs_to :resource, :polymorphic => true + + validates :resource_type, + :inclusion => { :in => Rolify.resource_types }, + :allow_nil => true + + scopify +end diff --git a/app/models/theme.rb b/app/models/theme.rb new file mode 100644 index 000000000..bf16b1542 --- /dev/null +++ b/app/models/theme.rb @@ -0,0 +1,4 @@ +class Theme < ActiveRecord::Base + has_and_belongs_to_many :projects, join_table: :projects_themes + validates :name, presence: true, length: { maximum: 80 } +end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 000000000..fa427b859 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,98 @@ +class User < ActiveRecord::Base + include NotifyWith::NotificationReceiver + include NotifyWith::NotificationAttachedObject + # Include default devise modules. Others available are: + # :lockable, :timeoutable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :trackable, :validatable, + :confirmable, :async + rolify + + extend FriendlyId + friendly_id :username, use: :slugged + + has_one :profile, dependent: :destroy + accepts_nested_attributes_for :profile + + has_many :my_projects, foreign_key: :author_id, class_name: 'Project' + has_many :project_users, dependent: :destroy + has_many :projects, through: :project_users + + belongs_to :group + + before_create :assign_default_role + after_create :notify_admin_when_user_is_created + + attr_accessor :cgu + + validate :cgu_must_accept, if: :new_record? + validates_presence_of :group_id + + validates :username, presence: true, uniqueness: true, length: { maximum: 30 } + + def to_builder + Jbuilder.new do |json| + json.id id + json.username username + json.email email + json.role roles.first.name + json.group_id group_id + json.name profile.full_name + json.profile do + json.user_avatar do + json.id profile.user_avatar.id + json.attachment_url profile.user_avatar.attachment_url + end if profile.user_avatar + json.first_name profile.first_name + json.last_name profile.last_name + json.gender profile.gender.to_s + json.birthday profile.birthday.iso8601 if profile.birthday + json.interest profile.interest + json.software_mastered profile.software_mastered + json.address profile.address.address if profile.address + json.phone profile.phone + end + json.last_sign_in_at last_sign_in_at.iso8601 if last_sign_in_at + end + end + + def to_json(options) + to_builder.target! + end + + def self.admins + User.with_role(:admin) + end + + def is_admin? + has_role? :admin + end + + def is_member? + has_role? :member + end + + def all_projects + my_projects.to_a.concat projects + end + + private + def assign_default_role + add_role(:member) if self.roles.blank? + end + + def cgu_must_accept + errors.add(:cgu, I18n.t('activerecord.errors.messages.empty')) if cgu == '0' + end + + def notify_admin_when_user_is_created + NotificationCenter.call type: 'notify_admin_when_user_is_created', + receiver: User.admins, + attached_object: self + end + + protected + def confirmation_required? + false + end +end diff --git a/app/models/user_avatar.rb b/app/models/user_avatar.rb new file mode 100644 index 000000000..876433b68 --- /dev/null +++ b/app/models/user_avatar.rb @@ -0,0 +1,4 @@ +class UserAvatar < Asset + + mount_uploader :attachment, ProfilImageUploader +end diff --git a/app/policies/application_policy.rb b/app/policies/application_policy.rb new file mode 100644 index 000000000..b1b0e93d3 --- /dev/null +++ b/app/policies/application_policy.rb @@ -0,0 +1,25 @@ +class ApplicationPolicy + attr_reader :user, :record + + def initialize(user, record) + @user = user + @record = record + end + + def scope + Pundit.policy_scope!(user, record.class) + end + + class Scope + attr_reader :user, :scope + + def initialize(user, scope) + @user = user + @scope = scope + end + + def resolve + scope + end + end +end diff --git a/app/policies/availability_policy.rb b/app/policies/availability_policy.rb new file mode 100644 index 000000000..ad65e25b8 --- /dev/null +++ b/app/policies/availability_policy.rb @@ -0,0 +1,7 @@ +class AvailabilityPolicy < ApplicationPolicy + %w(index? show? create? update? destroy? reservations?).each do |action| + define_method action do + user.is_admin? + end + end +end diff --git a/app/policies/component_policy.rb b/app/policies/component_policy.rb new file mode 100644 index 000000000..834dab967 --- /dev/null +++ b/app/policies/component_policy.rb @@ -0,0 +1,13 @@ +class ComponentPolicy < ApplicationPolicy + def create? + user.is_admin? + end + + def update? + create? + end + + def destroy? + create? + end +end diff --git a/app/policies/event_policy.rb b/app/policies/event_policy.rb new file mode 100644 index 000000000..fc140bb42 --- /dev/null +++ b/app/policies/event_policy.rb @@ -0,0 +1,28 @@ +class EventPolicy < ApplicationPolicy + class Scope < Scope + def resolve + if user.nil? or (user and !user.is_admin?) + scope.includes(:event_image, :event_files, :availability) + .where('availabilities.start_at >= ?', Time.now) + .order('availabilities.start_at ASC') + .references(:availabilities) + else + scope.includes(:event_image, :event_files, :availability) + .order('availabilities.start_at DESC') + .references(:availabilities) + end + end + end + + def create? + user.is_admin? + end + + def update? + create? + end + + def destroy? + create? + end +end diff --git a/app/policies/export_policy.rb b/app/policies/export_policy.rb new file mode 100644 index 000000000..4eddd68bd --- /dev/null +++ b/app/policies/export_policy.rb @@ -0,0 +1,7 @@ +class ExportPolicy < Struct.new(:user, :export) + %w(export_members).each do |action| + define_method "#{action}?" do + user.is_admin? + end + end +end diff --git a/app/policies/licence_policy.rb b/app/policies/licence_policy.rb new file mode 100644 index 000000000..56b0aa2b2 --- /dev/null +++ b/app/policies/licence_policy.rb @@ -0,0 +1,13 @@ +class LicencePolicy < ApplicationPolicy + def create? + user.is_admin? + end + + def update? + create? + end + + def destroy? + create? + end +end diff --git a/app/policies/machine_policy.rb b/app/policies/machine_policy.rb new file mode 100644 index 000000000..43d02b42e --- /dev/null +++ b/app/policies/machine_policy.rb @@ -0,0 +1,13 @@ +class MachinePolicy < ApplicationPolicy + def create? + user.is_admin? + end + + def update? + user.is_admin? + end + + def destroy? + user.is_admin? + end +end diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb new file mode 100644 index 000000000..17a3e3329 --- /dev/null +++ b/app/policies/project_policy.rb @@ -0,0 +1,24 @@ +class ProjectPolicy < ApplicationPolicy + class Scope < Scope + def resolve + if user + scope.includes(:project_image, :machines, :users) + .where("state = 'published' OR (state = 'draft' AND (author_id = ? OR users.id = ?))", user.id, user.id) + .references(:users) + .order(created_at: :desc) + else + scope.includes(:project_image, :machines, :users) + .where("state = 'published'") + .order(created_at: :desc) + end + end + end + + def update? + user.is_admin? or record.author == user or record.users.include?(user) + end + + def destroy? + user.is_admin? + end +end diff --git a/app/policies/theme_policy.rb b/app/policies/theme_policy.rb new file mode 100644 index 000000000..132ae2371 --- /dev/null +++ b/app/policies/theme_policy.rb @@ -0,0 +1,13 @@ +class ThemePolicy < ApplicationPolicy + def create? + user.is_admin? + end + + def update? + create? + end + + def destroy? + create? + end +end diff --git a/app/policies/user_policy.rb b/app/policies/user_policy.rb new file mode 100644 index 000000000..10057d891 --- /dev/null +++ b/app/policies/user_policy.rb @@ -0,0 +1,23 @@ +class UserPolicy < ApplicationPolicy + class Scope < Scope + def resolve + if user.is_admin? + scope.with_role(:member).includes(:group, :profile => [:user_avatar]).order('created_at desc') + else + scope.with_role(:member).includes(:group, :profile => [:user_avatar]).where(is_allow_contact: true).order('created_at desc') + end + end + end + + def show? + user.is_admin? or (record.is_allow_contact and record.has_role?(:member)) + end + + def create? + user.is_admin? + end + + def update? + user.is_admin? or (user.id == record.id) + end +end diff --git a/app/services/notification_center.rb b/app/services/notification_center.rb new file mode 100644 index 000000000..0d2699290 --- /dev/null +++ b/app/services/notification_center.rb @@ -0,0 +1,16 @@ +class NotificationCenter + # send notification to one or several receiver with a type and attached object + def self.call(type: nil, receiver: nil, attached_object: nil) + if receiver.respond_to?(:each) + receiver.each do |user| + Notification.new.send_notification(type: type, attached_object: attached_object) + .to(user) + .deliver_later + end + else + Notification.new.send_notification(type: type, attached_object: attached_object) + .to(receiver) + .deliver_later + end + end +end diff --git a/app/uploaders/machine_file_uploader.rb b/app/uploaders/machine_file_uploader.rb new file mode 100644 index 000000000..0402f5702 --- /dev/null +++ b/app/uploaders/machine_file_uploader.rb @@ -0,0 +1,50 @@ +class MachineFileUploader < CarrierWave::Uploader::Base + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + #include CarrierWave::MiniMagick + include UploadHelper + + # Choose what kind of storage to use for this uploader: + storage :file + after :remove, :delete_empty_dirs + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + + def store_dir + "#{base_store_dir}/#{model.id}" + end + + def base_store_dir + "uploads/#{model.class.to_s.underscore}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_white_list + %w(pdf) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + #def filename + #"avatar.#{file.extension}" if original_filename + #end +end diff --git a/app/uploaders/machine_image_uploader.rb b/app/uploaders/machine_image_uploader.rb new file mode 100644 index 000000000..7bd62865b --- /dev/null +++ b/app/uploaders/machine_image_uploader.rb @@ -0,0 +1,58 @@ +class MachineImageUploader < CarrierWave::Uploader::Base + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + include CarrierWave::MiniMagick + include UploadHelper + + # Choose what kind of storage to use for this uploader: + storage :file + after :remove, :delete_empty_dirs + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + + def store_dir + "#{base_store_dir}/#{model.id}" + end + + def base_store_dir + "uploads/#{model.class.to_s.underscore}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + version :large do + process :resize_to_fit => [1000, 700] + end + + version :medium do + process :resize_to_fit => [700, 400] + end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_white_list + %w(jpg jpeg gif png) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + def filename + "machine_image.#{file.extension}" if original_filename + end +end diff --git a/app/uploaders/profil_image_uploader.rb b/app/uploaders/profil_image_uploader.rb new file mode 100644 index 000000000..ae889d194 --- /dev/null +++ b/app/uploaders/profil_image_uploader.rb @@ -0,0 +1,62 @@ +class ProfilImageUploader < CarrierWave::Uploader::Base + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + include CarrierWave::MiniMagick + include UploadHelper + + # Choose what kind of storage to use for this uploader: + storage :file + after :remove, :delete_empty_dirs + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + + def store_dir + "#{base_store_dir}/#{model.id}" + end + + def base_store_dir + "uploads/#{model.class.to_s.underscore}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + version :normal do + process :resize_to_fit => [140, 140] + end + + version :small do + process :resize_to_fit => [80, 80] + end + + version :tiny do + process :resize_to_fit => [40, 40] + end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_white_list + %w(jpg jpeg gif png) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + def filename + "#{model.class.to_s.underscore}.#{file.extension}" if original_filename + end +end diff --git a/app/uploaders/project_cao_uploader.rb b/app/uploaders/project_cao_uploader.rb new file mode 100644 index 000000000..897713cf7 --- /dev/null +++ b/app/uploaders/project_cao_uploader.rb @@ -0,0 +1,50 @@ +class ProjectCaoUploader < CarrierWave::Uploader::Base + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + #include CarrierWave::MiniMagick + include UploadHelper + + # Choose what kind of storage to use for this uploader: + storage :file + after :remove, :delete_empty_dirs + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + + def store_dir + "#{base_store_dir}/#{model.id}" + end + + def base_store_dir + "uploads/#{model.class.to_s.underscore}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_white_list + %w(pdf ai eps cad math svg stl dxf dwg obj step iges 3dm doc docx png) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + #def filename + #"avatar.#{file.extension}" if original_filename + #end +end diff --git a/app/uploaders/project_image_uploader.rb b/app/uploaders/project_image_uploader.rb new file mode 100644 index 000000000..b442e9668 --- /dev/null +++ b/app/uploaders/project_image_uploader.rb @@ -0,0 +1,62 @@ +class ProjectImageUploader < CarrierWave::Uploader::Base + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + include CarrierWave::MiniMagick + include UploadHelper + + # Choose what kind of storage to use for this uploader: + storage :file + after :remove, :delete_empty_dirs + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + + def store_dir + "#{base_store_dir}/#{model.id}" + end + + def base_store_dir + "uploads/#{model.class.to_s.underscore}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + # version :normal do + # process :resize_to_fit => [312, 270] + # end + + version :large do + process :resize_to_fit => [1000, 700] + end + + version :medium do + process :resize_to_fit => [700, 400] + end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_white_list + %w(jpg jpeg gif png) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + def filename + "#{model.class.to_s.underscore}.#{file.extension}" if original_filename + end +end diff --git a/app/views/api/categories/index.json.jbuilder b/app/views/api/categories/index.json.jbuilder new file mode 100644 index 000000000..45039014d --- /dev/null +++ b/app/views/api/categories/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array!(@categories) do |category| + json.extract! category, :id, :name +end diff --git a/app/views/api/components/index.json.jbuilder b/app/views/api/components/index.json.jbuilder new file mode 100644 index 000000000..ecdfe44c0 --- /dev/null +++ b/app/views/api/components/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@components) do |component| + json.extract! component, :id, :name + json.url component_url(component, format: :json) +end diff --git a/app/views/api/components/show.json.jbuilder b/app/views/api/components/show.json.jbuilder new file mode 100644 index 000000000..2100a682d --- /dev/null +++ b/app/views/api/components/show.json.jbuilder @@ -0,0 +1 @@ +json.extract! @component, :id, :name \ No newline at end of file diff --git a/app/views/api/events/_event.json.jbuilder b/app/views/api/events/_event.json.jbuilder new file mode 100644 index 000000000..45605d371 --- /dev/null +++ b/app/views/api/events/_event.json.jbuilder @@ -0,0 +1,29 @@ +json.extract! event, :id, :title, :description +json.event_image event.event_image.attachment_url if event.event_image +json.event_files_attributes event.event_files do |f| + json.id f.id + json.attachment f.attachment_identifier + json.attachment_url f.attachment_url +end +json.category_ids event.category_ids +json.categories event.categories do |c| + json.id c.id + json.name c.name +end +json.start_date event.availability.start_at +json.start_time event.availability.start_at +json.end_date event.availability.end_at +json.end_time event.availability.end_at +json.month t("date.month_names")[event.availability.start_at.month] +json.month_id event.availability.start_at.month +json.year event.availability.start_at.year +json.all_day event.availability.start_at.hour == 0 ? 'true' : 'false' +json.availability do + json.id event.availability.id + json.start_at event.availability.start_at + json.end_at event.availability.end_at +end +json.availability_id event.availability_id +json.amount (event.amount / 100.0) if event.amount +json.reduced_amount (event.reduced_amount / 100.0) if event.reduced_amount +json.nb_total_places event.nb_total_places diff --git a/app/views/api/events/index.json.jbuilder b/app/views/api/events/index.json.jbuilder new file mode 100644 index 000000000..7c5af6b94 --- /dev/null +++ b/app/views/api/events/index.json.jbuilder @@ -0,0 +1,6 @@ +json.array!(@events) do |event| + json.partial! 'api/events/event', event: event + json.url event_url(event, format: :json) + json.nb_total_events @total +end + diff --git a/app/views/api/events/show.json.jbuilder b/app/views/api/events/show.json.jbuilder new file mode 100644 index 000000000..0f779f081 --- /dev/null +++ b/app/views/api/events/show.json.jbuilder @@ -0,0 +1,9 @@ +json.partial! 'api/events/event', event: @event +json.recurrence_events @event.recurrence_events do |e| + json.id e.id + json.start_date e.availability.start_at + json.start_time e.availability.start_at + json.end_date e.availability.end_at + json.end_time e.availability.end_at + json.availability_id e.availability_id +end diff --git a/app/views/api/events/upcoming.json.jbuilder b/app/views/api/events/upcoming.json.jbuilder new file mode 100644 index 000000000..b870eafc5 --- /dev/null +++ b/app/views/api/events/upcoming.json.jbuilder @@ -0,0 +1,5 @@ +json.array!(@events) do |event| + json.partial! 'api/events/event', event: event + json.url event_url(event, format: :json) +end + diff --git a/app/views/api/feeds/twitter_timelines.json.jbuilder b/app/views/api/feeds/twitter_timelines.json.jbuilder new file mode 100644 index 000000000..c75a3b27c --- /dev/null +++ b/app/views/api/feeds/twitter_timelines.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@tweet_news) do |tweet| + json.id tweet.id + json.text auto_link(tweet.text) +end diff --git a/app/views/api/groups/index.json.jbuilder b/app/views/api/groups/index.json.jbuilder new file mode 100644 index 000000000..aada10ccd --- /dev/null +++ b/app/views/api/groups/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@groups) do |group| + json.id group.id + json.name group.name +end diff --git a/app/views/api/licences/index.json.jbuilder b/app/views/api/licences/index.json.jbuilder new file mode 100644 index 000000000..e03f1570e --- /dev/null +++ b/app/views/api/licences/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@licences) do |licence| + json.extract! licence, :id, :name, :description + json.url licence_url(licence, format: :json) +end diff --git a/app/views/api/licences/show.json.jbuilder b/app/views/api/licences/show.json.jbuilder new file mode 100644 index 000000000..2a081541b --- /dev/null +++ b/app/views/api/licences/show.json.jbuilder @@ -0,0 +1 @@ +json.extract! @licence, :id, :name, :description \ No newline at end of file diff --git a/app/views/api/machines/index.json.jbuilder b/app/views/api/machines/index.json.jbuilder new file mode 100644 index 000000000..5f642ebe2 --- /dev/null +++ b/app/views/api/machines/index.json.jbuilder @@ -0,0 +1,5 @@ +json.array!(@machines) do |machine| + json.extract! machine, :id, :name, :description, :spec, :slug + json.url machine_url(machine, format: :json) + json.machine_image machine.machine_image.attachment.medium.url if machine.machine_image +end diff --git a/app/views/api/machines/show.json.jbuilder b/app/views/api/machines/show.json.jbuilder new file mode 100644 index 000000000..c16d4616c --- /dev/null +++ b/app/views/api/machines/show.json.jbuilder @@ -0,0 +1,13 @@ +json.extract! @machine, :id, :name, :description, :spec, :created_at, :updated_at +json.machine_image @machine.machine_image.attachment.large.url if @machine.machine_image +json.machine_files_attributes @machine.machine_files do |f| + json.id f.id + json.attachment f.attachment_identifier + json.attachment_url f.attachment_url +end + +json.machine_projects @machine.projects.published.last(10) do |p| + json.id p.id + json.name p.name + json.slug p.slug +end diff --git a/app/views/api/members/export_members.xls.erb b/app/views/api/members/export_members.xls.erb new file mode 100644 index 000000000..cce8965de --- /dev/null +++ b/app/views/api/members/export_members.xls.erb @@ -0,0 +1,24 @@ + + + + + + + + + + + + <% @datas.each do |data| %> + + + + + + + + + + + <% end %> +
    IDNomPrénomEmailGenreAgeTel.Type utilisateur
    <%= data.id %><%= data.profile.last_name %><%= data.profile.first_name %><%= data.email %><%= data.profile.gender ? 'Homme' : 'Femme' %><%= data.profile.age %><%= data.profile.phone %><%= data.group.name %>
    diff --git a/app/views/api/members/index.json.jbuilder b/app/views/api/members/index.json.jbuilder new file mode 100644 index 000000000..7eabfb318 --- /dev/null +++ b/app/views/api/members/index.json.jbuilder @@ -0,0 +1,27 @@ +json.array!(@members) do |member| + json.id member.id + json.username member.username + json.slug member.slug + json.name member.profile.full_name + json.email member.email if current_user + json.first_name member.profile.first_name + json.last_name member.profile.last_name + json.profile do + json.user_avatar do + json.id member.profile.user_avatar.id + json.attachment_url member.profile.user_avatar.attachment_url + end if member.profile.user_avatar + json.first_name member.profile.first_name + json.last_name member.profile.last_name + json.gender member.profile.gender.to_s + if current_user and current_user.is_admin? + json.phone member.profile.phone + json.birthday member.profile.birthday.iso8601 if member.profile.birthday + end + end + json.group_id member.group_id + json.group do + json.id member.group.id + json.name member.group.name + end +end diff --git a/app/views/api/members/show.json.jbuilder b/app/views/api/members/show.json.jbuilder new file mode 100644 index 000000000..512b7d7bb --- /dev/null +++ b/app/views/api/members/show.json.jbuilder @@ -0,0 +1,52 @@ +json.extract! @member, :id, :username, :email, :group_id, :slug +json.role @member.roles.first.name +json.name @member.profile.full_name +json.profile do + json.id @member.profile.id + json.user_avatar do + json.id @member.profile.user_avatar.id + json.attachment_url @member.profile.user_avatar.attachment_url + end if @member.profile.user_avatar + json.first_name @member.profile.first_name + json.last_name @member.profile.last_name + json.gender @member.profile.gender.to_s + json.birthday @member.profile.birthday.to_date.iso8601 if @member.profile.birthday + json.interest @member.profile.interest + json.software_mastered @member.profile.software_mastered + json.address do + json.id @member.profile.address.id + json.address @member.profile.address.address + end if @member.profile.address + json.phone @member.profile.phone +end +json.last_sign_in_at @member.last_sign_in_at.iso8601 if @member.last_sign_in_at +json.all_projects @member.all_projects do |project| + json.extract! project, :id, :name, :description, :author_id, :licence_id, :slug + json.url project_url(project, format: :json) + json.project_image project.project_image.attachment.large.url if project.project_image + json.machine_ids project.machine_ids + json.machines project.machines do |m| + json.id m.id + json.name m.name + end + json.author_id project.author_id + json.user_ids project.user_ids + json.component_ids project.component_ids + json.components project.components do |c| + json.id c.id + json.name c.name + end + json.project_users project.project_users do |pu| + json.id pu.user.id + json.first_name pu.user.profile.first_name + json.last_name pu.user.profile.last_name + json.full_name pu.user.profile.full_name + json.user_avatar do + json.id pu.user.profile.user_avatar.id + json.attachment_url pu.user.profile.user_avatar.attachment_url + end if pu.user.profile.user_avatar + json.username pu.user.username + json.is_valid pu.is_valid + json.valid_token pu.valid_token if !pu.is_valid and @member == pu.user + end +end diff --git a/app/views/api/notifications/_notify_admin_when_project_published.json.jbuilder b/app/views/api/notifications/_notify_admin_when_project_published.json.jbuilder new file mode 100644 index 000000000..94c819fdc --- /dev/null +++ b/app/views/api/notifications/_notify_admin_when_project_published.json.jbuilder @@ -0,0 +1,3 @@ +json.title notification.notification_type +json.description "Le projet #{notification.attached_object.name} vient d'être publié." +json.url notification_url(notification, format: :json) diff --git a/app/views/api/notifications/_notify_admin_when_user_is_created.json.jbuilder b/app/views/api/notifications/_notify_admin_when_user_is_created.json.jbuilder new file mode 100644 index 000000000..362430b6e --- /dev/null +++ b/app/views/api/notifications/_notify_admin_when_user_is_created.json.jbuilder @@ -0,0 +1,3 @@ +json.title notification.notification_type +json.description "Un nouveau compte utilisateur vient d'être créé : #{ notification.attached_object.profile.full_name } <#{ notification.attached_object.email}>." +json.url notification_url(notification, format: :json) diff --git a/app/views/api/notifications/_notify_project_author_when_collaborator_valid.json.jbuilder b/app/views/api/notifications/_notify_project_author_when_collaborator_valid.json.jbuilder new file mode 100644 index 000000000..8eef540d0 --- /dev/null +++ b/app/views/api/notifications/_notify_project_author_when_collaborator_valid.json.jbuilder @@ -0,0 +1,3 @@ +json.title notification.notification_type +json.description "Le membre #{notification.attached_object.user.profile.full_name} est devenu un collaborateur de votre projet #{notification.attached_object.project.name}." +json.url notification_url(notification, format: :json) diff --git a/app/views/api/notifications/_notify_project_collaborator_to_valid.json.jbuilder b/app/views/api/notifications/_notify_project_collaborator_to_valid.json.jbuilder new file mode 100644 index 000000000..13c65ecca --- /dev/null +++ b/app/views/api/notifications/_notify_project_collaborator_to_valid.json.jbuilder @@ -0,0 +1,3 @@ +json.title notification.notification_type +json.description "Vous êtes invité à collaborer sur le projet suivant : #{notification.attached_object.project.name}." +json.url notification_url(notification, format: :json) diff --git a/app/views/api/notifications/index.json.jbuilder b/app/views/api/notifications/index.json.jbuilder new file mode 100644 index 000000000..a68082679 --- /dev/null +++ b/app/views/api/notifications/index.json.jbuilder @@ -0,0 +1,9 @@ +json.array!(@notifications) do |notification| + if notification.attached_object + json.extract! notification, :id, :notification_type_id, :notification_type, :created_at, :is_read + json.attached_object notification.attached_object + json.message do + json.partial! "/api/notifications/#{notification.notification_type}", notification: notification + end + end +end.delete_if {|n| n['id'] == nil } diff --git a/app/views/api/notifications/show.json.jbuilder b/app/views/api/notifications/show.json.jbuilder new file mode 100644 index 000000000..73566944f --- /dev/null +++ b/app/views/api/notifications/show.json.jbuilder @@ -0,0 +1,6 @@ +json.extract! @notification, :id, :notification_type_id, :notification_type, :created_at, :is_read +json.attached_object @notification.attached_object +json.message do + json.partial! "/api/notifications/#{@notification.notification_type}", notification: @notification +end +json.url notification_url(@notification, format: :json) diff --git a/app/views/api/projects/index.json.jbuilder b/app/views/api/projects/index.json.jbuilder new file mode 100644 index 000000000..34dbbb0b0 --- /dev/null +++ b/app/views/api/projects/index.json.jbuilder @@ -0,0 +1,10 @@ +json.array!(@projects) do |project| + json.extract! project, :id, :name, :description, :author_id, :licence_id, :slug + json.url project_url(project, format: :json) + json.project_image project.project_image.attachment.medium.url if project.project_image + json.machine_ids project.machine_ids + json.author_id project.author_id + json.user_ids project.user_ids + json.theme_ids project.theme_ids + json.component_ids project.component_ids +end diff --git a/app/views/api/projects/last_published.json.jbuilder b/app/views/api/projects/last_published.json.jbuilder new file mode 100644 index 000000000..608448810 --- /dev/null +++ b/app/views/api/projects/last_published.json.jbuilder @@ -0,0 +1,5 @@ +json.array!(@projects) do |project| + json.extract! project, :id, :name, :description, :slug + json.url project_url(project, format: :json) + json.project_image project.project_image.attachment.large.url if project.project_image +end diff --git a/app/views/api/projects/show.json.jbuilder b/app/views/api/projects/show.json.jbuilder new file mode 100644 index 000000000..52b6717b6 --- /dev/null +++ b/app/views/api/projects/show.json.jbuilder @@ -0,0 +1,56 @@ +json.extract! @project, :id, :name, :description, :tags, :created_at, :updated_at, :author_id, :licence_id, :slug +json.project_image @project.project_image.attachment.large.url if @project.project_image +json.author do + json.id @project.author_id + json.first_name @project.author.profile.first_name + json.last_name @project.author.profile.last_name + json.full_name @project.author.profile.full_name + json.user_avatar do + json.id @project.author.profile.user_avatar.id + json.attachment_url @project.author.profile.user_avatar.attachment_url + end if @project.author.profile.user_avatar + json.username @project.author.username + json.slug @project.author.slug +end +json.project_caos_attributes @project.project_caos do |f| + json.id f.id + json.attachment f.attachment_identifier + json.attachment_url f.attachment_url +end +json.machine_ids @project.machine_ids +json.machines @project.machines do |m| + json.id m.id + json.name m.name +end +json.component_ids @project.component_ids +json.components @project.components do |c| + json.id c.id + json.name c.name +end +json.theme_ids @project.theme_ids +json.themes @project.themes do |t| + json.id t.id + json.name t.name +end +json.user_ids @project.user_ids +json.project_users @project.project_users do |pu| + json.id pu.user.id + json.first_name pu.user.profile.first_name + json.last_name pu.user.profile.last_name + json.full_name pu.user.profile.full_name + json.user_avatar do + json.id pu.user.profile.user_avatar.id + json.attachment_url pu.user.profile.user_avatar.attachment_url + end if pu.user.profile.user_avatar + json.username pu.user.username + json.slug pu.user.slug + json.is_valid pu.is_valid +end +json.project_steps_attributes @project.project_steps.order('project_steps.created_at ASC') do |s| + json.id s.id + json.description s.description + json.title s.title + json.project_step_image s.project_step_image.attachment_identifier if s.project_step_image + json.project_step_image_url s.project_step_image.attachment_url if s.project_step_image +end +json.state @project.state diff --git a/app/views/api/themes/index.json.jbuilder b/app/views/api/themes/index.json.jbuilder new file mode 100644 index 000000000..61a4139cc --- /dev/null +++ b/app/views/api/themes/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@themes) do |theme| + json.extract! theme, :id, :name + json.url theme_url(theme, format: :json) +end diff --git a/app/views/api/themes/show.json.jbuilder b/app/views/api/themes/show.json.jbuilder new file mode 100644 index 000000000..69314c29e --- /dev/null +++ b/app/views/api/themes/show.json.jbuilder @@ -0,0 +1 @@ +json.extract! @theme, :id, :name \ No newline at end of file diff --git a/app/views/application/index.html.erb b/app/views/application/index.html.erb new file mode 100644 index 000000000..282c0fe11 --- /dev/null +++ b/app/views/application/index.html.erb @@ -0,0 +1,62 @@ + + + + + + + + + + Fab Lab Manager + + + + + + <%= stylesheet_link_tag "application", media: 'all' %> + <%= stylesheet_link_tag "app.printer", media: 'print' %> + + + + + + + + + + + +
    + +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    + +<%= javascript_include_tag 'application' %> + + + diff --git a/app/views/devise/mailer/confirmation_instructions.html.erb b/app/views/devise/mailer/confirmation_instructions.html.erb new file mode 100644 index 000000000..4cd66e420 --- /dev/null +++ b/app/views/devise/mailer/confirmation_instructions.html.erb @@ -0,0 +1,7 @@ +

    Bonjour <%= @user.profile.full_name %> !

    + +

    Vous pouvez finaliser votre inscription en confirmant votre adresse mail en cliquant sur le lien suivant :

    + +

    <%= link_to 'Confirmer mon e-mail !', confirmation_url(@resource, confirmation_token: @token) %>

    + +

    L'équipe Fab Lab.

    \ No newline at end of file diff --git a/app/views/devise/mailer/reset_password_instructions.html.erb b/app/views/devise/mailer/reset_password_instructions.html.erb new file mode 100644 index 000000000..f2aa6655c --- /dev/null +++ b/app/views/devise/mailer/reset_password_instructions.html.erb @@ -0,0 +1,7 @@ +

    Bonjour,

    + +

    Quelqu'un a demandé un lien pour changer votre mot de passe. Vous pouvez le faire via le lien ci-dessous.

    + +

    <%= link_to 'Changer mon mot de passe', "#{root_url}#!/?reset_password_token=#{@token}" %>

    + +

    Si vous n'avez pas demandé cela, merci d'ignorer ce message.

    diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb new file mode 100644 index 000000000..d298d8b02 --- /dev/null +++ b/app/views/devise/registrations/new.html.erb @@ -0,0 +1,88 @@ +
    +
    + <%= devise_error_messages! %> + <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:novalidate => ''}) do |f| %> + + <% resource.build_profile if resource.profile.nil? %> + +
    + <%= f.label :username %> + <%= f.text_field :username, autofocus: true, class: 'form-control' %> +
    + +
    + <%= f.label :email %> + <%= f.email_field :email, class: 'form-control' %> +
    + + <%= f.fields_for :profile do |p| %> +
    + <%= p.label :phone %> + <%= p.text_field :phone, class: 'form-control' %> +
    + +
    + <%= p.label :gender %> +
    + +
    +
    + +
    +
    + +
    + <%= p.label :last_name %> + <%= p.text_field :last_name, class: 'form-control' %> +
    + +
    + <%= p.label :first_name %> + <%= p.text_field :first_name, class: 'form-control' %> +
    + +
    + <%= p.label :birthday %> + <%= p.date_field :birthday, class: 'form-control' %> +
    + +
    + <%= p.label :interest %> + <%= p.text_area :interest, class: 'form-control' %> +
    + +
    + <%= p.label :software_mastered %> + <%= p.text_area :software_mastered, class: 'form-control' %> +
    + <% end %> + +
    + <%= f.label :password %> + <%= f.password_field :password, class: 'form-control' %> +
    + +
    + <%= f.label :password_confirmation %> + <%= f.password_field :password_confirmation, class: 'form-control' %> +
    + +
    + +
    + +
    + +
    + + <% end %> +
    +
    diff --git a/app/views/layouts/notifications_mailer.html.erb b/app/views/layouts/notifications_mailer.html.erb new file mode 100644 index 000000000..3a8b921e8 --- /dev/null +++ b/app/views/layouts/notifications_mailer.html.erb @@ -0,0 +1,48 @@ + + + + + + + + +
    + + + + +
    +

     

    + + + + + + + + + + + + + + + + +
    + Fab Lab +
    <%= message.subject %>
    + <%= yield %> +
    +

    A très bientôt sur le Fab Lab.

    +

    Cordialement,
    L'équipe du Fab Lab.

    +
    Merci de ne pas répondre directement à cet email.
    +

     

    +
    +
    + + \ No newline at end of file diff --git a/app/views/notifications_mailer/notify_admin_when_project_published.html.erb b/app/views/notifications_mailer/notify_admin_when_project_published.html.erb new file mode 100644 index 000000000..b596e2cec --- /dev/null +++ b/app/views/notifications_mailer/notify_admin_when_project_published.html.erb @@ -0,0 +1,3 @@ +

    Bonjour,

    + +

    Un nouveau projet vient d'être publié : "<%= link_to @attached_object.name, "#{root_url}#!/projects/#{@attached_object.id}" %>"

    diff --git a/app/views/notifications_mailer/notify_admin_when_user_is_created.html.erb b/app/views/notifications_mailer/notify_admin_when_user_is_created.html.erb new file mode 100644 index 000000000..130bb6a0b --- /dev/null +++ b/app/views/notifications_mailer/notify_admin_when_user_is_created.html.erb @@ -0,0 +1,3 @@ +

    Bonjour,

    + +

    Un nouveau compte utilisateur vient d'être créé sur la plateforme : "<%= @attached_object.profile.full_name %> <<%= @attached_object.email%>>"

    diff --git a/app/views/notifications_mailer/notify_project_author_when_collaborator_valid.html.erb b/app/views/notifications_mailer/notify_project_author_when_collaborator_valid.html.erb new file mode 100644 index 000000000..24c721645 --- /dev/null +++ b/app/views/notifications_mailer/notify_project_author_when_collaborator_valid.html.erb @@ -0,0 +1,3 @@ +

    Bonjour <%= @attached_object.project.author.profile.full_name %>,

    + +

    Le membre <%= @attached_object.user.profile.full_name %> a accepté votre demande de collaboration sur votre projet : <%= link_to @attached_object.project.name, "#{root_url}#!/projects/#{@attached_object.project.id}" %>.

    diff --git a/app/views/notifications_mailer/notify_project_collaborator_to_valid.html.erb b/app/views/notifications_mailer/notify_project_collaborator_to_valid.html.erb new file mode 100644 index 000000000..30314a2e1 --- /dev/null +++ b/app/views/notifications_mailer/notify_project_collaborator_to_valid.html.erb @@ -0,0 +1,5 @@ +

    Bonjour <%= @attached_object.user.profile.full_name %>,

    + +

    Vous êtes invité à collaborer sur ce projet : <%= link_to @attached_object.project.name, "#{root_url}#!/projects/#{@attached_object.project.id}" %>.

    + +

    Pour accepter cette invitation, il vous suffit de cliquer sur le lien suivant: <%= link_to "#{root_url}project_collaborator/#{@attached_object.valid_token}", "#{root_url}project_collaborator/#{@attached_object.valid_token}" %>

    diff --git a/app/views/users_mailer/notify_member_account_is_created.html.erb b/app/views/users_mailer/notify_member_account_is_created.html.erb new file mode 100644 index 000000000..12c85a509 --- /dev/null +++ b/app/views/users_mailer/notify_member_account_is_created.html.erb @@ -0,0 +1,10 @@ +

    Bonjour <%= @user.profile.full_name %>,

    + +

    L’équipe du Fab Lab vient de vous créer un compte sur <%= link_to 'le site du Fab lab', root_url %>
    Voici vos paramètres de connexion :

    + +

    Nom de compte : <%= @user.email %>

    +

    Mot de passe : <%= @generated_password %>

    + +

    Ce mot de passe est temporaire, vous pourrez le modifier en accédant à l’espace « Mon compte ». Avec ce compte, vous conservez bien entendu tous les avantages liés à votre profil utilisateur Fab Lab (abonnement, formations).

    + +

    L'équipe Fab Lab.

    \ No newline at end of file diff --git a/bin/bundle b/bin/bundle new file mode 100755 index 000000000..66e9889e8 --- /dev/null +++ b/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/bin/rails b/bin/rails new file mode 100755 index 000000000..4d608edeb --- /dev/null +++ b/bin/rails @@ -0,0 +1,8 @@ +#!/usr/bin/env ruby +begin + load File.expand_path("../spring", __FILE__) +rescue LoadError +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/bin/rake b/bin/rake new file mode 100755 index 000000000..8017a0271 --- /dev/null +++ b/bin/rake @@ -0,0 +1,8 @@ +#!/usr/bin/env ruby +begin + load File.expand_path("../spring", __FILE__) +rescue LoadError +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/bin/setup b/bin/setup new file mode 100755 index 000000000..acdb2c138 --- /dev/null +++ b/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/bin/spring b/bin/spring new file mode 100755 index 000000000..7b45d374f --- /dev/null +++ b/bin/spring @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require "rubygems" + require "bundler" + + if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m) + Gem.paths = { "GEM_PATH" => [Bundler.bundle_path.to_s, *Gem.path].uniq } + gem "spring", match[1] + require "spring/binstub" + end +end diff --git a/bower.json b/bower.json new file mode 100644 index 000000000..967fd791f --- /dev/null +++ b/bower.json @@ -0,0 +1,41 @@ +{ + "name": "fabmanager", + "version": "1.0.0", + "authors": [ + "sleede " + ], + "license": "MIT", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "vendor/assets/components", + "test", + "tests" + ], + "dependencies": { + "angular-bootstrap": ">=0.11", + "angular-ui-router": ">=0.2.10", + "angular-ui-select2": ">=0.0.5", + "angular-moment": ">=0.7.0", + "ngUpload": ">=0.5.11", + "jasny-bootstrap": ">=3.1.3", + "holderjs": "~2.6.0", + "angular-growl": ">=0.4.0", + "angular-xeditable": ">=0.1.8", + "checklist-model": ">=0.1.3", + "angular-unsavedChanges": "~0.2.0", + "angular-loading-bar": ">=0.4.3", + "angular-scroll": "~0.6.5", + "angular-google-analytics": "~0.0.3", + "underscore": "~1.7.0", + "angular-redactor": "~1.0.0", + "angular-devise": "~1.0.2", + "angular-i18n": "~1.3.15" + }, + "resolutions": { + "jquery": ">=1.10.2", + "angular": "~1.2.16" + } +} diff --git a/config.ru b/config.ru new file mode 100644 index 000000000..bd83b2541 --- /dev/null +++ b/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 000000000..6c1a4b534 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,53 @@ +require File.expand_path('../boot', __FILE__) + +# Pick the frameworks you want: +#require "active_model/railtie" +#require "active_record/railtie" +#require "action_controller/railtie" +#require "action_mailer/railtie" +#require "action_view/railtie" +#require "sprockets/railtie" +#require "rails/test_unit/railtie" +require 'csv' +require "rails/all" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Fablab + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + config.time_zone = 'Paris' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + config.i18n.default_locale = :fr + + config.assets.paths << Rails.root.join('vendor', 'assets', 'components').to_s + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + + config.to_prepare do + Devise::Mailer.layout "notifications_mailer" + end + + # allow use rails helpers in angular templates + Rails.application.assets.context_class.class_eval do + include ActionView::Helpers + include Rails.application.routes.url_helpers + end + + config.active_job.queue_adapter = :sidekiq + + config.generators do |g| + g.orm :active_record + end + end +end diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 000000000..5e5f0c1fa --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,4 @@ +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) diff --git a/config/database.yml.default b/config/database.yml.default new file mode 100644 index 000000000..92b619d59 --- /dev/null +++ b/config/database.yml.default @@ -0,0 +1,81 @@ + +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: 25 + +development: + <<: *default + database: fabmanager_development + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + username: sleede + + # The password associated with the postgres role (username). + password: sleede + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: fabmanager_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# + +staging: + <<: *default + database: fabmanager_staging + username: <%= ENV['DATABASE_USERNAME'] %> + password: <%= ENV['DATABASE_PASSWORD'] %> + port: <%= ENV['DATABASE_PORT'] %> + + +production: + <<: *default + database: fabmanager_production + username: <%= ENV['DATABASE_USERNAME'] %> + password: <%= ENV['DATABASE_PASSWORD'] %> + port: <%= ENV['DATABASE_PORT'] %> + diff --git a/config/deploy.rb b/config/deploy.rb new file mode 100644 index 000000000..3c9cb1753 --- /dev/null +++ b/config/deploy.rb @@ -0,0 +1,95 @@ +require "bundler/capistrano" +require "rvm/capistrano" +require 'capistrano/ext/multistage' + +set :stages, %w(production staging) +set :default_stage, "staging" + + +default_run_options[:pty] = true +ssh_options[:forward_agent] = true + +after "deploy", "deploy:cleanup" # keep only the last 5 releases + +namespace :deploy do + %w[start stop restart].each do |command| + desc "#{command} unicorn server" + task command, roles: :app, except: {no_release: true} do + run "/etc/init.d/unicorn_#{application} #{command}" + end + end + + desc 'Symlink bootstrap glyphicons' + task :symlink, :roles => :web, :except => { :no_release => true } do + #run "rm -R #{shared_path}/assets/bootstrap/glyphicons-halflings-regular-*" + run "ln -nfs #{shared_path}/assets/bootstrap/glyphicons-halflings-regular-*.ttf #{shared_path}/assets/bootstrap/glyphicons-halflings-regular.ttf" + run "ln -nfs #{shared_path}/assets/bootstrap/glyphicons-halflings-regular-*.svg #{shared_path}/assets/bootstrap/glyphicons-halflings-regular.svg" + run "ln -nfs #{shared_path}/assets/bootstrap/glyphicons-halflings-regular-*.woff #{shared_path}/assets/bootstrap/glyphicons-halflings-regular.woff" + run "ln -nfs #{shared_path}/assets/bootstrap/glyphicons-halflings-regular-*.woff2 #{shared_path}/assets/bootstrap/glyphicons-halflings-regular.woff2" + run "ln -nfs #{shared_path}/assets/bootstrap/glyphicons-halflings-regular-*.eot #{shared_path}/assets/bootstrap/glyphicons-halflings-regular.eot" + #run "rm -R #{shared_path}/assets/select2/select2*" + run "ln -nfs #{shared_path}/assets/select2/select2-*.png #{shared_path}/assets/select2.png" + run "ln -nfs #{shared_path}/assets/select2/select2x2-*.png #{shared_path}/assets/select2x2.png" + run "ln -nfs #{shared_path}/assets/select2/select2-spinner-*.gif #{shared_path}/assets/select2-spinner.gif" + end + + task :setup_config, roles: :app do + sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}" + sudo "ln -nfs #{current_path}/config/unicorn_init.sh /etc/init.d/unicorn_#{application}" + run "mkdir -p #{shared_path}/config" + run "mkdir -p #{shared_path}/uploads" + put File.read("config/database.yml.default"), "#{shared_path}/config/database.yml" + puts "Now edit #{shared_path}/config/database.yml" + put File.read("config/application.yml"), "#{shared_path}/config/application.yml" + puts "Now edit #{shared_path}/config/application.yml and add your ENV vars" + + end + after "deploy:setup", "deploy:setup_config" + + task :symlink_config, roles: :app do + run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" + run "rm -rf #{release_path}/config/application.yml" + run "ln -nfs #{shared_path}/config/application.yml #{release_path}/config/application.yml" + end + after "deploy:finalize_update", "deploy:symlink_config" + + desc "Make sure local git is in sync with remote." + task :check_revision, roles: :web do + unless `git rev-parse HEAD` == `git rev-parse origin/master` + puts "WARNING: HEAD is not the same as origin/master" + puts "Run `git push` to sync changes." + exit + end + end + #before "deploy", "deploy:check_revision" + + desc "load seed to bd" + task :load_seed, :roles => :app do + run "cd #{current_path} && bundle exec rake db:seed RAILS_ENV=production" + end + + desc "Rake db:migrate" + task :db_migrate, :roles => :app do + run "cd #{current_path} && bundle exec rake db:migrate RAILS_ENV=production" + end + after "deploy:create_symlink", "deploy:db_migrate" + + desc "Symlinks the uploads dir" + task :symlink_uploads_dir, :roles => :app do + run "rm -rf #{release_path}/public/uploads" + run "ln -nfs #{shared_path}/uploads/ #{release_path}/public/" + end + after "deploy:finalize_update", 'deploy:symlink_uploads_dir' + + + namespace :assets do + desc 'Run the precompile task locally and rsync with shared' + task :precompile, :roles => :web, :except => { :no_release => true } do + %x{bundle exec rake assets:precompile RAILS_ENV=production} + %x{rsync --recursive --times --rsh='ssh -p#{port}' --compress --human-readable --progress public/assets #{user}@#{domain}:#{shared_path}} + %x{bundle exec rake assets:clean} + end + + end + +end diff --git a/config/deploy/production.rb b/config/deploy/production.rb new file mode 100644 index 000000000..17ce95568 --- /dev/null +++ b/config/deploy/production.rb @@ -0,0 +1,16 @@ +server "fab-manager.com", :web, :app, :db, primary: true + +set :domain, "fab-manager.com" +set :application, "fabmanager" +set :user, "admin" +set :port, 22 +set :deploy_to, "/home/#{user}/apps/#{application}" +set :deploy_via, :remote_cache +set :use_sudo, false + +set :scm, "git" +set :repository, "git@github.com:LaCasemate/fab-manager.git" +set :scm_user, "jarod022" +set :branch, "master" + +set :rails_env, 'production' \ No newline at end of file diff --git a/config/deploy/staging.rb b/config/deploy/staging.rb new file mode 100644 index 000000000..8952eb260 --- /dev/null +++ b/config/deploy/staging.rb @@ -0,0 +1,66 @@ +server "demo.fab-manager.com", :web, :app, :db, primary: true + +set :domain, "demo.fab-manager.com" +set :application, "fabmanager_staging" +set :user, "admin" +set :port, 22 +set :deploy_to, "/home/#{user}/apps/#{application}" +set :deploy_via, :remote_cache +set :use_sudo, false + +set :scm, "git" +set :repository, "git@github.com:LaCasemate/fab-manager.git" +set :scm_user, "jarod022" +set :branch, "dev" + +set :rails_env, 'staging' + + +namespace :deploy do + %w[start stop restart].each do |command| + desc "#{command} unicorn server" + task command, roles: :app, except: {no_release: true} do + run "/etc/init.d/unicorn_#{application} #{command}" + end + end + + task :setup_config, roles: :app do + sudo "ln -nfs #{current_path}/config/nginx_staging.conf /etc/nginx/sites-enabled/#{application}" + sudo "ln -nfs #{current_path}/config/unicorn_init_staging.sh /etc/init.d/unicorn_#{application}" + run "mkdir -p #{shared_path}/config" + run "mkdir -p #{shared_path}/uploads" + put File.read("config/database.yml.default"), "#{shared_path}/config/database.yml" + puts "Now edit #{shared_path}/config/database.yml" + put File.read("config/application.yml"), "#{shared_path}/config/application.yml" + puts "Now edit #{shared_path}/config/application.yml and add your ENV vars" + + end + after "deploy:setup", "deploy:setup_config" + + task :symlink_robots, roles: :app do + run "rm -rf #{release_path}/public/robots.txt" + run "ln -nfs #{shared_path}/robots.txt #{release_path}/public/robots.txt" + end + after "deploy:finalize_update", "deploy:symlink_robots" + + desc "Rake db:migrate" + task :db_migrate, :roles => :app do + run "cd #{current_path} && bundle exec rake db:migrate RAILS_ENV=staging" + end + after "deploy:create_symlink", "deploy:db_migrate" + + desc "load seed to bd" + task :load_seed, :roles => :app do + run "cd #{current_path} && bundle exec rake db:seed RAILS_ENV=staging" + end + + namespace :assets do + desc 'Run the precompile task locally and rsync with shared' + task :precompile, :roles => :web, :except => { :no_release => true } do + %x{bundle exec rake assets:precompile RAILS_ENV=staging} + %x{rsync --recursive --times --rsh='ssh -p#{port}' --compress --human-readable --progress public/assets #{user}@#{domain}:#{shared_path}} + %x{bundle exec rake assets:clean} + end + end + +end diff --git a/config/disqus_api.yml b/config/disqus_api.yml new file mode 100644 index 000000000..21210753a --- /dev/null +++ b/config/disqus_api.yml @@ -0,0 +1,14 @@ +development: + api_secret: YourApiSecretHere + api_key: YourApiKeyHere + access_token: YourAccessTokenHere + +staging: + api_secret: YourApiSecretHere + api_key: YourApiKeyHere + access_token: YourAccessTokenHere + +production: + api_secret: YourApiSecretHere + api_key: YourApiKeyHere + access_token: YourAccessTokenHere diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 000000000..ee8d90dc6 --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 000000000..2e0d9cb7b --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,44 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = false + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + config.action_mailer.delivery_method = :letter_opener + config.action_mailer.default_url_options = { :host => 'localhost:3000' } +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 000000000..0ac41f565 --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,107 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable Rails's static asset server (Apache or nginx will already do this). + config.serve_static_files = false + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # if you want disable variable name mangling + config.assets.js_compressor = Uglifier.new(mangle: false) + + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Generate digests for assets URLs. + config.assets.digest = true + + # Version of your assets, change this if you want to expire all your assets. + config.assets.version = '1.0' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Set to :debug to see everything in the log. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets. + # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. + # config.assets.precompile += %w( search.js ) + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Disable automatic flushing of the log to improve performance. + # config.autoflush_log = false + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + config.serve_static_files = true + + config.action_mailer.default_url_options = { :host => ENV['APPLICATION_ROOT_URL'], :protocol => ENV['APPLICATION_PROTOCOL'] } + # config.action_mailer.perform_deliveries = true + # config.action_mailer.raise_delivery_errors = false + # config.action_mailer.default :charset => "utf-8" + + # #mandrillapp + # config.action_mailer.smtp_settings = { + # :port => 587, + # :address => 'smtp.mandrillapp.com', + # :user_name => ENV['MANDRILL_USERNAME'], + # :password => ENV['MANDRILL_APIKEY'], + # :authentication => 'plain', + # :enable_starttls_auto => true + # } + + # config.action_mailer.delivery_method = :smtp + + config.action_mailer.delivery_method = :mandrill + + # config.action_mailer.delivery_method = :sendmail + +end diff --git a/config/environments/staging.rb b/config/environments/staging.rb new file mode 100644 index 000000000..501442264 --- /dev/null +++ b/config/environments/staging.rb @@ -0,0 +1,107 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable Rails's static asset server (Apache or nginx will already do this). + config.serve_static_files = false + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # if you want disable variable name mangling + config.assets.js_compressor = Uglifier.new(mangle: false) + + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Generate digests for assets URLs. + config.assets.digest = true + + # Version of your assets, change this if you want to expire all your assets. + config.assets.version = '1.0' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Set to :debug to see everything in the log. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets. + # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. + # config.assets.precompile += %w( search.js ) + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Disable automatic flushing of the log to improve performance. + # config.autoflush_log = false + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + config.serve_static_files = true + + config.action_mailer.default_url_options = { :host => ENV['APPLICATION_ROOT_URL'], :protocol => ENV['APPLICATION_PROTOCOL'] } + # config.action_mailer.perform_deliveries = true + # config.action_mailer.raise_delivery_errors = false + # config.action_mailer.default :charset => "utf-8" + + # #mandrillapp + # config.action_mailer.smtp_settings = { + # :port => 587, + # :address => 'smtp.mandrillapp.com', + # :user_name => ENV['MANDRILL_USERNAME'], + # :password => ENV['MANDRILL_APIKEY'], + # :authentication => 'plain', + # :enable_starttls_auto => true + # } + + # config.action_mailer.delivery_method = :smtp + + config.action_mailer.delivery_method = :mandrill + + # config.action_mailer.delivery_method = :sendmail + +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 000000000..d9cabe25b --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,44 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static asset server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + config.active_job.queue_adapter = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + + +end diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb new file mode 100644 index 000000000..55ab9e200 --- /dev/null +++ b/config/initializers/assets.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) + +Rails.application.config.assets.precompile += %w( fontawesome-webfont.eot fontawesome-webfont.woff fontawesome-webfont.svg fontawesome-webfont.ttf ) +Rails.application.config.assets.precompile += %w( app.printer.css ) diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 000000000..59385cdf3 --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb new file mode 100644 index 000000000..7a06a89f0 --- /dev/null +++ b/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json \ No newline at end of file diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb new file mode 100644 index 000000000..c05495be2 --- /dev/null +++ b/config/initializers/devise.rb @@ -0,0 +1,253 @@ +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # The secret key used by Devise. Devise uses this key to generate + # random tokens. Changing this key will render invalid all existing + # confirmation, reset password and unlock tokens in the database. + config.secret_key = ENV['DEVISE_KEY'] + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class + # with default "from" parameter. + config.mailer_sender = ENV['DEFAULT_MAIL_FROM'] + + # Configure the class responsible to send e-mails. + # config.mailer = 'Devise::Mailer' + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + # config.authentication_keys = [ :email ] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [ :email ] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + config.strip_whitespace_keys = [ :email ] + + # Tell if authentication through request.params is enabled. True by default. + # It can be set to an array that will enable params authentication only for the + # given strategies, for example, `config.params_authenticatable = [:database]` will + # enable it only for database (email + password) authentication. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Auth is enabled. False by default. + # It can be set to an array that will enable http authentication only for the + # given strategies, for example, `config.http_authenticatable = [:database]` will + # enable it only for database authentication. The supported strategies are: + # :database = Support basic authentication with authentication key + password + # config.http_authenticatable = false + + # If http headers should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. 'Application' by default. + # config.http_authentication_realm = 'Application' + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # By default Devise will store the user in session. You can skip storage for + # particular strategies by setting this option. + # Notice that if you are skipping storage for all authentication paths, you + # may want to disable generating routes to Devise's sessions controller by + # passing :skip => :sessions to `devise_for` in your config/routes.rb + config.skip_session_storage = [:http_auth] + + # By default, Devise cleans up the CSRF token on authentication to + # avoid CSRF token fixation attacks. This means that, when using AJAX + # requests for sign in and sign up, you need to get a new CSRF token + # from the server. You can disable this option at your own risk. + # config.clean_up_csrf_token_on_authentication = true + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 10. If + # using other encryptors, it sets how many times you want the password re-encrypted. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. + config.stretches = Rails.env.test? ? 1 : 10 + + # Setup a pepper to generate the encrypted password. + # config.pepper = 'af74f5ee4fe6f0156f5bbb843cdde2ce883df1cc97988ee7a88e9db28c07f7bb233d98e342e13151a2d2600ab1cd4ea405c1302dfced3d962739118c61225c80' + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming their account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming their account, + # access will be blocked just in the third day. Default is 0.days, meaning + # the user cannot access the website without confirming their account. + # config.allow_unconfirmed_access_for = 2.days + + # A period that the user is allowed to confirm their account before their + # token becomes invalid. For example, if set to 3.days, the user can confirm + # their account within 3 days after the mail was sent, but on the fourth day + # their account can't be confirmed with the token any more. + # Default is nil, meaning there is no restriction on how long a user can take + # before confirming their account. + # config.confirm_within = 3.days + + # If true, requires any email changes to be confirmed (exactly the same way as + # initial account confirmation) to be applied. Requires additional unconfirmed_email + # db field (see migrations). Until confirmed new email is stored in + # unconfirmed email column, and copied to email column on successful confirmation. + config.reconfirmable = true + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [ :email ] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # Options to be passed to the created cookie. For instance, you can set + # :secure => true in order to force SSL only cookies. + # config.rememberable_options = {} + + # ==> Configuration for :validatable + # Range for password length. + config.password_length = 8..128 + + # Email regex used to validate email formats. It simply asserts that + # one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + # config.email_regexp = /\A[^@]+@[^@]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # If true, expires auth token on session timeout. + # config.expire_auth_token_on_timeout = false + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [ :email ] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # Warn on the last attempt before the account is locked. + # config.last_attempt_warning = false + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [ :email ] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 6.hours + + # ==> Configuration for :encryptable + # Allow you to use another encryption algorithm besides bcrypt (default). You can use + # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1, + # :authlogic_sha512 (then you should set stretches above to 20 for default behavior) + # and :restful_authentication_sha1 (then you should set stretches to 10, and copy + # REST_AUTH_SITE_KEY to pepper). + # + # Require the `devise-encryptable` gem when using anything other than bcrypt + # config.encryptor = :sha512 + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. + # config.scoped_views = false + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Set this configuration to false if you want /users/sign_out to sign out + # only the current scope. By default, Devise signs out all scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html, should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The "*/*" below is required to match Internet Explorer requests. + # config.navigational_formats = ['*/*', :html] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :delete + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(:scope => :user).unshift :some_external_strategy + # end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine + # is mountable, there are some extra configurations to be taken into account. + # The following options are available, assuming the engine is mounted as: + # + # mount MyEngine, at: '/my_engine' + # + # The router that invoked `devise_for`, in the example above, would be: + # config.router_name = :my_engine + # + # When using omniauth, Devise cannot automatically set Omniauth path, + # so you need to do it manually. For the users scope, it would be: + # config.omniauth_path_prefix = '/my_engine/users/auth' +end diff --git a/config/initializers/devise_async.rb b/config/initializers/devise_async.rb new file mode 100644 index 000000000..1ae610c44 --- /dev/null +++ b/config/initializers/devise_async.rb @@ -0,0 +1,5 @@ +Devise::Async.setup do |config| + config.enabled = true + config.backend = :sidekiq + config.queue = :devise_mailer +end \ No newline at end of file diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 000000000..4a994e1e7 --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/config/initializers/friendly_id.rb b/config/initializers/friendly_id.rb new file mode 100644 index 000000000..caa04057c --- /dev/null +++ b/config/initializers/friendly_id.rb @@ -0,0 +1,88 @@ +# FriendlyId Global Configuration +# +# Use this to set up shared configuration options for your entire application. +# Any of the configuration options shown here can also be applied to single +# models by passing arguments to the `friendly_id` class method or defining +# methods in your model. +# +# To learn more, check out the guide: +# +# http://norman.github.io/friendly_id/file.Guide.html + +FriendlyId.defaults do |config| + # ## Reserved Words + # + # Some words could conflict with Rails's routes when used as slugs, or are + # undesirable to allow as slugs. Edit this list as needed for your app. + config.use :reserved + + config.reserved_words = %w(new edit index session login logout users + stylesheets assets javascripts images) + + # ## Friendly Finders + # + # Uncomment this to use friendly finders in all models. By default, if + # you wish to find a record by its friendly id, you must do: + # + # MyModel.friendly.find('foo') + # + # If you uncomment this, you can do: + # + # MyModel.find('foo') + # + # This is significantly more convenient but may not be appropriate for + # all applications, so you must explicity opt-in to this behavior. You can + # always also configure it on a per-model basis if you prefer. + # + # Something else to consider is that using the :finders addon boosts + # performance because it will avoid Rails-internal code that makes runtime + # calls to `Module.extend`. + # + # config.use :finders + # + # ## Slugs + # + # Most applications will use the :slugged module everywhere. If you wish + # to do so, uncomment the following line. + # + # config.use :slugged + # + # By default, FriendlyId's :slugged addon expects the slug column to be named + # 'slug', but you can change it if you wish. + # + # config.slug_column = 'slug' + # + # When FriendlyId can not generate a unique ID from your base method, it appends + # a UUID, separated by a single dash. You can configure the character used as the + # separator. If you're upgrading from FriendlyId 4, you may wish to replace this + # with two dashes. + # + # config.sequence_separator = '-' + # + # ## Tips and Tricks + # + # ### Controlling when slugs are generated + # + # As of FriendlyId 5.0, new slugs are generated only when the slug field is + # nil, but if you're using a column as your base method can change this + # behavior by overriding the `should_generate_new_friendly_id` method that + # FriendlyId adds to your model. The change below makes FriendlyId 5.0 behave + # more like 4.0. + # + # config.use Module.new { + # def should_generate_new_friendly_id? + # slug.blank? || _changed? + # end + # } + # + # FriendlyId uses Rails's `parameterize` method to generate slugs, but for + # languages that don't use the Roman alphabet, that's not usually suffient. Here + # we use the Babosa library to transliterate Russian Cyrillic slugs to ASCII. If + # you use this, don't forget to add "babosa" to your Gemfile. + # + # config.use Module.new { + # def normalize_friendly_id(text) + # text.to_slug.normalize! :transliterations => [:russian, :latin] + # end + # } +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 000000000..b2619830f --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,19 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# 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 'API' +end diff --git a/config/initializers/mandrill.rb b/config/initializers/mandrill.rb new file mode 100644 index 000000000..909a0e7ef --- /dev/null +++ b/config/initializers/mandrill.rb @@ -0,0 +1,3 @@ +MandrillDm.configure do |config| + config.api_key = ENV['MANDRILL_APIKEY'] +end \ No newline at end of file diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 000000000..bb3a62d1c --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone + +Mime::Type.register "application/vnd.ms-excel", :xls \ No newline at end of file diff --git a/config/initializers/notify_with.rb b/config/initializers/notify_with.rb new file mode 100644 index 000000000..5fc247965 --- /dev/null +++ b/config/initializers/notify_with.rb @@ -0,0 +1 @@ +NotifyWith.mailer = NotificationsMailer diff --git a/config/initializers/rolify.rb b/config/initializers/rolify.rb new file mode 100644 index 000000000..14460ef6a --- /dev/null +++ b/config/initializers/rolify.rb @@ -0,0 +1,8 @@ +Rolify.configure do |config| + # By default ORM adapter is ActiveRecord. uncomment to use mongoid + # config.use_mongoid + + # Dynamic shortcuts for User class (user.is_admin? like methods). Default is: false + # Enable this feature _after_ running rake db:migrate as it relies on the roles table + # config.use_dynamic_shortcuts +end diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100644 index 000000000..dd777bf91 --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_fabmanager_session' diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb new file mode 100644 index 000000000..07839b93f --- /dev/null +++ b/config/initializers/sidekiq.rb @@ -0,0 +1,22 @@ +# If ENV['REDIS_URL'] = nil, then url = redis://localhost:6379/0 + +if Rails.env.staging? + namespace = "fabmanager_staging" +else + namespace = "fabmanager" +end + +Sidekiq.configure_server do |config| + config.redis = { url: ENV['REDIS_URL'], namespace: namespace } +end + +Sidekiq.configure_client do |config| + config.redis = { url: ENV['REDIS_URL'], namespace: namespace } +end + +# load sidekiq-cron schedule config +schedule_file = "config/schedule.yml" + +if File.exists?(schedule_file) + Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file) +end diff --git a/config/initializers/twitter.rb b/config/initializers/twitter.rb new file mode 100644 index 000000000..6f9a4e93e --- /dev/null +++ b/config/initializers/twitter.rb @@ -0,0 +1,6 @@ +Feed.twitter = Twitter::REST::Client.new do |config| + config.consumer_key = ENV['TWITTER_CONSUMER_KEY'] + config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET'] + config.access_token = ENV['TWITTER_ACCESS_TOKEN'] + config.access_token_secret = ENV['TWITTER_ACCESS_TOKEN_SECRET'] +end diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 000000000..33725e95f --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml new file mode 100644 index 000000000..abccdb087 --- /dev/null +++ b/config/locales/devise.en.yml @@ -0,0 +1,59 @@ +# Additional translations at https://github.com/plataformatec/devise/wiki/I18n + +en: + devise: + confirmations: + confirmed: "Your account was successfully confirmed." + send_instructions: "You will receive an email with instructions about how to confirm your account in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions about how to confirm your account in a few minutes." + failure: + already_authenticated: "You are already signed in." + inactive: "Your account is not activated yet." + invalid: "Invalid email or password." + locked: "Your account is locked." + last_attempt: "You have one more attempt before your account will be locked." + not_found_in_database: "Invalid email or password." + timeout: "Your session expired. Please sign in again to continue." + unauthenticated: "You need to sign in or sign up before continuing." + unconfirmed: "You have to confirm your account before continuing." + mailer: + confirmation_instructions: + subject: "Confirmation instructions" + reset_password_instructions: + subject: "Reset password instructions" + unlock_instructions: + subject: "Unlock Instructions" + omniauth_callbacks: + failure: "Could not authenticate you from %{kind} because \"%{reason}\"." + success: "Successfully authenticated from %{kind} account." + passwords: + no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." + send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." + updated: "Your password was changed successfully. You are now signed in." + updated_not_active: "Your password was changed successfully." + registrations: + destroyed: "Bye! Your account was successfully cancelled. We hope to see you again soon." + signed_up: "Welcome! You have signed up successfully." + signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." + signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." + signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please open the link to activate your account." + update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address." + updated: "You updated your account successfully." + sessions: + signed_in: "Signed in successfully." + signed_out: "Signed out successfully." + unlocks: + send_instructions: "You will receive an email with instructions about how to unlock your account in a few minutes." + send_paranoid_instructions: "If your account exists, you will receive an email with instructions about how to unlock it in a few minutes." + unlocked: "Your account has been unlocked successfully. Please sign in to continue." + errors: + messages: + already_confirmed: "was already confirmed, please try signing in" + confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" + expired: "has expired, please request a new one" + not_found: "not found" + not_locked: "was not locked" + not_saved: + one: "1 error prohibited this %{resource} from being saved:" + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml new file mode 100644 index 000000000..ac9ff4b42 --- /dev/null +++ b/config/locales/devise.fr.yml @@ -0,0 +1,95 @@ +fr: + devise: + confirmations: + confirmed: Votre compte a été confirmé avec succès. Vous êtes désormais connecté(e). + send_instructions: Vous allez recevoir sous quelques minutes un e-mail comportant des instructions pour confirmer votre compte. + send_paranoid_instructions: Si votre e-mail existe sur notre base de données, vous recevrez sous quelques minutes un message avec des instructions pour confirmer votre compte. + new: + resend_confirmation_instructions: Renvoyer les instructions de confirmation + failure: + already_authenticated: Vous êtes déjà connecté(e). + inactive: Votre compte n’est pas encore activé. + invalid: E-mail ou mot de passe incorrect. + invalid_token: Jeton d'authentification incorrect. + locked: Votre compte est verrouillé. + not_found_in_database: E-mail ou mot de passe incorrect. + timeout: Votre session est périmée, veuillez vous reconnecter pour continuer. + unauthenticated: Vous devez vous connecter ou vous enregistrer pour continuer. + unconfirmed: Vous devez confirmer votre compte par e-mail. + mailer: + confirmation_instructions: + action: Confirmer mon e-mail + greeting: Bienvenue %{recipient}! + instruction: ! 'Vous pouvez confirmer votre e-mail grâce au lien ci-dessous:' + subject: Confirmation d'inscription + reset_password_instructions: + action: Changer mon mot de passe + greeting: Bonjour %{recipient}! + instruction: ! 'Quelqu''un a demandé un lien pour changer votre mot de passe, le voici :' + instruction_2: Si vous n’avez pas émis cette demande, merci d’ignore cet e-mail. + instruction_3: Votre mot de passe ne changera pas tant que vous n’aurez pas cliqué sur ce lien et renseigné un nouveau mot de passe. + subject: Instructions pour changer le mot de passe + unlock_instructions: + action: Débloquer mon compte + greeting: Bonjour %{recipient}! + instruction: ! 'Suivez ce lien pour débloquer votre compte:' + message: Votre compte a été bloqué suite à un nombre d’essais de connexions manqués trop important + subject: Instructions pour déverrouiller le compte + omniauth_callbacks: + failure: ! 'Nous ne pouvons pas vous authentifier depuis %{kind} pour la raison suivante : ''%{reason}''.' + success: Autorisé avec succès par votre compte %{kind}. + passwords: + no_token: Vous ne pouvez pas accéder à cette page si vous n’y accédez pas depuis un e-mail de réinitialisation de mot de passe. Si vous venez en effet d’un tel e-mail, vérifiez que vous avez copié l’adresse URL en entier. + send_instructions: Vous allez recevoir sous quelques minutes un e-mail vous indiquant comment réinitialiser votre mot de passe. + send_paranoid_instructions: Si votre e-mail existe dans notre base de données, vous recevrez un lien vous permettant de récupérer votre mot de passe. + updated: Votre mot de passe a été modifié avec succès. Vous êtes maintenant connecté(e). + updated_not_active: Votre mot de passe a été modifié avec succès. + new: + forgot_your_password: Mot de passe oublié ? + send_me_reset_password_instructions: Réinitialiser mon mot de passe + registrations: + destroyed: Au revoir ! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt. + signed_up: Bienvenue ! Vous vous êtes enregistré(e) avec succès. + signed_up_but_inactive: Vous vous êtes enregistré(e) avec succès. Cependant, nous n’avons pas pu vous connecter car votre compte n’a pas encore été activé. + signed_up_but_locked: Vous vous êtes enregistré(e) avec succès. Cependant, nous n’avons pas pu vous connecter car votre compte est verrouillé. + signed_up_but_unconfirmed: Un message avec un lien de confirmation vous a été envoyé par mail. Veuillez suivre ce lien pour activer votre compte. + update_needs_confirmation: Vous avez modifié votre compte avec succès, mais nous devons vérifier votre nouvelle adresse e-mail. Veuillez consulter vos e-mails et cliquer sur le lien de confirmation pour finaliser votre nouvelle adresse. + updated: Votre compte a été modifié avec succès. + edit: + are_you_sure: Êtes-vous sûr ?! + cancel_my_account: Supprimer mon compte + leave_blank_if_you_don_t_want_to_change_it: laissez ce champ vide pour le laisser inchangé + title: Éditer %{resource} + we_need_your_current_password_to_confirm_your_changes: nous avons besoin de votre mot de passe actuel pour valider ces modifications + new: + sign_up: Créer votre compte sereale + sessions: + signed_in: Connecté(e) avec succès. + signed_out: Déconnecté(e) avec succès. + new: + sign_in: Connexion + remember: Se souvenir de moi + unlocks: + send_instructions: Vous allez recevoir un e-mail sous quelques minutes contenant les instructions nécessaires au déblocage de votre compte. + send_paranoid_instructions: Si votre compte existe, vous recevrez un e-mail indiquant comment le déverrouiller sous quelques minutes. + unlocked: Votre compte a été débloqué avec succès. Veuillez vous connecter. + new: + resend_unlock_instructions: Renvoyer les instructions de débloquage + shared: + links: + didn_t_receive_confirmation_instructions: Vous n’avez pas reçu l’e-mail de confirmation ? + didn_t_receive_unlock_instructions: Vous n’avez pas reçu l’e-mail de débloquage ? + forgot_your_password: Mot de passe oublié ? + sign_in: Connexion + sign_in_with_provider: Connexion avec %{provider} + sign_up: Créer un compte + errors: + messages: + already_confirmed: a déjà été confirmé(e) + confirmation_period_expired: doit être confirmé(e) en %{period}, veuillez en demander un(e) autre + expired: est périmé, veuillez en demander un autre + not_found: n’a pas été trouvé(e) + not_locked: n’était pas verrouillé(e) + not_saved: + one: ! 'une erreur a empêché ce (ou cette) %{resource} d’être enregistré(e) :' + other: ! '%{count} erreurs ont empêché ce (ou cette) %{resource} d’être enregistré(e) :' diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 000000000..065395716 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/config/locales/fr.yml b/config/locales/fr.yml new file mode 100644 index 000000000..4fa5901c4 --- /dev/null +++ b/config/locales/fr.yml @@ -0,0 +1,242 @@ +fr: + date: + formats: + default: "%d/%m/%Y" + short_default: "%d/%m/%y" + short: "%e %b" + long: "%e %B %Y" + medium: "%e %b %Y" + day_name: "%A" + simple: "%A %e %B" + + day_names: + - dimanche + - lundi + - mardi + - mercredi + - jeudi + - vendredi + - samedi + abbr_day_names: + - dim + - lun + - mar + - mer + - jeu + - ven + - sam + month_names: + - ~ + - janvier + - février + - mars + - avril + - mai + - juin + - juillet + - août + - septembre + - octobre + - novembre + - décembre + abbr_month_names: + - ~ + - jan + - fév + - mar + - avr + - mai + - juin + - juil + - août + - sept + - oct + - nov + - déc + order: + - :day + - :month + - :year + + time: + formats: + default: "%d %B %Y %H:%M" + short: "%d %b %H:%M" + long: "%A %d %B %Y %H:%M" + hour_minute: "%H:%M" + hour_minute_long: "%Hh%M" + am: 'am' + pm: 'pm' + + datetime: + distance_in_words: + half_a_minute: "une demi-minute" + less_than_x_seconds: + zero: "moins d'une seconde" + one: "moins d'une seconde" + other: "moins de %{count} secondes" + x_seconds: + one: "1 seconde" + other: "%{count} secondes" + less_than_x_minutes: + zero: "moins d'une minute" + one: "moins d'une minute" + other: "moins de %{count} minutes" + x_minutes: + one: "il y a 1 minute" + other: "il y a %{count} minutes" + about_x_hours: + one: "environ une heure" + other: "environ %{count} heures" + x_days: + one: "1 jour" + other: "%{count} jours" + about_x_months: + one: "environ un mois" + other: "environ %{count} mois" + x_months: + one: "1 mois" + other: "%{count} mois" + about_x_years: + one: "environ un an" + other: "environ %{count} ans" + over_x_years: + one: "plus d'un an" + other: "plus de %{count} ans" + almost_x_years: + one: "presqu'un an" + other: "presque %{count} ans" + prompts: + year: "Année" + month: "Mois" + day: "Jour" + hour: "Heure" + minute: "Minute" + second: "Seconde" + + number: + format: + separator: "," + delimiter: " " + precision: 3 + significant: false + strip_insignificant_zeros: false + currency: + format: + format: "%n %u" + unit: "€" + separator: "," + delimiter: " " + precision: 2 + significant: false + strip_insignificant_zeros: false + percentage: + format: + delimiter: "" + precision: + format: + delimiter: "" + human: + format: + delimiter: "" + precision: 2 + significant: true + strip_insignificant_zeros: true + storage_units: + format: "%n %u" + units: + byte: + one: "octet" + other: "octets" + kb: "ko" + mb: "Mo" + gb: "Go" + tb: "To" + decimal_units: + format: "%n %u" + units: + unit: "" + thousand: "millier" + million: "million" + billion: "milliard" + trillion: "billion" + quadrillion: "million de milliards" + + distance: + centi: + one: "centimètre" + other: "centimètres" + unit: + one: "mètre" + other: "mètres" + thousand: + one: "km" + other: "kms" + billion: "gazillion-distance" + + support: + array: + words_connector: ", " + two_words_connector: " et " + last_word_connector: " et " + + + errors: &errors + format: "%{attribute} : %{message}" + messages: &errors_messages + inclusion: "n'est pas inclus(e) dans la liste" + exclusion: "n'est pas disponible" + invalid: "n'est pas valide" + confirmation: "ne concorde pas avec la confirmation" + accepted: "doit être accepté(e)" + empty: "champ obligatoire" + blank: "champ obligatoire" + too_long: + one: "est trop long (pas plus d'un caractère)" + other: "est trop long (pas plus de %{count} caractères)" + too_short: + one: "est trop court (au moins un caractère)" + other: "est trop court (au moins %{count} caractères)" + wrong_length: + one: "ne fait pas la bonne longueur (doit comporter un seul caractère)" + other: "ne fait pas la bonne longueur (doit comporter %{count} caractères)" + not_a_number: "n'est pas un nombre" + not_an_integer: "doit être un nombre entier" + greater_than: "doit être supérieur à %{count}" + greater_than_or_equal_to: "doit être supérieur ou égal à %{count}" + equal_to: "doit être égal à %{count}" + less_than: "doit être inférieur à %{count}" + less_than_or_equal_to: "doit être inférieur ou égal à %{count}" + odd: "doit être impair" + even: "doit être pair" + taken: "n'est pas disponible" + record_invalid: "La validation a échoué : %{errors}" + # ***************** CarrierWave ********************* # + carrierwave_processing_error: failed to be processed + carrierwave_integrity_error: is not of an allowed file type + carrierwave_download_error: could not be downloaded + extension_white_list_error: "You are not allowed to upload %{extension} files, allowed types: %{allowed_types}" + extension_black_list_error: "You are not allowed to upload %{extension} files, prohibited types: %{prohibited_types}" + rmagick_processing_error: "Failed to manipulate with rmagick, maybe it is not an image? Original Error: %{e}" + mime_types_processing_error: "Failed to process file with MIME::Types, maybe not valid content-type? Original Error: %{e}" + mini_magick_processing_error: "Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: %{e}" + wrong_size: "ne fait pas la taille du fichier (doit comporter %{file_size})" + size_too_small: "est trop petit (au moins %{file_size})" + size_too_big: "est trop grand (pas plus de %{file_size})" + + template: &errors_template + header: + one: "Impossible d'enregistrer ce(tte) %{model} : 1 erreur" + other: "Impossible d'enregistrer ce(tte) %{model} : %{count} erreurs" + body: "Veuillez vérifier les champs suivants : " + + activemodel: + errors: + <<: *errors + + notifications_mailer: + send_mail_by: + subject_notify_admin_when_project_published: "Un projet a été publié." + subject_notify_project_collaborator_to_valid: "Invitation à collaborer sur un projet" + subject_notify_project_author_when_collaborator_valid: "Un nouveau collaborateur dans votre projet" + subject_notify_admin_when_user_is_created: "Un compte utilisateur a été créé" diff --git a/config/nginx.conf b/config/nginx.conf new file mode 100644 index 000000000..77ba630b1 --- /dev/null +++ b/config/nginx.conf @@ -0,0 +1,37 @@ +upstream unicorn { + server unix:/tmp/unicorn.fabmanager.sock fail_timeout=0; +} + +server { + listen 80; + server_name fab-manager.com www.fab-manager.com + rewrite ^ https://www.fab-manager.com$request_uri? permanent; +} + +server { + listen 443 ssl; + server_name fab-manager.com www.fab-manager.com; + root /home/admin/apps/fabmanager/current/public; + + ssl on; + ssl_certificate /etc/nginx/ssl/certificate.fab-manager.com.crt; + ssl_certificate_key /etc/nginx/ssl/fab-manager.com.deprotected.key; + + location ^~ /assets/ { + gzip_static on; + expires max; + add_header Cache-Control public; + } + + try_files $uri/index.html $uri @unicorn; + location @unicorn { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_pass http://unicorn; + } + + error_page 500 502 503 504 /500.html; + client_max_body_size 4G; + keepalive_timeout 10; +} diff --git a/config/nginx_staging.conf b/config/nginx_staging.conf new file mode 100644 index 000000000..61301ff7a --- /dev/null +++ b/config/nginx_staging.conf @@ -0,0 +1,27 @@ +upstream unicorn_staging { + server unix:/tmp/unicorn.fabmanager_staging.sock fail_timeout=0; +} + +server { + listen 80; + server_name demo.fab-manager.com; + root /home/admin/apps/fabmanager_staging/current/public; + + location ^~ /assets/ { + gzip_static on; + expires max; + add_header Cache-Control public; + } + + try_files $uri/index.html $uri @unicorn_staging; + location @unicorn_staging { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_pass http://unicorn_staging; + } + + error_page 500 502 503 504 /500.html; + client_max_body_size 4G; + keepalive_timeout 10; +} diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 000000000..665c1662b --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,52 @@ +require 'sidekiq/web' + +Rails.application.routes.draw do + post 'webhooks' => 'webhooks#create' + + devise_for :users, controllers: {registrations: "registrations", sessions: 'sessions', + confirmations: 'confirmations', passwords: 'passwords'} + + ## The priority is based upon order of creation: first created -> highest priority. + ## See how all your routes lay out with "rake routes". + + ## You can have the root of your site routed with "root" + root 'application#index' + + namespace :api, as: nil, defaults: { format: :json } do + resources :projects, only: [:index, :last_published, :show, :create, :update, :destroy] do + collection do + get :last_published + end + end + resources :machines + resources :components + resources :themes + resources :licences + resources :members, only: [:index, :show, :create, :update] do + get '/export_members', action: 'export_members', on: :collection + end + resources :notifications, only: [:index, :show, :update] do + match :update_all, path: '/', via: [:put, :patch], on: :collection + end + + # for homepage + get '/last_subscribed/:last' => "members#last_subscribed" + get '/feeds/twitter_timelines' => "feeds#twitter_timelines" + + get 'groups' => "groups#index" + + resources :events do + get 'upcoming/:limit', action: 'upcoming', on: :collection + end + + # for admin + resources :categories, only: [:index] + end + + match '/project_collaborator/:valid_token', to: 'api/projects#collaborator_valid', via: :get + + authenticate :user, lambda { |u| u.has_role? :admin } do + mount Sidekiq::Web => '/admin/sidekiq' + end + +end diff --git a/config/secrets.yml b/config/secrets.yml new file mode 100644 index 000000000..306fc3836 --- /dev/null +++ b/config/secrets.yml @@ -0,0 +1,29 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 002f8bf3338bc1a4e7b8086186c7d9b34524ccfd6076a792d41057bd7448092c837a32373ac8953403fa2e302350ac10520508094c5d12b994e554708d780503 + disqus_shortname: fablab-sleede + +test: + secret_key_base: fd566823b0f46e4d02b0a6ccd4f52dcbbe426c80cef5f85d8b2e942fddad718753fc025556cac694d15cff0010fb582c92df3283e2edb9e6d9ccf63db0ace744 + disqus_shortname: fabmanager-test + +staging: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> + disqus_shortname: fabmanager-staging + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> + disqus_shortname: fabmanager-prod diff --git a/config/sidekiq.yml b/config/sidekiq.yml new file mode 100644 index 000000000..16783e4a3 --- /dev/null +++ b/config/sidekiq.yml @@ -0,0 +1,8 @@ +# configuration file for Sidekiq +:verbose: false +:pidfile: ./tmp/pids/sidekiq.pid +:concurrency: 25 +:queues: + - [default, 5] + - [devise_mailer, 3] + - [mailers, 3] diff --git a/config/unicorn.rb b/config/unicorn.rb new file mode 100644 index 000000000..9e734f1df --- /dev/null +++ b/config/unicorn.rb @@ -0,0 +1,18 @@ +# config/unicorn.rb + +root = "/home/sleede/apps/fabmanager/current" +working_directory root +pid "#{root}/tmp/pids/unicorn.pid" +stderr_path "#{root}/log/unicorn.log" +stdout_path "#{root}/log/unicorn.log" + +listen "/tmp/unicorn.fabmanager.sock" +worker_processes 1 +timeout 60 +preload_app true + +# Force the bundler gemfile environment variable to +# reference the capistrano "current" symlink +before_exec do |_| + ENV["BUNDLE_GEMFILE"] = File.join(root, 'Gemfile') +end \ No newline at end of file diff --git a/config/unicorn_init.sh b/config/unicorn_init.sh new file mode 100755 index 000000000..3c68303a3 --- /dev/null +++ b/config/unicorn_init.sh @@ -0,0 +1,84 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: unicorn +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Manage unicorn server +# Description: Start, stop, restart unicorn server for a specific application. +### END INIT INFO +set -e + +# Feel free to change any of the following variables for your app: +TIMEOUT=${TIMEOUT-60} +APP_ROOT=/home/admin/apps/fabmanager/current +PID=$APP_ROOT/tmp/pids/unicorn.pid +CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" +AS_USER=sleede +set -u + +OLD_PIN="$PID.oldbin" + +sig () { + test -s "$PID" && kill -$1 `cat $PID` +} + +oldsig () { + test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` +} + +run () { + if [ "$(id -un)" = "$AS_USER" ]; then + eval $1 + else + su -c "$1" - $AS_USER + fi +} + +case "$1" in +start) + sig 0 && echo >&2 "Already running" && exit 0 + run "$CMD" + ;; +stop) + sig QUIT && exit 0 + echo >&2 "Not running" + ;; +force-stop) + sig TERM && exit 0 + echo >&2 "Not running" + ;; +restart|reload) + sig HUP && echo reloaded OK && exit 0 + echo >&2 "Couldn't reload, starting '$CMD' instead" + run "$CMD" + ;; +upgrade) + if sig USR2 && sleep 2 && sig 0 && oldsig QUIT + then + n=$TIMEOUT + while test -s $OLD_PIN && test $n -ge 0 + do + printf '.' && sleep 1 && n=$(( $n - 1 )) + done + echo + + if test $n -lt 0 && test -s $OLD_PIN + then + echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" + exit 1 + fi + exit 0 + fi + echo >&2 "Couldn't upgrade, starting '$CMD' instead" + run "$CMD" + ;; +reopen-logs) + sig USR1 + ;; +*) + echo >&2 "Usage: $0 " + exit 1 + ;; +esac \ No newline at end of file diff --git a/config/unicorn_init_staging.sh b/config/unicorn_init_staging.sh new file mode 100755 index 000000000..cd127fff3 --- /dev/null +++ b/config/unicorn_init_staging.sh @@ -0,0 +1,84 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: unicorn +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Manage unicorn server +# Description: Start, stop, restart unicorn server for a specific application. +### END INIT INFO +set -e + +# Feel free to change any of the following variables for your app: +TIMEOUT=${TIMEOUT-60} +APP_ROOT=/home/admin/apps/fabmanager_staging/current +PID=$APP_ROOT/tmp/pids/unicorn.pid +CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn_staging.rb -E staging" +AS_USER=admin +set -u + +OLD_PIN="$PID.oldbin" + +sig () { + test -s "$PID" && kill -$1 `cat $PID` +} + +oldsig () { + test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` +} + +run () { + if [ "$(id -un)" = "$AS_USER" ]; then + eval $1 + else + su -c "$1" - $AS_USER + fi +} + +case "$1" in +start) + sig 0 && echo >&2 "Already running" && exit 0 + run "$CMD" + ;; +stop) + sig QUIT && exit 0 + echo >&2 "Not running" + ;; +force-stop) + sig TERM && exit 0 + echo >&2 "Not running" + ;; +restart|reload) + sig HUP && echo reloaded OK && exit 0 + echo >&2 "Couldn't reload, starting '$CMD' instead" + run "$CMD" + ;; +upgrade) + if sig USR2 && sleep 2 && sig 0 && oldsig QUIT + then + n=$TIMEOUT + while test -s $OLD_PIN && test $n -ge 0 + do + printf '.' && sleep 1 && n=$(( $n - 1 )) + done + echo + + if test $n -lt 0 && test -s $OLD_PIN + then + echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" + exit 1 + fi + exit 0 + fi + echo >&2 "Couldn't upgrade, starting '$CMD' instead" + run "$CMD" + ;; +reopen-logs) + sig USR1 + ;; +*) + echo >&2 "Usage: $0 " + exit 1 + ;; +esac diff --git a/config/unicorn_staging.rb b/config/unicorn_staging.rb new file mode 100644 index 000000000..2a550a7b5 --- /dev/null +++ b/config/unicorn_staging.rb @@ -0,0 +1,18 @@ +# config/unicorn_staging.rb + +root = "/home/admin/apps/fabmanager_staging/current" +working_directory root +pid "#{root}/tmp/pids/unicorn.pid" +stderr_path "#{root}/log/unicorn.log" +stdout_path "#{root}/log/unicorn.log" + +listen "/tmp/unicorn.fabmanager_staging.sock" +worker_processes 1 +timeout 60 +preload_app true + +# Force the bundler gemfile environment variable to +# reference the capistrano "current" symlink +before_exec do |_| + ENV["BUNDLE_GEMFILE"] = File.join(root, 'Gemfile') +end diff --git a/db/migrate/20150429084753_devise_create_users.rb b/db/migrate/20150429084753_devise_create_users.rb new file mode 100644 index 000000000..ebdb39e08 --- /dev/null +++ b/db/migrate/20150429084753_devise_create_users.rb @@ -0,0 +1,48 @@ +class DeviseCreateUsers < ActiveRecord::Migration + def change + create_table(:users) do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + t.integer :sign_in_count, default: 0, null: false + t.datetime :current_sign_in_at + t.datetime :last_sign_in_at + t.inet :current_sign_in_ip + t.inet :last_sign_in_ip + + ## Confirmable + t.string :confirmation_token + t.datetime :confirmed_at + t.datetime :confirmation_sent_at + t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + t.string :unlock_token # Only if unlock strategy is :email or :both + t.datetime :locked_at + + ## FabManager properties + t.boolean :is_allow_contact, default: true + t.string :username + t.string :slug + + t.timestamps + end + + add_index :users, :email, unique: true + add_index :users, :reset_password_token, unique: true + add_index :users, :confirmation_token, unique: true + add_index :users, :unlock_token, unique: true + add_index :users, :username, unique: true + add_index :users, :slug, unique: true + end +end diff --git a/db/migrate/20150429085252_rolify_create_roles.rb b/db/migrate/20150429085252_rolify_create_roles.rb new file mode 100644 index 000000000..999c94a3e --- /dev/null +++ b/db/migrate/20150429085252_rolify_create_roles.rb @@ -0,0 +1,19 @@ +class RolifyCreateRoles < ActiveRecord::Migration + def change + create_table(:roles) do |t| + t.string :name + t.references :resource, :polymorphic => true + + t.timestamps + end + + create_table(:users_roles, :id => false) do |t| + t.references :user + t.references :role + end + + add_index(:roles, :name) + add_index(:roles, [ :name, :resource_type, :resource_id ]) + add_index(:users_roles, [ :user_id, :role_id ]) + end +end diff --git a/db/migrate/20150429085948_create_profiles.rb b/db/migrate/20150429085948_create_profiles.rb new file mode 100644 index 000000000..8f556dcb7 --- /dev/null +++ b/db/migrate/20150429085948_create_profiles.rb @@ -0,0 +1,16 @@ +class CreateProfiles < ActiveRecord::Migration + def change + create_table :profiles do |t| + t.belongs_to :user, index: true, foreign_key: true + t.string :first_name + t.string :last_name + t.boolean :gender + t.date :birthday + t.string :phone + t.text :interest + t.text :software_mastered + + t.timestamps + end + end +end diff --git a/db/migrate/20150429090704_create_projects.rb b/db/migrate/20150429090704_create_projects.rb new file mode 100644 index 000000000..813193d6b --- /dev/null +++ b/db/migrate/20150429090704_create_projects.rb @@ -0,0 +1,16 @@ +class CreateProjects < ActiveRecord::Migration + def change + create_table :projects do |t| + t.string :name + t.text :description + t.string :slug + t.datetime :published_at + t.integer :author_id + t.text :tags + t.string :state + + t.timestamps + end + add_index :projects, :slug, unique: true + end +end diff --git a/db/migrate/20150429091737_create_machines.rb b/db/migrate/20150429091737_create_machines.rb new file mode 100644 index 000000000..3bb91a6d1 --- /dev/null +++ b/db/migrate/20150429091737_create_machines.rb @@ -0,0 +1,13 @@ +class CreateMachines < ActiveRecord::Migration + def change + create_table :machines do |t| + t.string :name + t.text :description + t.text :spec + t.string :slug + + t.timestamps + end + add_index :machines, :slug, unique: true + end +end diff --git a/db/migrate/20150429092109_create_assets.rb b/db/migrate/20150429092109_create_assets.rb new file mode 100644 index 000000000..d309f942e --- /dev/null +++ b/db/migrate/20150429092109_create_assets.rb @@ -0,0 +1,11 @@ +class CreateAssets < ActiveRecord::Migration + def change + create_table :assets do |t| + t.references :viewable, polymorphic: true + t.string :attachment + t.string :type + + t.timestamps + end + end +end diff --git a/db/migrate/20150429092624_create_projects_machines.rb b/db/migrate/20150429092624_create_projects_machines.rb new file mode 100644 index 000000000..ef060a051 --- /dev/null +++ b/db/migrate/20150429092624_create_projects_machines.rb @@ -0,0 +1,8 @@ +class CreateProjectsMachines < ActiveRecord::Migration + def change + create_table :projects_machines do |t| + t.belongs_to :project, index: true, foreign_key: true + t.belongs_to :machine, index: true, foreign_key: true + end + end +end diff --git a/db/migrate/20150429092847_create_project_users.rb b/db/migrate/20150429092847_create_project_users.rb new file mode 100644 index 000000000..65ec1b0b9 --- /dev/null +++ b/db/migrate/20150429092847_create_project_users.rb @@ -0,0 +1,12 @@ +class CreateProjectUsers < ActiveRecord::Migration + def change + create_table :project_users do |t| + t.belongs_to :project, index: true, foreign_key: true + t.belongs_to :user, index: true, foreign_key: true + t.boolean :is_valid, default: false + t.string :valid_token + + t.timestamps + end + end +end diff --git a/db/migrate/20150429093251_create_project_steps.rb b/db/migrate/20150429093251_create_project_steps.rb new file mode 100644 index 000000000..f43b8a80e --- /dev/null +++ b/db/migrate/20150429093251_create_project_steps.rb @@ -0,0 +1,11 @@ +class CreateProjectSteps < ActiveRecord::Migration + def change + create_table :project_steps do |t| + t.text :description + t.string :title + t.belongs_to :project, index: true, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20150429093734_create_availabilities.rb b/db/migrate/20150429093734_create_availabilities.rb new file mode 100644 index 000000000..967c8e525 --- /dev/null +++ b/db/migrate/20150429093734_create_availabilities.rb @@ -0,0 +1,12 @@ +class CreateAvailabilities < ActiveRecord::Migration + def change + create_table :availabilities do |t| + t.datetime :start_at + t.datetime :end_at + t.string :available_type + t.integer :nb_total_places + + t.timestamps + end + end +end diff --git a/db/migrate/20150429094525_create_addresses.rb b/db/migrate/20150429094525_create_addresses.rb new file mode 100644 index 000000000..0c778da97 --- /dev/null +++ b/db/migrate/20150429094525_create_addresses.rb @@ -0,0 +1,15 @@ +class CreateAddresses < ActiveRecord::Migration + def change + create_table :addresses do |t| + t.string :address + t.string :street_number + t.string :route + t.string :locality + t.string :country + t.string :postal_code + t.references :placeable, polymorphic: true + + t.timestamps + end + end +end diff --git a/db/migrate/20150429095139_create_components.rb b/db/migrate/20150429095139_create_components.rb new file mode 100644 index 000000000..66f3b6283 --- /dev/null +++ b/db/migrate/20150429095139_create_components.rb @@ -0,0 +1,7 @@ +class CreateComponents < ActiveRecord::Migration + def change + create_table :components do |t| + t.string :name, null: false + end + end +end diff --git a/db/migrate/20150429095313_create_themes.rb b/db/migrate/20150429095313_create_themes.rb new file mode 100644 index 000000000..124ec88a3 --- /dev/null +++ b/db/migrate/20150429095313_create_themes.rb @@ -0,0 +1,7 @@ +class CreateThemes < ActiveRecord::Migration + def change + create_table :themes do |t| + t.string :name, null: false + end + end +end diff --git a/db/migrate/20150429095339_create_licences.rb b/db/migrate/20150429095339_create_licences.rb new file mode 100644 index 000000000..a1f46e9e6 --- /dev/null +++ b/db/migrate/20150429095339_create_licences.rb @@ -0,0 +1,8 @@ +class CreateLicences < ActiveRecord::Migration + def change + create_table :licences do |t| + t.string :name, null: false + t.text :description + end + end +end diff --git a/db/migrate/20150429095632_create_projects_components.rb b/db/migrate/20150429095632_create_projects_components.rb new file mode 100644 index 000000000..365f7238d --- /dev/null +++ b/db/migrate/20150429095632_create_projects_components.rb @@ -0,0 +1,8 @@ +class CreateProjectsComponents < ActiveRecord::Migration + def change + create_table :projects_components do |t| + t.belongs_to :project, index: true, foreign_key: true + t.belongs_to :component, index: true, foreign_key: true + end + end +end diff --git a/db/migrate/20150429100014_create_projects_themes.rb b/db/migrate/20150429100014_create_projects_themes.rb new file mode 100644 index 000000000..5ddd36b98 --- /dev/null +++ b/db/migrate/20150429100014_create_projects_themes.rb @@ -0,0 +1,8 @@ +class CreateProjectsThemes < ActiveRecord::Migration + def change + create_table :projects_themes do |t| + t.belongs_to :project, index: true, foreign_key: true + t.belongs_to :theme, index: true, foreign_key: true + end + end +end diff --git a/db/migrate/20150429100123_add_licence_id_to_projects.rb b/db/migrate/20150429100123_add_licence_id_to_projects.rb new file mode 100644 index 000000000..204f8f47f --- /dev/null +++ b/db/migrate/20150429100123_add_licence_id_to_projects.rb @@ -0,0 +1,5 @@ +class AddLicenceIdToProjects < ActiveRecord::Migration + def change + add_column :projects, :licence_id, :integer + end +end diff --git a/db/migrate/20150429100442_create_notifications.rb b/db/migrate/20150429100442_create_notifications.rb new file mode 100644 index 000000000..8058508c2 --- /dev/null +++ b/db/migrate/20150429100442_create_notifications.rb @@ -0,0 +1,16 @@ +class CreateNotifications < ActiveRecord::Migration + def change + create_table :notifications do |t| + t.integer :receiver_id + t.references :attached_object, polymorphic: true + t.integer :notification_type_id + t.boolean :is_read, default: false + t.string :receiver_type + t.boolean :is_send, default: false + + t.timestamps + end + add_index :notifications, :receiver_id + add_index :notifications, :notification_type_id + end +end diff --git a/db/migrate/20150429100750_create_groups.rb b/db/migrate/20150429100750_create_groups.rb new file mode 100644 index 000000000..998730163 --- /dev/null +++ b/db/migrate/20150429100750_create_groups.rb @@ -0,0 +1,9 @@ +class CreateGroups < ActiveRecord::Migration + def change + create_table :groups do |t| + t.string :name + + t.timestamps + end + end +end diff --git a/db/migrate/20150429100906_add_group_to_users.rb b/db/migrate/20150429100906_add_group_to_users.rb new file mode 100644 index 000000000..1168f16a1 --- /dev/null +++ b/db/migrate/20150429100906_add_group_to_users.rb @@ -0,0 +1,5 @@ +class AddGroupToUsers < ActiveRecord::Migration + def change + add_reference :users, :group, index: true + end +end diff --git a/db/migrate/20150429101220_create_friendly_id_slugs.rb b/db/migrate/20150429101220_create_friendly_id_slugs.rb new file mode 100644 index 000000000..770f62644 --- /dev/null +++ b/db/migrate/20150429101220_create_friendly_id_slugs.rb @@ -0,0 +1,15 @@ +class CreateFriendlyIdSlugs < ActiveRecord::Migration + def change + create_table :friendly_id_slugs do |t| + t.string :slug, :null => false + t.integer :sluggable_id, :null => false + t.string :sluggable_type, :limit => 50 + t.string :scope + t.datetime :created_at + end + add_index :friendly_id_slugs, :sluggable_id + add_index :friendly_id_slugs, [:slug, :sluggable_type] + add_index :friendly_id_slugs, [:slug, :sluggable_type, :scope], :unique => true + add_index :friendly_id_slugs, :sluggable_type + end +end diff --git a/db/migrate/20150429102505_create_events.rb b/db/migrate/20150429102505_create_events.rb new file mode 100644 index 000000000..58f790774 --- /dev/null +++ b/db/migrate/20150429102505_create_events.rb @@ -0,0 +1,17 @@ +class CreateEvents < ActiveRecord::Migration + def change + create_table :events do |t| + t.string :title + t.text :description + t.integer :availability_id + t.integer :amount + t.integer :reduced_amount + t.integer :nb_total_places + t.integer :recurrence_id + + t.timestamps + end + add_index :events, :availability_id + add_index :events, :recurrence_id + end +end diff --git a/db/migrate/20150429102704_create_categories.rb b/db/migrate/20150429102704_create_categories.rb new file mode 100644 index 000000000..976068402 --- /dev/null +++ b/db/migrate/20150429102704_create_categories.rb @@ -0,0 +1,9 @@ +class CreateCategories < ActiveRecord::Migration + def change + create_table :categories do |t| + t.string :name + + t.timestamps + end + end +end diff --git a/db/migrate/20150429102754_create_events_categories.rb b/db/migrate/20150429102754_create_events_categories.rb new file mode 100644 index 000000000..755e9b315 --- /dev/null +++ b/db/migrate/20150429102754_create_events_categories.rb @@ -0,0 +1,10 @@ +class CreateEventsCategories < ActiveRecord::Migration + def change + create_table :events_categories do |t| + t.belongs_to :event, index: true, foreign_key: true + t.belongs_to :category, index: true, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 000000000..74f13bbe3 --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,279 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20150429102754) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "addresses", force: :cascade do |t| + t.string "address" + t.string "street_number" + t.string "route" + t.string "locality" + t.string "country" + t.string "postal_code" + t.integer "placeable_id" + t.string "placeable_type" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "assets", force: :cascade do |t| + t.integer "viewable_id" + t.string "viewable_type" + t.string "attachment" + t.string "type" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "availabilities", force: :cascade do |t| + t.datetime "start_at" + t.datetime "end_at" + t.string "available_type" + t.integer "nb_total_places" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "categories", force: :cascade do |t| + t.string "name" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "components", force: :cascade do |t| + t.string "name", null: false + end + + create_table "events", force: :cascade do |t| + t.string "title" + t.text "description" + t.integer "availability_id" + t.integer "amount" + t.integer "reduced_amount" + t.integer "nb_total_places" + t.integer "recurrence_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "events", ["availability_id"], name: "index_events_on_availability_id", using: :btree + add_index "events", ["recurrence_id"], name: "index_events_on_recurrence_id", using: :btree + + create_table "events_categories", force: :cascade do |t| + t.integer "event_id" + t.integer "category_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "events_categories", ["category_id"], name: "index_events_categories_on_category_id", using: :btree + add_index "events_categories", ["event_id"], name: "index_events_categories_on_event_id", using: :btree + + create_table "friendly_id_slugs", force: :cascade do |t| + t.string "slug", null: false + t.integer "sluggable_id", null: false + t.string "sluggable_type", limit: 50 + t.string "scope" + t.datetime "created_at" + end + + add_index "friendly_id_slugs", ["slug", "sluggable_type", "scope"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type_and_scope", unique: true, using: :btree + add_index "friendly_id_slugs", ["slug", "sluggable_type"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type", using: :btree + add_index "friendly_id_slugs", ["sluggable_id"], name: "index_friendly_id_slugs_on_sluggable_id", using: :btree + add_index "friendly_id_slugs", ["sluggable_type"], name: "index_friendly_id_slugs_on_sluggable_type", using: :btree + + create_table "groups", force: :cascade do |t| + t.string "name" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "licences", force: :cascade do |t| + t.string "name", null: false + t.text "description" + end + + create_table "machines", force: :cascade do |t| + t.string "name" + t.text "description" + t.text "spec" + t.string "slug" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "machines", ["slug"], name: "index_machines_on_slug", unique: true, using: :btree + + create_table "notifications", force: :cascade do |t| + t.integer "receiver_id" + t.integer "attached_object_id" + t.string "attached_object_type" + t.integer "notification_type_id" + t.boolean "is_read", default: false + t.string "receiver_type" + t.boolean "is_send", default: false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "notifications", ["notification_type_id"], name: "index_notifications_on_notification_type_id", using: :btree + add_index "notifications", ["receiver_id"], name: "index_notifications_on_receiver_id", using: :btree + + create_table "profiles", force: :cascade do |t| + t.integer "user_id" + t.string "first_name" + t.string "last_name" + t.boolean "gender" + t.date "birthday" + t.string "phone" + t.text "interest" + t.text "software_mastered" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "profiles", ["user_id"], name: "index_profiles_on_user_id", using: :btree + + create_table "project_steps", force: :cascade do |t| + t.text "description" + t.string "title" + t.integer "project_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "project_steps", ["project_id"], name: "index_project_steps_on_project_id", using: :btree + + create_table "project_users", force: :cascade do |t| + t.integer "project_id" + t.integer "user_id" + t.boolean "is_valid", default: false + t.string "valid_token" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "project_users", ["project_id"], name: "index_project_users_on_project_id", using: :btree + add_index "project_users", ["user_id"], name: "index_project_users_on_user_id", using: :btree + + create_table "projects", force: :cascade do |t| + t.string "name" + t.text "description" + t.string "slug" + t.datetime "published_at" + t.integer "author_id" + t.text "tags" + t.string "state" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "licence_id" + end + + add_index "projects", ["slug"], name: "index_projects_on_slug", unique: true, using: :btree + + create_table "projects_components", force: :cascade do |t| + t.integer "project_id" + t.integer "component_id" + end + + add_index "projects_components", ["component_id"], name: "index_projects_components_on_component_id", using: :btree + add_index "projects_components", ["project_id"], name: "index_projects_components_on_project_id", using: :btree + + create_table "projects_machines", force: :cascade do |t| + t.integer "project_id" + t.integer "machine_id" + end + + add_index "projects_machines", ["machine_id"], name: "index_projects_machines_on_machine_id", using: :btree + add_index "projects_machines", ["project_id"], name: "index_projects_machines_on_project_id", using: :btree + + create_table "projects_themes", force: :cascade do |t| + t.integer "project_id" + t.integer "theme_id" + end + + add_index "projects_themes", ["project_id"], name: "index_projects_themes_on_project_id", using: :btree + add_index "projects_themes", ["theme_id"], name: "index_projects_themes_on_theme_id", using: :btree + + create_table "roles", force: :cascade do |t| + t.string "name" + t.integer "resource_id" + t.string "resource_type" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "roles", ["name", "resource_type", "resource_id"], name: "index_roles_on_name_and_resource_type_and_resource_id", using: :btree + add_index "roles", ["name"], name: "index_roles_on_name", using: :btree + + create_table "themes", force: :cascade do |t| + t.string "name", null: false + end + + create_table "users", force: :cascade do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", default: 0, null: false + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.inet "current_sign_in_ip" + t.inet "last_sign_in_ip" + t.string "confirmation_token" + t.datetime "confirmed_at" + t.datetime "confirmation_sent_at" + t.string "unconfirmed_email" + t.integer "failed_attempts", default: 0, null: false + t.string "unlock_token" + t.datetime "locked_at" + t.boolean "is_allow_contact", default: true + t.string "username" + t.string "slug" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "group_id" + end + + add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree + add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree + add_index "users", ["group_id"], name: "index_users_on_group_id", using: :btree + add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree + add_index "users", ["slug"], name: "index_users_on_slug", unique: true, using: :btree + add_index "users", ["unlock_token"], name: "index_users_on_unlock_token", unique: true, using: :btree + add_index "users", ["username"], name: "index_users_on_username", unique: true, using: :btree + + create_table "users_roles", id: false, force: :cascade do |t| + t.integer "user_id" + t.integer "role_id" + end + + add_index "users_roles", ["user_id", "role_id"], name: "index_users_roles_on_user_id_and_role_id", using: :btree + + add_foreign_key "events_categories", "categories" + add_foreign_key "events_categories", "events" + add_foreign_key "profiles", "users" + add_foreign_key "project_steps", "projects" + add_foreign_key "project_users", "projects" + add_foreign_key "project_users", "users" + add_foreign_key "projects_components", "components" + add_foreign_key "projects_components", "projects" + add_foreign_key "projects_machines", "machines" + add_foreign_key "projects_machines", "projects" + add_foreign_key "projects_themes", "projects" + add_foreign_key "projects_themes", "themes" +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 000000000..0dc75ab81 --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,76 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Encoding: UTF-8 + +if Group.count == 0 + Group.create!([ + {name: "standard, association"}, + {name: "étudiant, - de 25 ans, enseignant, demandeur d'emploi"}, + {name: "artisan, commerçant, chercheur, auto-entrepreneur"}, + {name: "PME, PMI, SARL, SA"} + ]) +end + +if User.find_by(email: "admin@fabmanager.com").nil? + admin = User.new(username: 'admin', email: 'admin@fabmanager.com', password: 'adminadmin', password_confirmation: 'adminadmin', group_id: Group.first.id, + profile_attributes: {first_name: 'Admin', last_name: 'Admin', gender: true, phone: '0000000000', birthday: Time.now}) + #admin.skip_confirmation! + admin.add_role "admin" + admin.save +end + +if Component.count == 0 + Component.create!([ + {name: "Silicone"}, + {name: "Vinyle"}, + {name: "Bois Contre plaqué"}, + {name: "Bois Medium"}, + {name: "Plexi / PMMA"}, + {name: "Flex"}, + {name: "Vinyle"}, + {name: "Parafine"}, + {name: "Fibre de verre"}, + {name: "Résine"} + ]) +end + +if Licence.count == 0 + Licence.create!([ + {name: "Attribution (BY)", description: "Le titulaire des droits autorise toute exploitation de l’œuvre, y compris à des fins commerciales, ainsi que la création d’œuvres dérivées, dont la distribution est également autorisé sans restriction, à condition de l’attribuer à son l’auteur en citant son nom. Cette licence est recommandée pour la diffusion et l’utilisation maximale des œuvres."}, + {name: "Attribution + Pas de modification (BY ND)", description: "Le titulaire des droits autorise toute utilisation de l’œuvre originale (y compris à des fins commerciales), mais n’autorise pas la création d’œuvres dérivées."}, + {name: "Attribution + Pas d'Utilisation Commerciale + Pas de Modification (BY NC ND)", description: "Le titulaire des droits autorise l’utilisation de l’œuvre originale à des fins non commerciales, mais n’autorise pas la création d’œuvres dérivés."}, + {name: "Attribution + Pas d'Utilisation Commerciale (BY NC)", description: "Le titulaire des droits autorise l’exploitation de l’œuvre, ainsi que la création d’œuvres dérivées, à condition qu’il ne s’agisse pas d’une utilisation commerciale (les utilisations commerciales restant soumises à son autorisation)."}, + {name: "Attribution + Pas d'Utilisation Commerciale + Partage dans les mêmes conditions (BY NC SA)", description: "Le titulaire des droits autorise l’exploitation de l’œuvre originale à des fins non commerciales, ainsi que la création d’œuvres dérivées, à condition qu’elles soient distribuées sous une licence identique à celle qui régit l’œuvre originale."}, + {name: "Attribution + Partage dans les mêmes conditions (BY SA)", description: "Le titulaire des droits autorise toute utilisation de l’œuvre originale (y compris à des fins commerciales) ainsi que la création d’œuvres dérivées, à condition qu’elles soient distribuées sous une licence identique à celle qui régit l’œuvre originale. Cette licence est souvent comparée aux licences « copyleft » des logiciels libres. C’est la licence utilisée par Wikipedia."} + ]) +end + +if Theme.count == 0 + Theme.create!([ + {name: "Vie quotidienne"}, + {name: "Robotique"}, + {name: "Arduine"}, + {name: "Capteurs"}, + {name: "Musique"}, + {name: "Sport"}, + {name: "Autre"} + ]) +end + +if Machine.count == 0 + Machine.create!([ + {name: "Découpeuse laser", description: "Préparation à l'utilisation de l'EPILOG Legend 36EXT\r\nInformations générales \r\n Pour la découpe, il suffit d'apporter votre fichier vectorisé type illustrator, svg ou dxf avec des \"lignes de coupe\" d'une épaisseur inférieur à 0,01 mm et la machine s'occupera du reste!\r\n La gravure est basée sur le spectre noir et blanc. Les nuances sont obtenues par différentes profondeurs de gravure correspondant aux niveaux de gris de votre image. Il suffit pour cela d'apporter une image scannée ou un fichier photo en noir et blanc pour pouvoir reproduire celle-ci sur votre support! \r\nQuels types de matériaux pouvons nous graver/découper?\r\n Du bois au tissu, du plexiglass au cuir, cette machine permet de découper et graver la plupart des matériaux sauf les métaux. La gravure est néanmoins possible sur les métaux recouverts d'une couche de peinture ou les aluminiums anodisés. \r\n Concernant l'épaisseur des matériaux découpés, il est préférable de ne pas dépasser 5 mm pour le bois et 6 mm pour le plexiglass.\r\n", spec: "Puissance: 40W\r\nSurface de travail: 914x609 mm \r\nEpaisseur maximale de la matière: 305mm\r\nSource laser: tube laser type CO2\r\nContrôles de vitesse et de puissance: ces deux paramètres sont ajustables en fonction du matériau (de 1% à 100%) .\r\n", slug: "decoupeuse-laser"}, + {name: "Découpeuse vinyle", description: "Préparation à l'utilisation de la Roland CAMM-1 GX24\r\nInformations générales \r\n Envie de réaliser un tee shirt personnalisé ? Un sticker à l'effigie votre groupe préféré? Un masque pour la réalisation d'un circuit imprimé? Pour cela, il suffit simplement de venir avec votre fichier vectorisé (ne pas oublier de vectoriser les textes) type illustrator svg ou dxf.\r\n \r\nMatériaux utilisés:\r\n Cette machine permet de découper principalement du vinyle,vinyle réfléchissant, flex.\r\n", spec: "Largeurs de support acceptées: de 50 mm à 700 mm\r\nVitesse de découpe: 50 cm/sec\r\nRésolution mécanique: 0,0125 mm/pas\r\n", slug: "decoupeuse-vinyle"}, + {name: "Shopbot / Grande fraiseuse", description: "La fraiseuse numérique ShopBot PRS standard\r\nInformations générales\r\nCette machine est un fraiseuse 3 axes idéale pour l'usinage de pièces de grandes dimensions. De la réalisation d'une chaise ou d'un meuble jusqu'à la construction d'une maison ou d'un assemblage immense, le ShopBot ouvre de nombreuses portes à votre imagination! \r\nMatériaux usinables\r\nLes principaux matériaux usinables sont le bois, le plastique, le laiton et bien d'autres.\r\nCette machine n'usine pas les métaux.\r\n", spec: "Surface maximale de travail: 2440x1220x150 (Z) mm\r\nLogiciel utilisé: Partworks 2D & 3D\r\nRésolution mécanique: 0,015 mm\r\nPrécision de la position: +/- 0,127mm\r\nFormats acceptés: DXF, STL \r\n", slug: "shopbot-grande-fraiseuse"}, + {name: "Imprimante 3D", description: "L'utimaker est une imprimante 3D low cost utilisant une technologie FFF (Fused Filament Fabrication) avec extrusion thermoplastique.\r\nC'est une machine idéale pour réaliser rapidement des prototypes 3D dans des couleurs différentes.\r\n", spec: "Surface maximale de travail: 210x210x220mm \r\nRésolution méchanique: 0,02 mm \r\nPrécision de position: +/- 0,05 \r\nLogiciel utilisé: Cura\r\nFormats de fichier acceptés: STL \r\nMatériaux utilisés: PLA (en stock).", slug: "imprimante-3d"}, + {name: "Petite Fraiseuse", description: "La fraiseuse numérique Roland Modela MDX-20\r\nInformations générales\r\nCette machine est utilisée pour l'usinage et le scannage 3D de précision. Elle permet principalement d'usiner des circuits imprimés et des moules de petite taille. Le faible diamètre des fraises utilisées (Ø 0,3 mm à Ø 6mm) induit que certains temps d'usinages peuvent êtres long (> 12h), c'est pourquoi cette fraiseuse peut être laissée en autonomie toute une nuit afin d'obtenir le plus précis des usinages au FabLab.\r\nMatériaux usinables:\r\nLes principaux matériaux usinables sont le bois, plâtre, résine, cire usinable, cuivre.\r\n", spec: "Taille du plateau X/Y : 220 mm x 160 mm\r\nVolume maximal de travail: 203,2 mm (X), 152,4 mm (Y), 60,5 mm (Z)\r\nPrécision usinage: 0,00625 mm\r\nPrécision scannage: réglable de 0,05 à 5 mm (axes X,Y) et 0,025 mm (axe Z)\r\nVitesse d'analyse (scannage): 4-15 mm/sec\r\n \r\n \r\nLogiciel utilisé pour le fraisage: Roland Modela player 4 \r\nLogiciel utilisé pour l'usinage de circuits imprimés: Cad.py (linux)\r\nFormats acceptés: STL,PNG 3D\r\nFormat d'exportation des données scannées: DXF, VRML, STL, 3DMF, IGES, Grayscale, Point Group et BMP\r\n", slug: "petite-fraiseuse"} + ]) +end + +if Category.count == 0 + Category.create!([ + {name: "Stage"}, + {name: "Atelier"} + ]) +end diff --git a/lib/assets/.keep b/lib/assets/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/lib/file_size_validator.rb b/lib/file_size_validator.rb new file mode 100644 index 000000000..8d80df2be --- /dev/null +++ b/lib/file_size_validator.rb @@ -0,0 +1,68 @@ +# File size validator for CarrierWave +# https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Validate-attachment-file-size + +class FileSizeValidator < ActiveModel::EachValidator + MESSAGES = { :is => :wrong_size, :minimum => :size_too_small, :maximum => :size_too_big }.freeze + CHECKS = { :is => :==, :minimum => :>=, :maximum => :<= }.freeze + + DEFAULT_TOKENIZER = lambda { |value| value.split(//) } + RESERVED_OPTIONS = [:minimum, :maximum, :within, :is, :tokenizer, :too_short, :too_long] + + def initialize(options) + if range = (options.delete(:in) || options.delete(:within)) + raise ArgumentError, ":in and :within must be a Range" unless range.is_a?(Range) + options[:minimum], options[:maximum] = range.begin, range.end + options[:maximum] -= 1 if range.exclude_end? + end + + super + end + + def check_validity! + keys = CHECKS.keys & options.keys + + if keys.empty? + raise ArgumentError, 'Range unspecified. Specify the :within, :maximum, :minimum, or :is option.' + end + + keys.each do |key| + value = options[key] + + unless value.is_a?(Integer) && value >= 0 + raise ArgumentError, ":#{key} must be a nonnegative Integer" + end + end + end + + def validate_each(record, attribute, value) + raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected") unless value.kind_of? CarrierWave::Uploader::Base + + value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.kind_of?(String) + + CHECKS.each do |key, validity_check| + next unless check_value = options[key] + + value ||= [] if key == :maximum + + value_size = value.size + next if value_size.send(validity_check, check_value) + + errors_options = options.except(*RESERVED_OPTIONS) + errors_options[:file_size] = help.number_to_human_size check_value + + default_message = options[MESSAGES[key]] + errors_options[:message] ||= default_message if default_message + + record.errors.add(attribute, MESSAGES[key], errors_options) + end + end + + def help + Helper.instance + end + + class Helper + include Singleton + include ActionView::Helpers::NumberHelper + end +end diff --git a/lib/tasks/.keep b/lib/tasks/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/log/.keep b/log/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/public/404.html b/public/404.html new file mode 100644 index 000000000..b612547fc --- /dev/null +++ b/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
    +
    +

    The page you were looking for doesn't exist.

    +

    You may have mistyped the address or the page may have moved.

    +
    +

    If you are the application owner check the logs for more information.

    +
    + + diff --git a/public/422.html b/public/422.html new file mode 100644 index 000000000..a21f82b3b --- /dev/null +++ b/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
    +
    +

    The change you wanted was rejected.

    +

    Maybe you tried to change something you didn't have access to.

    +
    +

    If you are the application owner check the logs for more information.

    +
    + + diff --git a/public/500.html b/public/500.html new file mode 100644 index 000000000..061abc587 --- /dev/null +++ b/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
    +
    +

    We're sorry, but something went wrong.

    +
    +

    If you are the application owner check the logs for more information.

    +
    + + diff --git a/public/Charte_FABLAB.pdf b/public/Charte_FABLAB.pdf new file mode 100644 index 000000000..41e7823f7 Binary files /dev/null and b/public/Charte_FABLAB.pdf differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 000000000..e69de29bb diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 000000000..3c9c7c01f --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/spec/factories/availabilities.rb b/spec/factories/availabilities.rb new file mode 100644 index 000000000..566352913 --- /dev/null +++ b/spec/factories/availabilities.rb @@ -0,0 +1,6 @@ +#FactoryGirl.define do + #factory :availability do + + #end + +#end diff --git a/spec/factories/machines.rb b/spec/factories/machines.rb new file mode 100644 index 000000000..22dc14da5 --- /dev/null +++ b/spec/factories/machines.rb @@ -0,0 +1,6 @@ +#FactoryGirl.define do + #factory :machine do + + #end + +#end diff --git a/spec/factories/profile.rb b/spec/factories/profile.rb new file mode 100644 index 000000000..3483e0c31 --- /dev/null +++ b/spec/factories/profile.rb @@ -0,0 +1,11 @@ +FactoryGirl.define do + sequence(:last_name) { |n| n } + + factory :profile do + first_name 'member' + last_name { FactoryGirl.generate :last_name } + gender true + birthday { 30.years.ago } + phone '0606060606' + end +end diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb new file mode 100644 index 000000000..ef4d79834 --- /dev/null +++ b/spec/factories/projects.rb @@ -0,0 +1,8 @@ +FactoryGirl.define do + sequence(:name) { |n| "project#{n}" } + + factory :project do + name { FactoryGirl.generate :name } + description { Faker::Lorem.paragraph } + end +end diff --git a/spec/factories/roles.rb b/spec/factories/roles.rb new file mode 100644 index 000000000..3ae14f956 --- /dev/null +++ b/spec/factories/roles.rb @@ -0,0 +1,6 @@ +FactoryGirl.define do + factory :role do + + end + +end diff --git a/spec/factories/users.rb b/spec/factories/users.rb new file mode 100644 index 000000000..2a8d75c67 --- /dev/null +++ b/spec/factories/users.rb @@ -0,0 +1,14 @@ +FactoryGirl.define do + sequence(:email) { |n| "member#{n}@sleede.com" } + sequence(:username) { |n| "member#{n}" } + + factory :user do + email { FactoryGirl.generate :email } + username { FactoryGirl.generate :username } + password 'sleede22' + password_confirmation 'sleede22' + association :profile, strategy: :build + group { Group.first } + end + +end diff --git a/spec/models/availability_spec.rb b/spec/models/availability_spec.rb new file mode 100644 index 000000000..a0aa8b9e3 --- /dev/null +++ b/spec/models/availability_spec.rb @@ -0,0 +1,17 @@ +require 'rails_helper' + +RSpec.describe Availability, type: :model do + + describe 'create' do + it 'is success with start at, end at and type' + it 'is invalid without start at' + it 'is invalid without end at' + it 'is invalid without type' + it 'is invalid type isnt in [event]' + end + + it 'should get a title' + + it 'should set a number of places' + +end diff --git a/spec/models/machine_spec.rb b/spec/models/machine_spec.rb new file mode 100644 index 000000000..a00e0843e --- /dev/null +++ b/spec/models/machine_spec.rb @@ -0,0 +1,21 @@ +require 'rails_helper' + +RSpec.describe Machine, type: :model do + + describe 'create' do + it 'is success with name, image, description and spec' + it 'is invalid without name' + it 'is invalid without image' + it 'is invalid without description' + it 'is invalid without spec' + it 'should auto generate slug by name' + end + + it 'can have many machine files' + + it 'can have many projects' + + it 'can have many trainings' + + it 'should return an amount by user group' +end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb new file mode 100644 index 000000000..7ba6c2523 --- /dev/null +++ b/spec/models/project_spec.rb @@ -0,0 +1,30 @@ +require 'rails_helper' + +RSpec.describe Project, type: :model do + + describe 'create' do + it 'is success with author, name and description' + it 'is invalid without author' + it 'is invalid without name' + it 'is invalid without description' + it 'should auto generate slug by name' + end + + it 'save as draft by default' + + it 'should can published' + + it 'should have a published time after published' + + it 'can only add one project main image' + + it 'can have many project caos' + + it 'can have many machines' + + it 'can have many components' + + it 'can have many project steps' + + it 'can add a licence' +end diff --git a/spec/models/role_spec.rb b/spec/models/role_spec.rb new file mode 100644 index 000000000..41d406052 --- /dev/null +++ b/spec/models/role_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Role, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb new file mode 100644 index 000000000..19af17f6b --- /dev/null +++ b/spec/models/user_spec.rb @@ -0,0 +1,67 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + let!(:user) { build :user } + + describe 'create' do + it 'is success if user email, gender, first name, last name, group, birthday and phone are presents' do + expect(user.save).to be true + end + + it 'is invalid when email is empty' do + user.email = nil + expect(user).to be_invalid + end + + it 'is invalid when email format invalid' do + user.email = 'this a invalid email' + expect(user).to be_invalid + end + + it 'is invalid when first name is empty' do + user.profile.first_name = nil + expect(user).to be_invalid + end + + it 'is invalid when last name is empty' do + user.profile.last_name = nil + expect(user).to be_invalid + end + + it 'is invalid when birthday is empty' do + user.profile.birthday = nil + expect(user).to be_invalid + end + + it 'is invalid when phone is empty or not numerical' do + user.profile.phone = nil + expect(user).to be_invalid + user.profile.phone = "phone" + expect(user).to be_invalid + end + + it 'is invalid when group is empty' do + user.group = nil + expect(user).to be_invalid + end + + it 'is invalid when group is empty' do + user.group = nil + expect(user).to be_invalid + end + + it 'is invalid when dont accept cgu' do + user.cgu = '0' + expect(user).to be_invalid + expect(user.errors[:cgu]).to include(I18n.t('activerecord.errors.messages.empty')) + end + end + + context 'after creation' do + it 'has a member role' do + member = create(:user) + expect(member.is_member?).to be true + end + end +end + diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb new file mode 100644 index 000000000..b4d9ec782 --- /dev/null +++ b/spec/rails_helper.rb @@ -0,0 +1,50 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +ENV['RAILS_ENV'] ||= 'test' +require 'spec_helper' +require File.expand_path('../../config/environment', __FILE__) +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } + +# Checks for pending migrations before tests are run. +# If you are not using ActiveRecord, you can remove this line. +ActiveRecord::Migration.maintain_test_schema! + +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! +end diff --git a/spec/services/notification_center_spec.rb b/spec/services/notification_center_spec.rb new file mode 100644 index 000000000..424b8ca47 --- /dev/null +++ b/spec/services/notification_center_spec.rb @@ -0,0 +1,31 @@ +require 'rails_helper' + +RSpec.describe NotificationCenter do + let(:receiver1) { create :user } + let(:receiver2) { create :user } + let(:project) { create :project } + + it 'should respond to method .call' do + expect(NotificationCenter).to respond_to(:call) + end + + it 'should create a notification' do + options = { + type: 'notify_admin_when_project_published', + receiver: receiver1, + attached_object: project + } + NotificationCenter.call(options) + expect(Notification.count).to eq 1 + end + + it 'should create same number of notifications with number of receiver' do + options = { + type: 'notify_admin_when_project_published', + receiver: [receiver1, receiver2], + attached_object: project + } + NotificationCenter.call(options) + expect(Notification.count).to eq 2 + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 000000000..38a4f9a16 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,87 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# The `.rspec` file also contains a few flags that are not defaults but that +# users commonly want. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # These two settings work together to allow you to limit a spec run + # to individual examples or groups you care about by tagging them with + # `:focus` metadata. When nothing is tagged with `:focus`, all examples + # get run. + config.filter_run :focus + config.run_all_when_everything_filtered = true + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax + # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = 'doc' + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/spec/support/database_cleaner.rb b/spec/support/database_cleaner.rb new file mode 100644 index 000000000..4a54cd361 --- /dev/null +++ b/spec/support/database_cleaner.rb @@ -0,0 +1,17 @@ +RSpec.configure do |config| + + config.before(:suite) do + # The :transaction strategy prevents :after_commit hooks from running + DatabaseCleaner.strategy = :transaction + DatabaseCleaner.clean_with(:truncation) + # load seeds only for test + load "#{Rails.root}/db/test_seeds.rb" + end + + config.around(:each) do |example| + DatabaseCleaner.cleaning do + example.run + end + end + +end diff --git a/spec/support/factory_girl.rb b/spec/support/factory_girl.rb new file mode 100644 index 000000000..43662908a --- /dev/null +++ b/spec/support/factory_girl.rb @@ -0,0 +1,12 @@ +RSpec.configure do |config| + config.include FactoryGirl::Syntax::Methods + + config.before(:suite) do + begin + DatabaseCleaner.start + FactoryGirl.lint + ensure + DatabaseCleaner.clean + end + end +end diff --git a/vendor/assets/components/angular-bootstrap/.bower.json b/vendor/assets/components/angular-bootstrap/.bower.json new file mode 100644 index 000000000..288fbd50a --- /dev/null +++ b/vendor/assets/components/angular-bootstrap/.bower.json @@ -0,0 +1,31 @@ +{ + "author": { + "name": "https://github.com/angular-ui/bootstrap/graphs/contributors" + }, + "name": "angular-bootstrap", + "keywords": [ + "angular", + "angular-ui", + "bootstrap" + ], + "license": "MIT", + "ignore": [], + "description": "Native AngularJS (Angular) directives for Bootstrap.", + "version": "0.12.1", + "main": [ + "./ui-bootstrap-tpls.js" + ], + "dependencies": { + "angular": ">=1 <1.3.0" + }, + "homepage": "https://github.com/angular-ui/bootstrap-bower", + "_release": "0.12.1", + "_resolution": { + "type": "version", + "tag": "0.12.1", + "commit": "ab14fbaaf3d592f8e76018f0666c5af6f68ebaa3" + }, + "_source": "git://github.com/angular-ui/bootstrap-bower.git", + "_target": ">=0.11", + "_originalSource": "angular-bootstrap" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-bootstrap/bower.json b/vendor/assets/components/angular-bootstrap/bower.json new file mode 100644 index 000000000..8f6991bed --- /dev/null +++ b/vendor/assets/components/angular-bootstrap/bower.json @@ -0,0 +1,19 @@ +{ + "author": { + "name": "https://github.com/angular-ui/bootstrap/graphs/contributors" + }, + "name": "angular-bootstrap", + "keywords": [ + "angular", + "angular-ui", + "bootstrap" + ], + "license": "MIT", + "ignore": [], + "description": "Native AngularJS (Angular) directives for Bootstrap.", + "version": "0.12.1", + "main": ["./ui-bootstrap-tpls.js"], + "dependencies": { + "angular": ">=1 <1.3.0" + } +} diff --git a/vendor/assets/components/angular-bootstrap/ui-bootstrap-tpls.js b/vendor/assets/components/angular-bootstrap/ui-bootstrap-tpls.js new file mode 100644 index 000000000..eda964c39 --- /dev/null +++ b/vendor/assets/components/angular-bootstrap/ui-bootstrap-tpls.js @@ -0,0 +1,4211 @@ +/* + * angular-ui-bootstrap + * http://angular-ui.github.io/bootstrap/ + + * Version: 0.12.1 - 2015-02-20 + * License: MIT + */ +angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.transition","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]); +angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]); +angular.module('ui.bootstrap.transition', []) + +/** + * $transition service provides a consistent interface to trigger CSS 3 transitions and to be informed when they complete. + * @param {DOMElement} element The DOMElement that will be animated. + * @param {string|object|function} trigger The thing that will cause the transition to start: + * - As a string, it represents the css class to be added to the element. + * - As an object, it represents a hash of style attributes to be applied to the element. + * - As a function, it represents a function to be called that will cause the transition to occur. + * @return {Promise} A promise that is resolved when the transition finishes. + */ +.factory('$transition', ['$q', '$timeout', '$rootScope', function($q, $timeout, $rootScope) { + + var $transition = function(element, trigger, options) { + options = options || {}; + var deferred = $q.defer(); + var endEventName = $transition[options.animation ? 'animationEndEventName' : 'transitionEndEventName']; + + var transitionEndHandler = function(event) { + $rootScope.$apply(function() { + element.unbind(endEventName, transitionEndHandler); + deferred.resolve(element); + }); + }; + + if (endEventName) { + element.bind(endEventName, transitionEndHandler); + } + + // Wrap in a timeout to allow the browser time to update the DOM before the transition is to occur + $timeout(function() { + if ( angular.isString(trigger) ) { + element.addClass(trigger); + } else if ( angular.isFunction(trigger) ) { + trigger(element); + } else if ( angular.isObject(trigger) ) { + element.css(trigger); + } + //If browser does not support transitions, instantly resolve + if ( !endEventName ) { + deferred.resolve(element); + } + }); + + // Add our custom cancel function to the promise that is returned + // We can call this if we are about to run a new transition, which we know will prevent this transition from ending, + // i.e. it will therefore never raise a transitionEnd event for that transition + deferred.promise.cancel = function() { + if ( endEventName ) { + element.unbind(endEventName, transitionEndHandler); + } + deferred.reject('Transition cancelled'); + }; + + return deferred.promise; + }; + + // Work out the name of the transitionEnd event + var transElement = document.createElement('trans'); + var transitionEndEventNames = { + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'transitionend', + 'OTransition': 'oTransitionEnd', + 'transition': 'transitionend' + }; + var animationEndEventNames = { + 'WebkitTransition': 'webkitAnimationEnd', + 'MozTransition': 'animationend', + 'OTransition': 'oAnimationEnd', + 'transition': 'animationend' + }; + function findEndEventName(endEventNames) { + for (var name in endEventNames){ + if (transElement.style[name] !== undefined) { + return endEventNames[name]; + } + } + } + $transition.transitionEndEventName = findEndEventName(transitionEndEventNames); + $transition.animationEndEventName = findEndEventName(animationEndEventNames); + return $transition; +}]); + +angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition']) + + .directive('collapse', ['$transition', function ($transition) { + + return { + link: function (scope, element, attrs) { + + var initialAnimSkip = true; + var currentTransition; + + function doTransition(change) { + var newTransition = $transition(element, change); + if (currentTransition) { + currentTransition.cancel(); + } + currentTransition = newTransition; + newTransition.then(newTransitionDone, newTransitionDone); + return newTransition; + + function newTransitionDone() { + // Make sure it's this transition, otherwise, leave it alone. + if (currentTransition === newTransition) { + currentTransition = undefined; + } + } + } + + function expand() { + if (initialAnimSkip) { + initialAnimSkip = false; + expandDone(); + } else { + element.removeClass('collapse').addClass('collapsing'); + doTransition({ height: element[0].scrollHeight + 'px' }).then(expandDone); + } + } + + function expandDone() { + element.removeClass('collapsing'); + element.addClass('collapse in'); + element.css({height: 'auto'}); + } + + function collapse() { + if (initialAnimSkip) { + initialAnimSkip = false; + collapseDone(); + element.css({height: 0}); + } else { + // CSS transitions don't work with height: auto, so we have to manually change the height to a specific value + element.css({ height: element[0].scrollHeight + 'px' }); + //trigger reflow so a browser realizes that height was updated from auto to a specific value + var x = element[0].offsetWidth; + + element.removeClass('collapse in').addClass('collapsing'); + + doTransition({ height: 0 }).then(collapseDone); + } + } + + function collapseDone() { + element.removeClass('collapsing'); + element.addClass('collapse'); + } + + scope.$watch(attrs.collapse, function (shouldCollapse) { + if (shouldCollapse) { + collapse(); + } else { + expand(); + } + }); + } + }; + }]); + +angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse']) + +.constant('accordionConfig', { + closeOthers: true +}) + +.controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) { + + // This array keeps track of the accordion groups + this.groups = []; + + // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to + this.closeOthers = function(openGroup) { + var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers; + if ( closeOthers ) { + angular.forEach(this.groups, function (group) { + if ( group !== openGroup ) { + group.isOpen = false; + } + }); + } + }; + + // This is called from the accordion-group directive to add itself to the accordion + this.addGroup = function(groupScope) { + var that = this; + this.groups.push(groupScope); + + groupScope.$on('$destroy', function (event) { + that.removeGroup(groupScope); + }); + }; + + // This is called from the accordion-group directive when to remove itself + this.removeGroup = function(group) { + var index = this.groups.indexOf(group); + if ( index !== -1 ) { + this.groups.splice(index, 1); + } + }; + +}]) + +// The accordion directive simply sets up the directive controller +// and adds an accordion CSS class to itself element. +.directive('accordion', function () { + return { + restrict:'EA', + controller:'AccordionController', + transclude: true, + replace: false, + templateUrl: 'template/accordion/accordion.html' + }; +}) + +// The accordion-group directive indicates a block of html that will expand and collapse in an accordion +.directive('accordionGroup', function() { + return { + require:'^accordion', // We need this directive to be inside an accordion + restrict:'EA', + transclude:true, // It transcludes the contents of the directive into the template + replace: true, // The element containing the directive will be replaced with the template + templateUrl:'template/accordion/accordion-group.html', + scope: { + heading: '@', // Interpolate the heading attribute onto this scope + isOpen: '=?', + isDisabled: '=?' + }, + controller: function() { + this.setHeading = function(element) { + this.heading = element; + }; + }, + link: function(scope, element, attrs, accordionCtrl) { + accordionCtrl.addGroup(scope); + + scope.$watch('isOpen', function(value) { + if ( value ) { + accordionCtrl.closeOthers(scope); + } + }); + + scope.toggleOpen = function() { + if ( !scope.isDisabled ) { + scope.isOpen = !scope.isOpen; + } + }; + } + }; +}) + +// Use accordion-heading below an accordion-group to provide a heading containing HTML +// +// Heading containing HTML - +// +.directive('accordionHeading', function() { + return { + restrict: 'EA', + transclude: true, // Grab the contents to be used as the heading + template: '', // In effect remove this element! + replace: true, + require: '^accordionGroup', + link: function(scope, element, attr, accordionGroupCtrl, transclude) { + // Pass the heading to the accordion-group controller + // so that it can be transcluded into the right place in the template + // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat] + accordionGroupCtrl.setHeading(transclude(scope, function() {})); + } + }; +}) + +// Use in the accordion-group template to indicate where you want the heading to be transcluded +// You must provide the property on the accordion-group controller that will hold the transcluded element +//
    +// +// ... +//
    +.directive('accordionTransclude', function() { + return { + require: '^accordionGroup', + link: function(scope, element, attr, controller) { + scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) { + if ( heading ) { + element.html(''); + element.append(heading); + } + }); + } + }; +}); + +angular.module('ui.bootstrap.alert', []) + +.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) { + $scope.closeable = 'close' in $attrs; + this.close = $scope.close; +}]) + +.directive('alert', function () { + return { + restrict:'EA', + controller:'AlertController', + templateUrl:'template/alert/alert.html', + transclude:true, + replace:true, + scope: { + type: '@', + close: '&' + } + }; +}) + +.directive('dismissOnTimeout', ['$timeout', function($timeout) { + return { + require: 'alert', + link: function(scope, element, attrs, alertCtrl) { + $timeout(function(){ + alertCtrl.close(); + }, parseInt(attrs.dismissOnTimeout, 10)); + } + }; +}]); + +angular.module('ui.bootstrap.bindHtml', []) + + .directive('bindHtmlUnsafe', function () { + return function (scope, element, attr) { + element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe); + scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) { + element.html(value || ''); + }); + }; + }); +angular.module('ui.bootstrap.buttons', []) + +.constant('buttonConfig', { + activeClass: 'active', + toggleEvent: 'click' +}) + +.controller('ButtonsController', ['buttonConfig', function(buttonConfig) { + this.activeClass = buttonConfig.activeClass || 'active'; + this.toggleEvent = buttonConfig.toggleEvent || 'click'; +}]) + +.directive('btnRadio', function () { + return { + require: ['btnRadio', 'ngModel'], + controller: 'ButtonsController', + link: function (scope, element, attrs, ctrls) { + var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + //model -> UI + ngModelCtrl.$render = function () { + element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio))); + }; + + //ui->model + element.bind(buttonsCtrl.toggleEvent, function () { + var isActive = element.hasClass(buttonsCtrl.activeClass); + + if (!isActive || angular.isDefined(attrs.uncheckable)) { + scope.$apply(function () { + ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio)); + ngModelCtrl.$render(); + }); + } + }); + } + }; +}) + +.directive('btnCheckbox', function () { + return { + require: ['btnCheckbox', 'ngModel'], + controller: 'ButtonsController', + link: function (scope, element, attrs, ctrls) { + var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + function getTrueValue() { + return getCheckboxValue(attrs.btnCheckboxTrue, true); + } + + function getFalseValue() { + return getCheckboxValue(attrs.btnCheckboxFalse, false); + } + + function getCheckboxValue(attributeValue, defaultValue) { + var val = scope.$eval(attributeValue); + return angular.isDefined(val) ? val : defaultValue; + } + + //model -> UI + ngModelCtrl.$render = function () { + element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue())); + }; + + //ui->model + element.bind(buttonsCtrl.toggleEvent, function () { + scope.$apply(function () { + ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue()); + ngModelCtrl.$render(); + }); + }); + } + }; +}); + +/** +* @ngdoc overview +* @name ui.bootstrap.carousel +* +* @description +* AngularJS version of an image carousel. +* +*/ +angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition']) +.controller('CarouselController', ['$scope', '$timeout', '$interval', '$transition', function ($scope, $timeout, $interval, $transition) { + var self = this, + slides = self.slides = $scope.slides = [], + currentIndex = -1, + currentInterval, isPlaying; + self.currentSlide = null; + + var destroyed = false; + /* direction: "prev" or "next" */ + self.select = $scope.select = function(nextSlide, direction) { + var nextIndex = slides.indexOf(nextSlide); + //Decide direction if it's not given + if (direction === undefined) { + direction = nextIndex > currentIndex ? 'next' : 'prev'; + } + if (nextSlide && nextSlide !== self.currentSlide) { + if ($scope.$currentTransition) { + $scope.$currentTransition.cancel(); + //Timeout so ng-class in template has time to fix classes for finished slide + $timeout(goNext); + } else { + goNext(); + } + } + function goNext() { + // Scope has been destroyed, stop here. + if (destroyed) { return; } + //If we have a slide to transition from and we have a transition type and we're allowed, go + if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) { + //We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime + nextSlide.$element.addClass(direction); + var reflow = nextSlide.$element[0].offsetWidth; //force reflow + + //Set all other slides to stop doing their stuff for the new transition + angular.forEach(slides, function(slide) { + angular.extend(slide, {direction: '', entering: false, leaving: false, active: false}); + }); + angular.extend(nextSlide, {direction: direction, active: true, entering: true}); + angular.extend(self.currentSlide||{}, {direction: direction, leaving: true}); + + $scope.$currentTransition = $transition(nextSlide.$element, {}); + //We have to create new pointers inside a closure since next & current will change + (function(next,current) { + $scope.$currentTransition.then( + function(){ transitionDone(next, current); }, + function(){ transitionDone(next, current); } + ); + }(nextSlide, self.currentSlide)); + } else { + transitionDone(nextSlide, self.currentSlide); + } + self.currentSlide = nextSlide; + currentIndex = nextIndex; + //every time you change slides, reset the timer + restartTimer(); + } + function transitionDone(next, current) { + angular.extend(next, {direction: '', active: true, leaving: false, entering: false}); + angular.extend(current||{}, {direction: '', active: false, leaving: false, entering: false}); + $scope.$currentTransition = null; + } + }; + $scope.$on('$destroy', function () { + destroyed = true; + }); + + /* Allow outside people to call indexOf on slides array */ + self.indexOfSlide = function(slide) { + return slides.indexOf(slide); + }; + + $scope.next = function() { + var newIndex = (currentIndex + 1) % slides.length; + + //Prevent this user-triggered transition from occurring if there is already one in progress + if (!$scope.$currentTransition) { + return self.select(slides[newIndex], 'next'); + } + }; + + $scope.prev = function() { + var newIndex = currentIndex - 1 < 0 ? slides.length - 1 : currentIndex - 1; + + //Prevent this user-triggered transition from occurring if there is already one in progress + if (!$scope.$currentTransition) { + return self.select(slides[newIndex], 'prev'); + } + }; + + $scope.isActive = function(slide) { + return self.currentSlide === slide; + }; + + $scope.$watch('interval', restartTimer); + $scope.$on('$destroy', resetTimer); + + function restartTimer() { + resetTimer(); + var interval = +$scope.interval; + if (!isNaN(interval) && interval > 0) { + currentInterval = $interval(timerFn, interval); + } + } + + function resetTimer() { + if (currentInterval) { + $interval.cancel(currentInterval); + currentInterval = null; + } + } + + function timerFn() { + var interval = +$scope.interval; + if (isPlaying && !isNaN(interval) && interval > 0) { + $scope.next(); + } else { + $scope.pause(); + } + } + + $scope.play = function() { + if (!isPlaying) { + isPlaying = true; + restartTimer(); + } + }; + $scope.pause = function() { + if (!$scope.noPause) { + isPlaying = false; + resetTimer(); + } + }; + + self.addSlide = function(slide, element) { + slide.$element = element; + slides.push(slide); + //if this is the first slide or the slide is set to active, select it + if(slides.length === 1 || slide.active) { + self.select(slides[slides.length-1]); + if (slides.length == 1) { + $scope.play(); + } + } else { + slide.active = false; + } + }; + + self.removeSlide = function(slide) { + //get the index of the slide inside the carousel + var index = slides.indexOf(slide); + slides.splice(index, 1); + if (slides.length > 0 && slide.active) { + if (index >= slides.length) { + self.select(slides[index-1]); + } else { + self.select(slides[index]); + } + } else if (currentIndex > index) { + currentIndex--; + } + }; + +}]) + +/** + * @ngdoc directive + * @name ui.bootstrap.carousel.directive:carousel + * @restrict EA + * + * @description + * Carousel is the outer container for a set of image 'slides' to showcase. + * + * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide. + * @param {boolean=} noTransition Whether to disable transitions on the carousel. + * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover). + * + * @example + + + + + + + + + + + + + + + .carousel-indicators { + top: auto; + bottom: 15px; + } + + + */ +.directive('carousel', [function() { + return { + restrict: 'EA', + transclude: true, + replace: true, + controller: 'CarouselController', + require: 'carousel', + templateUrl: 'template/carousel/carousel.html', + scope: { + interval: '=', + noTransition: '=', + noPause: '=' + } + }; +}]) + +/** + * @ngdoc directive + * @name ui.bootstrap.carousel.directive:slide + * @restrict EA + * + * @description + * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element. + * + * @param {boolean=} active Model binding, whether or not this slide is currently active. + * + * @example + + +
    + + + + + + + Interval, in milliseconds: +
    Enter a negative number to stop the interval. +
    +
    + +function CarouselDemoCtrl($scope) { + $scope.myInterval = 5000; +} + + + .carousel-indicators { + top: auto; + bottom: 15px; + } + +
    +*/ + +.directive('slide', function() { + return { + require: '^carousel', + restrict: 'EA', + transclude: true, + replace: true, + templateUrl: 'template/carousel/slide.html', + scope: { + active: '=?' + }, + link: function (scope, element, attrs, carouselCtrl) { + carouselCtrl.addSlide(scope, element); + //when the scope is destroyed then remove the slide from the current slides array + scope.$on('$destroy', function() { + carouselCtrl.removeSlide(scope); + }); + + scope.$watch('active', function(active) { + if (active) { + carouselCtrl.select(scope); + } + }); + } + }; +}); + +angular.module('ui.bootstrap.dateparser', []) + +.service('dateParser', ['$locale', 'orderByFilter', function($locale, orderByFilter) { + + this.parsers = {}; + + var formatCodeToRegex = { + 'yyyy': { + regex: '\\d{4}', + apply: function(value) { this.year = +value; } + }, + 'yy': { + regex: '\\d{2}', + apply: function(value) { this.year = +value + 2000; } + }, + 'y': { + regex: '\\d{1,4}', + apply: function(value) { this.year = +value; } + }, + 'MMMM': { + regex: $locale.DATETIME_FORMATS.MONTH.join('|'), + apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); } + }, + 'MMM': { + regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'), + apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); } + }, + 'MM': { + regex: '0[1-9]|1[0-2]', + apply: function(value) { this.month = value - 1; } + }, + 'M': { + regex: '[1-9]|1[0-2]', + apply: function(value) { this.month = value - 1; } + }, + 'dd': { + regex: '[0-2][0-9]{1}|3[0-1]{1}', + apply: function(value) { this.date = +value; } + }, + 'd': { + regex: '[1-2]?[0-9]{1}|3[0-1]{1}', + apply: function(value) { this.date = +value; } + }, + 'EEEE': { + regex: $locale.DATETIME_FORMATS.DAY.join('|') + }, + 'EEE': { + regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|') + } + }; + + function createParser(format) { + var map = [], regex = format.split(''); + + angular.forEach(formatCodeToRegex, function(data, code) { + var index = format.indexOf(code); + + if (index > -1) { + format = format.split(''); + + regex[index] = '(' + data.regex + ')'; + format[index] = '$'; // Custom symbol to define consumed part of format + for (var i = index + 1, n = index + code.length; i < n; i++) { + regex[i] = ''; + format[i] = '$'; + } + format = format.join(''); + + map.push({ index: index, apply: data.apply }); + } + }); + + return { + regex: new RegExp('^' + regex.join('') + '$'), + map: orderByFilter(map, 'index') + }; + } + + this.parse = function(input, format) { + if ( !angular.isString(input) || !format ) { + return input; + } + + format = $locale.DATETIME_FORMATS[format] || format; + + if ( !this.parsers[format] ) { + this.parsers[format] = createParser(format); + } + + var parser = this.parsers[format], + regex = parser.regex, + map = parser.map, + results = input.match(regex); + + if ( results && results.length ) { + var fields = { year: 1900, month: 0, date: 1, hours: 0 }, dt; + + for( var i = 1, n = results.length; i < n; i++ ) { + var mapper = map[i-1]; + if ( mapper.apply ) { + mapper.apply.call(fields, results[i]); + } + } + + if ( isValid(fields.year, fields.month, fields.date) ) { + dt = new Date( fields.year, fields.month, fields.date, fields.hours); + } + + return dt; + } + }; + + // Check if date is valid for specific month (and year for February). + // Month: 0 = Jan, 1 = Feb, etc + function isValid(year, month, date) { + if ( month === 1 && date > 28) { + return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); + } + + if ( month === 3 || month === 5 || month === 8 || month === 10) { + return date < 31; + } + + return true; + } +}]); + +angular.module('ui.bootstrap.position', []) + +/** + * A set of utility methods that can be use to retrieve position of DOM elements. + * It is meant to be used where we need to absolute-position DOM elements in + * relation to other, existing elements (this is the case for tooltips, popovers, + * typeahead suggestions etc.). + */ + .factory('$position', ['$document', '$window', function ($document, $window) { + + function getStyle(el, cssprop) { + if (el.currentStyle) { //IE + return el.currentStyle[cssprop]; + } else if ($window.getComputedStyle) { + return $window.getComputedStyle(el)[cssprop]; + } + // finally try and get inline style + return el.style[cssprop]; + } + + /** + * Checks if a given element is statically positioned + * @param element - raw DOM element + */ + function isStaticPositioned(element) { + return (getStyle(element, 'position') || 'static' ) === 'static'; + } + + /** + * returns the closest, non-statically positioned parentOffset of a given element + * @param element + */ + var parentOffsetEl = function (element) { + var docDomEl = $document[0]; + var offsetParent = element.offsetParent || docDomEl; + while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || docDomEl; + }; + + return { + /** + * Provides read-only equivalent of jQuery's position function: + * http://api.jquery.com/position/ + */ + position: function (element) { + var elBCR = this.offset(element); + var offsetParentBCR = { top: 0, left: 0 }; + var offsetParentEl = parentOffsetEl(element[0]); + if (offsetParentEl != $document[0]) { + offsetParentBCR = this.offset(angular.element(offsetParentEl)); + offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop; + offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft; + } + + var boundingClientRect = element[0].getBoundingClientRect(); + return { + width: boundingClientRect.width || element.prop('offsetWidth'), + height: boundingClientRect.height || element.prop('offsetHeight'), + top: elBCR.top - offsetParentBCR.top, + left: elBCR.left - offsetParentBCR.left + }; + }, + + /** + * Provides read-only equivalent of jQuery's offset function: + * http://api.jquery.com/offset/ + */ + offset: function (element) { + var boundingClientRect = element[0].getBoundingClientRect(); + return { + width: boundingClientRect.width || element.prop('offsetWidth'), + height: boundingClientRect.height || element.prop('offsetHeight'), + top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop), + left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft) + }; + }, + + /** + * Provides coordinates for the targetEl in relation to hostEl + */ + positionElements: function (hostEl, targetEl, positionStr, appendToBody) { + + var positionStrParts = positionStr.split('-'); + var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center'; + + var hostElPos, + targetElWidth, + targetElHeight, + targetElPos; + + hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl); + + targetElWidth = targetEl.prop('offsetWidth'); + targetElHeight = targetEl.prop('offsetHeight'); + + var shiftWidth = { + center: function () { + return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2; + }, + left: function () { + return hostElPos.left; + }, + right: function () { + return hostElPos.left + hostElPos.width; + } + }; + + var shiftHeight = { + center: function () { + return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2; + }, + top: function () { + return hostElPos.top; + }, + bottom: function () { + return hostElPos.top + hostElPos.height; + } + }; + + switch (pos0) { + case 'right': + targetElPos = { + top: shiftHeight[pos1](), + left: shiftWidth[pos0]() + }; + break; + case 'left': + targetElPos = { + top: shiftHeight[pos1](), + left: hostElPos.left - targetElWidth + }; + break; + case 'bottom': + targetElPos = { + top: shiftHeight[pos0](), + left: shiftWidth[pos1]() + }; + break; + default: + targetElPos = { + top: hostElPos.top - targetElHeight, + left: shiftWidth[pos1]() + }; + break; + } + + return targetElPos; + } + }; + }]); + +angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position']) + +.constant('datepickerConfig', { + formatDay: 'dd', + formatMonth: 'MMMM', + formatYear: 'yyyy', + formatDayHeader: 'EEE', + formatDayTitle: 'MMMM yyyy', + formatMonthTitle: 'yyyy', + datepickerMode: 'day', + minMode: 'day', + maxMode: 'year', + showWeeks: true, + startingDay: 0, + yearRange: 20, + minDate: null, + maxDate: null +}) + +.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) { + var self = this, + ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl; + + // Modes chain + this.modes = ['day', 'month', 'year']; + + // Configuration attributes + angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', + 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange'], function( key, index ) { + self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key]; + }); + + // Watchable date attributes + angular.forEach(['minDate', 'maxDate'], function( key ) { + if ( $attrs[key] ) { + $scope.$parent.$watch($parse($attrs[key]), function(value) { + self[key] = value ? new Date(value) : null; + self.refreshView(); + }); + } else { + self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null; + } + }); + + $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; + $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000); + this.activeDate = angular.isDefined($attrs.initDate) ? $scope.$parent.$eval($attrs.initDate) : new Date(); + + $scope.isActive = function(dateObject) { + if (self.compare(dateObject.date, self.activeDate) === 0) { + $scope.activeDateId = dateObject.uid; + return true; + } + return false; + }; + + this.init = function( ngModelCtrl_ ) { + ngModelCtrl = ngModelCtrl_; + + ngModelCtrl.$render = function() { + self.render(); + }; + }; + + this.render = function() { + if ( ngModelCtrl.$modelValue ) { + var date = new Date( ngModelCtrl.$modelValue ), + isValid = !isNaN(date); + + if ( isValid ) { + this.activeDate = date; + } else { + $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'); + } + ngModelCtrl.$setValidity('date', isValid); + } + this.refreshView(); + }; + + this.refreshView = function() { + if ( this.element ) { + this._refreshView(); + + var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; + ngModelCtrl.$setValidity('date-disabled', !date || (this.element && !this.isDisabled(date))); + } + }; + + this.createDateObject = function(date, format) { + var model = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; + return { + date: date, + label: dateFilter(date, format), + selected: model && this.compare(date, model) === 0, + disabled: this.isDisabled(date), + current: this.compare(date, new Date()) === 0 + }; + }; + + this.isDisabled = function( date ) { + return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode}))); + }; + + // Split array into smaller arrays + this.split = function(arr, size) { + var arrays = []; + while (arr.length > 0) { + arrays.push(arr.splice(0, size)); + } + return arrays; + }; + + $scope.select = function( date ) { + if ( $scope.datepickerMode === self.minMode ) { + var dt = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : new Date(0, 0, 0, 0, 0, 0, 0); + dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() ); + ngModelCtrl.$setViewValue( dt ); + ngModelCtrl.$render(); + } else { + self.activeDate = date; + $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) - 1 ]; + } + }; + + $scope.move = function( direction ) { + var year = self.activeDate.getFullYear() + direction * (self.step.years || 0), + month = self.activeDate.getMonth() + direction * (self.step.months || 0); + self.activeDate.setFullYear(year, month, 1); + self.refreshView(); + }; + + $scope.toggleMode = function( direction ) { + direction = direction || 1; + + if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) { + return; + } + + $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) + direction ]; + }; + + // Key event mapper + $scope.keys = { 13:'enter', 32:'space', 33:'pageup', 34:'pagedown', 35:'end', 36:'home', 37:'left', 38:'up', 39:'right', 40:'down' }; + + var focusElement = function() { + $timeout(function() { + self.element[0].focus(); + }, 0 , false); + }; + + // Listen for focus requests from popup directive + $scope.$on('datepicker.focus', focusElement); + + $scope.keydown = function( evt ) { + var key = $scope.keys[evt.which]; + + if ( !key || evt.shiftKey || evt.altKey ) { + return; + } + + evt.preventDefault(); + evt.stopPropagation(); + + if (key === 'enter' || key === 'space') { + if ( self.isDisabled(self.activeDate)) { + return; // do nothing + } + $scope.select(self.activeDate); + focusElement(); + } else if (evt.ctrlKey && (key === 'up' || key === 'down')) { + $scope.toggleMode(key === 'up' ? 1 : -1); + focusElement(); + } else { + self.handleKeyDown(key, evt); + self.refreshView(); + } + }; +}]) + +.directive( 'datepicker', function () { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/datepicker.html', + scope: { + datepickerMode: '=?', + dateDisabled: '&' + }, + require: ['datepicker', '?^ngModel'], + controller: 'DatepickerController', + link: function(scope, element, attrs, ctrls) { + var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if ( ngModelCtrl ) { + datepickerCtrl.init( ngModelCtrl ); + } + } + }; +}) + +.directive('daypicker', ['dateFilter', function (dateFilter) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/day.html', + require: '^datepicker', + link: function(scope, element, attrs, ctrl) { + scope.showWeeks = ctrl.showWeeks; + + ctrl.step = { months: 1 }; + ctrl.element = element; + + var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function getDaysInMonth( year, month ) { + return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month]; + } + + function getDates(startDate, n) { + var dates = new Array(n), current = new Date(startDate), i = 0; + current.setHours(12); // Prevent repeated dates because of timezone bug + while ( i < n ) { + dates[i++] = new Date(current); + current.setDate( current.getDate() + 1 ); + } + return dates; + } + + ctrl._refreshView = function() { + var year = ctrl.activeDate.getFullYear(), + month = ctrl.activeDate.getMonth(), + firstDayOfMonth = new Date(year, month, 1), + difference = ctrl.startingDay - firstDayOfMonth.getDay(), + numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference, + firstDate = new Date(firstDayOfMonth); + + if ( numDisplayedFromPreviousMonth > 0 ) { + firstDate.setDate( - numDisplayedFromPreviousMonth + 1 ); + } + + // 42 is the number of days on a six-month calendar + var days = getDates(firstDate, 42); + for (var i = 0; i < 42; i ++) { + days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), { + secondary: days[i].getMonth() !== month, + uid: scope.uniqueId + '-' + i + }); + } + + scope.labels = new Array(7); + for (var j = 0; j < 7; j++) { + scope.labels[j] = { + abbr: dateFilter(days[j].date, ctrl.formatDayHeader), + full: dateFilter(days[j].date, 'EEEE') + }; + } + + scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle); + scope.rows = ctrl.split(days, 7); + + if ( scope.showWeeks ) { + scope.weekNumbers = []; + var weekNumber = getISO8601WeekNumber( scope.rows[0][0].date ), + numWeeks = scope.rows.length; + while( scope.weekNumbers.push(weekNumber++) < numWeeks ) {} + } + }; + + ctrl.compare = function(date1, date2) { + return (new Date( date1.getFullYear(), date1.getMonth(), date1.getDate() ) - new Date( date2.getFullYear(), date2.getMonth(), date2.getDate() ) ); + }; + + function getISO8601WeekNumber(date) { + var checkDate = new Date(date); + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + } + + ctrl.handleKeyDown = function( key, evt ) { + var date = ctrl.activeDate.getDate(); + + if (key === 'left') { + date = date - 1; // up + } else if (key === 'up') { + date = date - 7; // down + } else if (key === 'right') { + date = date + 1; // down + } else if (key === 'down') { + date = date + 7; + } else if (key === 'pageup' || key === 'pagedown') { + var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1); + ctrl.activeDate.setMonth(month, 1); + date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date); + } else if (key === 'home') { + date = 1; + } else if (key === 'end') { + date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()); + } + ctrl.activeDate.setDate(date); + }; + + ctrl.refreshView(); + } + }; +}]) + +.directive('monthpicker', ['dateFilter', function (dateFilter) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/month.html', + require: '^datepicker', + link: function(scope, element, attrs, ctrl) { + ctrl.step = { years: 1 }; + ctrl.element = element; + + ctrl._refreshView = function() { + var months = new Array(12), + year = ctrl.activeDate.getFullYear(); + + for ( var i = 0; i < 12; i++ ) { + months[i] = angular.extend(ctrl.createDateObject(new Date(year, i, 1), ctrl.formatMonth), { + uid: scope.uniqueId + '-' + i + }); + } + + scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle); + scope.rows = ctrl.split(months, 3); + }; + + ctrl.compare = function(date1, date2) { + return new Date( date1.getFullYear(), date1.getMonth() ) - new Date( date2.getFullYear(), date2.getMonth() ); + }; + + ctrl.handleKeyDown = function( key, evt ) { + var date = ctrl.activeDate.getMonth(); + + if (key === 'left') { + date = date - 1; // up + } else if (key === 'up') { + date = date - 3; // down + } else if (key === 'right') { + date = date + 1; // down + } else if (key === 'down') { + date = date + 3; + } else if (key === 'pageup' || key === 'pagedown') { + var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1); + ctrl.activeDate.setFullYear(year); + } else if (key === 'home') { + date = 0; + } else if (key === 'end') { + date = 11; + } + ctrl.activeDate.setMonth(date); + }; + + ctrl.refreshView(); + } + }; +}]) + +.directive('yearpicker', ['dateFilter', function (dateFilter) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/year.html', + require: '^datepicker', + link: function(scope, element, attrs, ctrl) { + var range = ctrl.yearRange; + + ctrl.step = { years: range }; + ctrl.element = element; + + function getStartingYear( year ) { + return parseInt((year - 1) / range, 10) * range + 1; + } + + ctrl._refreshView = function() { + var years = new Array(range); + + for ( var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++ ) { + years[i] = angular.extend(ctrl.createDateObject(new Date(start + i, 0, 1), ctrl.formatYear), { + uid: scope.uniqueId + '-' + i + }); + } + + scope.title = [years[0].label, years[range - 1].label].join(' - '); + scope.rows = ctrl.split(years, 5); + }; + + ctrl.compare = function(date1, date2) { + return date1.getFullYear() - date2.getFullYear(); + }; + + ctrl.handleKeyDown = function( key, evt ) { + var date = ctrl.activeDate.getFullYear(); + + if (key === 'left') { + date = date - 1; // up + } else if (key === 'up') { + date = date - 5; // down + } else if (key === 'right') { + date = date + 1; // down + } else if (key === 'down') { + date = date + 5; + } else if (key === 'pageup' || key === 'pagedown') { + date += (key === 'pageup' ? - 1 : 1) * ctrl.step.years; + } else if (key === 'home') { + date = getStartingYear( ctrl.activeDate.getFullYear() ); + } else if (key === 'end') { + date = getStartingYear( ctrl.activeDate.getFullYear() ) + range - 1; + } + ctrl.activeDate.setFullYear(date); + }; + + ctrl.refreshView(); + } + }; +}]) + +.constant('datepickerPopupConfig', { + datepickerPopup: 'yyyy-MM-dd', + currentText: 'Today', + clearText: 'Clear', + closeText: 'Done', + closeOnDateSelection: true, + appendToBody: false, + showButtonBar: true +}) + +.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig', +function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) { + return { + restrict: 'EA', + require: 'ngModel', + scope: { + isOpen: '=?', + currentText: '@', + clearText: '@', + closeText: '@', + dateDisabled: '&' + }, + link: function(scope, element, attrs, ngModel) { + var dateFormat, + closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection, + appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody; + + scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar; + + scope.getText = function( key ) { + return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text']; + }; + + attrs.$observe('datepickerPopup', function(value) { + dateFormat = value || datepickerPopupConfig.datepickerPopup; + ngModel.$render(); + }); + + // popup element used to display calendar + var popupEl = angular.element('
    '); + popupEl.attr({ + 'ng-model': 'date', + 'ng-change': 'dateSelection()' + }); + + function cameltoDash( string ){ + return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); }); + } + + // datepicker element + var datepickerEl = angular.element(popupEl.children()[0]); + if ( attrs.datepickerOptions ) { + angular.forEach(scope.$parent.$eval(attrs.datepickerOptions), function( value, option ) { + datepickerEl.attr( cameltoDash(option), value ); + }); + } + + scope.watchData = {}; + angular.forEach(['minDate', 'maxDate', 'datepickerMode'], function( key ) { + if ( attrs[key] ) { + var getAttribute = $parse(attrs[key]); + scope.$parent.$watch(getAttribute, function(value){ + scope.watchData[key] = value; + }); + datepickerEl.attr(cameltoDash(key), 'watchData.' + key); + + // Propagate changes from datepicker to outside + if ( key === 'datepickerMode' ) { + var setAttribute = getAttribute.assign; + scope.$watch('watchData.' + key, function(value, oldvalue) { + if ( value !== oldvalue ) { + setAttribute(scope.$parent, value); + } + }); + } + } + }); + if (attrs.dateDisabled) { + datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })'); + } + + function parseDate(viewValue) { + if (!viewValue) { + ngModel.$setValidity('date', true); + return null; + } else if (angular.isDate(viewValue) && !isNaN(viewValue)) { + ngModel.$setValidity('date', true); + return viewValue; + } else if (angular.isString(viewValue)) { + var date = dateParser.parse(viewValue, dateFormat) || new Date(viewValue); + if (isNaN(date)) { + ngModel.$setValidity('date', false); + return undefined; + } else { + ngModel.$setValidity('date', true); + return date; + } + } else { + ngModel.$setValidity('date', false); + return undefined; + } + } + ngModel.$parsers.unshift(parseDate); + + // Inner change + scope.dateSelection = function(dt) { + if (angular.isDefined(dt)) { + scope.date = dt; + } + ngModel.$setViewValue(scope.date); + ngModel.$render(); + + if ( closeOnDateSelection ) { + scope.isOpen = false; + element[0].focus(); + } + }; + + element.bind('input change keyup', function() { + scope.$apply(function() { + scope.date = ngModel.$modelValue; + }); + }); + + // Outter change + ngModel.$render = function() { + var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : ''; + element.val(date); + scope.date = parseDate( ngModel.$modelValue ); + }; + + var documentClickBind = function(event) { + if (scope.isOpen && event.target !== element[0]) { + scope.$apply(function() { + scope.isOpen = false; + }); + } + }; + + var keydown = function(evt, noApply) { + scope.keydown(evt); + }; + element.bind('keydown', keydown); + + scope.keydown = function(evt) { + if (evt.which === 27) { + evt.preventDefault(); + evt.stopPropagation(); + scope.close(); + } else if (evt.which === 40 && !scope.isOpen) { + scope.isOpen = true; + } + }; + + scope.$watch('isOpen', function(value) { + if (value) { + scope.$broadcast('datepicker.focus'); + scope.position = appendToBody ? $position.offset(element) : $position.position(element); + scope.position.top = scope.position.top + element.prop('offsetHeight'); + + $document.bind('click', documentClickBind); + } else { + $document.unbind('click', documentClickBind); + } + }); + + scope.select = function( date ) { + if (date === 'today') { + var today = new Date(); + if (angular.isDate(ngModel.$modelValue)) { + date = new Date(ngModel.$modelValue); + date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate()); + } else { + date = new Date(today.setHours(0, 0, 0, 0)); + } + } + scope.dateSelection( date ); + }; + + scope.close = function() { + scope.isOpen = false; + element[0].focus(); + }; + + var $popup = $compile(popupEl)(scope); + // Prevent jQuery cache memory leak (template is now redundant after linking) + popupEl.remove(); + + if ( appendToBody ) { + $document.find('body').append($popup); + } else { + element.after($popup); + } + + scope.$on('$destroy', function() { + $popup.remove(); + element.unbind('keydown', keydown); + $document.unbind('click', documentClickBind); + }); + } + }; +}]) + +.directive('datepickerPopupWrap', function() { + return { + restrict:'EA', + replace: true, + transclude: true, + templateUrl: 'template/datepicker/popup.html', + link:function (scope, element, attrs) { + element.bind('click', function(event) { + event.preventDefault(); + event.stopPropagation(); + }); + } + }; +}); + +angular.module('ui.bootstrap.dropdown', []) + +.constant('dropdownConfig', { + openClass: 'open' +}) + +.service('dropdownService', ['$document', function($document) { + var openScope = null; + + this.open = function( dropdownScope ) { + if ( !openScope ) { + $document.bind('click', closeDropdown); + $document.bind('keydown', escapeKeyBind); + } + + if ( openScope && openScope !== dropdownScope ) { + openScope.isOpen = false; + } + + openScope = dropdownScope; + }; + + this.close = function( dropdownScope ) { + if ( openScope === dropdownScope ) { + openScope = null; + $document.unbind('click', closeDropdown); + $document.unbind('keydown', escapeKeyBind); + } + }; + + var closeDropdown = function( evt ) { + // This method may still be called during the same mouse event that + // unbound this event handler. So check openScope before proceeding. + if (!openScope) { return; } + + var toggleElement = openScope.getToggleElement(); + if ( evt && toggleElement && toggleElement[0].contains(evt.target) ) { + return; + } + + openScope.$apply(function() { + openScope.isOpen = false; + }); + }; + + var escapeKeyBind = function( evt ) { + if ( evt.which === 27 ) { + openScope.focusToggleElement(); + closeDropdown(); + } + }; +}]) + +.controller('DropdownController', ['$scope', '$attrs', '$parse', 'dropdownConfig', 'dropdownService', '$animate', function($scope, $attrs, $parse, dropdownConfig, dropdownService, $animate) { + var self = this, + scope = $scope.$new(), // create a child scope so we are not polluting original one + openClass = dropdownConfig.openClass, + getIsOpen, + setIsOpen = angular.noop, + toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop; + + this.init = function( element ) { + self.$element = element; + + if ( $attrs.isOpen ) { + getIsOpen = $parse($attrs.isOpen); + setIsOpen = getIsOpen.assign; + + $scope.$watch(getIsOpen, function(value) { + scope.isOpen = !!value; + }); + } + }; + + this.toggle = function( open ) { + return scope.isOpen = arguments.length ? !!open : !scope.isOpen; + }; + + // Allow other directives to watch status + this.isOpen = function() { + return scope.isOpen; + }; + + scope.getToggleElement = function() { + return self.toggleElement; + }; + + scope.focusToggleElement = function() { + if ( self.toggleElement ) { + self.toggleElement[0].focus(); + } + }; + + scope.$watch('isOpen', function( isOpen, wasOpen ) { + $animate[isOpen ? 'addClass' : 'removeClass'](self.$element, openClass); + + if ( isOpen ) { + scope.focusToggleElement(); + dropdownService.open( scope ); + } else { + dropdownService.close( scope ); + } + + setIsOpen($scope, isOpen); + if (angular.isDefined(isOpen) && isOpen !== wasOpen) { + toggleInvoker($scope, { open: !!isOpen }); + } + }); + + $scope.$on('$locationChangeSuccess', function() { + scope.isOpen = false; + }); + + $scope.$on('$destroy', function() { + scope.$destroy(); + }); +}]) + +.directive('dropdown', function() { + return { + controller: 'DropdownController', + link: function(scope, element, attrs, dropdownCtrl) { + dropdownCtrl.init( element ); + } + }; +}) + +.directive('dropdownToggle', function() { + return { + require: '?^dropdown', + link: function(scope, element, attrs, dropdownCtrl) { + if ( !dropdownCtrl ) { + return; + } + + dropdownCtrl.toggleElement = element; + + var toggleDropdown = function(event) { + event.preventDefault(); + + if ( !element.hasClass('disabled') && !attrs.disabled ) { + scope.$apply(function() { + dropdownCtrl.toggle(); + }); + } + }; + + element.bind('click', toggleDropdown); + + // WAI-ARIA + element.attr({ 'aria-haspopup': true, 'aria-expanded': false }); + scope.$watch(dropdownCtrl.isOpen, function( isOpen ) { + element.attr('aria-expanded', !!isOpen); + }); + + scope.$on('$destroy', function() { + element.unbind('click', toggleDropdown); + }); + } + }; +}); + +angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) + +/** + * A helper, internal data structure that acts as a map but also allows getting / removing + * elements in the LIFO order + */ + .factory('$$stackedMap', function () { + return { + createNew: function () { + var stack = []; + + return { + add: function (key, value) { + stack.push({ + key: key, + value: value + }); + }, + get: function (key) { + for (var i = 0; i < stack.length; i++) { + if (key == stack[i].key) { + return stack[i]; + } + } + }, + keys: function() { + var keys = []; + for (var i = 0; i < stack.length; i++) { + keys.push(stack[i].key); + } + return keys; + }, + top: function () { + return stack[stack.length - 1]; + }, + remove: function (key) { + var idx = -1; + for (var i = 0; i < stack.length; i++) { + if (key == stack[i].key) { + idx = i; + break; + } + } + return stack.splice(idx, 1)[0]; + }, + removeTop: function () { + return stack.splice(stack.length - 1, 1)[0]; + }, + length: function () { + return stack.length; + } + }; + } + }; + }) + +/** + * A helper directive for the $modal service. It creates a backdrop element. + */ + .directive('modalBackdrop', ['$timeout', function ($timeout) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/modal/backdrop.html', + link: function (scope, element, attrs) { + scope.backdropClass = attrs.backdropClass || ''; + + scope.animate = false; + + //trigger CSS transitions + $timeout(function () { + scope.animate = true; + }); + } + }; + }]) + + .directive('modalWindow', ['$modalStack', '$timeout', function ($modalStack, $timeout) { + return { + restrict: 'EA', + scope: { + index: '@', + animate: '=' + }, + replace: true, + transclude: true, + templateUrl: function(tElement, tAttrs) { + return tAttrs.templateUrl || 'template/modal/window.html'; + }, + link: function (scope, element, attrs) { + element.addClass(attrs.windowClass || ''); + scope.size = attrs.size; + + $timeout(function () { + // trigger CSS transitions + scope.animate = true; + + /** + * Auto-focusing of a freshly-opened modal element causes any child elements + * with the autofocus attribute to lose focus. This is an issue on touch + * based devices which will show and then hide the onscreen keyboard. + * Attempts to refocus the autofocus element via JavaScript will not reopen + * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus + * the modal element if the modal does not contain an autofocus element. + */ + if (!element[0].querySelectorAll('[autofocus]').length) { + element[0].focus(); + } + }); + + scope.close = function (evt) { + var modal = $modalStack.getTop(); + if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) { + evt.preventDefault(); + evt.stopPropagation(); + $modalStack.dismiss(modal.key, 'backdrop click'); + } + }; + } + }; + }]) + + .directive('modalTransclude', function () { + return { + link: function($scope, $element, $attrs, controller, $transclude) { + $transclude($scope.$parent, function(clone) { + $element.empty(); + $element.append(clone); + }); + } + }; + }) + + .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap', + function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) { + + var OPENED_MODAL_CLASS = 'modal-open'; + + var backdropDomEl, backdropScope; + var openedWindows = $$stackedMap.createNew(); + var $modalStack = {}; + + function backdropIndex() { + var topBackdropIndex = -1; + var opened = openedWindows.keys(); + for (var i = 0; i < opened.length; i++) { + if (openedWindows.get(opened[i]).value.backdrop) { + topBackdropIndex = i; + } + } + return topBackdropIndex; + } + + $rootScope.$watch(backdropIndex, function(newBackdropIndex){ + if (backdropScope) { + backdropScope.index = newBackdropIndex; + } + }); + + function removeModalWindow(modalInstance) { + + var body = $document.find('body').eq(0); + var modalWindow = openedWindows.get(modalInstance).value; + + //clean up the stack + openedWindows.remove(modalInstance); + + //remove window DOM element + removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, function() { + modalWindow.modalScope.$destroy(); + body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0); + checkRemoveBackdrop(); + }); + } + + function checkRemoveBackdrop() { + //remove backdrop if no longer needed + if (backdropDomEl && backdropIndex() == -1) { + var backdropScopeRef = backdropScope; + removeAfterAnimate(backdropDomEl, backdropScope, 150, function () { + backdropScopeRef.$destroy(); + backdropScopeRef = null; + }); + backdropDomEl = undefined; + backdropScope = undefined; + } + } + + function removeAfterAnimate(domEl, scope, emulateTime, done) { + // Closing animation + scope.animate = false; + + var transitionEndEventName = $transition.transitionEndEventName; + if (transitionEndEventName) { + // transition out + var timeout = $timeout(afterAnimating, emulateTime); + + domEl.bind(transitionEndEventName, function () { + $timeout.cancel(timeout); + afterAnimating(); + scope.$apply(); + }); + } else { + // Ensure this call is async + $timeout(afterAnimating); + } + + function afterAnimating() { + if (afterAnimating.done) { + return; + } + afterAnimating.done = true; + + domEl.remove(); + if (done) { + done(); + } + } + } + + $document.bind('keydown', function (evt) { + var modal; + + if (evt.which === 27) { + modal = openedWindows.top(); + if (modal && modal.value.keyboard) { + evt.preventDefault(); + $rootScope.$apply(function () { + $modalStack.dismiss(modal.key, 'escape key press'); + }); + } + } + }); + + $modalStack.open = function (modalInstance, modal) { + + openedWindows.add(modalInstance, { + deferred: modal.deferred, + modalScope: modal.scope, + backdrop: modal.backdrop, + keyboard: modal.keyboard + }); + + var body = $document.find('body').eq(0), + currBackdropIndex = backdropIndex(); + + if (currBackdropIndex >= 0 && !backdropDomEl) { + backdropScope = $rootScope.$new(true); + backdropScope.index = currBackdropIndex; + var angularBackgroundDomEl = angular.element('
    '); + angularBackgroundDomEl.attr('backdrop-class', modal.backdropClass); + backdropDomEl = $compile(angularBackgroundDomEl)(backdropScope); + body.append(backdropDomEl); + } + + var angularDomEl = angular.element('
    '); + angularDomEl.attr({ + 'template-url': modal.windowTemplateUrl, + 'window-class': modal.windowClass, + 'size': modal.size, + 'index': openedWindows.length() - 1, + 'animate': 'animate' + }).html(modal.content); + + var modalDomEl = $compile(angularDomEl)(modal.scope); + openedWindows.top().value.modalDomEl = modalDomEl; + body.append(modalDomEl); + body.addClass(OPENED_MODAL_CLASS); + }; + + $modalStack.close = function (modalInstance, result) { + var modalWindow = openedWindows.get(modalInstance); + if (modalWindow) { + modalWindow.value.deferred.resolve(result); + removeModalWindow(modalInstance); + } + }; + + $modalStack.dismiss = function (modalInstance, reason) { + var modalWindow = openedWindows.get(modalInstance); + if (modalWindow) { + modalWindow.value.deferred.reject(reason); + removeModalWindow(modalInstance); + } + }; + + $modalStack.dismissAll = function (reason) { + var topModal = this.getTop(); + while (topModal) { + this.dismiss(topModal.key, reason); + topModal = this.getTop(); + } + }; + + $modalStack.getTop = function () { + return openedWindows.top(); + }; + + return $modalStack; + }]) + + .provider('$modal', function () { + + var $modalProvider = { + options: { + backdrop: true, //can be also false or 'static' + keyboard: true + }, + $get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack', + function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) { + + var $modal = {}; + + function getTemplatePromise(options) { + return options.template ? $q.when(options.template) : + $http.get(angular.isFunction(options.templateUrl) ? (options.templateUrl)() : options.templateUrl, + {cache: $templateCache}).then(function (result) { + return result.data; + }); + } + + function getResolvePromises(resolves) { + var promisesArr = []; + angular.forEach(resolves, function (value) { + if (angular.isFunction(value) || angular.isArray(value)) { + promisesArr.push($q.when($injector.invoke(value))); + } + }); + return promisesArr; + } + + $modal.open = function (modalOptions) { + + var modalResultDeferred = $q.defer(); + var modalOpenedDeferred = $q.defer(); + + //prepare an instance of a modal to be injected into controllers and returned to a caller + var modalInstance = { + result: modalResultDeferred.promise, + opened: modalOpenedDeferred.promise, + close: function (result) { + $modalStack.close(modalInstance, result); + }, + dismiss: function (reason) { + $modalStack.dismiss(modalInstance, reason); + } + }; + + //merge and clean up options + modalOptions = angular.extend({}, $modalProvider.options, modalOptions); + modalOptions.resolve = modalOptions.resolve || {}; + + //verify options + if (!modalOptions.template && !modalOptions.templateUrl) { + throw new Error('One of template or templateUrl options is required.'); + } + + var templateAndResolvePromise = + $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve))); + + + templateAndResolvePromise.then(function resolveSuccess(tplAndVars) { + + var modalScope = (modalOptions.scope || $rootScope).$new(); + modalScope.$close = modalInstance.close; + modalScope.$dismiss = modalInstance.dismiss; + + var ctrlInstance, ctrlLocals = {}; + var resolveIter = 1; + + //controllers + if (modalOptions.controller) { + ctrlLocals.$scope = modalScope; + ctrlLocals.$modalInstance = modalInstance; + angular.forEach(modalOptions.resolve, function (value, key) { + ctrlLocals[key] = tplAndVars[resolveIter++]; + }); + + ctrlInstance = $controller(modalOptions.controller, ctrlLocals); + if (modalOptions.controllerAs) { + modalScope[modalOptions.controllerAs] = ctrlInstance; + } + } + + $modalStack.open(modalInstance, { + scope: modalScope, + deferred: modalResultDeferred, + content: tplAndVars[0], + backdrop: modalOptions.backdrop, + keyboard: modalOptions.keyboard, + backdropClass: modalOptions.backdropClass, + windowClass: modalOptions.windowClass, + windowTemplateUrl: modalOptions.windowTemplateUrl, + size: modalOptions.size + }); + + }, function resolveError(reason) { + modalResultDeferred.reject(reason); + }); + + templateAndResolvePromise.then(function () { + modalOpenedDeferred.resolve(true); + }, function () { + modalOpenedDeferred.reject(false); + }); + + return modalInstance; + }; + + return $modal; + }] + }; + + return $modalProvider; + }); + +angular.module('ui.bootstrap.pagination', []) + +.controller('PaginationController', ['$scope', '$attrs', '$parse', function ($scope, $attrs, $parse) { + var self = this, + ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl + setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop; + + this.init = function(ngModelCtrl_, config) { + ngModelCtrl = ngModelCtrl_; + this.config = config; + + ngModelCtrl.$render = function() { + self.render(); + }; + + if ($attrs.itemsPerPage) { + $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) { + self.itemsPerPage = parseInt(value, 10); + $scope.totalPages = self.calculateTotalPages(); + }); + } else { + this.itemsPerPage = config.itemsPerPage; + } + }; + + this.calculateTotalPages = function() { + var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage); + return Math.max(totalPages || 0, 1); + }; + + this.render = function() { + $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1; + }; + + $scope.selectPage = function(page) { + if ( $scope.page !== page && page > 0 && page <= $scope.totalPages) { + ngModelCtrl.$setViewValue(page); + ngModelCtrl.$render(); + } + }; + + $scope.getText = function( key ) { + return $scope[key + 'Text'] || self.config[key + 'Text']; + }; + $scope.noPrevious = function() { + return $scope.page === 1; + }; + $scope.noNext = function() { + return $scope.page === $scope.totalPages; + }; + + $scope.$watch('totalItems', function() { + $scope.totalPages = self.calculateTotalPages(); + }); + + $scope.$watch('totalPages', function(value) { + setNumPages($scope.$parent, value); // Readonly variable + + if ( $scope.page > value ) { + $scope.selectPage(value); + } else { + ngModelCtrl.$render(); + } + }); +}]) + +.constant('paginationConfig', { + itemsPerPage: 10, + boundaryLinks: false, + directionLinks: true, + firstText: 'First', + previousText: 'Previous', + nextText: 'Next', + lastText: 'Last', + rotate: true +}) + +.directive('pagination', ['$parse', 'paginationConfig', function($parse, paginationConfig) { + return { + restrict: 'EA', + scope: { + totalItems: '=', + firstText: '@', + previousText: '@', + nextText: '@', + lastText: '@' + }, + require: ['pagination', '?ngModel'], + controller: 'PaginationController', + templateUrl: 'template/pagination/pagination.html', + replace: true, + link: function(scope, element, attrs, ctrls) { + var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if (!ngModelCtrl) { + return; // do nothing if no ng-model + } + + // Setup configuration parameters + var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize, + rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate; + scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks; + scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks; + + paginationCtrl.init(ngModelCtrl, paginationConfig); + + if (attrs.maxSize) { + scope.$parent.$watch($parse(attrs.maxSize), function(value) { + maxSize = parseInt(value, 10); + paginationCtrl.render(); + }); + } + + // Create page object used in template + function makePage(number, text, isActive) { + return { + number: number, + text: text, + active: isActive + }; + } + + function getPages(currentPage, totalPages) { + var pages = []; + + // Default page limits + var startPage = 1, endPage = totalPages; + var isMaxSized = ( angular.isDefined(maxSize) && maxSize < totalPages ); + + // recompute if maxSize + if ( isMaxSized ) { + if ( rotate ) { + // Current page is displayed in the middle of the visible ones + startPage = Math.max(currentPage - Math.floor(maxSize/2), 1); + endPage = startPage + maxSize - 1; + + // Adjust if limit is exceeded + if (endPage > totalPages) { + endPage = totalPages; + startPage = endPage - maxSize + 1; + } + } else { + // Visible pages are paginated with maxSize + startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1; + + // Adjust last page if limit is exceeded + endPage = Math.min(startPage + maxSize - 1, totalPages); + } + } + + // Add page number links + for (var number = startPage; number <= endPage; number++) { + var page = makePage(number, number, number === currentPage); + pages.push(page); + } + + // Add links to move between page sets + if ( isMaxSized && ! rotate ) { + if ( startPage > 1 ) { + var previousPageSet = makePage(startPage - 1, '...', false); + pages.unshift(previousPageSet); + } + + if ( endPage < totalPages ) { + var nextPageSet = makePage(endPage + 1, '...', false); + pages.push(nextPageSet); + } + } + + return pages; + } + + var originalRender = paginationCtrl.render; + paginationCtrl.render = function() { + originalRender(); + if (scope.page > 0 && scope.page <= scope.totalPages) { + scope.pages = getPages(scope.page, scope.totalPages); + } + }; + } + }; +}]) + +.constant('pagerConfig', { + itemsPerPage: 10, + previousText: '« Previous', + nextText: 'Next »', + align: true +}) + +.directive('pager', ['pagerConfig', function(pagerConfig) { + return { + restrict: 'EA', + scope: { + totalItems: '=', + previousText: '@', + nextText: '@' + }, + require: ['pager', '?ngModel'], + controller: 'PaginationController', + templateUrl: 'template/pagination/pager.html', + replace: true, + link: function(scope, element, attrs, ctrls) { + var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if (!ngModelCtrl) { + return; // do nothing if no ng-model + } + + scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align; + paginationCtrl.init(ngModelCtrl, pagerConfig); + } + }; +}]); + +/** + * The following features are still outstanding: animation as a + * function, placement as a function, inside, support for more triggers than + * just mouse enter/leave, html tooltips, and selector delegation. + */ +angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap.bindHtml' ] ) + +/** + * The $tooltip service creates tooltip- and popover-like directives as well as + * houses global options for them. + */ +.provider( '$tooltip', function () { + // The default options tooltip and popover. + var defaultOptions = { + placement: 'top', + animation: true, + popupDelay: 0 + }; + + // Default hide triggers for each show trigger + var triggerMap = { + 'mouseenter': 'mouseleave', + 'click': 'click', + 'focus': 'blur' + }; + + // The options specified to the provider globally. + var globalOptions = {}; + + /** + * `options({})` allows global configuration of all tooltips in the + * application. + * + * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) { + * // place tooltips left instead of top by default + * $tooltipProvider.options( { placement: 'left' } ); + * }); + */ + this.options = function( value ) { + angular.extend( globalOptions, value ); + }; + + /** + * This allows you to extend the set of trigger mappings available. E.g.: + * + * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' ); + */ + this.setTriggers = function setTriggers ( triggers ) { + angular.extend( triggerMap, triggers ); + }; + + /** + * This is a helper function for translating camel-case to snake-case. + */ + function snake_case(name){ + var regexp = /[A-Z]/g; + var separator = '-'; + return name.replace(regexp, function(letter, pos) { + return (pos ? separator : '') + letter.toLowerCase(); + }); + } + + /** + * Returns the actual instance of the $tooltip service. + * TODO support multiple triggers + */ + this.$get = [ '$window', '$compile', '$timeout', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $document, $position, $interpolate ) { + return function $tooltip ( type, prefix, defaultTriggerShow ) { + var options = angular.extend( {}, defaultOptions, globalOptions ); + + /** + * Returns an object of show and hide triggers. + * + * If a trigger is supplied, + * it is used to show the tooltip; otherwise, it will use the `trigger` + * option passed to the `$tooltipProvider.options` method; else it will + * default to the trigger supplied to this directive factory. + * + * The hide trigger is based on the show trigger. If the `trigger` option + * was passed to the `$tooltipProvider.options` method, it will use the + * mapped trigger from `triggerMap` or the passed trigger if the map is + * undefined; otherwise, it uses the `triggerMap` value of the show + * trigger; else it will just use the show trigger. + */ + function getTriggers ( trigger ) { + var show = trigger || options.trigger || defaultTriggerShow; + var hide = triggerMap[show] || show; + return { + show: show, + hide: hide + }; + } + + var directiveName = snake_case( type ); + + var startSym = $interpolate.startSymbol(); + var endSym = $interpolate.endSymbol(); + var template = + '
    '+ + '
    '; + + return { + restrict: 'EA', + compile: function (tElem, tAttrs) { + var tooltipLinker = $compile( template ); + + return function link ( scope, element, attrs ) { + var tooltip; + var tooltipLinkedScope; + var transitionTimeout; + var popupTimeout; + var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false; + var triggers = getTriggers( undefined ); + var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']); + var ttScope = scope.$new(true); + + var positionTooltip = function () { + + var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody); + ttPosition.top += 'px'; + ttPosition.left += 'px'; + + // Now set the calculated positioning. + tooltip.css( ttPosition ); + }; + + // By default, the tooltip is not open. + // TODO add ability to start tooltip opened + ttScope.isOpen = false; + + function toggleTooltipBind () { + if ( ! ttScope.isOpen ) { + showTooltipBind(); + } else { + hideTooltipBind(); + } + } + + // Show the tooltip with delay if specified, otherwise show it immediately + function showTooltipBind() { + if(hasEnableExp && !scope.$eval(attrs[prefix+'Enable'])) { + return; + } + + prepareTooltip(); + + if ( ttScope.popupDelay ) { + // Do nothing if the tooltip was already scheduled to pop-up. + // This happens if show is triggered multiple times before any hide is triggered. + if (!popupTimeout) { + popupTimeout = $timeout( show, ttScope.popupDelay, false ); + popupTimeout.then(function(reposition){reposition();}); + } + } else { + show()(); + } + } + + function hideTooltipBind () { + scope.$apply(function () { + hide(); + }); + } + + // Show the tooltip popup element. + function show() { + + popupTimeout = null; + + // If there is a pending remove transition, we must cancel it, lest the + // tooltip be mysteriously removed. + if ( transitionTimeout ) { + $timeout.cancel( transitionTimeout ); + transitionTimeout = null; + } + + // Don't show empty tooltips. + if ( ! ttScope.content ) { + return angular.noop; + } + + createTooltip(); + + // Set the initial positioning. + tooltip.css({ top: 0, left: 0, display: 'block' }); + ttScope.$digest(); + + positionTooltip(); + + // And show the tooltip. + ttScope.isOpen = true; + ttScope.$digest(); // digest required as $apply is not called + + // Return positioning function as promise callback for correct + // positioning after draw. + return positionTooltip; + } + + // Hide the tooltip popup element. + function hide() { + // First things first: we don't show it anymore. + ttScope.isOpen = false; + + //if tooltip is going to be shown after delay, we must cancel this + $timeout.cancel( popupTimeout ); + popupTimeout = null; + + // And now we remove it from the DOM. However, if we have animation, we + // need to wait for it to expire beforehand. + // FIXME: this is a placeholder for a port of the transitions library. + if ( ttScope.animation ) { + if (!transitionTimeout) { + transitionTimeout = $timeout(removeTooltip, 500); + } + } else { + removeTooltip(); + } + } + + function createTooltip() { + // There can only be one tooltip element per directive shown at once. + if (tooltip) { + removeTooltip(); + } + tooltipLinkedScope = ttScope.$new(); + tooltip = tooltipLinker(tooltipLinkedScope, function (tooltip) { + if ( appendToBody ) { + $document.find( 'body' ).append( tooltip ); + } else { + element.after( tooltip ); + } + }); + } + + function removeTooltip() { + transitionTimeout = null; + if (tooltip) { + tooltip.remove(); + tooltip = null; + } + if (tooltipLinkedScope) { + tooltipLinkedScope.$destroy(); + tooltipLinkedScope = null; + } + } + + function prepareTooltip() { + prepPlacement(); + prepPopupDelay(); + } + + /** + * Observe the relevant attributes. + */ + attrs.$observe( type, function ( val ) { + ttScope.content = val; + + if (!val && ttScope.isOpen ) { + hide(); + } + }); + + attrs.$observe( prefix+'Title', function ( val ) { + ttScope.title = val; + }); + + function prepPlacement() { + var val = attrs[ prefix + 'Placement' ]; + ttScope.placement = angular.isDefined( val ) ? val : options.placement; + } + + function prepPopupDelay() { + var val = attrs[ prefix + 'PopupDelay' ]; + var delay = parseInt( val, 10 ); + ttScope.popupDelay = ! isNaN(delay) ? delay : options.popupDelay; + } + + var unregisterTriggers = function () { + element.unbind(triggers.show, showTooltipBind); + element.unbind(triggers.hide, hideTooltipBind); + }; + + function prepTriggers() { + var val = attrs[ prefix + 'Trigger' ]; + unregisterTriggers(); + + triggers = getTriggers( val ); + + if ( triggers.show === triggers.hide ) { + element.bind( triggers.show, toggleTooltipBind ); + } else { + element.bind( triggers.show, showTooltipBind ); + element.bind( triggers.hide, hideTooltipBind ); + } + } + prepTriggers(); + + var animation = scope.$eval(attrs[prefix + 'Animation']); + ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation; + + var appendToBodyVal = scope.$eval(attrs[prefix + 'AppendToBody']); + appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody; + + // if a tooltip is attached to we need to remove it on + // location change as its parent scope will probably not be destroyed + // by the change. + if ( appendToBody ) { + scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess () { + if ( ttScope.isOpen ) { + hide(); + } + }); + } + + // Make sure tooltip is destroyed and removed. + scope.$on('$destroy', function onDestroyTooltip() { + $timeout.cancel( transitionTimeout ); + $timeout.cancel( popupTimeout ); + unregisterTriggers(); + removeTooltip(); + ttScope = null; + }); + }; + } + }; + }; + }]; +}) + +.directive( 'tooltipPopup', function () { + return { + restrict: 'EA', + replace: true, + scope: { content: '@', placement: '@', animation: '&', isOpen: '&' }, + templateUrl: 'template/tooltip/tooltip-popup.html' + }; +}) + +.directive( 'tooltip', [ '$tooltip', function ( $tooltip ) { + return $tooltip( 'tooltip', 'tooltip', 'mouseenter' ); +}]) + +.directive( 'tooltipHtmlUnsafePopup', function () { + return { + restrict: 'EA', + replace: true, + scope: { content: '@', placement: '@', animation: '&', isOpen: '&' }, + templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html' + }; +}) + +.directive( 'tooltipHtmlUnsafe', [ '$tooltip', function ( $tooltip ) { + return $tooltip( 'tooltipHtmlUnsafe', 'tooltip', 'mouseenter' ); +}]); + +/** + * The following features are still outstanding: popup delay, animation as a + * function, placement as a function, inside, support for more triggers than + * just mouse enter/leave, html popovers, and selector delegatation. + */ +angular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] ) + +.directive( 'popoverPopup', function () { + return { + restrict: 'EA', + replace: true, + scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' }, + templateUrl: 'template/popover/popover.html' + }; +}) + +.directive( 'popover', [ '$tooltip', function ( $tooltip ) { + return $tooltip( 'popover', 'popover', 'click' ); +}]); + +angular.module('ui.bootstrap.progressbar', []) + +.constant('progressConfig', { + animate: true, + max: 100 +}) + +.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', function($scope, $attrs, progressConfig) { + var self = this, + animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate; + + this.bars = []; + $scope.max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max; + + this.addBar = function(bar, element) { + if ( !animate ) { + element.css({'transition': 'none'}); + } + + this.bars.push(bar); + + bar.$watch('value', function( value ) { + bar.percent = +(100 * value / $scope.max).toFixed(2); + }); + + bar.$on('$destroy', function() { + element = null; + self.removeBar(bar); + }); + }; + + this.removeBar = function(bar) { + this.bars.splice(this.bars.indexOf(bar), 1); + }; +}]) + +.directive('progress', function() { + return { + restrict: 'EA', + replace: true, + transclude: true, + controller: 'ProgressController', + require: 'progress', + scope: {}, + templateUrl: 'template/progressbar/progress.html' + }; +}) + +.directive('bar', function() { + return { + restrict: 'EA', + replace: true, + transclude: true, + require: '^progress', + scope: { + value: '=', + type: '@' + }, + templateUrl: 'template/progressbar/bar.html', + link: function(scope, element, attrs, progressCtrl) { + progressCtrl.addBar(scope, element); + } + }; +}) + +.directive('progressbar', function() { + return { + restrict: 'EA', + replace: true, + transclude: true, + controller: 'ProgressController', + scope: { + value: '=', + type: '@' + }, + templateUrl: 'template/progressbar/progressbar.html', + link: function(scope, element, attrs, progressCtrl) { + progressCtrl.addBar(scope, angular.element(element.children()[0])); + } + }; +}); +angular.module('ui.bootstrap.rating', []) + +.constant('ratingConfig', { + max: 5, + stateOn: null, + stateOff: null +}) + +.controller('RatingController', ['$scope', '$attrs', 'ratingConfig', function($scope, $attrs, ratingConfig) { + var ngModelCtrl = { $setViewValue: angular.noop }; + + this.init = function(ngModelCtrl_) { + ngModelCtrl = ngModelCtrl_; + ngModelCtrl.$render = this.render; + + this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn; + this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff; + + var ratingStates = angular.isDefined($attrs.ratingStates) ? $scope.$parent.$eval($attrs.ratingStates) : + new Array( angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max ); + $scope.range = this.buildTemplateObjects(ratingStates); + }; + + this.buildTemplateObjects = function(states) { + for (var i = 0, n = states.length; i < n; i++) { + states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff }, states[i]); + } + return states; + }; + + $scope.rate = function(value) { + if ( !$scope.readonly && value >= 0 && value <= $scope.range.length ) { + ngModelCtrl.$setViewValue(value); + ngModelCtrl.$render(); + } + }; + + $scope.enter = function(value) { + if ( !$scope.readonly ) { + $scope.value = value; + } + $scope.onHover({value: value}); + }; + + $scope.reset = function() { + $scope.value = ngModelCtrl.$viewValue; + $scope.onLeave(); + }; + + $scope.onKeydown = function(evt) { + if (/(37|38|39|40)/.test(evt.which)) { + evt.preventDefault(); + evt.stopPropagation(); + $scope.rate( $scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1) ); + } + }; + + this.render = function() { + $scope.value = ngModelCtrl.$viewValue; + }; +}]) + +.directive('rating', function() { + return { + restrict: 'EA', + require: ['rating', 'ngModel'], + scope: { + readonly: '=?', + onHover: '&', + onLeave: '&' + }, + controller: 'RatingController', + templateUrl: 'template/rating/rating.html', + replace: true, + link: function(scope, element, attrs, ctrls) { + var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if ( ngModelCtrl ) { + ratingCtrl.init( ngModelCtrl ); + } + } + }; +}); + +/** + * @ngdoc overview + * @name ui.bootstrap.tabs + * + * @description + * AngularJS version of the tabs directive. + */ + +angular.module('ui.bootstrap.tabs', []) + +.controller('TabsetController', ['$scope', function TabsetCtrl($scope) { + var ctrl = this, + tabs = ctrl.tabs = $scope.tabs = []; + + ctrl.select = function(selectedTab) { + angular.forEach(tabs, function(tab) { + if (tab.active && tab !== selectedTab) { + tab.active = false; + tab.onDeselect(); + } + }); + selectedTab.active = true; + selectedTab.onSelect(); + }; + + ctrl.addTab = function addTab(tab) { + tabs.push(tab); + // we can't run the select function on the first tab + // since that would select it twice + if (tabs.length === 1) { + tab.active = true; + } else if (tab.active) { + ctrl.select(tab); + } + }; + + ctrl.removeTab = function removeTab(tab) { + var index = tabs.indexOf(tab); + //Select a new tab if the tab to be removed is selected and not destroyed + if (tab.active && tabs.length > 1 && !destroyed) { + //If this is the last tab, select the previous tab. else, the next tab. + var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1; + ctrl.select(tabs[newActiveIndex]); + } + tabs.splice(index, 1); + }; + + var destroyed; + $scope.$on('$destroy', function() { + destroyed = true; + }); +}]) + +/** + * @ngdoc directive + * @name ui.bootstrap.tabs.directive:tabset + * @restrict EA + * + * @description + * Tabset is the outer container for the tabs directive + * + * @param {boolean=} vertical Whether or not to use vertical styling for the tabs. + * @param {boolean=} justified Whether or not to use justified styling for the tabs. + * + * @example + + + + First Content! + Second Content! + +
    + + First Vertical Content! + Second Vertical Content! + + + First Justified Content! + Second Justified Content! + +
    +
    + */ +.directive('tabset', function() { + return { + restrict: 'EA', + transclude: true, + replace: true, + scope: { + type: '@' + }, + controller: 'TabsetController', + templateUrl: 'template/tabs/tabset.html', + link: function(scope, element, attrs) { + scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false; + scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false; + } + }; +}) + +/** + * @ngdoc directive + * @name ui.bootstrap.tabs.directive:tab + * @restrict EA + * + * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}. + * @param {string=} select An expression to evaluate when the tab is selected. + * @param {boolean=} active A binding, telling whether or not this tab is selected. + * @param {boolean=} disabled A binding, telling whether or not this tab is disabled. + * + * @description + * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}. + * + * @example + + +
    + + +
    + + First Tab + + Alert me! + Second Tab, with alert callback and html heading! + + + {{item.content}} + + +
    +
    + + function TabsDemoCtrl($scope) { + $scope.items = [ + { title:"Dynamic Title 1", content:"Dynamic Item 0" }, + { title:"Dynamic Title 2", content:"Dynamic Item 1", disabled: true } + ]; + + $scope.alertMe = function() { + setTimeout(function() { + alert("You've selected the alert tab!"); + }); + }; + }; + +
    + */ + +/** + * @ngdoc directive + * @name ui.bootstrap.tabs.directive:tabHeading + * @restrict EA + * + * @description + * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element. + * + * @example + + + + + HTML in my titles?! + And some content, too! + + + Icon heading?!? + That's right. + + + + + */ +.directive('tab', ['$parse', function($parse) { + return { + require: '^tabset', + restrict: 'EA', + replace: true, + templateUrl: 'template/tabs/tab.html', + transclude: true, + scope: { + active: '=?', + heading: '@', + onSelect: '&select', //This callback is called in contentHeadingTransclude + //once it inserts the tab's content into the dom + onDeselect: '&deselect' + }, + controller: function() { + //Empty controller so other directives can require being 'under' a tab + }, + compile: function(elm, attrs, transclude) { + return function postLink(scope, elm, attrs, tabsetCtrl) { + scope.$watch('active', function(active) { + if (active) { + tabsetCtrl.select(scope); + } + }); + + scope.disabled = false; + if ( attrs.disabled ) { + scope.$parent.$watch($parse(attrs.disabled), function(value) { + scope.disabled = !! value; + }); + } + + scope.select = function() { + if ( !scope.disabled ) { + scope.active = true; + } + }; + + tabsetCtrl.addTab(scope); + scope.$on('$destroy', function() { + tabsetCtrl.removeTab(scope); + }); + + //We need to transclude later, once the content container is ready. + //when this link happens, we're inside a tab heading. + scope.$transcludeFn = transclude; + }; + } + }; +}]) + +.directive('tabHeadingTransclude', [function() { + return { + restrict: 'A', + require: '^tab', + link: function(scope, elm, attrs, tabCtrl) { + scope.$watch('headingElement', function updateHeadingElement(heading) { + if (heading) { + elm.html(''); + elm.append(heading); + } + }); + } + }; +}]) + +.directive('tabContentTransclude', function() { + return { + restrict: 'A', + require: '^tabset', + link: function(scope, elm, attrs) { + var tab = scope.$eval(attrs.tabContentTransclude); + + //Now our tab is ready to be transcluded: both the tab heading area + //and the tab content area are loaded. Transclude 'em both. + tab.$transcludeFn(tab.$parent, function(contents) { + angular.forEach(contents, function(node) { + if (isTabHeading(node)) { + //Let tabHeadingTransclude know. + tab.headingElement = node; + } else { + elm.append(node); + } + }); + }); + } + }; + function isTabHeading(node) { + return node.tagName && ( + node.hasAttribute('tab-heading') || + node.hasAttribute('data-tab-heading') || + node.tagName.toLowerCase() === 'tab-heading' || + node.tagName.toLowerCase() === 'data-tab-heading' + ); + } +}) + +; + +angular.module('ui.bootstrap.timepicker', []) + +.constant('timepickerConfig', { + hourStep: 1, + minuteStep: 1, + showMeridian: true, + meridians: null, + readonlyInput: false, + mousewheel: true +}) + +.controller('TimepickerController', ['$scope', '$attrs', '$parse', '$log', '$locale', 'timepickerConfig', function($scope, $attrs, $parse, $log, $locale, timepickerConfig) { + var selected = new Date(), + ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl + meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS; + + this.init = function( ngModelCtrl_, inputs ) { + ngModelCtrl = ngModelCtrl_; + ngModelCtrl.$render = this.render; + + var hoursInputEl = inputs.eq(0), + minutesInputEl = inputs.eq(1); + + var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel; + if ( mousewheel ) { + this.setupMousewheelEvents( hoursInputEl, minutesInputEl ); + } + + $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput; + this.setupInputEvents( hoursInputEl, minutesInputEl ); + }; + + var hourStep = timepickerConfig.hourStep; + if ($attrs.hourStep) { + $scope.$parent.$watch($parse($attrs.hourStep), function(value) { + hourStep = parseInt(value, 10); + }); + } + + var minuteStep = timepickerConfig.minuteStep; + if ($attrs.minuteStep) { + $scope.$parent.$watch($parse($attrs.minuteStep), function(value) { + minuteStep = parseInt(value, 10); + }); + } + + // 12H / 24H mode + $scope.showMeridian = timepickerConfig.showMeridian; + if ($attrs.showMeridian) { + $scope.$parent.$watch($parse($attrs.showMeridian), function(value) { + $scope.showMeridian = !!value; + + if ( ngModelCtrl.$error.time ) { + // Evaluate from template + var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate(); + if (angular.isDefined( hours ) && angular.isDefined( minutes )) { + selected.setHours( hours ); + refresh(); + } + } else { + updateTemplate(); + } + }); + } + + // Get $scope.hours in 24H mode if valid + function getHoursFromTemplate ( ) { + var hours = parseInt( $scope.hours, 10 ); + var valid = ( $scope.showMeridian ) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24); + if ( !valid ) { + return undefined; + } + + if ( $scope.showMeridian ) { + if ( hours === 12 ) { + hours = 0; + } + if ( $scope.meridian === meridians[1] ) { + hours = hours + 12; + } + } + return hours; + } + + function getMinutesFromTemplate() { + var minutes = parseInt($scope.minutes, 10); + return ( minutes >= 0 && minutes < 60 ) ? minutes : undefined; + } + + function pad( value ) { + return ( angular.isDefined(value) && value.toString().length < 2 ) ? '0' + value : value; + } + + // Respond on mousewheel spin + this.setupMousewheelEvents = function( hoursInputEl, minutesInputEl ) { + var isScrollingUp = function(e) { + if (e.originalEvent) { + e = e.originalEvent; + } + //pick correct delta variable depending on event + var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY; + return (e.detail || delta > 0); + }; + + hoursInputEl.bind('mousewheel wheel', function(e) { + $scope.$apply( (isScrollingUp(e)) ? $scope.incrementHours() : $scope.decrementHours() ); + e.preventDefault(); + }); + + minutesInputEl.bind('mousewheel wheel', function(e) { + $scope.$apply( (isScrollingUp(e)) ? $scope.incrementMinutes() : $scope.decrementMinutes() ); + e.preventDefault(); + }); + + }; + + this.setupInputEvents = function( hoursInputEl, minutesInputEl ) { + if ( $scope.readonlyInput ) { + $scope.updateHours = angular.noop; + $scope.updateMinutes = angular.noop; + return; + } + + var invalidate = function(invalidHours, invalidMinutes) { + ngModelCtrl.$setViewValue( null ); + ngModelCtrl.$setValidity('time', false); + if (angular.isDefined(invalidHours)) { + $scope.invalidHours = invalidHours; + } + if (angular.isDefined(invalidMinutes)) { + $scope.invalidMinutes = invalidMinutes; + } + }; + + $scope.updateHours = function() { + var hours = getHoursFromTemplate(); + + if ( angular.isDefined(hours) ) { + selected.setHours( hours ); + refresh( 'h' ); + } else { + invalidate(true); + } + }; + + hoursInputEl.bind('blur', function(e) { + if ( !$scope.invalidHours && $scope.hours < 10) { + $scope.$apply( function() { + $scope.hours = pad( $scope.hours ); + }); + } + }); + + $scope.updateMinutes = function() { + var minutes = getMinutesFromTemplate(); + + if ( angular.isDefined(minutes) ) { + selected.setMinutes( minutes ); + refresh( 'm' ); + } else { + invalidate(undefined, true); + } + }; + + minutesInputEl.bind('blur', function(e) { + if ( !$scope.invalidMinutes && $scope.minutes < 10 ) { + $scope.$apply( function() { + $scope.minutes = pad( $scope.minutes ); + }); + } + }); + + }; + + this.render = function() { + var date = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : null; + + if ( isNaN(date) ) { + ngModelCtrl.$setValidity('time', false); + $log.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'); + } else { + if ( date ) { + selected = date; + } + makeValid(); + updateTemplate(); + } + }; + + // Call internally when we know that model is valid. + function refresh( keyboardChange ) { + makeValid(); + ngModelCtrl.$setViewValue( new Date(selected) ); + updateTemplate( keyboardChange ); + } + + function makeValid() { + ngModelCtrl.$setValidity('time', true); + $scope.invalidHours = false; + $scope.invalidMinutes = false; + } + + function updateTemplate( keyboardChange ) { + var hours = selected.getHours(), minutes = selected.getMinutes(); + + if ( $scope.showMeridian ) { + hours = ( hours === 0 || hours === 12 ) ? 12 : hours % 12; // Convert 24 to 12 hour system + } + + $scope.hours = keyboardChange === 'h' ? hours : pad(hours); + $scope.minutes = keyboardChange === 'm' ? minutes : pad(minutes); + $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1]; + } + + function addMinutes( minutes ) { + var dt = new Date( selected.getTime() + minutes * 60000 ); + selected.setHours( dt.getHours(), dt.getMinutes() ); + refresh(); + } + + $scope.incrementHours = function() { + addMinutes( hourStep * 60 ); + }; + $scope.decrementHours = function() { + addMinutes( - hourStep * 60 ); + }; + $scope.incrementMinutes = function() { + addMinutes( minuteStep ); + }; + $scope.decrementMinutes = function() { + addMinutes( - minuteStep ); + }; + $scope.toggleMeridian = function() { + addMinutes( 12 * 60 * (( selected.getHours() < 12 ) ? 1 : -1) ); + }; +}]) + +.directive('timepicker', function () { + return { + restrict: 'EA', + require: ['timepicker', '?^ngModel'], + controller:'TimepickerController', + replace: true, + scope: {}, + templateUrl: 'template/timepicker/timepicker.html', + link: function(scope, element, attrs, ctrls) { + var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if ( ngModelCtrl ) { + timepickerCtrl.init( ngModelCtrl, element.find('input') ); + } + } + }; +}); + +angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml']) + +/** + * A helper service that can parse typeahead's syntax (string provided by users) + * Extracted to a separate service for ease of unit testing + */ + .factory('typeaheadParser', ['$parse', function ($parse) { + + // 00000111000000000000022200000000000000003333333333333330000000000044000 + var TYPEAHEAD_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/; + + return { + parse:function (input) { + + var match = input.match(TYPEAHEAD_REGEXP); + if (!match) { + throw new Error( + 'Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_"' + + ' but got "' + input + '".'); + } + + return { + itemName:match[3], + source:$parse(match[4]), + viewMapper:$parse(match[2] || match[1]), + modelMapper:$parse(match[1]) + }; + } + }; +}]) + + .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser', + function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) { + + var HOT_KEYS = [9, 13, 27, 38, 40]; + + return { + require:'ngModel', + link:function (originalScope, element, attrs, modelCtrl) { + + //SUPPORTED ATTRIBUTES (OPTIONS) + + //minimal no of characters that needs to be entered before typeahead kicks-in + var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1; + + //minimal wait time after last character typed before typehead kicks-in + var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0; + + //should it restrict model values to the ones selected from the popup only? + var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false; + + //binding to a variable that indicates if matches are being retrieved asynchronously + var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop; + + //a callback executed when a match is selected + var onSelectCallback = $parse(attrs.typeaheadOnSelect); + + var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined; + + var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false; + + var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false; + + //INTERNAL VARIABLES + + //model setter executed upon match selection + var $setModelValue = $parse(attrs.ngModel).assign; + + //expressions used by typeahead + var parserResult = typeaheadParser.parse(attrs.typeahead); + + var hasFocus; + + //create a child scope for the typeahead directive so we are not polluting original scope + //with typeahead-specific data (matches, query etc.) + var scope = originalScope.$new(); + originalScope.$on('$destroy', function(){ + scope.$destroy(); + }); + + // WAI-ARIA + var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000); + element.attr({ + 'aria-autocomplete': 'list', + 'aria-expanded': false, + 'aria-owns': popupId + }); + + //pop-up element used to display matches + var popUpEl = angular.element('
    '); + popUpEl.attr({ + id: popupId, + matches: 'matches', + active: 'activeIdx', + select: 'select(activeIdx)', + query: 'query', + position: 'position' + }); + //custom item template + if (angular.isDefined(attrs.typeaheadTemplateUrl)) { + popUpEl.attr('template-url', attrs.typeaheadTemplateUrl); + } + + var resetMatches = function() { + scope.matches = []; + scope.activeIdx = -1; + element.attr('aria-expanded', false); + }; + + var getMatchId = function(index) { + return popupId + '-option-' + index; + }; + + // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead. + // This attribute is added or removed automatically when the `activeIdx` changes. + scope.$watch('activeIdx', function(index) { + if (index < 0) { + element.removeAttr('aria-activedescendant'); + } else { + element.attr('aria-activedescendant', getMatchId(index)); + } + }); + + var getMatchesAsync = function(inputValue) { + + var locals = {$viewValue: inputValue}; + isLoadingSetter(originalScope, true); + $q.when(parserResult.source(originalScope, locals)).then(function(matches) { + + //it might happen that several async queries were in progress if a user were typing fast + //but we are interested only in responses that correspond to the current view value + var onCurrentRequest = (inputValue === modelCtrl.$viewValue); + if (onCurrentRequest && hasFocus) { + if (matches.length > 0) { + + scope.activeIdx = focusFirst ? 0 : -1; + scope.matches.length = 0; + + //transform labels + for(var i=0; i= minSearch) { + if (waitTime > 0) { + cancelPreviousTimeout(); + scheduleSearchWithTimeout(inputValue); + } else { + getMatchesAsync(inputValue); + } + } else { + isLoadingSetter(originalScope, false); + cancelPreviousTimeout(); + resetMatches(); + } + + if (isEditable) { + return inputValue; + } else { + if (!inputValue) { + // Reset in case user had typed something previously. + modelCtrl.$setValidity('editable', true); + return inputValue; + } else { + modelCtrl.$setValidity('editable', false); + return undefined; + } + } + }); + + modelCtrl.$formatters.push(function (modelValue) { + + var candidateViewValue, emptyViewValue; + var locals = {}; + + if (inputFormatter) { + + locals.$model = modelValue; + return inputFormatter(originalScope, locals); + + } else { + + //it might happen that we don't have enough info to properly render input value + //we need to check for this situation and simply return model value if we can't apply custom formatting + locals[parserResult.itemName] = modelValue; + candidateViewValue = parserResult.viewMapper(originalScope, locals); + locals[parserResult.itemName] = undefined; + emptyViewValue = parserResult.viewMapper(originalScope, locals); + + return candidateViewValue!== emptyViewValue ? candidateViewValue : modelValue; + } + }); + + scope.select = function (activeIdx) { + //called from within the $digest() cycle + var locals = {}; + var model, item; + + locals[parserResult.itemName] = item = scope.matches[activeIdx].model; + model = parserResult.modelMapper(originalScope, locals); + $setModelValue(originalScope, model); + modelCtrl.$setValidity('editable', true); + + onSelectCallback(originalScope, { + $item: item, + $model: model, + $label: parserResult.viewMapper(originalScope, locals) + }); + + resetMatches(); + + //return focus to the input element if a match was selected via a mouse click event + // use timeout to avoid $rootScope:inprog error + $timeout(function() { element[0].focus(); }, 0, false); + }; + + //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27) + element.bind('keydown', function (evt) { + + //typeahead is open and an "interesting" key was pressed + if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) { + return; + } + + // if there's nothing selected (i.e. focusFirst) and enter is hit, don't do anything + if (scope.activeIdx == -1 && (evt.which === 13 || evt.which === 9)) { + return; + } + + evt.preventDefault(); + + if (evt.which === 40) { + scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length; + scope.$digest(); + + } else if (evt.which === 38) { + scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1; + scope.$digest(); + + } else if (evt.which === 13 || evt.which === 9) { + scope.$apply(function () { + scope.select(scope.activeIdx); + }); + + } else if (evt.which === 27) { + evt.stopPropagation(); + + resetMatches(); + scope.$digest(); + } + }); + + element.bind('blur', function (evt) { + hasFocus = false; + }); + + // Keep reference to click handler to unbind it. + var dismissClickHandler = function (evt) { + if (element[0] !== evt.target) { + resetMatches(); + scope.$digest(); + } + }; + + $document.bind('click', dismissClickHandler); + + originalScope.$on('$destroy', function(){ + $document.unbind('click', dismissClickHandler); + if (appendToBody) { + $popup.remove(); + } + }); + + var $popup = $compile(popUpEl)(scope); + if (appendToBody) { + $document.find('body').append($popup); + } else { + element.after($popup); + } + } + }; + +}]) + + .directive('typeaheadPopup', function () { + return { + restrict:'EA', + scope:{ + matches:'=', + query:'=', + active:'=', + position:'=', + select:'&' + }, + replace:true, + templateUrl:'template/typeahead/typeahead-popup.html', + link:function (scope, element, attrs) { + + scope.templateUrl = attrs.templateUrl; + + scope.isOpen = function () { + return scope.matches.length > 0; + }; + + scope.isActive = function (matchIdx) { + return scope.active == matchIdx; + }; + + scope.selectActive = function (matchIdx) { + scope.active = matchIdx; + }; + + scope.selectMatch = function (activeIdx) { + scope.select({activeIdx:activeIdx}); + }; + } + }; + }) + + .directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) { + return { + restrict:'EA', + scope:{ + index:'=', + match:'=', + query:'=' + }, + link:function (scope, element, attrs) { + var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html'; + $http.get(tplUrl, {cache: $templateCache}).success(function(tplContent){ + element.replaceWith($compile(tplContent.trim())(scope)); + }); + } + }; + }]) + + .filter('typeaheadHighlight', function() { + + function escapeRegexp(queryToEscape) { + return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'); + } + + return function(matchItem, query) { + return query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; + }; + }); + +angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/accordion/accordion-group.html", + "
    \n" + + "
    \n" + + "

    \n" + + " {{heading}}\n" + + "

    \n" + + "
    \n" + + "
    \n" + + "
    \n" + + "
    \n" + + "
    \n" + + ""); +}]); + +angular.module("template/accordion/accordion.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/accordion/accordion.html", + "
    "); +}]); + +angular.module("template/alert/alert.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/alert/alert.html", + "
    \n" + + " \n" + + "
    \n" + + "
    \n" + + ""); +}]); + +angular.module("template/carousel/carousel.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/carousel/carousel.html", + "
    \n" + + "
      1\">\n" + + "
    1. \n" + + "
    \n" + + "
    \n" + + " 1\">\n" + + " 1\">\n" + + "
    \n" + + ""); +}]); + +angular.module("template/carousel/slide.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/carousel/slide.html", + "
    \n" + + ""); +}]); + +angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/datepicker/datepicker.html", + "
    \n" + + " \n" + + " \n" + + " \n" + + "
    "); +}]); + +angular.module("template/datepicker/day.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/datepicker/day.html", + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
    {{label.abbr}}
    {{ weekNumbers[$index] }}\n" + + " \n" + + "
    \n" + + ""); +}]); + +angular.module("template/datepicker/month.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/datepicker/month.html", + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
    \n" + + " \n" + + "
    \n" + + ""); +}]); + +angular.module("template/datepicker/popup.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/datepicker/popup.html", + "
      \n" + + "
    • \n" + + "
    • \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
    • \n" + + "
    \n" + + ""); +}]); + +angular.module("template/datepicker/year.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/datepicker/year.html", + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
    \n" + + " \n" + + "
    \n" + + ""); +}]); + +angular.module("template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/modal/backdrop.html", + "
    \n" + + ""); +}]); + +angular.module("template/modal/window.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/modal/window.html", + "
    \n" + + "
    \n" + + "
    "); +}]); + +angular.module("template/pagination/pager.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/pagination/pager.html", + ""); +}]); + +angular.module("template/pagination/pagination.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/pagination/pagination.html", + ""); +}]); + +angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/tooltip/tooltip-html-unsafe-popup.html", + "
    \n" + + "
    \n" + + "
    \n" + + "
    \n" + + ""); +}]); + +angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/tooltip/tooltip-popup.html", + "
    \n" + + "
    \n" + + "
    \n" + + "
    \n" + + ""); +}]); + +angular.module("template/popover/popover.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/popover/popover.html", + "
    \n" + + "
    \n" + + "\n" + + "
    \n" + + "

    \n" + + "
    \n" + + "
    \n" + + "
    \n" + + ""); +}]); + +angular.module("template/progressbar/bar.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/progressbar/bar.html", + "
    "); +}]); + +angular.module("template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/progressbar/progress.html", + "
    "); +}]); + +angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/progressbar/progressbar.html", + "
    \n" + + "
    \n" + + "
    "); +}]); + +angular.module("template/rating/rating.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/rating/rating.html", + "\n" + + " \n" + + " ({{ $index < value ? '*' : ' ' }})\n" + + " \n" + + ""); +}]); + +angular.module("template/tabs/tab.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/tabs/tab.html", + "
  • \n" + + " {{heading}}\n" + + "
  • \n" + + ""); +}]); + +angular.module("template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/tabs/tabset.html", + "
    \n" + + "
      \n" + + "
      \n" + + "
      \n" + + "
      \n" + + "
      \n" + + "
      \n" + + ""); +}]); + +angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/timepicker/timepicker.html", + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
       
      \n" + + " \n" + + " :\n" + + " \n" + + "
       
      \n" + + ""); +}]); + +angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/typeahead/typeahead-match.html", + ""); +}]); + +angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/typeahead/typeahead-popup.html", + "
        \n" + + "
      • \n" + + "
        \n" + + "
      • \n" + + "
      \n" + + ""); +}]); diff --git a/vendor/assets/components/angular-bootstrap/ui-bootstrap-tpls.min.js b/vendor/assets/components/angular-bootstrap/ui-bootstrap-tpls.min.js new file mode 100644 index 000000000..41fc2cbef --- /dev/null +++ b/vendor/assets/components/angular-bootstrap/ui-bootstrap-tpls.min.js @@ -0,0 +1,10 @@ +/* + * angular-ui-bootstrap + * http://angular-ui.github.io/bootstrap/ + + * Version: 0.12.1 - 2015-02-20 + * License: MIT + */ +angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.transition","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.transition",[]).factory("$transition",["$q","$timeout","$rootScope",function(a,b,c){function d(a){for(var b in a)if(void 0!==f.style[b])return a[b]}var e=function(d,f,g){g=g||{};var h=a.defer(),i=e[g.animation?"animationEndEventName":"transitionEndEventName"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(f)?d.addClass(f):angular.isFunction(f)?f(d):angular.isObject(f)&&d.css(f),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject("Transition cancelled")},h.promise},f=document.createElement("trans"),g={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},h={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return e.transitionEndEventName=d(g),e.animationEndEventName=d(h),e}]),angular.module("ui.bootstrap.collapse",["ui.bootstrap.transition"]).directive("collapse",["$transition",function(a){return{link:function(b,c,d){function e(b){function d(){j===e&&(j=void 0)}var e=a(c,b);return j&&j.cancel(),j=e,e.then(d,d),e}function f(){k?(k=!1,g()):(c.removeClass("collapse").addClass("collapsing"),e({height:c[0].scrollHeight+"px"}).then(g))}function g(){c.removeClass("collapsing"),c.addClass("collapse in"),c.css({height:"auto"})}function h(){if(k)k=!1,i(),c.css({height:0});else{c.css({height:c[0].scrollHeight+"px"});{c[0].offsetWidth}c.removeClass("collapse in").addClass("collapsing"),e({height:0}).then(i)}}function i(){c.removeClass("collapsing"),c.addClass("collapse")}var j,k=!0;b.$watch(d.collapse,function(a){a?h():f()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",transclude:!0,replace:!1,templateUrl:"template/accordion/accordion.html"}}).directive("accordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/accordion/accordion-group.html",scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.$watch("isOpen",function(b){b&&d.closeOthers(a)}),a.toggleOpen=function(){a.isDisabled||(a.isOpen=!a.isOpen)}}}}).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,function(){}))}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.accordionTransclude]},function(a){a&&(b.html(""),b.append(a))})}}}),angular.module("ui.bootstrap.alert",[]).controller("AlertController",["$scope","$attrs",function(a,b){a.closeable="close"in b,this.close=a.close}]).directive("alert",function(){return{restrict:"EA",controller:"AlertController",templateUrl:"template/alert/alert.html",transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}).directive("dismissOnTimeout",["$timeout",function(a){return{require:"alert",link:function(b,c,d,e){a(function(){e.close()},parseInt(d.dismissOnTimeout,10))}}}]),angular.module("ui.bootstrap.bindHtml",[]).directive("bindHtmlUnsafe",function(){return function(a,b,c){b.addClass("ng-binding").data("$binding",c.bindHtmlUnsafe),a.$watch(c.bindHtmlUnsafe,function(a){b.html(a||"")})}}),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).controller("ButtonsController",["buttonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("btnRadio",function(){return{require:["btnRadio","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){var e=d[0],f=d[1];f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.btnRadio)))},b.bind(e.toggleEvent,function(){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.btnRadio)),f.$render()})})}}}).directive("btnCheckbox",function(){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){var d=a.$eval(b);return angular.isDefined(d)?d:c}var h=d[0],i=d[1];i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.bind(h.toggleEvent,function(){a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",["ui.bootstrap.transition"]).controller("CarouselController",["$scope","$timeout","$interval","$transition",function(a,b,c,d){function e(){f();var b=+a.interval;!isNaN(b)&&b>0&&(h=c(g,b))}function f(){h&&(c.cancel(h),h=null)}function g(){var b=+a.interval;i&&!isNaN(b)&&b>0?a.next():a.pause()}var h,i,j=this,k=j.slides=a.slides=[],l=-1;j.currentSlide=null;var m=!1;j.select=a.select=function(c,f){function g(){if(!m){if(j.currentSlide&&angular.isString(f)&&!a.noTransition&&c.$element){c.$element.addClass(f);{c.$element[0].offsetWidth}angular.forEach(k,function(a){angular.extend(a,{direction:"",entering:!1,leaving:!1,active:!1})}),angular.extend(c,{direction:f,active:!0,entering:!0}),angular.extend(j.currentSlide||{},{direction:f,leaving:!0}),a.$currentTransition=d(c.$element,{}),function(b,c){a.$currentTransition.then(function(){h(b,c)},function(){h(b,c)})}(c,j.currentSlide)}else h(c,j.currentSlide);j.currentSlide=c,l=i,e()}}function h(b,c){angular.extend(b,{direction:"",active:!0,leaving:!1,entering:!1}),angular.extend(c||{},{direction:"",active:!1,leaving:!1,entering:!1}),a.$currentTransition=null}var i=k.indexOf(c);void 0===f&&(f=i>l?"next":"prev"),c&&c!==j.currentSlide&&(a.$currentTransition?(a.$currentTransition.cancel(),b(g)):g())},a.$on("$destroy",function(){m=!0}),j.indexOfSlide=function(a){return k.indexOf(a)},a.next=function(){var b=(l+1)%k.length;return a.$currentTransition?void 0:j.select(k[b],"next")},a.prev=function(){var b=0>l-1?k.length-1:l-1;return a.$currentTransition?void 0:j.select(k[b],"prev")},a.isActive=function(a){return j.currentSlide===a},a.$watch("interval",e),a.$on("$destroy",f),a.play=function(){i||(i=!0,e())},a.pause=function(){a.noPause||(i=!1,f())},j.addSlide=function(b,c){b.$element=c,k.push(b),1===k.length||b.active?(j.select(k[k.length-1]),1==k.length&&a.play()):b.active=!1},j.removeSlide=function(a){var b=k.indexOf(a);k.splice(b,1),k.length>0&&a.active?j.select(b>=k.length?k[b-1]:k[b]):l>b&&l--}}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",require:"carousel",templateUrl:"template/carousel/carousel.html",scope:{interval:"=",noTransition:"=",noPause:"="}}}]).directive("slide",function(){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/carousel/slide.html",scope:{active:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}),angular.module("ui.bootstrap.dateparser",[]).service("dateParser",["$locale","orderByFilter",function(a,b){function c(a){var c=[],d=a.split("");return angular.forEach(e,function(b,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+b.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),c.push({index:f,apply:b.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:b(c,"index")}}function d(a,b,c){return 1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}this.parsers={};var e={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:a.DATETIME_FORMATS.MONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.MONTH.indexOf(b)}},MMM:{regex:a.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.SHORTMONTH.indexOf(b)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:a.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:a.DATETIME_FORMATS.SHORTDAY.join("|")}};this.parse=function(b,e){if(!angular.isString(b)||!e)return b;e=a.DATETIME_FORMATS[e]||e,this.parsers[e]||(this.parsers[e]=c(e));var f=this.parsers[e],g=f.regex,h=f.map,i=b.match(g);if(i&&i.length){for(var j,k={year:1900,month:0,date:1,hours:0},l=1,m=i.length;m>l;l++){var n=h[l-1];n.apply&&n.apply.call(k,i[l])}return d(k.year,k.month,k.date)&&(j=new Date(k.year,k.month,k.date,k.hours)),j}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).constant("datepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null}).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$timeout","$log","dateFilter","datepickerConfig",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","minMode","maxMode","showWeeks","startingDay","yearRange"],function(c,e){i[c]=angular.isDefined(b[c])?8>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):h[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=h[d]?new Date(h[d]):null}),a.datepickerMode=a.datepickerMode||h.datepickerMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),this.activeDate=angular.isDefined(b.initDate)?a.$parent.$eval(b.initDate):new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$modelValue){var a=new Date(j.$modelValue),b=!isNaN(a);b?this.activeDate=a:f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'),j.$setValidity("date",b)}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$modelValue?new Date(j.$modelValue):null;j.$setValidity("date-disabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$modelValue?new Date(j.$modelValue):null;return{date:a,label:g(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$modelValue?new Date(j.$modelValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){e(function(){i.element[0].focus()},0,!1)};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]).directive("datepicker",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/datepicker.html",scope:{datepickerMode:"=?",dateDisabled:"&"},require:["datepicker","?^ngModel"],controller:"DatepickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}).directive("daypicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/day.html",require:"^datepicker",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){var c=new Array(b),d=new Date(a),e=0;for(d.setHours(12);b>e;)c[e++]=new Date(d),d.setDate(d.getDate()+1);return c}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+"-"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,"EEEE")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=h(b.rows[0][0].date),p=b.rows.length;b.weekNumbers.push(o++)f;f++)c[f]=angular.extend(e.createDateObject(new Date(d,f,1),e.formatMonth),{uid:b.uniqueId+"-"+f});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(c,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if("left"===a)b-=1;else if("up"===a)b-=3;else if("right"===a)b+=1;else if("down"===a)b+=3;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getFullYear()+("pageup"===a?-1:1);e.activeDate.setFullYear(c)}else"home"===a?b=0:"end"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive("yearpicker",["dateFilter",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/year.html",require:"^datepicker",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b=new Array(f),c=0,g=e(d.activeDate.getFullYear());f>c;c++)b[c]=angular.extend(d.createDateObject(new Date(g+c,0,1),d.formatYear),{uid:a.uniqueId+"-"+c});a.title=[b[0].label,b[f-1].label].join(" - "),a.rows=d.split(b,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();"left"===a?b-=1:"up"===a?b-=5:"right"===a?b+=1:"down"===a?b+=5:"pageup"===a||"pagedown"===a?b+=("pageup"===a?-1:1)*d.step.years:"home"===a?b=e(d.activeDate.getFullYear()):"end"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant("datepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0}).directive("datepickerPopup",["$compile","$parse","$document","$position","dateFilter","dateParser","datepickerPopupConfig",function(a,b,c,d,e,f,g){return{restrict:"EA",require:"ngModel",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&"},link:function(h,i,j,k){function l(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function m(a){if(a){if(angular.isDate(a)&&!isNaN(a))return k.$setValidity("date",!0),a;if(angular.isString(a)){var b=f.parse(a,n)||new Date(a);return isNaN(b)?void k.$setValidity("date",!1):(k.$setValidity("date",!0),b)}return void k.$setValidity("date",!1)}return k.$setValidity("date",!0),null}var n,o=angular.isDefined(j.closeOnDateSelection)?h.$parent.$eval(j.closeOnDateSelection):g.closeOnDateSelection,p=angular.isDefined(j.datepickerAppendToBody)?h.$parent.$eval(j.datepickerAppendToBody):g.appendToBody;h.showButtonBar=angular.isDefined(j.showButtonBar)?h.$parent.$eval(j.showButtonBar):g.showButtonBar,h.getText=function(a){return h[a+"Text"]||g[a+"Text"]},j.$observe("datepickerPopup",function(a){n=a||g.datepickerPopup,k.$render()});var q=angular.element("
      ");q.attr({"ng-model":"date","ng-change":"dateSelection()"});var r=angular.element(q.children()[0]);j.datepickerOptions&&angular.forEach(h.$parent.$eval(j.datepickerOptions),function(a,b){r.attr(l(b),a)}),h.watchData={},angular.forEach(["minDate","maxDate","datepickerMode"],function(a){if(j[a]){var c=b(j[a]);if(h.$parent.$watch(c,function(b){h.watchData[a]=b}),r.attr(l(a),"watchData."+a),"datepickerMode"===a){var d=c.assign;h.$watch("watchData."+a,function(a,b){a!==b&&d(h.$parent,a)})}}}),j.dateDisabled&&r.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),k.$parsers.unshift(m),h.dateSelection=function(a){angular.isDefined(a)&&(h.date=a),k.$setViewValue(h.date),k.$render(),o&&(h.isOpen=!1,i[0].focus())},i.bind("input change keyup",function(){h.$apply(function(){h.date=k.$modelValue})}),k.$render=function(){var a=k.$viewValue?e(k.$viewValue,n):"";i.val(a),h.date=m(k.$modelValue)};var s=function(a){h.isOpen&&a.target!==i[0]&&h.$apply(function(){h.isOpen=!1})},t=function(a){h.keydown(a)};i.bind("keydown",t),h.keydown=function(a){27===a.which?(a.preventDefault(),a.stopPropagation(),h.close()):40!==a.which||h.isOpen||(h.isOpen=!0)},h.$watch("isOpen",function(a){a?(h.$broadcast("datepicker.focus"),h.position=p?d.offset(i):d.position(i),h.position.top=h.position.top+i.prop("offsetHeight"),c.bind("click",s)):c.unbind("click",s)}),h.select=function(a){if("today"===a){var b=new Date;angular.isDate(k.$modelValue)?(a=new Date(k.$modelValue),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}h.dateSelection(a)},h.close=function(){h.isOpen=!1,i[0].focus()};var u=a(q)(h);q.remove(),p?c.find("body").append(u):i.after(u),h.$on("$destroy",function(){u.remove(),i.unbind("keydown",t),c.unbind("click",s)})}}}]).directive("datepickerPopupWrap",function(){return{restrict:"EA",replace:!0,transclude:!0,templateUrl:"template/datepicker/popup.html",link:function(a,b){b.bind("click",function(a){a.preventDefault(),a.stopPropagation()})}}}),angular.module("ui.bootstrap.dropdown",[]).constant("dropdownConfig",{openClass:"open"}).service("dropdownService",["$document",function(a){var b=null;this.open=function(e){b||(a.bind("click",c),a.bind("keydown",d)),b&&b!==e&&(b.isOpen=!1),b=e},this.close=function(e){b===e&&(b=null,a.unbind("click",c),a.unbind("keydown",d))};var c=function(a){if(b){var c=b.getToggleElement();a&&c&&c[0].contains(a.target)||b.$apply(function(){b.isOpen=!1})}},d=function(a){27===a.which&&(b.focusToggleElement(),c())}}]).controller("DropdownController",["$scope","$attrs","$parse","dropdownConfig","dropdownService","$animate",function(a,b,c,d,e,f){var g,h=this,i=a.$new(),j=d.openClass,k=angular.noop,l=b.onToggle?c(b.onToggle):angular.noop;this.init=function(d){h.$element=d,b.isOpen&&(g=c(b.isOpen),k=g.assign,a.$watch(g,function(a){i.isOpen=!!a}))},this.toggle=function(a){return i.isOpen=arguments.length?!!a:!i.isOpen},this.isOpen=function(){return i.isOpen},i.getToggleElement=function(){return h.toggleElement},i.focusToggleElement=function(){h.toggleElement&&h.toggleElement[0].focus()},i.$watch("isOpen",function(b,c){f[b?"addClass":"removeClass"](h.$element,j),b?(i.focusToggleElement(),e.open(i)):e.close(i),k(a,b),angular.isDefined(b)&&b!==c&&l(a,{open:!!b})}),a.$on("$locationChangeSuccess",function(){i.isOpen=!1}),a.$on("$destroy",function(){i.$destroy()})}]).directive("dropdown",function(){return{controller:"DropdownController",link:function(a,b,c,d){d.init(b)}}}).directive("dropdownToggle",function(){return{require:"?^dropdown",link:function(a,b,c,d){if(d){d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.modal",["ui.bootstrap.transition"]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c0),i()})}function i(){if(k&&-1==g()){var a=l;j(k,l,150,function(){a.$destroy(),a=null}),k=void 0,l=void 0}}function j(c,d,e,f){function g(){g.done||(g.done=!0,c.remove(),f&&f())}d.animate=!1;var h=a.transitionEndEventName;if(h){var i=b(g,e);c.bind(h,function(){b.cancel(i),g(),d.$apply()})}else b(g)}var k,l,m="modal-open",n=f.createNew(),o={};return e.$watch(g,function(a){l&&(l.index=a)}),c.bind("keydown",function(a){var b;27===a.which&&(b=n.top(),b&&b.value.keyboard&&(a.preventDefault(),e.$apply(function(){o.dismiss(b.key,"escape key press")})))}),o.open=function(a,b){n.add(a,{deferred:b.deferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard});var f=c.find("body").eq(0),h=g();if(h>=0&&!k){l=e.$new(!0),l.index=h;var i=angular.element("
      ");i.attr("backdrop-class",b.backdropClass),k=d(i)(l),f.append(k)}var j=angular.element("
      ");j.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,size:b.size,index:n.length()-1,animate:"animate"}).html(b.content);var o=d(j)(b.scope);n.top().value.modalDomEl=o,f.append(o),f.addClass(m)},o.close=function(a,b){var c=n.get(a);c&&(c.value.deferred.resolve(b),h(a))},o.dismiss=function(a,b){var c=n.get(a);c&&(c.value.deferred.reject(b),h(a))},o.dismissAll=function(a){for(var b=this.getTop();b;)this.dismiss(b.key,a),b=this.getTop()},o.getTop=function(){return n.top()},o}]).provider("$modal",function(){var a={options:{backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$http","$templateCache","$controller","$modalStack",function(b,c,d,e,f,g,h){function i(a){return a.template?d.when(a.template):e.get(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl,{cache:f}).then(function(a){return a.data})}function j(a){var c=[];return angular.forEach(a,function(a){(angular.isFunction(a)||angular.isArray(a))&&c.push(d.when(b.invoke(a)))}),c}var k={};return k.open=function(b){var e=d.defer(),f=d.defer(),k={result:e.promise,opened:f.promise,close:function(a){h.close(k,a)},dismiss:function(a){h.dismiss(k,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var l=d.all([i(b)].concat(j(b.resolve)));return l.then(function(a){var d=(b.scope||c).$new();d.$close=k.close,d.$dismiss=k.dismiss;var f,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=k,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),f=g(b.controller,i),b.controllerAs&&(d[b.controllerAs]=f)),h.open(k,{scope:d,deferred:e,content:a[0],backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size})},function(a){e.reject(a)}),l.then(function(){f.resolve(!0)},function(){f.reject(!1)}),k},k}]};return a}),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(f,g){e=f,this.config=g,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=g.itemsPerPage},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b){a.page!==b&&b>0&&b<=a.totalPages&&(e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages},a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})}]).constant("paginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["$parse","paginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@"},require:["pagination","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pagination.html",replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render() +});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("pagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@"},require:["pager","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).provider("$tooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",animation:!0,popupDelay:0},c={mouseenter:"mouseleave",click:"click",focus:"blur"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$position","$interpolate",function(e,f,g,h,i,j){return function(e,k,l){function m(a){var b=a||n.trigger||l,d=c[b]||b;return{show:b,hide:d}}var n=angular.extend({},b,d),o=a(e),p=j.startSymbol(),q=j.endSymbol(),r="
      ';return{restrict:"EA",compile:function(){var a=f(r);return function(b,c,d){function f(){D.isOpen?l():j()}function j(){(!C||b.$eval(d[k+"Enable"]))&&(s(),D.popupDelay?z||(z=g(o,D.popupDelay,!1),z.then(function(a){a()})):o()())}function l(){b.$apply(function(){p()})}function o(){return z=null,y&&(g.cancel(y),y=null),D.content?(q(),w.css({top:0,left:0,display:"block"}),D.$digest(),E(),D.isOpen=!0,D.$digest(),E):angular.noop}function p(){D.isOpen=!1,g.cancel(z),z=null,D.animation?y||(y=g(r,500)):r()}function q(){w&&r(),x=D.$new(),w=a(x,function(a){A?h.find("body").append(a):c.after(a)})}function r(){y=null,w&&(w.remove(),w=null),x&&(x.$destroy(),x=null)}function s(){t(),u()}function t(){var a=d[k+"Placement"];D.placement=angular.isDefined(a)?a:n.placement}function u(){var a=d[k+"PopupDelay"],b=parseInt(a,10);D.popupDelay=isNaN(b)?n.popupDelay:b}function v(){var a=d[k+"Trigger"];F(),B=m(a),B.show===B.hide?c.bind(B.show,f):(c.bind(B.show,j),c.bind(B.hide,l))}var w,x,y,z,A=angular.isDefined(n.appendToBody)?n.appendToBody:!1,B=m(void 0),C=angular.isDefined(d[k+"Enable"]),D=b.$new(!0),E=function(){var a=i.positionElements(c,w,D.placement,A);a.top+="px",a.left+="px",w.css(a)};D.isOpen=!1,d.$observe(e,function(a){D.content=a,!a&&D.isOpen&&p()}),d.$observe(k+"Title",function(a){D.title=a});var F=function(){c.unbind(B.show,j),c.unbind(B.hide,l)};v();var G=b.$eval(d[k+"Animation"]);D.animation=angular.isDefined(G)?!!G:n.animation;var H=b.$eval(d[k+"AppendToBody"]);A=angular.isDefined(H)?H:A,A&&b.$on("$locationChangeSuccess",function(){D.isOpen&&p()}),b.$on("$destroy",function(){g.cancel(y),g.cancel(z),F(),r(),D=null})}}}}}]}).directive("tooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).directive("tooltipHtmlUnsafe",["$tooltip",function(a){return a("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("progressConfig",{animate:!0,max:100}).controller("ProgressController",["$scope","$attrs","progressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max,this.addBar=function(b,c){e||c.css({transition:"none"}),this.bars.push(b),b.$watch("value",function(c){b.percent=+(100*c/a.max).toFixed(2)}),b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)}}]).directive("progress",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{},templateUrl:"template/progressbar/progress.html"}}).directive("bar",function(){return{restrict:"EA",replace:!0,transclude:!0,require:"^progress",scope:{value:"=",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b)}}}).directive("progressbar",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5,stateOn:null,stateOff:null}).controller("RatingController",["$scope","$attrs","ratingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(f)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff},a[b]);return a},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("rating",function(){return{restrict:"EA",require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("TabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length?a.active=!0:a.active&&b.select(a)},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("tab",["$parse",function(a){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},compile:function(b,c,d){return function(b,c,e,f){b.$watch("active",function(a){a&&f.select(b)}),b.disabled=!1,e.disabled&&b.$parent.$watch(a(e.disabled),function(a){b.disabled=!!a}),b.select=function(){b.disabled||(b.active=!0)},f.addTab(b),b.$on("$destroy",function(){f.removeTab(b)}),b.$transcludeFn=d}}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}]).directive("tabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0}).controller("TimepickerController",["$scope","$attrs","$parse","$log","$locale","timepickerConfig",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===p[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a}function j(a){k(),o.$setViewValue(new Date(n)),l(a)}function k(){o.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=n.getHours(),d=n.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:i(c),a.minutes="m"===b?d:i(d),a.meridian=n.getHours()<12?p[0]:p[1]}function m(a){var b=new Date(n.getTime()+6e4*a);n.setHours(b.getHours(),b.getMinutes()),j()}var n=new Date,o={$setViewValue:angular.noop},p=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){o=c,o.$render=this.render;var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var q=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){q=parseInt(a,10)});var r=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){r=parseInt(a,10)}),a.showMeridian=f.showMeridian,b.showMeridian&&a.$parent.$watch(c(b.showMeridian),function(b){if(a.showMeridian=!!b,o.$error.time){var c=g(),d=h();angular.isDefined(c)&&angular.isDefined(d)&&(n.setHours(c),j())}else l()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){o.$setViewValue(null),o.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(n.setHours(a),j("h")):d(!0)},b.bind("blur",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(n.setMinutes(a),j("m")):d(void 0,!0)},c.bind("blur",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var a=o.$modelValue?new Date(o.$modelValue):null;isNaN(a)?(o.$setValidity("time",!1),d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(a&&(n=a),k(),l())},a.incrementHours=function(){m(60*q)},a.decrementHours=function(){m(60*-q)},a.incrementMinutes=function(){m(r)},a.decrementMinutes=function(){m(-r)},a.toggleMeridian=function(){m(720*(n.getHours()<12?1:-1))}}]).directive("timepicker",function(){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",replace:!0,scope:{},templateUrl:"template/timepicker/timepicker.html",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).factory("typeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$position","typeaheadParser",function(a,b,c,d,e,f,g){var h=[9,13,27,38,40];return{require:"ngModel",link:function(i,j,k,l){var m,n=i.$eval(k.typeaheadMinLength)||1,o=i.$eval(k.typeaheadWaitMs)||0,p=i.$eval(k.typeaheadEditable)!==!1,q=b(k.typeaheadLoading).assign||angular.noop,r=b(k.typeaheadOnSelect),s=k.typeaheadInputFormatter?b(k.typeaheadInputFormatter):void 0,t=k.typeaheadAppendToBody?i.$eval(k.typeaheadAppendToBody):!1,u=i.$eval(k.typeaheadFocusFirst)!==!1,v=b(k.ngModel).assign,w=g.parse(k.typeahead),x=i.$new();i.$on("$destroy",function(){x.$destroy()});var y="typeahead-"+x.$id+"-"+Math.floor(1e4*Math.random());j.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":y});var z=angular.element("
      ");z.attr({id:y,matches:"matches",active:"activeIdx",select:"select(activeIdx)",query:"query",position:"position"}),angular.isDefined(k.typeaheadTemplateUrl)&&z.attr("template-url",k.typeaheadTemplateUrl);var A=function(){x.matches=[],x.activeIdx=-1,j.attr("aria-expanded",!1)},B=function(a){return y+"-option-"+a};x.$watch("activeIdx",function(a){0>a?j.removeAttr("aria-activedescendant"):j.attr("aria-activedescendant",B(a))});var C=function(a){var b={$viewValue:a};q(i,!0),c.when(w.source(i,b)).then(function(c){var d=a===l.$viewValue;if(d&&m)if(c.length>0){x.activeIdx=u?0:-1,x.matches.length=0;for(var e=0;e=n?o>0?(F(),E(a)):C(a):(q(i,!1),F(),A()),p?a:a?void l.$setValidity("editable",!1):(l.$setValidity("editable",!0),a)}),l.$formatters.push(function(a){var b,c,d={};return s?(d.$model=a,s(i,d)):(d[w.itemName]=a,b=w.viewMapper(i,d),d[w.itemName]=void 0,c=w.viewMapper(i,d),b!==c?b:a)}),x.select=function(a){var b,c,e={};e[w.itemName]=c=x.matches[a].model,b=w.modelMapper(i,e),v(i,b),l.$setValidity("editable",!0),r(i,{$item:c,$model:b,$label:w.viewMapper(i,e)}),A(),d(function(){j[0].focus()},0,!1)},j.bind("keydown",function(a){0!==x.matches.length&&-1!==h.indexOf(a.which)&&(-1!=x.activeIdx||13!==a.which&&9!==a.which)&&(a.preventDefault(),40===a.which?(x.activeIdx=(x.activeIdx+1)%x.matches.length,x.$digest()):38===a.which?(x.activeIdx=(x.activeIdx>0?x.activeIdx:x.matches.length)-1,x.$digest()):13===a.which||9===a.which?x.$apply(function(){x.select(x.activeIdx)}):27===a.which&&(a.stopPropagation(),A(),x.$digest()))}),j.bind("blur",function(){m=!1});var G=function(a){j[0]!==a.target&&(A(),x.$digest())};e.bind("click",G),i.$on("$destroy",function(){e.unbind("click",G),t&&H.remove()});var H=a(z)(x);t?e.find("body").append(H):j.after(H)}}}]).directive("typeaheadPopup",function(){return{restrict:"EA",scope:{matches:"=",query:"=",active:"=",position:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("typeaheadMatch",["$http","$templateCache","$compile","$parse",function(a,b,c,d){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(e,f,g){var h=d(g.templateUrl)(e.$parent)||"template/typeahead/typeahead-match.html";a.get(h,{cache:b}).success(function(a){f.replaceWith(c(a.trim())(e))})}}}]).filter("typeaheadHighlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c?(""+b).replace(new RegExp(a(c),"gi"),"$&"):b}}),angular.module("template/accordion/accordion-group.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion-group.html",'
      \n
      \n

      \n {{heading}}\n

      \n
      \n
      \n
      \n
      \n
      \n')}]),angular.module("template/accordion/accordion.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion.html",'
      ')}]),angular.module("template/alert/alert.html",[]).run(["$templateCache",function(a){a.put("template/alert/alert.html",'\n')}]),angular.module("template/carousel/carousel.html",[]).run(["$templateCache",function(a){a.put("template/carousel/carousel.html",'\n')}]),angular.module("template/carousel/slide.html",[]).run(["$templateCache",function(a){a.put("template/carousel/slide.html","
      \n")}]),angular.module("template/datepicker/datepicker.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/datepicker.html",'
      \n \n \n \n
      ')}]),angular.module("template/datepicker/day.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/day.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      {{label.abbr}}
      {{ weekNumbers[$index] }}\n \n
      \n')}]),angular.module("template/datepicker/month.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/month.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n
      \n \n
      \n')}]),angular.module("template/datepicker/popup.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/popup.html",'\n')}]),angular.module("template/datepicker/year.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/year.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n
      \n \n
      \n')}]),angular.module("template/modal/backdrop.html",[]).run(["$templateCache",function(a){a.put("template/modal/backdrop.html",'\n')}]),angular.module("template/modal/window.html",[]).run(["$templateCache",function(a){a.put("template/modal/window.html",'')}]),angular.module("template/pagination/pager.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pager.html",'')}]),angular.module("template/pagination/pagination.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pagination.html",'')}]),angular.module("template/tooltip/tooltip-html-unsafe-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-unsafe-popup.html",'
      \n
      \n
      \n
      \n')}]),angular.module("template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-popup.html",'
      \n
      \n
      \n
      \n')}]),angular.module("template/popover/popover.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover.html",'
      \n
      \n\n
      \n

      \n
      \n
      \n
      \n')}]),angular.module("template/progressbar/bar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/bar.html",'
      ')}]),angular.module("template/progressbar/progress.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progress.html",'
      ')}]),angular.module("template/progressbar/progressbar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progressbar.html",'
      \n
      \n
      ')}]),angular.module("template/rating/rating.html",[]).run(["$templateCache",function(a){a.put("template/rating/rating.html",'\n \n ({{ $index < value ? \'*\' : \' \' }})\n \n')}]),angular.module("template/tabs/tab.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tab.html",'
    • \n {{heading}}\n
    • \n')}]),angular.module("template/tabs/tabset.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tabset.html",'
      \n \n
      \n
      \n
      \n
      \n
      \n')}]),angular.module("template/timepicker/timepicker.html",[]).run(["$templateCache",function(a){a.put("template/timepicker/timepicker.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
       
      \n \n :\n \n
       
      \n')}]),angular.module("template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-match.html",'') +}]),angular.module("template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-popup.html",'\n')}]); \ No newline at end of file diff --git a/vendor/assets/components/angular-bootstrap/ui-bootstrap.js b/vendor/assets/components/angular-bootstrap/ui-bootstrap.js new file mode 100644 index 000000000..d0f02df98 --- /dev/null +++ b/vendor/assets/components/angular-bootstrap/ui-bootstrap.js @@ -0,0 +1,3900 @@ +/* + * angular-ui-bootstrap + * http://angular-ui.github.io/bootstrap/ + + * Version: 0.12.1 - 2015-02-20 + * License: MIT + */ +angular.module("ui.bootstrap", ["ui.bootstrap.transition","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]); +angular.module('ui.bootstrap.transition', []) + +/** + * $transition service provides a consistent interface to trigger CSS 3 transitions and to be informed when they complete. + * @param {DOMElement} element The DOMElement that will be animated. + * @param {string|object|function} trigger The thing that will cause the transition to start: + * - As a string, it represents the css class to be added to the element. + * - As an object, it represents a hash of style attributes to be applied to the element. + * - As a function, it represents a function to be called that will cause the transition to occur. + * @return {Promise} A promise that is resolved when the transition finishes. + */ +.factory('$transition', ['$q', '$timeout', '$rootScope', function($q, $timeout, $rootScope) { + + var $transition = function(element, trigger, options) { + options = options || {}; + var deferred = $q.defer(); + var endEventName = $transition[options.animation ? 'animationEndEventName' : 'transitionEndEventName']; + + var transitionEndHandler = function(event) { + $rootScope.$apply(function() { + element.unbind(endEventName, transitionEndHandler); + deferred.resolve(element); + }); + }; + + if (endEventName) { + element.bind(endEventName, transitionEndHandler); + } + + // Wrap in a timeout to allow the browser time to update the DOM before the transition is to occur + $timeout(function() { + if ( angular.isString(trigger) ) { + element.addClass(trigger); + } else if ( angular.isFunction(trigger) ) { + trigger(element); + } else if ( angular.isObject(trigger) ) { + element.css(trigger); + } + //If browser does not support transitions, instantly resolve + if ( !endEventName ) { + deferred.resolve(element); + } + }); + + // Add our custom cancel function to the promise that is returned + // We can call this if we are about to run a new transition, which we know will prevent this transition from ending, + // i.e. it will therefore never raise a transitionEnd event for that transition + deferred.promise.cancel = function() { + if ( endEventName ) { + element.unbind(endEventName, transitionEndHandler); + } + deferred.reject('Transition cancelled'); + }; + + return deferred.promise; + }; + + // Work out the name of the transitionEnd event + var transElement = document.createElement('trans'); + var transitionEndEventNames = { + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'transitionend', + 'OTransition': 'oTransitionEnd', + 'transition': 'transitionend' + }; + var animationEndEventNames = { + 'WebkitTransition': 'webkitAnimationEnd', + 'MozTransition': 'animationend', + 'OTransition': 'oAnimationEnd', + 'transition': 'animationend' + }; + function findEndEventName(endEventNames) { + for (var name in endEventNames){ + if (transElement.style[name] !== undefined) { + return endEventNames[name]; + } + } + } + $transition.transitionEndEventName = findEndEventName(transitionEndEventNames); + $transition.animationEndEventName = findEndEventName(animationEndEventNames); + return $transition; +}]); + +angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition']) + + .directive('collapse', ['$transition', function ($transition) { + + return { + link: function (scope, element, attrs) { + + var initialAnimSkip = true; + var currentTransition; + + function doTransition(change) { + var newTransition = $transition(element, change); + if (currentTransition) { + currentTransition.cancel(); + } + currentTransition = newTransition; + newTransition.then(newTransitionDone, newTransitionDone); + return newTransition; + + function newTransitionDone() { + // Make sure it's this transition, otherwise, leave it alone. + if (currentTransition === newTransition) { + currentTransition = undefined; + } + } + } + + function expand() { + if (initialAnimSkip) { + initialAnimSkip = false; + expandDone(); + } else { + element.removeClass('collapse').addClass('collapsing'); + doTransition({ height: element[0].scrollHeight + 'px' }).then(expandDone); + } + } + + function expandDone() { + element.removeClass('collapsing'); + element.addClass('collapse in'); + element.css({height: 'auto'}); + } + + function collapse() { + if (initialAnimSkip) { + initialAnimSkip = false; + collapseDone(); + element.css({height: 0}); + } else { + // CSS transitions don't work with height: auto, so we have to manually change the height to a specific value + element.css({ height: element[0].scrollHeight + 'px' }); + //trigger reflow so a browser realizes that height was updated from auto to a specific value + var x = element[0].offsetWidth; + + element.removeClass('collapse in').addClass('collapsing'); + + doTransition({ height: 0 }).then(collapseDone); + } + } + + function collapseDone() { + element.removeClass('collapsing'); + element.addClass('collapse'); + } + + scope.$watch(attrs.collapse, function (shouldCollapse) { + if (shouldCollapse) { + collapse(); + } else { + expand(); + } + }); + } + }; + }]); + +angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse']) + +.constant('accordionConfig', { + closeOthers: true +}) + +.controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) { + + // This array keeps track of the accordion groups + this.groups = []; + + // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to + this.closeOthers = function(openGroup) { + var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers; + if ( closeOthers ) { + angular.forEach(this.groups, function (group) { + if ( group !== openGroup ) { + group.isOpen = false; + } + }); + } + }; + + // This is called from the accordion-group directive to add itself to the accordion + this.addGroup = function(groupScope) { + var that = this; + this.groups.push(groupScope); + + groupScope.$on('$destroy', function (event) { + that.removeGroup(groupScope); + }); + }; + + // This is called from the accordion-group directive when to remove itself + this.removeGroup = function(group) { + var index = this.groups.indexOf(group); + if ( index !== -1 ) { + this.groups.splice(index, 1); + } + }; + +}]) + +// The accordion directive simply sets up the directive controller +// and adds an accordion CSS class to itself element. +.directive('accordion', function () { + return { + restrict:'EA', + controller:'AccordionController', + transclude: true, + replace: false, + templateUrl: 'template/accordion/accordion.html' + }; +}) + +// The accordion-group directive indicates a block of html that will expand and collapse in an accordion +.directive('accordionGroup', function() { + return { + require:'^accordion', // We need this directive to be inside an accordion + restrict:'EA', + transclude:true, // It transcludes the contents of the directive into the template + replace: true, // The element containing the directive will be replaced with the template + templateUrl:'template/accordion/accordion-group.html', + scope: { + heading: '@', // Interpolate the heading attribute onto this scope + isOpen: '=?', + isDisabled: '=?' + }, + controller: function() { + this.setHeading = function(element) { + this.heading = element; + }; + }, + link: function(scope, element, attrs, accordionCtrl) { + accordionCtrl.addGroup(scope); + + scope.$watch('isOpen', function(value) { + if ( value ) { + accordionCtrl.closeOthers(scope); + } + }); + + scope.toggleOpen = function() { + if ( !scope.isDisabled ) { + scope.isOpen = !scope.isOpen; + } + }; + } + }; +}) + +// Use accordion-heading below an accordion-group to provide a heading containing HTML +// +// Heading containing HTML - +// +.directive('accordionHeading', function() { + return { + restrict: 'EA', + transclude: true, // Grab the contents to be used as the heading + template: '', // In effect remove this element! + replace: true, + require: '^accordionGroup', + link: function(scope, element, attr, accordionGroupCtrl, transclude) { + // Pass the heading to the accordion-group controller + // so that it can be transcluded into the right place in the template + // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat] + accordionGroupCtrl.setHeading(transclude(scope, function() {})); + } + }; +}) + +// Use in the accordion-group template to indicate where you want the heading to be transcluded +// You must provide the property on the accordion-group controller that will hold the transcluded element +//
      +// +// ... +//
      +.directive('accordionTransclude', function() { + return { + require: '^accordionGroup', + link: function(scope, element, attr, controller) { + scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) { + if ( heading ) { + element.html(''); + element.append(heading); + } + }); + } + }; +}); + +angular.module('ui.bootstrap.alert', []) + +.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) { + $scope.closeable = 'close' in $attrs; + this.close = $scope.close; +}]) + +.directive('alert', function () { + return { + restrict:'EA', + controller:'AlertController', + templateUrl:'template/alert/alert.html', + transclude:true, + replace:true, + scope: { + type: '@', + close: '&' + } + }; +}) + +.directive('dismissOnTimeout', ['$timeout', function($timeout) { + return { + require: 'alert', + link: function(scope, element, attrs, alertCtrl) { + $timeout(function(){ + alertCtrl.close(); + }, parseInt(attrs.dismissOnTimeout, 10)); + } + }; +}]); + +angular.module('ui.bootstrap.bindHtml', []) + + .directive('bindHtmlUnsafe', function () { + return function (scope, element, attr) { + element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe); + scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) { + element.html(value || ''); + }); + }; + }); +angular.module('ui.bootstrap.buttons', []) + +.constant('buttonConfig', { + activeClass: 'active', + toggleEvent: 'click' +}) + +.controller('ButtonsController', ['buttonConfig', function(buttonConfig) { + this.activeClass = buttonConfig.activeClass || 'active'; + this.toggleEvent = buttonConfig.toggleEvent || 'click'; +}]) + +.directive('btnRadio', function () { + return { + require: ['btnRadio', 'ngModel'], + controller: 'ButtonsController', + link: function (scope, element, attrs, ctrls) { + var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + //model -> UI + ngModelCtrl.$render = function () { + element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio))); + }; + + //ui->model + element.bind(buttonsCtrl.toggleEvent, function () { + var isActive = element.hasClass(buttonsCtrl.activeClass); + + if (!isActive || angular.isDefined(attrs.uncheckable)) { + scope.$apply(function () { + ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio)); + ngModelCtrl.$render(); + }); + } + }); + } + }; +}) + +.directive('btnCheckbox', function () { + return { + require: ['btnCheckbox', 'ngModel'], + controller: 'ButtonsController', + link: function (scope, element, attrs, ctrls) { + var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + function getTrueValue() { + return getCheckboxValue(attrs.btnCheckboxTrue, true); + } + + function getFalseValue() { + return getCheckboxValue(attrs.btnCheckboxFalse, false); + } + + function getCheckboxValue(attributeValue, defaultValue) { + var val = scope.$eval(attributeValue); + return angular.isDefined(val) ? val : defaultValue; + } + + //model -> UI + ngModelCtrl.$render = function () { + element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue())); + }; + + //ui->model + element.bind(buttonsCtrl.toggleEvent, function () { + scope.$apply(function () { + ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue()); + ngModelCtrl.$render(); + }); + }); + } + }; +}); + +/** +* @ngdoc overview +* @name ui.bootstrap.carousel +* +* @description +* AngularJS version of an image carousel. +* +*/ +angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition']) +.controller('CarouselController', ['$scope', '$timeout', '$interval', '$transition', function ($scope, $timeout, $interval, $transition) { + var self = this, + slides = self.slides = $scope.slides = [], + currentIndex = -1, + currentInterval, isPlaying; + self.currentSlide = null; + + var destroyed = false; + /* direction: "prev" or "next" */ + self.select = $scope.select = function(nextSlide, direction) { + var nextIndex = slides.indexOf(nextSlide); + //Decide direction if it's not given + if (direction === undefined) { + direction = nextIndex > currentIndex ? 'next' : 'prev'; + } + if (nextSlide && nextSlide !== self.currentSlide) { + if ($scope.$currentTransition) { + $scope.$currentTransition.cancel(); + //Timeout so ng-class in template has time to fix classes for finished slide + $timeout(goNext); + } else { + goNext(); + } + } + function goNext() { + // Scope has been destroyed, stop here. + if (destroyed) { return; } + //If we have a slide to transition from and we have a transition type and we're allowed, go + if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) { + //We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime + nextSlide.$element.addClass(direction); + var reflow = nextSlide.$element[0].offsetWidth; //force reflow + + //Set all other slides to stop doing their stuff for the new transition + angular.forEach(slides, function(slide) { + angular.extend(slide, {direction: '', entering: false, leaving: false, active: false}); + }); + angular.extend(nextSlide, {direction: direction, active: true, entering: true}); + angular.extend(self.currentSlide||{}, {direction: direction, leaving: true}); + + $scope.$currentTransition = $transition(nextSlide.$element, {}); + //We have to create new pointers inside a closure since next & current will change + (function(next,current) { + $scope.$currentTransition.then( + function(){ transitionDone(next, current); }, + function(){ transitionDone(next, current); } + ); + }(nextSlide, self.currentSlide)); + } else { + transitionDone(nextSlide, self.currentSlide); + } + self.currentSlide = nextSlide; + currentIndex = nextIndex; + //every time you change slides, reset the timer + restartTimer(); + } + function transitionDone(next, current) { + angular.extend(next, {direction: '', active: true, leaving: false, entering: false}); + angular.extend(current||{}, {direction: '', active: false, leaving: false, entering: false}); + $scope.$currentTransition = null; + } + }; + $scope.$on('$destroy', function () { + destroyed = true; + }); + + /* Allow outside people to call indexOf on slides array */ + self.indexOfSlide = function(slide) { + return slides.indexOf(slide); + }; + + $scope.next = function() { + var newIndex = (currentIndex + 1) % slides.length; + + //Prevent this user-triggered transition from occurring if there is already one in progress + if (!$scope.$currentTransition) { + return self.select(slides[newIndex], 'next'); + } + }; + + $scope.prev = function() { + var newIndex = currentIndex - 1 < 0 ? slides.length - 1 : currentIndex - 1; + + //Prevent this user-triggered transition from occurring if there is already one in progress + if (!$scope.$currentTransition) { + return self.select(slides[newIndex], 'prev'); + } + }; + + $scope.isActive = function(slide) { + return self.currentSlide === slide; + }; + + $scope.$watch('interval', restartTimer); + $scope.$on('$destroy', resetTimer); + + function restartTimer() { + resetTimer(); + var interval = +$scope.interval; + if (!isNaN(interval) && interval > 0) { + currentInterval = $interval(timerFn, interval); + } + } + + function resetTimer() { + if (currentInterval) { + $interval.cancel(currentInterval); + currentInterval = null; + } + } + + function timerFn() { + var interval = +$scope.interval; + if (isPlaying && !isNaN(interval) && interval > 0) { + $scope.next(); + } else { + $scope.pause(); + } + } + + $scope.play = function() { + if (!isPlaying) { + isPlaying = true; + restartTimer(); + } + }; + $scope.pause = function() { + if (!$scope.noPause) { + isPlaying = false; + resetTimer(); + } + }; + + self.addSlide = function(slide, element) { + slide.$element = element; + slides.push(slide); + //if this is the first slide or the slide is set to active, select it + if(slides.length === 1 || slide.active) { + self.select(slides[slides.length-1]); + if (slides.length == 1) { + $scope.play(); + } + } else { + slide.active = false; + } + }; + + self.removeSlide = function(slide) { + //get the index of the slide inside the carousel + var index = slides.indexOf(slide); + slides.splice(index, 1); + if (slides.length > 0 && slide.active) { + if (index >= slides.length) { + self.select(slides[index-1]); + } else { + self.select(slides[index]); + } + } else if (currentIndex > index) { + currentIndex--; + } + }; + +}]) + +/** + * @ngdoc directive + * @name ui.bootstrap.carousel.directive:carousel + * @restrict EA + * + * @description + * Carousel is the outer container for a set of image 'slides' to showcase. + * + * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide. + * @param {boolean=} noTransition Whether to disable transitions on the carousel. + * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover). + * + * @example + + + + + + + + + + + + + + + .carousel-indicators { + top: auto; + bottom: 15px; + } + + + */ +.directive('carousel', [function() { + return { + restrict: 'EA', + transclude: true, + replace: true, + controller: 'CarouselController', + require: 'carousel', + templateUrl: 'template/carousel/carousel.html', + scope: { + interval: '=', + noTransition: '=', + noPause: '=' + } + }; +}]) + +/** + * @ngdoc directive + * @name ui.bootstrap.carousel.directive:slide + * @restrict EA + * + * @description + * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element. + * + * @param {boolean=} active Model binding, whether or not this slide is currently active. + * + * @example + + +
      + + + + + + + Interval, in milliseconds: +
      Enter a negative number to stop the interval. +
      +
      + +function CarouselDemoCtrl($scope) { + $scope.myInterval = 5000; +} + + + .carousel-indicators { + top: auto; + bottom: 15px; + } + +
      +*/ + +.directive('slide', function() { + return { + require: '^carousel', + restrict: 'EA', + transclude: true, + replace: true, + templateUrl: 'template/carousel/slide.html', + scope: { + active: '=?' + }, + link: function (scope, element, attrs, carouselCtrl) { + carouselCtrl.addSlide(scope, element); + //when the scope is destroyed then remove the slide from the current slides array + scope.$on('$destroy', function() { + carouselCtrl.removeSlide(scope); + }); + + scope.$watch('active', function(active) { + if (active) { + carouselCtrl.select(scope); + } + }); + } + }; +}); + +angular.module('ui.bootstrap.dateparser', []) + +.service('dateParser', ['$locale', 'orderByFilter', function($locale, orderByFilter) { + + this.parsers = {}; + + var formatCodeToRegex = { + 'yyyy': { + regex: '\\d{4}', + apply: function(value) { this.year = +value; } + }, + 'yy': { + regex: '\\d{2}', + apply: function(value) { this.year = +value + 2000; } + }, + 'y': { + regex: '\\d{1,4}', + apply: function(value) { this.year = +value; } + }, + 'MMMM': { + regex: $locale.DATETIME_FORMATS.MONTH.join('|'), + apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); } + }, + 'MMM': { + regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'), + apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); } + }, + 'MM': { + regex: '0[1-9]|1[0-2]', + apply: function(value) { this.month = value - 1; } + }, + 'M': { + regex: '[1-9]|1[0-2]', + apply: function(value) { this.month = value - 1; } + }, + 'dd': { + regex: '[0-2][0-9]{1}|3[0-1]{1}', + apply: function(value) { this.date = +value; } + }, + 'd': { + regex: '[1-2]?[0-9]{1}|3[0-1]{1}', + apply: function(value) { this.date = +value; } + }, + 'EEEE': { + regex: $locale.DATETIME_FORMATS.DAY.join('|') + }, + 'EEE': { + regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|') + } + }; + + function createParser(format) { + var map = [], regex = format.split(''); + + angular.forEach(formatCodeToRegex, function(data, code) { + var index = format.indexOf(code); + + if (index > -1) { + format = format.split(''); + + regex[index] = '(' + data.regex + ')'; + format[index] = '$'; // Custom symbol to define consumed part of format + for (var i = index + 1, n = index + code.length; i < n; i++) { + regex[i] = ''; + format[i] = '$'; + } + format = format.join(''); + + map.push({ index: index, apply: data.apply }); + } + }); + + return { + regex: new RegExp('^' + regex.join('') + '$'), + map: orderByFilter(map, 'index') + }; + } + + this.parse = function(input, format) { + if ( !angular.isString(input) || !format ) { + return input; + } + + format = $locale.DATETIME_FORMATS[format] || format; + + if ( !this.parsers[format] ) { + this.parsers[format] = createParser(format); + } + + var parser = this.parsers[format], + regex = parser.regex, + map = parser.map, + results = input.match(regex); + + if ( results && results.length ) { + var fields = { year: 1900, month: 0, date: 1, hours: 0 }, dt; + + for( var i = 1, n = results.length; i < n; i++ ) { + var mapper = map[i-1]; + if ( mapper.apply ) { + mapper.apply.call(fields, results[i]); + } + } + + if ( isValid(fields.year, fields.month, fields.date) ) { + dt = new Date( fields.year, fields.month, fields.date, fields.hours); + } + + return dt; + } + }; + + // Check if date is valid for specific month (and year for February). + // Month: 0 = Jan, 1 = Feb, etc + function isValid(year, month, date) { + if ( month === 1 && date > 28) { + return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); + } + + if ( month === 3 || month === 5 || month === 8 || month === 10) { + return date < 31; + } + + return true; + } +}]); + +angular.module('ui.bootstrap.position', []) + +/** + * A set of utility methods that can be use to retrieve position of DOM elements. + * It is meant to be used where we need to absolute-position DOM elements in + * relation to other, existing elements (this is the case for tooltips, popovers, + * typeahead suggestions etc.). + */ + .factory('$position', ['$document', '$window', function ($document, $window) { + + function getStyle(el, cssprop) { + if (el.currentStyle) { //IE + return el.currentStyle[cssprop]; + } else if ($window.getComputedStyle) { + return $window.getComputedStyle(el)[cssprop]; + } + // finally try and get inline style + return el.style[cssprop]; + } + + /** + * Checks if a given element is statically positioned + * @param element - raw DOM element + */ + function isStaticPositioned(element) { + return (getStyle(element, 'position') || 'static' ) === 'static'; + } + + /** + * returns the closest, non-statically positioned parentOffset of a given element + * @param element + */ + var parentOffsetEl = function (element) { + var docDomEl = $document[0]; + var offsetParent = element.offsetParent || docDomEl; + while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || docDomEl; + }; + + return { + /** + * Provides read-only equivalent of jQuery's position function: + * http://api.jquery.com/position/ + */ + position: function (element) { + var elBCR = this.offset(element); + var offsetParentBCR = { top: 0, left: 0 }; + var offsetParentEl = parentOffsetEl(element[0]); + if (offsetParentEl != $document[0]) { + offsetParentBCR = this.offset(angular.element(offsetParentEl)); + offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop; + offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft; + } + + var boundingClientRect = element[0].getBoundingClientRect(); + return { + width: boundingClientRect.width || element.prop('offsetWidth'), + height: boundingClientRect.height || element.prop('offsetHeight'), + top: elBCR.top - offsetParentBCR.top, + left: elBCR.left - offsetParentBCR.left + }; + }, + + /** + * Provides read-only equivalent of jQuery's offset function: + * http://api.jquery.com/offset/ + */ + offset: function (element) { + var boundingClientRect = element[0].getBoundingClientRect(); + return { + width: boundingClientRect.width || element.prop('offsetWidth'), + height: boundingClientRect.height || element.prop('offsetHeight'), + top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop), + left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft) + }; + }, + + /** + * Provides coordinates for the targetEl in relation to hostEl + */ + positionElements: function (hostEl, targetEl, positionStr, appendToBody) { + + var positionStrParts = positionStr.split('-'); + var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center'; + + var hostElPos, + targetElWidth, + targetElHeight, + targetElPos; + + hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl); + + targetElWidth = targetEl.prop('offsetWidth'); + targetElHeight = targetEl.prop('offsetHeight'); + + var shiftWidth = { + center: function () { + return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2; + }, + left: function () { + return hostElPos.left; + }, + right: function () { + return hostElPos.left + hostElPos.width; + } + }; + + var shiftHeight = { + center: function () { + return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2; + }, + top: function () { + return hostElPos.top; + }, + bottom: function () { + return hostElPos.top + hostElPos.height; + } + }; + + switch (pos0) { + case 'right': + targetElPos = { + top: shiftHeight[pos1](), + left: shiftWidth[pos0]() + }; + break; + case 'left': + targetElPos = { + top: shiftHeight[pos1](), + left: hostElPos.left - targetElWidth + }; + break; + case 'bottom': + targetElPos = { + top: shiftHeight[pos0](), + left: shiftWidth[pos1]() + }; + break; + default: + targetElPos = { + top: hostElPos.top - targetElHeight, + left: shiftWidth[pos1]() + }; + break; + } + + return targetElPos; + } + }; + }]); + +angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position']) + +.constant('datepickerConfig', { + formatDay: 'dd', + formatMonth: 'MMMM', + formatYear: 'yyyy', + formatDayHeader: 'EEE', + formatDayTitle: 'MMMM yyyy', + formatMonthTitle: 'yyyy', + datepickerMode: 'day', + minMode: 'day', + maxMode: 'year', + showWeeks: true, + startingDay: 0, + yearRange: 20, + minDate: null, + maxDate: null +}) + +.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) { + var self = this, + ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl; + + // Modes chain + this.modes = ['day', 'month', 'year']; + + // Configuration attributes + angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', + 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange'], function( key, index ) { + self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key]; + }); + + // Watchable date attributes + angular.forEach(['minDate', 'maxDate'], function( key ) { + if ( $attrs[key] ) { + $scope.$parent.$watch($parse($attrs[key]), function(value) { + self[key] = value ? new Date(value) : null; + self.refreshView(); + }); + } else { + self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null; + } + }); + + $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; + $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000); + this.activeDate = angular.isDefined($attrs.initDate) ? $scope.$parent.$eval($attrs.initDate) : new Date(); + + $scope.isActive = function(dateObject) { + if (self.compare(dateObject.date, self.activeDate) === 0) { + $scope.activeDateId = dateObject.uid; + return true; + } + return false; + }; + + this.init = function( ngModelCtrl_ ) { + ngModelCtrl = ngModelCtrl_; + + ngModelCtrl.$render = function() { + self.render(); + }; + }; + + this.render = function() { + if ( ngModelCtrl.$modelValue ) { + var date = new Date( ngModelCtrl.$modelValue ), + isValid = !isNaN(date); + + if ( isValid ) { + this.activeDate = date; + } else { + $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'); + } + ngModelCtrl.$setValidity('date', isValid); + } + this.refreshView(); + }; + + this.refreshView = function() { + if ( this.element ) { + this._refreshView(); + + var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; + ngModelCtrl.$setValidity('date-disabled', !date || (this.element && !this.isDisabled(date))); + } + }; + + this.createDateObject = function(date, format) { + var model = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; + return { + date: date, + label: dateFilter(date, format), + selected: model && this.compare(date, model) === 0, + disabled: this.isDisabled(date), + current: this.compare(date, new Date()) === 0 + }; + }; + + this.isDisabled = function( date ) { + return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode}))); + }; + + // Split array into smaller arrays + this.split = function(arr, size) { + var arrays = []; + while (arr.length > 0) { + arrays.push(arr.splice(0, size)); + } + return arrays; + }; + + $scope.select = function( date ) { + if ( $scope.datepickerMode === self.minMode ) { + var dt = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : new Date(0, 0, 0, 0, 0, 0, 0); + dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() ); + ngModelCtrl.$setViewValue( dt ); + ngModelCtrl.$render(); + } else { + self.activeDate = date; + $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) - 1 ]; + } + }; + + $scope.move = function( direction ) { + var year = self.activeDate.getFullYear() + direction * (self.step.years || 0), + month = self.activeDate.getMonth() + direction * (self.step.months || 0); + self.activeDate.setFullYear(year, month, 1); + self.refreshView(); + }; + + $scope.toggleMode = function( direction ) { + direction = direction || 1; + + if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) { + return; + } + + $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) + direction ]; + }; + + // Key event mapper + $scope.keys = { 13:'enter', 32:'space', 33:'pageup', 34:'pagedown', 35:'end', 36:'home', 37:'left', 38:'up', 39:'right', 40:'down' }; + + var focusElement = function() { + $timeout(function() { + self.element[0].focus(); + }, 0 , false); + }; + + // Listen for focus requests from popup directive + $scope.$on('datepicker.focus', focusElement); + + $scope.keydown = function( evt ) { + var key = $scope.keys[evt.which]; + + if ( !key || evt.shiftKey || evt.altKey ) { + return; + } + + evt.preventDefault(); + evt.stopPropagation(); + + if (key === 'enter' || key === 'space') { + if ( self.isDisabled(self.activeDate)) { + return; // do nothing + } + $scope.select(self.activeDate); + focusElement(); + } else if (evt.ctrlKey && (key === 'up' || key === 'down')) { + $scope.toggleMode(key === 'up' ? 1 : -1); + focusElement(); + } else { + self.handleKeyDown(key, evt); + self.refreshView(); + } + }; +}]) + +.directive( 'datepicker', function () { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/datepicker.html', + scope: { + datepickerMode: '=?', + dateDisabled: '&' + }, + require: ['datepicker', '?^ngModel'], + controller: 'DatepickerController', + link: function(scope, element, attrs, ctrls) { + var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if ( ngModelCtrl ) { + datepickerCtrl.init( ngModelCtrl ); + } + } + }; +}) + +.directive('daypicker', ['dateFilter', function (dateFilter) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/day.html', + require: '^datepicker', + link: function(scope, element, attrs, ctrl) { + scope.showWeeks = ctrl.showWeeks; + + ctrl.step = { months: 1 }; + ctrl.element = element; + + var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function getDaysInMonth( year, month ) { + return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month]; + } + + function getDates(startDate, n) { + var dates = new Array(n), current = new Date(startDate), i = 0; + current.setHours(12); // Prevent repeated dates because of timezone bug + while ( i < n ) { + dates[i++] = new Date(current); + current.setDate( current.getDate() + 1 ); + } + return dates; + } + + ctrl._refreshView = function() { + var year = ctrl.activeDate.getFullYear(), + month = ctrl.activeDate.getMonth(), + firstDayOfMonth = new Date(year, month, 1), + difference = ctrl.startingDay - firstDayOfMonth.getDay(), + numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference, + firstDate = new Date(firstDayOfMonth); + + if ( numDisplayedFromPreviousMonth > 0 ) { + firstDate.setDate( - numDisplayedFromPreviousMonth + 1 ); + } + + // 42 is the number of days on a six-month calendar + var days = getDates(firstDate, 42); + for (var i = 0; i < 42; i ++) { + days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), { + secondary: days[i].getMonth() !== month, + uid: scope.uniqueId + '-' + i + }); + } + + scope.labels = new Array(7); + for (var j = 0; j < 7; j++) { + scope.labels[j] = { + abbr: dateFilter(days[j].date, ctrl.formatDayHeader), + full: dateFilter(days[j].date, 'EEEE') + }; + } + + scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle); + scope.rows = ctrl.split(days, 7); + + if ( scope.showWeeks ) { + scope.weekNumbers = []; + var weekNumber = getISO8601WeekNumber( scope.rows[0][0].date ), + numWeeks = scope.rows.length; + while( scope.weekNumbers.push(weekNumber++) < numWeeks ) {} + } + }; + + ctrl.compare = function(date1, date2) { + return (new Date( date1.getFullYear(), date1.getMonth(), date1.getDate() ) - new Date( date2.getFullYear(), date2.getMonth(), date2.getDate() ) ); + }; + + function getISO8601WeekNumber(date) { + var checkDate = new Date(date); + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + } + + ctrl.handleKeyDown = function( key, evt ) { + var date = ctrl.activeDate.getDate(); + + if (key === 'left') { + date = date - 1; // up + } else if (key === 'up') { + date = date - 7; // down + } else if (key === 'right') { + date = date + 1; // down + } else if (key === 'down') { + date = date + 7; + } else if (key === 'pageup' || key === 'pagedown') { + var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1); + ctrl.activeDate.setMonth(month, 1); + date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date); + } else if (key === 'home') { + date = 1; + } else if (key === 'end') { + date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()); + } + ctrl.activeDate.setDate(date); + }; + + ctrl.refreshView(); + } + }; +}]) + +.directive('monthpicker', ['dateFilter', function (dateFilter) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/month.html', + require: '^datepicker', + link: function(scope, element, attrs, ctrl) { + ctrl.step = { years: 1 }; + ctrl.element = element; + + ctrl._refreshView = function() { + var months = new Array(12), + year = ctrl.activeDate.getFullYear(); + + for ( var i = 0; i < 12; i++ ) { + months[i] = angular.extend(ctrl.createDateObject(new Date(year, i, 1), ctrl.formatMonth), { + uid: scope.uniqueId + '-' + i + }); + } + + scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle); + scope.rows = ctrl.split(months, 3); + }; + + ctrl.compare = function(date1, date2) { + return new Date( date1.getFullYear(), date1.getMonth() ) - new Date( date2.getFullYear(), date2.getMonth() ); + }; + + ctrl.handleKeyDown = function( key, evt ) { + var date = ctrl.activeDate.getMonth(); + + if (key === 'left') { + date = date - 1; // up + } else if (key === 'up') { + date = date - 3; // down + } else if (key === 'right') { + date = date + 1; // down + } else if (key === 'down') { + date = date + 3; + } else if (key === 'pageup' || key === 'pagedown') { + var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1); + ctrl.activeDate.setFullYear(year); + } else if (key === 'home') { + date = 0; + } else if (key === 'end') { + date = 11; + } + ctrl.activeDate.setMonth(date); + }; + + ctrl.refreshView(); + } + }; +}]) + +.directive('yearpicker', ['dateFilter', function (dateFilter) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/datepicker/year.html', + require: '^datepicker', + link: function(scope, element, attrs, ctrl) { + var range = ctrl.yearRange; + + ctrl.step = { years: range }; + ctrl.element = element; + + function getStartingYear( year ) { + return parseInt((year - 1) / range, 10) * range + 1; + } + + ctrl._refreshView = function() { + var years = new Array(range); + + for ( var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++ ) { + years[i] = angular.extend(ctrl.createDateObject(new Date(start + i, 0, 1), ctrl.formatYear), { + uid: scope.uniqueId + '-' + i + }); + } + + scope.title = [years[0].label, years[range - 1].label].join(' - '); + scope.rows = ctrl.split(years, 5); + }; + + ctrl.compare = function(date1, date2) { + return date1.getFullYear() - date2.getFullYear(); + }; + + ctrl.handleKeyDown = function( key, evt ) { + var date = ctrl.activeDate.getFullYear(); + + if (key === 'left') { + date = date - 1; // up + } else if (key === 'up') { + date = date - 5; // down + } else if (key === 'right') { + date = date + 1; // down + } else if (key === 'down') { + date = date + 5; + } else if (key === 'pageup' || key === 'pagedown') { + date += (key === 'pageup' ? - 1 : 1) * ctrl.step.years; + } else if (key === 'home') { + date = getStartingYear( ctrl.activeDate.getFullYear() ); + } else if (key === 'end') { + date = getStartingYear( ctrl.activeDate.getFullYear() ) + range - 1; + } + ctrl.activeDate.setFullYear(date); + }; + + ctrl.refreshView(); + } + }; +}]) + +.constant('datepickerPopupConfig', { + datepickerPopup: 'yyyy-MM-dd', + currentText: 'Today', + clearText: 'Clear', + closeText: 'Done', + closeOnDateSelection: true, + appendToBody: false, + showButtonBar: true +}) + +.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig', +function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) { + return { + restrict: 'EA', + require: 'ngModel', + scope: { + isOpen: '=?', + currentText: '@', + clearText: '@', + closeText: '@', + dateDisabled: '&' + }, + link: function(scope, element, attrs, ngModel) { + var dateFormat, + closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection, + appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody; + + scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar; + + scope.getText = function( key ) { + return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text']; + }; + + attrs.$observe('datepickerPopup', function(value) { + dateFormat = value || datepickerPopupConfig.datepickerPopup; + ngModel.$render(); + }); + + // popup element used to display calendar + var popupEl = angular.element('
      '); + popupEl.attr({ + 'ng-model': 'date', + 'ng-change': 'dateSelection()' + }); + + function cameltoDash( string ){ + return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); }); + } + + // datepicker element + var datepickerEl = angular.element(popupEl.children()[0]); + if ( attrs.datepickerOptions ) { + angular.forEach(scope.$parent.$eval(attrs.datepickerOptions), function( value, option ) { + datepickerEl.attr( cameltoDash(option), value ); + }); + } + + scope.watchData = {}; + angular.forEach(['minDate', 'maxDate', 'datepickerMode'], function( key ) { + if ( attrs[key] ) { + var getAttribute = $parse(attrs[key]); + scope.$parent.$watch(getAttribute, function(value){ + scope.watchData[key] = value; + }); + datepickerEl.attr(cameltoDash(key), 'watchData.' + key); + + // Propagate changes from datepicker to outside + if ( key === 'datepickerMode' ) { + var setAttribute = getAttribute.assign; + scope.$watch('watchData.' + key, function(value, oldvalue) { + if ( value !== oldvalue ) { + setAttribute(scope.$parent, value); + } + }); + } + } + }); + if (attrs.dateDisabled) { + datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })'); + } + + function parseDate(viewValue) { + if (!viewValue) { + ngModel.$setValidity('date', true); + return null; + } else if (angular.isDate(viewValue) && !isNaN(viewValue)) { + ngModel.$setValidity('date', true); + return viewValue; + } else if (angular.isString(viewValue)) { + var date = dateParser.parse(viewValue, dateFormat) || new Date(viewValue); + if (isNaN(date)) { + ngModel.$setValidity('date', false); + return undefined; + } else { + ngModel.$setValidity('date', true); + return date; + } + } else { + ngModel.$setValidity('date', false); + return undefined; + } + } + ngModel.$parsers.unshift(parseDate); + + // Inner change + scope.dateSelection = function(dt) { + if (angular.isDefined(dt)) { + scope.date = dt; + } + ngModel.$setViewValue(scope.date); + ngModel.$render(); + + if ( closeOnDateSelection ) { + scope.isOpen = false; + element[0].focus(); + } + }; + + element.bind('input change keyup', function() { + scope.$apply(function() { + scope.date = ngModel.$modelValue; + }); + }); + + // Outter change + ngModel.$render = function() { + var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : ''; + element.val(date); + scope.date = parseDate( ngModel.$modelValue ); + }; + + var documentClickBind = function(event) { + if (scope.isOpen && event.target !== element[0]) { + scope.$apply(function() { + scope.isOpen = false; + }); + } + }; + + var keydown = function(evt, noApply) { + scope.keydown(evt); + }; + element.bind('keydown', keydown); + + scope.keydown = function(evt) { + if (evt.which === 27) { + evt.preventDefault(); + evt.stopPropagation(); + scope.close(); + } else if (evt.which === 40 && !scope.isOpen) { + scope.isOpen = true; + } + }; + + scope.$watch('isOpen', function(value) { + if (value) { + scope.$broadcast('datepicker.focus'); + scope.position = appendToBody ? $position.offset(element) : $position.position(element); + scope.position.top = scope.position.top + element.prop('offsetHeight'); + + $document.bind('click', documentClickBind); + } else { + $document.unbind('click', documentClickBind); + } + }); + + scope.select = function( date ) { + if (date === 'today') { + var today = new Date(); + if (angular.isDate(ngModel.$modelValue)) { + date = new Date(ngModel.$modelValue); + date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate()); + } else { + date = new Date(today.setHours(0, 0, 0, 0)); + } + } + scope.dateSelection( date ); + }; + + scope.close = function() { + scope.isOpen = false; + element[0].focus(); + }; + + var $popup = $compile(popupEl)(scope); + // Prevent jQuery cache memory leak (template is now redundant after linking) + popupEl.remove(); + + if ( appendToBody ) { + $document.find('body').append($popup); + } else { + element.after($popup); + } + + scope.$on('$destroy', function() { + $popup.remove(); + element.unbind('keydown', keydown); + $document.unbind('click', documentClickBind); + }); + } + }; +}]) + +.directive('datepickerPopupWrap', function() { + return { + restrict:'EA', + replace: true, + transclude: true, + templateUrl: 'template/datepicker/popup.html', + link:function (scope, element, attrs) { + element.bind('click', function(event) { + event.preventDefault(); + event.stopPropagation(); + }); + } + }; +}); + +angular.module('ui.bootstrap.dropdown', []) + +.constant('dropdownConfig', { + openClass: 'open' +}) + +.service('dropdownService', ['$document', function($document) { + var openScope = null; + + this.open = function( dropdownScope ) { + if ( !openScope ) { + $document.bind('click', closeDropdown); + $document.bind('keydown', escapeKeyBind); + } + + if ( openScope && openScope !== dropdownScope ) { + openScope.isOpen = false; + } + + openScope = dropdownScope; + }; + + this.close = function( dropdownScope ) { + if ( openScope === dropdownScope ) { + openScope = null; + $document.unbind('click', closeDropdown); + $document.unbind('keydown', escapeKeyBind); + } + }; + + var closeDropdown = function( evt ) { + // This method may still be called during the same mouse event that + // unbound this event handler. So check openScope before proceeding. + if (!openScope) { return; } + + var toggleElement = openScope.getToggleElement(); + if ( evt && toggleElement && toggleElement[0].contains(evt.target) ) { + return; + } + + openScope.$apply(function() { + openScope.isOpen = false; + }); + }; + + var escapeKeyBind = function( evt ) { + if ( evt.which === 27 ) { + openScope.focusToggleElement(); + closeDropdown(); + } + }; +}]) + +.controller('DropdownController', ['$scope', '$attrs', '$parse', 'dropdownConfig', 'dropdownService', '$animate', function($scope, $attrs, $parse, dropdownConfig, dropdownService, $animate) { + var self = this, + scope = $scope.$new(), // create a child scope so we are not polluting original one + openClass = dropdownConfig.openClass, + getIsOpen, + setIsOpen = angular.noop, + toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop; + + this.init = function( element ) { + self.$element = element; + + if ( $attrs.isOpen ) { + getIsOpen = $parse($attrs.isOpen); + setIsOpen = getIsOpen.assign; + + $scope.$watch(getIsOpen, function(value) { + scope.isOpen = !!value; + }); + } + }; + + this.toggle = function( open ) { + return scope.isOpen = arguments.length ? !!open : !scope.isOpen; + }; + + // Allow other directives to watch status + this.isOpen = function() { + return scope.isOpen; + }; + + scope.getToggleElement = function() { + return self.toggleElement; + }; + + scope.focusToggleElement = function() { + if ( self.toggleElement ) { + self.toggleElement[0].focus(); + } + }; + + scope.$watch('isOpen', function( isOpen, wasOpen ) { + $animate[isOpen ? 'addClass' : 'removeClass'](self.$element, openClass); + + if ( isOpen ) { + scope.focusToggleElement(); + dropdownService.open( scope ); + } else { + dropdownService.close( scope ); + } + + setIsOpen($scope, isOpen); + if (angular.isDefined(isOpen) && isOpen !== wasOpen) { + toggleInvoker($scope, { open: !!isOpen }); + } + }); + + $scope.$on('$locationChangeSuccess', function() { + scope.isOpen = false; + }); + + $scope.$on('$destroy', function() { + scope.$destroy(); + }); +}]) + +.directive('dropdown', function() { + return { + controller: 'DropdownController', + link: function(scope, element, attrs, dropdownCtrl) { + dropdownCtrl.init( element ); + } + }; +}) + +.directive('dropdownToggle', function() { + return { + require: '?^dropdown', + link: function(scope, element, attrs, dropdownCtrl) { + if ( !dropdownCtrl ) { + return; + } + + dropdownCtrl.toggleElement = element; + + var toggleDropdown = function(event) { + event.preventDefault(); + + if ( !element.hasClass('disabled') && !attrs.disabled ) { + scope.$apply(function() { + dropdownCtrl.toggle(); + }); + } + }; + + element.bind('click', toggleDropdown); + + // WAI-ARIA + element.attr({ 'aria-haspopup': true, 'aria-expanded': false }); + scope.$watch(dropdownCtrl.isOpen, function( isOpen ) { + element.attr('aria-expanded', !!isOpen); + }); + + scope.$on('$destroy', function() { + element.unbind('click', toggleDropdown); + }); + } + }; +}); + +angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) + +/** + * A helper, internal data structure that acts as a map but also allows getting / removing + * elements in the LIFO order + */ + .factory('$$stackedMap', function () { + return { + createNew: function () { + var stack = []; + + return { + add: function (key, value) { + stack.push({ + key: key, + value: value + }); + }, + get: function (key) { + for (var i = 0; i < stack.length; i++) { + if (key == stack[i].key) { + return stack[i]; + } + } + }, + keys: function() { + var keys = []; + for (var i = 0; i < stack.length; i++) { + keys.push(stack[i].key); + } + return keys; + }, + top: function () { + return stack[stack.length - 1]; + }, + remove: function (key) { + var idx = -1; + for (var i = 0; i < stack.length; i++) { + if (key == stack[i].key) { + idx = i; + break; + } + } + return stack.splice(idx, 1)[0]; + }, + removeTop: function () { + return stack.splice(stack.length - 1, 1)[0]; + }, + length: function () { + return stack.length; + } + }; + } + }; + }) + +/** + * A helper directive for the $modal service. It creates a backdrop element. + */ + .directive('modalBackdrop', ['$timeout', function ($timeout) { + return { + restrict: 'EA', + replace: true, + templateUrl: 'template/modal/backdrop.html', + link: function (scope, element, attrs) { + scope.backdropClass = attrs.backdropClass || ''; + + scope.animate = false; + + //trigger CSS transitions + $timeout(function () { + scope.animate = true; + }); + } + }; + }]) + + .directive('modalWindow', ['$modalStack', '$timeout', function ($modalStack, $timeout) { + return { + restrict: 'EA', + scope: { + index: '@', + animate: '=' + }, + replace: true, + transclude: true, + templateUrl: function(tElement, tAttrs) { + return tAttrs.templateUrl || 'template/modal/window.html'; + }, + link: function (scope, element, attrs) { + element.addClass(attrs.windowClass || ''); + scope.size = attrs.size; + + $timeout(function () { + // trigger CSS transitions + scope.animate = true; + + /** + * Auto-focusing of a freshly-opened modal element causes any child elements + * with the autofocus attribute to lose focus. This is an issue on touch + * based devices which will show and then hide the onscreen keyboard. + * Attempts to refocus the autofocus element via JavaScript will not reopen + * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus + * the modal element if the modal does not contain an autofocus element. + */ + if (!element[0].querySelectorAll('[autofocus]').length) { + element[0].focus(); + } + }); + + scope.close = function (evt) { + var modal = $modalStack.getTop(); + if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) { + evt.preventDefault(); + evt.stopPropagation(); + $modalStack.dismiss(modal.key, 'backdrop click'); + } + }; + } + }; + }]) + + .directive('modalTransclude', function () { + return { + link: function($scope, $element, $attrs, controller, $transclude) { + $transclude($scope.$parent, function(clone) { + $element.empty(); + $element.append(clone); + }); + } + }; + }) + + .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap', + function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) { + + var OPENED_MODAL_CLASS = 'modal-open'; + + var backdropDomEl, backdropScope; + var openedWindows = $$stackedMap.createNew(); + var $modalStack = {}; + + function backdropIndex() { + var topBackdropIndex = -1; + var opened = openedWindows.keys(); + for (var i = 0; i < opened.length; i++) { + if (openedWindows.get(opened[i]).value.backdrop) { + topBackdropIndex = i; + } + } + return topBackdropIndex; + } + + $rootScope.$watch(backdropIndex, function(newBackdropIndex){ + if (backdropScope) { + backdropScope.index = newBackdropIndex; + } + }); + + function removeModalWindow(modalInstance) { + + var body = $document.find('body').eq(0); + var modalWindow = openedWindows.get(modalInstance).value; + + //clean up the stack + openedWindows.remove(modalInstance); + + //remove window DOM element + removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, function() { + modalWindow.modalScope.$destroy(); + body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0); + checkRemoveBackdrop(); + }); + } + + function checkRemoveBackdrop() { + //remove backdrop if no longer needed + if (backdropDomEl && backdropIndex() == -1) { + var backdropScopeRef = backdropScope; + removeAfterAnimate(backdropDomEl, backdropScope, 150, function () { + backdropScopeRef.$destroy(); + backdropScopeRef = null; + }); + backdropDomEl = undefined; + backdropScope = undefined; + } + } + + function removeAfterAnimate(domEl, scope, emulateTime, done) { + // Closing animation + scope.animate = false; + + var transitionEndEventName = $transition.transitionEndEventName; + if (transitionEndEventName) { + // transition out + var timeout = $timeout(afterAnimating, emulateTime); + + domEl.bind(transitionEndEventName, function () { + $timeout.cancel(timeout); + afterAnimating(); + scope.$apply(); + }); + } else { + // Ensure this call is async + $timeout(afterAnimating); + } + + function afterAnimating() { + if (afterAnimating.done) { + return; + } + afterAnimating.done = true; + + domEl.remove(); + if (done) { + done(); + } + } + } + + $document.bind('keydown', function (evt) { + var modal; + + if (evt.which === 27) { + modal = openedWindows.top(); + if (modal && modal.value.keyboard) { + evt.preventDefault(); + $rootScope.$apply(function () { + $modalStack.dismiss(modal.key, 'escape key press'); + }); + } + } + }); + + $modalStack.open = function (modalInstance, modal) { + + openedWindows.add(modalInstance, { + deferred: modal.deferred, + modalScope: modal.scope, + backdrop: modal.backdrop, + keyboard: modal.keyboard + }); + + var body = $document.find('body').eq(0), + currBackdropIndex = backdropIndex(); + + if (currBackdropIndex >= 0 && !backdropDomEl) { + backdropScope = $rootScope.$new(true); + backdropScope.index = currBackdropIndex; + var angularBackgroundDomEl = angular.element('
      '); + angularBackgroundDomEl.attr('backdrop-class', modal.backdropClass); + backdropDomEl = $compile(angularBackgroundDomEl)(backdropScope); + body.append(backdropDomEl); + } + + var angularDomEl = angular.element('
      '); + angularDomEl.attr({ + 'template-url': modal.windowTemplateUrl, + 'window-class': modal.windowClass, + 'size': modal.size, + 'index': openedWindows.length() - 1, + 'animate': 'animate' + }).html(modal.content); + + var modalDomEl = $compile(angularDomEl)(modal.scope); + openedWindows.top().value.modalDomEl = modalDomEl; + body.append(modalDomEl); + body.addClass(OPENED_MODAL_CLASS); + }; + + $modalStack.close = function (modalInstance, result) { + var modalWindow = openedWindows.get(modalInstance); + if (modalWindow) { + modalWindow.value.deferred.resolve(result); + removeModalWindow(modalInstance); + } + }; + + $modalStack.dismiss = function (modalInstance, reason) { + var modalWindow = openedWindows.get(modalInstance); + if (modalWindow) { + modalWindow.value.deferred.reject(reason); + removeModalWindow(modalInstance); + } + }; + + $modalStack.dismissAll = function (reason) { + var topModal = this.getTop(); + while (topModal) { + this.dismiss(topModal.key, reason); + topModal = this.getTop(); + } + }; + + $modalStack.getTop = function () { + return openedWindows.top(); + }; + + return $modalStack; + }]) + + .provider('$modal', function () { + + var $modalProvider = { + options: { + backdrop: true, //can be also false or 'static' + keyboard: true + }, + $get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack', + function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) { + + var $modal = {}; + + function getTemplatePromise(options) { + return options.template ? $q.when(options.template) : + $http.get(angular.isFunction(options.templateUrl) ? (options.templateUrl)() : options.templateUrl, + {cache: $templateCache}).then(function (result) { + return result.data; + }); + } + + function getResolvePromises(resolves) { + var promisesArr = []; + angular.forEach(resolves, function (value) { + if (angular.isFunction(value) || angular.isArray(value)) { + promisesArr.push($q.when($injector.invoke(value))); + } + }); + return promisesArr; + } + + $modal.open = function (modalOptions) { + + var modalResultDeferred = $q.defer(); + var modalOpenedDeferred = $q.defer(); + + //prepare an instance of a modal to be injected into controllers and returned to a caller + var modalInstance = { + result: modalResultDeferred.promise, + opened: modalOpenedDeferred.promise, + close: function (result) { + $modalStack.close(modalInstance, result); + }, + dismiss: function (reason) { + $modalStack.dismiss(modalInstance, reason); + } + }; + + //merge and clean up options + modalOptions = angular.extend({}, $modalProvider.options, modalOptions); + modalOptions.resolve = modalOptions.resolve || {}; + + //verify options + if (!modalOptions.template && !modalOptions.templateUrl) { + throw new Error('One of template or templateUrl options is required.'); + } + + var templateAndResolvePromise = + $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve))); + + + templateAndResolvePromise.then(function resolveSuccess(tplAndVars) { + + var modalScope = (modalOptions.scope || $rootScope).$new(); + modalScope.$close = modalInstance.close; + modalScope.$dismiss = modalInstance.dismiss; + + var ctrlInstance, ctrlLocals = {}; + var resolveIter = 1; + + //controllers + if (modalOptions.controller) { + ctrlLocals.$scope = modalScope; + ctrlLocals.$modalInstance = modalInstance; + angular.forEach(modalOptions.resolve, function (value, key) { + ctrlLocals[key] = tplAndVars[resolveIter++]; + }); + + ctrlInstance = $controller(modalOptions.controller, ctrlLocals); + if (modalOptions.controllerAs) { + modalScope[modalOptions.controllerAs] = ctrlInstance; + } + } + + $modalStack.open(modalInstance, { + scope: modalScope, + deferred: modalResultDeferred, + content: tplAndVars[0], + backdrop: modalOptions.backdrop, + keyboard: modalOptions.keyboard, + backdropClass: modalOptions.backdropClass, + windowClass: modalOptions.windowClass, + windowTemplateUrl: modalOptions.windowTemplateUrl, + size: modalOptions.size + }); + + }, function resolveError(reason) { + modalResultDeferred.reject(reason); + }); + + templateAndResolvePromise.then(function () { + modalOpenedDeferred.resolve(true); + }, function () { + modalOpenedDeferred.reject(false); + }); + + return modalInstance; + }; + + return $modal; + }] + }; + + return $modalProvider; + }); + +angular.module('ui.bootstrap.pagination', []) + +.controller('PaginationController', ['$scope', '$attrs', '$parse', function ($scope, $attrs, $parse) { + var self = this, + ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl + setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop; + + this.init = function(ngModelCtrl_, config) { + ngModelCtrl = ngModelCtrl_; + this.config = config; + + ngModelCtrl.$render = function() { + self.render(); + }; + + if ($attrs.itemsPerPage) { + $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) { + self.itemsPerPage = parseInt(value, 10); + $scope.totalPages = self.calculateTotalPages(); + }); + } else { + this.itemsPerPage = config.itemsPerPage; + } + }; + + this.calculateTotalPages = function() { + var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage); + return Math.max(totalPages || 0, 1); + }; + + this.render = function() { + $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1; + }; + + $scope.selectPage = function(page) { + if ( $scope.page !== page && page > 0 && page <= $scope.totalPages) { + ngModelCtrl.$setViewValue(page); + ngModelCtrl.$render(); + } + }; + + $scope.getText = function( key ) { + return $scope[key + 'Text'] || self.config[key + 'Text']; + }; + $scope.noPrevious = function() { + return $scope.page === 1; + }; + $scope.noNext = function() { + return $scope.page === $scope.totalPages; + }; + + $scope.$watch('totalItems', function() { + $scope.totalPages = self.calculateTotalPages(); + }); + + $scope.$watch('totalPages', function(value) { + setNumPages($scope.$parent, value); // Readonly variable + + if ( $scope.page > value ) { + $scope.selectPage(value); + } else { + ngModelCtrl.$render(); + } + }); +}]) + +.constant('paginationConfig', { + itemsPerPage: 10, + boundaryLinks: false, + directionLinks: true, + firstText: 'First', + previousText: 'Previous', + nextText: 'Next', + lastText: 'Last', + rotate: true +}) + +.directive('pagination', ['$parse', 'paginationConfig', function($parse, paginationConfig) { + return { + restrict: 'EA', + scope: { + totalItems: '=', + firstText: '@', + previousText: '@', + nextText: '@', + lastText: '@' + }, + require: ['pagination', '?ngModel'], + controller: 'PaginationController', + templateUrl: 'template/pagination/pagination.html', + replace: true, + link: function(scope, element, attrs, ctrls) { + var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if (!ngModelCtrl) { + return; // do nothing if no ng-model + } + + // Setup configuration parameters + var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize, + rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate; + scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks; + scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks; + + paginationCtrl.init(ngModelCtrl, paginationConfig); + + if (attrs.maxSize) { + scope.$parent.$watch($parse(attrs.maxSize), function(value) { + maxSize = parseInt(value, 10); + paginationCtrl.render(); + }); + } + + // Create page object used in template + function makePage(number, text, isActive) { + return { + number: number, + text: text, + active: isActive + }; + } + + function getPages(currentPage, totalPages) { + var pages = []; + + // Default page limits + var startPage = 1, endPage = totalPages; + var isMaxSized = ( angular.isDefined(maxSize) && maxSize < totalPages ); + + // recompute if maxSize + if ( isMaxSized ) { + if ( rotate ) { + // Current page is displayed in the middle of the visible ones + startPage = Math.max(currentPage - Math.floor(maxSize/2), 1); + endPage = startPage + maxSize - 1; + + // Adjust if limit is exceeded + if (endPage > totalPages) { + endPage = totalPages; + startPage = endPage - maxSize + 1; + } + } else { + // Visible pages are paginated with maxSize + startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1; + + // Adjust last page if limit is exceeded + endPage = Math.min(startPage + maxSize - 1, totalPages); + } + } + + // Add page number links + for (var number = startPage; number <= endPage; number++) { + var page = makePage(number, number, number === currentPage); + pages.push(page); + } + + // Add links to move between page sets + if ( isMaxSized && ! rotate ) { + if ( startPage > 1 ) { + var previousPageSet = makePage(startPage - 1, '...', false); + pages.unshift(previousPageSet); + } + + if ( endPage < totalPages ) { + var nextPageSet = makePage(endPage + 1, '...', false); + pages.push(nextPageSet); + } + } + + return pages; + } + + var originalRender = paginationCtrl.render; + paginationCtrl.render = function() { + originalRender(); + if (scope.page > 0 && scope.page <= scope.totalPages) { + scope.pages = getPages(scope.page, scope.totalPages); + } + }; + } + }; +}]) + +.constant('pagerConfig', { + itemsPerPage: 10, + previousText: '« Previous', + nextText: 'Next »', + align: true +}) + +.directive('pager', ['pagerConfig', function(pagerConfig) { + return { + restrict: 'EA', + scope: { + totalItems: '=', + previousText: '@', + nextText: '@' + }, + require: ['pager', '?ngModel'], + controller: 'PaginationController', + templateUrl: 'template/pagination/pager.html', + replace: true, + link: function(scope, element, attrs, ctrls) { + var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if (!ngModelCtrl) { + return; // do nothing if no ng-model + } + + scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align; + paginationCtrl.init(ngModelCtrl, pagerConfig); + } + }; +}]); + +/** + * The following features are still outstanding: animation as a + * function, placement as a function, inside, support for more triggers than + * just mouse enter/leave, html tooltips, and selector delegation. + */ +angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap.bindHtml' ] ) + +/** + * The $tooltip service creates tooltip- and popover-like directives as well as + * houses global options for them. + */ +.provider( '$tooltip', function () { + // The default options tooltip and popover. + var defaultOptions = { + placement: 'top', + animation: true, + popupDelay: 0 + }; + + // Default hide triggers for each show trigger + var triggerMap = { + 'mouseenter': 'mouseleave', + 'click': 'click', + 'focus': 'blur' + }; + + // The options specified to the provider globally. + var globalOptions = {}; + + /** + * `options({})` allows global configuration of all tooltips in the + * application. + * + * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) { + * // place tooltips left instead of top by default + * $tooltipProvider.options( { placement: 'left' } ); + * }); + */ + this.options = function( value ) { + angular.extend( globalOptions, value ); + }; + + /** + * This allows you to extend the set of trigger mappings available. E.g.: + * + * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' ); + */ + this.setTriggers = function setTriggers ( triggers ) { + angular.extend( triggerMap, triggers ); + }; + + /** + * This is a helper function for translating camel-case to snake-case. + */ + function snake_case(name){ + var regexp = /[A-Z]/g; + var separator = '-'; + return name.replace(regexp, function(letter, pos) { + return (pos ? separator : '') + letter.toLowerCase(); + }); + } + + /** + * Returns the actual instance of the $tooltip service. + * TODO support multiple triggers + */ + this.$get = [ '$window', '$compile', '$timeout', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $document, $position, $interpolate ) { + return function $tooltip ( type, prefix, defaultTriggerShow ) { + var options = angular.extend( {}, defaultOptions, globalOptions ); + + /** + * Returns an object of show and hide triggers. + * + * If a trigger is supplied, + * it is used to show the tooltip; otherwise, it will use the `trigger` + * option passed to the `$tooltipProvider.options` method; else it will + * default to the trigger supplied to this directive factory. + * + * The hide trigger is based on the show trigger. If the `trigger` option + * was passed to the `$tooltipProvider.options` method, it will use the + * mapped trigger from `triggerMap` or the passed trigger if the map is + * undefined; otherwise, it uses the `triggerMap` value of the show + * trigger; else it will just use the show trigger. + */ + function getTriggers ( trigger ) { + var show = trigger || options.trigger || defaultTriggerShow; + var hide = triggerMap[show] || show; + return { + show: show, + hide: hide + }; + } + + var directiveName = snake_case( type ); + + var startSym = $interpolate.startSymbol(); + var endSym = $interpolate.endSymbol(); + var template = + '
      '+ + '
      '; + + return { + restrict: 'EA', + compile: function (tElem, tAttrs) { + var tooltipLinker = $compile( template ); + + return function link ( scope, element, attrs ) { + var tooltip; + var tooltipLinkedScope; + var transitionTimeout; + var popupTimeout; + var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false; + var triggers = getTriggers( undefined ); + var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']); + var ttScope = scope.$new(true); + + var positionTooltip = function () { + + var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody); + ttPosition.top += 'px'; + ttPosition.left += 'px'; + + // Now set the calculated positioning. + tooltip.css( ttPosition ); + }; + + // By default, the tooltip is not open. + // TODO add ability to start tooltip opened + ttScope.isOpen = false; + + function toggleTooltipBind () { + if ( ! ttScope.isOpen ) { + showTooltipBind(); + } else { + hideTooltipBind(); + } + } + + // Show the tooltip with delay if specified, otherwise show it immediately + function showTooltipBind() { + if(hasEnableExp && !scope.$eval(attrs[prefix+'Enable'])) { + return; + } + + prepareTooltip(); + + if ( ttScope.popupDelay ) { + // Do nothing if the tooltip was already scheduled to pop-up. + // This happens if show is triggered multiple times before any hide is triggered. + if (!popupTimeout) { + popupTimeout = $timeout( show, ttScope.popupDelay, false ); + popupTimeout.then(function(reposition){reposition();}); + } + } else { + show()(); + } + } + + function hideTooltipBind () { + scope.$apply(function () { + hide(); + }); + } + + // Show the tooltip popup element. + function show() { + + popupTimeout = null; + + // If there is a pending remove transition, we must cancel it, lest the + // tooltip be mysteriously removed. + if ( transitionTimeout ) { + $timeout.cancel( transitionTimeout ); + transitionTimeout = null; + } + + // Don't show empty tooltips. + if ( ! ttScope.content ) { + return angular.noop; + } + + createTooltip(); + + // Set the initial positioning. + tooltip.css({ top: 0, left: 0, display: 'block' }); + ttScope.$digest(); + + positionTooltip(); + + // And show the tooltip. + ttScope.isOpen = true; + ttScope.$digest(); // digest required as $apply is not called + + // Return positioning function as promise callback for correct + // positioning after draw. + return positionTooltip; + } + + // Hide the tooltip popup element. + function hide() { + // First things first: we don't show it anymore. + ttScope.isOpen = false; + + //if tooltip is going to be shown after delay, we must cancel this + $timeout.cancel( popupTimeout ); + popupTimeout = null; + + // And now we remove it from the DOM. However, if we have animation, we + // need to wait for it to expire beforehand. + // FIXME: this is a placeholder for a port of the transitions library. + if ( ttScope.animation ) { + if (!transitionTimeout) { + transitionTimeout = $timeout(removeTooltip, 500); + } + } else { + removeTooltip(); + } + } + + function createTooltip() { + // There can only be one tooltip element per directive shown at once. + if (tooltip) { + removeTooltip(); + } + tooltipLinkedScope = ttScope.$new(); + tooltip = tooltipLinker(tooltipLinkedScope, function (tooltip) { + if ( appendToBody ) { + $document.find( 'body' ).append( tooltip ); + } else { + element.after( tooltip ); + } + }); + } + + function removeTooltip() { + transitionTimeout = null; + if (tooltip) { + tooltip.remove(); + tooltip = null; + } + if (tooltipLinkedScope) { + tooltipLinkedScope.$destroy(); + tooltipLinkedScope = null; + } + } + + function prepareTooltip() { + prepPlacement(); + prepPopupDelay(); + } + + /** + * Observe the relevant attributes. + */ + attrs.$observe( type, function ( val ) { + ttScope.content = val; + + if (!val && ttScope.isOpen ) { + hide(); + } + }); + + attrs.$observe( prefix+'Title', function ( val ) { + ttScope.title = val; + }); + + function prepPlacement() { + var val = attrs[ prefix + 'Placement' ]; + ttScope.placement = angular.isDefined( val ) ? val : options.placement; + } + + function prepPopupDelay() { + var val = attrs[ prefix + 'PopupDelay' ]; + var delay = parseInt( val, 10 ); + ttScope.popupDelay = ! isNaN(delay) ? delay : options.popupDelay; + } + + var unregisterTriggers = function () { + element.unbind(triggers.show, showTooltipBind); + element.unbind(triggers.hide, hideTooltipBind); + }; + + function prepTriggers() { + var val = attrs[ prefix + 'Trigger' ]; + unregisterTriggers(); + + triggers = getTriggers( val ); + + if ( triggers.show === triggers.hide ) { + element.bind( triggers.show, toggleTooltipBind ); + } else { + element.bind( triggers.show, showTooltipBind ); + element.bind( triggers.hide, hideTooltipBind ); + } + } + prepTriggers(); + + var animation = scope.$eval(attrs[prefix + 'Animation']); + ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation; + + var appendToBodyVal = scope.$eval(attrs[prefix + 'AppendToBody']); + appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody; + + // if a tooltip is attached to we need to remove it on + // location change as its parent scope will probably not be destroyed + // by the change. + if ( appendToBody ) { + scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess () { + if ( ttScope.isOpen ) { + hide(); + } + }); + } + + // Make sure tooltip is destroyed and removed. + scope.$on('$destroy', function onDestroyTooltip() { + $timeout.cancel( transitionTimeout ); + $timeout.cancel( popupTimeout ); + unregisterTriggers(); + removeTooltip(); + ttScope = null; + }); + }; + } + }; + }; + }]; +}) + +.directive( 'tooltipPopup', function () { + return { + restrict: 'EA', + replace: true, + scope: { content: '@', placement: '@', animation: '&', isOpen: '&' }, + templateUrl: 'template/tooltip/tooltip-popup.html' + }; +}) + +.directive( 'tooltip', [ '$tooltip', function ( $tooltip ) { + return $tooltip( 'tooltip', 'tooltip', 'mouseenter' ); +}]) + +.directive( 'tooltipHtmlUnsafePopup', function () { + return { + restrict: 'EA', + replace: true, + scope: { content: '@', placement: '@', animation: '&', isOpen: '&' }, + templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html' + }; +}) + +.directive( 'tooltipHtmlUnsafe', [ '$tooltip', function ( $tooltip ) { + return $tooltip( 'tooltipHtmlUnsafe', 'tooltip', 'mouseenter' ); +}]); + +/** + * The following features are still outstanding: popup delay, animation as a + * function, placement as a function, inside, support for more triggers than + * just mouse enter/leave, html popovers, and selector delegatation. + */ +angular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] ) + +.directive( 'popoverPopup', function () { + return { + restrict: 'EA', + replace: true, + scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' }, + templateUrl: 'template/popover/popover.html' + }; +}) + +.directive( 'popover', [ '$tooltip', function ( $tooltip ) { + return $tooltip( 'popover', 'popover', 'click' ); +}]); + +angular.module('ui.bootstrap.progressbar', []) + +.constant('progressConfig', { + animate: true, + max: 100 +}) + +.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', function($scope, $attrs, progressConfig) { + var self = this, + animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate; + + this.bars = []; + $scope.max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max; + + this.addBar = function(bar, element) { + if ( !animate ) { + element.css({'transition': 'none'}); + } + + this.bars.push(bar); + + bar.$watch('value', function( value ) { + bar.percent = +(100 * value / $scope.max).toFixed(2); + }); + + bar.$on('$destroy', function() { + element = null; + self.removeBar(bar); + }); + }; + + this.removeBar = function(bar) { + this.bars.splice(this.bars.indexOf(bar), 1); + }; +}]) + +.directive('progress', function() { + return { + restrict: 'EA', + replace: true, + transclude: true, + controller: 'ProgressController', + require: 'progress', + scope: {}, + templateUrl: 'template/progressbar/progress.html' + }; +}) + +.directive('bar', function() { + return { + restrict: 'EA', + replace: true, + transclude: true, + require: '^progress', + scope: { + value: '=', + type: '@' + }, + templateUrl: 'template/progressbar/bar.html', + link: function(scope, element, attrs, progressCtrl) { + progressCtrl.addBar(scope, element); + } + }; +}) + +.directive('progressbar', function() { + return { + restrict: 'EA', + replace: true, + transclude: true, + controller: 'ProgressController', + scope: { + value: '=', + type: '@' + }, + templateUrl: 'template/progressbar/progressbar.html', + link: function(scope, element, attrs, progressCtrl) { + progressCtrl.addBar(scope, angular.element(element.children()[0])); + } + }; +}); +angular.module('ui.bootstrap.rating', []) + +.constant('ratingConfig', { + max: 5, + stateOn: null, + stateOff: null +}) + +.controller('RatingController', ['$scope', '$attrs', 'ratingConfig', function($scope, $attrs, ratingConfig) { + var ngModelCtrl = { $setViewValue: angular.noop }; + + this.init = function(ngModelCtrl_) { + ngModelCtrl = ngModelCtrl_; + ngModelCtrl.$render = this.render; + + this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn; + this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff; + + var ratingStates = angular.isDefined($attrs.ratingStates) ? $scope.$parent.$eval($attrs.ratingStates) : + new Array( angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max ); + $scope.range = this.buildTemplateObjects(ratingStates); + }; + + this.buildTemplateObjects = function(states) { + for (var i = 0, n = states.length; i < n; i++) { + states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff }, states[i]); + } + return states; + }; + + $scope.rate = function(value) { + if ( !$scope.readonly && value >= 0 && value <= $scope.range.length ) { + ngModelCtrl.$setViewValue(value); + ngModelCtrl.$render(); + } + }; + + $scope.enter = function(value) { + if ( !$scope.readonly ) { + $scope.value = value; + } + $scope.onHover({value: value}); + }; + + $scope.reset = function() { + $scope.value = ngModelCtrl.$viewValue; + $scope.onLeave(); + }; + + $scope.onKeydown = function(evt) { + if (/(37|38|39|40)/.test(evt.which)) { + evt.preventDefault(); + evt.stopPropagation(); + $scope.rate( $scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1) ); + } + }; + + this.render = function() { + $scope.value = ngModelCtrl.$viewValue; + }; +}]) + +.directive('rating', function() { + return { + restrict: 'EA', + require: ['rating', 'ngModel'], + scope: { + readonly: '=?', + onHover: '&', + onLeave: '&' + }, + controller: 'RatingController', + templateUrl: 'template/rating/rating.html', + replace: true, + link: function(scope, element, attrs, ctrls) { + var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if ( ngModelCtrl ) { + ratingCtrl.init( ngModelCtrl ); + } + } + }; +}); + +/** + * @ngdoc overview + * @name ui.bootstrap.tabs + * + * @description + * AngularJS version of the tabs directive. + */ + +angular.module('ui.bootstrap.tabs', []) + +.controller('TabsetController', ['$scope', function TabsetCtrl($scope) { + var ctrl = this, + tabs = ctrl.tabs = $scope.tabs = []; + + ctrl.select = function(selectedTab) { + angular.forEach(tabs, function(tab) { + if (tab.active && tab !== selectedTab) { + tab.active = false; + tab.onDeselect(); + } + }); + selectedTab.active = true; + selectedTab.onSelect(); + }; + + ctrl.addTab = function addTab(tab) { + tabs.push(tab); + // we can't run the select function on the first tab + // since that would select it twice + if (tabs.length === 1) { + tab.active = true; + } else if (tab.active) { + ctrl.select(tab); + } + }; + + ctrl.removeTab = function removeTab(tab) { + var index = tabs.indexOf(tab); + //Select a new tab if the tab to be removed is selected and not destroyed + if (tab.active && tabs.length > 1 && !destroyed) { + //If this is the last tab, select the previous tab. else, the next tab. + var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1; + ctrl.select(tabs[newActiveIndex]); + } + tabs.splice(index, 1); + }; + + var destroyed; + $scope.$on('$destroy', function() { + destroyed = true; + }); +}]) + +/** + * @ngdoc directive + * @name ui.bootstrap.tabs.directive:tabset + * @restrict EA + * + * @description + * Tabset is the outer container for the tabs directive + * + * @param {boolean=} vertical Whether or not to use vertical styling for the tabs. + * @param {boolean=} justified Whether or not to use justified styling for the tabs. + * + * @example + + + + First Content! + Second Content! + +
      + + First Vertical Content! + Second Vertical Content! + + + First Justified Content! + Second Justified Content! + +
      +
      + */ +.directive('tabset', function() { + return { + restrict: 'EA', + transclude: true, + replace: true, + scope: { + type: '@' + }, + controller: 'TabsetController', + templateUrl: 'template/tabs/tabset.html', + link: function(scope, element, attrs) { + scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false; + scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false; + } + }; +}) + +/** + * @ngdoc directive + * @name ui.bootstrap.tabs.directive:tab + * @restrict EA + * + * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}. + * @param {string=} select An expression to evaluate when the tab is selected. + * @param {boolean=} active A binding, telling whether or not this tab is selected. + * @param {boolean=} disabled A binding, telling whether or not this tab is disabled. + * + * @description + * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}. + * + * @example + + +
      + + +
      + + First Tab + + Alert me! + Second Tab, with alert callback and html heading! + + + {{item.content}} + + +
      +
      + + function TabsDemoCtrl($scope) { + $scope.items = [ + { title:"Dynamic Title 1", content:"Dynamic Item 0" }, + { title:"Dynamic Title 2", content:"Dynamic Item 1", disabled: true } + ]; + + $scope.alertMe = function() { + setTimeout(function() { + alert("You've selected the alert tab!"); + }); + }; + }; + +
      + */ + +/** + * @ngdoc directive + * @name ui.bootstrap.tabs.directive:tabHeading + * @restrict EA + * + * @description + * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element. + * + * @example + + + + + HTML in my titles?! + And some content, too! + + + Icon heading?!? + That's right. + + + + + */ +.directive('tab', ['$parse', function($parse) { + return { + require: '^tabset', + restrict: 'EA', + replace: true, + templateUrl: 'template/tabs/tab.html', + transclude: true, + scope: { + active: '=?', + heading: '@', + onSelect: '&select', //This callback is called in contentHeadingTransclude + //once it inserts the tab's content into the dom + onDeselect: '&deselect' + }, + controller: function() { + //Empty controller so other directives can require being 'under' a tab + }, + compile: function(elm, attrs, transclude) { + return function postLink(scope, elm, attrs, tabsetCtrl) { + scope.$watch('active', function(active) { + if (active) { + tabsetCtrl.select(scope); + } + }); + + scope.disabled = false; + if ( attrs.disabled ) { + scope.$parent.$watch($parse(attrs.disabled), function(value) { + scope.disabled = !! value; + }); + } + + scope.select = function() { + if ( !scope.disabled ) { + scope.active = true; + } + }; + + tabsetCtrl.addTab(scope); + scope.$on('$destroy', function() { + tabsetCtrl.removeTab(scope); + }); + + //We need to transclude later, once the content container is ready. + //when this link happens, we're inside a tab heading. + scope.$transcludeFn = transclude; + }; + } + }; +}]) + +.directive('tabHeadingTransclude', [function() { + return { + restrict: 'A', + require: '^tab', + link: function(scope, elm, attrs, tabCtrl) { + scope.$watch('headingElement', function updateHeadingElement(heading) { + if (heading) { + elm.html(''); + elm.append(heading); + } + }); + } + }; +}]) + +.directive('tabContentTransclude', function() { + return { + restrict: 'A', + require: '^tabset', + link: function(scope, elm, attrs) { + var tab = scope.$eval(attrs.tabContentTransclude); + + //Now our tab is ready to be transcluded: both the tab heading area + //and the tab content area are loaded. Transclude 'em both. + tab.$transcludeFn(tab.$parent, function(contents) { + angular.forEach(contents, function(node) { + if (isTabHeading(node)) { + //Let tabHeadingTransclude know. + tab.headingElement = node; + } else { + elm.append(node); + } + }); + }); + } + }; + function isTabHeading(node) { + return node.tagName && ( + node.hasAttribute('tab-heading') || + node.hasAttribute('data-tab-heading') || + node.tagName.toLowerCase() === 'tab-heading' || + node.tagName.toLowerCase() === 'data-tab-heading' + ); + } +}) + +; + +angular.module('ui.bootstrap.timepicker', []) + +.constant('timepickerConfig', { + hourStep: 1, + minuteStep: 1, + showMeridian: true, + meridians: null, + readonlyInput: false, + mousewheel: true +}) + +.controller('TimepickerController', ['$scope', '$attrs', '$parse', '$log', '$locale', 'timepickerConfig', function($scope, $attrs, $parse, $log, $locale, timepickerConfig) { + var selected = new Date(), + ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl + meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS; + + this.init = function( ngModelCtrl_, inputs ) { + ngModelCtrl = ngModelCtrl_; + ngModelCtrl.$render = this.render; + + var hoursInputEl = inputs.eq(0), + minutesInputEl = inputs.eq(1); + + var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel; + if ( mousewheel ) { + this.setupMousewheelEvents( hoursInputEl, minutesInputEl ); + } + + $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput; + this.setupInputEvents( hoursInputEl, minutesInputEl ); + }; + + var hourStep = timepickerConfig.hourStep; + if ($attrs.hourStep) { + $scope.$parent.$watch($parse($attrs.hourStep), function(value) { + hourStep = parseInt(value, 10); + }); + } + + var minuteStep = timepickerConfig.minuteStep; + if ($attrs.minuteStep) { + $scope.$parent.$watch($parse($attrs.minuteStep), function(value) { + minuteStep = parseInt(value, 10); + }); + } + + // 12H / 24H mode + $scope.showMeridian = timepickerConfig.showMeridian; + if ($attrs.showMeridian) { + $scope.$parent.$watch($parse($attrs.showMeridian), function(value) { + $scope.showMeridian = !!value; + + if ( ngModelCtrl.$error.time ) { + // Evaluate from template + var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate(); + if (angular.isDefined( hours ) && angular.isDefined( minutes )) { + selected.setHours( hours ); + refresh(); + } + } else { + updateTemplate(); + } + }); + } + + // Get $scope.hours in 24H mode if valid + function getHoursFromTemplate ( ) { + var hours = parseInt( $scope.hours, 10 ); + var valid = ( $scope.showMeridian ) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24); + if ( !valid ) { + return undefined; + } + + if ( $scope.showMeridian ) { + if ( hours === 12 ) { + hours = 0; + } + if ( $scope.meridian === meridians[1] ) { + hours = hours + 12; + } + } + return hours; + } + + function getMinutesFromTemplate() { + var minutes = parseInt($scope.minutes, 10); + return ( minutes >= 0 && minutes < 60 ) ? minutes : undefined; + } + + function pad( value ) { + return ( angular.isDefined(value) && value.toString().length < 2 ) ? '0' + value : value; + } + + // Respond on mousewheel spin + this.setupMousewheelEvents = function( hoursInputEl, minutesInputEl ) { + var isScrollingUp = function(e) { + if (e.originalEvent) { + e = e.originalEvent; + } + //pick correct delta variable depending on event + var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY; + return (e.detail || delta > 0); + }; + + hoursInputEl.bind('mousewheel wheel', function(e) { + $scope.$apply( (isScrollingUp(e)) ? $scope.incrementHours() : $scope.decrementHours() ); + e.preventDefault(); + }); + + minutesInputEl.bind('mousewheel wheel', function(e) { + $scope.$apply( (isScrollingUp(e)) ? $scope.incrementMinutes() : $scope.decrementMinutes() ); + e.preventDefault(); + }); + + }; + + this.setupInputEvents = function( hoursInputEl, minutesInputEl ) { + if ( $scope.readonlyInput ) { + $scope.updateHours = angular.noop; + $scope.updateMinutes = angular.noop; + return; + } + + var invalidate = function(invalidHours, invalidMinutes) { + ngModelCtrl.$setViewValue( null ); + ngModelCtrl.$setValidity('time', false); + if (angular.isDefined(invalidHours)) { + $scope.invalidHours = invalidHours; + } + if (angular.isDefined(invalidMinutes)) { + $scope.invalidMinutes = invalidMinutes; + } + }; + + $scope.updateHours = function() { + var hours = getHoursFromTemplate(); + + if ( angular.isDefined(hours) ) { + selected.setHours( hours ); + refresh( 'h' ); + } else { + invalidate(true); + } + }; + + hoursInputEl.bind('blur', function(e) { + if ( !$scope.invalidHours && $scope.hours < 10) { + $scope.$apply( function() { + $scope.hours = pad( $scope.hours ); + }); + } + }); + + $scope.updateMinutes = function() { + var minutes = getMinutesFromTemplate(); + + if ( angular.isDefined(minutes) ) { + selected.setMinutes( minutes ); + refresh( 'm' ); + } else { + invalidate(undefined, true); + } + }; + + minutesInputEl.bind('blur', function(e) { + if ( !$scope.invalidMinutes && $scope.minutes < 10 ) { + $scope.$apply( function() { + $scope.minutes = pad( $scope.minutes ); + }); + } + }); + + }; + + this.render = function() { + var date = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : null; + + if ( isNaN(date) ) { + ngModelCtrl.$setValidity('time', false); + $log.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'); + } else { + if ( date ) { + selected = date; + } + makeValid(); + updateTemplate(); + } + }; + + // Call internally when we know that model is valid. + function refresh( keyboardChange ) { + makeValid(); + ngModelCtrl.$setViewValue( new Date(selected) ); + updateTemplate( keyboardChange ); + } + + function makeValid() { + ngModelCtrl.$setValidity('time', true); + $scope.invalidHours = false; + $scope.invalidMinutes = false; + } + + function updateTemplate( keyboardChange ) { + var hours = selected.getHours(), minutes = selected.getMinutes(); + + if ( $scope.showMeridian ) { + hours = ( hours === 0 || hours === 12 ) ? 12 : hours % 12; // Convert 24 to 12 hour system + } + + $scope.hours = keyboardChange === 'h' ? hours : pad(hours); + $scope.minutes = keyboardChange === 'm' ? minutes : pad(minutes); + $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1]; + } + + function addMinutes( minutes ) { + var dt = new Date( selected.getTime() + minutes * 60000 ); + selected.setHours( dt.getHours(), dt.getMinutes() ); + refresh(); + } + + $scope.incrementHours = function() { + addMinutes( hourStep * 60 ); + }; + $scope.decrementHours = function() { + addMinutes( - hourStep * 60 ); + }; + $scope.incrementMinutes = function() { + addMinutes( minuteStep ); + }; + $scope.decrementMinutes = function() { + addMinutes( - minuteStep ); + }; + $scope.toggleMeridian = function() { + addMinutes( 12 * 60 * (( selected.getHours() < 12 ) ? 1 : -1) ); + }; +}]) + +.directive('timepicker', function () { + return { + restrict: 'EA', + require: ['timepicker', '?^ngModel'], + controller:'TimepickerController', + replace: true, + scope: {}, + templateUrl: 'template/timepicker/timepicker.html', + link: function(scope, element, attrs, ctrls) { + var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1]; + + if ( ngModelCtrl ) { + timepickerCtrl.init( ngModelCtrl, element.find('input') ); + } + } + }; +}); + +angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml']) + +/** + * A helper service that can parse typeahead's syntax (string provided by users) + * Extracted to a separate service for ease of unit testing + */ + .factory('typeaheadParser', ['$parse', function ($parse) { + + // 00000111000000000000022200000000000000003333333333333330000000000044000 + var TYPEAHEAD_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/; + + return { + parse:function (input) { + + var match = input.match(TYPEAHEAD_REGEXP); + if (!match) { + throw new Error( + 'Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_"' + + ' but got "' + input + '".'); + } + + return { + itemName:match[3], + source:$parse(match[4]), + viewMapper:$parse(match[2] || match[1]), + modelMapper:$parse(match[1]) + }; + } + }; +}]) + + .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser', + function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) { + + var HOT_KEYS = [9, 13, 27, 38, 40]; + + return { + require:'ngModel', + link:function (originalScope, element, attrs, modelCtrl) { + + //SUPPORTED ATTRIBUTES (OPTIONS) + + //minimal no of characters that needs to be entered before typeahead kicks-in + var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1; + + //minimal wait time after last character typed before typehead kicks-in + var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0; + + //should it restrict model values to the ones selected from the popup only? + var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false; + + //binding to a variable that indicates if matches are being retrieved asynchronously + var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop; + + //a callback executed when a match is selected + var onSelectCallback = $parse(attrs.typeaheadOnSelect); + + var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined; + + var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false; + + var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false; + + //INTERNAL VARIABLES + + //model setter executed upon match selection + var $setModelValue = $parse(attrs.ngModel).assign; + + //expressions used by typeahead + var parserResult = typeaheadParser.parse(attrs.typeahead); + + var hasFocus; + + //create a child scope for the typeahead directive so we are not polluting original scope + //with typeahead-specific data (matches, query etc.) + var scope = originalScope.$new(); + originalScope.$on('$destroy', function(){ + scope.$destroy(); + }); + + // WAI-ARIA + var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000); + element.attr({ + 'aria-autocomplete': 'list', + 'aria-expanded': false, + 'aria-owns': popupId + }); + + //pop-up element used to display matches + var popUpEl = angular.element('
      '); + popUpEl.attr({ + id: popupId, + matches: 'matches', + active: 'activeIdx', + select: 'select(activeIdx)', + query: 'query', + position: 'position' + }); + //custom item template + if (angular.isDefined(attrs.typeaheadTemplateUrl)) { + popUpEl.attr('template-url', attrs.typeaheadTemplateUrl); + } + + var resetMatches = function() { + scope.matches = []; + scope.activeIdx = -1; + element.attr('aria-expanded', false); + }; + + var getMatchId = function(index) { + return popupId + '-option-' + index; + }; + + // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead. + // This attribute is added or removed automatically when the `activeIdx` changes. + scope.$watch('activeIdx', function(index) { + if (index < 0) { + element.removeAttr('aria-activedescendant'); + } else { + element.attr('aria-activedescendant', getMatchId(index)); + } + }); + + var getMatchesAsync = function(inputValue) { + + var locals = {$viewValue: inputValue}; + isLoadingSetter(originalScope, true); + $q.when(parserResult.source(originalScope, locals)).then(function(matches) { + + //it might happen that several async queries were in progress if a user were typing fast + //but we are interested only in responses that correspond to the current view value + var onCurrentRequest = (inputValue === modelCtrl.$viewValue); + if (onCurrentRequest && hasFocus) { + if (matches.length > 0) { + + scope.activeIdx = focusFirst ? 0 : -1; + scope.matches.length = 0; + + //transform labels + for(var i=0; i= minSearch) { + if (waitTime > 0) { + cancelPreviousTimeout(); + scheduleSearchWithTimeout(inputValue); + } else { + getMatchesAsync(inputValue); + } + } else { + isLoadingSetter(originalScope, false); + cancelPreviousTimeout(); + resetMatches(); + } + + if (isEditable) { + return inputValue; + } else { + if (!inputValue) { + // Reset in case user had typed something previously. + modelCtrl.$setValidity('editable', true); + return inputValue; + } else { + modelCtrl.$setValidity('editable', false); + return undefined; + } + } + }); + + modelCtrl.$formatters.push(function (modelValue) { + + var candidateViewValue, emptyViewValue; + var locals = {}; + + if (inputFormatter) { + + locals.$model = modelValue; + return inputFormatter(originalScope, locals); + + } else { + + //it might happen that we don't have enough info to properly render input value + //we need to check for this situation and simply return model value if we can't apply custom formatting + locals[parserResult.itemName] = modelValue; + candidateViewValue = parserResult.viewMapper(originalScope, locals); + locals[parserResult.itemName] = undefined; + emptyViewValue = parserResult.viewMapper(originalScope, locals); + + return candidateViewValue!== emptyViewValue ? candidateViewValue : modelValue; + } + }); + + scope.select = function (activeIdx) { + //called from within the $digest() cycle + var locals = {}; + var model, item; + + locals[parserResult.itemName] = item = scope.matches[activeIdx].model; + model = parserResult.modelMapper(originalScope, locals); + $setModelValue(originalScope, model); + modelCtrl.$setValidity('editable', true); + + onSelectCallback(originalScope, { + $item: item, + $model: model, + $label: parserResult.viewMapper(originalScope, locals) + }); + + resetMatches(); + + //return focus to the input element if a match was selected via a mouse click event + // use timeout to avoid $rootScope:inprog error + $timeout(function() { element[0].focus(); }, 0, false); + }; + + //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27) + element.bind('keydown', function (evt) { + + //typeahead is open and an "interesting" key was pressed + if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) { + return; + } + + // if there's nothing selected (i.e. focusFirst) and enter is hit, don't do anything + if (scope.activeIdx == -1 && (evt.which === 13 || evt.which === 9)) { + return; + } + + evt.preventDefault(); + + if (evt.which === 40) { + scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length; + scope.$digest(); + + } else if (evt.which === 38) { + scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1; + scope.$digest(); + + } else if (evt.which === 13 || evt.which === 9) { + scope.$apply(function () { + scope.select(scope.activeIdx); + }); + + } else if (evt.which === 27) { + evt.stopPropagation(); + + resetMatches(); + scope.$digest(); + } + }); + + element.bind('blur', function (evt) { + hasFocus = false; + }); + + // Keep reference to click handler to unbind it. + var dismissClickHandler = function (evt) { + if (element[0] !== evt.target) { + resetMatches(); + scope.$digest(); + } + }; + + $document.bind('click', dismissClickHandler); + + originalScope.$on('$destroy', function(){ + $document.unbind('click', dismissClickHandler); + if (appendToBody) { + $popup.remove(); + } + }); + + var $popup = $compile(popUpEl)(scope); + if (appendToBody) { + $document.find('body').append($popup); + } else { + element.after($popup); + } + } + }; + +}]) + + .directive('typeaheadPopup', function () { + return { + restrict:'EA', + scope:{ + matches:'=', + query:'=', + active:'=', + position:'=', + select:'&' + }, + replace:true, + templateUrl:'template/typeahead/typeahead-popup.html', + link:function (scope, element, attrs) { + + scope.templateUrl = attrs.templateUrl; + + scope.isOpen = function () { + return scope.matches.length > 0; + }; + + scope.isActive = function (matchIdx) { + return scope.active == matchIdx; + }; + + scope.selectActive = function (matchIdx) { + scope.active = matchIdx; + }; + + scope.selectMatch = function (activeIdx) { + scope.select({activeIdx:activeIdx}); + }; + } + }; + }) + + .directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) { + return { + restrict:'EA', + scope:{ + index:'=', + match:'=', + query:'=' + }, + link:function (scope, element, attrs) { + var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html'; + $http.get(tplUrl, {cache: $templateCache}).success(function(tplContent){ + element.replaceWith($compile(tplContent.trim())(scope)); + }); + } + }; + }]) + + .filter('typeaheadHighlight', function() { + + function escapeRegexp(queryToEscape) { + return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'); + } + + return function(matchItem, query) { + return query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; + }; + }); diff --git a/vendor/assets/components/angular-bootstrap/ui-bootstrap.min.js b/vendor/assets/components/angular-bootstrap/ui-bootstrap.min.js new file mode 100644 index 000000000..a6383c443 --- /dev/null +++ b/vendor/assets/components/angular-bootstrap/ui-bootstrap.min.js @@ -0,0 +1,9 @@ +/* + * angular-ui-bootstrap + * http://angular-ui.github.io/bootstrap/ + + * Version: 0.12.1 - 2015-02-20 + * License: MIT + */ +angular.module("ui.bootstrap",["ui.bootstrap.transition","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.transition",[]).factory("$transition",["$q","$timeout","$rootScope",function(a,b,c){function d(a){for(var b in a)if(void 0!==f.style[b])return a[b]}var e=function(d,f,g){g=g||{};var h=a.defer(),i=e[g.animation?"animationEndEventName":"transitionEndEventName"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(f)?d.addClass(f):angular.isFunction(f)?f(d):angular.isObject(f)&&d.css(f),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject("Transition cancelled")},h.promise},f=document.createElement("trans"),g={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},h={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return e.transitionEndEventName=d(g),e.animationEndEventName=d(h),e}]),angular.module("ui.bootstrap.collapse",["ui.bootstrap.transition"]).directive("collapse",["$transition",function(a){return{link:function(b,c,d){function e(b){function d(){j===e&&(j=void 0)}var e=a(c,b);return j&&j.cancel(),j=e,e.then(d,d),e}function f(){k?(k=!1,g()):(c.removeClass("collapse").addClass("collapsing"),e({height:c[0].scrollHeight+"px"}).then(g))}function g(){c.removeClass("collapsing"),c.addClass("collapse in"),c.css({height:"auto"})}function h(){if(k)k=!1,i(),c.css({height:0});else{c.css({height:c[0].scrollHeight+"px"});{c[0].offsetWidth}c.removeClass("collapse in").addClass("collapsing"),e({height:0}).then(i)}}function i(){c.removeClass("collapsing"),c.addClass("collapse")}var j,k=!0;b.$watch(d.collapse,function(a){a?h():f()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",transclude:!0,replace:!1,templateUrl:"template/accordion/accordion.html"}}).directive("accordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/accordion/accordion-group.html",scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.$watch("isOpen",function(b){b&&d.closeOthers(a)}),a.toggleOpen=function(){a.isDisabled||(a.isOpen=!a.isOpen)}}}}).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,function(){}))}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.accordionTransclude]},function(a){a&&(b.html(""),b.append(a))})}}}),angular.module("ui.bootstrap.alert",[]).controller("AlertController",["$scope","$attrs",function(a,b){a.closeable="close"in b,this.close=a.close}]).directive("alert",function(){return{restrict:"EA",controller:"AlertController",templateUrl:"template/alert/alert.html",transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}).directive("dismissOnTimeout",["$timeout",function(a){return{require:"alert",link:function(b,c,d,e){a(function(){e.close()},parseInt(d.dismissOnTimeout,10))}}}]),angular.module("ui.bootstrap.bindHtml",[]).directive("bindHtmlUnsafe",function(){return function(a,b,c){b.addClass("ng-binding").data("$binding",c.bindHtmlUnsafe),a.$watch(c.bindHtmlUnsafe,function(a){b.html(a||"")})}}),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).controller("ButtonsController",["buttonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("btnRadio",function(){return{require:["btnRadio","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){var e=d[0],f=d[1];f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.btnRadio)))},b.bind(e.toggleEvent,function(){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.btnRadio)),f.$render()})})}}}).directive("btnCheckbox",function(){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){var d=a.$eval(b);return angular.isDefined(d)?d:c}var h=d[0],i=d[1];i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.bind(h.toggleEvent,function(){a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",["ui.bootstrap.transition"]).controller("CarouselController",["$scope","$timeout","$interval","$transition",function(a,b,c,d){function e(){f();var b=+a.interval;!isNaN(b)&&b>0&&(h=c(g,b))}function f(){h&&(c.cancel(h),h=null)}function g(){var b=+a.interval;i&&!isNaN(b)&&b>0?a.next():a.pause()}var h,i,j=this,k=j.slides=a.slides=[],l=-1;j.currentSlide=null;var m=!1;j.select=a.select=function(c,f){function g(){if(!m){if(j.currentSlide&&angular.isString(f)&&!a.noTransition&&c.$element){c.$element.addClass(f);{c.$element[0].offsetWidth}angular.forEach(k,function(a){angular.extend(a,{direction:"",entering:!1,leaving:!1,active:!1})}),angular.extend(c,{direction:f,active:!0,entering:!0}),angular.extend(j.currentSlide||{},{direction:f,leaving:!0}),a.$currentTransition=d(c.$element,{}),function(b,c){a.$currentTransition.then(function(){h(b,c)},function(){h(b,c)})}(c,j.currentSlide)}else h(c,j.currentSlide);j.currentSlide=c,l=i,e()}}function h(b,c){angular.extend(b,{direction:"",active:!0,leaving:!1,entering:!1}),angular.extend(c||{},{direction:"",active:!1,leaving:!1,entering:!1}),a.$currentTransition=null}var i=k.indexOf(c);void 0===f&&(f=i>l?"next":"prev"),c&&c!==j.currentSlide&&(a.$currentTransition?(a.$currentTransition.cancel(),b(g)):g())},a.$on("$destroy",function(){m=!0}),j.indexOfSlide=function(a){return k.indexOf(a)},a.next=function(){var b=(l+1)%k.length;return a.$currentTransition?void 0:j.select(k[b],"next")},a.prev=function(){var b=0>l-1?k.length-1:l-1;return a.$currentTransition?void 0:j.select(k[b],"prev")},a.isActive=function(a){return j.currentSlide===a},a.$watch("interval",e),a.$on("$destroy",f),a.play=function(){i||(i=!0,e())},a.pause=function(){a.noPause||(i=!1,f())},j.addSlide=function(b,c){b.$element=c,k.push(b),1===k.length||b.active?(j.select(k[k.length-1]),1==k.length&&a.play()):b.active=!1},j.removeSlide=function(a){var b=k.indexOf(a);k.splice(b,1),k.length>0&&a.active?j.select(b>=k.length?k[b-1]:k[b]):l>b&&l--}}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",require:"carousel",templateUrl:"template/carousel/carousel.html",scope:{interval:"=",noTransition:"=",noPause:"="}}}]).directive("slide",function(){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/carousel/slide.html",scope:{active:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}),angular.module("ui.bootstrap.dateparser",[]).service("dateParser",["$locale","orderByFilter",function(a,b){function c(a){var c=[],d=a.split("");return angular.forEach(e,function(b,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+b.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),c.push({index:f,apply:b.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:b(c,"index")}}function d(a,b,c){return 1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}this.parsers={};var e={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:a.DATETIME_FORMATS.MONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.MONTH.indexOf(b)}},MMM:{regex:a.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.SHORTMONTH.indexOf(b)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:a.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:a.DATETIME_FORMATS.SHORTDAY.join("|")}};this.parse=function(b,e){if(!angular.isString(b)||!e)return b;e=a.DATETIME_FORMATS[e]||e,this.parsers[e]||(this.parsers[e]=c(e));var f=this.parsers[e],g=f.regex,h=f.map,i=b.match(g);if(i&&i.length){for(var j,k={year:1900,month:0,date:1,hours:0},l=1,m=i.length;m>l;l++){var n=h[l-1];n.apply&&n.apply.call(k,i[l])}return d(k.year,k.month,k.date)&&(j=new Date(k.year,k.month,k.date,k.hours)),j}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).constant("datepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null}).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$timeout","$log","dateFilter","datepickerConfig",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","minMode","maxMode","showWeeks","startingDay","yearRange"],function(c,e){i[c]=angular.isDefined(b[c])?8>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):h[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=h[d]?new Date(h[d]):null}),a.datepickerMode=a.datepickerMode||h.datepickerMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),this.activeDate=angular.isDefined(b.initDate)?a.$parent.$eval(b.initDate):new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$modelValue){var a=new Date(j.$modelValue),b=!isNaN(a);b?this.activeDate=a:f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'),j.$setValidity("date",b)}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$modelValue?new Date(j.$modelValue):null;j.$setValidity("date-disabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$modelValue?new Date(j.$modelValue):null;return{date:a,label:g(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$modelValue?new Date(j.$modelValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){e(function(){i.element[0].focus()},0,!1)};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]).directive("datepicker",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/datepicker.html",scope:{datepickerMode:"=?",dateDisabled:"&"},require:["datepicker","?^ngModel"],controller:"DatepickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}).directive("daypicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/day.html",require:"^datepicker",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){var c=new Array(b),d=new Date(a),e=0;for(d.setHours(12);b>e;)c[e++]=new Date(d),d.setDate(d.getDate()+1);return c}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+"-"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,"EEEE")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=h(b.rows[0][0].date),p=b.rows.length;b.weekNumbers.push(o++)f;f++)c[f]=angular.extend(e.createDateObject(new Date(d,f,1),e.formatMonth),{uid:b.uniqueId+"-"+f});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(c,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if("left"===a)b-=1;else if("up"===a)b-=3;else if("right"===a)b+=1;else if("down"===a)b+=3;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getFullYear()+("pageup"===a?-1:1);e.activeDate.setFullYear(c)}else"home"===a?b=0:"end"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive("yearpicker",["dateFilter",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/year.html",require:"^datepicker",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b=new Array(f),c=0,g=e(d.activeDate.getFullYear());f>c;c++)b[c]=angular.extend(d.createDateObject(new Date(g+c,0,1),d.formatYear),{uid:a.uniqueId+"-"+c});a.title=[b[0].label,b[f-1].label].join(" - "),a.rows=d.split(b,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();"left"===a?b-=1:"up"===a?b-=5:"right"===a?b+=1:"down"===a?b+=5:"pageup"===a||"pagedown"===a?b+=("pageup"===a?-1:1)*d.step.years:"home"===a?b=e(d.activeDate.getFullYear()):"end"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant("datepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0}).directive("datepickerPopup",["$compile","$parse","$document","$position","dateFilter","dateParser","datepickerPopupConfig",function(a,b,c,d,e,f,g){return{restrict:"EA",require:"ngModel",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&"},link:function(h,i,j,k){function l(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function m(a){if(a){if(angular.isDate(a)&&!isNaN(a))return k.$setValidity("date",!0),a;if(angular.isString(a)){var b=f.parse(a,n)||new Date(a);return isNaN(b)?void k.$setValidity("date",!1):(k.$setValidity("date",!0),b)}return void k.$setValidity("date",!1)}return k.$setValidity("date",!0),null}var n,o=angular.isDefined(j.closeOnDateSelection)?h.$parent.$eval(j.closeOnDateSelection):g.closeOnDateSelection,p=angular.isDefined(j.datepickerAppendToBody)?h.$parent.$eval(j.datepickerAppendToBody):g.appendToBody;h.showButtonBar=angular.isDefined(j.showButtonBar)?h.$parent.$eval(j.showButtonBar):g.showButtonBar,h.getText=function(a){return h[a+"Text"]||g[a+"Text"]},j.$observe("datepickerPopup",function(a){n=a||g.datepickerPopup,k.$render()});var q=angular.element("
      ");q.attr({"ng-model":"date","ng-change":"dateSelection()"});var r=angular.element(q.children()[0]);j.datepickerOptions&&angular.forEach(h.$parent.$eval(j.datepickerOptions),function(a,b){r.attr(l(b),a)}),h.watchData={},angular.forEach(["minDate","maxDate","datepickerMode"],function(a){if(j[a]){var c=b(j[a]);if(h.$parent.$watch(c,function(b){h.watchData[a]=b}),r.attr(l(a),"watchData."+a),"datepickerMode"===a){var d=c.assign;h.$watch("watchData."+a,function(a,b){a!==b&&d(h.$parent,a)})}}}),j.dateDisabled&&r.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),k.$parsers.unshift(m),h.dateSelection=function(a){angular.isDefined(a)&&(h.date=a),k.$setViewValue(h.date),k.$render(),o&&(h.isOpen=!1,i[0].focus())},i.bind("input change keyup",function(){h.$apply(function(){h.date=k.$modelValue})}),k.$render=function(){var a=k.$viewValue?e(k.$viewValue,n):"";i.val(a),h.date=m(k.$modelValue)};var s=function(a){h.isOpen&&a.target!==i[0]&&h.$apply(function(){h.isOpen=!1})},t=function(a){h.keydown(a)};i.bind("keydown",t),h.keydown=function(a){27===a.which?(a.preventDefault(),a.stopPropagation(),h.close()):40!==a.which||h.isOpen||(h.isOpen=!0)},h.$watch("isOpen",function(a){a?(h.$broadcast("datepicker.focus"),h.position=p?d.offset(i):d.position(i),h.position.top=h.position.top+i.prop("offsetHeight"),c.bind("click",s)):c.unbind("click",s)}),h.select=function(a){if("today"===a){var b=new Date;angular.isDate(k.$modelValue)?(a=new Date(k.$modelValue),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}h.dateSelection(a)},h.close=function(){h.isOpen=!1,i[0].focus()};var u=a(q)(h);q.remove(),p?c.find("body").append(u):i.after(u),h.$on("$destroy",function(){u.remove(),i.unbind("keydown",t),c.unbind("click",s)})}}}]).directive("datepickerPopupWrap",function(){return{restrict:"EA",replace:!0,transclude:!0,templateUrl:"template/datepicker/popup.html",link:function(a,b){b.bind("click",function(a){a.preventDefault(),a.stopPropagation()})}}}),angular.module("ui.bootstrap.dropdown",[]).constant("dropdownConfig",{openClass:"open"}).service("dropdownService",["$document",function(a){var b=null;this.open=function(e){b||(a.bind("click",c),a.bind("keydown",d)),b&&b!==e&&(b.isOpen=!1),b=e},this.close=function(e){b===e&&(b=null,a.unbind("click",c),a.unbind("keydown",d))};var c=function(a){if(b){var c=b.getToggleElement();a&&c&&c[0].contains(a.target)||b.$apply(function(){b.isOpen=!1})}},d=function(a){27===a.which&&(b.focusToggleElement(),c())}}]).controller("DropdownController",["$scope","$attrs","$parse","dropdownConfig","dropdownService","$animate",function(a,b,c,d,e,f){var g,h=this,i=a.$new(),j=d.openClass,k=angular.noop,l=b.onToggle?c(b.onToggle):angular.noop;this.init=function(d){h.$element=d,b.isOpen&&(g=c(b.isOpen),k=g.assign,a.$watch(g,function(a){i.isOpen=!!a}))},this.toggle=function(a){return i.isOpen=arguments.length?!!a:!i.isOpen},this.isOpen=function(){return i.isOpen},i.getToggleElement=function(){return h.toggleElement},i.focusToggleElement=function(){h.toggleElement&&h.toggleElement[0].focus()},i.$watch("isOpen",function(b,c){f[b?"addClass":"removeClass"](h.$element,j),b?(i.focusToggleElement(),e.open(i)):e.close(i),k(a,b),angular.isDefined(b)&&b!==c&&l(a,{open:!!b})}),a.$on("$locationChangeSuccess",function(){i.isOpen=!1}),a.$on("$destroy",function(){i.$destroy()})}]).directive("dropdown",function(){return{controller:"DropdownController",link:function(a,b,c,d){d.init(b)}}}).directive("dropdownToggle",function(){return{require:"?^dropdown",link:function(a,b,c,d){if(d){d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.modal",["ui.bootstrap.transition"]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c0),i()})}function i(){if(k&&-1==g()){var a=l;j(k,l,150,function(){a.$destroy(),a=null}),k=void 0,l=void 0}}function j(c,d,e,f){function g(){g.done||(g.done=!0,c.remove(),f&&f())}d.animate=!1;var h=a.transitionEndEventName;if(h){var i=b(g,e);c.bind(h,function(){b.cancel(i),g(),d.$apply()})}else b(g)}var k,l,m="modal-open",n=f.createNew(),o={};return e.$watch(g,function(a){l&&(l.index=a)}),c.bind("keydown",function(a){var b;27===a.which&&(b=n.top(),b&&b.value.keyboard&&(a.preventDefault(),e.$apply(function(){o.dismiss(b.key,"escape key press")})))}),o.open=function(a,b){n.add(a,{deferred:b.deferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard});var f=c.find("body").eq(0),h=g();if(h>=0&&!k){l=e.$new(!0),l.index=h;var i=angular.element("
      ");i.attr("backdrop-class",b.backdropClass),k=d(i)(l),f.append(k)}var j=angular.element("
      ");j.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,size:b.size,index:n.length()-1,animate:"animate"}).html(b.content);var o=d(j)(b.scope);n.top().value.modalDomEl=o,f.append(o),f.addClass(m)},o.close=function(a,b){var c=n.get(a);c&&(c.value.deferred.resolve(b),h(a))},o.dismiss=function(a,b){var c=n.get(a);c&&(c.value.deferred.reject(b),h(a))},o.dismissAll=function(a){for(var b=this.getTop();b;)this.dismiss(b.key,a),b=this.getTop()},o.getTop=function(){return n.top()},o}]).provider("$modal",function(){var a={options:{backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$http","$templateCache","$controller","$modalStack",function(b,c,d,e,f,g,h){function i(a){return a.template?d.when(a.template):e.get(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl,{cache:f}).then(function(a){return a.data})}function j(a){var c=[];return angular.forEach(a,function(a){(angular.isFunction(a)||angular.isArray(a))&&c.push(d.when(b.invoke(a)))}),c}var k={};return k.open=function(b){var e=d.defer(),f=d.defer(),k={result:e.promise,opened:f.promise,close:function(a){h.close(k,a)},dismiss:function(a){h.dismiss(k,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var l=d.all([i(b)].concat(j(b.resolve)));return l.then(function(a){var d=(b.scope||c).$new();d.$close=k.close,d.$dismiss=k.dismiss;var f,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=k,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),f=g(b.controller,i),b.controllerAs&&(d[b.controllerAs]=f)),h.open(k,{scope:d,deferred:e,content:a[0],backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size})},function(a){e.reject(a)}),l.then(function(){f.resolve(!0)},function(){f.reject(!1)}),k},k}]};return a}),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(f,g){e=f,this.config=g,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=g.itemsPerPage},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b){a.page!==b&&b>0&&b<=a.totalPages&&(e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages},a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})}]).constant("paginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["$parse","paginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@"},require:["pagination","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pagination.html",replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("pagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@"},require:["pager","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).provider("$tooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase() +})}var b={placement:"top",animation:!0,popupDelay:0},c={mouseenter:"mouseleave",click:"click",focus:"blur"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$position","$interpolate",function(e,f,g,h,i,j){return function(e,k,l){function m(a){var b=a||n.trigger||l,d=c[b]||b;return{show:b,hide:d}}var n=angular.extend({},b,d),o=a(e),p=j.startSymbol(),q=j.endSymbol(),r="
      ';return{restrict:"EA",compile:function(){var a=f(r);return function(b,c,d){function f(){D.isOpen?l():j()}function j(){(!C||b.$eval(d[k+"Enable"]))&&(s(),D.popupDelay?z||(z=g(o,D.popupDelay,!1),z.then(function(a){a()})):o()())}function l(){b.$apply(function(){p()})}function o(){return z=null,y&&(g.cancel(y),y=null),D.content?(q(),w.css({top:0,left:0,display:"block"}),D.$digest(),E(),D.isOpen=!0,D.$digest(),E):angular.noop}function p(){D.isOpen=!1,g.cancel(z),z=null,D.animation?y||(y=g(r,500)):r()}function q(){w&&r(),x=D.$new(),w=a(x,function(a){A?h.find("body").append(a):c.after(a)})}function r(){y=null,w&&(w.remove(),w=null),x&&(x.$destroy(),x=null)}function s(){t(),u()}function t(){var a=d[k+"Placement"];D.placement=angular.isDefined(a)?a:n.placement}function u(){var a=d[k+"PopupDelay"],b=parseInt(a,10);D.popupDelay=isNaN(b)?n.popupDelay:b}function v(){var a=d[k+"Trigger"];F(),B=m(a),B.show===B.hide?c.bind(B.show,f):(c.bind(B.show,j),c.bind(B.hide,l))}var w,x,y,z,A=angular.isDefined(n.appendToBody)?n.appendToBody:!1,B=m(void 0),C=angular.isDefined(d[k+"Enable"]),D=b.$new(!0),E=function(){var a=i.positionElements(c,w,D.placement,A);a.top+="px",a.left+="px",w.css(a)};D.isOpen=!1,d.$observe(e,function(a){D.content=a,!a&&D.isOpen&&p()}),d.$observe(k+"Title",function(a){D.title=a});var F=function(){c.unbind(B.show,j),c.unbind(B.hide,l)};v();var G=b.$eval(d[k+"Animation"]);D.animation=angular.isDefined(G)?!!G:n.animation;var H=b.$eval(d[k+"AppendToBody"]);A=angular.isDefined(H)?H:A,A&&b.$on("$locationChangeSuccess",function(){D.isOpen&&p()}),b.$on("$destroy",function(){g.cancel(y),g.cancel(z),F(),r(),D=null})}}}}}]}).directive("tooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).directive("tooltipHtmlUnsafe",["$tooltip",function(a){return a("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("progressConfig",{animate:!0,max:100}).controller("ProgressController",["$scope","$attrs","progressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max,this.addBar=function(b,c){e||c.css({transition:"none"}),this.bars.push(b),b.$watch("value",function(c){b.percent=+(100*c/a.max).toFixed(2)}),b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)}}]).directive("progress",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{},templateUrl:"template/progressbar/progress.html"}}).directive("bar",function(){return{restrict:"EA",replace:!0,transclude:!0,require:"^progress",scope:{value:"=",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b)}}}).directive("progressbar",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5,stateOn:null,stateOff:null}).controller("RatingController",["$scope","$attrs","ratingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(f)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff},a[b]);return a},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("rating",function(){return{restrict:"EA",require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("TabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length?a.active=!0:a.active&&b.select(a)},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("tab",["$parse",function(a){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},compile:function(b,c,d){return function(b,c,e,f){b.$watch("active",function(a){a&&f.select(b)}),b.disabled=!1,e.disabled&&b.$parent.$watch(a(e.disabled),function(a){b.disabled=!!a}),b.select=function(){b.disabled||(b.active=!0)},f.addTab(b),b.$on("$destroy",function(){f.removeTab(b)}),b.$transcludeFn=d}}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}]).directive("tabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0}).controller("TimepickerController",["$scope","$attrs","$parse","$log","$locale","timepickerConfig",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===p[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a}function j(a){k(),o.$setViewValue(new Date(n)),l(a)}function k(){o.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=n.getHours(),d=n.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:i(c),a.minutes="m"===b?d:i(d),a.meridian=n.getHours()<12?p[0]:p[1]}function m(a){var b=new Date(n.getTime()+6e4*a);n.setHours(b.getHours(),b.getMinutes()),j()}var n=new Date,o={$setViewValue:angular.noop},p=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){o=c,o.$render=this.render;var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var q=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){q=parseInt(a,10)});var r=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){r=parseInt(a,10)}),a.showMeridian=f.showMeridian,b.showMeridian&&a.$parent.$watch(c(b.showMeridian),function(b){if(a.showMeridian=!!b,o.$error.time){var c=g(),d=h();angular.isDefined(c)&&angular.isDefined(d)&&(n.setHours(c),j())}else l()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){o.$setViewValue(null),o.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(n.setHours(a),j("h")):d(!0)},b.bind("blur",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(n.setMinutes(a),j("m")):d(void 0,!0)},c.bind("blur",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var a=o.$modelValue?new Date(o.$modelValue):null;isNaN(a)?(o.$setValidity("time",!1),d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(a&&(n=a),k(),l())},a.incrementHours=function(){m(60*q)},a.decrementHours=function(){m(60*-q)},a.incrementMinutes=function(){m(r)},a.decrementMinutes=function(){m(-r)},a.toggleMeridian=function(){m(720*(n.getHours()<12?1:-1))}}]).directive("timepicker",function(){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",replace:!0,scope:{},templateUrl:"template/timepicker/timepicker.html",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).factory("typeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$position","typeaheadParser",function(a,b,c,d,e,f,g){var h=[9,13,27,38,40];return{require:"ngModel",link:function(i,j,k,l){var m,n=i.$eval(k.typeaheadMinLength)||1,o=i.$eval(k.typeaheadWaitMs)||0,p=i.$eval(k.typeaheadEditable)!==!1,q=b(k.typeaheadLoading).assign||angular.noop,r=b(k.typeaheadOnSelect),s=k.typeaheadInputFormatter?b(k.typeaheadInputFormatter):void 0,t=k.typeaheadAppendToBody?i.$eval(k.typeaheadAppendToBody):!1,u=i.$eval(k.typeaheadFocusFirst)!==!1,v=b(k.ngModel).assign,w=g.parse(k.typeahead),x=i.$new();i.$on("$destroy",function(){x.$destroy()});var y="typeahead-"+x.$id+"-"+Math.floor(1e4*Math.random());j.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":y});var z=angular.element("
      ");z.attr({id:y,matches:"matches",active:"activeIdx",select:"select(activeIdx)",query:"query",position:"position"}),angular.isDefined(k.typeaheadTemplateUrl)&&z.attr("template-url",k.typeaheadTemplateUrl);var A=function(){x.matches=[],x.activeIdx=-1,j.attr("aria-expanded",!1)},B=function(a){return y+"-option-"+a};x.$watch("activeIdx",function(a){0>a?j.removeAttr("aria-activedescendant"):j.attr("aria-activedescendant",B(a))});var C=function(a){var b={$viewValue:a};q(i,!0),c.when(w.source(i,b)).then(function(c){var d=a===l.$viewValue;if(d&&m)if(c.length>0){x.activeIdx=u?0:-1,x.matches.length=0;for(var e=0;e=n?o>0?(F(),E(a)):C(a):(q(i,!1),F(),A()),p?a:a?void l.$setValidity("editable",!1):(l.$setValidity("editable",!0),a)}),l.$formatters.push(function(a){var b,c,d={};return s?(d.$model=a,s(i,d)):(d[w.itemName]=a,b=w.viewMapper(i,d),d[w.itemName]=void 0,c=w.viewMapper(i,d),b!==c?b:a)}),x.select=function(a){var b,c,e={};e[w.itemName]=c=x.matches[a].model,b=w.modelMapper(i,e),v(i,b),l.$setValidity("editable",!0),r(i,{$item:c,$model:b,$label:w.viewMapper(i,e)}),A(),d(function(){j[0].focus()},0,!1)},j.bind("keydown",function(a){0!==x.matches.length&&-1!==h.indexOf(a.which)&&(-1!=x.activeIdx||13!==a.which&&9!==a.which)&&(a.preventDefault(),40===a.which?(x.activeIdx=(x.activeIdx+1)%x.matches.length,x.$digest()):38===a.which?(x.activeIdx=(x.activeIdx>0?x.activeIdx:x.matches.length)-1,x.$digest()):13===a.which||9===a.which?x.$apply(function(){x.select(x.activeIdx)}):27===a.which&&(a.stopPropagation(),A(),x.$digest()))}),j.bind("blur",function(){m=!1});var G=function(a){j[0]!==a.target&&(A(),x.$digest())};e.bind("click",G),i.$on("$destroy",function(){e.unbind("click",G),t&&H.remove()});var H=a(z)(x);t?e.find("body").append(H):j.after(H)}}}]).directive("typeaheadPopup",function(){return{restrict:"EA",scope:{matches:"=",query:"=",active:"=",position:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("typeaheadMatch",["$http","$templateCache","$compile","$parse",function(a,b,c,d){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(e,f,g){var h=d(g.templateUrl)(e.$parent)||"template/typeahead/typeahead-match.html";a.get(h,{cache:b}).success(function(a){f.replaceWith(c(a.trim())(e))})}}}]).filter("typeaheadHighlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c?(""+b).replace(new RegExp(a(c),"gi"),"$&"):b}}); \ No newline at end of file diff --git a/vendor/assets/components/angular-devise/.bower.json b/vendor/assets/components/angular-devise/.bower.json new file mode 100644 index 000000000..bce55bada --- /dev/null +++ b/vendor/assets/components/angular-devise/.bower.json @@ -0,0 +1,33 @@ +{ + "name": "AngularDevise", + "version": "1.0.2", + "main": "lib/devise.js", + "ignore": [ + "**/.*", + "node_modules", + "components", + "bower_components", + "spec", + "reports" + ], + "author": { + "name": "Justin Ridgewell" + }, + "dependencies": { + "angular": ">=1.2.0 <1.4.0" + }, + "devDependencies": { + "angular-mocks": ">=1.2.0 <1.4.0", + "angular-scenario": ">=1.2.0 <1.4.0" + }, + "homepage": "https://github.com/cloudspace/angular_devise", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "05e72fdf1be0140ddca36852dc5cb0c64a757ccd" + }, + "_source": "git://github.com/cloudspace/angular_devise.git", + "_target": "~1.0.2", + "_originalSource": "angular-devise" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-devise/Gruntfile.js b/vendor/assets/components/angular-devise/Gruntfile.js new file mode 100755 index 000000000..bd3f970cf --- /dev/null +++ b/vendor/assets/components/angular-devise/Gruntfile.js @@ -0,0 +1,94 @@ +/*global module:false*/ +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + meta: { + version: '<%= pkg.version %>', + banner: + '// AngularDevise\n' + + '// -------------------\n' + + '// v<%= pkg.version %>\n' + + '//\n' + + '// Copyright (c)<%= grunt.template.today("yyyy") %> Justin Ridgewell\n' + + '// Distributed under MIT license\n' + + '//\n' + + '// https://github.com/cloudspace/angular_devise\n' + + '\n' + }, + + preprocess: { + build: { + files: { + 'lib/devise.js' : 'src/build/devise.js' + } + } + }, + + uglify : { + options: { + banner: "<%= meta.banner %>" + }, + core : { + src : 'lib/devise.js', + dest : 'lib/devise-min.js', + } + }, + + jshint: { + options: { + jshintrc : '.jshintrc' + }, + devise : [ 'src/*.js' ], + test : [ 'test/*.js', 'test/specs/*.js' ], + }, + + plato: { + devise : { + src : 'src/*.js', + dest : 'reports', + options : { + jshint : false + } + } + }, + + ngAnnotate: { + options: { + singleQuotes: true + }, + dist: { + files: { + 'lib/devise.js': ['lib/devise.js'] + } + } + }, + + karma: { + options: { + configFile: 'karma.conf.js', + browsers: ['PhantomJS'] + }, + unit: { + }, + continuous: { + singleRun: false + } + } + }); + + require('load-grunt-tasks')(grunt); + require('time-grunt')(grunt); + + // Default task. + grunt.registerTask('lint-test', 'jshint:test'); + grunt.registerTask('test', function(type) { + type = type || 'unit'; + grunt.task.run('karma:' + type); + }); + grunt.registerTask('travis', ['jshint:devise', 'karma']); + grunt.registerTask('build', ['default', 'preprocess', 'ngAnnotate', 'uglify']); + grunt.registerTask('default', ['jshint:devise', 'test']); + +}; diff --git a/vendor/assets/components/angular-devise/LICENSE.md b/vendor/assets/components/angular-devise/LICENSE.md new file mode 100755 index 000000000..39ec35cdb --- /dev/null +++ b/vendor/assets/components/angular-devise/LICENSE.md @@ -0,0 +1,20 @@ +Copyright (c) 2013 Justin Ridgewell +=================================== + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/assets/components/angular-devise/README.md b/vendor/assets/components/angular-devise/README.md new file mode 100644 index 000000000..899794d38 --- /dev/null +++ b/vendor/assets/components/angular-devise/README.md @@ -0,0 +1,418 @@ +AngularDevise [![Build Status](https://travis-ci.org/cloudspace/angular_devise.png)](http://travis-ci.org/cloudspace/angular_devise) +============= + +A small AngularJS Service to interact with Devise Authentication. + + +Requirements +------------ + +This service requires Devise to respond to JSON. To do that, simply add + +```ruby +# app/controllers/application_controller.rb +class ApplicationController < ActionController::Base + respond_to :html, :json + # ... +end +``` + +Aditionally, if you have [CSRF Forgery +Protection](http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html) +enabled for your controller actions, you will also need to include the +`X-CSRF-TOKEN` header with the token provided by rails. The easiest way +to include this is to use the +[angular_rails_csrf gem](https://github.com/jsanders/angular_rails_csrf). + +Downloading +----------- + +AngularDevise is registered as `angular-devise` in +[bower](http://sindresorhus.com/bower-components/#!/search/angular-devise). + +```bash +bower install --save angular-devise +``` + +You can then use the main file at `angular-devise/lib/devise-min.js`. + + +Usage +----- + +Just register `Devise` as a dependency for your module. Then, the `Auth` +service will be available for use. + +```javascript +angular.module('myModule', ['Devise']). + config(function(AuthProvider) { + // Configure Auth service with AuthProvider + }). + controller('myCtrl', function(Auth) { + // Use your configured Auth service. + }); +``` + +### Auth.currentUser() + +`Auth.currentUser()` returns a promise that will be resolved into the +currentUser. There are three possible outcomes: + + 1. Auth has authenticated a user, and will resolve with that user. + 2. Auth has not authenticated a user but the server has a previously + authenticated session, Auth will attempt to retrieve that session + and resolve with its user. Then, a `devise:new-session` event will + be broadcast with the current user as the argument. + 3. Neither Auth nor the server has an authenticated session, and a + rejected promise will be returned. (see [Interceptor](#interceptor) + for for custom handling.) + +```javascript +angular.module('myModule', ['Devise']). + controller('myCtrl', function(Auth) { + Auth.currentUser().then(function(user) { + // User was logged in, or Devise returned + // previously authenticated session. + console.log(user); // => {id: 1, ect: '...'} + }, function(error) { + // unauthenticated error + }); + }); +``` + +#### Auth._currentUser + +`Auth._currentUser` will be either `null` or the currentUser's object +representation. It is not recommended to directly access +`Auth._currentUser`, but instead use +[Auth.currentUser()](#authcurrentuser). + +```javascript +angular.module('myModule', ['Devise']). + controller('myCtrl', function(Auth) { + console.log(Auth._currentUser); // => null + + // Log in user... + + console.log(Auth._currentUser); // => {id: 1, ect: '...'} + }); +``` + + +### Auth.isAuthenticated() + +`Auth.isAuthenticated()` is a helper method to determine if a +currentUser is logged in with Auth. + +```javascript +angular.module('myModule', ['Devise']). + controller('myCtrl', function(Auth) { + console.log(Auth.isAuthenticated()); // => false + + // Log in user... + + console.log(Auth.isAuthenticated()); // => true + }); +``` + +### Auth.login(creds) + +Use `Auth.login()` to authenticate with the server. Keep in mind, +credentials are sent in plaintext; use a SSL connection to secure them. +`creds` is an object which should contain any credentials needed to +authenticate with the server. `Auth.login()` will return a promise that +will resolve to the logged-in user. See +[Auth.parse(response)](#authparseresponse) to customize how the response +is parsed into a user. + +Upon a successful login, two events will be broadcast, `devise:login` and +`devise:new-session`, both with the currentUser as the argument. New-Session will only +be broadcast if the user was logged in by `Auth.login({...})`. If the server +has a previously authenticated session, only the login event will be broadcast. + +```javascript +angular.module('myModule', ['Devise']). + controller('myCtrl', function(Auth) { + var credentials = { + email: 'user@domain.com', + password: 'password1' + }; + + Auth.login(credentials).then(function(user) { + console.log(user); // => {id: 1, ect: '...'} + }, function(error) { + // Authentication failed... + }); + + $scope.$on('devise:login', function(event, currentUser) { + // after a login, a hard refresh, a new tab + }); + + $scope.$on('devise:new-session', function(event, currentUser) { + // user logged in by Auth.login({...}) + }); + }); +``` + +By default, `login` will POST to '/users/sign_in.json' using the +resource name `user`. The path, HTTP method, and resource name used to +login are configurable using: + +```javascript +angular.module('myModule', ['Devise']). + config(function(AuthProvider) { + AuthProvider.loginPath('path/on/server.json'); + AuthProvider.loginMethod('GET'); + AuthProvider.resourceName('customer'); + }); +``` + +### Auth.logout() + +Use `Auth.logout()` to de-authenticate from the server. `Auth.logout()` +returns a promise that will be resolved to the old currentUser. Then a +`devise:logout` event will be broadcast with the old currentUser as the argument. + +```javascript +angular.module('myModule', ['Devise']). + controller('myCtrl', function(Auth) { + // Log in user... + // ... + Auth.logout().then(function(oldUser) { + // alert(oldUser.name + "you're signed out now."); + }, function(error) { + // An error occurred logging out. + }); + + $scope.$on('devise:logout', function(event, oldCurrentUser) { + // ... + }); + }); +``` + +By default, `logout` will DELETE to '/users/sign_out.json'. The path and +HTTP method used to logout are configurable using: + +```javascript +angular.module('myModule', ['Devise']). + config(function(AuthProvider) { + AuthProvider.logoutPath('path/on/server.json'); + AuthProvider.logoutMethod('GET'); + }); +``` + +### Auth.parse(response) + +This is the method used to parse the `$http` response into the appropriate +user object. By default, it simply returns `response.data`. This can be +customized either by specifying a parse function during configuration: + +```javascript +angular.module('myModule', ['Devise']). + config(function(AuthProvider) { + // Customize user parsing + // NOTE: **MUST** return a truth-y expression + AuthProvider.parse(function(response) { + return response.data.user; + }); + }); +``` + +or by directly overwriting it, perhaps when writing a custom version of +the Auth service which depends on another service: + +```javascript +angular.module('myModule', ['Devise']). + factory('User', function() { + // Custom user factory + }). + factory('CustomAuth', function(Auth, User) { + Auth['parse'] = function(response) { + return new User(response.data); + }; + return Auth; + }); +``` + +### Auth.register(creds) + +Use `Auth.register()` to register and authenticate with the server. Keep +in mind, credentials are sent in plaintext; use a SSL connection to +secure them. `creds` is an object that should contain any credentials +needed to register with the server. `Auth.register()` will return a +promise that will resolve to the registered user. See +[Auth.parse(response)](#authparseresponse) to customize how the response +is parsed into a user. Then a `devise:new-registration` event will be +broadcast with the user object as the argument. + +```javascript +angular.module('myModule', ['Devise']). + controller('myCtrl', function(Auth) { + var credentials = { + email: 'user@domain.com', + password: 'password1', + password_confirmation: 'password1' + }; + + Auth.register(credentials).then(function(registeredUser) { + console.log(registeredUser); // => {id: 1, ect: '...'} + }, function(error) { + // Registration failed... + }); + + $scope.$on('devise:new-registration', function(event, user) { + // ... + }); + }); +``` + +By default, `register` will POST to '/users.json' using the resource +name `user`. The path, HTTP method, and resource name used to register +are configurable using: + +```javascript +angular.module('myModule', ['Devise']). + config(function(AuthProvider) { + AuthProvider.registerPath('path/on/server.json'); + AuthProvider.registerMethod('GET'); + AuthProvider.resourceName('customer'); + }); +``` + + +Interceptor +----------- + +AngularDevise comes with a [$http +Interceptor](http://docs.angularjs.org/api/ng.$http#description_interceptors) +that may be enabled using the `interceptAuth` config. Its purpose is to +listen for `401 Unauthorized` responses and give you the ability to +seamlessly recover. When it catches a 401, it will: + 1. create a deferred + 2. broadcast a `devise:unauthorized` event passing: + - the ajax response + - the deferred + 3. return the deferred's promise + +Since the deferred is passed to the `devise:unauthorized` event, you are +free to resolve it (and the request) inside of the event listener. For +instance: + +```javascript +angular.module('myModule', []). + controller('myCtrl', function($scope, Auth, $http) { + // Guest user + + // Catch unauthorized requests and recover. + $scope.$on('devise:unauthorized', function(event, xhr, deferred) { + // Ask user for login credentials + + Auth.login(credentials).then(function() { + // Successfully logged in. + // Redo the original request. + return $http(xhr.config); + }).then(function(response) { + // Successfully recovered from unauthorized error. + // Resolve the original request's promise. + deferred.resolve(response); + }, function(error) { + // There was an error logging in. + // Reject the original request's promise. + deferred.reject(error); + }); + }); + + // Request requires authorization + // Will cause a `401 Unauthorized` response, + // that will be recovered by our listener above. + $http.delete('/users/1', { + interceptAuth: true + }).then(function(response) { + // Deleted user 1 + }, function(error) { + // Something went wrong. + }); + }); +``` + +The Interceptor can be enabled globally or on a per-request basis using the +`interceptAuth` setting on the AuthIntercept provider. + +```javascript +angular.module('myModule', ['Devise']). + config(function(AuthInterceptProvider) { + // Intercept 401 Unauthorized everywhere + AuthInterceptProvider.interceptAuth(true); + }). + controller('myCtrl', function($http) { + // Disable per-request + $http({ + url: '/', + interceptAuth: false, + // ... + }); + }); +``` + + +AuthProvider +------------ + +By default, AngularDevise uses the following HTTP methods/paths: + +| Method | HTTP Method | HTTP Path | +| -------- | ----------- | -------------------- | +| login | POST | /users/sign_in.json | +| logout | DELETE | /users/sign_out.json | +| register | POST | /users.json | + +All credentials will be under the `users` namespace, and the following +parse function will be used to parse the response: + +```javascript +function(response) { + return response.data; +}; +``` + +All of these can be configured using a `.config` block in your module. + +```javascript +angular.module('myModule', ['Devise']). + config(function(AuthProvider, AuthInterceptProvider) { + // Customize login + AuthProvider.loginMethod('GET'); + AuthProvider.loginPath('/admins/login.json'); + + // Customize logout + AuthProvider.logoutMethod('POST'); + AuthProvider.logoutPath('/user/logout.json'); + + // Customize register + AuthProvider.registerMethod('PATCH'); + AuthProvider.registerPath('/user/sign_up.json'); + + // Customize the resource name data use namespaced under + // Pass false to disable the namespace altogether. + AuthProvider.resourceName('customer'); + + // Customize user parsing + // NOTE: **MUST** return a truth-y expression + AuthProvider.parse(function(response) { + return response.data.user; + }); + + // Intercept 401 Unauthorized everywhere + // Enables `devise:unauthorized` interceptor + AuthInterceptProvider.interceptAuth(true); + }); +``` + + +Credits +------- + +[![Cloudspace](http://cloudspace.com/assets/images/logo.png)](http://cloudspace.com/) + +AngularDevise is maintained by [Cloudspace](http://cloudspace.com/), and +is distributed under the [MIT License](/LICENSE.md). diff --git a/vendor/assets/components/angular-devise/bower.json b/vendor/assets/components/angular-devise/bower.json new file mode 100755 index 000000000..9f9f69e40 --- /dev/null +++ b/vendor/assets/components/angular-devise/bower.json @@ -0,0 +1,23 @@ +{ + "name": "AngularDevise", + "version": "1.0.2", + "main": "lib/devise.js", + "ignore": [ + "**/.*", + "node_modules", + "components", + "bower_components", + "spec", + "reports" + ], + "author": { + "name": "Justin Ridgewell" + }, + "dependencies": { + "angular": ">=1.2.0 <1.4.0" + }, + "devDependencies": { + "angular-mocks": ">=1.2.0 <1.4.0", + "angular-scenario": ">=1.2.0 <1.4.0" + } +} diff --git a/vendor/assets/components/angular-devise/karma.conf.js b/vendor/assets/components/angular-devise/karma.conf.js new file mode 100644 index 000000000..562ffe3a2 --- /dev/null +++ b/vendor/assets/components/angular-devise/karma.conf.js @@ -0,0 +1,38 @@ +module.exports = function(config) { + config.set({ + // base path, that will be used to resolve files and exclude + basePath: '', + + // testing framework to use (jasmine/mocha/qunit/...) + frameworks: ['jasmine'], + + // list of files / patterns to load in the browser + files: [ + 'test/support/angular/angular.js', + 'test/support/angular-mocks/angular-mocks.js', + 'test/devise.js', + 'src/*.js', + 'test/mock/**/*.js', + 'test/spec/**/*.js' + ], + + // list of files / patterns to exclude + exclude: [], + + // web server port + port: 8080, + + // level of logging + // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + browsers: ['Chrome'], + + singleRun: true + }); +}; diff --git a/vendor/assets/components/angular-devise/lib/devise-min.js b/vendor/assets/components/angular-devise/lib/devise-min.js new file mode 100644 index 000000000..58e280506 --- /dev/null +++ b/vendor/assets/components/angular-devise/lib/devise-min.js @@ -0,0 +1,10 @@ +// AngularDevise +// ------------------- +// v1.0.2 +// +// Copyright (c)2014 Justin Ridgewell +// Distributed under MIT license +// +// https://github.com/cloudspace/angular_devise + +!function(a){"use strict";var b=a.module("Devise",[]);b.provider("AuthIntercept",function(){var a=!1;this.interceptAuth=function(b){return a=!!b||void 0===b,this},this.$get=["$rootScope","$q",function(b,c){return{responseError:function(d){var e=d.config.interceptAuth;if(e=!!e||a&&void 0===e,e&&401===d.status){var f=c.defer();return b.$broadcast("devise:unauthorized",d,f),f.promise}return c.reject(d)}}}]}).config(["$httpProvider",function(a){a.interceptors.push("AuthIntercept")}]),b.provider("Auth",function(){function b(a,b){var c={method:f[a].toLowerCase(),url:e[a]};return b&&(g?(c.data={},c.data[g]=b):c.data=b),c}function c(b,c){a.forEach(b,function(a,d){this[d+c]=function(a){return void 0===a?b[d]:(b[d]=a,this)}},this)}function d(a){return function(){return a}}var e={login:"/users/sign_in.json",logout:"/users/sign_out.json",register:"/users.json"},f={login:"POST",logout:"DELETE",register:"POST"},g="user",h=function(a){return a.data};c.call(this,f,"Method"),c.call(this,e,"Path"),this.resourceName=function(a){return void 0===a?g:(g=a,this)},this.parse=function(a){return"function"!=typeof a?h:(h=a,this)},this.$get=["$q","$http","$rootScope",function(a,c,e){function f(a){return j._currentUser=a,a}function g(){f(null)}function i(a){return function(b){return e.$broadcast("devise:"+a,b),b}}var j={_currentUser:null,parse:h,login:function(a){var d=arguments.length>0,e=j.isAuthenticated();return a=a||{},c(b("login",a)).then(j.parse).then(f).then(function(a){return d&&!e?i("new-session")(a):a}).then(i("login"))},logout:function(){var a=d(j._currentUser);return c(b("logout")).then(g).then(a).then(i("logout"))},register:function(a){return a=a||{},c(b("register",a)).then(j.parse).then(f).then(i("new-registration"))},currentUser:function(){return j.isAuthenticated()?a.when(j._currentUser):j.login()},isAuthenticated:function(){return!!j._currentUser}};return j}]})}(angular); \ No newline at end of file diff --git a/vendor/assets/components/angular-devise/lib/devise.js b/vendor/assets/components/angular-devise/lib/devise.js new file mode 100644 index 000000000..9fe040134 --- /dev/null +++ b/vendor/assets/components/angular-devise/lib/devise.js @@ -0,0 +1,299 @@ +(function(angular) { + 'use strict'; + var devise = angular.module('Devise', []); + + devise.provider('AuthIntercept', function AuthInterceptProvider() { + /** + * Set to true to intercept 401 Unauthorized responses + */ + var interceptAuth = false; + + // The interceptAuth config function + this.interceptAuth = function(value) { + interceptAuth = !!value || value === void 0; + return this; + }; + + this.$get = ['$rootScope', '$q', function($rootScope, $q) { + // Only for intercepting 401 requests. + return { + responseError: function(response) { + // Determine if the response is specifically disabling the interceptor. + var intercept = response.config.interceptAuth; + intercept = !!intercept || (interceptAuth && intercept === void 0); + + if (intercept && response.status === 401) { + var deferred = $q.defer(); + $rootScope.$broadcast('devise:unauthorized', response, deferred); + return deferred.promise; + } + + return $q.reject(response); + } + }; + }]; +}).config(['$httpProvider', function($httpProvider) { + $httpProvider.interceptors.push('AuthIntercept'); +}]); + + devise.provider('Auth', function AuthProvider() { + /** + * The default paths. + */ + var paths = { + login: '/users/sign_in.json', + logout: '/users/sign_out.json', + register: '/users.json' + }; + + /** + * The default HTTP methods to use. + */ + var methods = { + login: 'POST', + logout: 'DELETE', + register: 'POST' + }; + + /** + * Default devise resource_name is 'user', can be set to any string. + * If it's falsey, it will not namespace the data. + */ + var resourceName = 'user'; + + /** + * The parsing function used to turn a $http + * response into a "user". + * + * Can be swapped with another parsing function + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.parse(function(response) { + * return new User(response.data); + * }); + * }); + */ + var _parse = function(response) { + return response.data; + }; + + // A helper function that will setup the ajax config + // and merge the data key if provided + function httpConfig(action, data) { + var config = { + method: methods[action].toLowerCase(), + url: paths[action] + }; + + if (data) { + if (resourceName) { + config.data = {}; + config.data[resourceName] = data; + } else { + config.data = data; + } + } + + return config; + } + + // A helper function to define our configure functions. + // Loops over all properties in obj, and creates a get/set + // method for [key + suffix] to set that property on obj. + function configure(obj, suffix) { + angular.forEach(obj, function(v, action) { + this[action + suffix] = function(param) { + if (param === undefined) { + return obj[action]; + } + obj[action] = param; + return this; + }; + }, this); + } + configure.call(this, methods, 'Method'); + configure.call(this, paths, 'Path'); + + // The resourceName config function + this.resourceName = function(value) { + if (value === undefined) { + return resourceName; + } + resourceName = value; + return this; + }; + + // The parse configure function. + this.parse = function(fn) { + if (typeof fn !== 'function') { + return _parse; + } + _parse = fn; + return this; + }; + + // Creates a function that always + // returns a given arg. + function constant(arg) { + return function() { + return arg; + }; + } + + this.$get = ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + // Our shared save function, called + // by `then`s. + function save(user) { + service._currentUser = user; + return user; + } + // A reset that saves null for currentUser + function reset() { + save(null); + } + + function broadcast(name) { + return function(data) { + $rootScope.$broadcast('devise:' + name, data); + return data; + }; + } + + var service = { + /** + * The Auth service's current user. + * This is shared between all instances of Auth + * on the scope. + */ + _currentUser: null, + + /** + * The Auth service's parsing function. + * Defaults to the parsing function set in the provider, + * but may also be overwritten directly on the service. + */ + parse: _parse, + + /** + * A login function to authenticate with the server. + * Keep in mind, credentials are sent in plaintext; + * use a SSL connection to secure them. By default, + * `login` will POST to '/users/sign_in.json'. + * + * The path and HTTP method used to login are configurable + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.loginPath('path/on/server.json'); + * AuthProvider.loginMethod('GET'); + * }); + * + * @param {Object} [creds] A hash of user credentials. + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + login: function(creds) { + var withCredentials = arguments.length > 0, + loggedIn = service.isAuthenticated(); + + creds = creds || {}; + return $http(httpConfig('login', creds)) + .then(service.parse) + .then(save) + .then(function(user) { + if (withCredentials && !loggedIn) { + return broadcast('new-session')(user); + } + return user; + }) + .then(broadcast('login')); + }, + + /** + * A logout function to de-authenticate from the server. + * By default, `logout` will DELETE to '/users/sign_out.json'. + * + * The path and HTTP method used to logout are configurable + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.logoutPath('path/on/server.json'); + * AuthProvider.logoutMethod('GET'); + * }); + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + logout: function() { + var returnOldUser = constant(service._currentUser); + return $http(httpConfig('logout')) + .then(reset) + .then(returnOldUser) + .then(broadcast('logout')); + }, + + /** + * A register function to register and authenticate + * with the server. Keep in mind, credentials are sent + * in plaintext; use a SSL connection to secure them. + * By default, `register` will POST to '/users.json'. + * + * The path and HTTP method used to login are configurable + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.registerPath('path/on/server.json'); + * AuthProvider.registerMethod('GET'); + * }); + * + * @param {Object} [creds] A hash of user credentials. + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + register: function(creds) { + creds = creds || {}; + return $http(httpConfig('register', creds)) + .then(service.parse) + .then(save) + .then(broadcast('new-registration')); + }, + + /** + * A helper function that will return a promise with the currentUser. + * Three different outcomes can happen: + * 1. Auth has authenticated a user, and will resolve with it + * 2. Auth has not authenticated a user but the server has an + * authenticated session, Auth will attempt to retrieve that + * session and resolve with its user. + * 3. Neither Auth nor the server has an authenticated session, + * and will reject with an unauthenticated error. + * + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + currentUser: function() { + if (service.isAuthenticated()) { + return $q.when(service._currentUser); + } + return service.login(); + }, + + /** + * A helper function to determine if a currentUser is present. + * + * @returns Boolean + */ + isAuthenticated: function(){ + return !!service._currentUser; + } + }; + + return service; + }]; +}); + +})(angular); diff --git a/vendor/assets/components/angular-devise/package.json b/vendor/assets/components/angular-devise/package.json new file mode 100755 index 000000000..c34cd7e83 --- /dev/null +++ b/vendor/assets/components/angular-devise/package.json @@ -0,0 +1,35 @@ +{ + "name": "AngularDevise", + "version": "1.0.2", + "description": "A small AngularJS Service to interact with Devise Authentication.", + "main": "lib/devise.js", + "scripts": { + "test": "grunt test" + }, + "repository": { + "type": "git", + "url": "https://github.com/cloudspace/angular_devise.git" + }, + "keywords": [ + "Angular", + "AngularJS", + "Devise" + ], + "author": "Justin Ridgewell", + "license": "MIT", + "bugs": { + "url": "https://github.com/cloudspace/angular_devise/issues" + }, + "dependencies": {}, + "devDependencies": { + "grunt": "~0.4.1", + "grunt-ng-annotate": "~0.5.0", + "grunt-plato": "~0.2.1", + "grunt-preprocess": "~2.3.0", + "grunt-contrib-jshint": "~0.6.2", + "grunt-contrib-uglify": "~0.2.2", + "grunt-karma": "~0.6.2", + "load-grunt-tasks": "~0.2.0", + "time-grunt": "~0.2.1" + } +} diff --git a/vendor/assets/components/angular-devise/src/401.js b/vendor/assets/components/angular-devise/src/401.js new file mode 100644 index 000000000..89deb5797 --- /dev/null +++ b/vendor/assets/components/angular-devise/src/401.js @@ -0,0 +1,33 @@ +devise.provider('AuthIntercept', function AuthInterceptProvider() { + /** + * Set to true to intercept 401 Unauthorized responses + */ + var interceptAuth = false; + + // The interceptAuth config function + this.interceptAuth = function(value) { + interceptAuth = !!value || value === void 0; + return this; + }; + + this.$get = function($rootScope, $q) { + // Only for intercepting 401 requests. + return { + responseError: function(response) { + // Determine if the response is specifically disabling the interceptor. + var intercept = response.config.interceptAuth; + intercept = !!intercept || (interceptAuth && intercept === void 0); + + if (intercept && response.status === 401) { + var deferred = $q.defer(); + $rootScope.$broadcast('devise:unauthorized', response, deferred); + return deferred.promise; + } + + return $q.reject(response); + } + }; + }; +}).config(function($httpProvider) { + $httpProvider.interceptors.push('AuthIntercept'); +}); diff --git a/vendor/assets/components/angular-devise/src/auth.js b/vendor/assets/components/angular-devise/src/auth.js new file mode 100644 index 000000000..6709323f3 --- /dev/null +++ b/vendor/assets/components/angular-devise/src/auth.js @@ -0,0 +1,259 @@ +devise.provider('Auth', function AuthProvider() { + /** + * The default paths. + */ + var paths = { + login: '/users/sign_in.json', + logout: '/users/sign_out.json', + register: '/users.json' + }; + + /** + * The default HTTP methods to use. + */ + var methods = { + login: 'POST', + logout: 'DELETE', + register: 'POST' + }; + + /** + * Default devise resource_name is 'user', can be set to any string. + * If it's falsey, it will not namespace the data. + */ + var resourceName = 'user'; + + /** + * The parsing function used to turn a $http + * response into a "user". + * + * Can be swapped with another parsing function + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.parse(function(response) { + * return new User(response.data); + * }); + * }); + */ + var _parse = function(response) { + return response.data; + }; + + // A helper function that will setup the ajax config + // and merge the data key if provided + function httpConfig(action, data) { + var config = { + method: methods[action].toLowerCase(), + url: paths[action] + }; + + if (data) { + if (resourceName) { + config.data = {}; + config.data[resourceName] = data; + } else { + config.data = data; + } + } + + return config; + } + + // A helper function to define our configure functions. + // Loops over all properties in obj, and creates a get/set + // method for [key + suffix] to set that property on obj. + function configure(obj, suffix) { + angular.forEach(obj, function(v, action) { + this[action + suffix] = function(param) { + if (param === undefined) { + return obj[action]; + } + obj[action] = param; + return this; + }; + }, this); + } + configure.call(this, methods, 'Method'); + configure.call(this, paths, 'Path'); + + // The resourceName config function + this.resourceName = function(value) { + if (value === undefined) { + return resourceName; + } + resourceName = value; + return this; + }; + + // The parse configure function. + this.parse = function(fn) { + if (typeof fn !== 'function') { + return _parse; + } + _parse = fn; + return this; + }; + + // Creates a function that always + // returns a given arg. + function constant(arg) { + return function() { + return arg; + }; + } + + this.$get = function($q, $http, $rootScope) { + // Our shared save function, called + // by `then`s. + function save(user) { + service._currentUser = user; + return user; + } + // A reset that saves null for currentUser + function reset() { + save(null); + } + + function broadcast(name) { + return function(data) { + $rootScope.$broadcast('devise:' + name, data); + return data; + }; + } + + var service = { + /** + * The Auth service's current user. + * This is shared between all instances of Auth + * on the scope. + */ + _currentUser: null, + + /** + * The Auth service's parsing function. + * Defaults to the parsing function set in the provider, + * but may also be overwritten directly on the service. + */ + parse: _parse, + + /** + * A login function to authenticate with the server. + * Keep in mind, credentials are sent in plaintext; + * use a SSL connection to secure them. By default, + * `login` will POST to '/users/sign_in.json'. + * + * The path and HTTP method used to login are configurable + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.loginPath('path/on/server.json'); + * AuthProvider.loginMethod('GET'); + * }); + * + * @param {Object} [creds] A hash of user credentials. + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + login: function(creds) { + var withCredentials = arguments.length > 0, + loggedIn = service.isAuthenticated(); + + creds = creds || {}; + return $http(httpConfig('login', creds)) + .then(service.parse) + .then(save) + .then(function(user) { + if (withCredentials && !loggedIn) { + return broadcast('new-session')(user); + } + return user; + }) + .then(broadcast('login')); + }, + + /** + * A logout function to de-authenticate from the server. + * By default, `logout` will DELETE to '/users/sign_out.json'. + * + * The path and HTTP method used to logout are configurable + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.logoutPath('path/on/server.json'); + * AuthProvider.logoutMethod('GET'); + * }); + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + logout: function() { + var returnOldUser = constant(service._currentUser); + return $http(httpConfig('logout')) + .then(reset) + .then(returnOldUser) + .then(broadcast('logout')); + }, + + /** + * A register function to register and authenticate + * with the server. Keep in mind, credentials are sent + * in plaintext; use a SSL connection to secure them. + * By default, `register` will POST to '/users.json'. + * + * The path and HTTP method used to login are configurable + * using + * + * angular.module('myModule', ['Devise']). + * config(function(AuthProvider) { + * AuthProvider.registerPath('path/on/server.json'); + * AuthProvider.registerMethod('GET'); + * }); + * + * @param {Object} [creds] A hash of user credentials. + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + register: function(creds) { + creds = creds || {}; + return $http(httpConfig('register', creds)) + .then(service.parse) + .then(save) + .then(broadcast('new-registration')); + }, + + /** + * A helper function that will return a promise with the currentUser. + * Three different outcomes can happen: + * 1. Auth has authenticated a user, and will resolve with it + * 2. Auth has not authenticated a user but the server has an + * authenticated session, Auth will attempt to retrieve that + * session and resolve with its user. + * 3. Neither Auth nor the server has an authenticated session, + * and will reject with an unauthenticated error. + * + * @returns {Promise} A $http promise that will be resolved or + * rejected by the server. + */ + currentUser: function() { + if (service.isAuthenticated()) { + return $q.when(service._currentUser); + } + return service.login(); + }, + + /** + * A helper function to determine if a currentUser is present. + * + * @returns Boolean + */ + isAuthenticated: function(){ + return !!service._currentUser; + } + }; + + return service; + }; +}); diff --git a/vendor/assets/components/angular-devise/src/build/devise.js b/vendor/assets/components/angular-devise/src/build/devise.js new file mode 100755 index 000000000..df579c770 --- /dev/null +++ b/vendor/assets/components/angular-devise/src/build/devise.js @@ -0,0 +1,7 @@ +(function(angular) { + 'use strict'; + var devise = angular.module('Devise', []); + + // @include ../401.js + // @include ../auth.js +})(angular); diff --git a/vendor/assets/components/angular-devise/test/devise.js b/vendor/assets/components/angular-devise/test/devise.js new file mode 100644 index 000000000..65a26e0d6 --- /dev/null +++ b/vendor/assets/components/angular-devise/test/devise.js @@ -0,0 +1 @@ +var devise = angular.module('Devise', []); diff --git a/vendor/assets/components/angular-google-analytics/.bower.json b/vendor/assets/components/angular-google-analytics/.bower.json new file mode 100644 index 000000000..65d4cd80e --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/.bower.json @@ -0,0 +1,28 @@ +{ + "author": "revolunet", + "name": "angular-google-analytics", + "description": "Easy Analytics for your AngularJS application", + "version": "0.0.13", + "homepage": "https://github.com/revolunet/angular-google-analytics", + "repository": { + "type": "git", + "url": "git://github.com/revolunet/angular-google-analytics.git" + }, + "main": "./dist/angular-google-analytics.min.js", + "dependencies": { + "angular": ">=1" + }, + "devDependencies": { + "angular-mocks": ">=1", + "angular-scenario": ">=1" + }, + "_release": "0.0.13", + "_resolution": { + "type": "version", + "tag": "0.0.13", + "commit": "c549bd76b086b9ca7f5538e61edbfe9d20c222c3" + }, + "_source": "git://github.com/revolunet/angular-google-analytics.git", + "_target": "~0.0.3", + "_originalSource": "angular-google-analytics" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-google-analytics/.gitignore b/vendor/assets/components/angular-google-analytics/.gitignore new file mode 100644 index 000000000..91d353d35 --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/.gitignore @@ -0,0 +1,5 @@ +*.DS_Store +node_modules +components +bower_components +.idea diff --git a/vendor/assets/components/angular-google-analytics/CHANGELOG.md b/vendor/assets/components/angular-google-analytics/CHANGELOG.md new file mode 100644 index 000000000..92fb68c07 --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/CHANGELOG.md @@ -0,0 +1,34 @@ +# 0.0.1 (2014-02-18) + +## Features +### tracker + +* add ecommerce tracking (5dac41c) + +* added setDomainName (ce2889f) + + + +## Bug fixes +### main + +* use $window._gaq (a630757) + + +# 0.0.1 (2014-02-18) + +## Features +### tracker + +* add ecommerce tracking (5dac41c) + +* added setDomainName (ce2889f) + + + +## Bug fixes +### main + +* use $window._gaq (a630757) + + diff --git a/vendor/assets/components/angular-google-analytics/Gruntfile.js b/vendor/assets/components/angular-google-analytics/Gruntfile.js new file mode 100644 index 000000000..ab4facce6 --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/Gruntfile.js @@ -0,0 +1,157 @@ +/* global require, module, */ + +'use strict'; + +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + meta: { + banner: '/**\n' + + ' * <%= pkg.description %>\n' + + ' * @version v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' + + ' * @link <%= pkg.homepage %>\n' + + ' * @author <%= pkg.author %>\n' + + ' * @license MIT License, http://www.opensource.org/licenses/MIT\n' + + ' */\n' + }, + dirs: { + dest: 'dist' + }, + concat: { + options: { + banner: '<%= meta.banner %>' + }, + dist: { + src: ['src/*.js'], + dest: '<%= dirs.dest %>/<%= pkg.name %>.js' + } + }, + uglify: { + options: { + banner: '<%= meta.banner %>' + }, + dist: { + src: ['<%= concat.dist.dest %>'], + dest: '<%= dirs.dest %>/<%= pkg.name %>.min.js' + } + }, + changelog: { + options: { + dest: 'CHANGELOG.md', + versionFile: 'package.json' + } + }, + stage: { + options: { + files: ['CHANGELOG.md'] + } + }, + release: { + options: { + commitMessage: '<%= version %>', + tagName: 'v<%= version %>', + file: 'package.json', + push: false, + tag: false, + pushTags: false, + npm: false + } + }, + jshint: { + files: ['Gruntfile.js', 'src/*.js', 'test/unit/*.js'], + options: { + curly: true, + browser: true, + eqeqeq: true, + immed: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + boss: true, + eqnull: true, + expr: true, + node: true, + '-W018': true, + globals: { + exports: true, + angular: false, + $: false + } + } + }, + // watch: { + // files: '', + // tasks: 'default' + // }, + karma: { + test: { + options: { + reporters: ['dots'], + singleRun: true + } + }, + server: { + options: { + singleRun: false + } + }, + options: { + configFile: 'test/karma.conf.js' + } + } + }); + + // Load the plugin that provides the "jshint" task. + grunt.loadNpmTasks('grunt-contrib-jshint'); + + // Load the plugin that provides the "concat" task. + grunt.loadNpmTasks('grunt-contrib-concat'); + + // Load the plugin that provides the "uglify" task. + grunt.loadNpmTasks('grunt-contrib-uglify'); + + // Load the plugin that provides the "watch" task. + //grunt.loadNpmTasks('grunt-contrib-watch'); + + grunt.loadNpmTasks('grunt-release'); + grunt.loadNpmTasks('grunt-conventional-changelog'); + + grunt.registerTask('stage', 'git add files before running the release task', function () { + var files = this.options().files; + grunt.util.spawn({ + cmd: process.platform === 'win32' ? 'git.cmd' : 'git', + args: ['add'].concat(files) + }, grunt.task.current.async()); + }); + + + + grunt.renameTask('release', 'originalRelease'); + + // Default task. + grunt.registerTask('default', ['test']); + + // Test tasks. + grunt.registerTask('test', ['jshint', 'karma:test']); + grunt.registerTask('test-server', ['karma:server']); + + // Build task. + grunt.registerTask('build', ['test', 'concat', 'uglify']); + + // release task + grunt.registerTask('release', ['build']); + + + // Provides the "karma" task. + grunt.registerMultiTask('karma', 'Starts up a karma server.', function() { + var done = this.async(); + require('karma').server.start(this.options(), function(code) { + done(code === 0); + }); + }); + +}; diff --git a/vendor/assets/components/angular-google-analytics/README.md b/vendor/assets/components/angular-google-analytics/README.md new file mode 100644 index 000000000..1d39ba37c --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/README.md @@ -0,0 +1,285 @@ +# angular-google-analytics + +This service lets you integrate google analytics tracker in your AngularJS applications easily. + +You can use basic functions, `Analytics.trackEvent('video', 'play', 'django.mp4');` or more advanced e-commerce features like product tracking, promo codes, transactions... + +Proudly brought to you by [@revolunet](http://twitter.com/revolunet) and [@deltaepsilon](https://github.com/deltaepsilon). + +## features + + - configurable + - automatic page tracking + - events tracking + - e-commerce tracking + - enhanced e-commerce tracking + - multiple-domains + - ga.js and and analytics.js support + - cross-domain support + - multiple tracking objects + +## install + +`bower install angular-google-analytics` + +Or alternatively, grab the dist/angular-google-analytics.min.js and include it in your project + +## example + +```js +var app = angular.module('app', ['angular-google-analytics']) + .config(function(AnalyticsProvider) { + // initial configuration + AnalyticsProvider.setAccount('UA-XXXXX-xx'); + // using multiple tracking objects (analytics.js only) + // AnalyticsProvider.setAccount([ + // { tracker: 'UA-12345-12', name: "tracker1" }, + // { tracker: 'UA-12345-34', name: "tracker2" } + // ]); + + // track all routes (or not) + AnalyticsProvider.trackPages(true); + + // track all url query params (default is false) + AnalyticsProvider.trackUrlParams(true); + + // Optional set domain (Use 'none' for testing on localhost) + // AnalyticsProvider.setDomainName('XXX'); + + // Use display features plugin + AnalyticsProvider.useDisplayFeatures(true); + + // url prefix (default is empty) + // - for example: when an app doesn't run in the root directory + AnalyticsProvider.trackPrefix('my-application'); + + // Use analytics.js instead of ga.js + AnalyticsProvider.useAnalytics(true); + + // Use cross domain linking + AnalyticsProvider.useCrossDomainLinker(true); + AnalyticsProvider.setCrossLinkDomains(['domain-1.com', 'domain-2.com']); + + // Ignore first page view... helpful when using hashes and whenever your bounce rate looks obscenely low. + AnalyticsProvider.ignoreFirstPageLoad(true); + + // Enabled eCommerce module for analytics.js(uses legacy ecommerce plugin) + AnalyticsProvider.useECommerce(true, false); + + // Enabled eCommerce module for analytics.js(uses ec plugin instead of ecommerce plugin) + AnalyticsProvider.useECommerce(true, true); + + // Enable enhanced link attribution + AnalyticsProvider.useEnhancedLinkAttribution(true); + + // Enable analytics.js experiments + AnalyticsProvider.setExperimentId('12345'); + + // Set custom cookie parameters for analytics.js + AnalyticsProvider.setCookieConfig({ + cookieDomain: 'foo.example.com', + cookieName: 'myNewName', + cookieExpires: 20000 + }); + + // change page event name + AnalyticsProvider.setPageEvent('$stateChangeSuccess'); + + + // Delay script tage creation + // must manually call Analytics.createScriptTag(cookieConfig) or Analytics.createAnalyticsScriptTag(cookieConfig) + AnalyticsProvider.delayScriptTag(true); + })) + .run(function(Analytics) { + // In case you are relying on automatic page tracking, you need to inject Analytics + // at least once in your application (for example in the main run() block) + }) + .controller('SampleController', function(Analytics) { + // create a new pageview event + Analytics.trackPage('/video/detail/XXX'); + + // or create a new pageview event with optional page title + Analytics.trackPage('/video/detail/XXX', 'Video XXX'); + + // or create a new pageview event with optional page title, custom dimension and metric + // (analytics.js only) + Analytics.trackPage('/video/detail/XXX', 'Video XXX', {dimension15: 'My Custom Dimension', metric18: 8000}); + + // create a new tracking event + Analytics.trackEvent('video', 'play', 'django.mp4'); + + // create a new tracking event with optional value + Analytics.trackEvent('video', 'play', 'django.mp4', 4); + + // create a new tracking event with optional value and noninteraction flag + Analytics.trackEvent('video', 'play', 'django.mp4', 4, true); + + // create a new tracking event with optional value, noninteraction flag, and custom dimension and metric + // (analytics.js only) + Analytics.trackEvent('video', 'play', 'django.mp4', 4, true, {dimension15: 'My Custom Dimension', metric18: 8000}); + + // tracking e-commerce + // - create transaction + Analytics.addTrans('1', '', '2.42', '0.42', '0', 'Amsterdam', '', 'Netherlands', 'EUR'); + + // - add items to transaction + Analytics.addItem('1', 'sku-1', 'Test product 1', 'Testing', '1', '1'); + Analytics.addItem('1', 'sku-2', 'Test product 2', 'Testing', '1', '1'); + + // - complete transaction + Analytics.trackTrans(); + + // Enhanced Ecommerce Tracking + + // Product Impression Tracking + Analytics.addImpression(productId, name, list, brand, category, variant, position, price); + Analytics.pageView(); + // example: + Analytics.addImpression('sku-1', 'Test Product 1', 'Category List', 'Brand 1', 'Category-1', 'variant-1', '1', '24990'); + Analytics.addImpression('sku-2', 'Test Product 2', 'Category List', 'Brand 2', 'Category-1', 'variant-3', '2', '2499'); + Analytics.pageView(); + + // Product Click Tracking + Analytics.addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + Analytics.productClick(listName); + // example: + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.productClick('Search Result'); + + // Product Detail Tracking + Analytics.addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + Analytics.trackDetail(); + // example: + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackDetail(); + + // Add to cart Tracking + Analytics.addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + Analytics.trackCart('add'); + // example: + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackCart('add'); + + // Remove from cart Tracking + Analytics.addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + Analytics.trackCart('remove'); + // example: + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackCart('remove'); + + // Checkout Tracking + Analytics.addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + Analytics.trackCheckout(checkoutStep, optionValue); + // example: + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackCheckout(1, 'Visa'); + + // Transaction Tracking + Analytics.addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + Analytics.trackTransaction(transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option); + // example: + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2222', '1', 'MEN10', '1'); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '1111', '1', 'WOMEN10', '1'); + Analytics.trackTransaction('T1234', 'Online Store - Web', '3333', '10', '200', 'FLAT10', '', '', ''); + + // Promotion Impressions + Analytics.addPromo(productId, name, creative, position); + Analytics.addPromo(productId, name, creative, position); + Analytics.addPromo(productId, name, creative, position); + Analytics.pageView(); + // Note: Before tracking promotion Click, call pageView otherwise promotion impressions will be treated as promotion clicks + // example: + Analytics.addPromo('PROMO_1234', 'Summer Sale', 'summer_banner2', 'banner_slot1'); + Analytics.pageView(); + + // Promotion Clicks + Analytics.addPromo(promotionId, promotionName, creative, position); + Analytics.addPromo(promotionId, promotionName, creative, position); + Analytics.addPromo(promotionId, promotionName, creative, position); + Analytics.promoClick(promotionName); + // example: + Analytics.addPromo('PROMO_1234', 'Summer Sale', 'summer_banner2', 'banner_slot1'); + Analytics.promoClick('Summer Sale'); + + // populate a custom dimension + Analytics.set('dimension1', 'Paid'); + + // Manually create script tag after using delayScriptTag + Analytics.createScriptTag({userId: 1234}); + + // Manually create Analytics script tag after using delayScriptTag + Analytics.createAnalyticsScriptTag({userId: 1234}) + + //Track User Timings + Analytics.trackTimings(timingCategory, timingVar, timingValue, timingLabel) + //example: + var endTime = new Date().getTime(); + var timeSpent = endTime - startTime; + Analytics.trackTimings('Time to Checkout', 'User Timings', timeSpent); + + }); +``` + + + +### directive + +Alternatively you can use a directive to avoid filling controllers with `Analytics.trackEvent()` statements. Note: the directive does not create an isolate scope. + + + + + + + +You can define the properties on your controller too `$scope.event = ['video', 'play', 'django.mp4']` and reference them + + + +## configuration + +```js +// setup your account +AnalyticsProvider.setAccount('UA-XXXXX-xx'); +// automatic route tracking (default=true) +AnalyticsProvider.trackPages(false); +// Optional set domain (Use 'none' for testing on localhost) +AnalyticsProvider.setDomainName('XXX'); +// Use display features plugin +AnalyticsProvider.useDisplayFeatures(true); +// Use analytics.js instead of ga.js +AnalyticsProvider.useAnalytics(true); +// Ignore first page view. +AnalyticsProvider.ignoreFirstPageLoad(true); +// Enable eCommerce module for analytics.js +AnalyticsProvider.useECommerce(true, false); +// Enable enhanced eCommerce module for analytics.js +AnalyticsProvider.useECommerce(true, true); +// Enable enhanced link attribution module for analytics.js or ga.js +AnalyticsProvider.useEnhancedLinkAttribution(true); +// Enable analytics.js experiments +AnalyticsProvider.setExperimentId('12345'); +// Set custom cookie parameters for analytics.js +AnalyticsProvider.setCookieConfig({ + cookieDomain: 'foo.example.com', + cookieName: 'myNewName', + cookieExpires: 20000 +}); +// Change the default page event name. This is useful for ui-router, which fires $stateChangeSuccess instead of $routeChangeSuccess +AnalyticsProvider.setPageEvent('$stateChangeSuccess'); +// Delay script tage creation...must manually call Analytics.createScriptTag() or Analytics.createAnalyticsScriptTag() to enable analytics +AnalyticsProvider.delayScriptTag(true); + +``` + +## AdBlock EasyPrivacy + +AdBlock has a module named [EasyPrivacy](https://easylist-downloads.adblockplus.org/easyprivacy.txt) that is meant to block web tracking scripts. angular-google-analytics.js gets filtered out by the EasyPrivacy blacklist. + +Users who are already concatenating and minifying their scripts should not notice a problem as long as the new script name is not also on the EasyPrivacy blacklist. Alternatively, consider changing the filename manually. + +## Licence +As AngularJS itself, this module is released under the permissive [MIT license](http://revolunet.mit-license.org). Your contributions are always welcome. diff --git a/vendor/assets/components/angular-google-analytics/bower.json b/vendor/assets/components/angular-google-analytics/bower.json new file mode 100644 index 000000000..4e5db03b9 --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/bower.json @@ -0,0 +1,19 @@ +{ + "author": "revolunet", + "name": "angular-google-analytics", + "description": "Easy Analytics for your AngularJS application", + "version": "0.0.13", + "homepage": "https://github.com/revolunet/angular-google-analytics", + "repository": { + "type": "git", + "url": "git://github.com/revolunet/angular-google-analytics.git" + }, + "main": "./dist/angular-google-analytics.min.js", + "dependencies": { + "angular": ">=1" + }, + "devDependencies": { + "angular-mocks": ">=1", + "angular-scenario": ">=1" + } +} diff --git a/vendor/assets/components/angular-google-analytics/dist/angular-google-analytics.js b/vendor/assets/components/angular-google-analytics/dist/angular-google-analytics.js new file mode 100644 index 000000000..14e85087f --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/dist/angular-google-analytics.js @@ -0,0 +1,909 @@ +/** + * Angular Google Analytics - Easy tracking for your AngularJS application + * @version v0.0.13 - 2015-03-26 + * @link http://github.com/revolunet/angular-google-analytics + * @author Julien Bouquillon + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +'use strict'; + +angular.module('angular-google-analytics', []) + .provider('Analytics', function () { + var created = false, + trackRoutes = true, + accountId, + displayFeatures, + trackPrefix = '', + domainName, + analyticsJS = false, + pageEvent = '$routeChangeSuccess', + cookieConfig = 'auto', + ecommerce = false, + enhancedEcommerce = false, + enhancedLinkAttribution = false, + removeRegExp, + experimentId, + ignoreFirstPageLoad = false, + crossDomainLinker = false, + crossLinkDomains, + linkerConfig = {'allowLinker': true}, + trackUrlParams = false, + delayScriptTag = false; + + this._logs = []; + + // config methods + this.setAccount = function (id) { + accountId = id; + return true; + }; + + this.trackPages = function (doTrack) { + trackRoutes = doTrack; + return true; + }; + + this.trackPrefix = function (prefix) { + trackPrefix = prefix; + return true; + }; + + this.setDomainName = function (domain) { + domainName = domain; + return true; + }; + + this.useDisplayFeatures = function (val) { + displayFeatures = !!val; + return true; + }; + + this.useAnalytics = function (val) { + analyticsJS = !!val; + return true; + }; + + this.useEnhancedLinkAttribution = function (val) { + enhancedLinkAttribution = !!val; + return true; + }; + + this.useCrossDomainLinker = function (val) { + crossDomainLinker = !!val; + return true; + }; + + this.setCrossLinkDomains = function (domains) { + crossLinkDomains = domains; + return true; + }; + + this.setPageEvent = function (name) { + pageEvent = name; + return true; + }; + + this.setCookieConfig = function (config) { + cookieConfig = config; + return true; + }; + + this.useECommerce = function (val, enhanced) { + ecommerce = !!val; + enhancedEcommerce = !!enhanced; + return true; + }; + + this.setRemoveRegExp = function (regex) { + if (regex instanceof RegExp) { + removeRegExp = regex; + return true; + } + return false; + }; + + this.setExperimentId = function (id) { + experimentId = id; + return true; + }; + + this.ignoreFirstPageLoad = function (val) { + ignoreFirstPageLoad = !!val; + return true; + }; + + this.trackUrlParams = function (val) { + trackUrlParams = !!val; + return true; + }; + + this.delayScriptTag = function (val) { + delayScriptTag = !!val; + return true; + }; + + /** + * Public Service + */ + this.$get = ['$document', '$location', '$log', '$rootScope', '$window', function ($document, $location, $log, $rootScope, $window) { + var me = this; + + var getUrl = function () { + var url = trackUrlParams ? $location.url() : $location.path(); + return removeRegExp ? url.replace(removeRegExp, '') : url; + }; + + /** + * Private Methods + */ + + function _gaJs(fn) { + if (!analyticsJS && $window._gaq && typeof fn === 'function') { + fn(); + } + } + + function _analyticsJs(fn) { + if (analyticsJS && $window.ga && typeof fn === 'function') { + fn(); + } + } + + function _generateCommandName(commandName, config) { + if (!angular.isUndefined(config) && 'name' in config && config.name) { + return config.name + '.' + commandName; + } else { + return commandName; + } + } + + function _checkOption(key, config) { + return key in config && config[key]; + } + + this._log = function () { + if (arguments.length > 0) { + if (arguments.length > 1 && arguments[0] === 'warn') { + $log.warn(Array.prototype.slice.call(arguments, 1)); + } + // console.log('analytics', arguments); + this._logs.push(arguments); + } + }; + + this._createScriptTag = function () { + if (!accountId) { + me._log('warn', 'No account id set to create script tag'); + return; + } + + if (created) { + me._log('warn', 'Script tag already created'); + return; + } + + // inject the google analytics tag + $window._gaq = []; + $window._gaq.push(['_setAccount', accountId]); + if(domainName) { + $window._gaq.push(['_setDomainName', domainName]); + } + if (enhancedLinkAttribution) { + $window._gaq.push(['_require', 'inpage_linkid', '//www.google-analytics.com/plugins/ga/inpage_linkid.js']); + } + if (trackRoutes && !ignoreFirstPageLoad) { + if (removeRegExp) { + $window._gaq.push(['_trackPageview', getUrl()]); + } else { + $window._gaq.push(['_trackPageview']); + } + } + var gaSrc; + if (displayFeatures) { + gaSrc = ('https:' === document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'; + } else { + gaSrc = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + } + (function () { + var document = $document[0]; + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = gaSrc; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(gaSrc); + + return created = true; + }; + + this._createAnalyticsScriptTag = function () { + if (!accountId) { + me._log('warn', 'No account id set to create analytics script tag'); + return; + } + + if (created) { + me._log('warn', 'Analytics script tag already created'); + return; + } + + // inject the google analytics tag + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments);},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m); + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + + if (angular.isArray(accountId)) { + accountId.forEach(function (trackerObj) { + var _cookieConfig = 'cookieConfig' in trackerObj ? trackerObj.cookieConfig : cookieConfig; + var options; + if (_checkOption('crossDomainLinker', trackerObj)) { + trackerObj.allowLinker = trackerObj.crossDomainLinker; + } + angular.forEach(['name', 'allowLinker'], function(key) { + if (key in trackerObj) { + if (angular.isUndefined(options)) { + options = {}; + } + options[key] = trackerObj[key]; + } + }); + if (angular.isUndefined(options)) { + $window.ga('create', trackerObj.tracker, _cookieConfig); + } else { + $window.ga('create', trackerObj.tracker, _cookieConfig, options); + } + if (options && 'allowLinker' in options && options.allowLinker) { + $window.ga(_generateCommandName('require', trackerObj), 'linker'); + if (_checkOption('crossLinkDomains', trackerObj)) { + $window.ga(_generateCommandName('linker:autoLink', trackerObj), trackerObj.crossLinkDomains); + } + } + }); + } else if (crossDomainLinker) { + $window.ga('create', accountId, cookieConfig, linkerConfig); + $window.ga('require', 'linker'); + if(crossLinkDomains) { + $window.ga('linker:autoLink', crossLinkDomains ); + } + } else { + $window.ga('create', accountId, cookieConfig); + } + + if (displayFeatures) { + $window.ga('require', 'displayfeatures'); + } + + if (trackRoutes && !ignoreFirstPageLoad) { + $window.ga('send', 'pageview', getUrl()); + } + + if ($window.ga) { + if (ecommerce) { + if (!enhancedEcommerce) { + $window.ga('require', 'ecommerce', 'ecommerce.js'); + } else { + $window.ga('require', 'ec', 'ec.js'); + } + } + if (enhancedLinkAttribution) { + $window.ga('require', 'linkid', 'linkid.js'); + } + if (experimentId) { + var expScript = document.createElement('script'), + s = document.getElementsByTagName('script')[0]; + expScript.src = "//www.google-analytics.com/cx/api.js?experiment=" + experimentId; + s.parentNode.insertBefore(expScript, s); + } + } + + return created = true; + }; + + this._ecommerceEnabled = function () { + if (!ecommerce) { + this._log('warn', 'ecommerce not set. Use AnalyticsProvider.setECommerce(true, false);'); + return false; + } else if (enhancedEcommerce) { + this._log('warn', 'Enhanced ecommerce plugin is enabled. Only one plugin(ecommerce/ec) can be used at a time. ' + + 'Use AnalyticsProvider.setECommerce(true, false);'); + return false; + } + return true; + }; + + this._enhancedEcommerceEnabled = function () { + if (!ecommerce) { + this._log('warn', 'ecommerce not set. Use AnalyticsProvider.setECommerce(true, true);'); + return false; + } else if (!enhancedEcommerce) { + this._log('warn', 'Enhanced ecommerce plugin is disabled. Use AnalyticsProvider.setECommerce(true, true);'); + return false; + } + return true; + }; + + /** + * Track page + https://developers.google.com/analytics/devguides/collection/gajs/ + https://developers.google.com/analytics/devguides/collection/analyticsjs/pages + * @param url + * @param title + * @param custom + * @private + */ + this._trackPage = function (url, title, custom) { + var that = this, args = arguments; + url = url ? url : getUrl(); + title = title ? title : $document[0].title; + _gaJs(function () { + // http://stackoverflow.com/questions/7322288/how-can-i-set-a-page-title-with-google-analytics + $window._gaq.push(["_set", "title", title]); + $window._gaq.push(['_trackPageview', trackPrefix + url]); + that._log('_trackPageview', url, title, args); + }); + _analyticsJs(function () { + var opt_fieldObject = { + 'page': trackPrefix + url, + 'title': title + }; + if (angular.isObject(custom)) { + angular.extend(opt_fieldObject, custom); + } + if (angular.isArray(accountId)) { + accountId.forEach(function (trackerObj) { + $window.ga(_generateCommandName('send', trackerObj), 'pageview', opt_fieldObject); + }); + } else { + $window.ga('send', 'pageview', opt_fieldObject); + } + that._log('pageview', url, title, args); + }); + }; + + /** + * Track event + https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide + https://developers.google.com/analytics/devguides/collection/analyticsjs/events + * @param category + * @param action + * @param label + * @param value + * @param noninteraction + * @param custom + * @private + */ + this._trackEvent = function (category, action, label, value, noninteraction, custom) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_trackEvent', category, action, label, value, !!noninteraction]); + that._log('trackEvent', args); + }); + _analyticsJs(function () { + var opt_fieldObject = {}; + if (angular.isDefined(noninteraction)) { + opt_fieldObject['nonInteraction'] = !!noninteraction; + } + if (angular.isObject(custom)) { + angular.extend(opt_fieldObject, custom); + } + if (angular.isArray(accountId)) { + accountId.forEach(function (trackerObj) { + if (_checkOption('trackEvent', trackerObj)) { + $window.ga(_generateCommandName('send', trackerObj), 'event', category, action, label, value, opt_fieldObject); + } + }); + } else { + $window.ga('send', 'event', category, action, label, value, opt_fieldObject); + } + that._log('event', args); + }); + }; + + /** + * Add transaction + * https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce#_gat.GA_Tracker_._addTrans + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#addTrans + * @param transactionId + * @param affiliation + * @param total + * @param tax + * @param shipping + * @param city + * @param state + * @param country + * @private + */ + this._addTrans = function (transactionId, affiliation, total, tax, shipping, city, state, country, currency) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addTrans', transactionId, affiliation, total, tax, shipping, city, state, country]); + that._log('_addTrans', args); + }); + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:addTransaction', { + id: transactionId, + affiliation: affiliation, + revenue: total, + tax: tax, + shipping: shipping, + currency: currency || 'USD' + }); + that._log('ecommerce:addTransaction', args); + } + }); + }; + + /** + * Add item to transaction + * https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce#_gat.GA_Tracker_._addItem + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#addItem + * @param transactionId + * @param sku + * @param name + * @param category + * @param price + * @param quantity + * @private + */ + this._addItem = function (transactionId, sku, name, category, price, quantity) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addItem', transactionId, sku, name, category, price, quantity]); + that._log('_addItem', args); + }); + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:addItem', { + id: transactionId, + name: name, + sku: sku, + category: category, + price: price, + quantity: quantity + }); + that._log('ecommerce:addItem', args); + } + }); + }; + + /** + * Track transaction + * https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce#_gat.GA_Tracker_._trackTrans + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#sendingData + * @private + */ + this._trackTrans = function () { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_trackTrans']); + that._log('_trackTrans', args); + }); + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:send'); + that._log('ecommerce:send', args); + } + }); + }; + + /** + * Clear transaction + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#clearingData + * @private + */ + this._clearTrans = function () { + var that = this, args = arguments; + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:clear'); + that._log('ecommerce:clear', args); + } + }); + }; + + /** + * Enhanced Ecommerce + */ + + /** + * Add product data + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#product-data + * @param productId + * @param name + * @param category + * @param brand + * @param variant + * @param price + * @param quantity + * @param coupon + * @param position + */ + this._addProduct = function (productId, name, category, brand, variant, price, quantity, coupon, position) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addProduct', productId, name, category, brand, variant, price, quantity, coupon, position]); + that._log('_addProduct', args); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:addProduct', { + id: productId, + name: name, + category: category, + brand: brand, + variant: variant, + price: price, + quantity: quantity, + coupon: coupon, + position: position + }); + that._log('ec:addProduct', args); + } + }); + }; + + /** + * Add Impression data + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#impression-data + * @param id + * @param name + * @param list + * @param brand + * @param category + * @param variant + * @param position + * @param price + */ + this._addImpression = function (id, name, list, brand, category, variant, position, price){ + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addImpression', id, name, list, brand, category, variant, position, price]); + that._log('_addImpression', args); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:addImpression', { + id: id, + name: name, + category: category, + brand: brand, + variant: variant, + list: list, + position: position, + price: price + }); + } + that._log('ec:addImpression', args); + }); + }; + + /** + * Add promo data + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce + * @param productId + * @param name + * @param creative + * @param position + */ + this._addPromo = function (productId, name, creative, position) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addPromo', productId, name, creative, position]); + that._log('_addPromo', arguments); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:addPromo', { + id: productId, + name: name, + creative: creative, + position: position + }); + that._log('ec:addPromo', args); + } + }); + }; + + /** + * get ActionFieldObject + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#action-data + * @param id + * @param affliation + * @param revenue + * @param tax + * @param shipping + * @param coupon + * @param list + * @param step + * @param option + */ + this._getActionFieldObject = function (id, affiliation, revenue, tax, shipping, coupon, list, step, option) { + var obj = {}; + if (id) { obj.id = id; } + if (affiliation) { obj.affiliation = affiliation; } + if (revenue) { obj.revenue = revenue; } + if (tax) { obj.tax = tax; } + if (shipping) { obj.shipping = shipping; } + if (coupon) { obj.coupon = coupon; } + if (list) { obj.list = list; } + if (step) { obj.step = step; } + if (option) { obj.option = option; } + return obj; + }; + + /** + * Set Action being performed + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-actions + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#action-types + * @param action + * @param name + * @param obj + */ + this._setAction = function (action, obj){ + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_setAction', action, obj]); + that._log('__setAction', args); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:setAction', action, obj); + that._log('ec:setAction', args); + } + }); + }; + + /** + * Track Transaction + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-transactions + * @param transactionId + * @param affiliation + * @param revenue + * @param tax + * @param shipping + * @param coupon + * @param list + * @param step + * @param option + */ + this._trackTransaction = function (transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option) { + this._setAction('purchase', this._getActionFieldObject(transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option)); + this._pageView(); + }; + + /** + * Track Refund + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-refunds + * @param transactionId + * + */ + this._trackRefund = function (transactionId) { + this._setAction('refund', this._getActionFieldObject(transactionId)); + this._pageView(); + }; + + /** + * Track Checkout + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-checkout + * @param step + * @param option + * + */ + this._trackCheckOut = function (step, option) { + this._setAction('checkout', this._getActionFieldObject(null, null, null, null, null, null, null, step, option)); + this._pageView(); + }; + + /** + * Track add/remove to cart + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#add-remove-cart + * @param action + * + */ + this._trackCart = function (action) { + if (['add', 'remove'].indexOf(action) !== -1) { + this._setAction(action); + this._send('event', 'UX', 'click', action + ' to cart'); + } + }; + + /** + * Track promo click + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-promo-clicks + * @param promotionName + * + */ + this._promoClick = function (promotionName) { + this._setAction('promo_click'); + this._send('event', 'Internal Promotions', 'click', promotionName); + }; + + /** + * Track product click + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-promo-clicks + * @param promotionName + * + */ + this._productClick = function (listName) { + this._setAction('click', this._getActionFieldObject(null, null, null, null, null, null, listName, null, null)); + this._send('event', 'UX', 'click', listName); + }; + + /** + * Send custom events + * https://developers.google.com/analytics/devguides/collection/analyticsjs/user-timings#implementation + * https://developers.google.com/analytics/devguides/collection/analyticsjs/social-interactions#implementation + * + * @param obj + * @private + */ + this._send = function () { + var that = this; + var args = Array.prototype.slice.call(arguments); + args.unshift('send'); + _analyticsJs(function () { + $window.ga.apply(this, args); + that._log(args); + }); + }; + + this._pageView = function() { + this._send('pageview'); + }; + + /** + * Set custom dimensions, metrics or experiment + * https://developers.google.com/analytics/devguides/collection/analyticsjs/custom-dims-mets + * https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#customs + * @param name + * @param value + * @private + */ + this._set = function (name, value) { + var that = this; + _analyticsJs(function () { + $window.ga('set', name, value); + that._log('set', name, value); + }); + }; + + + // creates the ganalytics tracker + if (!delayScriptTag) { + if (analyticsJS) { + this._createAnalyticsScriptTag(); + } else { + this._createScriptTag(); + } + } + + // activates page tracking + if (trackRoutes) { + $rootScope.$on(pageEvent, function () { + me._trackPage(); + }); + } + + /** + * Track User Timings + * @timingCategory (Required): A string for categorizing all user timing variables into logical groups(e.g jQuery). + * @timingVar (Required): A string to identify the variable being recorded(e.g. JavaScript Load). + * @timingValue (Required): The number of milliseconds in elapsed time to report to Google Analytics(e.g. 20). + * @timingLabel (Not Required): A string that can be used to add flexibility in visualizing user timings in the reports(e.g. Google CDN). + */ + this._trackTimings = function (timingCategory, timingVar, timingValue, timingLabel) { + this._send('timing', timingCategory, timingVar, timingValue, timingLabel); + }; + + return { + _logs: me._logs, + displayFeatures: displayFeatures, + ecommerce: ecommerce, + enhancedEcommerce: enhancedEcommerce, + enhancedLinkAttribution: enhancedLinkAttribution, + getUrl: getUrl, + experimentId: experimentId, + ignoreFirstPageLoad: ignoreFirstPageLoad, + delayScriptTag: delayScriptTag, + setCookieConfig: me._setCookieConfig, + getCookieConfig: function () { + return cookieConfig; + }, + createAnalyticsScriptTag: function (config) { + if (config) { + cookieConfig = config; + } + + return me._createAnalyticsScriptTag(); + }, + createScriptTag: function (config) { + if (config) { + cookieConfig = config; + } + + return me._createScriptTag(); + }, + ecommerceEnabled: function () { + return me._ecommerceEnabled(); + }, + enhancedEcommerceEnabled: function () { + return me._enhancedEcommerceEnabled(); + }, + trackPage: function (url, title, custom) { + me._trackPage(url, title, custom); + }, + trackEvent: function (category, action, label, value, noninteraction, custom) { + me._trackEvent(category, action, label, value, noninteraction, custom); + }, + addTrans: function (transactionId, affiliation, total, tax, shipping, city, state, country, currency) { + me._addTrans(transactionId, affiliation, total, tax, shipping, city, state, country, currency); + }, + addItem: function (transactionId, sku, name, category, price, quantity) { + me._addItem(transactionId, sku, name, category, price, quantity); + }, + trackTrans: function () { + me._trackTrans(); + }, + clearTrans: function () { + me._clearTrans(); + }, + addProduct: function (productId, name, category, brand, variant, price, quantity, coupon, position) { + me._addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + }, + addPromo: function (productId, name, creative, position) { + me._addPromo(productId, name, creative, position); + }, + addImpression: function (productId, name, list, brand, category, variant, position, price) { + me._addImpression(productId, name, list, brand, category, variant, position, price); + }, + productClick: function (listName) { + me._productClick(listName); + }, + promoClick : function (promotionName) { + me._promoClick(promotionName); + }, + trackDetail: function () { + me._setAction('detail'); + me._pageView(); + }, + trackCart: function (action) { + me._trackCart(action); + }, + trackCheckout: function (step, option) { + me._trackCheckOut(step, option); + }, + trackTimings: function (timingCategory, timingVar, timingValue, timingLabel) { + me._trackTimings(timingCategory, timingVar, timingValue, timingLabel); + }, + trackTransaction: function (transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option){ + me._trackTransaction(transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option); + }, + setAction: function (action, obj) { + me._setAction(action, obj); + }, + send: function (obj) { + me._send(obj); + }, + pageView: function () { + me._pageView(); + }, + set: function (name, value) { + me._set(name, value); + } + }; + }]; + }) + + .directive('gaTrackEvent', ['Analytics', '$parse', function (Analytics, $parse) { + return { + restrict: 'A', + link: function (scope, element, attrs) { + var options = $parse(attrs.gaTrackEvent)(scope); + element.bind('click', function () { + if (options.length > 1) { + Analytics.trackEvent.apply(Analytics, options); + } + }); + } + }; + }]); diff --git a/vendor/assets/components/angular-google-analytics/dist/angular-google-analytics.min.js b/vendor/assets/components/angular-google-analytics/dist/angular-google-analytics.min.js new file mode 100644 index 000000000..d74fbddda --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/dist/angular-google-analytics.min.js @@ -0,0 +1,8 @@ +/** + * Angular Google Analytics - Easy tracking for your AngularJS application + * @version v0.0.13 - 2015-03-26 + * @link http://github.com/revolunet/angular-google-analytics + * @author Julien Bouquillon + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +"use strict";angular.module("angular-google-analytics",[]).provider("Analytics",function(){var e,t,n,i,a,c,r=!1,o=!0,s="",u=!1,l="$routeChangeSuccess",g="auto",d=!1,m=!1,_=!1,f=!1,h=!1,p={allowLinker:!0},k=!1,v=!1;this._logs=[],this.setAccount=function(t){return e=t,!0},this.trackPages=function(e){return o=e,!0},this.trackPrefix=function(e){return s=e,!0},this.setDomainName=function(e){return n=e,!0},this.useDisplayFeatures=function(e){return t=!!e,!0},this.useAnalytics=function(e){return u=!!e,!0},this.useEnhancedLinkAttribution=function(e){return _=!!e,!0},this.useCrossDomainLinker=function(e){return h=!!e,!0},this.setCrossLinkDomains=function(e){return c=e,!0},this.setPageEvent=function(e){return l=e,!0},this.setCookieConfig=function(e){return g=e,!0},this.useECommerce=function(e,t){return d=!!e,m=!!t,!0},this.setRemoveRegExp=function(e){return e instanceof RegExp?(i=e,!0):!1},this.setExperimentId=function(e){return a=e,!0},this.ignoreFirstPageLoad=function(e){return f=!!e,!0},this.trackUrlParams=function(e){return k=!!e,!0},this.delayScriptTag=function(e){return v=!!e,!0},this.$get=["$document","$location","$log","$rootScope","$window",function(E,y,w,A,T){function P(e){!u&&T._gaq&&"function"==typeof e&&e()}function b(e){u&&T.ga&&"function"==typeof e&&e()}function C(e,t){return!angular.isUndefined(t)&&"name"in t&&t.name?t.name+"."+e:e}function q(e,t){return e in t&&t[e]}var I=this,j=function(){var e=k?y.url():y.path();return i?e.replace(i,""):e};return this._log=function(){arguments.length>0&&(arguments.length>1&&"warn"===arguments[0]&&w.warn(Array.prototype.slice.call(arguments,1)),this._logs.push(arguments))},this._createScriptTag=function(){if(!e)return I._log("warn","No account id set to create script tag"),void 0;if(r)return I._log("warn","Script tag already created"),void 0;T._gaq=[],T._gaq.push(["_setAccount",e]),n&&T._gaq.push(["_setDomainName",n]),_&&T._gaq.push(["_require","inpage_linkid","//www.google-analytics.com/plugins/ga/inpage_linkid.js"]),o&&!f&&(i?T._gaq.push(["_trackPageview",j()]):T._gaq.push(["_trackPageview"]));var a;return a=t?("https:"===document.location.protocol?"https://":"http://")+"stats.g.doubleclick.net/dc.js":("https:"===document.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js",function(){var e=E[0],t=e.createElement("script");t.type="text/javascript",t.async=!0,t.src=a;var n=e.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n)}(a),r=!0},this._createAnalyticsScriptTag=function(){if(!e)return I._log("warn","No account id set to create analytics script tag"),void 0;if(r)return I._log("warn","Analytics script tag already created"),void 0;if(function(e,t,n,i,a,c,r){e.GoogleAnalyticsObject=a,e[a]=e[a]||function(){(e[a].q=e[a].q||[]).push(arguments)},e[a].l=1*new Date,c=t.createElement(n),r=t.getElementsByTagName(n)[0],c.async=1,c.src=i,r.parentNode.insertBefore(c,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),angular.isArray(e)?e.forEach(function(e){var t,n="cookieConfig"in e?e.cookieConfig:g;q("crossDomainLinker",e)&&(e.allowLinker=e.crossDomainLinker),angular.forEach(["name","allowLinker"],function(n){n in e&&(angular.isUndefined(t)&&(t={}),t[n]=e[n])}),angular.isUndefined(t)?T.ga("create",e.tracker,n):T.ga("create",e.tracker,n,t),t&&"allowLinker"in t&&t.allowLinker&&(T.ga(C("require",e),"linker"),q("crossLinkDomains",e)&&T.ga(C("linker:autoLink",e),e.crossLinkDomains))}):h?(T.ga("create",e,g,p),T.ga("require","linker"),c&&T.ga("linker:autoLink",c)):T.ga("create",e,g),t&&T.ga("require","displayfeatures"),o&&!f&&T.ga("send","pageview",j()),T.ga&&(d&&(m?T.ga("require","ec","ec.js"):T.ga("require","ecommerce","ecommerce.js")),_&&T.ga("require","linkid","linkid.js"),a)){var n=document.createElement("script"),i=document.getElementsByTagName("script")[0];n.src="//www.google-analytics.com/cx/api.js?experiment="+a,i.parentNode.insertBefore(n,i)}return r=!0},this._ecommerceEnabled=function(){return d?m?(this._log("warn","Enhanced ecommerce plugin is enabled. Only one plugin(ecommerce/ec) can be used at a time. Use AnalyticsProvider.setECommerce(true, false);"),!1):!0:(this._log("warn","ecommerce not set. Use AnalyticsProvider.setECommerce(true, false);"),!1)},this._enhancedEcommerceEnabled=function(){return d?m?!0:(this._log("warn","Enhanced ecommerce plugin is disabled. Use AnalyticsProvider.setECommerce(true, true);"),!1):(this._log("warn","ecommerce not set. Use AnalyticsProvider.setECommerce(true, true);"),!1)},this._trackPage=function(t,n,i){var a=this,c=arguments;t=t?t:j(),n=n?n:E[0].title,P(function(){T._gaq.push(["_set","title",n]),T._gaq.push(["_trackPageview",s+t]),a._log("_trackPageview",t,n,c)}),b(function(){var r={page:s+t,title:n};angular.isObject(i)&&angular.extend(r,i),angular.isArray(e)?e.forEach(function(e){T.ga(C("send",e),"pageview",r)}):T.ga("send","pageview",r),a._log("pageview",t,n,c)})},this._trackEvent=function(t,n,i,a,c,r){var o=this,s=arguments;P(function(){T._gaq.push(["_trackEvent",t,n,i,a,!!c]),o._log("trackEvent",s)}),b(function(){var u={};angular.isDefined(c)&&(u.nonInteraction=!!c),angular.isObject(r)&&angular.extend(u,r),angular.isArray(e)?e.forEach(function(e){q("trackEvent",e)&&T.ga(C("send",e),"event",t,n,i,a,u)}):T.ga("send","event",t,n,i,a,u),o._log("event",s)})},this._addTrans=function(e,t,n,i,a,c,r,o,s){var u=this,l=arguments;P(function(){T._gaq.push(["_addTrans",e,t,n,i,a,c,r,o]),u._log("_addTrans",l)}),b(function(){u._ecommerceEnabled()&&(T.ga("ecommerce:addTransaction",{id:e,affiliation:t,revenue:n,tax:i,shipping:a,currency:s||"USD"}),u._log("ecommerce:addTransaction",l))})},this._addItem=function(e,t,n,i,a,c){var r=this,o=arguments;P(function(){T._gaq.push(["_addItem",e,t,n,i,a,c]),r._log("_addItem",o)}),b(function(){r._ecommerceEnabled()&&(T.ga("ecommerce:addItem",{id:e,name:n,sku:t,category:i,price:a,quantity:c}),r._log("ecommerce:addItem",o))})},this._trackTrans=function(){var e=this,t=arguments;P(function(){T._gaq.push(["_trackTrans"]),e._log("_trackTrans",t)}),b(function(){e._ecommerceEnabled()&&(T.ga("ecommerce:send"),e._log("ecommerce:send",t))})},this._clearTrans=function(){var e=this,t=arguments;b(function(){e._ecommerceEnabled()&&(T.ga("ecommerce:clear"),e._log("ecommerce:clear",t))})},this._addProduct=function(e,t,n,i,a,c,r,o,s){var u=this,l=arguments;P(function(){T._gaq.push(["_addProduct",e,t,n,i,a,c,r,o,s]),u._log("_addProduct",l)}),b(function(){u._enhancedEcommerceEnabled()&&(T.ga("ec:addProduct",{id:e,name:t,category:n,brand:i,variant:a,price:c,quantity:r,coupon:o,position:s}),u._log("ec:addProduct",l))})},this._addImpression=function(e,t,n,i,a,c,r,o){var s=this,u=arguments;P(function(){T._gaq.push(["_addImpression",e,t,n,i,a,c,r,o]),s._log("_addImpression",u)}),b(function(){s._enhancedEcommerceEnabled()&&T.ga("ec:addImpression",{id:e,name:t,category:a,brand:i,variant:c,list:n,position:r,price:o}),s._log("ec:addImpression",u)})},this._addPromo=function(e,t,n,i){var a=this,c=arguments;P(function(){T._gaq.push(["_addPromo",e,t,n,i]),a._log("_addPromo",arguments)}),b(function(){a._enhancedEcommerceEnabled()&&(T.ga("ec:addPromo",{id:e,name:t,creative:n,position:i}),a._log("ec:addPromo",c))})},this._getActionFieldObject=function(e,t,n,i,a,c,r,o,s){var u={};return e&&(u.id=e),t&&(u.affiliation=t),n&&(u.revenue=n),i&&(u.tax=i),a&&(u.shipping=a),c&&(u.coupon=c),r&&(u.list=r),o&&(u.step=o),s&&(u.option=s),u},this._setAction=function(e,t){var n=this,i=arguments;P(function(){T._gaq.push(["_setAction",e,t]),n._log("__setAction",i)}),b(function(){n._enhancedEcommerceEnabled()&&(T.ga("ec:setAction",e,t),n._log("ec:setAction",i))})},this._trackTransaction=function(e,t,n,i,a,c,r,o,s){this._setAction("purchase",this._getActionFieldObject(e,t,n,i,a,c,r,o,s)),this._pageView()},this._trackRefund=function(e){this._setAction("refund",this._getActionFieldObject(e)),this._pageView()},this._trackCheckOut=function(e,t){this._setAction("checkout",this._getActionFieldObject(null,null,null,null,null,null,null,e,t)),this._pageView()},this._trackCart=function(e){-1!==["add","remove"].indexOf(e)&&(this._setAction(e),this._send("event","UX","click",e+" to cart"))},this._promoClick=function(e){this._setAction("promo_click"),this._send("event","Internal Promotions","click",e)},this._productClick=function(e){this._setAction("click",this._getActionFieldObject(null,null,null,null,null,null,e,null,null)),this._send("event","UX","click",e)},this._send=function(){var e=this,t=Array.prototype.slice.call(arguments);t.unshift("send"),b(function(){T.ga.apply(this,t),e._log(t)})},this._pageView=function(){this._send("pageview")},this._set=function(e,t){var n=this;b(function(){T.ga("set",e,t),n._log("set",e,t)})},v||(u?this._createAnalyticsScriptTag():this._createScriptTag()),o&&A.$on(l,function(){I._trackPage()}),this._trackTimings=function(e,t,n,i){this._send("timing",e,t,n,i)},{_logs:I._logs,displayFeatures:t,ecommerce:d,enhancedEcommerce:m,enhancedLinkAttribution:_,getUrl:j,experimentId:a,ignoreFirstPageLoad:f,delayScriptTag:v,setCookieConfig:I._setCookieConfig,getCookieConfig:function(){return g},createAnalyticsScriptTag:function(e){return e&&(g=e),I._createAnalyticsScriptTag()},createScriptTag:function(e){return e&&(g=e),I._createScriptTag()},ecommerceEnabled:function(){return I._ecommerceEnabled()},enhancedEcommerceEnabled:function(){return I._enhancedEcommerceEnabled()},trackPage:function(e,t,n){I._trackPage(e,t,n)},trackEvent:function(e,t,n,i,a,c){I._trackEvent(e,t,n,i,a,c)},addTrans:function(e,t,n,i,a,c,r,o,s){I._addTrans(e,t,n,i,a,c,r,o,s)},addItem:function(e,t,n,i,a,c){I._addItem(e,t,n,i,a,c)},trackTrans:function(){I._trackTrans()},clearTrans:function(){I._clearTrans()},addProduct:function(e,t,n,i,a,c,r,o,s){I._addProduct(e,t,n,i,a,c,r,o,s)},addPromo:function(e,t,n,i){I._addPromo(e,t,n,i)},addImpression:function(e,t,n,i,a,c,r,o){I._addImpression(e,t,n,i,a,c,r,o)},productClick:function(e){I._productClick(e)},promoClick:function(e){I._promoClick(e)},trackDetail:function(){I._setAction("detail"),I._pageView()},trackCart:function(e){I._trackCart(e)},trackCheckout:function(e,t){I._trackCheckOut(e,t)},trackTimings:function(e,t,n,i){I._trackTimings(e,t,n,i)},trackTransaction:function(e,t,n,i,a,c,r,o,s){I._trackTransaction(e,t,n,i,a,c,r,o,s)},setAction:function(e,t){I._setAction(e,t)},send:function(e){I._send(e)},pageView:function(){I._pageView()},set:function(e,t){I._set(e,t)}}}]}).directive("gaTrackEvent",["Analytics","$parse",function(e,t){return{restrict:"A",link:function(n,i,a){var c=t(a.gaTrackEvent)(n);i.bind("click",function(){c.length>1&&e.trackEvent.apply(e,c)})}}}]); \ No newline at end of file diff --git a/vendor/assets/components/angular-google-analytics/index.html b/vendor/assets/components/angular-google-analytics/index.html new file mode 100644 index 000000000..0b0f5d9ff --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/index.html @@ -0,0 +1,46 @@ + + + + + + + + + + Fork me on GitHub +

      AngularJS google analytics

      +
      A simple service to use google analytics tracker in your AngularJS apps.
      + +

      + Here's an example usage : +

      + + + + + diff --git a/vendor/assets/components/angular-google-analytics/package.json b/vendor/assets/components/angular-google-analytics/package.json new file mode 100644 index 000000000..76dcfdb40 --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/package.json @@ -0,0 +1,38 @@ +{ + "name": "angular-google-analytics", + "description": "Angular Google Analytics - Easy tracking for your AngularJS application", + "version": "0.0.13", + "homepage": "http://github.com/revolunet/angular-google-analytics", + "author": "Julien Bouquillon ", + "main": "./src/angular-google-analytics.js", + "repository": { + "type": "git", + "url": "git://github.com/revolunet/angular-google-analytics.git" + }, + "engines": { + "node": ">= 0.8" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://revolunet.mit-license.org" + } + ], + "dependencies": {}, + "devDependencies": { + "bower": "*", + "karma": "~0.8.0", + "grunt": ">=0.4.0", + "grunt-contrib-concat": "*", + "grunt-contrib-jshint": "*", + "grunt-contrib-uglify": "*", + "grunt-release": "~0.3.3", + "grunt-conventional-changelog": "0.0.12" + }, + "scripts": { + "postinstall": "node ./node_modules/bower/bin/bower install", + "postupdate": "node ./node_modules/bower/bin/bower update", + "test": "karma start test/karma.conf.js --single-run --browsers Chrome", + "test-server": "karma start test/karma.conf.js --browsers Chrome" + } +} diff --git a/vendor/assets/components/angular-google-analytics/src/angular-google-analytics.js b/vendor/assets/components/angular-google-analytics/src/angular-google-analytics.js new file mode 100644 index 000000000..70ebf0a3d --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/src/angular-google-analytics.js @@ -0,0 +1,902 @@ +'use strict'; + +angular.module('angular-google-analytics', []) + .provider('Analytics', function () { + var created = false, + trackRoutes = true, + accountId, + displayFeatures, + trackPrefix = '', + domainName, + analyticsJS = false, + pageEvent = '$routeChangeSuccess', + cookieConfig = 'auto', + ecommerce = false, + enhancedEcommerce = false, + enhancedLinkAttribution = false, + removeRegExp, + experimentId, + ignoreFirstPageLoad = false, + crossDomainLinker = false, + crossLinkDomains, + linkerConfig = {'allowLinker': true}, + trackUrlParams = false, + delayScriptTag = false; + + this._logs = []; + + // config methods + this.setAccount = function (id) { + accountId = id; + return true; + }; + + this.trackPages = function (doTrack) { + trackRoutes = doTrack; + return true; + }; + + this.trackPrefix = function (prefix) { + trackPrefix = prefix; + return true; + }; + + this.setDomainName = function (domain) { + domainName = domain; + return true; + }; + + this.useDisplayFeatures = function (val) { + displayFeatures = !!val; + return true; + }; + + this.useAnalytics = function (val) { + analyticsJS = !!val; + return true; + }; + + this.useEnhancedLinkAttribution = function (val) { + enhancedLinkAttribution = !!val; + return true; + }; + + this.useCrossDomainLinker = function (val) { + crossDomainLinker = !!val; + return true; + }; + + this.setCrossLinkDomains = function (domains) { + crossLinkDomains = domains; + return true; + }; + + this.setPageEvent = function (name) { + pageEvent = name; + return true; + }; + + this.setCookieConfig = function (config) { + cookieConfig = config; + return true; + }; + + this.useECommerce = function (val, enhanced) { + ecommerce = !!val; + enhancedEcommerce = !!enhanced; + return true; + }; + + this.setRemoveRegExp = function (regex) { + if (regex instanceof RegExp) { + removeRegExp = regex; + return true; + } + return false; + }; + + this.setExperimentId = function (id) { + experimentId = id; + return true; + }; + + this.ignoreFirstPageLoad = function (val) { + ignoreFirstPageLoad = !!val; + return true; + }; + + this.trackUrlParams = function (val) { + trackUrlParams = !!val; + return true; + }; + + this.delayScriptTag = function (val) { + delayScriptTag = !!val; + return true; + }; + + /** + * Public Service + */ + this.$get = ['$document', '$location', '$log', '$rootScope', '$window', function ($document, $location, $log, $rootScope, $window) { + var me = this; + + var getUrl = function () { + var url = trackUrlParams ? $location.url() : $location.path(); + return removeRegExp ? url.replace(removeRegExp, '') : url; + }; + + /** + * Private Methods + */ + + function _gaJs(fn) { + if (!analyticsJS && $window._gaq && typeof fn === 'function') { + fn(); + } + } + + function _analyticsJs(fn) { + if (analyticsJS && $window.ga && typeof fn === 'function') { + fn(); + } + } + + function _generateCommandName(commandName, config) { + if (!angular.isUndefined(config) && 'name' in config && config.name) { + return config.name + '.' + commandName; + } else { + return commandName; + } + } + + function _checkOption(key, config) { + return key in config && config[key]; + } + + this._log = function () { + if (arguments.length > 0) { + if (arguments.length > 1 && arguments[0] === 'warn') { + $log.warn(Array.prototype.slice.call(arguments, 1)); + } + // console.log('analytics', arguments); + this._logs.push(arguments); + } + }; + + this._createScriptTag = function () { + if (!accountId) { + me._log('warn', 'No account id set to create script tag'); + return; + } + + if (created) { + me._log('warn', 'Script tag already created'); + return; + } + + // inject the google analytics tag + $window._gaq = []; + $window._gaq.push(['_setAccount', accountId]); + if(domainName) { + $window._gaq.push(['_setDomainName', domainName]); + } + if (enhancedLinkAttribution) { + $window._gaq.push(['_require', 'inpage_linkid', '//www.google-analytics.com/plugins/ga/inpage_linkid.js']); + } + if (trackRoutes && !ignoreFirstPageLoad) { + if (removeRegExp) { + $window._gaq.push(['_trackPageview', getUrl()]); + } else { + $window._gaq.push(['_trackPageview']); + } + } + var gaSrc; + if (displayFeatures) { + gaSrc = ('https:' === document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'; + } else { + gaSrc = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + } + (function () { + var document = $document[0]; + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = gaSrc; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(gaSrc); + + return created = true; + }; + + this._createAnalyticsScriptTag = function () { + if (!accountId) { + me._log('warn', 'No account id set to create analytics script tag'); + return; + } + + if (created) { + me._log('warn', 'Analytics script tag already created'); + return; + } + + // inject the google analytics tag + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments);},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m); + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + + if (angular.isArray(accountId)) { + accountId.forEach(function (trackerObj) { + var _cookieConfig = 'cookieConfig' in trackerObj ? trackerObj.cookieConfig : cookieConfig; + var options; + if (_checkOption('crossDomainLinker', trackerObj)) { + trackerObj.allowLinker = trackerObj.crossDomainLinker; + } + angular.forEach(['name', 'allowLinker'], function(key) { + if (key in trackerObj) { + if (angular.isUndefined(options)) { + options = {}; + } + options[key] = trackerObj[key]; + } + }); + if (angular.isUndefined(options)) { + $window.ga('create', trackerObj.tracker, _cookieConfig); + } else { + $window.ga('create', trackerObj.tracker, _cookieConfig, options); + } + if (options && 'allowLinker' in options && options.allowLinker) { + $window.ga(_generateCommandName('require', trackerObj), 'linker'); + if (_checkOption('crossLinkDomains', trackerObj)) { + $window.ga(_generateCommandName('linker:autoLink', trackerObj), trackerObj.crossLinkDomains); + } + } + }); + } else if (crossDomainLinker) { + $window.ga('create', accountId, cookieConfig, linkerConfig); + $window.ga('require', 'linker'); + if(crossLinkDomains) { + $window.ga('linker:autoLink', crossLinkDomains ); + } + } else { + $window.ga('create', accountId, cookieConfig); + } + + if (displayFeatures) { + $window.ga('require', 'displayfeatures'); + } + + if (trackRoutes && !ignoreFirstPageLoad) { + $window.ga('send', 'pageview', getUrl()); + } + + if ($window.ga) { + if (ecommerce) { + if (!enhancedEcommerce) { + $window.ga('require', 'ecommerce', 'ecommerce.js'); + } else { + $window.ga('require', 'ec', 'ec.js'); + } + } + if (enhancedLinkAttribution) { + $window.ga('require', 'linkid', 'linkid.js'); + } + if (experimentId) { + var expScript = document.createElement('script'), + s = document.getElementsByTagName('script')[0]; + expScript.src = "//www.google-analytics.com/cx/api.js?experiment=" + experimentId; + s.parentNode.insertBefore(expScript, s); + } + } + + return created = true; + }; + + this._ecommerceEnabled = function () { + if (!ecommerce) { + this._log('warn', 'ecommerce not set. Use AnalyticsProvider.setECommerce(true, false);'); + return false; + } else if (enhancedEcommerce) { + this._log('warn', 'Enhanced ecommerce plugin is enabled. Only one plugin(ecommerce/ec) can be used at a time. ' + + 'Use AnalyticsProvider.setECommerce(true, false);'); + return false; + } + return true; + }; + + this._enhancedEcommerceEnabled = function () { + if (!ecommerce) { + this._log('warn', 'ecommerce not set. Use AnalyticsProvider.setECommerce(true, true);'); + return false; + } else if (!enhancedEcommerce) { + this._log('warn', 'Enhanced ecommerce plugin is disabled. Use AnalyticsProvider.setECommerce(true, true);'); + return false; + } + return true; + }; + + /** + * Track page + https://developers.google.com/analytics/devguides/collection/gajs/ + https://developers.google.com/analytics/devguides/collection/analyticsjs/pages + * @param url + * @param title + * @param custom + * @private + */ + this._trackPage = function (url, title, custom) { + var that = this, args = arguments; + url = url ? url : getUrl(); + title = title ? title : $document[0].title; + _gaJs(function () { + // http://stackoverflow.com/questions/7322288/how-can-i-set-a-page-title-with-google-analytics + $window._gaq.push(["_set", "title", title]); + $window._gaq.push(['_trackPageview', trackPrefix + url]); + that._log('_trackPageview', url, title, args); + }); + _analyticsJs(function () { + var opt_fieldObject = { + 'page': trackPrefix + url, + 'title': title + }; + if (angular.isObject(custom)) { + angular.extend(opt_fieldObject, custom); + } + if (angular.isArray(accountId)) { + accountId.forEach(function (trackerObj) { + $window.ga(_generateCommandName('send', trackerObj), 'pageview', opt_fieldObject); + }); + } else { + $window.ga('send', 'pageview', opt_fieldObject); + } + that._log('pageview', url, title, args); + }); + }; + + /** + * Track event + https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide + https://developers.google.com/analytics/devguides/collection/analyticsjs/events + * @param category + * @param action + * @param label + * @param value + * @param noninteraction + * @param custom + * @private + */ + this._trackEvent = function (category, action, label, value, noninteraction, custom) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_trackEvent', category, action, label, value, !!noninteraction]); + that._log('trackEvent', args); + }); + _analyticsJs(function () { + var opt_fieldObject = {}; + if (angular.isDefined(noninteraction)) { + opt_fieldObject['nonInteraction'] = !!noninteraction; + } + if (angular.isObject(custom)) { + angular.extend(opt_fieldObject, custom); + } + if (angular.isArray(accountId)) { + accountId.forEach(function (trackerObj) { + if (_checkOption('trackEvent', trackerObj)) { + $window.ga(_generateCommandName('send', trackerObj), 'event', category, action, label, value, opt_fieldObject); + } + }); + } else { + $window.ga('send', 'event', category, action, label, value, opt_fieldObject); + } + that._log('event', args); + }); + }; + + /** + * Add transaction + * https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce#_gat.GA_Tracker_._addTrans + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#addTrans + * @param transactionId + * @param affiliation + * @param total + * @param tax + * @param shipping + * @param city + * @param state + * @param country + * @private + */ + this._addTrans = function (transactionId, affiliation, total, tax, shipping, city, state, country, currency) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addTrans', transactionId, affiliation, total, tax, shipping, city, state, country]); + that._log('_addTrans', args); + }); + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:addTransaction', { + id: transactionId, + affiliation: affiliation, + revenue: total, + tax: tax, + shipping: shipping, + currency: currency || 'USD' + }); + that._log('ecommerce:addTransaction', args); + } + }); + }; + + /** + * Add item to transaction + * https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce#_gat.GA_Tracker_._addItem + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#addItem + * @param transactionId + * @param sku + * @param name + * @param category + * @param price + * @param quantity + * @private + */ + this._addItem = function (transactionId, sku, name, category, price, quantity) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addItem', transactionId, sku, name, category, price, quantity]); + that._log('_addItem', args); + }); + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:addItem', { + id: transactionId, + name: name, + sku: sku, + category: category, + price: price, + quantity: quantity + }); + that._log('ecommerce:addItem', args); + } + }); + }; + + /** + * Track transaction + * https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce#_gat.GA_Tracker_._trackTrans + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#sendingData + * @private + */ + this._trackTrans = function () { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_trackTrans']); + that._log('_trackTrans', args); + }); + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:send'); + that._log('ecommerce:send', args); + } + }); + }; + + /** + * Clear transaction + * https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#clearingData + * @private + */ + this._clearTrans = function () { + var that = this, args = arguments; + _analyticsJs(function () { + if (that._ecommerceEnabled()) { + $window.ga('ecommerce:clear'); + that._log('ecommerce:clear', args); + } + }); + }; + + /** + * Enhanced Ecommerce + */ + + /** + * Add product data + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#product-data + * @param productId + * @param name + * @param category + * @param brand + * @param variant + * @param price + * @param quantity + * @param coupon + * @param position + */ + this._addProduct = function (productId, name, category, brand, variant, price, quantity, coupon, position) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addProduct', productId, name, category, brand, variant, price, quantity, coupon, position]); + that._log('_addProduct', args); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:addProduct', { + id: productId, + name: name, + category: category, + brand: brand, + variant: variant, + price: price, + quantity: quantity, + coupon: coupon, + position: position + }); + that._log('ec:addProduct', args); + } + }); + }; + + /** + * Add Impression data + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#impression-data + * @param id + * @param name + * @param list + * @param brand + * @param category + * @param variant + * @param position + * @param price + */ + this._addImpression = function (id, name, list, brand, category, variant, position, price){ + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addImpression', id, name, list, brand, category, variant, position, price]); + that._log('_addImpression', args); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:addImpression', { + id: id, + name: name, + category: category, + brand: brand, + variant: variant, + list: list, + position: position, + price: price + }); + } + that._log('ec:addImpression', args); + }); + }; + + /** + * Add promo data + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce + * @param productId + * @param name + * @param creative + * @param position + */ + this._addPromo = function (productId, name, creative, position) { + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_addPromo', productId, name, creative, position]); + that._log('_addPromo', arguments); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:addPromo', { + id: productId, + name: name, + creative: creative, + position: position + }); + that._log('ec:addPromo', args); + } + }); + }; + + /** + * get ActionFieldObject + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#action-data + * @param id + * @param affliation + * @param revenue + * @param tax + * @param shipping + * @param coupon + * @param list + * @param step + * @param option + */ + this._getActionFieldObject = function (id, affiliation, revenue, tax, shipping, coupon, list, step, option) { + var obj = {}; + if (id) { obj.id = id; } + if (affiliation) { obj.affiliation = affiliation; } + if (revenue) { obj.revenue = revenue; } + if (tax) { obj.tax = tax; } + if (shipping) { obj.shipping = shipping; } + if (coupon) { obj.coupon = coupon; } + if (list) { obj.list = list; } + if (step) { obj.step = step; } + if (option) { obj.option = option; } + return obj; + }; + + /** + * Set Action being performed + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-actions + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#action-types + * @param action + * @param name + * @param obj + */ + this._setAction = function (action, obj){ + var that = this, args = arguments; + _gaJs(function () { + $window._gaq.push(['_setAction', action, obj]); + that._log('__setAction', args); + }); + _analyticsJs(function () { + if (that._enhancedEcommerceEnabled()) { + $window.ga('ec:setAction', action, obj); + that._log('ec:setAction', args); + } + }); + }; + + /** + * Track Transaction + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-transactions + * @param transactionId + * @param affiliation + * @param revenue + * @param tax + * @param shipping + * @param coupon + * @param list + * @param step + * @param option + */ + this._trackTransaction = function (transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option) { + this._setAction('purchase', this._getActionFieldObject(transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option)); + this._pageView(); + }; + + /** + * Track Refund + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-refunds + * @param transactionId + * + */ + this._trackRefund = function (transactionId) { + this._setAction('refund', this._getActionFieldObject(transactionId)); + this._pageView(); + }; + + /** + * Track Checkout + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-checkout + * @param step + * @param option + * + */ + this._trackCheckOut = function (step, option) { + this._setAction('checkout', this._getActionFieldObject(null, null, null, null, null, null, null, step, option)); + this._pageView(); + }; + + /** + * Track add/remove to cart + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#add-remove-cart + * @param action + * + */ + this._trackCart = function (action) { + if (['add', 'remove'].indexOf(action) !== -1) { + this._setAction(action); + this._send('event', 'UX', 'click', action + ' to cart'); + } + }; + + /** + * Track promo click + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-promo-clicks + * @param promotionName + * + */ + this._promoClick = function (promotionName) { + this._setAction('promo_click'); + this._send('event', 'Internal Promotions', 'click', promotionName); + }; + + /** + * Track product click + * https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-promo-clicks + * @param promotionName + * + */ + this._productClick = function (listName) { + this._setAction('click', this._getActionFieldObject(null, null, null, null, null, null, listName, null, null)); + this._send('event', 'UX', 'click', listName); + }; + + /** + * Send custom events + * https://developers.google.com/analytics/devguides/collection/analyticsjs/user-timings#implementation + * https://developers.google.com/analytics/devguides/collection/analyticsjs/social-interactions#implementation + * + * @param obj + * @private + */ + this._send = function () { + var that = this; + var args = Array.prototype.slice.call(arguments); + args.unshift('send'); + _analyticsJs(function () { + $window.ga.apply(this, args); + that._log(args); + }); + }; + + this._pageView = function() { + this._send('pageview'); + }; + + /** + * Set custom dimensions, metrics or experiment + * https://developers.google.com/analytics/devguides/collection/analyticsjs/custom-dims-mets + * https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#customs + * @param name + * @param value + * @private + */ + this._set = function (name, value) { + var that = this; + _analyticsJs(function () { + $window.ga('set', name, value); + that._log('set', name, value); + }); + }; + + + // creates the ganalytics tracker + if (!delayScriptTag) { + if (analyticsJS) { + this._createAnalyticsScriptTag(); + } else { + this._createScriptTag(); + } + } + + // activates page tracking + if (trackRoutes) { + $rootScope.$on(pageEvent, function () { + me._trackPage(); + }); + } + + /** + * Track User Timings + * @timingCategory (Required): A string for categorizing all user timing variables into logical groups(e.g jQuery). + * @timingVar (Required): A string to identify the variable being recorded(e.g. JavaScript Load). + * @timingValue (Required): The number of milliseconds in elapsed time to report to Google Analytics(e.g. 20). + * @timingLabel (Not Required): A string that can be used to add flexibility in visualizing user timings in the reports(e.g. Google CDN). + */ + this._trackTimings = function (timingCategory, timingVar, timingValue, timingLabel) { + this._send('timing', timingCategory, timingVar, timingValue, timingLabel); + }; + + return { + _logs: me._logs, + displayFeatures: displayFeatures, + ecommerce: ecommerce, + enhancedEcommerce: enhancedEcommerce, + enhancedLinkAttribution: enhancedLinkAttribution, + getUrl: getUrl, + experimentId: experimentId, + ignoreFirstPageLoad: ignoreFirstPageLoad, + delayScriptTag: delayScriptTag, + setCookieConfig: me._setCookieConfig, + getCookieConfig: function () { + return cookieConfig; + }, + createAnalyticsScriptTag: function (config) { + if (config) { + cookieConfig = config; + } + + return me._createAnalyticsScriptTag(); + }, + createScriptTag: function (config) { + if (config) { + cookieConfig = config; + } + + return me._createScriptTag(); + }, + ecommerceEnabled: function () { + return me._ecommerceEnabled(); + }, + enhancedEcommerceEnabled: function () { + return me._enhancedEcommerceEnabled(); + }, + trackPage: function (url, title, custom) { + me._trackPage(url, title, custom); + }, + trackEvent: function (category, action, label, value, noninteraction, custom) { + me._trackEvent(category, action, label, value, noninteraction, custom); + }, + addTrans: function (transactionId, affiliation, total, tax, shipping, city, state, country, currency) { + me._addTrans(transactionId, affiliation, total, tax, shipping, city, state, country, currency); + }, + addItem: function (transactionId, sku, name, category, price, quantity) { + me._addItem(transactionId, sku, name, category, price, quantity); + }, + trackTrans: function () { + me._trackTrans(); + }, + clearTrans: function () { + me._clearTrans(); + }, + addProduct: function (productId, name, category, brand, variant, price, quantity, coupon, position) { + me._addProduct(productId, name, category, brand, variant, price, quantity, coupon, position); + }, + addPromo: function (productId, name, creative, position) { + me._addPromo(productId, name, creative, position); + }, + addImpression: function (productId, name, list, brand, category, variant, position, price) { + me._addImpression(productId, name, list, brand, category, variant, position, price); + }, + productClick: function (listName) { + me._productClick(listName); + }, + promoClick : function (promotionName) { + me._promoClick(promotionName); + }, + trackDetail: function () { + me._setAction('detail'); + me._pageView(); + }, + trackCart: function (action) { + me._trackCart(action); + }, + trackCheckout: function (step, option) { + me._trackCheckOut(step, option); + }, + trackTimings: function (timingCategory, timingVar, timingValue, timingLabel) { + me._trackTimings(timingCategory, timingVar, timingValue, timingLabel); + }, + trackTransaction: function (transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option){ + me._trackTransaction(transactionId, affiliation, revenue, tax, shipping, coupon, list, step, option); + }, + setAction: function (action, obj) { + me._setAction(action, obj); + }, + send: function (obj) { + me._send(obj); + }, + pageView: function () { + me._pageView(); + }, + set: function (name, value) { + me._set(name, value); + } + }; + }]; + }) + + .directive('gaTrackEvent', ['Analytics', '$parse', function (Analytics, $parse) { + return { + restrict: 'A', + link: function (scope, element, attrs) { + var options = $parse(attrs.gaTrackEvent)(scope); + element.bind('click', function () { + if (options.length > 1) { + Analytics.trackEvent.apply(Analytics, options); + } + }); + } + }; + }]); diff --git a/vendor/assets/components/angular-google-analytics/test/karma.conf.js b/vendor/assets/components/angular-google-analytics/test/karma.conf.js new file mode 100644 index 000000000..52517b619 --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/test/karma.conf.js @@ -0,0 +1,73 @@ +// Testacular configuration file +// +// For all available config options and default values, see: +// https://github.com/vojtajina/testacular/blob/stable/lib/config.js#L54 + +// base path, that will be used to resolve files and exclude +basePath = './..'; + +// frameworks to use +// frameworks = ['jasmine']; + +// list of files / patterns to load in the browser +files = [ + JASMINE, + JASMINE_ADAPTER, + 'bower_components/angular/angular.js', + 'bower_components/angular-mocks/angular-mocks.js', + 'src/*.js', + 'test/unit/*.js' +]; + +// list of files to exclude +exclude = []; + +// use dots reporter, as travis terminal does not support escaping sequences +// possible values: 'dots', 'progress', 'junit' +// CLI --reporters progress +// 'coverage', +reporters = ['progress']; + +// web server port +// CLI --port 9876 +port = 9876; + +// cli runner port +// CLI --runner-port 9100 +runnerPort = 9100; + +// enable / disable colors in the output (reporters and logs) +// CLI --colors --no-colors +colors = true; + +// level of logging +// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG +// CLI --log-level debug +logLevel = LOG_INFO; + +// enable / disable watching file and executing tests whenever any file changes +// CLI --auto-watch --no-auto-watch +autoWatch = true; + +// Start these browsers, currently available: +// - Chrome +// - ChromeCanary +// - Firefox +// - Opera +// - Safari (only Mac) +// - PhantomJS +// - IE (only Windows) +// CLI --browsers Chrome,Firefox,Safari +browsers = ['Chrome']; + +// If browser does not capture in given timeout [ms], kill it +// CLI --capture-timeout 5000 +captureTimeout = 5000; + +// Auto run tests on start (when browsers are captured) and exit +// CLI --single-run --no-single-run +singleRun = false; + +// report which specs are slower than 500ms +// CLI --report-slower-than 500 +reportSlowerThan = 500; diff --git a/vendor/assets/components/angular-google-analytics/test/unit/angular-google-analytics.js b/vendor/assets/components/angular-google-analytics/test/unit/angular-google-analytics.js new file mode 100644 index 000000000..89b6b7640 --- /dev/null +++ b/vendor/assets/components/angular-google-analytics/test/unit/angular-google-analytics.js @@ -0,0 +1,837 @@ +/* global before, beforeEach, describe, expect, inject, it, module, spyOn */ + +'use strict'; + +describe('angular-google-analytics', function() { + beforeEach(module('angular-google-analytics')); + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setAccount('UA-XXXXXX-xx'); + })); + + describe('required settings missing', function () { + describe('for default ga script injection', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setAccount(false); + AnalyticsProvider.useAnalytics(false); + })); + + it('should not inject a script tag', function () { + inject(function (Analytics) { + expect(document.querySelectorAll("script[src='http://www.google-analytics.com/ga.js']").length).toBe(0); + }); + }); + + it('should issue a warning to the log', function () { + inject(function ($log) { + spyOn($log, 'warn'); + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('warn'); + expect(Analytics._logs[0][1]).toBe('No account id set to create script tag'); + expect($log.warn).toHaveBeenCalledWith(['No account id set to create script tag']); + }); + }); + }); + }); + + describe('for analytics script injection', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setAccount(false); + AnalyticsProvider.useAnalytics(true); + })); + + it('should not inject a script tag', function () { + inject(function (Analytics) { + expect(document.querySelectorAll("script[src='//www.google-analytics.com/analytics.js']").length).toBe(0); + }); + }); + + it('should issue a warning to the log', function () { + inject(function ($log) { + spyOn($log, 'warn'); + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('warn'); + expect(Analytics._logs[0][1]).toBe('No account id set to create analytics script tag'); + expect($log.warn).toHaveBeenCalledWith(['No account id set to create analytics script tag']); + }); + }); + }); + }); + }); + + describe('enabled delayedScriptTag', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.delayScriptTag(true); + })); + + it('should have a truthy value for Analytics.delayScriptTag', function () { + inject(function (Analytics, $location) { + expect(Analytics.delayScriptTag).toBe(true); + }); + }); + + it('should not inject a script tag', function () { + inject(function (Analytics) { + expect(document.querySelectorAll("script[src='http://www.google-analytics.com/ga.js']").length).toBe(0); + }); + }); + + }); + + describe('automatic trackPages with ga.js', function () { + it('should inject the GA script', function () { + inject(function (Analytics) { + expect(document.querySelectorAll("script[src='http://www.google-analytics.com/ga.js']").length).toBe(1); + }); + }); + + it('should generate trackPages', function () { + inject(function (Analytics, $window) { + expect(Analytics._logs.length).toBe(0); + Analytics.trackPage('test'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('_trackPageview'); + expect($window._gaq.length).toBe(4); + expect($window._gaq[0][0]).toBe('_setAccount'); + expect($window._gaq[2][0]).toBe('_set'); + expect($window._gaq[2][1]).toBe('title'); + expect($window._gaq[2][2]).toBe(''); + expect($window._gaq[3][0]).toBe('_trackPageview'); + expect($window._gaq[3][1]).toBe('test'); + }); + }); + + it('should generate a trackPage on routeChangeSuccess', function () { + inject(function (Analytics, $rootScope) { + $rootScope.$broadcast('$routeChangeSuccess'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('_trackPageview'); + }); + }); + }); + + describe('NOT automatic trackPages', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.trackPages(false); + })); + + it('should NOT generate a trackpage on routeChangeSuccess', function () { + inject(function (Analytics, $rootScope) { + $rootScope.$broadcast('$routeChangeSuccess'); + expect(Analytics._logs.length).toBe(0); + }); + }); + + it('should generate a trackpage when explicitly called', function () { + inject(function (Analytics, $window) { + Analytics.trackPage('/page/here'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('_trackPageview'); + expect($window._gaq.length).toBe(3); + expect($window._gaq[0][0]).toBe('_setAccount'); + expect($window._gaq[1][0]).toBe('_set'); + expect($window._gaq[1][1]).toBe('title'); + expect($window._gaq[1][2]).toBe(''); + expect($window._gaq[2][0]).toBe('_trackPageview'); + expect($window._gaq[2][1]).toBe('/page/here'); + }); + }); + }); + + describe('eventTracks with ga.js', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.trackPages(false); + })); + + it('should generate eventTracks', function () { + inject(function (Analytics, $window) { + Analytics.trackEvent('test'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('trackEvent'); + expect($window._gaq.length).toBe(2); + expect($window._gaq[0][0]).toBe('_setAccount'); + expect($window._gaq[1][0]).toBe('_trackEvent'); + expect($window._gaq[1][1]).toBe('test'); + expect($window._gaq[1][2]).toBe(undefined); + expect($window._gaq[1][3]).toBe(undefined); + expect($window._gaq[1][4]).toBe(undefined); + expect($window._gaq[1][5]).toBe(false); + }); + }); + + it('should generate eventTracks with non-interactions', function () { + inject(function (Analytics, $window) { + Analytics.trackEvent('test', 'action', 'label', 0, true); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('trackEvent'); + expect($window._gaq.length).toBe(2); + expect($window._gaq[0][0]).toBe('_setAccount'); + expect($window._gaq[1][0]).toBe('_trackEvent'); + expect($window._gaq[1][1]).toBe('test'); + expect($window._gaq[1][2]).toBe('action'); + expect($window._gaq[1][3]).toBe('label'); + expect($window._gaq[1][4]).toBe(0); + expect($window._gaq[1][5]).toBe(true); + }); + }); + }); + + describe('supports dc.js', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.useDisplayFeatures(true); + })); + + it('should inject the DC script', function () { + inject(function (Analytics) { + expect(document.querySelectorAll("script[src='http://stats.g.doubleclick.net/dc.js']").length).toBe(1); + }); + }); + }); + + describe('e-commerce transactions', function () { + it('should add transcation', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addTrans('1', '', '2.42', '0.42', '0', 'Amsterdam', '', 'Netherlands'); + expect(Analytics._logs.length).toBe(1); + }); + }); + + it('should add an item to transaction', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addItem('1', 'sku-1', 'Test product 1', 'Testing', '1', '1'); + expect(Analytics._logs.length).toBe(1); + Analytics.addItem('1', 'sku-2', 'Test product 2', 'Testing', '1', '1'); + expect(Analytics._logs.length).toBe(2); + }); + }); + + it('should track the transaction', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.trackTrans(); + expect(Analytics._logs.length).toBe(1); + }); + }); + }); + + describe('supports ignoreFirstPageLoad', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.ignoreFirstPageLoad(true); + })); + + it('supports ignoreFirstPageLoad config', function () { + inject(function (Analytics, $rootScope) { + expect(Analytics.ignoreFirstPageLoad).toBe(true); + }); + }); + }); + + describe('supports analytics.js', function () { + var cookieConfig = { + cookieDomain: 'foo.example.com', + cookieName: 'myNewName', + cookieExpires: 20000 + }; + + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.useAnalytics(true); + AnalyticsProvider.setCookieConfig(cookieConfig); + AnalyticsProvider.useDisplayFeatures(true); + AnalyticsProvider.useECommerce(true); + AnalyticsProvider.useEnhancedLinkAttribution(true); + AnalyticsProvider.setExperimentId('12345'); + })); + + it('should inject the Analytics script', function () { + inject(function (Analytics) { + expect(document.querySelectorAll("script[src='//www.google-analytics.com/analytics.js']").length).toBe(1); + }); + }); + + it('should respect cookieConfig', function () { + inject(function (Analytics) { + expect(Analytics.getCookieConfig()).toEqual(cookieConfig); + }); + }); + + it('should support displayFeatures config', function () { + inject(function (Analytics) { + expect(Analytics.displayFeatures).toBe(true); + }); + }); + + it('should support ecommerce config', function () { + inject(function (Analytics) { + expect(Analytics.ecommerce).toBe(true); + }); + }); + + it('should support enhancedLinkAttribution config', function () { + inject(function (Analytics) { + expect(Analytics.enhancedLinkAttribution).toBe(true); + }); + }); + + it('should support experimentId config', function () { + inject(function (Analytics) { + expect(Analytics.experimentId).toBe('12345'); + }); + }); + + it('should allow transaction clearing', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.clearTrans(); + expect(Analytics._logs.length).toBe(1); + }); + }); + + it('should allow sending custom events', function () { + inject(function (Analytics) { + var social = { + hitType: 'social', + socialNetwork: 'facebook', + socialAction: 'like', + socialTarget: 'http://mycoolpage.com', + page: '/my-new-page' + }; + + expect(Analytics._logs.length).toBe(0); + Analytics.send(social); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0]).toEqual({ + '0': ['send', social] + }); + }); + }); + + it('should allow setting custom dimensions, metrics or experiment', function () { + inject(function (Analytics) { + var data = { + name: "dimension1", + value: "value1" + }; + expect(Analytics._logs.length).toBe(0); + Analytics.set(data.name, data.value); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0]).toEqual({ + '0': 'set', + '1': data.name, + '2': data.value + }); + }); + }); + + describe('with eventTracks', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.trackPages(false); + })); + + it('should generate eventTracks', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + Analytics.trackEvent('test'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('event'); + expect($window.ga).toHaveBeenCalledWith('send', 'event', 'test', undefined, undefined, undefined, {}); + }); + }); + }); + + it('should generate eventTracks and honour non-interactions', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + Analytics.trackEvent('test', 'action', 'label', 0, true); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('event'); + expect($window.ga).toHaveBeenCalledWith('send', 'event', 'test', 'action', 'label', 0, {nonInteraction: true}); + }); + }); + }); + }); + }); + + describe('e-commerce transactions with analytics.js', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.useAnalytics(true); + AnalyticsProvider.useECommerce(true); + })); + + it('should have ecommerce enabled', function () { + inject(function (Analytics) { + expect(Analytics.ecommerceEnabled()).toBe(true); + }); + }); + + it('should have enhanced ecommerce disabled', function () { + inject(function (Analytics) { + expect(Analytics.enhancedEcommerceEnabled()).toBe(false); + }); + }); + + it('should add transcation', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addTrans('1', '', '2.42', '0.42', '0', 'Amsterdam', '', 'Netherlands'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('ecommerce:addTransaction'); + }); + }); + + it('should add an item to transaction', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addItem('1', 'sku-1', 'Test product 1', 'Testing', '1', '1'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('ecommerce:addItem'); + }); + }); + + it('should track the transaction', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.trackTrans(); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('ecommerce:send'); + }); + }); + }); + + describe('enhanced e-commerce transactions with analytics.js', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.useAnalytics(true); + AnalyticsProvider.useECommerce(true, true); + })); + + it('should have ecommerce disabled', function () { + inject(function (Analytics) { + expect(Analytics.ecommerceEnabled()).toBe(false); + }); + }); + + it('should have enhanced ecommerce enabled', function () { + inject(function (Analytics) { + expect(Analytics.enhancedEcommerceEnabled()).toBe(true); + }); + }); + + it('should add product Impression', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addImpression('sku-1', 'Test Product 1', 'Category List', 'Brand 1', 'Category-1', 'variant-1', '1', '24990'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('ec:addImpression'); + }); + }); + + it('should add product data', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('ec:addProduct'); + expect(Analytics._logs[0][1][0]).toBe('sku-2'); + expect(Analytics._logs[0][1][1]).toBe('Test Product 2'); + expect(Analytics._logs[0][1][2]).toBe('Category-1'); + expect(Analytics._logs[0][1][3]).toBe('Brand 2'); + expect(Analytics._logs[0][1][4]).toBe('variant-3'); + expect(Analytics._logs[0][1][5]).toBe('2499'); + expect(Analytics._logs[0][1][6]).toBe('1'); + expect(Analytics._logs[0][1][7]).toBe('FLAT10'); + expect(Analytics._logs[0][1][8]).toBe('1'); + expect($window.ga).toHaveBeenCalledWith('ec:addProduct', { + id: 'sku-2', + name: 'Test Product 2', + category: 'Category-1', + brand: 'Brand 2', + variant: 'variant-3', + price: '2499', + quantity: '1', + coupon: 'FLAT10', + position: '1' + }); + }); + }); + }); + + it('should add promo data', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addPromo('PROMO_1234', 'Summer Sale', 'summer_banner2', 'banner_slot1'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('ec:addPromo'); + }); + }); + + it('should set Action', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + var dummyAction = 'dummy'; + Analytics.setAction(dummyAction); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('ec:setAction'); + expect(Analytics._logs[0][1][0]).toBe(dummyAction); + }); + }); + + it('should track product click', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + var dummyList = 'dummy list'; + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.productClick(dummyList); + expect(Analytics._logs.length).toBe(3); + expect(Analytics._logs[0][0]).toBe('ec:addProduct'); + expect(Analytics._logs[1][0]).toBe('ec:setAction'); + expect(Analytics._logs[1][1][0]).toBe('click'); + expect(Analytics._logs[1][1][1]['list']).toBe(dummyList); + expect(Analytics._logs[2][0]).toEqual([ 'send', 'event', 'UX', 'click', 'dummy list' ]); + }); + }); + + it('should track product detail', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackDetail(); + expect(Analytics._logs.length).toBe(3); + expect(Analytics._logs[0][0]).toBe('ec:addProduct'); + expect(Analytics._logs[1][0]).toBe('ec:setAction'); + expect(Analytics._logs[1][1][0]).toBe('detail'); + expect(Analytics._logs[2][0]).toEqual(['send', 'pageview']); + }); + }); + + it('should track add to cart event', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackCart('add'); + expect(Analytics._logs.length).toBe(3); + expect(Analytics._logs[0][0]).toBe('ec:addProduct'); + expect(Analytics._logs[1][0]).toBe('ec:setAction'); + expect(Analytics._logs[1][1][0]).toBe('add'); + expect(Analytics._logs[2][0]).toEqual([ 'send', 'event', 'UX', 'click', 'add to cart' ]); + }); + }); + + it('should track Remove from cart event', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackCart('remove'); + expect(Analytics._logs.length).toBe(3); + expect(Analytics._logs[0][0]).toBe('ec:addProduct'); + expect(Analytics._logs[1][0]).toBe('ec:setAction'); + expect(Analytics._logs[1][1][0]).toBe('remove'); + expect(Analytics._logs[2][0]).toEqual([ 'send', 'event', 'UX', 'click', 'remove to cart' ]); + }); + }); + + it('should track checkout', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.trackCheckout(); + expect(Analytics._logs.length).toBe(3); + expect(Analytics._logs[0][0]).toBe('ec:addProduct'); + expect(Analytics._logs[1][0]).toBe('ec:setAction'); + expect(Analytics._logs[1][1][0]).toBe('checkout'); + expect(Analytics._logs[2][0]).toEqual(['send', 'pageview']); + }); + }); + + it('should track transaction', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addProduct('sku-2', 'Test Product 2', 'Category-1', 'Brand 2', 'variant-3', '2499', '1', 'FLAT10', '1'); + Analytics.addProduct('sku-3', 'Test Product 3', 'Category-1', 'Brand 2', 'variant-5', '299', '1', 'FLAT10', '1'); + Analytics.trackTransaction(); + expect(Analytics._logs.length).toBe(4); + expect(Analytics._logs[0][0]).toBe('ec:addProduct'); + expect(Analytics._logs[1][0]).toBe('ec:addProduct'); + expect(Analytics._logs[2][0]).toBe('ec:setAction'); + expect(Analytics._logs[2][1][0]).toBe('purchase'); + expect(Analytics._logs[3][0]).toEqual(['send', 'pageview']); + }); + }); + + it('should track promo click', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.addPromo('PROMO_1234', 'Summer Sale', 'summer_banner2', 'banner_slot1'); + Analytics.promoClick('Summer Sale'); + expect(Analytics._logs.length).toBe(3); + expect(Analytics._logs[0][0]).toBe('ec:addPromo'); + expect(Analytics._logs[1][0]).toBe('ec:setAction'); + expect(Analytics._logs[1][1][0]).toBe('promo_click'); + expect(Analytics._logs[2][0]).toEqual([ 'send', 'event', 'Internal Promotions', 'click', 'Summer Sale' ]); + }); + }); + }); + + describe('supports arbitrary page events', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setPageEvent('$stateChangeSuccess'); + })); + + it('should inject the Analytics script', function () { + inject(function (Analytics, $rootScope) { + $rootScope.$broadcast('$stateChangeSuccess'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('_trackPageview'); + }); + }); + }); + + describe('supports RegExp path scrubbing', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setRemoveRegExp(new RegExp(/\/\d+?$/)); + })); + + it('should scrub urls', function () { + inject(function (Analytics, $location) { + $location.path('/some-crazy/page/with/numbers/123456'); + expect(Analytics.getUrl()).toBe('/some-crazy/page/with/numbers'); + }); + }); + }); + + describe('parameter defaulting on trackPage', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.trackPages(false); + })); + + it('should set url and title when no parameters provided', function () { + inject(function (Analytics, $document, $location) { + $location.path('/page/here'); + $document[0] = { title: 'title here' }; + Analytics.trackPage(); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('_trackPageview'); + expect(Analytics._logs[0][1]).toBe('/page/here'); + expect(Analytics._logs[0][2]).toBe('title here'); + }); + }); + + it('should set title when no title provided', function () { + inject(function (Analytics, $document) { + $document[0] = { title: 'title here' }; + Analytics.trackPage('/page/here'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toBe('_trackPageview'); + expect(Analytics._logs[0][1]).toBe('/page/here'); + expect(Analytics._logs[0][2]).toBe('title here'); + }); + }); + }); + + describe('supports multiple tracking objects', function () { + var trackers = [ + { tracker: 'UA-12345-12', name: "tracker1" }, + { tracker: 'UA-12345-34', name: "tracker2" }, + { tracker: 'UA-12345-45' } + ]; + + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setAccount(trackers); + AnalyticsProvider.useAnalytics(true); + })); + + it('should call ga create event for each tracker', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + expect($window.ga).toHaveBeenCalledWith('create', trackers[0].tracker, 'auto', { name: trackers[0].name }); + expect($window.ga).toHaveBeenCalledWith('create', trackers[1].tracker, 'auto', { name: trackers[1].name }); + expect($window.ga).toHaveBeenCalledWith('create', trackers[2].tracker, 'auto'); + }); + }); + }); + + describe('#trackPage', function () { + it('should call ga send pageview event for each tracker', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + Analytics.trackPage('/mypage', 'My Page'); + expect($window.ga).toHaveBeenCalledWith(trackers[0].name + '.send', 'pageview', { page: '/mypage', title: 'My Page' }); + expect($window.ga).toHaveBeenCalledWith(trackers[1].name + '.send', 'pageview', { page: '/mypage', title: 'My Page' }); + expect($window.ga).toHaveBeenCalledWith('send', 'pageview', { page: '/mypage', title: 'My Page' }); + }); + }); + }); + }); + }); + + describe('supports advanced options for multiple tracking objects', function () { + var trackers = [ + { tracker: 'UA-12345-12', name: "tracker1", crossDomainLinker: true }, + { tracker: 'UA-12345-34', name: "tracker2", crossDomainLinker: true, crossLinkDomains: ['domain-1.com'] }, + { tracker: 'UA-12345-45', crossDomainLinker: true, crossLinkDomains: ['domain-2.com'] }, + { tracker: 'UA-12345-67', cookieConfig: 'yourdomain.org' } + ]; + + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setAccount(trackers); + AnalyticsProvider.useAnalytics(true); + })); + + it('should call ga require for each tracker', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + expect($window.ga).toHaveBeenCalledWith('tracker1.require', 'linker'); + expect($window.ga).toHaveBeenCalledWith('tracker2.require', 'linker'); + expect($window.ga).toHaveBeenCalledWith('require', 'linker'); + }); + }); + }); + + it('should call ga linker autoLink for configured tracking objects only', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + expect($window.ga).not.toHaveBeenCalledWith('tracker1.linker:autoLink'); + expect($window.ga).toHaveBeenCalledWith('tracker2.linker:autoLink', ['domain-1.com']); + expect($window.ga).toHaveBeenCalledWith('linker:autoLink', ['domain-2.com']); + }); + }); + }); + + it ('should call ga create with custom cookie config', function() { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + expect($window.ga).toHaveBeenCalledWith('create', 'UA-12345-67', 'yourdomain.org'); + }); + }); + }); + }); + + describe('supports advanced tracking for multiple tracking objects', function () { + var trackers = [ + { tracker: 'UA-12345-12', name: "tracker1", trackEvent: true }, + { tracker: 'UA-12345-34', name: "tracker2" }, + { tracker: 'UA-12345-45', trackEvent: true } + ]; + + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.setAccount(trackers); + AnalyticsProvider.useAnalytics(true); + })); + + it('should track events for configured tracking objects only', function () { + inject(function ($window) { + spyOn($window, 'ga'); + inject(function (Analytics) { + Analytics.trackEvent('category', 'action', 'label', 'value'); + expect($window.ga).toHaveBeenCalledWith('tracker1.send', 'event', 'category', 'action', 'label', 'value', {}); + expect($window.ga).not.toHaveBeenCalledWith('tracker2.send', 'event', 'category', 'action', 'label', 'value', {}); + expect($window.ga).toHaveBeenCalledWith('send', 'event', 'category', 'action', 'label', 'value', {}); + }); + }); + }); + }); + + describe('enabled url params tracking', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.trackUrlParams(true); + })); + + it('should grab query params in the url', function () { + inject(function (Analytics, $location) { + $location.url('/some/page?with_params=foo&more_param=123'); + expect(Analytics.getUrl()).toContain('?with_params=foo&more_param=123'); + }); + }); + }); + + describe('createAnalyticsScriptTag', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.delayScriptTag(true); + })); + + it('should inject a script tag', function () { + inject(function (Analytics, $location) { + var scriptCount = document.querySelectorAll("script[src='//www.google-analytics.com/analytics.js']").length; + + Analytics.createAnalyticsScriptTag({userId: 1234}); + expect(Analytics.getCookieConfig().userId).toBe(1234); + expect(document.querySelectorAll("script[src='//www.google-analytics.com/analytics.js']").length).toBe(scriptCount + 1); + }); + }); + + }); + + describe('createAnalyticsScriptTag', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.delayScriptTag(true); + })); + + it('should inject a script tag', function () { + inject(function (Analytics, $location) { + var scriptCount = document.querySelectorAll("script[src='http://www.google-analytics.com/ga.js']").length; + + Analytics.createScriptTag({userId: 1234}); + expect(Analytics.getCookieConfig().userId).toBe(1234); + expect(document.querySelectorAll("script[src='http://www.google-analytics.com/ga.js']").length).toBe(scriptCount + 1); + }); + }); + }); + + + describe('should add user timing', function () { + beforeEach(module(function (AnalyticsProvider) { + AnalyticsProvider.useAnalytics(true); + })); + + it('should add user timing', function () { + inject(function (Analytics) { + expect(Analytics._logs.length).toBe(0); + Analytics.trackTimings('Time to Checkout', 'User Timings', '32', 'My Timings'); + expect(Analytics._logs.length).toBe(1); + expect(Analytics._logs[0][0]).toEqual([ 'send', 'timing', 'Time to Checkout', 'User Timings', '32', 'My Timings']); + }); + }); + }); + + describe('directives', function () { + describe('gaTrackEvent', function () { + + it('should track an event when clicked', function () { + inject(function (Analytics, $rootScope, $compile) { + spyOn(Analytics, 'trackEvent'); + var scope = $rootScope.$new(), + element = '
      test
      ', + compiled = $compile(element)(scope); + scope.$digest(); + compiled.triggerHandler('click'); + expect(Analytics.trackEvent).toHaveBeenCalledWith('button', 'click', 'Some Button'); + }); + }); + + it('should inherit parent scope', function () { + inject(function (Analytics, $rootScope, $compile) { + spyOn(Analytics, 'trackEvent'); + var scope = $rootScope.$new(), element, compiled; + scope.event = ['button', 'click', 'Some Button']; + element = '
      test
      '; + compiled = $compile(element)(scope); + scope.$digest(); + compiled.triggerHandler('click'); + expect(Analytics.trackEvent).toHaveBeenCalledWith('button', 'click', 'Some Button'); + }); + }); + + }); + }); + +}); diff --git a/vendor/assets/components/angular-growl/.bower.json b/vendor/assets/components/angular-growl/.bower.json new file mode 100644 index 000000000..a91d2af0c --- /dev/null +++ b/vendor/assets/components/angular-growl/.bower.json @@ -0,0 +1,39 @@ +{ + "author": "Marco Rinck", + "name": "angular-growl", + "description": "growl like notifications for angularJS projects, using bootstrap alert classes", + "version": "0.4.0", + "homepage": "https://github.com/marcorinck/angular-growl", + "repository": { + "type": "git", + "url": "https://github.com/marcorinck/angular-growl" + }, + "license": "MIT", + "main": "./build/angular-growl.js", + "ignore": [ + "src", + "test", + ".jshintrc", + "package.json", + "gruntfile.js", + "karma.conf.js", + "bower.json", + "demo", + ".gitignore" + ], + "dependencies": { + "angular": "1.2.1" + }, + "devDependencies": { + "angular-mocks": "1.2.1" + }, + "_release": "0.4.0", + "_resolution": { + "type": "version", + "tag": "v0.4.0", + "commit": "e0e8b2cda660f28c75eefa7c9703952368547cdd" + }, + "_source": "git://github.com/marcorinck/angular-growl.git", + "_target": ">=0.4.0", + "_originalSource": "angular-growl" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-growl/LICENSE b/vendor/assets/components/angular-growl/LICENSE new file mode 100644 index 000000000..3db10d478 --- /dev/null +++ b/vendor/assets/components/angular-growl/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Marco Rinck + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/vendor/assets/components/angular-growl/README.md b/vendor/assets/components/angular-growl/README.md new file mode 100644 index 000000000..095036a6a --- /dev/null +++ b/vendor/assets/components/angular-growl/README.md @@ -0,0 +1,275 @@ +#angular-growl + +> growl like notifications for angularJS projects, using bootstrap alert classes + +##Features + +![Standard bootstrap 2.x styles](doc/screenshot.jpg) + +* growl like notifications like in MacOS X +* using standard bootstrap classes (alert, alert-info, alert-error, alert-success) +* global or per message configuration of a timeout when message will be automatically closed +* automatic translation of messages if [angular-translate](https://github.com/PascalPrecht/angular-translate) filter is +present, you only have to provide keys as messages, angular-translate will translate them +* pre-defined $http-Interceptor to automatically handle $http responses for server-sent messages +* automatic CSS animations when adding/closing notifications (only when using >= angularJS 1.2) +* < 1 kB after GZIP + +##Changelog + +**0.4.0** - 19th Nov 2013 + +* updated dependency to angularJS 1.2.x, angular-growl does not work with 1.0.x anymore (BREAKING CHANGE) +* new option: only display unique messages, which is the new default, disable to allow same message more than once (BREAKING CHANGE) +* new option: allow html tags in messages, default is off you need to + +**0.3.1** - 1st Oct 2013 + +* bugfix: translating of messages works again +* change: also set alert css classes introduced by bootstrap 3 + +**0.3.0** - 26th Sept 2013 + +* adding css animations support via ngAnimate (for angularJS >= 1.2) +* ability to configure server message keys + +**0.2.0** - 22nd Sept 2013 + +* reworking, bugfixing and documenting handling of server sent messages/notifications +* externalizing css styles of growl class +* provide minified versions of js and css files in build folder + +**0.1.3** - 20th Sept 2013 + +* introducing ttl config option, fixes #2 + +##Installation + +You can install angular-growl with bower: + +> bower install angular-growl + +Alternatively you can download the files in the [build folder](build/) manually and include them in your project. + +````html + + + + + + + + + + +```` + +As angular-growl is based on its own angularJS module, you have to alter your dependency list when creating your application +module: + +````javascript +var app = angular.module('myApp', ['angular-growl']); +```` + +Finally, you have to include the directive somewhere in your HTML like this: + +````html + +
      + +```` + +##Usage + +Just let angular inject the growl Factory into your code and call the 4 functions that the factory provides accordingly: + +````javascript +app.controller("demoCtrl", ['$scope', 'growl', function($scope, growl) { + $scope.addSpecialWarnMessage = function() { + growl.addWarnMessage("This adds a warn message"); + growl.addInfoMessage("This adds a info message"); + growl.addSuccessMessage("This adds a success message"); + growl.addErrorMessage("This adds a error message"); + } +}]); +```` + +If [angular-translate](https://github.com/PascalPrecht/angular-translate) is present, its filter is automatically called for translating of messages, so you have to provide +only the key: + +````javascript +app.controller("demoCtrl", ['$scope', 'growl', function($scope, growl) { + $scope.addSpecialWarnMessage = function() { + growl.addSuccessMessage("SAVE_SUCCESS_MESSAGE"); + growl.addErrorMessage("VALIDATION_ERROR"); + } +}]); +```` + +##Configuration + +###Only unique messages + +* Default: true + +Accept only unique messages as a new message. If a message is already displayed (text and severity are the same) then this +message will not be added to the displayed message list. Set to false, to always display all messages regardless if they +are already displayed or not: + +````javascript +var app = angular.module('myApp', ['angular-growl']); + +app.config(['growlProvider', function(growlProvider) { + growlProvider.onlyUniqueMessages(false); +}]); +```` + +###Automatic closing of notifications (timeout, ttl) + +* Default: none (all messages need to be closed manually by the user.) + +However, you can configure a global timeout (TTL) after which notifications should be automatically closed. To do +this, you have to configure this during config phase of angular bootstrap like this: + +````javascript +var app = angular.module('myApp', ['angular-growl']); + +app.config(['growlProvider', function(growlProvider) { + growlProvider.globalTimeToLive(5000); +}]); +```` + +This sets a global timeout of 5 seconds after which every notification will be closed. + +You can override TTL generally for every single message if you want: + +````javascript +app.controller("demoCtrl", ['$scope', 'growl', function($scope, growl) { + $scope.addSpecialWarnMessage = function() { + growl.addWarnMessage("Override global ttl setting", {ttl: 10000}); + } +}]); +```` + +This sets a 10 second timeout, after which the notification will be automatically closed. + +If you have set a global TTL, you can disable automatic closing of single notifications by setting their ttl to -1: + +````javascript +app.controller("demoCtrl", ['$scope', 'growl', function($scope, growl) { + $scope.addSpecialWarnMessage = function() { + growl.addWarnMessage("this will not be closed automatically even when a global ttl is set", {ttl: -1}); + } +}]); +```` + +###Allow HTML in messages + +* Default: false + +Turn this on to be able to display html tags in messages, default behaviour is to NOT display HTML. + +For this to work, you have to declare a dependency to "ngSanitize" (and load the extra javascript) in your own application +module! + +````javascript +var app = angular.module('myApp', ['angular-growl', 'ngSanitize']); + +app.config(['growlProvider', function(growlProvider) { + growlProvider.globalEnableHtml(true); +}]); +```` + +You can override the global option and allow HTML tags in single messages too: + +````javascript +app.controller("demoCtrl", ['$scope', 'growl', function($scope, growl) { + $scope.addSpecialWarnMessage = function() { + growl.addWarnMessage("This is a HTML message", {enableHtml: true}); + } +}]); +```` + +###Animations + +Beginning with angularJS 1.2 growl messages can be automatically animated with CSS animations when adding and/or closing +them. All you have to do is load the angular-animate.js provided by angularJS and add **ngAnimate** to your applications +dependency list: + +````html + + + + + + + + + + +```` + +````javascript +var app = angular.module('myApp', ['angular-growl', 'ngAnimate']); +```` + +That's it. The angular-growl.css comes with a pre-defined animation of 0.5s to opacity. + +To configure the animations, just change the _growl-item.*_ classes in the css file to your preference. F.i. to change length +of animation from 0.5s to 1s do this: + +````css +.growl-item.ng-enter, +.growl-item.ng-leave { + -webkit-transition:1s linear all; + -moz-transition:1s linear all; + -o-transition:1s linear all; + transition:1s linear all; +} +```` + +Basically you can style your animations just as you like if ngAnimate can pick it up automatically. See the [ngAnimate +docs](http://docs.angularjs.org/api/ngAnimate) for more info. + +###Handling of server sent notifications + +When doing $http requests, you can configure angular-growl to look automatically for messages in $http responses, so your +business logic on the server is able to send messages/notifications to the client and you can display them automagically: + +````javascript +var app = angular.module('myApp', ['angular-growl']); + +app.config(['growlProvider', '$httpProvider', function(growlProvider, $httpProvider) { + $httpProvider.responseInterceptors.push(growlProvider.serverMessagesInterceptor); +}]); +```` + +This adds a pre-defined angularJS HTTP interceptor that is called on every HTTP request and looks if response contains +messages. Interceptor looks in response for a "messages" array of objects with "text" and "severity" key. This is an example +response which results in 3 growl messages: + +````json +{ + "someOtherData": {...}, + "messages": [ + {"text":"this is a server message", "severity": "warn"}, + {"text":"this is another server message", "severity": "info"}, + {"text":"and another", "severity": "error"} + ] +} +```` + +You can configure the keys, the interceptor is looking for like this: + +````javascript +var app = angular.module("demo", ["angular-growl"]); + +app.config(["growlProvider", "$httpProvider", function(growlProvider, $httpProvider) { + growlProvider.messagesKey("my-messages"); + growlProvider.messageTextKey("messagetext"); + growlProvider.messageSeverityKey("severity-level"); + $httpProvider.responseInterceptors.push(growlProvider.serverMessagesInterceptor); +}]); +```` + +Server messages will be created with default TTL. diff --git a/vendor/assets/components/angular-growl/build/angular-growl.js b/vendor/assets/components/angular-growl/build/angular-growl.js new file mode 100644 index 000000000..e4612960b --- /dev/null +++ b/vendor/assets/components/angular-growl/build/angular-growl.js @@ -0,0 +1,183 @@ +/** + * angular-growl - v0.4.0 - 2013-11-19 + * https://github.com/marcorinck/angular-growl + * Copyright (c) 2013 Marco Rinck; Licensed MIT + */ +angular.module('angular-growl', []); +angular.module('angular-growl').directive('growl', [ + '$rootScope', + function ($rootScope) { + 'use strict'; + return { + restrict: 'A', + template: '
      ' + '\t
      ' + '\t\t' + '
      ' + '
      ' + '
      ' + '
      ' + '\t
      ' + '
      ', + replace: false, + scope: true, + controller: [ + '$scope', + '$timeout', + 'growl', + function ($scope, $timeout, growl) { + var onlyUnique = growl.onlyUnique(); + $scope.messages = []; + function addMessage(message) { + $scope.messages.push(message); + if (message.ttl && message.ttl !== -1) { + $timeout(function () { + $scope.deleteMessage(message); + }, message.ttl); + } + } + $rootScope.$on('growlMessage', function (event, message) { + var found; + if (onlyUnique) { + angular.forEach($scope.messages, function (msg) { + if (message.text === msg.text && message.severity === msg.severity) { + found = true; + } + }); + if (!found) { + addMessage(message); + } + } else { + addMessage(message); + } + }); + $scope.deleteMessage = function (message) { + var index = $scope.messages.indexOf(message); + if (index > -1) { + $scope.messages.splice(index, 1); + } + }; + $scope.computeClasses = function (message) { + return { + 'alert-success': message.severity === 'success', + 'alert-error': message.severity === 'error', + 'alert-danger': message.severity === 'error', + 'alert-info': message.severity === 'info', + 'alert-warning': message.severity === 'warn' + }; + }; + } + ] + }; + } +]); +angular.module('angular-growl').provider('growl', function () { + 'use strict'; + var _ttl = null, _enableHtml = false, _messagesKey = 'messages', _messageTextKey = 'text', _messageSeverityKey = 'severity', _onlyUniqueMessages = true; + this.globalTimeToLive = function (ttl) { + _ttl = ttl; + }; + this.globalEnableHtml = function (enableHtml) { + _enableHtml = enableHtml; + }; + this.messagesKey = function (messagesKey) { + _messagesKey = messagesKey; + }; + this.messageTextKey = function (messageTextKey) { + _messageTextKey = messageTextKey; + }; + this.messageSeverityKey = function (messageSeverityKey) { + _messageSeverityKey = messageSeverityKey; + }; + this.onlyUniqueMessages = function (onlyUniqueMessages) { + _onlyUniqueMessages = onlyUniqueMessages; + }; + this.serverMessagesInterceptor = [ + '$q', + 'growl', + function ($q, growl) { + function checkResponse(response) { + if (response.data[_messagesKey] && response.data[_messagesKey].length > 0) { + growl.addServerMessages(response.data[_messagesKey]); + } + } + function success(response) { + checkResponse(response); + return response; + } + function error(response) { + checkResponse(response); + return $q.reject(response); + } + return function (promise) { + return promise.then(success, error); + }; + } + ]; + this.$get = [ + '$rootScope', + '$filter', + function ($rootScope, $filter) { + var translate; + try { + translate = $filter('translate'); + } catch (e) { + } + function broadcastMessage(message) { + if (translate) { + message.text = translate(message.text); + } + $rootScope.$broadcast('growlMessage', message); + } + function sendMessage(text, config, severity) { + var _config = config || {}, message; + message = { + text: text, + severity: severity, + ttl: _config.ttl || _ttl, + enableHtml: _config.enableHtml || _enableHtml + }; + broadcastMessage(message); + } + function addWarnMessage(text, config) { + sendMessage(text, config, 'warn'); + } + function addErrorMessage(text, config) { + sendMessage(text, config, 'error'); + } + function addInfoMessage(text, config) { + sendMessage(text, config, 'info'); + } + function addSuccessMessage(text, config) { + sendMessage(text, config, 'success'); + } + function addServerMessages(messages) { + var i, message, severity, length; + length = messages.length; + for (i = 0; i < length; i++) { + message = messages[i]; + if (message[_messageTextKey] && message[_messageSeverityKey]) { + switch (message[_messageSeverityKey]) { + case 'warn': + severity = 'warn'; + break; + case 'success': + severity = 'success'; + break; + case 'info': + severity = 'info'; + break; + case 'error': + severity = 'error'; + break; + } + sendMessage(message[_messageTextKey], undefined, severity); + } + } + } + function onlyUnique() { + return _onlyUniqueMessages; + } + return { + addWarnMessage: addWarnMessage, + addErrorMessage: addErrorMessage, + addInfoMessage: addInfoMessage, + addSuccessMessage: addSuccessMessage, + addServerMessages: addServerMessages, + onlyUnique: onlyUnique + }; + } + ]; +}); \ No newline at end of file diff --git a/vendor/assets/components/angular-growl/build/angular-growl.min.css b/vendor/assets/components/angular-growl/build/angular-growl.min.css new file mode 100644 index 000000000..e1ed8423b --- /dev/null +++ b/vendor/assets/components/angular-growl/build/angular-growl.min.css @@ -0,0 +1,7 @@ +/** + * angular-growl - v0.4.0 - 2013-11-19 + * https://github.com/marcorinck/angular-growl + * Copyright (c) 2013 Marco Rinck; Licensed MIT + */ + +.growl{position:fixed;top:10px;right:10px;float:right;width:250px}.growl-item.ng-enter,.growl-item.ng-leave{-webkit-transition:.5s linear all;-moz-transition:.5s linear all;-o-transition:.5s linear all;transition:.5s linear all}.growl-item.ng-enter,.growl-item.ng-leave.ng-leave-active{opacity:0}.growl-item.ng-leave,.growl-item.ng-enter.ng-enter-active{opacity:1} \ No newline at end of file diff --git a/vendor/assets/components/angular-growl/build/angular-growl.min.js b/vendor/assets/components/angular-growl/build/angular-growl.min.js new file mode 100644 index 000000000..83798c554 --- /dev/null +++ b/vendor/assets/components/angular-growl/build/angular-growl.min.js @@ -0,0 +1,6 @@ +/** + * angular-growl - v0.4.0 - 2013-11-19 + * https://github.com/marcorinck/angular-growl + * Copyright (c) 2013 Marco Rinck; Licensed MIT + */ +angular.module("angular-growl",[]),angular.module("angular-growl").directive("growl",["$rootScope",function(a){"use strict";return{restrict:"A",template:'
      ',replace:!1,scope:!0,controller:["$scope","$timeout","growl",function(b,c,d){function e(a){b.messages.push(a),a.ttl&&-1!==a.ttl&&c(function(){b.deleteMessage(a)},a.ttl)}var f=d.onlyUnique();b.messages=[],a.$on("growlMessage",function(a,c){var d;f?(angular.forEach(b.messages,function(a){c.text===a.text&&c.severity===a.severity&&(d=!0)}),d||e(c)):e(c)}),b.deleteMessage=function(a){var c=b.messages.indexOf(a);c>-1&&b.messages.splice(c,1)},b.computeClasses=function(a){return{"alert-success":"success"===a.severity,"alert-error":"error"===a.severity,"alert-danger":"error"===a.severity,"alert-info":"info"===a.severity,"alert-warning":"warn"===a.severity}}}]}}]),angular.module("angular-growl").provider("growl",function(){"use strict";var a=null,b=!1,c="messages",d="text",e="severity",f=!0;this.globalTimeToLive=function(b){a=b},this.globalEnableHtml=function(a){b=a},this.messagesKey=function(a){c=a},this.messageTextKey=function(a){d=a},this.messageSeverityKey=function(a){e=a},this.onlyUniqueMessages=function(a){f=a},this.serverMessagesInterceptor=["$q","growl",function(a,b){function d(a){a.data[c]&&a.data[c].length>0&&b.addServerMessages(a.data[c])}function e(a){return d(a),a}function f(b){return d(b),a.reject(b)}return function(a){return a.then(e,f)}}],this.$get=["$rootScope","$filter",function(c,g){function h(a){p&&(a.text=p(a.text)),c.$broadcast("growlMessage",a)}function i(c,d,e){var f,g=d||{};f={text:c,severity:e,ttl:g.ttl||a,enableHtml:g.enableHtml||b},h(f)}function j(a,b){i(a,b,"warn")}function k(a,b){i(a,b,"error")}function l(a,b){i(a,b,"info")}function m(a,b){i(a,b,"success")}function n(a){var b,c,f,g;for(g=a.length,b=0;g>b;b++)if(c=a[b],c[d]&&c[e]){switch(c[e]){case"warn":f="warn";break;case"success":f="success";break;case"info":f="info";break;case"error":f="error"}i(c[d],void 0,f)}}function o(){return f}var p;try{p=g("translate")}catch(q){}return{addWarnMessage:j,addErrorMessage:k,addInfoMessage:l,addSuccessMessage:m,addServerMessages:n,onlyUnique:o}}]}); \ No newline at end of file diff --git a/vendor/assets/components/angular-growl/doc/screenshot.jpg b/vendor/assets/components/angular-growl/doc/screenshot.jpg new file mode 100644 index 000000000..5c21b8e6f Binary files /dev/null and b/vendor/assets/components/angular-growl/doc/screenshot.jpg differ diff --git a/vendor/assets/components/angular-i18n/.bower.json b/vendor/assets/components/angular-i18n/.bower.json new file mode 100644 index 000000000..8f754f13c --- /dev/null +++ b/vendor/assets/components/angular-i18n/.bower.json @@ -0,0 +1,21 @@ +{ + "name": "angular-i18n", + "version": "1.3.15", + "ignore": [ + "**/.*", + "node_modules", + "components", + "precommit.sh" + ], + "homepage": "https://github.com/angular/bower-angular-i18n", + "_release": "1.3.15", + "_resolution": { + "type": "version", + "tag": "v1.3.15", + "commit": "b69173b747aa6d40c19b4ce19cdff01df5c3cd11" + }, + "_source": "git://github.com/angular/bower-angular-i18n.git", + "_target": "~1.3.15", + "_originalSource": "angular-i18n", + "_direct": true +} \ No newline at end of file diff --git a/vendor/assets/components/angular-i18n/README.md b/vendor/assets/components/angular-i18n/README.md new file mode 100644 index 000000000..4272e5187 --- /dev/null +++ b/vendor/assets/components/angular-i18n/README.md @@ -0,0 +1,65 @@ +# packaged angular-i18n + +This repo is for distribution on `npm` and `bower`. The source for this module is in the +[main AngularJS repo](https://github.com/angular/angular.js). +Please file issues and pull requests against that repo. + +## Install + +You can install this package either with `npm` or with `bower`. + +### npm + +```shell +npm install angular-i18n +``` + +Add a ` +``` + +Note that this package is not in CommonJS format, so doing `require('angular-i18n')` will +return `undefined`. + +### bower + +```shell +bower install angular-i18n +``` + +Add a ` +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/guide/i18n). + +## License + +The MIT License + +Copyright (c) 2010-2015 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/assets/components/angular-i18n/aa-dj.js b/vendor/assets/components/angular-i18n/aa-dj.js new file mode 100644 index 000000000..7bc88007d --- /dev/null +++ b/vendor/assets/components/angular-i18n/aa-dj.js @@ -0,0 +1,2 @@ +require('./angular-locale_aa-dj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/aa-er.js b/vendor/assets/components/angular-i18n/aa-er.js new file mode 100644 index 000000000..ec35a2c28 --- /dev/null +++ b/vendor/assets/components/angular-i18n/aa-er.js @@ -0,0 +1,2 @@ +require('./angular-locale_aa-er'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/aa-et.js b/vendor/assets/components/angular-i18n/aa-et.js new file mode 100644 index 000000000..4d1887edd --- /dev/null +++ b/vendor/assets/components/angular-i18n/aa-et.js @@ -0,0 +1,2 @@ +require('./angular-locale_aa-et'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/aa.js b/vendor/assets/components/angular-i18n/aa.js new file mode 100644 index 000000000..8b6e4efff --- /dev/null +++ b/vendor/assets/components/angular-i18n/aa.js @@ -0,0 +1,2 @@ +require('./angular-locale_aa'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/af-na.js b/vendor/assets/components/angular-i18n/af-na.js new file mode 100644 index 000000000..1e5e82d1e --- /dev/null +++ b/vendor/assets/components/angular-i18n/af-na.js @@ -0,0 +1,2 @@ +require('./angular-locale_af-na'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/af-za.js b/vendor/assets/components/angular-i18n/af-za.js new file mode 100644 index 000000000..f3c723aa1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/af-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_af-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/af.js b/vendor/assets/components/angular-i18n/af.js new file mode 100644 index 000000000..204f74e66 --- /dev/null +++ b/vendor/assets/components/angular-i18n/af.js @@ -0,0 +1,2 @@ +require('./angular-locale_af'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/agq-cm.js b/vendor/assets/components/angular-i18n/agq-cm.js new file mode 100644 index 000000000..224f66b7a --- /dev/null +++ b/vendor/assets/components/angular-i18n/agq-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_agq-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/agq.js b/vendor/assets/components/angular-i18n/agq.js new file mode 100644 index 000000000..e8a1e0d4b --- /dev/null +++ b/vendor/assets/components/angular-i18n/agq.js @@ -0,0 +1,2 @@ +require('./angular-locale_agq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ak-gh.js b/vendor/assets/components/angular-i18n/ak-gh.js new file mode 100644 index 000000000..c4e8723e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ak-gh.js @@ -0,0 +1,2 @@ +require('./angular-locale_ak-gh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ak.js b/vendor/assets/components/angular-i18n/ak.js new file mode 100644 index 000000000..14fdc332b --- /dev/null +++ b/vendor/assets/components/angular-i18n/ak.js @@ -0,0 +1,2 @@ +require('./angular-locale_ak'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/am-et.js b/vendor/assets/components/angular-i18n/am-et.js new file mode 100644 index 000000000..1293db3a1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/am-et.js @@ -0,0 +1,2 @@ +require('./angular-locale_am-et'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/am.js b/vendor/assets/components/angular-i18n/am.js new file mode 100644 index 000000000..3577f6d56 --- /dev/null +++ b/vendor/assets/components/angular-i18n/am.js @@ -0,0 +1,2 @@ +require('./angular-locale_am'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/angular-locale_aa-dj.js b/vendor/assets/components/angular-i18n/angular-locale_aa-dj.js new file mode 100644 index 000000000..91f7e69ae --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_aa-dj.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "saaku", + "carra" + ], + "DAY": [ + "Acaada", + "Etleeni", + "Talaata", + "Arbaqa", + "Kamiisi", + "Gumqata", + "Sabti" + ], + "ERANAMES": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "ERAS": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "MONTH": [ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Leqeeni", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu" + ], + "SHORTDAY": [ + "Aca", + "Etl", + "Tal", + "Arb", + "Kam", + "Gum", + "Sab" + ], + "SHORTMONTH": [ + "Qun", + "Nah", + "Cig", + "Agd", + "Cax", + "Qas", + "Qad", + "Leq", + "Way", + "Dit", + "Xim", + "Kax" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Fdj", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "aa-dj", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_aa-er.js b/vendor/assets/components/angular-i18n/angular-locale_aa-er.js new file mode 100644 index 000000000..a8e9ffe73 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_aa-er.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "saaku", + "carra" + ], + "DAY": [ + "Acaada", + "Etleeni", + "Talaata", + "Arbaqa", + "Kamiisi", + "Gumqata", + "Sabti" + ], + "ERANAMES": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "ERAS": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "MONTH": [ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Liiqen", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu" + ], + "SHORTDAY": [ + "Aca", + "Etl", + "Tal", + "Arb", + "Kam", + "Gum", + "Sab" + ], + "SHORTMONTH": [ + "Qun", + "Nah", + "Cig", + "Agd", + "Cax", + "Qas", + "Qad", + "Leq", + "Way", + "Dit", + "Xim", + "Kax" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "aa-er", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_aa-et.js b/vendor/assets/components/angular-i18n/angular-locale_aa-et.js new file mode 100644 index 000000000..258e3e7cc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_aa-et.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "saaku", + "carra" + ], + "DAY": [ + "Acaada", + "Etleeni", + "Talaata", + "Arbaqa", + "Kamiisi", + "Gumqata", + "Sabti" + ], + "ERANAMES": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "ERAS": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "MONTH": [ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Liiqen", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu" + ], + "SHORTDAY": [ + "Aca", + "Etl", + "Tal", + "Arb", + "Kam", + "Gum", + "Sab" + ], + "SHORTMONTH": [ + "Qun", + "Nah", + "Cig", + "Agd", + "Cax", + "Qas", + "Qad", + "Leq", + "Way", + "Dit", + "Xim", + "Kax" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "aa-et", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_aa.js b/vendor/assets/components/angular-i18n/angular-locale_aa.js new file mode 100644 index 000000000..68735e368 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_aa.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "saaku", + "carra" + ], + "DAY": [ + "Acaada", + "Etleeni", + "Talaata", + "Arbaqa", + "Kamiisi", + "Gumqata", + "Sabti" + ], + "ERANAMES": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "ERAS": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "MONTH": [ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Liiqen", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu" + ], + "SHORTDAY": [ + "Aca", + "Etl", + "Tal", + "Arb", + "Kam", + "Gum", + "Sab" + ], + "SHORTMONTH": [ + "Qun", + "Nah", + "Cig", + "Agd", + "Cax", + "Qas", + "Qad", + "Leq", + "Way", + "Dit", + "Xim", + "Kax" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "aa", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_af-na.js b/vendor/assets/components/angular-i18n/angular-locale_af-na.js new file mode 100644 index 000000000..0a145a7b4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_af-na.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.C.", + "n.C." + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "Mrt.", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "af-na", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_af-za.js b/vendor/assets/components/angular-i18n/angular-locale_af-za.js new file mode 100644 index 000000000..21fe71ea6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_af-za.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.C.", + "n.C." + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "Mrt.", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd MMM y h:mm:ss a", + "mediumDate": "dd MMM y", + "mediumTime": "h:mm:ss a", + "short": "y-MM-dd h:mm a", + "shortDate": "y-MM-dd", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "af-za", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_af.js b/vendor/assets/components/angular-i18n/angular-locale_af.js new file mode 100644 index 000000000..7491495ad --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_af.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.C.", + "n.C." + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "Mrt.", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd MMM y h:mm:ss a", + "mediumDate": "dd MMM y", + "mediumTime": "h:mm:ss a", + "short": "y-MM-dd h:mm a", + "shortDate": "y-MM-dd", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "af", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_agq-cm.js b/vendor/assets/components/angular-i18n/angular-locale_agq-cm.js new file mode 100644 index 000000000..c8e5f0154 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_agq-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.g", + "a.k" + ], + "DAY": [ + "tsu\u0294nts\u0268", + "tsu\u0294ukp\u00e0", + "tsu\u0294ugh\u0254e", + "tsu\u0294ut\u0254\u0300ml\u00f2", + "tsu\u0294um\u00e8", + "tsu\u0294ugh\u0268\u0302m", + "tsu\u0294ndz\u0268k\u0254\u0294\u0254" + ], + "ERANAMES": [ + "S\u011be K\u0268\u0300lesto", + "B\u01cea K\u0268\u0300lesto" + ], + "ERAS": [ + "SK", + "BK" + ], + "MONTH": [ + "ndz\u0254\u0300\u014b\u0254\u0300n\u00f9m", + "ndz\u0254\u0300\u014b\u0254\u0300k\u0197\u0300z\u00f9\u0294", + "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300d\u0289\u0300gh\u00e0", + "ndz\u0254\u0300\u014b\u0254\u0300t\u01ceaf\u0289\u0304gh\u0101", + "ndz\u0254\u0300\u014b\u00e8s\u00e8e", + "ndz\u0254\u0300\u014b\u0254\u0300nz\u00f9gh\u00f2", + "ndz\u0254\u0300\u014b\u0254\u0300d\u00f9mlo", + "ndz\u0254\u0300\u014b\u0254\u0300kw\u00eef\u0254\u0300e", + "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300f\u0289\u0300gh\u00e0dzugh\u00f9", + "ndz\u0254\u0300\u014b\u0254\u0300gh\u01d4uwel\u0254\u0300m", + "ndz\u0254\u0300\u014b\u0254\u0300chwa\u0294\u00e0kaa wo", + "ndz\u0254\u0300\u014b\u00e8fw\u00f2o" + ], + "SHORTDAY": [ + "nts", + "kpa", + "gh\u0254", + "t\u0254m", + "ume", + "gh\u0268", + "dzk" + ], + "SHORTMONTH": [ + "n\u00f9m", + "k\u0268z", + "t\u0268d", + "taa", + "see", + "nzu", + "dum", + "f\u0254e", + "dzu", + "l\u0254m", + "kaa", + "fwo" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "agq-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_agq.js b/vendor/assets/components/angular-i18n/angular-locale_agq.js new file mode 100644 index 000000000..20731323a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_agq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.g", + "a.k" + ], + "DAY": [ + "tsu\u0294nts\u0268", + "tsu\u0294ukp\u00e0", + "tsu\u0294ugh\u0254e", + "tsu\u0294ut\u0254\u0300ml\u00f2", + "tsu\u0294um\u00e8", + "tsu\u0294ugh\u0268\u0302m", + "tsu\u0294ndz\u0268k\u0254\u0294\u0254" + ], + "ERANAMES": [ + "S\u011be K\u0268\u0300lesto", + "B\u01cea K\u0268\u0300lesto" + ], + "ERAS": [ + "SK", + "BK" + ], + "MONTH": [ + "ndz\u0254\u0300\u014b\u0254\u0300n\u00f9m", + "ndz\u0254\u0300\u014b\u0254\u0300k\u0197\u0300z\u00f9\u0294", + "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300d\u0289\u0300gh\u00e0", + "ndz\u0254\u0300\u014b\u0254\u0300t\u01ceaf\u0289\u0304gh\u0101", + "ndz\u0254\u0300\u014b\u00e8s\u00e8e", + "ndz\u0254\u0300\u014b\u0254\u0300nz\u00f9gh\u00f2", + "ndz\u0254\u0300\u014b\u0254\u0300d\u00f9mlo", + "ndz\u0254\u0300\u014b\u0254\u0300kw\u00eef\u0254\u0300e", + "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300f\u0289\u0300gh\u00e0dzugh\u00f9", + "ndz\u0254\u0300\u014b\u0254\u0300gh\u01d4uwel\u0254\u0300m", + "ndz\u0254\u0300\u014b\u0254\u0300chwa\u0294\u00e0kaa wo", + "ndz\u0254\u0300\u014b\u00e8fw\u00f2o" + ], + "SHORTDAY": [ + "nts", + "kpa", + "gh\u0254", + "t\u0254m", + "ume", + "gh\u0268", + "dzk" + ], + "SHORTMONTH": [ + "n\u00f9m", + "k\u0268z", + "t\u0268d", + "taa", + "see", + "nzu", + "dum", + "f\u0254e", + "dzu", + "l\u0254m", + "kaa", + "fwo" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "agq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ak-gh.js b/vendor/assets/components/angular-i18n/angular-locale_ak-gh.js new file mode 100644 index 000000000..ec2115f04 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ak-gh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AN", + "EW" + ], + "DAY": [ + "Kwesida", + "Dwowda", + "Benada", + "Wukuda", + "Yawda", + "Fida", + "Memeneda" + ], + "ERANAMES": [ + "Ansa Kristo", + "Kristo Ekyiri" + ], + "ERAS": [ + "AK", + "KE" + ], + "MONTH": [ + "Sanda-\u0186p\u025bp\u0254n", + "Kwakwar-\u0186gyefuo", + "Eb\u0254w-\u0186benem", + "Eb\u0254bira-Oforisuo", + "Esusow Aketseaba-K\u0254t\u0254nimba", + "Obirade-Ay\u025bwohomumu", + "Ay\u025bwoho-Kitawonsa", + "Difuu-\u0186sandaa", + "Fankwa-\u0190b\u0254", + "\u0186b\u025bs\u025b-Ahinime", + "\u0186ber\u025bf\u025bw-Obubuo", + "Mumu-\u0186p\u025bnimba" + ], + "SHORTDAY": [ + "Kwe", + "Dwo", + "Ben", + "Wuk", + "Yaw", + "Fia", + "Mem" + ], + "SHORTMONTH": [ + "S-\u0186", + "K-\u0186", + "E-\u0186", + "E-O", + "E-K", + "O-A", + "A-K", + "D-\u0186", + "F-\u0190", + "\u0186-A", + "\u0186-O", + "M-\u0186" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GHS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ak-gh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ak.js b/vendor/assets/components/angular-i18n/angular-locale_ak.js new file mode 100644 index 000000000..6b2de0fde --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ak.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AN", + "EW" + ], + "DAY": [ + "Kwesida", + "Dwowda", + "Benada", + "Wukuda", + "Yawda", + "Fida", + "Memeneda" + ], + "ERANAMES": [ + "Ansa Kristo", + "Kristo Ekyiri" + ], + "ERAS": [ + "AK", + "KE" + ], + "MONTH": [ + "Sanda-\u0186p\u025bp\u0254n", + "Kwakwar-\u0186gyefuo", + "Eb\u0254w-\u0186benem", + "Eb\u0254bira-Oforisuo", + "Esusow Aketseaba-K\u0254t\u0254nimba", + "Obirade-Ay\u025bwohomumu", + "Ay\u025bwoho-Kitawonsa", + "Difuu-\u0186sandaa", + "Fankwa-\u0190b\u0254", + "\u0186b\u025bs\u025b-Ahinime", + "\u0186ber\u025bf\u025bw-Obubuo", + "Mumu-\u0186p\u025bnimba" + ], + "SHORTDAY": [ + "Kwe", + "Dwo", + "Ben", + "Wuk", + "Yaw", + "Fia", + "Mem" + ], + "SHORTMONTH": [ + "S-\u0186", + "K-\u0186", + "E-\u0186", + "E-O", + "E-K", + "O-A", + "A-K", + "D-\u0186", + "F-\u0190", + "\u0186-A", + "\u0186-O", + "M-\u0186" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GHS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ak", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_am-et.js b/vendor/assets/components/angular-i18n/angular-locale_am-et.js new file mode 100644 index 000000000..6ddd11d48 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_am-et.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1325\u12cb\u1275", + "\u12a8\u1230\u12d3\u1275" + ], + "DAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230\u129e", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "ERANAMES": [ + "\u12d3\u1218\u1270 \u12d3\u1208\u121d", + "\u12d3\u1218\u1270 \u121d\u1215\u1228\u1275" + ], + "ERAS": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u122a\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1276\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u122a", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1276", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "am-et", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_am.js b/vendor/assets/components/angular-i18n/angular-locale_am.js new file mode 100644 index 000000000..4d98b2505 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_am.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1325\u12cb\u1275", + "\u12a8\u1230\u12d3\u1275" + ], + "DAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230\u129e", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "ERANAMES": [ + "\u12d3\u1218\u1270 \u12d3\u1208\u121d", + "\u12d3\u1218\u1270 \u121d\u1215\u1228\u1275" + ], + "ERAS": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u122a\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1276\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u122a", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1276", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "am", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-001.js b/vendor/assets/components/angular-i18n/angular-locale_ar-001.js new file mode 100644 index 000000000..944fc470f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-001.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-001", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-ae.js b/vendor/assets/components/angular-i18n/angular-locale_ar-ae.js new file mode 100644 index 000000000..ad20824a5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-ae.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-ae", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-bh.js b/vendor/assets/components/angular-i18n/angular-locale_ar-bh.js new file mode 100644 index 000000000..0bb385907 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-bh.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-bh", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-dj.js b/vendor/assets/components/angular-i18n/angular-locale_ar-dj.js new file mode 100644 index 000000000..fcedd80bc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-dj.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Fdj", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-dj", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-dz.js b/vendor/assets/components/angular-i18n/angular-locale_ar-dz.js new file mode 100644 index 000000000..372ed13f8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-dz.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u062c\u0627\u0646\u0641\u064a", + "\u0641\u064a\u0641\u0631\u064a", + "\u0645\u0627\u0631\u0633", + "\u0623\u0641\u0631\u064a\u0644", + "\u0645\u0627\u064a", + "\u062c\u0648\u0627\u0646", + "\u062c\u0648\u064a\u0644\u064a\u0629", + "\u0623\u0648\u062a", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u062c\u0627\u0646\u0641\u064a", + "\u0641\u064a\u0641\u0631\u064a", + "\u0645\u0627\u0631\u0633", + "\u0623\u0641\u0631\u064a\u0644", + "\u0645\u0627\u064a", + "\u062c\u0648\u0627\u0646", + "\u062c\u0648\u064a\u0644\u064a\u0629", + "\u0623\u0648\u062a", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "y/MM/dd h:mm:ss a", + "mediumDate": "y/MM/dd", + "mediumTime": "h:mm:ss a", + "short": "y/M/d h:mm a", + "shortDate": "y/M/d", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-dz", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-eg.js b/vendor/assets/components/angular-i18n/angular-locale_ar-eg.js new file mode 100644 index 000000000..7458ac11e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-eg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-eg", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-eh.js b/vendor/assets/components/angular-i18n/angular-locale_ar-eh.js new file mode 100644 index 000000000..446489708 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-eh.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-eh", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-er.js b/vendor/assets/components/angular-i18n/angular-locale_ar-er.js new file mode 100644 index 000000000..94d5d80f0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-er.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-er", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-il.js b/vendor/assets/components/angular-i18n/angular-locale_ar-il.js new file mode 100644 index 000000000..8d1310db5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-il.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20aa", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-il", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-iq.js b/vendor/assets/components/angular-i18n/angular-locale_ar-iq.js new file mode 100644 index 000000000..477e06202 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-iq.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-iq", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-jo.js b/vendor/assets/components/angular-i18n/angular-locale_ar-jo.js new file mode 100644 index 000000000..d1fe0e866 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-jo.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-jo", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-km.js b/vendor/assets/components/angular-i18n/angular-locale_ar-km.js new file mode 100644 index 000000000..2ee2ad825 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-km.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CF", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-km", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-kw.js b/vendor/assets/components/angular-i18n/angular-locale_ar-kw.js new file mode 100644 index 000000000..bb501be82 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-kw.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-kw", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-lb.js b/vendor/assets/components/angular-i18n/angular-locale_ar-lb.js new file mode 100644 index 000000000..248181ecb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-lb.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "L\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-lb", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-ly.js b/vendor/assets/components/angular-i18n/angular-locale_ar-ly.js new file mode 100644 index 000000000..dd90d3e1f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-ly.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-ly", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-ma.js b/vendor/assets/components/angular-i18n/angular-locale_ar-ma.js new file mode 100644 index 000000000..75af34bd9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-ma.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648\u0632", + "\u063a\u0634\u062a", + "\u0634\u062a\u0646\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0646\u0628\u0631", + "\u062f\u062c\u0646\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648\u0632", + "\u063a\u0634\u062a", + "\u0634\u062a\u0646\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0646\u0628\u0631", + "\u062f\u062c\u0646\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "y/MM/dd h:mm:ss a", + "mediumDate": "y/MM/dd", + "mediumTime": "h:mm:ss a", + "short": "y/M/d h:mm a", + "shortDate": "y/M/d", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-ma", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-mr.js b/vendor/assets/components/angular-i18n/angular-locale_ar-mr.js new file mode 100644 index 000000000..66a20dbbe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-mr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0625\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0634\u062a", + "\u0634\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u062c\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0625\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0634\u062a", + "\u0634\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u062c\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MRO", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-mr", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-om.js b/vendor/assets/components/angular-i18n/angular-locale_ar-om.js new file mode 100644 index 000000000..772719390 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-om.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-om", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-ps.js b/vendor/assets/components/angular-i18n/angular-locale_ar-ps.js new file mode 100644 index 000000000..25b53e00a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-ps.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20aa", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-ps", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-qa.js b/vendor/assets/components/angular-i18n/angular-locale_ar-qa.js new file mode 100644 index 000000000..c8aaa4d81 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-qa.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ar-qa", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-sa.js b/vendor/assets/components/angular-i18n/angular-locale_ar-sa.js new file mode 100644 index 000000000..fd2e71754 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-sa.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ar-sa", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-sd.js b/vendor/assets/components/angular-i18n/angular-locale_ar-sd.js new file mode 100644 index 000000000..95ee8367c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-sd.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SDG", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-sd", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-so.js b/vendor/assets/components/angular-i18n/angular-locale_ar-so.js new file mode 100644 index 000000000..b485b3ffc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-so.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SOS", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-so", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-ss.js b/vendor/assets/components/angular-i18n/angular-locale_ar-ss.js new file mode 100644 index 000000000..b0f0c28b1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-ss.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SSP", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-ss", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-sy.js b/vendor/assets/components/angular-i18n/angular-locale_ar-sy.js new file mode 100644 index 000000000..296f63a08 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-sy.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ar-sy", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-td.js b/vendor/assets/components/angular-i18n/angular-locale_ar-td.js new file mode 100644 index 000000000..44dd0a6c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-td.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar-td", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-tn.js b/vendor/assets/components/angular-i18n/angular-locale_ar-tn.js new file mode 100644 index 000000000..8c49a99ce --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-tn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u062c\u0627\u0646\u0641\u064a", + "\u0641\u064a\u0641\u0631\u064a", + "\u0645\u0627\u0631\u0633", + "\u0623\u0641\u0631\u064a\u0644", + "\u0645\u0627\u064a", + "\u062c\u0648\u0627\u0646", + "\u062c\u0648\u064a\u0644\u064a\u0629", + "\u0623\u0648\u062a", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u062c\u0627\u0646\u0641\u064a", + "\u0641\u064a\u0641\u0631\u064a", + "\u0645\u0627\u0631\u0633", + "\u0623\u0641\u0631\u064a\u0644", + "\u0645\u0627\u064a", + "\u062c\u0648\u0627\u0646", + "\u062c\u0648\u064a\u0644\u064a\u0629", + "\u0623\u0648\u062a", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "y/MM/dd h:mm:ss a", + "mediumDate": "y/MM/dd", + "mediumTime": "h:mm:ss a", + "short": "y/M/d h:mm a", + "shortDate": "y/M/d", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ar-tn", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar-ye.js b/vendor/assets/components/angular-i18n/angular-locale_ar-ye.js new file mode 100644 index 000000000..a43777c0c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar-ye.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ar-ye", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ar.js b/vendor/assets/components/angular-i18n/angular-locale_ar.js new file mode 100644 index 000000000..0aa96611c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ar.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", + "\u0645\u064a\u0644\u0627\u062f\u064a" + ], + "ERAS": [ + "\u0642.\u0645", + "\u0645" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "dd\u200f/MM\u200f/y h:mm:ss a", + "mediumDate": "dd\u200f/MM\u200f/y", + "mediumTime": "h:mm:ss a", + "short": "d\u200f/M\u200f/y h:mm a", + "shortDate": "d\u200f/M\u200f/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ar", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_as-in.js b/vendor/assets/components/angular-i18n/angular-locale_as-in.js new file mode 100644 index 000000000..265cb23ca --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_as-in.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u09aa\u09c2\u09f0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3", + "\u0985\u09aa\u09f0\u09be\u09b9\u09cd\u09a3" + ], + "DAY": [ + "\u09a6\u09c7\u0993\u09ac\u09be\u09f0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09f0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09f0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09f0", + "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09f0", + "\u09b6\u09c1\u0995\u09cd\u09f0\u09ac\u09be\u09f0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09f0" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09f1\u09be\u09f0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1\u09f1\u09be\u09f0\u09c0", + "\u09ae\u09be\u09f0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b7\u09cd\u099f", + "\u099b\u09c7\u09aa\u09cd\u09a4\u09c7\u09ae\u09cd\u09ac\u09f0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09f0", + "\u09a8\u09f1\u09c7\u09ae\u09cd\u09ac\u09f0", + "\u09a1\u09bf\u099a\u09c7\u09ae\u09cd\u09ac\u09f0" + ], + "SHORTDAY": [ + "\u09f0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09f0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1", + "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1", + "\u09ae\u09be\u09f0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997", + "\u09b8\u09c7\u09aa\u09cd\u099f", + "\u0985\u0995\u09cd\u099f\u09cb", + "\u09a8\u09ad\u09c7", + "\u09a1\u09bf\u09b8\u09c7" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "dd-MM-y h.mm.ss a", + "mediumDate": "dd-MM-y", + "mediumTime": "h.mm.ss a", + "short": "d-M-y h.mm. a", + "shortDate": "d-M-y", + "shortTime": "h.mm. a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "as-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_as.js b/vendor/assets/components/angular-i18n/angular-locale_as.js new file mode 100644 index 000000000..2783a23aa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_as.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u09aa\u09c2\u09f0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3", + "\u0985\u09aa\u09f0\u09be\u09b9\u09cd\u09a3" + ], + "DAY": [ + "\u09a6\u09c7\u0993\u09ac\u09be\u09f0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09f0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09f0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09f0", + "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09f0", + "\u09b6\u09c1\u0995\u09cd\u09f0\u09ac\u09be\u09f0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09f0" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09f1\u09be\u09f0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1\u09f1\u09be\u09f0\u09c0", + "\u09ae\u09be\u09f0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b7\u09cd\u099f", + "\u099b\u09c7\u09aa\u09cd\u09a4\u09c7\u09ae\u09cd\u09ac\u09f0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09f0", + "\u09a8\u09f1\u09c7\u09ae\u09cd\u09ac\u09f0", + "\u09a1\u09bf\u099a\u09c7\u09ae\u09cd\u09ac\u09f0" + ], + "SHORTDAY": [ + "\u09f0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09f0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1", + "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1", + "\u09ae\u09be\u09f0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997", + "\u09b8\u09c7\u09aa\u09cd\u099f", + "\u0985\u0995\u09cd\u099f\u09cb", + "\u09a8\u09ad\u09c7", + "\u09a1\u09bf\u09b8\u09c7" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "dd-MM-y h.mm.ss a", + "mediumDate": "dd-MM-y", + "mediumTime": "h.mm.ss a", + "short": "d-M-y h.mm. a", + "shortDate": "d-M-y", + "shortTime": "h.mm. a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "as", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_asa-tz.js b/vendor/assets/components/angular-i18n/angular-locale_asa-tz.js new file mode 100644 index 000000000..a83ddecf3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_asa-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "icheheavo", + "ichamthi" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla yakwe Yethu", + "Baada yakwe Yethu" + ], + "ERAS": [ + "KM", + "BM" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Ijm", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "asa-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_asa.js b/vendor/assets/components/angular-i18n/angular-locale_asa.js new file mode 100644 index 000000000..136ae3359 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_asa.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "icheheavo", + "ichamthi" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla yakwe Yethu", + "Baada yakwe Yethu" + ], + "ERAS": [ + "KM", + "BM" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Ijm", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "asa", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ast-es.js b/vendor/assets/components/angular-i18n/angular-locale_ast-es.js new file mode 100644 index 000000000..0fe4b100e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ast-es.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingu", + "llunes", + "martes", + "mi\u00e9rcoles", + "xueves", + "vienres", + "s\u00e1badu" + ], + "ERANAMES": [ + "a.C.", + "d.C." + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "de xineru", + "de febreru", + "de marzu", + "d\u2019abril", + "de mayu", + "de xunu", + "de xunetu", + "d\u2019agostu", + "de setiembre", + "d\u2019ochobre", + "de payares", + "d\u2019avientu" + ], + "SHORTDAY": [ + "dom", + "llu", + "mar", + "mie", + "xue", + "vie", + "sab" + ], + "SHORTMONTH": [ + "xin", + "feb", + "mar", + "abr", + "may", + "xun", + "xnt", + "ago", + "set", + "och", + "pay", + "avi" + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ast-es", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ast.js b/vendor/assets/components/angular-i18n/angular-locale_ast.js new file mode 100644 index 000000000..68e340cc5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ast.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingu", + "llunes", + "martes", + "mi\u00e9rcoles", + "xueves", + "vienres", + "s\u00e1badu" + ], + "ERANAMES": [ + "a.C.", + "d.C." + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "de xineru", + "de febreru", + "de marzu", + "d\u2019abril", + "de mayu", + "de xunu", + "de xunetu", + "d\u2019agostu", + "de setiembre", + "d\u2019ochobre", + "de payares", + "d\u2019avientu" + ], + "SHORTDAY": [ + "dom", + "llu", + "mar", + "mie", + "xue", + "vie", + "sab" + ], + "SHORTMONTH": [ + "xin", + "feb", + "mar", + "abr", + "may", + "xun", + "xnt", + "ago", + "set", + "och", + "pay", + "avi" + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ast", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_az-cyrl-az.js b/vendor/assets/components/angular-i18n/angular-locale_az-cyrl-az.js new file mode 100644 index 000000000..1faf125ab --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_az-cyrl-az.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0431\u0430\u0437\u0430\u0440", + "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9", + "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u04b9\u04af\u043c\u04d9", + "\u0448\u04d9\u043d\u0431\u04d9" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u0458\u0430\u043d\u0432\u0430\u0440", + "\u0444\u0435\u0432\u0440\u0430\u043b", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0435\u043b", + "\u043c\u0430\u0439", + "\u0438\u0458\u0443\u043d", + "\u0438\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440", + "\u043e\u043a\u0442\u0458\u0430\u0431\u0440", + "\u043d\u043e\u0458\u0430\u0431\u0440", + "\u0434\u0435\u043a\u0430\u0431\u0440" + ], + "SHORTDAY": [ + "\u0431\u0430\u0437\u0430\u0440", + "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9", + "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u04b9\u04af\u043c\u04d9", + "\u0448\u04d9\u043d\u0431\u04d9" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d\u0432\u0430\u0440", + "\u0444\u0435\u0432\u0440\u0430\u043b", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0435\u043b", + "\u043c\u0430\u0439", + "\u0438\u0458\u0443\u043d", + "\u0438\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440", + "\u043e\u043a\u0442\u0458\u0430\u0431\u0440", + "\u043d\u043e\u0458\u0430\u0431\u0440", + "\u0434\u0435\u043a\u0430\u0431\u0440" + ], + "fullDate": "EEEE, d, MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "man.", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "az-cyrl-az", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_az-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_az-cyrl.js new file mode 100644 index 000000000..d8d4cd1f5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_az-cyrl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0431\u0430\u0437\u0430\u0440", + "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9", + "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u04b9\u04af\u043c\u04d9", + "\u0448\u04d9\u043d\u0431\u04d9" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u0458\u0430\u043d\u0432\u0430\u0440", + "\u0444\u0435\u0432\u0440\u0430\u043b", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0435\u043b", + "\u043c\u0430\u0439", + "\u0438\u0458\u0443\u043d", + "\u0438\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440", + "\u043e\u043a\u0442\u0458\u0430\u0431\u0440", + "\u043d\u043e\u0458\u0430\u0431\u0440", + "\u0434\u0435\u043a\u0430\u0431\u0440" + ], + "SHORTDAY": [ + "\u0431\u0430\u0437\u0430\u0440", + "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9", + "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b", + "\u04b9\u04af\u043c\u04d9", + "\u0448\u04d9\u043d\u0431\u04d9" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d\u0432\u0430\u0440", + "\u0444\u0435\u0432\u0440\u0430\u043b", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0435\u043b", + "\u043c\u0430\u0439", + "\u0438\u0458\u0443\u043d", + "\u0438\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440", + "\u043e\u043a\u0442\u0458\u0430\u0431\u0440", + "\u043d\u043e\u0458\u0430\u0431\u0440", + "\u0434\u0435\u043a\u0430\u0431\u0440" + ], + "fullDate": "EEEE, d, MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "az-cyrl", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_az-latn-az.js b/vendor/assets/components/angular-i18n/angular-locale_az-latn-az.js new file mode 100644 index 000000000..c1d645d71 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_az-latn-az.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "bazar", + "bazar ert\u0259si", + "\u00e7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131", + "\u00e7\u0259r\u015f\u0259nb\u0259", + "c\u00fcm\u0259 ax\u015fam\u0131", + "c\u00fcm\u0259", + "\u015f\u0259nb\u0259" + ], + "ERANAMES": [ + "eram\u0131zdan \u0259vv\u0259l", + "bizim eram\u0131z\u0131n" + ], + "ERAS": [ + "e.\u0259.", + "b.e." + ], + "MONTH": [ + "yanvar", + "fevral", + "mart", + "aprel", + "may", + "iyun", + "iyul", + "avqust", + "sentyabr", + "oktyabr", + "noyabr", + "dekabr" + ], + "SHORTDAY": [ + "B.", + "B.E.", + "\u00c7.A.", + "\u00c7.", + "C.A.", + "C.", + "\u015e." + ], + "SHORTMONTH": [ + "yan", + "fev", + "mar", + "apr", + "may", + "iyn", + "iyl", + "avq", + "sen", + "okt", + "noy", + "dek" + ], + "fullDate": "d MMMM y, EEEE", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "man.", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "az-latn-az", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_az-latn.js b/vendor/assets/components/angular-i18n/angular-locale_az-latn.js new file mode 100644 index 000000000..baa723600 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_az-latn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "bazar", + "bazar ert\u0259si", + "\u00e7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131", + "\u00e7\u0259r\u015f\u0259nb\u0259", + "c\u00fcm\u0259 ax\u015fam\u0131", + "c\u00fcm\u0259", + "\u015f\u0259nb\u0259" + ], + "ERANAMES": [ + "eram\u0131zdan \u0259vv\u0259l", + "bizim eram\u0131z\u0131n" + ], + "ERAS": [ + "e.\u0259.", + "b.e." + ], + "MONTH": [ + "yanvar", + "fevral", + "mart", + "aprel", + "may", + "iyun", + "iyul", + "avqust", + "sentyabr", + "oktyabr", + "noyabr", + "dekabr" + ], + "SHORTDAY": [ + "B.", + "B.E.", + "\u00c7.A.", + "\u00c7.", + "C.A.", + "C.", + "\u015e." + ], + "SHORTMONTH": [ + "yan", + "fev", + "mar", + "apr", + "may", + "iyn", + "iyl", + "avq", + "sen", + "okt", + "noy", + "dek" + ], + "fullDate": "d MMMM y, EEEE", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "az-latn", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_az.js b/vendor/assets/components/angular-i18n/angular-locale_az.js new file mode 100644 index 000000000..2221341f9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_az.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "bazar", + "bazar ert\u0259si", + "\u00e7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131", + "\u00e7\u0259r\u015f\u0259nb\u0259", + "c\u00fcm\u0259 ax\u015fam\u0131", + "c\u00fcm\u0259", + "\u015f\u0259nb\u0259" + ], + "ERANAMES": [ + "eram\u0131zdan \u0259vv\u0259l", + "bizim eram\u0131z\u0131n" + ], + "ERAS": [ + "e.\u0259.", + "b.e." + ], + "MONTH": [ + "yanvar", + "fevral", + "mart", + "aprel", + "may", + "iyun", + "iyul", + "avqust", + "sentyabr", + "oktyabr", + "noyabr", + "dekabr" + ], + "SHORTDAY": [ + "B.", + "B.E.", + "\u00c7.A.", + "\u00c7.", + "C.A.", + "C.", + "\u015e." + ], + "SHORTMONTH": [ + "yan", + "fev", + "mar", + "apr", + "may", + "iyn", + "iyl", + "avq", + "sen", + "okt", + "noy", + "dek" + ], + "fullDate": "d MMMM y, EEEE", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "man.", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "az", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bas-cm.js b/vendor/assets/components/angular-i18n/angular-locale_bas-cm.js new file mode 100644 index 000000000..0743a3df1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bas-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "I bik\u025b\u0302gl\u00e0", + "I \u0253ugaj\u0254p" + ], + "DAY": [ + "\u014bgw\u00e0 n\u0254\u0302y", + "\u014bgw\u00e0 nja\u014bgumba", + "\u014bgw\u00e0 \u00fbm", + "\u014bgw\u00e0 \u014bg\u00ea", + "\u014bgw\u00e0 mb\u0254k", + "\u014bgw\u00e0 k\u0254\u0254", + "\u014bgw\u00e0 j\u00f4n" + ], + "ERANAMES": [ + "bis\u016b bi Yes\u00f9 Kr\u01d0st\u00f2", + "i mb\u016bs Yes\u00f9 Kr\u01d0st\u00f2" + ], + "ERAS": [ + "b.Y.K", + "m.Y.K" + ], + "MONTH": [ + "K\u0254nd\u0254\u014b", + "M\u00e0c\u025b\u0302l", + "M\u00e0t\u00f9mb", + "M\u00e0top", + "M\u0300puy\u025b", + "H\u00ecl\u00f2nd\u025b\u0300", + "Nj\u00e8b\u00e0", + "H\u00ecka\u014b", + "D\u00ecp\u0254\u0300s", + "B\u00ec\u00f2\u00f4m", + "M\u00e0y\u025bs\u00e8p", + "L\u00ecbuy li \u0144y\u00e8e" + ], + "SHORTDAY": [ + "n\u0254y", + "nja", + "uum", + "\u014bge", + "mb\u0254", + "k\u0254\u0254", + "jon" + ], + "SHORTMONTH": [ + "k\u0254n", + "mac", + "mat", + "mto", + "mpu", + "hil", + "nje", + "hik", + "dip", + "bio", + "may", + "li\u0253" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bas-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bas.js b/vendor/assets/components/angular-i18n/angular-locale_bas.js new file mode 100644 index 000000000..b3b378ab7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bas.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "I bik\u025b\u0302gl\u00e0", + "I \u0253ugaj\u0254p" + ], + "DAY": [ + "\u014bgw\u00e0 n\u0254\u0302y", + "\u014bgw\u00e0 nja\u014bgumba", + "\u014bgw\u00e0 \u00fbm", + "\u014bgw\u00e0 \u014bg\u00ea", + "\u014bgw\u00e0 mb\u0254k", + "\u014bgw\u00e0 k\u0254\u0254", + "\u014bgw\u00e0 j\u00f4n" + ], + "ERANAMES": [ + "bis\u016b bi Yes\u00f9 Kr\u01d0st\u00f2", + "i mb\u016bs Yes\u00f9 Kr\u01d0st\u00f2" + ], + "ERAS": [ + "b.Y.K", + "m.Y.K" + ], + "MONTH": [ + "K\u0254nd\u0254\u014b", + "M\u00e0c\u025b\u0302l", + "M\u00e0t\u00f9mb", + "M\u00e0top", + "M\u0300puy\u025b", + "H\u00ecl\u00f2nd\u025b\u0300", + "Nj\u00e8b\u00e0", + "H\u00ecka\u014b", + "D\u00ecp\u0254\u0300s", + "B\u00ec\u00f2\u00f4m", + "M\u00e0y\u025bs\u00e8p", + "L\u00ecbuy li \u0144y\u00e8e" + ], + "SHORTDAY": [ + "n\u0254y", + "nja", + "uum", + "\u014bge", + "mb\u0254", + "k\u0254\u0254", + "jon" + ], + "SHORTMONTH": [ + "k\u0254n", + "mac", + "mat", + "mto", + "mpu", + "hil", + "nje", + "hik", + "dip", + "bio", + "may", + "li\u0253" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bas", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_be-by.js b/vendor/assets/components/angular-i18n/angular-locale_be-by.js new file mode 100644 index 000000000..c02ebe3d0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_be-by.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u0430 \u043f\u0430\u043b\u0443\u0434\u043d\u044f", + "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u043b\u0443\u0434\u043d\u044f" + ], + "DAY": [ + "\u043d\u044f\u0434\u0437\u0435\u043b\u044f", + "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a", + "\u0430\u045e\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0435\u0440\u0430\u0434\u0430", + "\u0447\u0430\u0446\u0432\u0435\u0440", + "\u043f\u044f\u0442\u043d\u0456\u0446\u0430", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u0430 \u043d.\u044d.", + "\u043d.\u044d." + ], + "ERAS": [ + "\u0434\u0430 \u043d.\u044d.", + "\u043d.\u044d." + ], + "MONTH": [ + "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f", + "\u043b\u044e\u0442\u0430\u0433\u0430", + "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430", + "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430", + "\u043c\u0430\u044f", + "\u0447\u044d\u0440\u0432\u0435\u043d\u044f", + "\u043b\u0456\u043f\u0435\u043d\u044f", + "\u0436\u043d\u0456\u045e\u043d\u044f", + "\u0432\u0435\u0440\u0430\u0441\u043d\u044f", + "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430", + "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430", + "\u0441\u043d\u0435\u0436\u043d\u044f" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0430\u045e", + "\u0441\u0440", + "\u0447\u0446", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0442\u0443", + "\u043b\u044e\u0442", + "\u0441\u0430\u043a", + "\u043a\u0440\u0430", + "\u043c\u0430\u044f", + "\u0447\u044d\u0440", + "\u043b\u0456\u043f", + "\u0436\u043d\u0456", + "\u0432\u0435\u0440", + "\u043a\u0430\u0441", + "\u043b\u0456\u0441", + "\u0441\u043d\u0435" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d.M.y HH.mm.ss", + "mediumDate": "d.M.y", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy HH.mm", + "shortDate": "d.M.yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "BYR", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "be-by", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_be.js b/vendor/assets/components/angular-i18n/angular-locale_be.js new file mode 100644 index 000000000..409e77db7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_be.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u0430 \u043f\u0430\u043b\u0443\u0434\u043d\u044f", + "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u043b\u0443\u0434\u043d\u044f" + ], + "DAY": [ + "\u043d\u044f\u0434\u0437\u0435\u043b\u044f", + "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a", + "\u0430\u045e\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0435\u0440\u0430\u0434\u0430", + "\u0447\u0430\u0446\u0432\u0435\u0440", + "\u043f\u044f\u0442\u043d\u0456\u0446\u0430", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u0430 \u043d.\u044d.", + "\u043d.\u044d." + ], + "ERAS": [ + "\u0434\u0430 \u043d.\u044d.", + "\u043d.\u044d." + ], + "MONTH": [ + "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f", + "\u043b\u044e\u0442\u0430\u0433\u0430", + "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430", + "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430", + "\u043c\u0430\u044f", + "\u0447\u044d\u0440\u0432\u0435\u043d\u044f", + "\u043b\u0456\u043f\u0435\u043d\u044f", + "\u0436\u043d\u0456\u045e\u043d\u044f", + "\u0432\u0435\u0440\u0430\u0441\u043d\u044f", + "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430", + "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430", + "\u0441\u043d\u0435\u0436\u043d\u044f" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0430\u045e", + "\u0441\u0440", + "\u0447\u0446", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0442\u0443", + "\u043b\u044e\u0442", + "\u0441\u0430\u043a", + "\u043a\u0440\u0430", + "\u043c\u0430\u044f", + "\u0447\u044d\u0440", + "\u043b\u0456\u043f", + "\u0436\u043d\u0456", + "\u0432\u0435\u0440", + "\u043a\u0430\u0441", + "\u043b\u0456\u0441", + "\u0441\u043d\u0435" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d.M.y HH.mm.ss", + "mediumDate": "d.M.y", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy HH.mm", + "shortDate": "d.M.yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "BYR", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "be", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bem-zm.js b/vendor/assets/components/angular-i18n/angular-locale_bem-zm.js new file mode 100644 index 000000000..ce73e2e51 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bem-zm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "uluchelo", + "akasuba" + ], + "DAY": [ + "Pa Mulungu", + "Palichimo", + "Palichibuli", + "Palichitatu", + "Palichine", + "Palichisano", + "Pachibelushi" + ], + "ERANAMES": [ + "Before Yesu", + "After Yesu" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Epreo", + "Mei", + "Juni", + "Julai", + "Ogasti", + "Septemba", + "Oktoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Pa Mulungu", + "Palichimo", + "Palichibuli", + "Palichitatu", + "Palichine", + "Palichisano", + "Pachibelushi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Epr", + "Mei", + "Jun", + "Jul", + "Oga", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "ZMW", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "bem-zm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bem.js b/vendor/assets/components/angular-i18n/angular-locale_bem.js new file mode 100644 index 000000000..04fdc27a5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bem.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "uluchelo", + "akasuba" + ], + "DAY": [ + "Pa Mulungu", + "Palichimo", + "Palichibuli", + "Palichitatu", + "Palichine", + "Palichisano", + "Pachibelushi" + ], + "ERANAMES": [ + "Before Yesu", + "After Yesu" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Epreo", + "Mei", + "Juni", + "Julai", + "Ogasti", + "Septemba", + "Oktoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Pa Mulungu", + "Palichimo", + "Palichibuli", + "Palichitatu", + "Palichine", + "Palichisano", + "Pachibelushi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Epr", + "Mei", + "Jun", + "Jul", + "Oga", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "ZMW", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "bem", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bez-tz.js b/vendor/assets/components/angular-i18n/angular-locale_bez-tz.js new file mode 100644 index 000000000..308629bec --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bez-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pamilau", + "pamunyi" + ], + "DAY": [ + "pa mulungu", + "pa shahuviluha", + "pa hivili", + "pa hidatu", + "pa hitayi", + "pa hihanu", + "pa shahulembela" + ], + "ERANAMES": [ + "Kabla ya Mtwaa", + "Baada ya Mtwaa" + ], + "ERAS": [ + "KM", + "BM" + ], + "MONTH": [ + "pa mwedzi gwa hutala", + "pa mwedzi gwa wuvili", + "pa mwedzi gwa wudatu", + "pa mwedzi gwa wutai", + "pa mwedzi gwa wuhanu", + "pa mwedzi gwa sita", + "pa mwedzi gwa saba", + "pa mwedzi gwa nane", + "pa mwedzi gwa tisa", + "pa mwedzi gwa kumi", + "pa mwedzi gwa kumi na moja", + "pa mwedzi gwa kumi na mbili" + ], + "SHORTDAY": [ + "Mul", + "Vil", + "Hiv", + "Hid", + "Hit", + "Hih", + "Lem" + ], + "SHORTMONTH": [ + "Hut", + "Vil", + "Dat", + "Tai", + "Han", + "Sit", + "Sab", + "Nan", + "Tis", + "Kum", + "Kmj", + "Kmb" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "bez-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bez.js b/vendor/assets/components/angular-i18n/angular-locale_bez.js new file mode 100644 index 000000000..38bba694e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bez.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pamilau", + "pamunyi" + ], + "DAY": [ + "pa mulungu", + "pa shahuviluha", + "pa hivili", + "pa hidatu", + "pa hitayi", + "pa hihanu", + "pa shahulembela" + ], + "ERANAMES": [ + "Kabla ya Mtwaa", + "Baada ya Mtwaa" + ], + "ERAS": [ + "KM", + "BM" + ], + "MONTH": [ + "pa mwedzi gwa hutala", + "pa mwedzi gwa wuvili", + "pa mwedzi gwa wudatu", + "pa mwedzi gwa wutai", + "pa mwedzi gwa wuhanu", + "pa mwedzi gwa sita", + "pa mwedzi gwa saba", + "pa mwedzi gwa nane", + "pa mwedzi gwa tisa", + "pa mwedzi gwa kumi", + "pa mwedzi gwa kumi na moja", + "pa mwedzi gwa kumi na mbili" + ], + "SHORTDAY": [ + "Mul", + "Vil", + "Hiv", + "Hid", + "Hit", + "Hih", + "Lem" + ], + "SHORTMONTH": [ + "Hut", + "Vil", + "Dat", + "Tai", + "Han", + "Sit", + "Sab", + "Nan", + "Tis", + "Kum", + "Kmj", + "Kmb" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "bez", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bg-bg.js b/vendor/assets/components/angular-i18n/angular-locale_bg-bg.js new file mode 100644 index 000000000..ace27ee71 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bg-bg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440.\u043e\u0431.", + "\u0441\u043b.\u043e\u0431." + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u044f\u0434\u0430", + "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", + "\u043f\u0435\u0442\u044a\u043a", + "\u0441\u044a\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u043f\u0440\u0435\u0434\u0438 \u0425\u0440\u0438\u0441\u0442\u0430", + "\u0441\u043b\u0435\u0434 \u0425\u0440\u0438\u0441\u0442\u0430" + ], + "ERAS": [ + "\u043f\u0440.\u0425\u0440.", + "\u0441\u043b.\u0425\u0440." + ], + "MONTH": [ + "\u044f\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d.MM.y '\u0433'. H:mm:ss", + "mediumDate": "d.MM.y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "d.MM.yy '\u0433'. H:mm", + "shortDate": "d.MM.yy '\u0433'.", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "lev", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bg-bg", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bg.js b/vendor/assets/components/angular-i18n/angular-locale_bg.js new file mode 100644 index 000000000..702f19e76 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440.\u043e\u0431.", + "\u0441\u043b.\u043e\u0431." + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u044f\u0434\u0430", + "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", + "\u043f\u0435\u0442\u044a\u043a", + "\u0441\u044a\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u043f\u0440\u0435\u0434\u0438 \u0425\u0440\u0438\u0441\u0442\u0430", + "\u0441\u043b\u0435\u0434 \u0425\u0440\u0438\u0441\u0442\u0430" + ], + "ERAS": [ + "\u043f\u0440.\u0425\u0440.", + "\u0441\u043b.\u0425\u0440." + ], + "MONTH": [ + "\u044f\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d.MM.y '\u0433'. H:mm:ss", + "mediumDate": "d.MM.y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "d.MM.yy '\u0433'. H:mm", + "shortDate": "d.MM.yy '\u0433'.", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "lev", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bg", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bm-latn-ml.js b/vendor/assets/components/angular-i18n/angular-locale_bm-latn-ml.js new file mode 100644 index 000000000..a285f30c0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bm-latn-ml.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "kari", + "nt\u025bn\u025b", + "tarata", + "araba", + "alamisa", + "juma", + "sibiri" + ], + "ERANAMES": [ + "jezu krisiti \u0272\u025b", + "jezu krisiti mink\u025b" + ], + "ERAS": [ + "J.-C. \u0272\u025b", + "ni J.-C." + ], + "MONTH": [ + "zanwuye", + "feburuye", + "marisi", + "awirili", + "m\u025b", + "zuw\u025bn", + "zuluye", + "uti", + "s\u025btanburu", + "\u0254kut\u0254buru", + "nowanburu", + "desanburu" + ], + "SHORTDAY": [ + "kar", + "nt\u025b", + "tar", + "ara", + "ala", + "jum", + "sib" + ], + "SHORTMONTH": [ + "zan", + "feb", + "mar", + "awi", + "m\u025b", + "zuw", + "zul", + "uti", + "s\u025bt", + "\u0254ku", + "now", + "des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "bm-latn-ml", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bm-latn.js b/vendor/assets/components/angular-i18n/angular-locale_bm-latn.js new file mode 100644 index 000000000..3befe24bc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bm-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "kari", + "nt\u025bn\u025b", + "tarata", + "araba", + "alamisa", + "juma", + "sibiri" + ], + "ERANAMES": [ + "jezu krisiti \u0272\u025b", + "jezu krisiti mink\u025b" + ], + "ERAS": [ + "J.-C. \u0272\u025b", + "ni J.-C." + ], + "MONTH": [ + "zanwuye", + "feburuye", + "marisi", + "awirili", + "m\u025b", + "zuw\u025bn", + "zuluye", + "uti", + "s\u025btanburu", + "\u0254kut\u0254buru", + "nowanburu", + "desanburu" + ], + "SHORTDAY": [ + "kar", + "nt\u025b", + "tar", + "ara", + "ala", + "jum", + "sib" + ], + "SHORTMONTH": [ + "zan", + "feb", + "mar", + "awi", + "m\u025b", + "zuw", + "zul", + "uti", + "s\u025bt", + "\u0254ku", + "now", + "des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "bm-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bm-ml.js b/vendor/assets/components/angular-i18n/angular-locale_bm-ml.js new file mode 100644 index 000000000..1fd185271 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bm-ml.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "kari", + "nt\u025bn\u025b", + "tarata", + "araba", + "alamisa", + "juma", + "sibiri" + ], + "MONTH": [ + "zanwuye", + "feburuye", + "marisi", + "awirili", + "m\u025b", + "zuw\u025bn", + "zuluye", + "uti", + "s\u025btanburu", + "\u0254kut\u0254buru", + "nowanburu", + "desanburu" + ], + "SHORTDAY": [ + "kar", + "nt\u025b", + "tar", + "ara", + "ala", + "jum", + "sib" + ], + "SHORTMONTH": [ + "zan", + "feb", + "mar", + "awi", + "m\u025b", + "zuw", + "zul", + "uti", + "s\u025bt", + "\u0254ku", + "now", + "des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "bm-ml", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bm.js b/vendor/assets/components/angular-i18n/angular-locale_bm.js new file mode 100644 index 000000000..57cae972c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "kari", + "nt\u025bn\u025b", + "tarata", + "araba", + "alamisa", + "juma", + "sibiri" + ], + "ERANAMES": [ + "jezu krisiti \u0272\u025b", + "jezu krisiti mink\u025b" + ], + "ERAS": [ + "J.-C. \u0272\u025b", + "ni J.-C." + ], + "MONTH": [ + "zanwuye", + "feburuye", + "marisi", + "awirili", + "m\u025b", + "zuw\u025bn", + "zuluye", + "uti", + "s\u025btanburu", + "\u0254kut\u0254buru", + "nowanburu", + "desanburu" + ], + "SHORTDAY": [ + "kar", + "nt\u025b", + "tar", + "ara", + "ala", + "jum", + "sib" + ], + "SHORTMONTH": [ + "zan", + "feb", + "mar", + "awi", + "m\u025b", + "zuw", + "zul", + "uti", + "s\u025bt", + "\u0254ku", + "now", + "des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "bm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bn-bd.js b/vendor/assets/components/angular-i18n/angular-locale_bn-bd.js new file mode 100644 index 000000000..56136f973 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bn-bd.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "ERANAMES": [ + "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", + "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6" + ], + "ERAS": [ + "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", + "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u09f3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "bn-bd", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bn-in.js b/vendor/assets/components/angular-i18n/angular-locale_bn-in.js new file mode 100644 index 000000000..cea77c712 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bn-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "ERANAMES": [ + "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", + "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6" + ], + "ERAS": [ + "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", + "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "bn-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bn.js b/vendor/assets/components/angular-i18n/angular-locale_bn.js new file mode 100644 index 000000000..6dbf0c797 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "ERANAMES": [ + "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", + "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6" + ], + "ERAS": [ + "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", + "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u09f3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "bn", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bo-cn.js b/vendor/assets/components/angular-i18n/angular-locale_bo-cn.js new file mode 100644 index 000000000..77b697ca0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bo-cn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0f66\u0f94\u0f0b\u0f51\u0fb2\u0f7c\u0f0b", + "\u0f55\u0fb1\u0f72\u0f0b\u0f51\u0fb2\u0f7c\u0f0b" + ], + "DAY": [ + "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b" + ], + "ERANAMES": [ + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d", + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d" + ], + "ERAS": [ + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d", + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d" + ], + "MONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b" + ], + "SHORTDAY": [ + "\u0f49\u0f72\u0f0b\u0f58\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b" + ], + "SHORTMONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f21", + "\u0f5f\u0fb3\u0f0b\u0f22", + "\u0f5f\u0fb3\u0f0b\u0f23", + "\u0f5f\u0fb3\u0f0b\u0f24", + "\u0f5f\u0fb3\u0f0b\u0f25", + "\u0f5f\u0fb3\u0f0b\u0f26", + "\u0f5f\u0fb3\u0f0b\u0f27", + "\u0f5f\u0fb3\u0f0b\u0f28", + "\u0f5f\u0fb3\u0f0b\u0f29", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f20", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f21", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f22" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51", + "medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss", + "mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "bo-cn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bo-in.js b/vendor/assets/components/angular-i18n/angular-locale_bo-in.js new file mode 100644 index 000000000..99fb21d46 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bo-in.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0f66\u0f94\u0f0b\u0f51\u0fb2\u0f7c\u0f0b", + "\u0f55\u0fb1\u0f72\u0f0b\u0f51\u0fb2\u0f7c\u0f0b" + ], + "DAY": [ + "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b" + ], + "ERANAMES": [ + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d", + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d" + ], + "ERAS": [ + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d", + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d" + ], + "MONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b" + ], + "SHORTDAY": [ + "\u0f49\u0f72\u0f0b\u0f58\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b" + ], + "SHORTMONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f21", + "\u0f5f\u0fb3\u0f0b\u0f22", + "\u0f5f\u0fb3\u0f0b\u0f23", + "\u0f5f\u0fb3\u0f0b\u0f24", + "\u0f5f\u0fb3\u0f0b\u0f25", + "\u0f5f\u0fb3\u0f0b\u0f26", + "\u0f5f\u0fb3\u0f0b\u0f27", + "\u0f5f\u0fb3\u0f0b\u0f28", + "\u0f5f\u0fb3\u0f0b\u0f29", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f20", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f21", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f22" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51", + "medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss", + "mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "bo-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bo.js b/vendor/assets/components/angular-i18n/angular-locale_bo.js new file mode 100644 index 000000000..a7ac22a5a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0f66\u0f94\u0f0b\u0f51\u0fb2\u0f7c\u0f0b", + "\u0f55\u0fb1\u0f72\u0f0b\u0f51\u0fb2\u0f7c\u0f0b" + ], + "DAY": [ + "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b" + ], + "ERANAMES": [ + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d", + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d" + ], + "ERAS": [ + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d", + "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d" + ], + "MONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b" + ], + "SHORTDAY": [ + "\u0f49\u0f72\u0f0b\u0f58\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b" + ], + "SHORTMONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f21", + "\u0f5f\u0fb3\u0f0b\u0f22", + "\u0f5f\u0fb3\u0f0b\u0f23", + "\u0f5f\u0fb3\u0f0b\u0f24", + "\u0f5f\u0fb3\u0f0b\u0f25", + "\u0f5f\u0fb3\u0f0b\u0f26", + "\u0f5f\u0fb3\u0f0b\u0f27", + "\u0f5f\u0fb3\u0f0b\u0f28", + "\u0f5f\u0fb3\u0f0b\u0f29", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f20", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f21", + "\u0f5f\u0fb3\u0f0b\u0f21\u0f22" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51", + "medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss", + "mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "bo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_br-fr.js b/vendor/assets/components/angular-i18n/angular-locale_br-fr.js new file mode 100644 index 000000000..c4905a56b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_br-fr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "A.M.", + "G.M." + ], + "DAY": [ + "Sul", + "Lun", + "Meurzh", + "Merc\u02bcher", + "Yaou", + "Gwener", + "Sadorn" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Genver", + "C\u02bchwevrer", + "Meurzh", + "Ebrel", + "Mae", + "Mezheven", + "Gouere", + "Eost", + "Gwengolo", + "Here", + "Du", + "Kerzu" + ], + "SHORTDAY": [ + "Sul", + "Lun", + "Meu.", + "Mer.", + "Yaou", + "Gwe.", + "Sad." + ], + "SHORTMONTH": [ + "Gen", + "C\u02bchwe", + "Meur", + "Ebr", + "Mae", + "Mezh", + "Goue", + "Eost", + "Gwen", + "Here", + "Du", + "Ker" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "br-fr", + "pluralCat": function(n, opt_precision) { if (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) { return PLURAL_CATEGORY.ONE; } if (n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) { return PLURAL_CATEGORY.TWO; } if ((n % 10 >= 3 && n % 10 <= 4 || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) { return PLURAL_CATEGORY.FEW; } if (n != 0 && n % 1000000 == 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_br.js b/vendor/assets/components/angular-i18n/angular-locale_br.js new file mode 100644 index 000000000..2f086bc79 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_br.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "A.M.", + "G.M." + ], + "DAY": [ + "Sul", + "Lun", + "Meurzh", + "Merc\u02bcher", + "Yaou", + "Gwener", + "Sadorn" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Genver", + "C\u02bchwevrer", + "Meurzh", + "Ebrel", + "Mae", + "Mezheven", + "Gouere", + "Eost", + "Gwengolo", + "Here", + "Du", + "Kerzu" + ], + "SHORTDAY": [ + "Sul", + "Lun", + "Meu.", + "Mer.", + "Yaou", + "Gwe.", + "Sad." + ], + "SHORTMONTH": [ + "Gen", + "C\u02bchwe", + "Meur", + "Ebr", + "Mae", + "Mezh", + "Goue", + "Eost", + "Gwen", + "Here", + "Du", + "Ker" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "br", + "pluralCat": function(n, opt_precision) { if (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) { return PLURAL_CATEGORY.ONE; } if (n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) { return PLURAL_CATEGORY.TWO; } if ((n % 10 >= 3 && n % 10 <= 4 || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) { return PLURAL_CATEGORY.FEW; } if (n != 0 && n % 1000000 == 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_brx-in.js b/vendor/assets/components/angular-i18n/angular-locale_brx-in.js new file mode 100644 index 000000000..010525fea --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_brx-in.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092b\u0941\u0902", + "\u092c\u0947\u0932\u093e\u0938\u0947" + ], + "DAY": [ + "\u0930\u092c\u093f\u092c\u093e\u0930", + "\u0938\u092e\u092c\u093e\u0930", + "\u092e\u0902\u0917\u0932\u092c\u093e\u0930", + "\u092c\u0941\u0926\u092c\u093e\u0930", + "\u092c\u093f\u0938\u0925\u093f\u092c\u093e\u0930", + "\u0938\u0941\u0916\u0941\u0930\u092c\u093e\u0930", + "\u0938\u0941\u0928\u093f\u092c\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928" + ], + "ERAS": [ + "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u0938", + "\u090f\u092b\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0907", + "\u0906\u0917\u0938\u094d\u0925", + "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0905\u0916\u0925\u092c\u0930", + "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930" + ], + "SHORTDAY": [ + "\u0930\u092c\u093f", + "\u0938\u092e", + "\u092e\u0902\u0917\u0932", + "\u092c\u0941\u0926", + "\u092c\u093f\u0938\u0925\u093f", + "\u0938\u0941\u0916\u0941\u0930", + "\u0938\u0941\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u0938", + "\u090f\u092b\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0907", + "\u0906\u0917\u0938\u094d\u0925", + "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0905\u0916\u0925\u092c\u0930", + "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "brx-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_brx.js b/vendor/assets/components/angular-i18n/angular-locale_brx.js new file mode 100644 index 000000000..305a72c45 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_brx.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092b\u0941\u0902", + "\u092c\u0947\u0932\u093e\u0938\u0947" + ], + "DAY": [ + "\u0930\u092c\u093f\u092c\u093e\u0930", + "\u0938\u092e\u092c\u093e\u0930", + "\u092e\u0902\u0917\u0932\u092c\u093e\u0930", + "\u092c\u0941\u0926\u092c\u093e\u0930", + "\u092c\u093f\u0938\u0925\u093f\u092c\u093e\u0930", + "\u0938\u0941\u0916\u0941\u0930\u092c\u093e\u0930", + "\u0938\u0941\u0928\u093f\u092c\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928" + ], + "ERAS": [ + "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u0938", + "\u090f\u092b\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0907", + "\u0906\u0917\u0938\u094d\u0925", + "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0905\u0916\u0925\u092c\u0930", + "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930" + ], + "SHORTDAY": [ + "\u0930\u092c\u093f", + "\u0938\u092e", + "\u092e\u0902\u0917\u0932", + "\u092c\u0941\u0926", + "\u092c\u093f\u0938\u0925\u093f", + "\u0938\u0941\u0916\u0941\u0930", + "\u0938\u0941\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u0938", + "\u090f\u092b\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0907", + "\u0906\u0917\u0938\u094d\u0925", + "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0905\u0916\u0925\u092c\u0930", + "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930", + "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "brx", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bs-cyrl-ba.js b/vendor/assets/components/angular-i18n/angular-locale_bs-cyrl-ba.js new file mode 100644 index 000000000..be48a5fd5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bs-cyrl-ba.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0438\u0458\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d\u0438", + "\u0458\u0443\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0438", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH:mm:ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH:mm:ss", + "short": "d.M.yy. HH:mm", + "shortDate": "d.M.yy.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KM", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bs-cyrl-ba", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bs-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_bs-cyrl.js new file mode 100644 index 000000000..fb211d637 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bs-cyrl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0438\u0458\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d\u0438", + "\u0458\u0443\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0438", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH:mm:ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH:mm:ss", + "short": "d.M.yy. HH:mm", + "shortDate": "d.M.yy.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bs-cyrl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bs-latn-ba.js b/vendor/assets/components/angular-i18n/angular-locale_bs-latn-ba.js new file mode 100644 index 000000000..b81830069 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bs-latn-ba.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "prije podne", + "popodne" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Prije nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "juni", + "juli", + "august", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd. MMM. y. HH:mm:ss", + "mediumDate": "dd. MMM. y.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy. HH:mm", + "shortDate": "dd.MM.yy.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KM", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bs-latn-ba", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bs-latn.js b/vendor/assets/components/angular-i18n/angular-locale_bs-latn.js new file mode 100644 index 000000000..e04b0055c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bs-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "prije podne", + "popodne" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Prije nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "juni", + "juli", + "august", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd. MMM. y. HH:mm:ss", + "mediumDate": "dd. MMM. y.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy. HH:mm", + "shortDate": "dd.MM.yy.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bs-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_bs.js b/vendor/assets/components/angular-i18n/angular-locale_bs.js new file mode 100644 index 000000000..18d4ba856 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_bs.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "prije podne", + "popodne" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Prije nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "juni", + "juli", + "august", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd. MMM. y. HH:mm:ss", + "mediumDate": "dd. MMM. y.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy. HH:mm", + "shortDate": "dd.MM.yy.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KM", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "bs", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_byn-er.js b/vendor/assets/components/angular-i18n/angular-locale_byn-er.js new file mode 100644 index 000000000..f6ee233b5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_byn-er.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u134b\u12f1\u1235 \u1303\u1265", + "\u134b\u12f1\u1235 \u12f0\u121d\u1262" + ], + "DAY": [ + "\u1230\u1295\u1260\u122d \u1245\u12f3\u12c5", + "\u1230\u1291", + "\u1230\u120a\u131d", + "\u1208\u1313 \u12c8\u122a \u1208\u1265\u12cb", + "\u12a3\u121d\u12f5", + "\u12a3\u122d\u1265", + "\u1230\u1295\u1260\u122d \u123d\u1313\u12c5" + ], + "MONTH": [ + "\u120d\u12f0\u1275\u122a", + "\u12ab\u1265\u12bd\u1265\u1272", + "\u12ad\u1265\u120b", + "\u134b\u1305\u12ba\u122a", + "\u12ad\u1262\u1245\u122a", + "\u121d\u12aa\u12a4\u120d \u1275\u131f\u1292\u122a", + "\u12b0\u122d\u12a9", + "\u121b\u122d\u12eb\u121d \u1275\u122a", + "\u12eb\u12b8\u1292 \u1218\u1233\u1245\u1208\u122a", + "\u1218\u1270\u1209", + "\u121d\u12aa\u12a4\u120d \u1218\u123d\u12c8\u122a", + "\u1270\u1215\u1233\u1235\u122a" + ], + "SHORTDAY": [ + "\u1230/\u1245", + "\u1230\u1291", + "\u1230\u120a\u131d", + "\u1208\u1313", + "\u12a3\u121d\u12f5", + "\u12a3\u122d\u1265", + "\u1230/\u123d" + ], + "SHORTMONTH": [ + "\u120d\u12f0\u1275", + "\u12ab\u1265\u12bd", + "\u12ad\u1265\u120b", + "\u134b\u1305\u12ba", + "\u12ad\u1262\u1245", + "\u121d/\u1275", + "\u12b0\u122d", + "\u121b\u122d\u12eb", + "\u12eb\u12b8\u1292", + "\u1218\u1270\u1209", + "\u121d/\u121d", + "\u1270\u1215\u1233" + ], + "fullDate": "EEEE\u1361 dd MMMM \u130d\u122d\u130b y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "byn-er", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_byn.js b/vendor/assets/components/angular-i18n/angular-locale_byn.js new file mode 100644 index 000000000..578ce6dd8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_byn.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u134b\u12f1\u1235 \u1303\u1265", + "\u134b\u12f1\u1235 \u12f0\u121d\u1262" + ], + "DAY": [ + "\u1230\u1295\u1260\u122d \u1245\u12f3\u12c5", + "\u1230\u1291", + "\u1230\u120a\u131d", + "\u1208\u1313 \u12c8\u122a \u1208\u1265\u12cb", + "\u12a3\u121d\u12f5", + "\u12a3\u122d\u1265", + "\u1230\u1295\u1260\u122d \u123d\u1313\u12c5" + ], + "MONTH": [ + "\u120d\u12f0\u1275\u122a", + "\u12ab\u1265\u12bd\u1265\u1272", + "\u12ad\u1265\u120b", + "\u134b\u1305\u12ba\u122a", + "\u12ad\u1262\u1245\u122a", + "\u121d\u12aa\u12a4\u120d \u1275\u131f\u1292\u122a", + "\u12b0\u122d\u12a9", + "\u121b\u122d\u12eb\u121d \u1275\u122a", + "\u12eb\u12b8\u1292 \u1218\u1233\u1245\u1208\u122a", + "\u1218\u1270\u1209", + "\u121d\u12aa\u12a4\u120d \u1218\u123d\u12c8\u122a", + "\u1270\u1215\u1233\u1235\u122a" + ], + "SHORTDAY": [ + "\u1230/\u1245", + "\u1230\u1291", + "\u1230\u120a\u131d", + "\u1208\u1313", + "\u12a3\u121d\u12f5", + "\u12a3\u122d\u1265", + "\u1230/\u123d" + ], + "SHORTMONTH": [ + "\u120d\u12f0\u1275", + "\u12ab\u1265\u12bd", + "\u12ad\u1265\u120b", + "\u134b\u1305\u12ba", + "\u12ad\u1262\u1245", + "\u121d/\u1275", + "\u12b0\u122d", + "\u121b\u122d\u12eb", + "\u12eb\u12b8\u1292", + "\u1218\u1270\u1209", + "\u121d/\u121d", + "\u1270\u1215\u1233" + ], + "fullDate": "EEEE\u1361 dd MMMM \u130d\u122d\u130b y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "byn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ca-ad.js b/vendor/assets/components/angular-i18n/angular-locale_ca-ad.js new file mode 100644 index 000000000..20e8ec838 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ca-ad.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "ERANAMES": [ + "abans de Crist", + "despr\u00e9s de Crist" + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gener", + "febrer", + "mar\u00e7", + "abril", + "maig", + "juny", + "juliol", + "agost", + "setembre", + "octubre", + "novembre", + "desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "gen.", + "febr.", + "mar\u00e7", + "abr.", + "maig", + "juny", + "jul.", + "ag.", + "set.", + "oct.", + "nov.", + "des." + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ca-ad", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ca-es-valencia.js b/vendor/assets/components/angular-i18n/angular-locale_ca-es-valencia.js new file mode 100644 index 000000000..afe8fd3a2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ca-es-valencia.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "ERANAMES": [ + "abans de Crist", + "despr\u00e9s de Crist" + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gener", + "febrer", + "mar\u00e7", + "abril", + "maig", + "juny", + "juliol", + "agost", + "setembre", + "octubre", + "novembre", + "desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "gen.", + "febr.", + "mar\u00e7", + "abr.", + "maig", + "juny", + "jul.", + "ag.", + "set.", + "oct.", + "nov.", + "des." + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ca-es-valencia", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ca-es.js b/vendor/assets/components/angular-i18n/angular-locale_ca-es.js new file mode 100644 index 000000000..f1570a10f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ca-es.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "ERANAMES": [ + "abans de Crist", + "despr\u00e9s de Crist" + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gener", + "febrer", + "mar\u00e7", + "abril", + "maig", + "juny", + "juliol", + "agost", + "setembre", + "octubre", + "novembre", + "desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "gen.", + "febr.", + "mar\u00e7", + "abr.", + "maig", + "juny", + "jul.", + "ag.", + "set.", + "oct.", + "nov.", + "des." + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ca-es", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ca-fr.js b/vendor/assets/components/angular-i18n/angular-locale_ca-fr.js new file mode 100644 index 000000000..4666ddc6d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ca-fr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "ERANAMES": [ + "abans de Crist", + "despr\u00e9s de Crist" + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gener", + "febrer", + "mar\u00e7", + "abril", + "maig", + "juny", + "juliol", + "agost", + "setembre", + "octubre", + "novembre", + "desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "gen.", + "febr.", + "mar\u00e7", + "abr.", + "maig", + "juny", + "jul.", + "ag.", + "set.", + "oct.", + "nov.", + "des." + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ca-fr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ca-it.js b/vendor/assets/components/angular-i18n/angular-locale_ca-it.js new file mode 100644 index 000000000..cc43209a3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ca-it.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "ERANAMES": [ + "abans de Crist", + "despr\u00e9s de Crist" + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gener", + "febrer", + "mar\u00e7", + "abril", + "maig", + "juny", + "juliol", + "agost", + "setembre", + "octubre", + "novembre", + "desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "gen.", + "febr.", + "mar\u00e7", + "abr.", + "maig", + "juny", + "jul.", + "ag.", + "set.", + "oct.", + "nov.", + "des." + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ca-it", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ca.js b/vendor/assets/components/angular-i18n/angular-locale_ca.js new file mode 100644 index 000000000..ad7fa1942 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ca.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "ERANAMES": [ + "abans de Crist", + "despr\u00e9s de Crist" + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gener", + "febrer", + "mar\u00e7", + "abril", + "maig", + "juny", + "juliol", + "agost", + "setembre", + "octubre", + "novembre", + "desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "gen.", + "febr.", + "mar\u00e7", + "abr.", + "maig", + "juny", + "jul.", + "ag.", + "set.", + "oct.", + "nov.", + "des." + ], + "fullDate": "EEEE, d MMMM 'de' y", + "longDate": "d MMMM 'de' y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ca", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_cgg-ug.js b/vendor/assets/components/angular-i18n/angular-locale_cgg-ug.js new file mode 100644 index 000000000..cd15e5356 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_cgg-ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sande", + "Orwokubanza", + "Orwakabiri", + "Orwakashatu", + "Orwakana", + "Orwakataano", + "Orwamukaaga" + ], + "ERANAMES": [ + "Kurisito Atakaijire", + "Kurisito Yaijire" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Okwokubanza", + "Okwakabiri", + "Okwakashatu", + "Okwakana", + "Okwakataana", + "Okwamukaaga", + "Okwamushanju", + "Okwamunaana", + "Okwamwenda", + "Okwaikumi", + "Okwaikumi na kumwe", + "Okwaikumi na ibiri" + ], + "SHORTDAY": [ + "SAN", + "ORK", + "OKB", + "OKS", + "OKN", + "OKT", + "OMK" + ], + "SHORTMONTH": [ + "KBZ", + "KBR", + "KST", + "KKN", + "KTN", + "KMK", + "KMS", + "KMN", + "KMW", + "KKM", + "KNK", + "KNB" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "cgg-ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_cgg.js b/vendor/assets/components/angular-i18n/angular-locale_cgg.js new file mode 100644 index 000000000..6f039cd2d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_cgg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sande", + "Orwokubanza", + "Orwakabiri", + "Orwakashatu", + "Orwakana", + "Orwakataano", + "Orwamukaaga" + ], + "ERANAMES": [ + "Kurisito Atakaijire", + "Kurisito Yaijire" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Okwokubanza", + "Okwakabiri", + "Okwakashatu", + "Okwakana", + "Okwakataana", + "Okwamukaaga", + "Okwamushanju", + "Okwamunaana", + "Okwamwenda", + "Okwaikumi", + "Okwaikumi na kumwe", + "Okwaikumi na ibiri" + ], + "SHORTDAY": [ + "SAN", + "ORK", + "OKB", + "OKS", + "OKN", + "OKT", + "OMK" + ], + "SHORTMONTH": [ + "KBZ", + "KBR", + "KST", + "KKN", + "KTN", + "KMK", + "KMS", + "KMN", + "KMW", + "KKM", + "KNK", + "KNB" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "cgg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_chr-us.js b/vendor/assets/components/angular-i18n/angular-locale_chr-us.js new file mode 100644 index 000000000..d665d762b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_chr-us.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u13cc\u13be\u13b4", + "\u13d2\u13af\u13f1\u13a2\u13d7\u13e2" + ], + "DAY": [ + "\u13a4\u13be\u13d9\u13d3\u13c6\u13cd\u13ac", + "\u13a4\u13be\u13d9\u13d3\u13c9\u13c5\u13af", + "\u13d4\u13b5\u13c1\u13a2\u13a6", + "\u13e6\u13a2\u13c1\u13a2\u13a6", + "\u13c5\u13a9\u13c1\u13a2\u13a6", + "\u13e7\u13be\u13a9\u13b6\u13cd\u13d7", + "\u13a4\u13be\u13d9\u13d3\u13c8\u13d5\u13be" + ], + "ERANAMES": [ + "\u13cf \u13e5\u13cc \u13be\u13d5\u13b2\u13cd\u13ac\u13be", + "\u13a0\u13a9\u13c3\u13ae\u13b5\u13d3\u13cd\u13d7\u13f1 \u13a0\u13d5\u13d8\u13f1\u13cd\u13ac \u13f1\u13b0\u13e9 \u13e7\u13d3\u13c2\u13b8\u13a2\u13cd\u13d7" + ], + "ERAS": [ + "\u13a4\u13d3\u13b7\u13b8", + "\u13a4\u13b6\u13d0\u13c5" + ], + "MONTH": [ + "\u13a4\u13c3\u13b8\u13d4\u13c5", + "\u13a7\u13a6\u13b5", + "\u13a0\u13c5\u13f1", + "\u13a7\u13ec\u13c2", + "\u13a0\u13c2\u13cd\u13ac\u13d8", + "\u13d5\u13ad\u13b7\u13f1", + "\u13ab\u13f0\u13c9\u13c2", + "\u13a6\u13b6\u13c2", + "\u13da\u13b5\u13cd\u13d7", + "\u13da\u13c2\u13c5\u13d7", + "\u13c5\u13d3\u13d5\u13c6", + "\u13a5\u13cd\u13a9\u13f1" + ], + "SHORTDAY": [ + "\u13c6\u13cd\u13ac", + "\u13c9\u13c5\u13af", + "\u13d4\u13b5\u13c1", + "\u13e6\u13a2\u13c1", + "\u13c5\u13a9\u13c1", + "\u13e7\u13be\u13a9", + "\u13c8\u13d5\u13be" + ], + "SHORTMONTH": [ + "\u13a4\u13c3", + "\u13a7\u13a6", + "\u13a0\u13c5", + "\u13a7\u13ec", + "\u13a0\u13c2", + "\u13d5\u13ad", + "\u13ab\u13f0", + "\u13a6\u13b6", + "\u13da\u13b5", + "\u13da\u13c2", + "\u13c5\u13d3", + "\u13a5\u13cd" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "chr-us", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_chr.js b/vendor/assets/components/angular-i18n/angular-locale_chr.js new file mode 100644 index 000000000..628176f61 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_chr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u13cc\u13be\u13b4", + "\u13d2\u13af\u13f1\u13a2\u13d7\u13e2" + ], + "DAY": [ + "\u13a4\u13be\u13d9\u13d3\u13c6\u13cd\u13ac", + "\u13a4\u13be\u13d9\u13d3\u13c9\u13c5\u13af", + "\u13d4\u13b5\u13c1\u13a2\u13a6", + "\u13e6\u13a2\u13c1\u13a2\u13a6", + "\u13c5\u13a9\u13c1\u13a2\u13a6", + "\u13e7\u13be\u13a9\u13b6\u13cd\u13d7", + "\u13a4\u13be\u13d9\u13d3\u13c8\u13d5\u13be" + ], + "ERANAMES": [ + "\u13cf \u13e5\u13cc \u13be\u13d5\u13b2\u13cd\u13ac\u13be", + "\u13a0\u13a9\u13c3\u13ae\u13b5\u13d3\u13cd\u13d7\u13f1 \u13a0\u13d5\u13d8\u13f1\u13cd\u13ac \u13f1\u13b0\u13e9 \u13e7\u13d3\u13c2\u13b8\u13a2\u13cd\u13d7" + ], + "ERAS": [ + "\u13a4\u13d3\u13b7\u13b8", + "\u13a4\u13b6\u13d0\u13c5" + ], + "MONTH": [ + "\u13a4\u13c3\u13b8\u13d4\u13c5", + "\u13a7\u13a6\u13b5", + "\u13a0\u13c5\u13f1", + "\u13a7\u13ec\u13c2", + "\u13a0\u13c2\u13cd\u13ac\u13d8", + "\u13d5\u13ad\u13b7\u13f1", + "\u13ab\u13f0\u13c9\u13c2", + "\u13a6\u13b6\u13c2", + "\u13da\u13b5\u13cd\u13d7", + "\u13da\u13c2\u13c5\u13d7", + "\u13c5\u13d3\u13d5\u13c6", + "\u13a5\u13cd\u13a9\u13f1" + ], + "SHORTDAY": [ + "\u13c6\u13cd\u13ac", + "\u13c9\u13c5\u13af", + "\u13d4\u13b5\u13c1", + "\u13e6\u13a2\u13c1", + "\u13c5\u13a9\u13c1", + "\u13e7\u13be\u13a9", + "\u13c8\u13d5\u13be" + ], + "SHORTMONTH": [ + "\u13a4\u13c3", + "\u13a7\u13a6", + "\u13a0\u13c5", + "\u13a7\u13ec", + "\u13a0\u13c2", + "\u13d5\u13ad", + "\u13ab\u13f0", + "\u13a6\u13b6", + "\u13da\u13b5", + "\u13da\u13c2", + "\u13c5\u13d3", + "\u13a5\u13cd" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "chr", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb-arab-iq.js b/vendor/assets/components/angular-i18n/angular-locale_ckb-arab-iq.js new file mode 100644 index 000000000..a30c30abc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb-arab-iq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb-arab-iq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb-arab-ir.js b/vendor/assets/components/angular-i18n/angular-locale_ckb-arab-ir.js new file mode 100644 index 000000000..3e335567e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb-arab-ir.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb-arab-ir", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb-arab.js b/vendor/assets/components/angular-i18n/angular-locale_ckb-arab.js new file mode 100644 index 000000000..f0d4a8f74 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb-arab.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb-arab", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb-iq.js b/vendor/assets/components/angular-i18n/angular-locale_ckb-iq.js new file mode 100644 index 000000000..4910f5d62 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb-iq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb-iq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb-ir.js b/vendor/assets/components/angular-i18n/angular-locale_ckb-ir.js new file mode 100644 index 000000000..8d2204ad4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb-ir.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb-ir", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb-latn-iq.js b/vendor/assets/components/angular-i18n/angular-locale_ckb-latn-iq.js new file mode 100644 index 000000000..85a38a334 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb-latn-iq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb-latn-iq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb-latn.js b/vendor/assets/components/angular-i18n/angular-locale_ckb-latn.js new file mode 100644 index 000000000..36854cb95 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ckb.js b/vendor/assets/components/angular-i18n/angular-locale_ckb.js new file mode 100644 index 000000000..4dd573421 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ckb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0628.\u0646", + "\u062f.\u0646" + ], + "DAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "ERANAMES": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646", + "\u0632\u0627\u06cc\u06cc\u0646\u06cc" + ], + "ERAS": [ + "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646", + "\u0632" + ], + "MONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "SHORTDAY": [ + "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5", + "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5", + "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5", + "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5", + "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5", + "\u06be\u06d5\u06cc\u0646\u06cc", + "\u0634\u06d5\u0645\u0645\u06d5" + ], + "SHORTMONTH": [ + "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u0634\u0648\u0628\u0627\u062a", + "\u0626\u0627\u0632\u0627\u0631", + "\u0646\u06cc\u0633\u0627\u0646", + "\u0626\u0627\u06cc\u0627\u0631", + "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646", + "\u062a\u06d5\u0645\u0648\u0648\u0632", + "\u0626\u0627\u0628", + "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645", + "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645", + "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "d\u06cc MMMM\u06cc y", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ckb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_cs-cz.js b/vendor/assets/components/angular-i18n/angular-locale_cs-cz.js new file mode 100644 index 000000000..f992e27e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_cs-cz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "ned\u011ble", + "pond\u011bl\u00ed", + "\u00fater\u00fd", + "st\u0159eda", + "\u010dtvrtek", + "p\u00e1tek", + "sobota" + ], + "ERANAMES": [ + "p\u0159. n. l.", + "n. l." + ], + "ERAS": [ + "p\u0159. n. l.", + "n. l." + ], + "MONTH": [ + "ledna", + "\u00fanora", + "b\u0159ezna", + "dubna", + "kv\u011btna", + "\u010dervna", + "\u010dervence", + "srpna", + "z\u00e1\u0159\u00ed", + "\u0159\u00edjna", + "listopadu", + "prosince" + ], + "SHORTDAY": [ + "ne", + "po", + "\u00fat", + "st", + "\u010dt", + "p\u00e1", + "so" + ], + "SHORTMONTH": [ + "led", + "\u00fano", + "b\u0159e", + "dub", + "kv\u011b", + "\u010dvn", + "\u010dvc", + "srp", + "z\u00e1\u0159", + "\u0159\u00edj", + "lis", + "pro" + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. M. y H:mm:ss", + "mediumDate": "d. M. y", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "K\u010d", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "cs-cz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (i >= 2 && i <= 4 && vf.v == 0) { return PLURAL_CATEGORY.FEW; } if (vf.v != 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_cs.js b/vendor/assets/components/angular-i18n/angular-locale_cs.js new file mode 100644 index 000000000..c1839aa91 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_cs.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "ned\u011ble", + "pond\u011bl\u00ed", + "\u00fater\u00fd", + "st\u0159eda", + "\u010dtvrtek", + "p\u00e1tek", + "sobota" + ], + "ERANAMES": [ + "p\u0159. n. l.", + "n. l." + ], + "ERAS": [ + "p\u0159. n. l.", + "n. l." + ], + "MONTH": [ + "ledna", + "\u00fanora", + "b\u0159ezna", + "dubna", + "kv\u011btna", + "\u010dervna", + "\u010dervence", + "srpna", + "z\u00e1\u0159\u00ed", + "\u0159\u00edjna", + "listopadu", + "prosince" + ], + "SHORTDAY": [ + "ne", + "po", + "\u00fat", + "st", + "\u010dt", + "p\u00e1", + "so" + ], + "SHORTMONTH": [ + "led", + "\u00fano", + "b\u0159e", + "dub", + "kv\u011b", + "\u010dvn", + "\u010dvc", + "srp", + "z\u00e1\u0159", + "\u0159\u00edj", + "lis", + "pro" + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. M. y H:mm:ss", + "mediumDate": "d. M. y", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "K\u010d", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "cs", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (i >= 2 && i <= 4 && vf.v == 0) { return PLURAL_CATEGORY.FEW; } if (vf.v != 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_cy-gb.js b/vendor/assets/components/angular-i18n/angular-locale_cy-gb.js new file mode 100644 index 000000000..ebcb23304 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_cy-gb.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Dydd Sul", + "Dydd Llun", + "Dydd Mawrth", + "Dydd Mercher", + "Dydd Iau", + "Dydd Gwener", + "Dydd Sadwrn" + ], + "ERANAMES": [ + "Cyn Crist", + "Oed Crist" + ], + "ERAS": [ + "CC", + "OC" + ], + "MONTH": [ + "Ionawr", + "Chwefror", + "Mawrth", + "Ebrill", + "Mai", + "Mehefin", + "Gorffennaf", + "Awst", + "Medi", + "Hydref", + "Tachwedd", + "Rhagfyr" + ], + "SHORTDAY": [ + "Sul", + "Llun", + "Maw", + "Mer", + "Iau", + "Gwen", + "Sad" + ], + "SHORTMONTH": [ + "Ion", + "Chwef", + "Mawrth", + "Ebrill", + "Mai", + "Meh", + "Gorff", + "Awst", + "Medi", + "Hyd", + "Tach", + "Rhag" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "cy-gb", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == 3) { return PLURAL_CATEGORY.FEW; } if (n == 6) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_cy.js b/vendor/assets/components/angular-i18n/angular-locale_cy.js new file mode 100644 index 000000000..d0a2c5f81 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_cy.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Dydd Sul", + "Dydd Llun", + "Dydd Mawrth", + "Dydd Mercher", + "Dydd Iau", + "Dydd Gwener", + "Dydd Sadwrn" + ], + "ERANAMES": [ + "Cyn Crist", + "Oed Crist" + ], + "ERAS": [ + "CC", + "OC" + ], + "MONTH": [ + "Ionawr", + "Chwefror", + "Mawrth", + "Ebrill", + "Mai", + "Mehefin", + "Gorffennaf", + "Awst", + "Medi", + "Hydref", + "Tachwedd", + "Rhagfyr" + ], + "SHORTDAY": [ + "Sul", + "Llun", + "Maw", + "Mer", + "Iau", + "Gwen", + "Sad" + ], + "SHORTMONTH": [ + "Ion", + "Chwef", + "Mawrth", + "Ebrill", + "Mai", + "Meh", + "Gorff", + "Awst", + "Medi", + "Hyd", + "Tach", + "Rhag" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "cy", + "pluralCat": function(n, opt_precision) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == 3) { return PLURAL_CATEGORY.FEW; } if (n == 6) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_da-dk.js b/vendor/assets/components/angular-i18n/angular-locale_da-dk.js new file mode 100644 index 000000000..7e9dad6aa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_da-dk.js @@ -0,0 +1,136 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +function getWT(v, f) { + if (f === 0) { + return {w: 0, t: 0}; + } + + while ((f % 10) === 0) { + f /= 10; + v--; + } + + return {w: v, t: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "marts", + "april", + "maj", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE 'den' d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd/MM/y HH.mm.ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH.mm.ss", + "short": "dd/MM/yy HH.mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "da-dk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); var wt = getWT(vf.v, vf.f); if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_da-gl.js b/vendor/assets/components/angular-i18n/angular-locale_da-gl.js new file mode 100644 index 000000000..22595712e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_da-gl.js @@ -0,0 +1,136 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +function getWT(v, f) { + if (f === 0) { + return {w: 0, t: 0}; + } + + while ((f % 10) === 0) { + f /= 10; + v--; + } + + return {w: v, t: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "marts", + "april", + "maj", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE 'den' d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd/MM/y HH.mm.ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH.mm.ss", + "short": "dd/MM/yy HH.mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "da-gl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); var wt = getWT(vf.v, vf.f); if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_da.js b/vendor/assets/components/angular-i18n/angular-locale_da.js new file mode 100644 index 000000000..c6e474a92 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_da.js @@ -0,0 +1,136 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +function getWT(v, f) { + if (f === 0) { + return {w: 0, t: 0}; + } + + while ((f % 10) === 0) { + f /= 10; + v--; + } + + return {w: v, t: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "marts", + "april", + "maj", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE 'den' d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd/MM/y HH.mm.ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH.mm.ss", + "short": "dd/MM/yy HH.mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "da", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); var wt = getWT(vf.v, vf.f); if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dav-ke.js b/vendor/assets/components/angular-i18n/angular-locale_dav-ke.js new file mode 100644 index 000000000..d9898d6d1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dav-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Luma lwa K", + "luma lwa p" + ], + "DAY": [ + "Ituku ja jumwa", + "Kuramuka jimweri", + "Kuramuka kawi", + "Kuramuka kadadu", + "Kuramuka kana", + "Kuramuka kasanu", + "Kifula nguwo" + ], + "ERANAMES": [ + "Kabla ya Kristo", + "Baada ya Kristo" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Mori ghwa imbiri", + "Mori ghwa kawi", + "Mori ghwa kadadu", + "Mori ghwa kana", + "Mori ghwa kasanu", + "Mori ghwa karandadu", + "Mori ghwa mfungade", + "Mori ghwa wunyanya", + "Mori ghwa ikenda", + "Mori ghwa ikumi", + "Mori ghwa ikumi na imweri", + "Mori ghwa ikumi na iwi" + ], + "SHORTDAY": [ + "Jum", + "Jim", + "Kaw", + "Kad", + "Kan", + "Kas", + "Ngu" + ], + "SHORTMONTH": [ + "Imb", + "Kaw", + "Kad", + "Kan", + "Kas", + "Kar", + "Mfu", + "Wun", + "Ike", + "Iku", + "Imw", + "Iwi" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "dav-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dav.js b/vendor/assets/components/angular-i18n/angular-locale_dav.js new file mode 100644 index 000000000..4aa6b4985 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dav.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Luma lwa K", + "luma lwa p" + ], + "DAY": [ + "Ituku ja jumwa", + "Kuramuka jimweri", + "Kuramuka kawi", + "Kuramuka kadadu", + "Kuramuka kana", + "Kuramuka kasanu", + "Kifula nguwo" + ], + "ERANAMES": [ + "Kabla ya Kristo", + "Baada ya Kristo" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Mori ghwa imbiri", + "Mori ghwa kawi", + "Mori ghwa kadadu", + "Mori ghwa kana", + "Mori ghwa kasanu", + "Mori ghwa karandadu", + "Mori ghwa mfungade", + "Mori ghwa wunyanya", + "Mori ghwa ikenda", + "Mori ghwa ikumi", + "Mori ghwa ikumi na imweri", + "Mori ghwa ikumi na iwi" + ], + "SHORTDAY": [ + "Jum", + "Jim", + "Kaw", + "Kad", + "Kan", + "Kas", + "Ngu" + ], + "SHORTMONTH": [ + "Imb", + "Kaw", + "Kad", + "Kan", + "Kas", + "Kar", + "Mfu", + "Wun", + "Ike", + "Iku", + "Imw", + "Iwi" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "dav", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_de-at.js b/vendor/assets/components/angular-i18n/angular-locale_de-at.js new file mode 100644 index 000000000..cf77f3bc4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_de-at.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "J\u00e4nner", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "J\u00e4n.", + "Feb.", + "M\u00e4rz", + "Apr.", + "Mai", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, dd. MMMM y", + "longDate": "dd. MMMM y", + "medium": "dd. MMM y HH:mm:ss", + "mediumDate": "dd. MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "de-at", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_de-be.js b/vendor/assets/components/angular-i18n/angular-locale_de-be.js new file mode 100644 index 000000000..5c0c11947 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_de-be.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4rz", + "Apr.", + "Mai", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "de-be", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_de-ch.js b/vendor/assets/components/angular-i18n/angular-locale_de-ch.js new file mode 100644 index 000000000..b7ec5d9d8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_de-ch.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4rz", + "Apr.", + "Mai", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "'", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "de-ch", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_de-de.js b/vendor/assets/components/angular-i18n/angular-locale_de-de.js new file mode 100644 index 000000000..e1767adf9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_de-de.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4rz", + "Apr.", + "Mai", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "de-de", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_de-li.js b/vendor/assets/components/angular-i18n/angular-locale_de-li.js new file mode 100644 index 000000000..bb2121523 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_de-li.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4rz", + "Apr.", + "Mai", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "'", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "de-li", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_de-lu.js b/vendor/assets/components/angular-i18n/angular-locale_de-lu.js new file mode 100644 index 000000000..d5047b28e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_de-lu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4rz", + "Apr.", + "Mai", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "de-lu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_de.js b/vendor/assets/components/angular-i18n/angular-locale_de.js new file mode 100644 index 000000000..56ab90697 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_de.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4rz", + "Apr.", + "Mai", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "de", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dje-ne.js b/vendor/assets/components/angular-i18n/angular-locale_dje-ne.js new file mode 100644 index 000000000..34022fc8f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dje-ne.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Subbaahi", + "Zaarikay b" + ], + "DAY": [ + "Alhadi", + "Atinni", + "Atalaata", + "Alarba", + "Alhamisi", + "Alzuma", + "Asibti" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa zamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alz", + "Asi" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "dje-ne", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dje.js b/vendor/assets/components/angular-i18n/angular-locale_dje.js new file mode 100644 index 000000000..a93d182c6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dje.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Subbaahi", + "Zaarikay b" + ], + "DAY": [ + "Alhadi", + "Atinni", + "Atalaata", + "Alarba", + "Alhamisi", + "Alzuma", + "Asibti" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa zamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alz", + "Asi" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "dje", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dsb-de.js b/vendor/assets/components/angular-i18n/angular-locale_dsb-de.js new file mode 100644 index 000000000..25186b57f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dsb-de.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopo\u0142dnja", + "w\u00f3tpo\u0142dnja" + ], + "DAY": [ + "nje\u017aela", + "p\u00f3nje\u017aele", + "wa\u0142tora", + "srjoda", + "stw\u00f3rtk", + "p\u011btk", + "sobota" + ], + "ERANAMES": [ + "p\u015bed Kristusowym naro\u017aenim", + "p\u00f3 Kristusowem naro\u017aenju" + ], + "ERAS": [ + "p\u015b.Chr.n.", + "p\u00f3 Chr.n." + ], + "MONTH": [ + "januara", + "februara", + "m\u011brca", + "apryla", + "maja", + "junija", + "julija", + "awgusta", + "septembra", + "oktobra", + "nowembra", + "decembra" + ], + "SHORTDAY": [ + "nje", + "p\u00f3n", + "wa\u0142", + "srj", + "stw", + "p\u011bt", + "sob" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "m\u011br.", + "apr.", + "maj.", + "jun.", + "jul.", + "awg.", + "sep.", + "okt.", + "now.", + "dec." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d.M.y H:mm:ss", + "mediumDate": "d.M.y", + "mediumTime": "H:mm:ss", + "short": "d.M.yy H:mm", + "shortDate": "d.M.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "dsb-de", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dsb.js b/vendor/assets/components/angular-i18n/angular-locale_dsb.js new file mode 100644 index 000000000..8283a9599 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dsb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopo\u0142dnja", + "w\u00f3tpo\u0142dnja" + ], + "DAY": [ + "nje\u017aela", + "p\u00f3nje\u017aele", + "wa\u0142tora", + "srjoda", + "stw\u00f3rtk", + "p\u011btk", + "sobota" + ], + "ERANAMES": [ + "p\u015bed Kristusowym naro\u017aenim", + "p\u00f3 Kristusowem naro\u017aenju" + ], + "ERAS": [ + "p\u015b.Chr.n.", + "p\u00f3 Chr.n." + ], + "MONTH": [ + "januara", + "februara", + "m\u011brca", + "apryla", + "maja", + "junija", + "julija", + "awgusta", + "septembra", + "oktobra", + "nowembra", + "decembra" + ], + "SHORTDAY": [ + "nje", + "p\u00f3n", + "wa\u0142", + "srj", + "stw", + "p\u011bt", + "sob" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "m\u011br.", + "apr.", + "maj.", + "jun.", + "jul.", + "awg.", + "sep.", + "okt.", + "now.", + "dec." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d.M.y H:mm:ss", + "mediumDate": "d.M.y", + "mediumTime": "H:mm:ss", + "short": "d.M.yy H:mm", + "shortDate": "d.M.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "dsb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dua-cm.js b/vendor/assets/components/angular-i18n/angular-locale_dua-cm.js new file mode 100644 index 000000000..8c2f60055 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dua-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "idi\u0253a", + "eby\u00e1mu" + ], + "DAY": [ + "\u00e9ti", + "m\u0254\u0301s\u00fa", + "kwas\u00fa", + "muk\u0254\u0301s\u00fa", + "\u014bgis\u00fa", + "\u0257\u00f3n\u025bs\u00fa", + "esa\u0253as\u00fa" + ], + "ERANAMES": [ + "\u0253oso \u0253w\u00e1 y\u00e1\u0253e l\u00e1", + "mb\u00fasa kw\u00e9di a Y\u00e9s" + ], + "ERAS": [ + "\u0253.Ys", + "mb.Ys" + ], + "MONTH": [ + "dim\u0254\u0301di", + "\u014bg\u0254nd\u025b", + "s\u0254\u014b\u025b", + "di\u0253\u00e1\u0253\u00e1", + "emiasele", + "es\u0254p\u025bs\u0254p\u025b", + "madi\u0253\u025b\u0301d\u00ed\u0253\u025b\u0301", + "di\u014bgindi", + "ny\u025bt\u025bki", + "may\u00e9s\u025b\u0301", + "tin\u00edn\u00ed", + "el\u00e1\u014bg\u025b\u0301" + ], + "SHORTDAY": [ + "\u00e9t", + "m\u0254\u0301s", + "kwa", + "muk", + "\u014bgi", + "\u0257\u00f3n", + "esa" + ], + "SHORTMONTH": [ + "di", + "\u014bg\u0254n", + "s\u0254\u014b", + "di\u0253", + "emi", + "es\u0254", + "mad", + "di\u014b", + "ny\u025bt", + "may", + "tin", + "el\u00e1" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "dua-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dua.js b/vendor/assets/components/angular-i18n/angular-locale_dua.js new file mode 100644 index 000000000..aab9fd79b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dua.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "idi\u0253a", + "eby\u00e1mu" + ], + "DAY": [ + "\u00e9ti", + "m\u0254\u0301s\u00fa", + "kwas\u00fa", + "muk\u0254\u0301s\u00fa", + "\u014bgis\u00fa", + "\u0257\u00f3n\u025bs\u00fa", + "esa\u0253as\u00fa" + ], + "ERANAMES": [ + "\u0253oso \u0253w\u00e1 y\u00e1\u0253e l\u00e1", + "mb\u00fasa kw\u00e9di a Y\u00e9s" + ], + "ERAS": [ + "\u0253.Ys", + "mb.Ys" + ], + "MONTH": [ + "dim\u0254\u0301di", + "\u014bg\u0254nd\u025b", + "s\u0254\u014b\u025b", + "di\u0253\u00e1\u0253\u00e1", + "emiasele", + "es\u0254p\u025bs\u0254p\u025b", + "madi\u0253\u025b\u0301d\u00ed\u0253\u025b\u0301", + "di\u014bgindi", + "ny\u025bt\u025bki", + "may\u00e9s\u025b\u0301", + "tin\u00edn\u00ed", + "el\u00e1\u014bg\u025b\u0301" + ], + "SHORTDAY": [ + "\u00e9t", + "m\u0254\u0301s", + "kwa", + "muk", + "\u014bgi", + "\u0257\u00f3n", + "esa" + ], + "SHORTMONTH": [ + "di", + "\u014bg\u0254n", + "s\u0254\u014b", + "di\u0253", + "emi", + "es\u0254", + "mad", + "di\u014b", + "ny\u025bt", + "may", + "tin", + "el\u00e1" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "dua", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dyo-sn.js b/vendor/assets/components/angular-i18n/angular-locale_dyo-sn.js new file mode 100644 index 000000000..b337dab58 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dyo-sn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Dimas", + "Tene\u014b", + "Talata", + "Alarbay", + "Aramisay", + "Arjuma", + "Sibiti" + ], + "ERANAMES": [ + "Ari\u014buu Yeesu", + "Atoo\u014be Yeesu" + ], + "ERAS": [ + "ArY", + "AtY" + ], + "MONTH": [ + "Sanvie", + "F\u00e9birie", + "Mars", + "Aburil", + "Mee", + "Sue\u014b", + "S\u00fauyee", + "Ut", + "Settembar", + "Oktobar", + "Novembar", + "Disambar" + ], + "SHORTDAY": [ + "Dim", + "Ten", + "Tal", + "Ala", + "Ara", + "Arj", + "Sib" + ], + "SHORTMONTH": [ + "Sa", + "Fe", + "Ma", + "Ab", + "Me", + "Su", + "S\u00fa", + "Ut", + "Se", + "Ok", + "No", + "De" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "dyo-sn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dyo.js b/vendor/assets/components/angular-i18n/angular-locale_dyo.js new file mode 100644 index 000000000..f84d9efd1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dyo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Dimas", + "Tene\u014b", + "Talata", + "Alarbay", + "Aramisay", + "Arjuma", + "Sibiti" + ], + "ERANAMES": [ + "Ari\u014buu Yeesu", + "Atoo\u014be Yeesu" + ], + "ERAS": [ + "ArY", + "AtY" + ], + "MONTH": [ + "Sanvie", + "F\u00e9birie", + "Mars", + "Aburil", + "Mee", + "Sue\u014b", + "S\u00fauyee", + "Ut", + "Settembar", + "Oktobar", + "Novembar", + "Disambar" + ], + "SHORTDAY": [ + "Dim", + "Ten", + "Tal", + "Ala", + "Ara", + "Arj", + "Sib" + ], + "SHORTMONTH": [ + "Sa", + "Fe", + "Ma", + "Ab", + "Me", + "Su", + "S\u00fa", + "Ut", + "Se", + "Ok", + "No", + "De" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "dyo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dz-bt.js b/vendor/assets/components/angular-i18n/angular-locale_dz-bt.js new file mode 100644 index 000000000..b98ba8191 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dz-bt.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0f66\u0f94\u0f0b\u0f46\u0f0b", + "\u0f55\u0fb1\u0f72\u0f0b\u0f46\u0f0b" + ], + "DAY": [ + "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f51\u0f44\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b" + ], + "SHORTDAY": [ + "\u0f5f\u0fb3\u0f0b", + "\u0f58\u0f72\u0f62\u0f0b", + "\u0f63\u0fb7\u0f42\u0f0b", + "\u0f55\u0f74\u0f62\u0f0b", + "\u0f66\u0f44\u0f66\u0f0b", + "\u0f66\u0fa4\u0f7a\u0f53\u0f0b", + "\u0f49\u0f72\u0f0b" + ], + "SHORTMONTH": [ + "\u0f21", + "\u0f22", + "\u0f23", + "\u0f24", + "\u0f25", + "\u0f26", + "\u0f27", + "\u0f28", + "\u0f29", + "\u0f21\u0f20", + "\u0f21\u0f21", + "12" + ], + "fullDate": "EEEE, \u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0bdd", + "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0b dd", + "medium": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a", + "mediumDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd", + "mediumTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a", + "short": "y-MM-dd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a", + "shortDate": "y-MM-dd", + "shortTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nu.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "dz-bt", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_dz.js b/vendor/assets/components/angular-i18n/angular-locale_dz.js new file mode 100644 index 000000000..10d611759 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_dz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0f66\u0f94\u0f0b\u0f46\u0f0b", + "\u0f55\u0fb1\u0f72\u0f0b\u0f46\u0f0b" + ], + "DAY": [ + "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b", + "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u0f5f\u0fb3\u0f0b\u0f51\u0f44\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b", + "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b" + ], + "SHORTDAY": [ + "\u0f5f\u0fb3\u0f0b", + "\u0f58\u0f72\u0f62\u0f0b", + "\u0f63\u0fb7\u0f42\u0f0b", + "\u0f55\u0f74\u0f62\u0f0b", + "\u0f66\u0f44\u0f66\u0f0b", + "\u0f66\u0fa4\u0f7a\u0f53\u0f0b", + "\u0f49\u0f72\u0f0b" + ], + "SHORTMONTH": [ + "\u0f21", + "\u0f22", + "\u0f23", + "\u0f24", + "\u0f25", + "\u0f26", + "\u0f27", + "\u0f28", + "\u0f29", + "\u0f21\u0f20", + "\u0f21\u0f21", + "12" + ], + "fullDate": "EEEE, \u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0bdd", + "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0b dd", + "medium": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a", + "mediumDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd", + "mediumTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a", + "short": "y-MM-dd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a", + "shortDate": "y-MM-dd", + "shortTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nu.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "dz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ebu-ke.js b/vendor/assets/components/angular-i18n/angular-locale_ebu-ke.js new file mode 100644 index 000000000..bc052e802 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ebu-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "KI", + "UT" + ], + "DAY": [ + "Kiumia", + "Njumatatu", + "Njumaine", + "Njumatano", + "Aramithi", + "Njumaa", + "NJumamothii" + ], + "ERANAMES": [ + "Mbere ya Kristo", + "Thutha wa Kristo" + ], + "ERAS": [ + "MK", + "TK" + ], + "MONTH": [ + "Mweri wa mbere", + "Mweri wa ka\u0129ri", + "Mweri wa kathat\u0169", + "Mweri wa kana", + "Mweri wa gatano", + "Mweri wa gatantat\u0169", + "Mweri wa m\u0169gwanja", + "Mweri wa kanana", + "Mweri wa kenda", + "Mweri wa ik\u0169mi", + "Mweri wa ik\u0169mi na \u0169mwe", + "Mweri wa ik\u0169mi na Ka\u0129r\u0129" + ], + "SHORTDAY": [ + "Kma", + "Tat", + "Ine", + "Tan", + "Arm", + "Maa", + "NMM" + ], + "SHORTMONTH": [ + "Mbe", + "Kai", + "Kat", + "Kan", + "Gat", + "Gan", + "Mug", + "Knn", + "Ken", + "Iku", + "Imw", + "Igi" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ebu-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ebu.js b/vendor/assets/components/angular-i18n/angular-locale_ebu.js new file mode 100644 index 000000000..b73534bbf --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ebu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "KI", + "UT" + ], + "DAY": [ + "Kiumia", + "Njumatatu", + "Njumaine", + "Njumatano", + "Aramithi", + "Njumaa", + "NJumamothii" + ], + "ERANAMES": [ + "Mbere ya Kristo", + "Thutha wa Kristo" + ], + "ERAS": [ + "MK", + "TK" + ], + "MONTH": [ + "Mweri wa mbere", + "Mweri wa ka\u0129ri", + "Mweri wa kathat\u0169", + "Mweri wa kana", + "Mweri wa gatano", + "Mweri wa gatantat\u0169", + "Mweri wa m\u0169gwanja", + "Mweri wa kanana", + "Mweri wa kenda", + "Mweri wa ik\u0169mi", + "Mweri wa ik\u0169mi na \u0169mwe", + "Mweri wa ik\u0169mi na Ka\u0129r\u0129" + ], + "SHORTDAY": [ + "Kma", + "Tat", + "Ine", + "Tan", + "Arm", + "Maa", + "NMM" + ], + "SHORTMONTH": [ + "Mbe", + "Kai", + "Kat", + "Kan", + "Gat", + "Gan", + "Mug", + "Knn", + "Ken", + "Iku", + "Imw", + "Igi" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ebu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ee-gh.js b/vendor/assets/components/angular-i18n/angular-locale_ee-gh.js new file mode 100644 index 000000000..5734679a3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ee-gh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u014bdi", + "\u0263etr\u0254" + ], + "DAY": [ + "k\u0254si\u0256a", + "dzo\u0256a", + "bla\u0256a", + "ku\u0256a", + "yawo\u0256a", + "fi\u0256a", + "memle\u0256a" + ], + "ERANAMES": [ + "Hafi Yesu Va Do \u014bg\u0254", + "Yesu \u014a\u0254li" + ], + "ERAS": [ + "hY", + "Y\u014b" + ], + "MONTH": [ + "dzove", + "dzodze", + "tedoxe", + "af\u0254f\u0129e", + "dama", + "masa", + "siaml\u0254m", + "deasiamime", + "any\u0254ny\u0254", + "kele", + "ade\u025bmekp\u0254xe", + "dzome" + ], + "SHORTDAY": [ + "k\u0254s", + "dzo", + "bla", + "ku\u0256", + "yaw", + "fi\u0256", + "mem" + ], + "SHORTMONTH": [ + "dzv", + "dzd", + "ted", + "af\u0254", + "dam", + "mas", + "sia", + "dea", + "any", + "kel", + "ade", + "dzm" + ], + "fullDate": "EEEE, MMMM d 'lia' y", + "longDate": "MMMM d 'lia' y", + "medium": "MMM d 'lia', y a 'ga' h:mm:ss", + "mediumDate": "MMM d 'lia', y", + "mediumTime": "a 'ga' h:mm:ss", + "short": "M/d/yy a 'ga' h:mm", + "shortDate": "M/d/yy", + "shortTime": "a 'ga' h:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GHS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ee-gh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ee-tg.js b/vendor/assets/components/angular-i18n/angular-locale_ee-tg.js new file mode 100644 index 000000000..db8ac9e8a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ee-tg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u014bdi", + "\u0263etr\u0254" + ], + "DAY": [ + "k\u0254si\u0256a", + "dzo\u0256a", + "bla\u0256a", + "ku\u0256a", + "yawo\u0256a", + "fi\u0256a", + "memle\u0256a" + ], + "ERANAMES": [ + "Hafi Yesu Va Do \u014bg\u0254", + "Yesu \u014a\u0254li" + ], + "ERAS": [ + "hY", + "Y\u014b" + ], + "MONTH": [ + "dzove", + "dzodze", + "tedoxe", + "af\u0254f\u0129e", + "dama", + "masa", + "siaml\u0254m", + "deasiamime", + "any\u0254ny\u0254", + "kele", + "ade\u025bmekp\u0254xe", + "dzome" + ], + "SHORTDAY": [ + "k\u0254s", + "dzo", + "bla", + "ku\u0256", + "yaw", + "fi\u0256", + "mem" + ], + "SHORTMONTH": [ + "dzv", + "dzd", + "ted", + "af\u0254", + "dam", + "mas", + "sia", + "dea", + "any", + "kel", + "ade", + "dzm" + ], + "fullDate": "EEEE, MMMM d 'lia' y", + "longDate": "MMMM d 'lia' y", + "medium": "MMM d 'lia', y a 'ga' h:mm:ss", + "mediumDate": "MMM d 'lia', y", + "mediumTime": "a 'ga' h:mm:ss", + "short": "M/d/yy a 'ga' h:mm", + "shortDate": "M/d/yy", + "shortTime": "a 'ga' h:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ee-tg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ee.js b/vendor/assets/components/angular-i18n/angular-locale_ee.js new file mode 100644 index 000000000..51bc808b8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ee.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u014bdi", + "\u0263etr\u0254" + ], + "DAY": [ + "k\u0254si\u0256a", + "dzo\u0256a", + "bla\u0256a", + "ku\u0256a", + "yawo\u0256a", + "fi\u0256a", + "memle\u0256a" + ], + "ERANAMES": [ + "Hafi Yesu Va Do \u014bg\u0254", + "Yesu \u014a\u0254li" + ], + "ERAS": [ + "hY", + "Y\u014b" + ], + "MONTH": [ + "dzove", + "dzodze", + "tedoxe", + "af\u0254f\u0129e", + "dama", + "masa", + "siaml\u0254m", + "deasiamime", + "any\u0254ny\u0254", + "kele", + "ade\u025bmekp\u0254xe", + "dzome" + ], + "SHORTDAY": [ + "k\u0254s", + "dzo", + "bla", + "ku\u0256", + "yaw", + "fi\u0256", + "mem" + ], + "SHORTMONTH": [ + "dzv", + "dzd", + "ted", + "af\u0254", + "dam", + "mas", + "sia", + "dea", + "any", + "kel", + "ade", + "dzm" + ], + "fullDate": "EEEE, MMMM d 'lia' y", + "longDate": "MMMM d 'lia' y", + "medium": "MMM d 'lia', y a 'ga' h:mm:ss", + "mediumDate": "MMM d 'lia', y", + "mediumTime": "a 'ga' h:mm:ss", + "short": "M/d/yy a 'ga' h:mm", + "shortDate": "M/d/yy", + "shortTime": "a 'ga' h:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GHS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ee", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_el-cy.js b/vendor/assets/components/angular-i18n/angular-locale_el-cy.js new file mode 100644 index 000000000..753d8524c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_el-cy.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "ERANAMES": [ + "\u03c0\u03c1\u03bf \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd", + "\u03bc\u03b5\u03c4\u03ac \u03a7\u03c1\u03b9\u03c3\u03c4\u03cc\u03bd" + ], + "ERAS": [ + "\u03c0.\u03a7.", + "\u03bc.\u03a7." + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03af", + "\u03a4\u03b5\u03c4", + "\u03a0\u03ad\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03ac\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u0390", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\u0394\u03b5\u03ba" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "el-cy", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_el-gr.js b/vendor/assets/components/angular-i18n/angular-locale_el-gr.js new file mode 100644 index 000000000..95c3440f5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_el-gr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "ERANAMES": [ + "\u03c0\u03c1\u03bf \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd", + "\u03bc\u03b5\u03c4\u03ac \u03a7\u03c1\u03b9\u03c3\u03c4\u03cc\u03bd" + ], + "ERAS": [ + "\u03c0.\u03a7.", + "\u03bc.\u03a7." + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03af", + "\u03a4\u03b5\u03c4", + "\u03a0\u03ad\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03ac\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u0390", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\u0394\u03b5\u03ba" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "el-gr", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_el.js b/vendor/assets/components/angular-i18n/angular-locale_el.js new file mode 100644 index 000000000..e70369e33 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_el.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "ERANAMES": [ + "\u03c0\u03c1\u03bf \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd", + "\u03bc\u03b5\u03c4\u03ac \u03a7\u03c1\u03b9\u03c3\u03c4\u03cc\u03bd" + ], + "ERAS": [ + "\u03c0.\u03a7.", + "\u03bc.\u03a7." + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03af", + "\u03a4\u03b5\u03c4", + "\u03a0\u03ad\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03ac\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u0390", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\u0394\u03b5\u03ba" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "el", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-001.js b/vendor/assets/components/angular-i18n/angular-locale_en-001.js new file mode 100644 index 000000000..9d4b8e1dd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-001.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-001", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-150.js b/vendor/assets/components/angular-i18n/angular-locale_en-150.js new file mode 100644 index 000000000..6b44608d1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-150.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "en-150", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ag.js b/vendor/assets/components/angular-i18n/angular-locale_en-ag.js new file mode 100644 index 000000000..df4162b0a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ag.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ag", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ai.js b/vendor/assets/components/angular-i18n/angular-locale_en-ai.js new file mode 100644 index 000000000..33877aa7e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ai.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ai", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-as.js b/vendor/assets/components/angular-i18n/angular-locale_en-as.js new file mode 100644 index 000000000..128c7ad3f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-as.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-as", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-au.js b/vendor/assets/components/angular-i18n/angular-locale_en-au.js new file mode 100644 index 000000000..ea41c256d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-au.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/y h:mm a", + "shortDate": "d/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-au", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-bb.js b/vendor/assets/components/angular-i18n/angular-locale_en-bb.js new file mode 100644 index 000000000..ee4e3b8e4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-bb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-bb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-be.js b/vendor/assets/components/angular-i18n/angular-locale_en-be.js new file mode 100644 index 000000000..f9252fc74 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-be.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "en-be", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-bm.js b/vendor/assets/components/angular-i18n/angular-locale_en-bm.js new file mode 100644 index 000000000..c7665c64e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-bm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-bm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-bs.js b/vendor/assets/components/angular-i18n/angular-locale_en-bs.js new file mode 100644 index 000000000..595f9aba4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-bs.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-bs", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-bw.js b/vendor/assets/components/angular-i18n/angular-locale_en-bw.js new file mode 100644 index 000000000..7eaacaaad --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-bw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd MMM y h:mm:ss a", + "mediumDate": "dd MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "P", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-bw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-bz.js b/vendor/assets/components/angular-i18n/angular-locale_en-bz.js new file mode 100644 index 000000000..a2ba28ae1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-bz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y HH:mm:ss", + "mediumDate": "dd-MMM-y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-bz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ca.js b/vendor/assets/components/angular-i18n/angular-locale_en-ca.js new file mode 100644 index 000000000..fc8f066cf --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ca.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "y-MM-dd h:mm a", + "shortDate": "y-MM-dd", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ca", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-cc.js b/vendor/assets/components/angular-i18n/angular-locale_en-cc.js new file mode 100644 index 000000000..413154894 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-cc.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-cc", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ck.js b/vendor/assets/components/angular-i18n/angular-locale_en-ck.js new file mode 100644 index 000000000..5c2d83b76 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ck.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ck", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-cm.js b/vendor/assets/components/angular-i18n/angular-locale_en-cm.js new file mode 100644 index 000000000..b2f907ec4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-cx.js b/vendor/assets/components/angular-i18n/angular-locale_en-cx.js new file mode 100644 index 000000000..23b30b9bc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-cx.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-cx", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-dg.js b/vendor/assets/components/angular-i18n/angular-locale_en-dg.js new file mode 100644 index 000000000..58130f0e9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-dg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-dg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-dm.js b/vendor/assets/components/angular-i18n/angular-locale_en-dm.js new file mode 100644 index 000000000..ac9d297f5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-dm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-dm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-dsrt-us.js b/vendor/assets/components/angular-i18n/angular-locale_en-dsrt-us.js new file mode 100644 index 000000000..0ede3159e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-dsrt-us.js @@ -0,0 +1,99 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\ud801\udc08\ud801\udc23", + "\ud801\udc11\ud801\udc23" + ], + "DAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29", + "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29" + ], + "MONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d", + "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34", + "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b", + "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49" + ], + "SHORTDAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c", + "\ud801\udc23\ud801\udc32\ud801\udc4c", + "\ud801\udc13\ud801\udc2d\ud801\udc46", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c", + "\ud801\udc1b\ud801\udc32\ud801\udc49", + "\ud801\udc19\ud801\udc49\ud801\udc34", + "\ud801\udc1d\ud801\udc30\ud801\udc3b" + ], + "SHORTMONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c", + "\ud801\udc19\ud801\udc2f\ud801\udc3a", + "\ud801\udc23\ud801\udc2a\ud801\udc49", + "\ud801\udc01\ud801\udc39\ud801\udc49", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a", + "\ud801\udc02\ud801\udc40", + "\ud801\udc1d\ud801\udc2f\ud801\udc39", + "\ud801\udc09\ud801\udc3f\ud801\udc3b", + "\ud801\udc24\ud801\udc2c\ud801\udc42", + "\ud801\udc14\ud801\udc28\ud801\udc45" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "(\u00a4", + "negSuf": ")", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-dsrt-us", + "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); \ No newline at end of file diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-dsrt.js b/vendor/assets/components/angular-i18n/angular-locale_en-dsrt.js new file mode 100644 index 000000000..5e86ec53d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-dsrt.js @@ -0,0 +1,99 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\ud801\udc08\ud801\udc23", + "\ud801\udc11\ud801\udc23" + ], + "DAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29", + "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29" + ], + "MONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d", + "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34", + "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b", + "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49" + ], + "SHORTDAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c", + "\ud801\udc23\ud801\udc32\ud801\udc4c", + "\ud801\udc13\ud801\udc2d\ud801\udc46", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c", + "\ud801\udc1b\ud801\udc32\ud801\udc49", + "\ud801\udc19\ud801\udc49\ud801\udc34", + "\ud801\udc1d\ud801\udc30\ud801\udc3b" + ], + "SHORTMONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c", + "\ud801\udc19\ud801\udc2f\ud801\udc3a", + "\ud801\udc23\ud801\udc2a\ud801\udc49", + "\ud801\udc01\ud801\udc39\ud801\udc49", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a", + "\ud801\udc02\ud801\udc40", + "\ud801\udc1d\ud801\udc2f\ud801\udc39", + "\ud801\udc09\ud801\udc3f\ud801\udc3b", + "\ud801\udc24\ud801\udc2c\ud801\udc42", + "\ud801\udc14\ud801\udc28\ud801\udc45" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "(\u00a4", + "negSuf": ")", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-dsrt", + "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); \ No newline at end of file diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-er.js b/vendor/assets/components/angular-i18n/angular-locale_en-er.js new file mode 100644 index 000000000..ac712fa91 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-er.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-er", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-fj.js b/vendor/assets/components/angular-i18n/angular-locale_en-fj.js new file mode 100644 index 000000000..adfe12a18 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-fj.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-fj", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-fk.js b/vendor/assets/components/angular-i18n/angular-locale_en-fk.js new file mode 100644 index 000000000..13fe8f468 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-fk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-fk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-fm.js b/vendor/assets/components/angular-i18n/angular-locale_en-fm.js new file mode 100644 index 000000000..c8832072a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-fm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-fm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gb.js b/vendor/assets/components/angular-i18n/angular-locale_en-gb.js new file mode 100644 index 000000000..7fb46f5e0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gd.js b/vendor/assets/components/angular-i18n/angular-locale_en-gd.js new file mode 100644 index 000000000..8f5c71c92 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gd.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gd", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gg.js b/vendor/assets/components/angular-i18n/angular-locale_en-gg.js new file mode 100644 index 000000000..f82e215f5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gh.js b/vendor/assets/components/angular-i18n/angular-locale_en-gh.js new file mode 100644 index 000000000..25abd0571 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GHS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gi.js b/vendor/assets/components/angular-i18n/angular-locale_en-gi.js new file mode 100644 index 000000000..15f7c477f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gm.js b/vendor/assets/components/angular-i18n/angular-locale_en-gm.js new file mode 100644 index 000000000..b8e54b4b1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GMD", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gu.js b/vendor/assets/components/angular-i18n/angular-locale_en-gu.js new file mode 100644 index 000000000..b1505ffd4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-gy.js b/vendor/assets/components/angular-i18n/angular-locale_en-gy.js new file mode 100644 index 000000000..9b8b11dff --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-gy.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-gy", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-hk.js b/vendor/assets/components/angular-i18n/angular-locale_en-hk.js new file mode 100644 index 000000000..069d9a1e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-hk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/y h:mm a", + "shortDate": "d/M/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-hk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ie.js b/vendor/assets/components/angular-i18n/angular-locale_en-ie.js new file mode 100644 index 000000000..0bfbff4ce --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ie.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ie", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-im.js b/vendor/assets/components/angular-i18n/angular-locale_en-im.js new file mode 100644 index 000000000..3a5a84dfa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-im.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-im", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-in.js b/vendor/assets/components/angular-i18n/angular-locale_en-in.js new file mode 100644 index 000000000..778a582e8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-in.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "en-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-io.js b/vendor/assets/components/angular-i18n/angular-locale_en-io.js new file mode 100644 index 000000000..db79ce42f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-io.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-io", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-iso.js b/vendor/assets/components/angular-i18n/angular-locale_en-iso.js new file mode 100644 index 000000000..a4e632d49 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-iso.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yyyy-MM-dd HH:mm", + "shortDate": "yyyy-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-iso", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-je.js b/vendor/assets/components/angular-i18n/angular-locale_en-je.js new file mode 100644 index 000000000..87a233b1b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-je.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-je", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-jm.js b/vendor/assets/components/angular-i18n/angular-locale_en-jm.js new file mode 100644 index 000000000..d6ac242dd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-jm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-jm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ke.js b/vendor/assets/components/angular-i18n/angular-locale_en-ke.js new file mode 100644 index 000000000..98fd837a2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ki.js b/vendor/assets/components/angular-i18n/angular-locale_en-ki.js new file mode 100644 index 000000000..d9bcb187b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ki.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ki", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-kn.js b/vendor/assets/components/angular-i18n/angular-locale_en-kn.js new file mode 100644 index 000000000..44aaa8075 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-kn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-kn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ky.js b/vendor/assets/components/angular-i18n/angular-locale_en-ky.js new file mode 100644 index 000000000..cc2e528af --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ky.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ky", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-lc.js b/vendor/assets/components/angular-i18n/angular-locale_en-lc.js new file mode 100644 index 000000000..73ea97291 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-lc.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-lc", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-lr.js b/vendor/assets/components/angular-i18n/angular-locale_en-lr.js new file mode 100644 index 000000000..87271b636 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-lr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-lr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ls.js b/vendor/assets/components/angular-i18n/angular-locale_en-ls.js new file mode 100644 index 000000000..9360e8640 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ls.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ls", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-mg.js b/vendor/assets/components/angular-i18n/angular-locale_en-mg.js new file mode 100644 index 000000000..aed8e3b6e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-mg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ar", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-mg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-mh.js b/vendor/assets/components/angular-i18n/angular-locale_en-mh.js new file mode 100644 index 000000000..7c96dd846 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-mh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-mh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-mo.js b/vendor/assets/components/angular-i18n/angular-locale_en-mo.js new file mode 100644 index 000000000..0253ae571 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-mo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MOP", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-mo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-mp.js b/vendor/assets/components/angular-i18n/angular-locale_en-mp.js new file mode 100644 index 000000000..b673a4718 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-mp.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-mp", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ms.js b/vendor/assets/components/angular-i18n/angular-locale_en-ms.js new file mode 100644 index 000000000..0da21fe36 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ms.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ms", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-mt.js b/vendor/assets/components/angular-i18n/angular-locale_en-mt.js new file mode 100644 index 000000000..b859ba8de --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-mt.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "dd MMMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-mt", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-mu.js b/vendor/assets/components/angular-i18n/angular-locale_en-mu.js new file mode 100644 index 000000000..70cc43d57 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-mu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MURs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-mu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-mw.js b/vendor/assets/components/angular-i18n/angular-locale_en-mw.js new file mode 100644 index 000000000..f619d7463 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-mw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MWK", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-mw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-my.js b/vendor/assets/components/angular-i18n/angular-locale_en-my.js new file mode 100644 index 000000000..c6bebfaeb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-my.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RM", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-my", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-na.js b/vendor/assets/components/angular-i18n/angular-locale_en-na.js new file mode 100644 index 000000000..a215e4efa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-na.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-na", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-nf.js b/vendor/assets/components/angular-i18n/angular-locale_en-nf.js new file mode 100644 index 000000000..811311e09 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-nf.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-nf", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ng.js b/vendor/assets/components/angular-i18n/angular-locale_en-ng.js new file mode 100644 index 000000000..7046b19e0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ng.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a6", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ng", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-nr.js b/vendor/assets/components/angular-i18n/angular-locale_en-nr.js new file mode 100644 index 000000000..c9a243f04 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-nr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-nr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-nu.js b/vendor/assets/components/angular-i18n/angular-locale_en-nu.js new file mode 100644 index 000000000..00f5fe50a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-nu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-nu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-nz.js b/vendor/assets/components/angular-i18n/angular-locale_en-nz.js new file mode 100644 index 000000000..660faeeef --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-nz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d/MM/y h:mm:ss a", + "mediumDate": "d/MM/y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-nz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-pg.js b/vendor/assets/components/angular-i18n/angular-locale_en-pg.js new file mode 100644 index 000000000..14bf90bcd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-pg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "PGK", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-pg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ph.js b/vendor/assets/components/angular-i18n/angular-locale_en-ph.js new file mode 100644 index 000000000..8196614fa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ph.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b1", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ph", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-pk.js b/vendor/assets/components/angular-i18n/angular-locale_en-pk.js new file mode 100644 index 000000000..393d7a391 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-pk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "en-pk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-pn.js b/vendor/assets/components/angular-i18n/angular-locale_en-pn.js new file mode 100644 index 000000000..f22e4eef2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-pn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-pn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-pr.js b/vendor/assets/components/angular-i18n/angular-locale_en-pr.js new file mode 100644 index 000000000..f2c06063e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-pr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-pr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-pw.js b/vendor/assets/components/angular-i18n/angular-locale_en-pw.js new file mode 100644 index 000000000..78dfa4266 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-pw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-pw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-rw.js b/vendor/assets/components/angular-i18n/angular-locale_en-rw.js new file mode 100644 index 000000000..591af22c2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-rw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RF", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-rw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sb.js b/vendor/assets/components/angular-i18n/angular-locale_en-sb.js new file mode 100644 index 000000000..1a7230829 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sc.js b/vendor/assets/components/angular-i18n/angular-locale_en-sc.js new file mode 100644 index 000000000..c00d66a44 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sc.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SCR", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sc", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sd.js b/vendor/assets/components/angular-i18n/angular-locale_en-sd.js new file mode 100644 index 000000000..bee47da59 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sd.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SDG", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sd", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sg.js b/vendor/assets/components/angular-i18n/angular-locale_en-sg.js new file mode 100644 index 000000000..0ac7133ae --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sh.js b/vendor/assets/components/angular-i18n/angular-locale_en-sh.js new file mode 100644 index 000000000..fccef4718 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sl.js b/vendor/assets/components/angular-i18n/angular-locale_en-sl.js new file mode 100644 index 000000000..91226edae --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SLL", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ss.js b/vendor/assets/components/angular-i18n/angular-locale_en-ss.js new file mode 100644 index 000000000..28927b01a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ss.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SSP", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ss", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sx.js b/vendor/assets/components/angular-i18n/angular-locale_en-sx.js new file mode 100644 index 000000000..31843943c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sx.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "ANG", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sx", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-sz.js b/vendor/assets/components/angular-i18n/angular-locale_en-sz.js new file mode 100644 index 000000000..668455a83 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-sz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SZL", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-sz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-tc.js b/vendor/assets/components/angular-i18n/angular-locale_en-tc.js new file mode 100644 index 000000000..f64246dae --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-tc.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-tc", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-tk.js b/vendor/assets/components/angular-i18n/angular-locale_en-tk.js new file mode 100644 index 000000000..032dfc42c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-tk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-tk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-to.js b/vendor/assets/components/angular-i18n/angular-locale_en-to.js new file mode 100644 index 000000000..60844e5df --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-to.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "T$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-to", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-tt.js b/vendor/assets/components/angular-i18n/angular-locale_en-tt.js new file mode 100644 index 000000000..35f09a700 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-tt.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-tt", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-tv.js b/vendor/assets/components/angular-i18n/angular-locale_en-tv.js new file mode 100644 index 000000000..141bce60b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-tv.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-tv", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-tz.js b/vendor/assets/components/angular-i18n/angular-locale_en-tz.js new file mode 100644 index 000000000..5f8b132ec --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ug.js b/vendor/assets/components/angular-i18n/angular-locale_en-ug.js new file mode 100644 index 000000000..f9dadb7fd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-um.js b/vendor/assets/components/angular-i18n/angular-locale_en-um.js new file mode 100644 index 000000000..6367bd18f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-um.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-um", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-us.js b/vendor/assets/components/angular-i18n/angular-locale_en-us.js new file mode 100644 index 000000000..0a8df7f2b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-us.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-us", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-vc.js b/vendor/assets/components/angular-i18n/angular-locale_en-vc.js new file mode 100644 index 000000000..53226dd4f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-vc.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-vc", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-vg.js b/vendor/assets/components/angular-i18n/angular-locale_en-vg.js new file mode 100644 index 000000000..28ad6b3e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-vg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-vg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-vi.js b/vendor/assets/components/angular-i18n/angular-locale_en-vi.js new file mode 100644 index 000000000..b2fba3ba2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-vi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-vi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-vu.js b/vendor/assets/components/angular-i18n/angular-locale_en-vu.js new file mode 100644 index 000000000..c11762a1d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-vu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "VUV", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-vu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-ws.js b/vendor/assets/components/angular-i18n/angular-locale_en-ws.js new file mode 100644 index 000000000..3ff95b128 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-ws.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "WST", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-ws", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-za.js b/vendor/assets/components/angular-i18n/angular-locale_en-za.js new file mode 100644 index 000000000..7e0b44340 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-za.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd MMM y h:mm:ss a", + "mediumDate": "dd MMM y", + "mediumTime": "h:mm:ss a", + "short": "y/MM/dd h:mm a", + "shortDate": "y/MM/dd", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-zm.js b/vendor/assets/components/angular-i18n/angular-locale_en-zm.js new file mode 100644 index 000000000..b11634b2f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-zm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "ZMW", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-zm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en-zw.js b/vendor/assets/components/angular-i18n/angular-locale_en-zw.js new file mode 100644 index 000000000..6ba2b061d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en-zw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd MMM,y h:mm:ss a", + "mediumDate": "dd MMM,y", + "mediumTime": "h:mm:ss a", + "short": "d/M/y h:mm a", + "shortDate": "d/M/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en-zw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_en.js b/vendor/assets/components/angular-i18n/angular-locale_en.js new file mode 100644 index 000000000..19d806cd1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_en.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "ERANAMES": [ + "Before Christ", + "Anno Domini" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "en", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_eo-001.js b/vendor/assets/components/angular-i18n/angular-locale_eo-001.js new file mode 100644 index 000000000..9050f9a63 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_eo-001.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "atm", + "ptm" + ], + "DAY": [ + "diman\u0109o", + "lundo", + "mardo", + "merkredo", + "\u0135a\u016ddo", + "vendredo", + "sabato" + ], + "ERANAMES": [ + "aK", + "pK" + ], + "ERAS": [ + "aK", + "pK" + ], + "MONTH": [ + "januaro", + "februaro", + "marto", + "aprilo", + "majo", + "junio", + "julio", + "a\u016dgusto", + "septembro", + "oktobro", + "novembro", + "decembro" + ], + "SHORTDAY": [ + "di", + "lu", + "ma", + "me", + "\u0135a", + "ve", + "sa" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "a\u016dg", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, d-'a' 'de' MMMM y", + "longDate": "y-MMMM-dd", + "medium": "y-MMM-dd HH:mm:ss", + "mediumDate": "y-MMM-dd", + "mediumTime": "HH:mm:ss", + "short": "yy-MM-dd HH:mm", + "shortDate": "yy-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "eo-001", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_eo.js b/vendor/assets/components/angular-i18n/angular-locale_eo.js new file mode 100644 index 000000000..548618c58 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_eo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "atm", + "ptm" + ], + "DAY": [ + "diman\u0109o", + "lundo", + "mardo", + "merkredo", + "\u0135a\u016ddo", + "vendredo", + "sabato" + ], + "ERANAMES": [ + "aK", + "pK" + ], + "ERAS": [ + "aK", + "pK" + ], + "MONTH": [ + "januaro", + "februaro", + "marto", + "aprilo", + "majo", + "junio", + "julio", + "a\u016dgusto", + "septembro", + "oktobro", + "novembro", + "decembro" + ], + "SHORTDAY": [ + "di", + "lu", + "ma", + "me", + "\u0135a", + "ve", + "sa" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "a\u016dg", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, d-'a' 'de' MMMM y", + "longDate": "y-MMMM-dd", + "medium": "y-MMM-dd HH:mm:ss", + "mediumDate": "y-MMM-dd", + "mediumTime": "HH:mm:ss", + "short": "yy-MM-dd HH:mm", + "shortDate": "yy-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "eo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-419.js b/vendor/assets/components/angular-i18n/angular-locale_es-419.js new file mode 100644 index 000000000..21d84e846 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-419.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-419", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-ar.js b/vendor/assets/components/angular-i18n/angular-locale_es-ar.js new file mode 100644 index 000000000..616c293cc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-ar.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-ar", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-bo.js b/vendor/assets/components/angular-i18n/angular-locale_es-bo.js new file mode 100644 index 000000000..6885950d2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-bo.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Bs", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-bo", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-cl.js b/vendor/assets/components/angular-i18n/angular-locale_es-cl.js new file mode 100644 index 000000000..71a403201 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-cl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd-MM-y h:mm:ss a", + "mediumDate": "dd-MM-y", + "mediumTime": "h:mm:ss a", + "short": "dd-MM-yy h:mm a", + "shortDate": "dd-MM-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-cl", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-co.js b/vendor/assets/components/angular-i18n/angular-locale_es-co.js new file mode 100644 index 000000000..4d03e8b96 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-co.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d/MM/y h:mm:ss a", + "mediumDate": "d/MM/y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-co", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-cr.js b/vendor/assets/components/angular-i18n/angular-locale_es-cr.js new file mode 100644 index 000000000..601d64d40 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-cr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a1", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-cr", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-cu.js b/vendor/assets/components/angular-i18n/angular-locale_es-cu.js new file mode 100644 index 000000000..f204c7ba0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-cu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-cu", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-do.js b/vendor/assets/components/angular-i18n/angular-locale_es-do.js new file mode 100644 index 000000000..73b2258db --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-do.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-do", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-ea.js b/vendor/assets/components/angular-i18n/angular-locale_es-ea.js new file mode 100644 index 000000000..6be5b9181 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-ea.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "anno D\u00f3mini" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sept.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y H:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "es-ea", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-ec.js b/vendor/assets/components/angular-i18n/angular-locale_es-ec.js new file mode 100644 index 000000000..e0b684db2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-ec.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-ec", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-es.js b/vendor/assets/components/angular-i18n/angular-locale_es-es.js new file mode 100644 index 000000000..38eb9b00c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-es.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "anno D\u00f3mini" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sept.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y H:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "es-es", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-gq.js b/vendor/assets/components/angular-i18n/angular-locale_es-gq.js new file mode 100644 index 000000000..b2b0b25ae --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-gq.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "anno D\u00f3mini" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sept.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y H:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-gq", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-gt.js b/vendor/assets/components/angular-i18n/angular-locale_es-gt.js new file mode 100644 index 000000000..5b23ccbac --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-gt.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d/MM/y h:mm:ss a", + "mediumDate": "d/MM/y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Q", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-gt", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-hn.js b/vendor/assets/components/angular-i18n/angular-locale_es-hn.js new file mode 100644 index 000000000..45f95726f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-hn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE dd 'de' MMMM 'de' y", + "longDate": "dd 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "L", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-hn", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-ic.js b/vendor/assets/components/angular-i18n/angular-locale_es-ic.js new file mode 100644 index 000000000..db19c0af1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-ic.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "anno D\u00f3mini" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sept.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y H:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "es-ic", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-mx.js b/vendor/assets/components/angular-i18n/angular-locale_es-mx.js new file mode 100644 index 000000000..8cbb81b39 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-mx.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "Anno Domini" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "dic" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y H:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "H:mm:ss", + "short": "dd/MM/yy H:mm", + "shortDate": "dd/MM/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-mx", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-ni.js b/vendor/assets/components/angular-i18n/angular-locale_es-ni.js new file mode 100644 index 000000000..26e7dbcbe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-ni.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "C$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-ni", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-pa.js b/vendor/assets/components/angular-i18n/angular-locale_es-pa.js new file mode 100644 index 000000000..e175395ad --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-pa.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "MM/dd/y h:mm:ss a", + "mediumDate": "MM/dd/y", + "mediumTime": "h:mm:ss a", + "short": "MM/dd/yy h:mm a", + "shortDate": "MM/dd/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "B/.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-pa", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-pe.js b/vendor/assets/components/angular-i18n/angular-locale_es-pe.js new file mode 100644 index 000000000..03a5827fb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-pe.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "S/.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-pe", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-ph.js b/vendor/assets/components/angular-i18n/angular-locale_es-ph.js new file mode 100644 index 000000000..49fc84765 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-ph.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "anno D\u00f3mini" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sept.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y H:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b1", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "es-ph", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-pr.js b/vendor/assets/components/angular-i18n/angular-locale_es-pr.js new file mode 100644 index 000000000..f26a9dd94 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-pr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "MM/dd/y h:mm:ss a", + "mediumDate": "MM/dd/y", + "mediumTime": "h:mm:ss a", + "short": "MM/dd/yy h:mm a", + "shortDate": "MM/dd/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-pr", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-py.js b/vendor/assets/components/angular-i18n/angular-locale_es-py.js new file mode 100644 index 000000000..5ab4f6d90 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-py.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Gs", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "es-py", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-sv.js b/vendor/assets/components/angular-i18n/angular-locale_es-sv.js new file mode 100644 index 000000000..6d8abbdad --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-sv.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-sv", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-us.js b/vendor/assets/components/angular-i18n/angular-locale_es-us.js new file mode 100644 index 000000000..2d17756f6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-us.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-us", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-uy.js b/vendor/assets/components/angular-i18n/angular-locale_es-uy.js new file mode 100644 index 000000000..e9e3006a4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-uy.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "es-uy", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es-ve.js b/vendor/assets/components/angular-i18n/angular-locale_es-ve.js new file mode 100644 index 000000000..53db64550 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es-ve.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.\u00a0m.", + "p.\u00a0m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despu\u00e9s de Cristo" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "setiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "set.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y h:mm:ss a", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Bs", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "es-ve", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_es.js b/vendor/assets/components/angular-i18n/angular-locale_es.js new file mode 100644 index 000000000..e24e68cc5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_es.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a. m.", + "p. m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "anno D\u00f3mini" + ], + "ERAS": [ + "a. C.", + "d. C." + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b." + ], + "SHORTMONTH": [ + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sept.", + "oct.", + "nov.", + "dic." + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y H:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "H:mm:ss", + "short": "d/M/yy H:mm", + "shortDate": "d/M/yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "es", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_et-ee.js b/vendor/assets/components/angular-i18n/angular-locale_et-ee.js new file mode 100644 index 000000000..5fada63d2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_et-ee.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "p\u00fchap\u00e4ev", + "esmasp\u00e4ev", + "teisip\u00e4ev", + "kolmap\u00e4ev", + "neljap\u00e4ev", + "reede", + "laup\u00e4ev" + ], + "ERANAMES": [ + "enne meie aega", + "meie aja j\u00e4rgi" + ], + "ERAS": [ + "e.m.a.", + "m.a.j." + ], + "MONTH": [ + "jaanuar", + "veebruar", + "m\u00e4rts", + "aprill", + "mai", + "juuni", + "juuli", + "august", + "september", + "oktoober", + "november", + "detsember" + ], + "SHORTDAY": [ + "P", + "E", + "T", + "K", + "N", + "R", + "L" + ], + "SHORTMONTH": [ + "jaan", + "veebr", + "m\u00e4rts", + "apr", + "mai", + "juuni", + "juuli", + "aug", + "sept", + "okt", + "nov", + "dets" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y H:mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "H:mm.ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "et-ee", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_et.js b/vendor/assets/components/angular-i18n/angular-locale_et.js new file mode 100644 index 000000000..76d9f7dd7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_et.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "p\u00fchap\u00e4ev", + "esmasp\u00e4ev", + "teisip\u00e4ev", + "kolmap\u00e4ev", + "neljap\u00e4ev", + "reede", + "laup\u00e4ev" + ], + "ERANAMES": [ + "enne meie aega", + "meie aja j\u00e4rgi" + ], + "ERAS": [ + "e.m.a.", + "m.a.j." + ], + "MONTH": [ + "jaanuar", + "veebruar", + "m\u00e4rts", + "aprill", + "mai", + "juuni", + "juuli", + "august", + "september", + "oktoober", + "november", + "detsember" + ], + "SHORTDAY": [ + "P", + "E", + "T", + "K", + "N", + "R", + "L" + ], + "SHORTMONTH": [ + "jaan", + "veebr", + "m\u00e4rts", + "apr", + "mai", + "juuni", + "juuli", + "aug", + "sept", + "okt", + "nov", + "dets" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y H:mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "H:mm.ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "et", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_eu-es.js b/vendor/assets/components/angular-i18n/angular-locale_eu-es.js new file mode 100644 index 000000000..e1748919e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_eu-es.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "igandea", + "astelehena", + "asteartea", + "asteazkena", + "osteguna", + "ostirala", + "larunbata" + ], + "ERANAMES": [ + "K.a.", + "K.o." + ], + "ERAS": [ + "K.a.", + "K.o." + ], + "MONTH": [ + "urtarrilak", + "otsailak", + "martxoak", + "apirilak", + "maiatzak", + "ekainak", + "uztailak", + "abuztuak", + "irailak", + "urriak", + "azaroak", + "abenduak" + ], + "SHORTDAY": [ + "ig.", + "al.", + "ar.", + "az.", + "og.", + "or.", + "lr." + ], + "SHORTMONTH": [ + "urt.", + "ots.", + "mar.", + "api.", + "mai.", + "eka.", + "uzt.", + "abu.", + "ira.", + "urr.", + "aza.", + "abe." + ], + "fullDate": "y('e')'ko' MMMM d, EEEE", + "longDate": "y('e')'ko' MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y/MM/dd HH:mm", + "shortDate": "y/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "eu-es", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_eu.js b/vendor/assets/components/angular-i18n/angular-locale_eu.js new file mode 100644 index 000000000..6c968ff35 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_eu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "igandea", + "astelehena", + "asteartea", + "asteazkena", + "osteguna", + "ostirala", + "larunbata" + ], + "ERANAMES": [ + "K.a.", + "K.o." + ], + "ERAS": [ + "K.a.", + "K.o." + ], + "MONTH": [ + "urtarrilak", + "otsailak", + "martxoak", + "apirilak", + "maiatzak", + "ekainak", + "uztailak", + "abuztuak", + "irailak", + "urriak", + "azaroak", + "abenduak" + ], + "SHORTDAY": [ + "ig.", + "al.", + "ar.", + "az.", + "og.", + "or.", + "lr." + ], + "SHORTMONTH": [ + "urt.", + "ots.", + "mar.", + "api.", + "mai.", + "eka.", + "uzt.", + "abu.", + "ira.", + "urr.", + "aza.", + "abe." + ], + "fullDate": "y('e')'ko' MMMM d, EEEE", + "longDate": "y('e')'ko' MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y/MM/dd HH:mm", + "shortDate": "y/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "eu", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ewo-cm.js b/vendor/assets/components/angular-i18n/angular-locale_ewo-cm.js new file mode 100644 index 000000000..e554625fe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ewo-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "k\u00edk\u00edr\u00edg", + "ng\u0259g\u00f3g\u0259le" + ], + "DAY": [ + "s\u0254\u0301nd\u0254", + "m\u0254\u0301ndi", + "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301b\u025b\u030c", + "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301l\u025b\u0301", + "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301nyi", + "f\u00falad\u00e9", + "s\u00e9rad\u00e9" + ], + "ERANAMES": [ + "os\u00fas\u00faa Y\u00e9sus kiri", + "\u00e1mvus Y\u00e9sus Kir\u00eds" + ], + "ERAS": [ + "oyk", + "ayk" + ], + "MONTH": [ + "ng\u0254n os\u00fa", + "ng\u0254n b\u025b\u030c", + "ng\u0254n l\u00e1la", + "ng\u0254n nyina", + "ng\u0254n t\u00e1na", + "ng\u0254n sam\u0259na", + "ng\u0254n zamgb\u00e1la", + "ng\u0254n mwom", + "ng\u0254n ebul\u00fa", + "ng\u0254n aw\u00f3m", + "ng\u0254n aw\u00f3m ai dzi\u00e1", + "ng\u0254n aw\u00f3m ai b\u025b\u030c" + ], + "SHORTDAY": [ + "s\u0254\u0301n", + "m\u0254\u0301n", + "smb", + "sml", + "smn", + "f\u00fal", + "s\u00e9r" + ], + "SHORTMONTH": [ + "ngo", + "ngb", + "ngl", + "ngn", + "ngt", + "ngs", + "ngz", + "ngm", + "nge", + "nga", + "ngad", + "ngab" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ewo-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ewo.js b/vendor/assets/components/angular-i18n/angular-locale_ewo.js new file mode 100644 index 000000000..2c7c8d99b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ewo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "k\u00edk\u00edr\u00edg", + "ng\u0259g\u00f3g\u0259le" + ], + "DAY": [ + "s\u0254\u0301nd\u0254", + "m\u0254\u0301ndi", + "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301b\u025b\u030c", + "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301l\u025b\u0301", + "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301nyi", + "f\u00falad\u00e9", + "s\u00e9rad\u00e9" + ], + "ERANAMES": [ + "os\u00fas\u00faa Y\u00e9sus kiri", + "\u00e1mvus Y\u00e9sus Kir\u00eds" + ], + "ERAS": [ + "oyk", + "ayk" + ], + "MONTH": [ + "ng\u0254n os\u00fa", + "ng\u0254n b\u025b\u030c", + "ng\u0254n l\u00e1la", + "ng\u0254n nyina", + "ng\u0254n t\u00e1na", + "ng\u0254n sam\u0259na", + "ng\u0254n zamgb\u00e1la", + "ng\u0254n mwom", + "ng\u0254n ebul\u00fa", + "ng\u0254n aw\u00f3m", + "ng\u0254n aw\u00f3m ai dzi\u00e1", + "ng\u0254n aw\u00f3m ai b\u025b\u030c" + ], + "SHORTDAY": [ + "s\u0254\u0301n", + "m\u0254\u0301n", + "smb", + "sml", + "smn", + "f\u00fal", + "s\u00e9r" + ], + "SHORTMONTH": [ + "ngo", + "ngb", + "ngl", + "ngn", + "ngt", + "ngs", + "ngz", + "ngm", + "nge", + "nga", + "ngad", + "ngab" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ewo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fa-af.js b/vendor/assets/components/angular-i18n/angular-locale_fa-af.js new file mode 100644 index 000000000..73eb170e4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fa-af.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f", + "\u0645\u06cc\u0644\u0627\u062f\u06cc" + ], + "ERAS": [ + "\u0642.\u0645.", + "\u0645." + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0628\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0640\u06cc", + "\u0698\u0648\u0626\u0646", + "\u062c\u0648\u0644", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0645" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "y/M/d H:mm", + "shortDate": "y/M/d", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Af.", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u200e\u00a4-", + "negSuf": "", + "posPre": "\u200e\u00a4", + "posSuf": "" + } + ] + }, + "id": "fa-af", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fa-ir.js b/vendor/assets/components/angular-i18n/angular-locale_fa-ir.js new file mode 100644 index 000000000..643bb4d76 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fa-ir.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f", + "\u0645\u06cc\u0644\u0627\u062f\u06cc" + ], + "ERAS": [ + "\u0642.\u0645.", + "\u0645." + ], + "MONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "y/M/d H:mm", + "shortDate": "y/M/d", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u200e\u00a4-", + "negSuf": "", + "posPre": "\u200e\u00a4", + "posSuf": "" + } + ] + }, + "id": "fa-ir", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fa.js b/vendor/assets/components/angular-i18n/angular-locale_fa.js new file mode 100644 index 000000000..27d94926d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fa.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f", + "\u0645\u06cc\u0644\u0627\u062f\u06cc" + ], + "ERAS": [ + "\u0642.\u0645.", + "\u0645." + ], + "MONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "y/M/d H:mm", + "shortDate": "y/M/d", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rial", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u200e\u00a4-", + "negSuf": "", + "posPre": "\u200e\u00a4", + "posSuf": "" + } + ] + }, + "id": "fa", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ff-cm.js b/vendor/assets/components/angular-i18n/angular-locale_ff-cm.js new file mode 100644 index 000000000..d45e78415 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ff-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "subaka", + "kikii\u0257e" + ], + "DAY": [ + "dewo", + "aa\u0253nde", + "mawbaare", + "njeslaare", + "naasaande", + "mawnde", + "hoore-biir" + ], + "ERANAMES": [ + "Hade Iisa", + "Caggal Iisa" + ], + "ERAS": [ + "H-I", + "C-I" + ], + "MONTH": [ + "siilo", + "colte", + "mbooy", + "see\u0257to", + "duujal", + "korse", + "morso", + "juko", + "siilto", + "yarkomaa", + "jolal", + "bowte" + ], + "SHORTDAY": [ + "dew", + "aa\u0253", + "maw", + "nje", + "naa", + "mwd", + "hbi" + ], + "SHORTMONTH": [ + "sii", + "col", + "mbo", + "see", + "duu", + "kor", + "mor", + "juk", + "slt", + "yar", + "jol", + "bow" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ff-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ff-gn.js b/vendor/assets/components/angular-i18n/angular-locale_ff-gn.js new file mode 100644 index 000000000..b9aaf288f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ff-gn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "subaka", + "kikii\u0257e" + ], + "DAY": [ + "dewo", + "aa\u0253nde", + "mawbaare", + "njeslaare", + "naasaande", + "mawnde", + "hoore-biir" + ], + "ERANAMES": [ + "Hade Iisa", + "Caggal Iisa" + ], + "ERAS": [ + "H-I", + "C-I" + ], + "MONTH": [ + "siilo", + "colte", + "mbooy", + "see\u0257to", + "duujal", + "korse", + "morso", + "juko", + "siilto", + "yarkomaa", + "jolal", + "bowte" + ], + "SHORTDAY": [ + "dew", + "aa\u0253", + "maw", + "nje", + "naa", + "mwd", + "hbi" + ], + "SHORTMONTH": [ + "sii", + "col", + "mbo", + "see", + "duu", + "kor", + "mor", + "juk", + "slt", + "yar", + "jol", + "bow" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FG", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ff-gn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ff-mr.js b/vendor/assets/components/angular-i18n/angular-locale_ff-mr.js new file mode 100644 index 000000000..14e0ea775 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ff-mr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "subaka", + "kikii\u0257e" + ], + "DAY": [ + "dewo", + "aa\u0253nde", + "mawbaare", + "njeslaare", + "naasaande", + "mawnde", + "hoore-biir" + ], + "ERANAMES": [ + "Hade Iisa", + "Caggal Iisa" + ], + "ERAS": [ + "H-I", + "C-I" + ], + "MONTH": [ + "siilo", + "colte", + "mbooy", + "see\u0257to", + "duujal", + "korse", + "morso", + "juko", + "siilto", + "yarkomaa", + "jolal", + "bowte" + ], + "SHORTDAY": [ + "dew", + "aa\u0253", + "maw", + "nje", + "naa", + "mwd", + "hbi" + ], + "SHORTMONTH": [ + "sii", + "col", + "mbo", + "see", + "duu", + "kor", + "mor", + "juk", + "slt", + "yar", + "jol", + "bow" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MRO", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ff-mr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ff-sn.js b/vendor/assets/components/angular-i18n/angular-locale_ff-sn.js new file mode 100644 index 000000000..6e4079991 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ff-sn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "subaka", + "kikii\u0257e" + ], + "DAY": [ + "dewo", + "aa\u0253nde", + "mawbaare", + "njeslaare", + "naasaande", + "mawnde", + "hoore-biir" + ], + "ERANAMES": [ + "Hade Iisa", + "Caggal Iisa" + ], + "ERAS": [ + "H-I", + "C-I" + ], + "MONTH": [ + "siilo", + "colte", + "mbooy", + "see\u0257to", + "duujal", + "korse", + "morso", + "juko", + "siilto", + "yarkomaa", + "jolal", + "bowte" + ], + "SHORTDAY": [ + "dew", + "aa\u0253", + "maw", + "nje", + "naa", + "mwd", + "hbi" + ], + "SHORTMONTH": [ + "sii", + "col", + "mbo", + "see", + "duu", + "kor", + "mor", + "juk", + "slt", + "yar", + "jol", + "bow" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ff-sn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ff.js b/vendor/assets/components/angular-i18n/angular-locale_ff.js new file mode 100644 index 000000000..6792d627d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ff.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "subaka", + "kikii\u0257e" + ], + "DAY": [ + "dewo", + "aa\u0253nde", + "mawbaare", + "njeslaare", + "naasaande", + "mawnde", + "hoore-biir" + ], + "ERANAMES": [ + "Hade Iisa", + "Caggal Iisa" + ], + "ERAS": [ + "H-I", + "C-I" + ], + "MONTH": [ + "siilo", + "colte", + "mbooy", + "see\u0257to", + "duujal", + "korse", + "morso", + "juko", + "siilto", + "yarkomaa", + "jolal", + "bowte" + ], + "SHORTDAY": [ + "dew", + "aa\u0253", + "maw", + "nje", + "naa", + "mwd", + "hbi" + ], + "SHORTMONTH": [ + "sii", + "col", + "mbo", + "see", + "duu", + "kor", + "mor", + "juk", + "slt", + "yar", + "jol", + "bow" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ff", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fi-fi.js b/vendor/assets/components/angular-i18n/angular-locale_fi-fi.js new file mode 100644 index 000000000..59f02b9a7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fi-fi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ap.", + "ip." + ], + "DAY": [ + "sunnuntaina", + "maanantaina", + "tiistaina", + "keskiviikkona", + "torstaina", + "perjantaina", + "lauantaina" + ], + "ERANAMES": [ + "ennen Kristuksen syntym\u00e4\u00e4", + "j\u00e4lkeen Kristuksen syntym\u00e4n" + ], + "ERAS": [ + "eKr.", + "jKr." + ], + "MONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "SHORTDAY": [ + "su", + "ma", + "ti", + "ke", + "to", + "pe", + "la" + ], + "SHORTMONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "fullDate": "cccc d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d.M.y H.mm.ss", + "mediumDate": "d.M.y", + "mediumTime": "H.mm.ss", + "short": "d.M.y H.mm", + "shortDate": "d.M.y", + "shortTime": "H.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fi-fi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fi.js b/vendor/assets/components/angular-i18n/angular-locale_fi.js new file mode 100644 index 000000000..395941e18 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ap.", + "ip." + ], + "DAY": [ + "sunnuntaina", + "maanantaina", + "tiistaina", + "keskiviikkona", + "torstaina", + "perjantaina", + "lauantaina" + ], + "ERANAMES": [ + "ennen Kristuksen syntym\u00e4\u00e4", + "j\u00e4lkeen Kristuksen syntym\u00e4n" + ], + "ERAS": [ + "eKr.", + "jKr." + ], + "MONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "SHORTDAY": [ + "su", + "ma", + "ti", + "ke", + "to", + "pe", + "la" + ], + "SHORTMONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "fullDate": "cccc d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d.M.y H.mm.ss", + "mediumDate": "d.M.y", + "mediumTime": "H.mm.ss", + "short": "d.M.y H.mm", + "shortDate": "d.M.y", + "shortTime": "H.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fil-ph.js b/vendor/assets/components/angular-i18n/angular-locale_fil-ph.js new file mode 100644 index 000000000..c8c0bebba --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fil-ph.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "ERANAMES": [ + "BC", + "AD" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Miy", + "Huw", + "Biy", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "Dis" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b1", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "fil-ph", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fil.js b/vendor/assets/components/angular-i18n/angular-locale_fil.js new file mode 100644 index 000000000..7dbc7b060 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fil.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "ERANAMES": [ + "BC", + "AD" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Miy", + "Huw", + "Biy", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "Dis" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b1", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "fil", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fo-fo.js b/vendor/assets/components/angular-i18n/angular-locale_fo-fo.js new file mode 100644 index 000000000..e89481472 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fo-fo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "um fyrrapartur", + "um seinnapartur" + ], + "DAY": [ + "sunnudagur", + "m\u00e1nadagur", + "t\u00fdsdagur", + "mikudagur", + "h\u00f3sdagur", + "fr\u00edggjadagur", + "leygardagur" + ], + "ERANAMES": [ + "fyrir Krist", + "eftir Krist" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "apr\u00edl", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "sun", + "m\u00e1n", + "t\u00fds", + "mik", + "h\u00f3s", + "fr\u00ed", + "ley" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "mai", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "des" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "d. MMM y", + "medium": "dd-MM-y HH:mm:ss", + "mediumDate": "dd-MM-y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "fo-fo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fo.js b/vendor/assets/components/angular-i18n/angular-locale_fo.js new file mode 100644 index 000000000..f31b638e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "um fyrrapartur", + "um seinnapartur" + ], + "DAY": [ + "sunnudagur", + "m\u00e1nadagur", + "t\u00fdsdagur", + "mikudagur", + "h\u00f3sdagur", + "fr\u00edggjadagur", + "leygardagur" + ], + "ERANAMES": [ + "fyrir Krist", + "eftir Krist" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "apr\u00edl", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "sun", + "m\u00e1n", + "t\u00fds", + "mik", + "h\u00f3s", + "fr\u00ed", + "ley" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "mai", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "des" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "d. MMM y", + "medium": "dd-MM-y HH:mm:ss", + "mediumDate": "dd-MM-y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "fo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-be.js b/vendor/assets/components/angular-i18n/angular-locale_fr-be.js new file mode 100644 index 000000000..ef1a13a84 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-be.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/MM/yy HH:mm", + "shortDate": "d/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-be", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-bf.js b/vendor/assets/components/angular-i18n/angular-locale_fr-bf.js new file mode 100644 index 000000000..b4fc38b55 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-bf.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-bf", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-bi.js b/vendor/assets/components/angular-i18n/angular-locale_fr-bi.js new file mode 100644 index 000000000..2236b9ff4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-bi.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FBu", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-bi", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-bj.js b/vendor/assets/components/angular-i18n/angular-locale_fr-bj.js new file mode 100644 index 000000000..eeb7df273 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-bj.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-bj", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-bl.js b/vendor/assets/components/angular-i18n/angular-locale_fr-bl.js new file mode 100644 index 000000000..be403034a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-bl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-bl", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ca.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ca.js new file mode 100644 index 000000000..3e8199116 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ca.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "y-MM-dd HH:mm:ss", + "mediumDate": "y-MM-dd", + "mediumTime": "HH:mm:ss", + "short": "yy-MM-dd HH:mm", + "shortDate": "yy-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-ca", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-cd.js b/vendor/assets/components/angular-i18n/angular-locale_fr-cd.js new file mode 100644 index 000000000..0a571fe39 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-cd.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FrCD", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-cd", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-cf.js b/vendor/assets/components/angular-i18n/angular-locale_fr-cf.js new file mode 100644 index 000000000..1ec34e2d7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-cf.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-cf", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-cg.js b/vendor/assets/components/angular-i18n/angular-locale_fr-cg.js new file mode 100644 index 000000000..00d550d06 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-cg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-cg", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ch.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ch.js new file mode 100644 index 000000000..bf009ad8f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ch.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "fr-ch", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ci.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ci.js new file mode 100644 index 000000000..0476264c8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ci.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-ci", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-cm.js b/vendor/assets/components/angular-i18n/angular-locale_fr-cm.js new file mode 100644 index 000000000..f8fbc96f3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-cm.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-dj.js b/vendor/assets/components/angular-i18n/angular-locale_fr-dj.js new file mode 100644 index 000000000..a6edb97e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-dj.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Fdj", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-dj", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-dz.js b/vendor/assets/components/angular-i18n/angular-locale_fr-dz.js new file mode 100644 index 000000000..67334ec44 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-dz.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-dz", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-fr.js b/vendor/assets/components/angular-i18n/angular-locale_fr-fr.js new file mode 100644 index 000000000..d85892de3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-fr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-fr", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ga.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ga.js new file mode 100644 index 000000000..5ae1e17fa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ga.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-ga", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-gf.js b/vendor/assets/components/angular-i18n/angular-locale_fr-gf.js new file mode 100644 index 000000000..f630dca3f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-gf.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-gf", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-gn.js b/vendor/assets/components/angular-i18n/angular-locale_fr-gn.js new file mode 100644 index 000000000..1413e8aee --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-gn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FG", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-gn", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-gp.js b/vendor/assets/components/angular-i18n/angular-locale_fr-gp.js new file mode 100644 index 000000000..b1aa03fbd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-gp.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-gp", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-gq.js b/vendor/assets/components/angular-i18n/angular-locale_fr-gq.js new file mode 100644 index 000000000..1656e34e8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-gq.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-gq", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ht.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ht.js new file mode 100644 index 000000000..b97941072 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ht.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "HTG", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-ht", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-km.js b/vendor/assets/components/angular-i18n/angular-locale_fr-km.js new file mode 100644 index 000000000..ed940fb38 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-km.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CF", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-km", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-lu.js b/vendor/assets/components/angular-i18n/angular-locale_fr-lu.js new file mode 100644 index 000000000..16970a9c9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-lu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-lu", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ma.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ma.js new file mode 100644 index 000000000..2e7b3ce0d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ma.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-ma", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-mc.js b/vendor/assets/components/angular-i18n/angular-locale_fr-mc.js new file mode 100644 index 000000000..8cafb57a4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-mc.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-mc", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-mf.js b/vendor/assets/components/angular-i18n/angular-locale_fr-mf.js new file mode 100644 index 000000000..3f3c83342 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-mf.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-mf", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-mg.js b/vendor/assets/components/angular-i18n/angular-locale_fr-mg.js new file mode 100644 index 000000000..27805653a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-mg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ar", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-mg", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ml.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ml.js new file mode 100644 index 000000000..3abf39f89 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ml.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-ml", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-mq.js b/vendor/assets/components/angular-i18n/angular-locale_fr-mq.js new file mode 100644 index 000000000..e043dfd8e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-mq.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-mq", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-mr.js b/vendor/assets/components/angular-i18n/angular-locale_fr-mr.js new file mode 100644 index 000000000..e4f3c0609 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-mr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MRO", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-mr", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-mu.js b/vendor/assets/components/angular-i18n/angular-locale_fr-mu.js new file mode 100644 index 000000000..85ec48f3e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-mu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MURs", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-mu", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-nc.js b/vendor/assets/components/angular-i18n/angular-locale_fr-nc.js new file mode 100644 index 000000000..6bca3a7da --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-nc.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFP", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-nc", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-ne.js b/vendor/assets/components/angular-i18n/angular-locale_fr-ne.js new file mode 100644 index 000000000..3ab7d45eb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-ne.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-ne", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-pf.js b/vendor/assets/components/angular-i18n/angular-locale_fr-pf.js new file mode 100644 index 000000000..91393778e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-pf.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFP", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-pf", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-pm.js b/vendor/assets/components/angular-i18n/angular-locale_fr-pm.js new file mode 100644 index 000000000..20ccb5468 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-pm.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-pm", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-re.js b/vendor/assets/components/angular-i18n/angular-locale_fr-re.js new file mode 100644 index 000000000..45a197832 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-re.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-re", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-rw.js b/vendor/assets/components/angular-i18n/angular-locale_fr-rw.js new file mode 100644 index 000000000..699048d82 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-rw.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RF", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-rw", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-sc.js b/vendor/assets/components/angular-i18n/angular-locale_fr-sc.js new file mode 100644 index 000000000..c49b0a1ff --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-sc.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SCR", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-sc", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-sn.js b/vendor/assets/components/angular-i18n/angular-locale_fr-sn.js new file mode 100644 index 000000000..08af3b7df --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-sn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-sn", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-sy.js b/vendor/assets/components/angular-i18n/angular-locale_fr-sy.js new file mode 100644 index 000000000..46ffdb191 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-sy.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-sy", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-td.js b/vendor/assets/components/angular-i18n/angular-locale_fr-td.js new file mode 100644 index 000000000..3b4540a2c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-td.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-td", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-tg.js b/vendor/assets/components/angular-i18n/angular-locale_fr-tg.js new file mode 100644 index 000000000..8cbc4aebe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-tg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-tg", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-tn.js b/vendor/assets/components/angular-i18n/angular-locale_fr-tn.js new file mode 100644 index 000000000..1f8926834 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-tn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-tn", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-vu.js b/vendor/assets/components/angular-i18n/angular-locale_fr-vu.js new file mode 100644 index 000000000..283a8e746 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-vu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "VUV", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-vu", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-wf.js b/vendor/assets/components/angular-i18n/angular-locale_fr-wf.js new file mode 100644 index 000000000..1c89017bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-wf.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFP", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-wf", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr-yt.js b/vendor/assets/components/angular-i18n/angular-locale_fr-yt.js new file mode 100644 index 000000000..ae8b580c8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr-yt.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr-yt", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fr.js b/vendor/assets/components/angular-i18n/angular-locale_fr.js new file mode 100644 index 000000000..7cc516d2e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "ERANAMES": [ + "avant J\u00e9sus-Christ", + "apr\u00e8s J\u00e9sus-Christ" + ], + "ERAS": [ + "av. J.-C.", + "ap. J.-C." + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "d\u00e9c." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "fr", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fur-it.js b/vendor/assets/components/angular-i18n/angular-locale_fur-it.js new file mode 100644 index 000000000..e3c4febb9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fur-it.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.", + "p." + ], + "DAY": [ + "domenie", + "lunis", + "martars", + "miercus", + "joibe", + "vinars", + "sabide" + ], + "ERANAMES": [ + "pdC", + "ddC" + ], + "ERAS": [ + "pdC", + "ddC" + ], + "MONTH": [ + "Zen\u00e2r", + "Fevr\u00e2r", + "Mar\u00e7", + "Avr\u00eel", + "Mai", + "Jugn", + "Lui", + "Avost", + "Setembar", + "Otubar", + "Novembar", + "Dicembar" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mie", + "joi", + "vin", + "sab" + ], + "SHORTMONTH": [ + "Zen", + "Fev", + "Mar", + "Avr", + "Mai", + "Jug", + "Lui", + "Avo", + "Set", + "Otu", + "Nov", + "Dic" + ], + "fullDate": "EEEE d 'di' MMMM 'dal' y", + "longDate": "d 'di' MMMM 'dal' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "fur-it", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fur.js b/vendor/assets/components/angular-i18n/angular-locale_fur.js new file mode 100644 index 000000000..a6818135f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fur.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.", + "p." + ], + "DAY": [ + "domenie", + "lunis", + "martars", + "miercus", + "joibe", + "vinars", + "sabide" + ], + "ERANAMES": [ + "pdC", + "ddC" + ], + "ERAS": [ + "pdC", + "ddC" + ], + "MONTH": [ + "Zen\u00e2r", + "Fevr\u00e2r", + "Mar\u00e7", + "Avr\u00eel", + "Mai", + "Jugn", + "Lui", + "Avost", + "Setembar", + "Otubar", + "Novembar", + "Dicembar" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mie", + "joi", + "vin", + "sab" + ], + "SHORTMONTH": [ + "Zen", + "Fev", + "Mar", + "Avr", + "Mai", + "Jug", + "Lui", + "Avo", + "Set", + "Otu", + "Nov", + "Dic" + ], + "fullDate": "EEEE d 'di' MMMM 'dal' y", + "longDate": "d 'di' MMMM 'dal' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "fur", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fy-nl.js b/vendor/assets/components/angular-i18n/angular-locale_fy-nl.js new file mode 100644 index 000000000..2ae06e45f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fy-nl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "snein", + "moandei", + "tiisdei", + "woansdei", + "tongersdei", + "freed", + "sneon" + ], + "ERANAMES": [ + "Foar Kristus", + "nei Kristus" + ], + "ERAS": [ + "f.Kr.", + "n.Kr." + ], + "MONTH": [ + "jannewaris", + "febrewaris", + "maart", + "april", + "maaie", + "juny", + "july", + "augustus", + "septimber", + "oktober", + "novimber", + "desimber" + ], + "SHORTDAY": [ + "si", + "mo", + "ti", + "wo", + "to", + "fr", + "so" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mai", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "fy-nl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_fy.js b/vendor/assets/components/angular-i18n/angular-locale_fy.js new file mode 100644 index 000000000..ad7f4880d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_fy.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "snein", + "moandei", + "tiisdei", + "woansdei", + "tongersdei", + "freed", + "sneon" + ], + "ERANAMES": [ + "Foar Kristus", + "nei Kristus" + ], + "ERAS": [ + "f.Kr.", + "n.Kr." + ], + "MONTH": [ + "jannewaris", + "febrewaris", + "maart", + "april", + "maaie", + "juny", + "july", + "augustus", + "septimber", + "oktober", + "novimber", + "desimber" + ], + "SHORTDAY": [ + "si", + "mo", + "ti", + "wo", + "to", + "fr", + "so" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mai", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "fy", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ga-ie.js b/vendor/assets/components/angular-i18n/angular-locale_ga-ie.js new file mode 100644 index 000000000..f6b205de8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ga-ie.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "D\u00e9 Domhnaigh", + "D\u00e9 Luain", + "D\u00e9 M\u00e1irt", + "D\u00e9 C\u00e9adaoin", + "D\u00e9ardaoin", + "D\u00e9 hAoine", + "D\u00e9 Sathairn" + ], + "ERANAMES": [ + "Roimh Chr\u00edost", + "Anno Domini" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "Ean\u00e1ir", + "Feabhra", + "M\u00e1rta", + "Aibre\u00e1n", + "Bealtaine", + "Meitheamh", + "I\u00fail", + "L\u00fanasa", + "Me\u00e1n F\u00f3mhair", + "Deireadh F\u00f3mhair", + "Samhain", + "Nollaig" + ], + "SHORTDAY": [ + "Domh", + "Luan", + "M\u00e1irt", + "C\u00e9ad", + "D\u00e9ar", + "Aoine", + "Sath" + ], + "SHORTMONTH": [ + "Ean", + "Feabh", + "M\u00e1rta", + "Aib", + "Beal", + "Meith", + "I\u00fail", + "L\u00fan", + "MF\u00f3mh", + "DF\u00f3mh", + "Samh", + "Noll" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ga-ie", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n >= 3 && n <= 6) { return PLURAL_CATEGORY.FEW; } if (n >= 7 && n <= 10) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ga.js b/vendor/assets/components/angular-i18n/angular-locale_ga.js new file mode 100644 index 000000000..7d1383f13 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ga.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "D\u00e9 Domhnaigh", + "D\u00e9 Luain", + "D\u00e9 M\u00e1irt", + "D\u00e9 C\u00e9adaoin", + "D\u00e9ardaoin", + "D\u00e9 hAoine", + "D\u00e9 Sathairn" + ], + "ERANAMES": [ + "Roimh Chr\u00edost", + "Anno Domini" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "Ean\u00e1ir", + "Feabhra", + "M\u00e1rta", + "Aibre\u00e1n", + "Bealtaine", + "Meitheamh", + "I\u00fail", + "L\u00fanasa", + "Me\u00e1n F\u00f3mhair", + "Deireadh F\u00f3mhair", + "Samhain", + "Nollaig" + ], + "SHORTDAY": [ + "Domh", + "Luan", + "M\u00e1irt", + "C\u00e9ad", + "D\u00e9ar", + "Aoine", + "Sath" + ], + "SHORTMONTH": [ + "Ean", + "Feabh", + "M\u00e1rta", + "Aib", + "Beal", + "Meith", + "I\u00fail", + "L\u00fan", + "MF\u00f3mh", + "DF\u00f3mh", + "Samh", + "Noll" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ga", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n >= 3 && n <= 6) { return PLURAL_CATEGORY.FEW; } if (n >= 7 && n <= 10) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gd-gb.js b/vendor/assets/components/angular-i18n/angular-locale_gd-gb.js new file mode 100644 index 000000000..de5ed5b4c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gd-gb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "m", + "f" + ], + "DAY": [ + "DiD\u00f2mhnaich", + "DiLuain", + "DiM\u00e0irt", + "DiCiadain", + "DiarDaoin", + "DihAoine", + "DiSathairne" + ], + "ERANAMES": [ + "Ro Chr\u00ecosta", + "An d\u00e8idh Chr\u00ecosta" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "dhen Fhaoilleach", + "dhen Ghearran", + "dhen Mh\u00e0rt", + "dhen Ghiblean", + "dhen Ch\u00e8itean", + "dhen \u00d2gmhios", + "dhen Iuchar", + "dhen L\u00f9nastal", + "dhen t-Sultain", + "dhen D\u00e0mhair", + "dhen t-Samhain", + "dhen D\u00f9bhlachd" + ], + "SHORTDAY": [ + "DiD", + "DiL", + "DiM", + "DiC", + "Dia", + "Dih", + "DiS" + ], + "SHORTMONTH": [ + "Faoi", + "Gearr", + "M\u00e0rt", + "Gibl", + "C\u00e8it", + "\u00d2gmh", + "Iuch", + "L\u00f9na", + "Sult", + "D\u00e0mh", + "Samh", + "D\u00f9bh" + ], + "fullDate": "EEEE, d'mh' MMMM y", + "longDate": "d'mh' MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gd-gb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gd.js b/vendor/assets/components/angular-i18n/angular-locale_gd.js new file mode 100644 index 000000000..e745b6edd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gd.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "m", + "f" + ], + "DAY": [ + "DiD\u00f2mhnaich", + "DiLuain", + "DiM\u00e0irt", + "DiCiadain", + "DiarDaoin", + "DihAoine", + "DiSathairne" + ], + "ERANAMES": [ + "Ro Chr\u00ecosta", + "An d\u00e8idh Chr\u00ecosta" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "dhen Fhaoilleach", + "dhen Ghearran", + "dhen Mh\u00e0rt", + "dhen Ghiblean", + "dhen Ch\u00e8itean", + "dhen \u00d2gmhios", + "dhen Iuchar", + "dhen L\u00f9nastal", + "dhen t-Sultain", + "dhen D\u00e0mhair", + "dhen t-Samhain", + "dhen D\u00f9bhlachd" + ], + "SHORTDAY": [ + "DiD", + "DiL", + "DiM", + "DiC", + "Dia", + "Dih", + "DiS" + ], + "SHORTMONTH": [ + "Faoi", + "Gearr", + "M\u00e0rt", + "Gibl", + "C\u00e8it", + "\u00d2gmh", + "Iuch", + "L\u00f9na", + "Sult", + "D\u00e0mh", + "Samh", + "D\u00f9bh" + ], + "fullDate": "EEEE, d'mh' MMMM y", + "longDate": "d'mh' MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gd", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gl-es.js b/vendor/assets/components/angular-i18n/angular-locale_gl-es.js new file mode 100644 index 000000000..41b79a10e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gl-es.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "luns", + "martes", + "m\u00e9rcores", + "xoves", + "venres", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "xaneiro", + "febreiro", + "marzo", + "abril", + "maio", + "xu\u00f1o", + "xullo", + "agosto", + "setembro", + "outubro", + "novembro", + "decembro" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "m\u00e9r", + "xov", + "ven", + "s\u00e1b" + ], + "SHORTMONTH": [ + "xan", + "feb", + "mar", + "abr", + "mai", + "xu\u00f1", + "xul", + "ago", + "set", + "out", + "nov", + "dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gl-es", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gl.js b/vendor/assets/components/angular-i18n/angular-locale_gl.js new file mode 100644 index 000000000..e7cdbab0c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "luns", + "martes", + "m\u00e9rcores", + "xoves", + "venres", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "despois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "xaneiro", + "febreiro", + "marzo", + "abril", + "maio", + "xu\u00f1o", + "xullo", + "agosto", + "setembro", + "outubro", + "novembro", + "decembro" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "m\u00e9r", + "xov", + "ven", + "s\u00e1b" + ], + "SHORTMONTH": [ + "xan", + "feb", + "mar", + "abr", + "mai", + "xu\u00f1", + "xul", + "ago", + "set", + "out", + "nov", + "dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gsw-ch.js b/vendor/assets/components/angular-i18n/angular-locale_gsw-ch.js new file mode 100644 index 000000000..2c1a2ceb9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gsw-ch.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "gsw-ch", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gsw-fr.js b/vendor/assets/components/angular-i18n/angular-locale_gsw-fr.js new file mode 100644 index 000000000..0d6c575c7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gsw-fr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "gsw-fr", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gsw-li.js b/vendor/assets/components/angular-i18n/angular-locale_gsw-li.js new file mode 100644 index 000000000..24061ad37 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gsw-li.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "gsw-li", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gsw.js b/vendor/assets/components/angular-i18n/angular-locale_gsw.js new file mode 100644 index 000000000..6c648d35e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gsw.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "dd.MM.y HH:mm:ss", + "mediumDate": "dd.MM.y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "gsw", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gu-in.js b/vendor/assets/components/angular-i18n/angular-locale_gu-in.js new file mode 100644 index 000000000..6986e6a35 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gu-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", + "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0", + "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", + "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", + "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0", + "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0" + ], + "ERANAMES": [ + "\u0a88\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8 \u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u0ac7", + "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8" + ], + "ERAS": [ + "\u0a88\u0ab8\u0ac1\u0aa8\u0abe \u0a9c\u0aa8\u0acd\u0aae \u0aaa\u0ab9\u0ac7\u0ab2\u0abe", + "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8" + ], + "MONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", + "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0" + ], + "SHORTDAY": [ + "\u0ab0\u0ab5\u0abf", + "\u0ab8\u0acb\u0aae", + "\u0aae\u0a82\u0a97\u0ab3", + "\u0aac\u0ac1\u0aa7", + "\u0a97\u0ac1\u0ab0\u0ac1", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", + "\u0ab6\u0aa8\u0abf" + ], + "SHORTMONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", + "\u0a91\u0a95\u0acd\u0a9f\u0acb", + "\u0aa8\u0ab5\u0ac7", + "\u0aa1\u0abf\u0ab8\u0ac7" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y hh:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "hh:mm:ss a", + "short": "d/M/yy hh:mm a", + "shortDate": "d/M/yy", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gu-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gu.js b/vendor/assets/components/angular-i18n/angular-locale_gu.js new file mode 100644 index 000000000..ff8693ded --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", + "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0", + "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", + "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", + "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0", + "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0" + ], + "ERANAMES": [ + "\u0a88\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8 \u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u0ac7", + "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8" + ], + "ERAS": [ + "\u0a88\u0ab8\u0ac1\u0aa8\u0abe \u0a9c\u0aa8\u0acd\u0aae \u0aaa\u0ab9\u0ac7\u0ab2\u0abe", + "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8" + ], + "MONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", + "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0" + ], + "SHORTDAY": [ + "\u0ab0\u0ab5\u0abf", + "\u0ab8\u0acb\u0aae", + "\u0aae\u0a82\u0a97\u0ab3", + "\u0aac\u0ac1\u0aa7", + "\u0a97\u0ac1\u0ab0\u0ac1", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", + "\u0ab6\u0aa8\u0abf" + ], + "SHORTMONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", + "\u0a91\u0a95\u0acd\u0a9f\u0acb", + "\u0aa8\u0ab5\u0ac7", + "\u0aa1\u0abf\u0ab8\u0ac7" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y hh:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "hh:mm:ss a", + "short": "d/M/yy hh:mm a", + "shortDate": "d/M/yy", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gu", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_guz-ke.js b/vendor/assets/components/angular-i18n/angular-locale_guz-ke.js new file mode 100644 index 000000000..737206d08 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_guz-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Ma/Mo", + "Mambia/Mog" + ], + "DAY": [ + "Chumapiri", + "Chumatato", + "Chumaine", + "Chumatano", + "Aramisi", + "Ichuma", + "Esabato" + ], + "ERANAMES": [ + "Yeso ataiborwa", + "Yeso kaiboirwe" + ], + "ERAS": [ + "YA", + "YK" + ], + "MONTH": [ + "Chanuari", + "Feburari", + "Machi", + "Apiriri", + "Mei", + "Juni", + "Chulai", + "Agosti", + "Septemba", + "Okitoba", + "Nobemba", + "Disemba" + ], + "SHORTDAY": [ + "Cpr", + "Ctt", + "Cmn", + "Cmt", + "Ars", + "Icm", + "Est" + ], + "SHORTMONTH": [ + "Can", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Cul", + "Agt", + "Sep", + "Okt", + "Nob", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "guz-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_guz.js b/vendor/assets/components/angular-i18n/angular-locale_guz.js new file mode 100644 index 000000000..9087f594e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_guz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Ma/Mo", + "Mambia/Mog" + ], + "DAY": [ + "Chumapiri", + "Chumatato", + "Chumaine", + "Chumatano", + "Aramisi", + "Ichuma", + "Esabato" + ], + "ERANAMES": [ + "Yeso ataiborwa", + "Yeso kaiboirwe" + ], + "ERAS": [ + "YA", + "YK" + ], + "MONTH": [ + "Chanuari", + "Feburari", + "Machi", + "Apiriri", + "Mei", + "Juni", + "Chulai", + "Agosti", + "Septemba", + "Okitoba", + "Nobemba", + "Disemba" + ], + "SHORTDAY": [ + "Cpr", + "Ctt", + "Cmn", + "Cmt", + "Ars", + "Icm", + "Est" + ], + "SHORTMONTH": [ + "Can", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Cul", + "Agt", + "Sep", + "Okt", + "Nob", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "guz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gv-im.js b/vendor/assets/components/angular-i18n/angular-locale_gv-im.js new file mode 100644 index 000000000..8a4f03efe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gv-im.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Jedoonee", + "Jelhein", + "Jemayrt", + "Jercean", + "Jerdein", + "Jeheiney", + "Jesarn" + ], + "ERANAMES": [ + "RC", + "AD" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "Jerrey-geuree", + "Toshiaght-arree", + "Mayrnt", + "Averil", + "Boaldyn", + "Mean-souree", + "Jerrey-souree", + "Luanistyn", + "Mean-fouyir", + "Jerrey-fouyir", + "Mee Houney", + "Mee ny Nollick" + ], + "SHORTDAY": [ + "Jed", + "Jel", + "Jem", + "Jerc", + "Jerd", + "Jeh", + "Jes" + ], + "SHORTMONTH": [ + "J-guer", + "T-arree", + "Mayrnt", + "Avrril", + "Boaldyn", + "M-souree", + "J-souree", + "Luanistyn", + "M-fouyir", + "J-fouyir", + "M.Houney", + "M.Nollick" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "MMM dd, y HH:mm:ss", + "mediumDate": "MMM dd, y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gv-im", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_gv.js b/vendor/assets/components/angular-i18n/angular-locale_gv.js new file mode 100644 index 000000000..5aabb4b5a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_gv.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Jedoonee", + "Jelhein", + "Jemayrt", + "Jercean", + "Jerdein", + "Jeheiney", + "Jesarn" + ], + "ERANAMES": [ + "RC", + "AD" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "Jerrey-geuree", + "Toshiaght-arree", + "Mayrnt", + "Averil", + "Boaldyn", + "Mean-souree", + "Jerrey-souree", + "Luanistyn", + "Mean-fouyir", + "Jerrey-fouyir", + "Mee Houney", + "Mee ny Nollick" + ], + "SHORTDAY": [ + "Jed", + "Jel", + "Jem", + "Jerc", + "Jerd", + "Jeh", + "Jes" + ], + "SHORTMONTH": [ + "J-guer", + "T-arree", + "Mayrnt", + "Avrril", + "Boaldyn", + "M-souree", + "J-souree", + "Luanistyn", + "M-fouyir", + "J-fouyir", + "M.Houney", + "M.Nollick" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "MMM dd, y HH:mm:ss", + "mediumDate": "MMM dd, y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "gv", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ha-latn-gh.js b/vendor/assets/components/angular-i18n/angular-locale_ha-latn-gh.js new file mode 100644 index 000000000..2b2115417 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ha-latn-gh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lahadi", + "Litinin", + "Talata", + "Laraba", + "Alhamis", + "Jumma\u02bca", + "Asabar" + ], + "ERANAMES": [ + "Kafin haihuwar annab", + "Bayan haihuwar annab" + ], + "ERAS": [ + "KHAI", + "BHAI" + ], + "MONTH": [ + "Janairu", + "Faburairu", + "Maris", + "Afirilu", + "Mayu", + "Yuni", + "Yuli", + "Agusta", + "Satumba", + "Oktoba", + "Nuwamba", + "Disamba" + ], + "SHORTDAY": [ + "Lh", + "Li", + "Ta", + "Lr", + "Al", + "Ju", + "As" + ], + "SHORTMONTH": [ + "Jan", + "Fab", + "Mar", + "Afi", + "May", + "Yun", + "Yul", + "Agu", + "Sat", + "Okt", + "Nuw", + "Dis" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GHS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ha-latn-gh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ha-latn-ne.js b/vendor/assets/components/angular-i18n/angular-locale_ha-latn-ne.js new file mode 100644 index 000000000..8aa2808d2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ha-latn-ne.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lahadi", + "Litinin", + "Talata", + "Laraba", + "Alhamis", + "Jumma\u02bca", + "Asabar" + ], + "ERANAMES": [ + "Kafin haihuwar annab", + "Bayan haihuwar annab" + ], + "ERAS": [ + "KHAI", + "BHAI" + ], + "MONTH": [ + "Janairu", + "Faburairu", + "Maris", + "Afirilu", + "Mayu", + "Yuni", + "Yuli", + "Agusta", + "Satumba", + "Oktoba", + "Nuwamba", + "Disamba" + ], + "SHORTDAY": [ + "Lh", + "Li", + "Ta", + "Lr", + "Al", + "Ju", + "As" + ], + "SHORTMONTH": [ + "Jan", + "Fab", + "Mar", + "Afi", + "May", + "Yun", + "Yul", + "Agu", + "Sat", + "Okt", + "Nuw", + "Dis" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ha-latn-ne", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ha-latn-ng.js b/vendor/assets/components/angular-i18n/angular-locale_ha-latn-ng.js new file mode 100644 index 000000000..76602c6ba --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ha-latn-ng.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lahadi", + "Litinin", + "Talata", + "Laraba", + "Alhamis", + "Jumma\u02bca", + "Asabar" + ], + "ERANAMES": [ + "Kafin haihuwar annab", + "Bayan haihuwar annab" + ], + "ERAS": [ + "KHAI", + "BHAI" + ], + "MONTH": [ + "Janairu", + "Faburairu", + "Maris", + "Afirilu", + "Mayu", + "Yuni", + "Yuli", + "Agusta", + "Satumba", + "Oktoba", + "Nuwamba", + "Disamba" + ], + "SHORTDAY": [ + "Lh", + "Li", + "Ta", + "Lr", + "Al", + "Ju", + "As" + ], + "SHORTMONTH": [ + "Jan", + "Fab", + "Mar", + "Afi", + "May", + "Yun", + "Yul", + "Agu", + "Sat", + "Okt", + "Nuw", + "Dis" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a6", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ha-latn-ng", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ha-latn.js b/vendor/assets/components/angular-i18n/angular-locale_ha-latn.js new file mode 100644 index 000000000..825ce6ffe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ha-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lahadi", + "Litinin", + "Talata", + "Laraba", + "Alhamis", + "Jumma\u02bca", + "Asabar" + ], + "ERANAMES": [ + "Kafin haihuwar annab", + "Bayan haihuwar annab" + ], + "ERAS": [ + "KHAI", + "BHAI" + ], + "MONTH": [ + "Janairu", + "Faburairu", + "Maris", + "Afirilu", + "Mayu", + "Yuni", + "Yuli", + "Agusta", + "Satumba", + "Oktoba", + "Nuwamba", + "Disamba" + ], + "SHORTDAY": [ + "Lh", + "Li", + "Ta", + "Lr", + "Al", + "Ju", + "As" + ], + "SHORTMONTH": [ + "Jan", + "Fab", + "Mar", + "Afi", + "May", + "Yun", + "Yul", + "Agu", + "Sat", + "Okt", + "Nuw", + "Dis" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ha-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ha.js b/vendor/assets/components/angular-i18n/angular-locale_ha.js new file mode 100644 index 000000000..84f8b9f5f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ha.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lahadi", + "Litinin", + "Talata", + "Laraba", + "Alhamis", + "Jumma\u02bca", + "Asabar" + ], + "ERANAMES": [ + "Kafin haihuwar annab", + "Bayan haihuwar annab" + ], + "ERAS": [ + "KHAI", + "BHAI" + ], + "MONTH": [ + "Janairu", + "Faburairu", + "Maris", + "Afirilu", + "Mayu", + "Yuni", + "Yuli", + "Agusta", + "Satumba", + "Oktoba", + "Nuwamba", + "Disamba" + ], + "SHORTDAY": [ + "Lh", + "Li", + "Ta", + "Lr", + "Al", + "Ju", + "As" + ], + "SHORTMONTH": [ + "Jan", + "Fab", + "Mar", + "Afi", + "May", + "Yun", + "Yul", + "Agu", + "Sat", + "Okt", + "Nuw", + "Dis" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a6", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ha", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_haw-us.js b/vendor/assets/components/angular-i18n/angular-locale_haw-us.js new file mode 100644 index 000000000..06be5fbbb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_haw-us.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "L\u0101pule", + "Po\u02bbakahi", + "Po\u02bbalua", + "Po\u02bbakolu", + "Po\u02bbah\u0101", + "Po\u02bbalima", + "Po\u02bbaono" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Ianuali", + "Pepeluali", + "Malaki", + "\u02bbApelila", + "Mei", + "Iune", + "Iulai", + "\u02bbAukake", + "Kepakemapa", + "\u02bbOkakopa", + "Nowemapa", + "Kekemapa" + ], + "SHORTDAY": [ + "LP", + "P1", + "P2", + "P3", + "P4", + "P5", + "P6" + ], + "SHORTMONTH": [ + "Ian.", + "Pep.", + "Mal.", + "\u02bbAp.", + "Mei", + "Iun.", + "Iul.", + "\u02bbAu.", + "Kep.", + "\u02bbOk.", + "Now.", + "Kek." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "haw-us", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_haw.js b/vendor/assets/components/angular-i18n/angular-locale_haw.js new file mode 100644 index 000000000..09369e2ae --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_haw.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "L\u0101pule", + "Po\u02bbakahi", + "Po\u02bbalua", + "Po\u02bbakolu", + "Po\u02bbah\u0101", + "Po\u02bbalima", + "Po\u02bbaono" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Ianuali", + "Pepeluali", + "Malaki", + "\u02bbApelila", + "Mei", + "Iune", + "Iulai", + "\u02bbAukake", + "Kepakemapa", + "\u02bbOkakopa", + "Nowemapa", + "Kekemapa" + ], + "SHORTDAY": [ + "LP", + "P1", + "P2", + "P3", + "P4", + "P5", + "P6" + ], + "SHORTMONTH": [ + "Ian.", + "Pep.", + "Mal.", + "\u02bbAp.", + "Mei", + "Iun.", + "Iul.", + "\u02bbAu.", + "Kep.", + "\u02bbOk.", + "Now.", + "Kek." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "haw", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_he-il.js b/vendor/assets/components/angular-i18n/angular-locale_he-il.js new file mode 100644 index 000000000..9d1ce00f2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_he-il.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "ERANAMES": [ + "\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4", + "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4" + ], + "ERAS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1", + "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5\u05f3", + "\u05e4\u05d1\u05e8\u05f3", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05f3", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05f3", + "\u05e1\u05e4\u05d8\u05f3", + "\u05d0\u05d5\u05e7\u05f3", + "\u05e0\u05d5\u05d1\u05f3", + "\u05d3\u05e6\u05de\u05f3" + ], + "fullDate": "EEEE, d \u05d1MMMM y", + "longDate": "d \u05d1MMMM y", + "medium": "d \u05d1MMM y HH:mm:ss", + "mediumDate": "d \u05d1MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.y HH:mm", + "shortDate": "d.M.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20aa", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "he-il", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (i == 2 && vf.v == 0) { return PLURAL_CATEGORY.TWO; } if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_he.js b/vendor/assets/components/angular-i18n/angular-locale_he.js new file mode 100644 index 000000000..31d045841 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_he.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "ERANAMES": [ + "\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4", + "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4" + ], + "ERAS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1", + "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5\u05f3", + "\u05e4\u05d1\u05e8\u05f3", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05f3", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05f3", + "\u05e1\u05e4\u05d8\u05f3", + "\u05d0\u05d5\u05e7\u05f3", + "\u05e0\u05d5\u05d1\u05f3", + "\u05d3\u05e6\u05de\u05f3" + ], + "fullDate": "EEEE, d \u05d1MMMM y", + "longDate": "d \u05d1MMMM y", + "medium": "d \u05d1MMM y HH:mm:ss", + "mediumDate": "d \u05d1MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.y HH:mm", + "shortDate": "d.M.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20aa", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "he", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (i == 2 && vf.v == 0) { return PLURAL_CATEGORY.TWO; } if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hi-in.js b/vendor/assets/components/angular-i18n/angular-locale_hi-in.js new file mode 100644 index 000000000..b284726cd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hi-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935", + "\u0908\u0938\u0935\u0940 \u0938\u0928" + ], + "ERAS": [ + "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935", + "\u0908\u0938\u094d\u0935\u0940" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u093c\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u0902\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u0902\u092c\u0930", + "\u0926\u093f\u0938\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0932", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u0928\u0970", + "\u092b\u093c\u0930\u0970", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0970", + "\u0905\u0917\u0970", + "\u0938\u093f\u0924\u0970", + "\u0905\u0915\u094d\u0924\u0942\u0970", + "\u0928\u0935\u0970", + "\u0926\u093f\u0938\u0970" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "dd/MM/y h:mm:ss a", + "mediumDate": "dd/MM/y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "hi-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hi.js b/vendor/assets/components/angular-i18n/angular-locale_hi.js new file mode 100644 index 000000000..a1b3e3f8f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hi.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935", + "\u0908\u0938\u0935\u0940 \u0938\u0928" + ], + "ERAS": [ + "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935", + "\u0908\u0938\u094d\u0935\u0940" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u093c\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u0902\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u0902\u092c\u0930", + "\u0926\u093f\u0938\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0932", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u0928\u0970", + "\u092b\u093c\u0930\u0970", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0970", + "\u0905\u0917\u0970", + "\u0938\u093f\u0924\u0970", + "\u0905\u0915\u094d\u0924\u0942\u0970", + "\u0928\u0935\u0970", + "\u0926\u093f\u0938\u0970" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "dd/MM/y h:mm:ss a", + "mediumDate": "dd/MM/y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "hi", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hr-ba.js b/vendor/assets/components/angular-i18n/angular-locale_hr-ba.js new file mode 100644 index 000000000..e7f16f8c9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hr-ba.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Prije Krista", + "Poslije Krista" + ], + "ERAS": [ + "pr. Kr.", + "p. Kr." + ], + "MONTH": [ + "sije\u010dnja", + "velja\u010de", + "o\u017eujka", + "travnja", + "svibnja", + "lipnja", + "srpnja", + "kolovoza", + "rujna", + "listopada", + "studenoga", + "prosinca" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "sij", + "velj", + "o\u017eu", + "tra", + "svi", + "lip", + "srp", + "kol", + "ruj", + "lis", + "stu", + "pro" + ], + "fullDate": "EEEE, d. MMMM y.", + "longDate": "d. MMMM y.", + "medium": "d. MMM y. HH:mm:ss", + "mediumDate": "d. MMM y.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y. HH:mm", + "shortDate": "dd.MM.y.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KM", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hr-ba", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hr-hr.js b/vendor/assets/components/angular-i18n/angular-locale_hr-hr.js new file mode 100644 index 000000000..4221b7ed9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hr-hr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Prije Krista", + "Poslije Krista" + ], + "ERAS": [ + "pr. Kr.", + "p. Kr." + ], + "MONTH": [ + "sije\u010dnja", + "velja\u010de", + "o\u017eujka", + "travnja", + "svibnja", + "lipnja", + "srpnja", + "kolovoza", + "rujna", + "listopada", + "studenoga", + "prosinca" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "sij", + "velj", + "o\u017eu", + "tra", + "svi", + "lip", + "srp", + "kol", + "ruj", + "lis", + "stu", + "pro" + ], + "fullDate": "EEEE, d. MMMM y.", + "longDate": "d. MMMM y.", + "medium": "d. MMM y. HH:mm:ss", + "mediumDate": "d. MMM y.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y. HH:mm", + "shortDate": "dd.MM.y.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kn", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hr-hr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hr.js b/vendor/assets/components/angular-i18n/angular-locale_hr.js new file mode 100644 index 000000000..52f991e12 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Prije Krista", + "Poslije Krista" + ], + "ERAS": [ + "pr. Kr.", + "p. Kr." + ], + "MONTH": [ + "sije\u010dnja", + "velja\u010de", + "o\u017eujka", + "travnja", + "svibnja", + "lipnja", + "srpnja", + "kolovoza", + "rujna", + "listopada", + "studenoga", + "prosinca" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "sij", + "velj", + "o\u017eu", + "tra", + "svi", + "lip", + "srp", + "kol", + "ruj", + "lis", + "stu", + "pro" + ], + "fullDate": "EEEE, d. MMMM y.", + "longDate": "d. MMMM y.", + "medium": "d. MMM y. HH:mm:ss", + "mediumDate": "d. MMM y.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y. HH:mm", + "shortDate": "dd.MM.y.", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kn", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hsb-de.js b/vendor/assets/components/angular-i18n/angular-locale_hsb-de.js new file mode 100644 index 000000000..f2cad0b21 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hsb-de.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopo\u0142dnja", + "popo\u0142dnju" + ], + "DAY": [ + "njed\u017aela", + "p\u00f3nd\u017aela", + "wutora", + "srjeda", + "\u0161tw\u00f3rtk", + "pjatk", + "sobota" + ], + "ERANAMES": [ + "p\u0159ed Chrystowym narod\u017aenjom", + "po Chrystowym narod\u017aenju" + ], + "ERAS": [ + "p\u0159.Chr.n.", + "po Chr.n." + ], + "MONTH": [ + "januara", + "februara", + "m\u011brca", + "apryla", + "meje", + "junija", + "julija", + "awgusta", + "septembra", + "oktobra", + "nowembra", + "decembra" + ], + "SHORTDAY": [ + "nje", + "p\u00f3n", + "wut", + "srj", + "\u0161tw", + "pja", + "sob" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "m\u011br.", + "apr.", + "mej.", + "jun.", + "jul.", + "awg.", + "sep.", + "okt.", + "now.", + "dec." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d.M.y H:mm:ss", + "mediumDate": "d.M.y", + "mediumTime": "H:mm:ss", + "short": "d.M.yy H:mm 'hod\u017a'.", + "shortDate": "d.M.yy", + "shortTime": "H:mm 'hod\u017a'." + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hsb-de", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hsb.js b/vendor/assets/components/angular-i18n/angular-locale_hsb.js new file mode 100644 index 000000000..29aa80ca8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hsb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopo\u0142dnja", + "popo\u0142dnju" + ], + "DAY": [ + "njed\u017aela", + "p\u00f3nd\u017aela", + "wutora", + "srjeda", + "\u0161tw\u00f3rtk", + "pjatk", + "sobota" + ], + "ERANAMES": [ + "p\u0159ed Chrystowym narod\u017aenjom", + "po Chrystowym narod\u017aenju" + ], + "ERAS": [ + "p\u0159.Chr.n.", + "po Chr.n." + ], + "MONTH": [ + "januara", + "februara", + "m\u011brca", + "apryla", + "meje", + "junija", + "julija", + "awgusta", + "septembra", + "oktobra", + "nowembra", + "decembra" + ], + "SHORTDAY": [ + "nje", + "p\u00f3n", + "wut", + "srj", + "\u0161tw", + "pja", + "sob" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "m\u011br.", + "apr.", + "mej.", + "jun.", + "jul.", + "awg.", + "sep.", + "okt.", + "now.", + "dec." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d.M.y H:mm:ss", + "mediumDate": "d.M.y", + "mediumTime": "H:mm:ss", + "short": "d.M.yy H:mm 'hod\u017a'.", + "shortDate": "d.M.yy", + "shortTime": "H:mm 'hod\u017a'." + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hsb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hu-hu.js b/vendor/assets/components/angular-i18n/angular-locale_hu-hu.js new file mode 100644 index 000000000..2226ac1cd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hu-hu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "de.", + "du." + ], + "DAY": [ + "vas\u00e1rnap", + "h\u00e9tf\u0151", + "kedd", + "szerda", + "cs\u00fct\u00f6rt\u00f6k", + "p\u00e9ntek", + "szombat" + ], + "ERANAMES": [ + "id\u0151sz\u00e1m\u00edt\u00e1sunk el\u0151tt", + "id\u0151sz\u00e1m\u00edt\u00e1sunk szerint" + ], + "ERAS": [ + "i. e.", + "i. sz." + ], + "MONTH": [ + "janu\u00e1r", + "febru\u00e1r", + "m\u00e1rcius", + "\u00e1prilis", + "m\u00e1jus", + "j\u00fanius", + "j\u00falius", + "augusztus", + "szeptember", + "okt\u00f3ber", + "november", + "december" + ], + "SHORTDAY": [ + "V", + "H", + "K", + "Sze", + "Cs", + "P", + "Szo" + ], + "SHORTMONTH": [ + "jan.", + "febr.", + "m\u00e1rc.", + "\u00e1pr.", + "m\u00e1j.", + "j\u00fan.", + "j\u00fal.", + "aug.", + "szept.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "y. MMMM d., EEEE", + "longDate": "y. MMMM d.", + "medium": "y. MMM d. H:mm:ss", + "mediumDate": "y. MMM d.", + "mediumTime": "H:mm:ss", + "short": "y. MM. dd. H:mm", + "shortDate": "y. MM. dd.", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ft", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hu-hu", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hu.js b/vendor/assets/components/angular-i18n/angular-locale_hu.js new file mode 100644 index 000000000..81a03e3e6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "de.", + "du." + ], + "DAY": [ + "vas\u00e1rnap", + "h\u00e9tf\u0151", + "kedd", + "szerda", + "cs\u00fct\u00f6rt\u00f6k", + "p\u00e9ntek", + "szombat" + ], + "ERANAMES": [ + "id\u0151sz\u00e1m\u00edt\u00e1sunk el\u0151tt", + "id\u0151sz\u00e1m\u00edt\u00e1sunk szerint" + ], + "ERAS": [ + "i. e.", + "i. sz." + ], + "MONTH": [ + "janu\u00e1r", + "febru\u00e1r", + "m\u00e1rcius", + "\u00e1prilis", + "m\u00e1jus", + "j\u00fanius", + "j\u00falius", + "augusztus", + "szeptember", + "okt\u00f3ber", + "november", + "december" + ], + "SHORTDAY": [ + "V", + "H", + "K", + "Sze", + "Cs", + "P", + "Szo" + ], + "SHORTMONTH": [ + "jan.", + "febr.", + "m\u00e1rc.", + "\u00e1pr.", + "m\u00e1j.", + "j\u00fan.", + "j\u00fal.", + "aug.", + "szept.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "y. MMMM d., EEEE", + "longDate": "y. MMMM d.", + "medium": "y. MMM d. H:mm:ss", + "mediumDate": "y. MMM d.", + "mediumTime": "H:mm:ss", + "short": "y. MM. dd. H:mm", + "shortDate": "y. MM. dd.", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ft", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hu", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hy-am.js b/vendor/assets/components/angular-i18n/angular-locale_hy-am.js new file mode 100644 index 000000000..17ae88788 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hy-am.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0561\u057c\u0561\u057b", + "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0570\u0565\u057f\u0578" + ], + "DAY": [ + "\u056f\u056b\u0580\u0561\u056f\u056b", + "\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b", + "\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b", + "\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b", + "\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b", + "\u0578\u0582\u0580\u0562\u0561\u0569", + "\u0577\u0561\u0562\u0561\u0569" + ], + "ERANAMES": [ + "\u0574.\u0569.\u0561.", + "\u0574.\u0569." + ], + "ERAS": [ + "\u0574.\u0569.\u0561.", + "\u0574.\u0569." + ], + "MONTH": [ + "\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b", + "\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b", + "\u0574\u0561\u0580\u057f\u056b", + "\u0561\u057a\u0580\u056b\u056c\u056b", + "\u0574\u0561\u0575\u056b\u057d\u056b", + "\u0570\u0578\u0582\u0576\u056b\u057d\u056b", + "\u0570\u0578\u0582\u056c\u056b\u057d\u056b", + "\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b", + "\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b", + "\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b", + "\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b", + "\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b" + ], + "SHORTDAY": [ + "\u056f\u056b\u0580", + "\u0565\u0580\u056f", + "\u0565\u0580\u0584", + "\u0579\u0580\u0584", + "\u0570\u0576\u0563", + "\u0578\u0582\u0580", + "\u0577\u0562\u0569" + ], + "SHORTMONTH": [ + "\u0570\u0576\u057e", + "\u0583\u057f\u057e", + "\u0574\u0580\u057f", + "\u0561\u057a\u0580", + "\u0574\u0575\u057d", + "\u0570\u0576\u057d", + "\u0570\u056c\u057d", + "\u0585\u0563\u057d", + "\u057d\u0565\u057a", + "\u0570\u0578\u056f", + "\u0576\u0578\u0575", + "\u0564\u0565\u056f" + ], + "fullDate": "y\u0569. MMMM d, EEEE", + "longDate": "dd MMMM, y\u0569.", + "medium": "dd MMM, y\u0569. H:mm:ss", + "mediumDate": "dd MMM, y\u0569.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Dram", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hy-am", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_hy.js b/vendor/assets/components/angular-i18n/angular-locale_hy.js new file mode 100644 index 000000000..bab016e49 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_hy.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0561\u057c\u0561\u057b", + "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0570\u0565\u057f\u0578" + ], + "DAY": [ + "\u056f\u056b\u0580\u0561\u056f\u056b", + "\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b", + "\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b", + "\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b", + "\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b", + "\u0578\u0582\u0580\u0562\u0561\u0569", + "\u0577\u0561\u0562\u0561\u0569" + ], + "ERANAMES": [ + "\u0574.\u0569.\u0561.", + "\u0574.\u0569." + ], + "ERAS": [ + "\u0574.\u0569.\u0561.", + "\u0574.\u0569." + ], + "MONTH": [ + "\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b", + "\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b", + "\u0574\u0561\u0580\u057f\u056b", + "\u0561\u057a\u0580\u056b\u056c\u056b", + "\u0574\u0561\u0575\u056b\u057d\u056b", + "\u0570\u0578\u0582\u0576\u056b\u057d\u056b", + "\u0570\u0578\u0582\u056c\u056b\u057d\u056b", + "\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b", + "\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b", + "\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b", + "\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b", + "\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b" + ], + "SHORTDAY": [ + "\u056f\u056b\u0580", + "\u0565\u0580\u056f", + "\u0565\u0580\u0584", + "\u0579\u0580\u0584", + "\u0570\u0576\u0563", + "\u0578\u0582\u0580", + "\u0577\u0562\u0569" + ], + "SHORTMONTH": [ + "\u0570\u0576\u057e", + "\u0583\u057f\u057e", + "\u0574\u0580\u057f", + "\u0561\u057a\u0580", + "\u0574\u0575\u057d", + "\u0570\u0576\u057d", + "\u0570\u056c\u057d", + "\u0585\u0563\u057d", + "\u057d\u0565\u057a", + "\u0570\u0578\u056f", + "\u0576\u0578\u0575", + "\u0564\u0565\u056f" + ], + "fullDate": "y\u0569. MMMM d, EEEE", + "longDate": "dd MMMM, y\u0569.", + "medium": "dd MMM, y\u0569. H:mm:ss", + "mediumDate": "dd MMM, y\u0569.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Dram", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "hy", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ia-fr.js b/vendor/assets/components/angular-i18n/angular-locale_ia-fr.js new file mode 100644 index 000000000..7880d9328 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ia-fr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "dominica", + "lunedi", + "martedi", + "mercuridi", + "jovedi", + "venerdi", + "sabbato" + ], + "ERANAMES": [ + "ante Christo", + "post Christo" + ], + "ERAS": [ + "a.Chr.", + "p.Chr." + ], + "MONTH": [ + "januario", + "februario", + "martio", + "april", + "maio", + "junio", + "julio", + "augusto", + "septembre", + "octobre", + "novembre", + "decembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "jov", + "ven", + "sab" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "mai", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ia-fr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ia.js b/vendor/assets/components/angular-i18n/angular-locale_ia.js new file mode 100644 index 000000000..65ac6527a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ia.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "dominica", + "lunedi", + "martedi", + "mercuridi", + "jovedi", + "venerdi", + "sabbato" + ], + "ERANAMES": [ + "ante Christo", + "post Christo" + ], + "ERAS": [ + "a.Chr.", + "p.Chr." + ], + "MONTH": [ + "januario", + "februario", + "martio", + "april", + "maio", + "junio", + "julio", + "augusto", + "septembre", + "octobre", + "novembre", + "decembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "jov", + "ven", + "sab" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "mai", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ia", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_id-id.js b/vendor/assets/components/angular-i18n/angular-locale_id-id.js new file mode 100644 index 000000000..de7478f83 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_id-id.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "ERANAMES": [ + "Sebelum Masehi", + "M" + ], + "ERAS": [ + "SM", + "M" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH.mm.ss", + "mediumDate": "d MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd/MM/yy HH.mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rp", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "id-id", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_id.js b/vendor/assets/components/angular-i18n/angular-locale_id.js new file mode 100644 index 000000000..b5ec44f7e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_id.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "ERANAMES": [ + "Sebelum Masehi", + "M" + ], + "ERAS": [ + "SM", + "M" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH.mm.ss", + "mediumDate": "d MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd/MM/yy HH.mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rp", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "id", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ig-ng.js b/vendor/assets/components/angular-i18n/angular-locale_ig-ng.js new file mode 100644 index 000000000..ade9666b1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ig-ng.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "A.M.", + "P.M." + ], + "DAY": [ + "Mb\u1ecds\u1ecb \u1ee4ka", + "M\u1ecdnde", + "Tiuzdee", + "Wenezdee", + "T\u1ecd\u1ecdzdee", + "Fra\u1ecbdee", + "Sat\u1ecddee" + ], + "ERANAMES": [ + "Tupu Kristi", + "Af\u1ecd Kristi" + ], + "ERAS": [ + "T.K.", + "A.K." + ], + "MONTH": [ + "Jen\u1ee5war\u1ecb", + "Febr\u1ee5war\u1ecb", + "Maach\u1ecb", + "Eprel", + "Mee", + "Juun", + "Jula\u1ecb", + "\u1eccg\u1ecd\u1ecdst", + "Septemba", + "\u1eccktoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "\u1ee4ka", + "M\u1ecdn", + "Tiu", + "Wen", + "T\u1ecd\u1ecd", + "Fra\u1ecb", + "Sat" + ], + "SHORTMONTH": [ + "Jen", + "Feb", + "Maa", + "Epr", + "Mee", + "Juu", + "Jul", + "\u1eccg\u1ecd", + "Sep", + "\u1ecckt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a6", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ig-ng", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ig.js b/vendor/assets/components/angular-i18n/angular-locale_ig.js new file mode 100644 index 000000000..04c3e14ee --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ig.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "A.M.", + "P.M." + ], + "DAY": [ + "Mb\u1ecds\u1ecb \u1ee4ka", + "M\u1ecdnde", + "Tiuzdee", + "Wenezdee", + "T\u1ecd\u1ecdzdee", + "Fra\u1ecbdee", + "Sat\u1ecddee" + ], + "ERANAMES": [ + "Tupu Kristi", + "Af\u1ecd Kristi" + ], + "ERAS": [ + "T.K.", + "A.K." + ], + "MONTH": [ + "Jen\u1ee5war\u1ecb", + "Febr\u1ee5war\u1ecb", + "Maach\u1ecb", + "Eprel", + "Mee", + "Juun", + "Jula\u1ecb", + "\u1eccg\u1ecd\u1ecdst", + "Septemba", + "\u1eccktoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "\u1ee4ka", + "M\u1ecdn", + "Tiu", + "Wen", + "T\u1ecd\u1ecd", + "Fra\u1ecb", + "Sat" + ], + "SHORTMONTH": [ + "Jen", + "Feb", + "Maa", + "Epr", + "Mee", + "Juu", + "Jul", + "\u1eccg\u1ecd", + "Sep", + "\u1ecckt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a6", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ig", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ii-cn.js b/vendor/assets/components/angular-i18n/angular-locale_ii-cn.js new file mode 100644 index 000000000..a8874a222 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ii-cn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\ua3b8\ua111", + "\ua06f\ua2d2" + ], + "DAY": [ + "\ua46d\ua18f\ua44d", + "\ua18f\ua282\ua2cd", + "\ua18f\ua282\ua44d", + "\ua18f\ua282\ua315", + "\ua18f\ua282\ua1d6", + "\ua18f\ua282\ua26c", + "\ua18f\ua282\ua0d8" + ], + "ERANAMES": [ + "\ua0c5\ua2ca\ua0bf", + "\ua0c5\ua2ca\ua282" + ], + "ERAS": [ + "\ua0c5\ua2ca\ua0bf", + "\ua0c5\ua2ca\ua282" + ], + "MONTH": [ + "\ua2cd\ua1aa", + "\ua44d\ua1aa", + "\ua315\ua1aa", + "\ua1d6\ua1aa", + "\ua26c\ua1aa", + "\ua0d8\ua1aa", + "\ua3c3\ua1aa", + "\ua246\ua1aa", + "\ua22c\ua1aa", + "\ua2b0\ua1aa", + "\ua2b0\ua2aa\ua1aa", + "\ua2b0\ua44b\ua1aa" + ], + "SHORTDAY": [ + "\ua46d\ua18f", + "\ua18f\ua2cd", + "\ua18f\ua44d", + "\ua18f\ua315", + "\ua18f\ua1d6", + "\ua18f\ua26c", + "\ua18f\ua0d8" + ], + "SHORTMONTH": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ii-cn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ii.js b/vendor/assets/components/angular-i18n/angular-locale_ii.js new file mode 100644 index 000000000..13616e684 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ii.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\ua3b8\ua111", + "\ua06f\ua2d2" + ], + "DAY": [ + "\ua46d\ua18f\ua44d", + "\ua18f\ua282\ua2cd", + "\ua18f\ua282\ua44d", + "\ua18f\ua282\ua315", + "\ua18f\ua282\ua1d6", + "\ua18f\ua282\ua26c", + "\ua18f\ua282\ua0d8" + ], + "ERANAMES": [ + "\ua0c5\ua2ca\ua0bf", + "\ua0c5\ua2ca\ua282" + ], + "ERAS": [ + "\ua0c5\ua2ca\ua0bf", + "\ua0c5\ua2ca\ua282" + ], + "MONTH": [ + "\ua2cd\ua1aa", + "\ua44d\ua1aa", + "\ua315\ua1aa", + "\ua1d6\ua1aa", + "\ua26c\ua1aa", + "\ua0d8\ua1aa", + "\ua3c3\ua1aa", + "\ua246\ua1aa", + "\ua22c\ua1aa", + "\ua2b0\ua1aa", + "\ua2b0\ua2aa\ua1aa", + "\ua2b0\ua44b\ua1aa" + ], + "SHORTDAY": [ + "\ua46d\ua18f", + "\ua18f\ua2cd", + "\ua18f\ua44d", + "\ua18f\ua315", + "\ua18f\ua1d6", + "\ua18f\ua26c", + "\ua18f\ua0d8" + ], + "SHORTMONTH": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ii", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_in.js b/vendor/assets/components/angular-i18n/angular-locale_in.js new file mode 100644 index 000000000..91d750796 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "ERANAMES": [ + "Sebelum Masehi", + "M" + ], + "ERAS": [ + "SM", + "M" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH.mm.ss", + "mediumDate": "d MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd/MM/yy HH.mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rp", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "in", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_is-is.js b/vendor/assets/components/angular-i18n/angular-locale_is-is.js new file mode 100644 index 000000000..a8426f616 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_is-is.js @@ -0,0 +1,136 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +function getWT(v, f) { + if (f === 0) { + return {w: 0, t: 0}; + } + + while ((f % 10) === 0) { + f /= 10; + v--; + } + + return {w: v, t: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "f.h.", + "e.h." + ], + "DAY": [ + "sunnudagur", + "m\u00e1nudagur", + "\u00feri\u00f0judagur", + "mi\u00f0vikudagur", + "fimmtudagur", + "f\u00f6studagur", + "laugardagur" + ], + "ERANAMES": [ + "fyrir Krist", + "eftir Krist" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "jan\u00faar", + "febr\u00faar", + "mars", + "apr\u00edl", + "ma\u00ed", + "j\u00fan\u00ed", + "j\u00fal\u00ed", + "\u00e1g\u00fast", + "september", + "okt\u00f3ber", + "n\u00f3vember", + "desember" + ], + "SHORTDAY": [ + "sun.", + "m\u00e1n.", + "\u00feri.", + "mi\u00f0.", + "fim.", + "f\u00f6s.", + "lau." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "ma\u00ed", + "j\u00fan.", + "j\u00fal.", + "\u00e1g\u00fa.", + "sep.", + "okt.", + "n\u00f3v.", + "des." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.y HH:mm", + "shortDate": "d.M.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "is-is", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); var wt = getWT(vf.v, vf.f); if (wt.t == 0 && i % 10 == 1 && i % 100 != 11 || wt.t != 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_is.js b/vendor/assets/components/angular-i18n/angular-locale_is.js new file mode 100644 index 000000000..b8a9249ec --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_is.js @@ -0,0 +1,136 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +function getWT(v, f) { + if (f === 0) { + return {w: 0, t: 0}; + } + + while ((f % 10) === 0) { + f /= 10; + v--; + } + + return {w: v, t: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "f.h.", + "e.h." + ], + "DAY": [ + "sunnudagur", + "m\u00e1nudagur", + "\u00feri\u00f0judagur", + "mi\u00f0vikudagur", + "fimmtudagur", + "f\u00f6studagur", + "laugardagur" + ], + "ERANAMES": [ + "fyrir Krist", + "eftir Krist" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "jan\u00faar", + "febr\u00faar", + "mars", + "apr\u00edl", + "ma\u00ed", + "j\u00fan\u00ed", + "j\u00fal\u00ed", + "\u00e1g\u00fast", + "september", + "okt\u00f3ber", + "n\u00f3vember", + "desember" + ], + "SHORTDAY": [ + "sun.", + "m\u00e1n.", + "\u00feri.", + "mi\u00f0.", + "fim.", + "f\u00f6s.", + "lau." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "ma\u00ed", + "j\u00fan.", + "j\u00fal.", + "\u00e1g\u00fa.", + "sep.", + "okt.", + "n\u00f3v.", + "des." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.y HH:mm", + "shortDate": "d.M.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "is", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); var wt = getWT(vf.v, vf.f); if (wt.t == 0 && i % 10 == 1 && i % 100 != 11 || wt.t != 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_it-ch.js b/vendor/assets/components/angular-i18n/angular-locale_it-ch.js new file mode 100644 index 000000000..0a5ca58bf --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_it-ch.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "ERANAMES": [ + "a.C.", + "d.C." + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "dic" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d-MMM-y HH:mm:ss", + "mediumDate": "d-MMM-y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "'", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "it-ch", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_it-it.js b/vendor/assets/components/angular-i18n/angular-locale_it-it.js new file mode 100644 index 000000000..509bec5b5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_it-it.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "ERANAMES": [ + "a.C.", + "d.C." + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "dic" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "it-it", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_it-sm.js b/vendor/assets/components/angular-i18n/angular-locale_it-sm.js new file mode 100644 index 000000000..2ad4d09a2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_it-sm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "ERANAMES": [ + "a.C.", + "d.C." + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "dic" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "it-sm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_it.js b/vendor/assets/components/angular-i18n/angular-locale_it.js new file mode 100644 index 000000000..6659f0f18 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_it.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "ERANAMES": [ + "a.C.", + "d.C." + ], + "ERAS": [ + "aC", + "dC" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "dic" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "it", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_iw.js b/vendor/assets/components/angular-i18n/angular-locale_iw.js new file mode 100644 index 000000000..bf177947a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_iw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "ERANAMES": [ + "\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4", + "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4" + ], + "ERAS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1", + "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5\u05f3", + "\u05e4\u05d1\u05e8\u05f3", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05f3", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05f3", + "\u05e1\u05e4\u05d8\u05f3", + "\u05d0\u05d5\u05e7\u05f3", + "\u05e0\u05d5\u05d1\u05f3", + "\u05d3\u05e6\u05de\u05f3" + ], + "fullDate": "EEEE, d \u05d1MMMM y", + "longDate": "d \u05d1MMMM y", + "medium": "d \u05d1MMM y HH:mm:ss", + "mediumDate": "d \u05d1MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.y HH:mm", + "shortDate": "d.M.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20aa", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "iw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (i == 2 && vf.v == 0) { return PLURAL_CATEGORY.TWO; } if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ja-jp.js b/vendor/assets/components/angular-i18n/angular-locale_ja-jp.js new file mode 100644 index 000000000..25c9dc4e8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ja-jp.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u5348\u524d", + "\u5348\u5f8c" + ], + "DAY": [ + "\u65e5\u66dc\u65e5", + "\u6708\u66dc\u65e5", + "\u706b\u66dc\u65e5", + "\u6c34\u66dc\u65e5", + "\u6728\u66dc\u65e5", + "\u91d1\u66dc\u65e5", + "\u571f\u66dc\u65e5" + ], + "ERANAMES": [ + "\u7d00\u5143\u524d", + "\u897f\u66a6" + ], + "ERAS": [ + "\u7d00\u5143\u524d", + "\u897f\u66a6" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u65e5", + "\u6708", + "\u706b", + "\u6c34", + "\u6728", + "\u91d1", + "\u571f" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y/MM/dd H:mm:ss", + "mediumDate": "y/MM/dd", + "mediumTime": "H:mm:ss", + "short": "y/MM/dd H:mm", + "shortDate": "y/MM/dd", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ja-jp", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ja.js b/vendor/assets/components/angular-i18n/angular-locale_ja.js new file mode 100644 index 000000000..6708e8c31 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ja.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u5348\u524d", + "\u5348\u5f8c" + ], + "DAY": [ + "\u65e5\u66dc\u65e5", + "\u6708\u66dc\u65e5", + "\u706b\u66dc\u65e5", + "\u6c34\u66dc\u65e5", + "\u6728\u66dc\u65e5", + "\u91d1\u66dc\u65e5", + "\u571f\u66dc\u65e5" + ], + "ERANAMES": [ + "\u7d00\u5143\u524d", + "\u897f\u66a6" + ], + "ERAS": [ + "\u7d00\u5143\u524d", + "\u897f\u66a6" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u65e5", + "\u6708", + "\u706b", + "\u6c34", + "\u6728", + "\u91d1", + "\u571f" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y/MM/dd H:mm:ss", + "mediumDate": "y/MM/dd", + "mediumTime": "H:mm:ss", + "short": "y/MM/dd H:mm", + "shortDate": "y/MM/dd", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ja", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_jgo-cm.js b/vendor/assets/components/angular-i18n/angular-locale_jgo-cm.js new file mode 100644 index 000000000..1061f7b34 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_jgo-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "mba\ua78cmba\ua78c", + "\u014bka mb\u0254\u0301t nji" + ], + "DAY": [ + "S\u0254\u0301ndi", + "M\u0254\u0301ndi", + "\u00c1pta M\u0254\u0301ndi", + "W\u025b\u0301n\u025bs\u025bd\u025b", + "T\u0254\u0301s\u025bd\u025b", + "F\u025bl\u00e2y\u025bd\u025b", + "S\u00e1sid\u025b" + ], + "ERANAMES": [ + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301", + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301" + ], + "ERAS": [ + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301", + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301" + ], + "MONTH": [ + "Ndu\u014bmbi Sa\u014b", + "P\u025bsa\u014b P\u025b\u0301p\u00e1", + "P\u025bsa\u014b P\u025b\u0301t\u00e1t", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa", + "P\u025bsa\u014b Pataa", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa", + "P\u025bsa\u014b Saamb\u00e1", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa", + "P\u025bsa\u014b N\u025bg\u025b\u0301m", + "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301", + "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1" + ], + "SHORTDAY": [ + "S\u0254\u0301ndi", + "M\u0254\u0301ndi", + "\u00c1pta M\u0254\u0301ndi", + "W\u025b\u0301n\u025bs\u025bd\u025b", + "T\u0254\u0301s\u025bd\u025b", + "F\u025bl\u00e2y\u025bd\u025b", + "S\u00e1sid\u025b" + ], + "SHORTMONTH": [ + "Ndu\u014bmbi Sa\u014b", + "P\u025bsa\u014b P\u025b\u0301p\u00e1", + "P\u025bsa\u014b P\u025b\u0301t\u00e1t", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa", + "P\u025bsa\u014b Pataa", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa", + "P\u025bsa\u014b Saamb\u00e1", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa", + "P\u025bsa\u014b N\u025bg\u025b\u0301m", + "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301", + "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "jgo-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_jgo.js b/vendor/assets/components/angular-i18n/angular-locale_jgo.js new file mode 100644 index 000000000..e1e020b74 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_jgo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "mba\ua78cmba\ua78c", + "\u014bka mb\u0254\u0301t nji" + ], + "DAY": [ + "S\u0254\u0301ndi", + "M\u0254\u0301ndi", + "\u00c1pta M\u0254\u0301ndi", + "W\u025b\u0301n\u025bs\u025bd\u025b", + "T\u0254\u0301s\u025bd\u025b", + "F\u025bl\u00e2y\u025bd\u025b", + "S\u00e1sid\u025b" + ], + "ERANAMES": [ + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301", + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301" + ], + "ERAS": [ + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301", + "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301" + ], + "MONTH": [ + "Ndu\u014bmbi Sa\u014b", + "P\u025bsa\u014b P\u025b\u0301p\u00e1", + "P\u025bsa\u014b P\u025b\u0301t\u00e1t", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa", + "P\u025bsa\u014b Pataa", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa", + "P\u025bsa\u014b Saamb\u00e1", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa", + "P\u025bsa\u014b N\u025bg\u025b\u0301m", + "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301", + "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1" + ], + "SHORTDAY": [ + "S\u0254\u0301ndi", + "M\u0254\u0301ndi", + "\u00c1pta M\u0254\u0301ndi", + "W\u025b\u0301n\u025bs\u025bd\u025b", + "T\u0254\u0301s\u025bd\u025b", + "F\u025bl\u00e2y\u025bd\u025b", + "S\u00e1sid\u025b" + ], + "SHORTMONTH": [ + "Ndu\u014bmbi Sa\u014b", + "P\u025bsa\u014b P\u025b\u0301p\u00e1", + "P\u025bsa\u014b P\u025b\u0301t\u00e1t", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa", + "P\u025bsa\u014b Pataa", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa", + "P\u025bsa\u014b Saamb\u00e1", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m", + "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa", + "P\u025bsa\u014b N\u025bg\u025b\u0301m", + "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301", + "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "jgo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_jmc-tz.js b/vendor/assets/components/angular-i18n/angular-locale_jmc-tz.js new file mode 100644 index 000000000..9c120b117 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_jmc-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "utuko", + "kyiukonyi" + ], + "DAY": [ + "Jumapilyi", + "Jumatatuu", + "Jumanne", + "Jumatanu", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristu", + "Baada ya Kristu" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprilyi", + "Mei", + "Junyi", + "Julyai", + "Agusti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "jmc-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_jmc.js b/vendor/assets/components/angular-i18n/angular-locale_jmc.js new file mode 100644 index 000000000..8bd2f9f0f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_jmc.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "utuko", + "kyiukonyi" + ], + "DAY": [ + "Jumapilyi", + "Jumatatuu", + "Jumanne", + "Jumatanu", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristu", + "Baada ya Kristu" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprilyi", + "Mei", + "Junyi", + "Julyai", + "Agusti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "jmc", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ka-ge.js b/vendor/assets/components/angular-i18n/angular-locale_ka-ge.js new file mode 100644 index 000000000..516b47532 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ka-ge.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u10d9\u10d5\u10d8\u10e0\u10d0", + "\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8", + "\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8" + ], + "ERANAMES": [ + "\u10eb\u10d5\u10d4\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7", + "\u10d0\u10ee\u10d0\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7" + ], + "ERAS": [ + "\u10eb\u10d5. \u10ec.", + "\u10d0\u10ee. \u10ec." + ], + "MONTH": [ + "\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8", + "\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8", + "\u10db\u10d0\u10e0\u10e2\u10d8", + "\u10d0\u10de\u10e0\u10d8\u10da\u10d8", + "\u10db\u10d0\u10d8\u10e1\u10d8", + "\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8", + "\u10d8\u10d5\u10da\u10d8\u10e1\u10d8", + "\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd", + "\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8", + "\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8", + "\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8", + "\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8" + ], + "SHORTDAY": [ + "\u10d9\u10d5\u10d8", + "\u10dd\u10e0\u10e8", + "\u10e1\u10d0\u10db", + "\u10dd\u10d7\u10ee", + "\u10ee\u10e3\u10d7", + "\u10de\u10d0\u10e0", + "\u10e8\u10d0\u10d1" + ], + "SHORTMONTH": [ + "\u10d8\u10d0\u10dc", + "\u10d7\u10d4\u10d1", + "\u10db\u10d0\u10e0", + "\u10d0\u10de\u10e0", + "\u10db\u10d0\u10d8", + "\u10d8\u10d5\u10dc", + "\u10d8\u10d5\u10da", + "\u10d0\u10d2\u10d5", + "\u10e1\u10d4\u10e5", + "\u10dd\u10e5\u10e2", + "\u10dc\u10dd\u10d4", + "\u10d3\u10d4\u10d9" + ], + "fullDate": "EEEE, dd MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GEL", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ka-ge", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ka.js b/vendor/assets/components/angular-i18n/angular-locale_ka.js new file mode 100644 index 000000000..8efda3991 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ka.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u10d9\u10d5\u10d8\u10e0\u10d0", + "\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8", + "\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8", + "\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8" + ], + "ERANAMES": [ + "\u10eb\u10d5\u10d4\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7", + "\u10d0\u10ee\u10d0\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7" + ], + "ERAS": [ + "\u10eb\u10d5. \u10ec.", + "\u10d0\u10ee. \u10ec." + ], + "MONTH": [ + "\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8", + "\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8", + "\u10db\u10d0\u10e0\u10e2\u10d8", + "\u10d0\u10de\u10e0\u10d8\u10da\u10d8", + "\u10db\u10d0\u10d8\u10e1\u10d8", + "\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8", + "\u10d8\u10d5\u10da\u10d8\u10e1\u10d8", + "\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd", + "\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8", + "\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8", + "\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8", + "\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8" + ], + "SHORTDAY": [ + "\u10d9\u10d5\u10d8", + "\u10dd\u10e0\u10e8", + "\u10e1\u10d0\u10db", + "\u10dd\u10d7\u10ee", + "\u10ee\u10e3\u10d7", + "\u10de\u10d0\u10e0", + "\u10e8\u10d0\u10d1" + ], + "SHORTMONTH": [ + "\u10d8\u10d0\u10dc", + "\u10d7\u10d4\u10d1", + "\u10db\u10d0\u10e0", + "\u10d0\u10de\u10e0", + "\u10db\u10d0\u10d8", + "\u10d8\u10d5\u10dc", + "\u10d8\u10d5\u10da", + "\u10d0\u10d2\u10d5", + "\u10e1\u10d4\u10e5", + "\u10dd\u10e5\u10e2", + "\u10dc\u10dd\u10d4", + "\u10d3\u10d4\u10d9" + ], + "fullDate": "EEEE, dd MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GEL", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ka", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kab-dz.js b/vendor/assets/components/angular-i18n/angular-locale_kab-dz.js new file mode 100644 index 000000000..7d3e4387b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kab-dz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "n tufat", + "n tmeddit" + ], + "DAY": [ + "Yanass", + "Sanass", + "Kra\u1e0dass", + "Ku\u1e93ass", + "Samass", + "S\u1e0disass", + "Sayass" + ], + "ERANAMES": [ + "send talalit n \u0190isa", + "seld talalit n \u0190isa" + ], + "ERAS": [ + "snd. T.\u0190", + "sld. T.\u0190" + ], + "MONTH": [ + "Yennayer", + "Fu\u1e5bar", + "Me\u0263res", + "Yebrir", + "Mayyu", + "Yunyu", + "Yulyu", + "\u0194uct", + "Ctembe\u1e5b", + "Tube\u1e5b", + "Nunembe\u1e5b", + "Du\u01e7embe\u1e5b" + ], + "SHORTDAY": [ + "Yan", + "San", + "Kra\u1e0d", + "Ku\u1e93", + "Sam", + "S\u1e0dis", + "Say" + ], + "SHORTMONTH": [ + "Yen", + "Fur", + "Me\u0263", + "Yeb", + "May", + "Yun", + "Yul", + "\u0194uc", + "Cte", + "Tub", + "Nun", + "Du\u01e7" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "kab-dz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kab.js b/vendor/assets/components/angular-i18n/angular-locale_kab.js new file mode 100644 index 000000000..cd239182f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kab.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "n tufat", + "n tmeddit" + ], + "DAY": [ + "Yanass", + "Sanass", + "Kra\u1e0dass", + "Ku\u1e93ass", + "Samass", + "S\u1e0disass", + "Sayass" + ], + "ERANAMES": [ + "send talalit n \u0190isa", + "seld talalit n \u0190isa" + ], + "ERAS": [ + "snd. T.\u0190", + "sld. T.\u0190" + ], + "MONTH": [ + "Yennayer", + "Fu\u1e5bar", + "Me\u0263res", + "Yebrir", + "Mayyu", + "Yunyu", + "Yulyu", + "\u0194uct", + "Ctembe\u1e5b", + "Tube\u1e5b", + "Nunembe\u1e5b", + "Du\u01e7embe\u1e5b" + ], + "SHORTDAY": [ + "Yan", + "San", + "Kra\u1e0d", + "Ku\u1e93", + "Sam", + "S\u1e0dis", + "Say" + ], + "SHORTMONTH": [ + "Yen", + "Fur", + "Me\u0263", + "Yeb", + "May", + "Yun", + "Yul", + "\u0194uc", + "Cte", + "Tub", + "Nun", + "Du\u01e7" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "kab", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kam-ke.js b/vendor/assets/components/angular-i18n/angular-locale_kam-ke.js new file mode 100644 index 000000000..9cd56efea --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kam-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0128yakwakya", + "\u0128yaw\u0129oo" + ], + "DAY": [ + "Wa kyumwa", + "Wa kwamb\u0129l\u0129lya", + "Wa kel\u0129", + "Wa katat\u0169", + "Wa kana", + "Wa katano", + "Wa thanthat\u0169" + ], + "ERANAMES": [ + "Mbee wa Yes\u0169", + "\u0128tina wa Yes\u0169" + ], + "ERAS": [ + "MY", + "IY" + ], + "MONTH": [ + "Mwai wa mbee", + "Mwai wa kel\u0129", + "Mwai wa katat\u0169", + "Mwai wa kana", + "Mwai wa katano", + "Mwai wa thanthat\u0169", + "Mwai wa muonza", + "Mwai wa nyaanya", + "Mwai wa kenda", + "Mwai wa \u0129kumi", + "Mwai wa \u0129kumi na \u0129mwe", + "Mwai wa \u0129kumi na il\u0129" + ], + "SHORTDAY": [ + "Wky", + "Wkw", + "Wkl", + "Wt\u0169", + "Wkn", + "Wtn", + "Wth" + ], + "SHORTMONTH": [ + "Mbe", + "Kel", + "Kt\u0169", + "Kan", + "Ktn", + "Tha", + "Moo", + "Nya", + "Knd", + "\u0128ku", + "\u0128km", + "\u0128kl" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kam-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kam.js b/vendor/assets/components/angular-i18n/angular-locale_kam.js new file mode 100644 index 000000000..2e885f397 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kam.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0128yakwakya", + "\u0128yaw\u0129oo" + ], + "DAY": [ + "Wa kyumwa", + "Wa kwamb\u0129l\u0129lya", + "Wa kel\u0129", + "Wa katat\u0169", + "Wa kana", + "Wa katano", + "Wa thanthat\u0169" + ], + "ERANAMES": [ + "Mbee wa Yes\u0169", + "\u0128tina wa Yes\u0169" + ], + "ERAS": [ + "MY", + "IY" + ], + "MONTH": [ + "Mwai wa mbee", + "Mwai wa kel\u0129", + "Mwai wa katat\u0169", + "Mwai wa kana", + "Mwai wa katano", + "Mwai wa thanthat\u0169", + "Mwai wa muonza", + "Mwai wa nyaanya", + "Mwai wa kenda", + "Mwai wa \u0129kumi", + "Mwai wa \u0129kumi na \u0129mwe", + "Mwai wa \u0129kumi na il\u0129" + ], + "SHORTDAY": [ + "Wky", + "Wkw", + "Wkl", + "Wt\u0169", + "Wkn", + "Wtn", + "Wth" + ], + "SHORTMONTH": [ + "Mbe", + "Kel", + "Kt\u0169", + "Kan", + "Ktn", + "Tha", + "Moo", + "Nya", + "Knd", + "\u0128ku", + "\u0128km", + "\u0128kl" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kam", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kde-tz.js b/vendor/assets/components/angular-i18n/angular-locale_kde-tz.js new file mode 100644 index 000000000..3126a2472 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kde-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Muhi", + "Chilo" + ], + "DAY": [ + "Liduva lyapili", + "Liduva lyatatu", + "Liduva lyanchechi", + "Liduva lyannyano", + "Liduva lyannyano na linji", + "Liduva lyannyano na mavili", + "Liduva litandi" + ], + "ERANAMES": [ + "Akanapawa Yesu", + "Nankuida Yesu" + ], + "ERAS": [ + "AY", + "NY" + ], + "MONTH": [ + "Mwedi Ntandi", + "Mwedi wa Pili", + "Mwedi wa Tatu", + "Mwedi wa Nchechi", + "Mwedi wa Nnyano", + "Mwedi wa Nnyano na Umo", + "Mwedi wa Nnyano na Mivili", + "Mwedi wa Nnyano na Mitatu", + "Mwedi wa Nnyano na Nchechi", + "Mwedi wa Nnyano na Nnyano", + "Mwedi wa Nnyano na Nnyano na U", + "Mwedi wa Nnyano na Nnyano na M" + ], + "SHORTDAY": [ + "Ll2", + "Ll3", + "Ll4", + "Ll5", + "Ll6", + "Ll7", + "Ll1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kde-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kde.js b/vendor/assets/components/angular-i18n/angular-locale_kde.js new file mode 100644 index 000000000..c7c5fb27d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kde.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Muhi", + "Chilo" + ], + "DAY": [ + "Liduva lyapili", + "Liduva lyatatu", + "Liduva lyanchechi", + "Liduva lyannyano", + "Liduva lyannyano na linji", + "Liduva lyannyano na mavili", + "Liduva litandi" + ], + "ERANAMES": [ + "Akanapawa Yesu", + "Nankuida Yesu" + ], + "ERAS": [ + "AY", + "NY" + ], + "MONTH": [ + "Mwedi Ntandi", + "Mwedi wa Pili", + "Mwedi wa Tatu", + "Mwedi wa Nchechi", + "Mwedi wa Nnyano", + "Mwedi wa Nnyano na Umo", + "Mwedi wa Nnyano na Mivili", + "Mwedi wa Nnyano na Mitatu", + "Mwedi wa Nnyano na Nchechi", + "Mwedi wa Nnyano na Nnyano", + "Mwedi wa Nnyano na Nnyano na U", + "Mwedi wa Nnyano na Nnyano na M" + ], + "SHORTDAY": [ + "Ll2", + "Ll3", + "Ll4", + "Ll5", + "Ll6", + "Ll7", + "Ll1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kde", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kea-cv.js b/vendor/assets/components/angular-i18n/angular-locale_kea-cv.js new file mode 100644 index 000000000..4d9f3ffe8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kea-cv.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "dumingu", + "sigunda-fera", + "tersa-fera", + "kuarta-fera", + "kinta-fera", + "sesta-fera", + "sabadu" + ], + "ERANAMES": [ + "Antis di Kristu", + "Dispos di Kristu" + ], + "ERAS": [ + "AK", + "DK" + ], + "MONTH": [ + "Janeru", + "Febreru", + "Marsu", + "Abril", + "Maiu", + "Junhu", + "Julhu", + "Agostu", + "Setenbru", + "Otubru", + "Nuvenbru", + "Dizenbru" + ], + "SHORTDAY": [ + "dum", + "sig", + "ter", + "kua", + "kin", + "ses", + "sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Ago", + "Set", + "Otu", + "Nuv", + "Diz" + ], + "fullDate": "EEEE, d 'di' MMMM 'di' y", + "longDate": "d 'di' MMMM 'di' y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CVE", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "kea-cv", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kea.js b/vendor/assets/components/angular-i18n/angular-locale_kea.js new file mode 100644 index 000000000..7153bc539 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kea.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "dumingu", + "sigunda-fera", + "tersa-fera", + "kuarta-fera", + "kinta-fera", + "sesta-fera", + "sabadu" + ], + "ERANAMES": [ + "Antis di Kristu", + "Dispos di Kristu" + ], + "ERAS": [ + "AK", + "DK" + ], + "MONTH": [ + "Janeru", + "Febreru", + "Marsu", + "Abril", + "Maiu", + "Junhu", + "Julhu", + "Agostu", + "Setenbru", + "Otubru", + "Nuvenbru", + "Dizenbru" + ], + "SHORTDAY": [ + "dum", + "sig", + "ter", + "kua", + "kin", + "ses", + "sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Ago", + "Set", + "Otu", + "Nuv", + "Diz" + ], + "fullDate": "EEEE, d 'di' MMMM 'di' y", + "longDate": "d 'di' MMMM 'di' y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CVE", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "kea", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_khq-ml.js b/vendor/assets/components/angular-i18n/angular-locale_khq-ml.js new file mode 100644 index 000000000..d72f2e4b8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_khq-ml.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Adduha", + "Aluula" + ], + "DAY": [ + "Alhadi", + "Atini", + "Atalata", + "Alarba", + "Alhamiisa", + "Aljuma", + "Assabdu" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa jamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alj", + "Ass" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "khq-ml", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_khq.js b/vendor/assets/components/angular-i18n/angular-locale_khq.js new file mode 100644 index 000000000..79c11de0f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_khq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Adduha", + "Aluula" + ], + "DAY": [ + "Alhadi", + "Atini", + "Atalata", + "Alarba", + "Alhamiisa", + "Aljuma", + "Assabdu" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa jamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alj", + "Ass" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "khq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ki-ke.js b/vendor/assets/components/angular-i18n/angular-locale_ki-ke.js new file mode 100644 index 000000000..9cbb8a6f7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ki-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Kiroko", + "Hwa\u0129-in\u0129" + ], + "DAY": [ + "Kiumia", + "Njumatat\u0169", + "Njumaine", + "Njumatana", + "Aramithi", + "Njumaa", + "Njumamothi" + ], + "ERANAMES": [ + "Mbere ya Kristo", + "Thutha wa Kristo" + ], + "ERAS": [ + "MK", + "TK" + ], + "MONTH": [ + "Njenuar\u0129", + "Mwere wa ker\u0129", + "Mwere wa gatat\u0169", + "Mwere wa kana", + "Mwere wa gatano", + "Mwere wa gatandat\u0169", + "Mwere wa m\u0169gwanja", + "Mwere wa kanana", + "Mwere wa kenda", + "Mwere wa ik\u0169mi", + "Mwere wa ik\u0169mi na \u0169mwe", + "Ndithemba" + ], + "SHORTDAY": [ + "KMA", + "NTT", + "NMN", + "NMT", + "ART", + "NMA", + "NMM" + ], + "SHORTMONTH": [ + "JEN", + "WKR", + "WGT", + "WKN", + "WTN", + "WTD", + "WMJ", + "WNN", + "WKD", + "WIK", + "WMW", + "DIT" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ki-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ki.js b/vendor/assets/components/angular-i18n/angular-locale_ki.js new file mode 100644 index 000000000..4d649a295 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ki.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Kiroko", + "Hwa\u0129-in\u0129" + ], + "DAY": [ + "Kiumia", + "Njumatat\u0169", + "Njumaine", + "Njumatana", + "Aramithi", + "Njumaa", + "Njumamothi" + ], + "ERANAMES": [ + "Mbere ya Kristo", + "Thutha wa Kristo" + ], + "ERAS": [ + "MK", + "TK" + ], + "MONTH": [ + "Njenuar\u0129", + "Mwere wa ker\u0129", + "Mwere wa gatat\u0169", + "Mwere wa kana", + "Mwere wa gatano", + "Mwere wa gatandat\u0169", + "Mwere wa m\u0169gwanja", + "Mwere wa kanana", + "Mwere wa kenda", + "Mwere wa ik\u0169mi", + "Mwere wa ik\u0169mi na \u0169mwe", + "Ndithemba" + ], + "SHORTDAY": [ + "KMA", + "NTT", + "NMN", + "NMT", + "ART", + "NMA", + "NMM" + ], + "SHORTMONTH": [ + "JEN", + "WKR", + "WGT", + "WKN", + "WTN", + "WTD", + "WMJ", + "WNN", + "WKD", + "WIK", + "WMW", + "DIT" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ki", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kk-cyrl-kz.js b/vendor/assets/components/angular-i18n/angular-locale_kk-cyrl-kz.js new file mode 100644 index 000000000..db89cc691 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kk-cyrl-kz.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0442\u0430\u04a3\u0435\u0440\u0442\u0435\u04a3\u0433\u0456", + "\u0442\u04af\u0441\u0442\u0435\u043d \u043a\u0435\u0439\u0456\u043d\u0433\u0456" + ], + "DAY": [ + "\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456", + "\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456", + "\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0436\u04b1\u043c\u0430", + "\u0441\u0435\u043d\u0431\u0456" + ], + "ERANAMES": [ + "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437\u0493\u0430 \u0434\u0435\u0439\u0456\u043d", + "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437" + ], + "ERAS": [ + "\u0431.\u0437.\u0434.", + "\u0431.\u0437." + ], + "MONTH": [ + "\u049b\u0430\u04a3\u0442\u0430\u0440", + "\u0430\u049b\u043f\u0430\u043d", + "\u043d\u0430\u0443\u0440\u044b\u0437", + "\u0441\u04d9\u0443\u0456\u0440", + "\u043c\u0430\u043c\u044b\u0440", + "\u043c\u0430\u0443\u0441\u044b\u043c", + "\u0448\u0456\u043b\u0434\u0435", + "\u0442\u0430\u043c\u044b\u0437", + "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a", + "\u049b\u0430\u0437\u0430\u043d", + "\u049b\u0430\u0440\u0430\u0448\u0430", + "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d" + ], + "SHORTDAY": [ + "\u0436\u0435\u043a", + "\u0434\u04af\u0439", + "\u0441\u0435\u0439", + "\u0441\u04d9\u0440", + "\u0431\u0435\u0439", + "\u0436\u04b1\u043c\u0430", + "\u0441\u0435\u043d" + ], + "SHORTMONTH": [ + "\u049b\u0430\u04a3.", + "\u0430\u049b\u043f.", + "\u043d\u0430\u0443.", + "\u0441\u04d9\u0443.", + "\u043c\u0430\u043c.", + "\u043c\u0430\u0443.", + "\u0448\u0456\u043b.", + "\u0442\u0430\u043c.", + "\u049b\u044b\u0440.", + "\u049b\u0430\u0437.", + "\u049b\u0430\u0440.", + "\u0436\u0435\u043b\u0442." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "y, dd-MMM HH:mm:ss", + "mediumDate": "y, dd-MMM", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b8", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "kk-cyrl-kz", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kk-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_kk-cyrl.js new file mode 100644 index 000000000..8bfdecff3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kk-cyrl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0442\u0430\u04a3\u0435\u0440\u0442\u0435\u04a3\u0433\u0456", + "\u0442\u04af\u0441\u0442\u0435\u043d \u043a\u0435\u0439\u0456\u043d\u0433\u0456" + ], + "DAY": [ + "\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456", + "\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456", + "\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0436\u04b1\u043c\u0430", + "\u0441\u0435\u043d\u0431\u0456" + ], + "ERANAMES": [ + "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437\u0493\u0430 \u0434\u0435\u0439\u0456\u043d", + "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437" + ], + "ERAS": [ + "\u0431.\u0437.\u0434.", + "\u0431.\u0437." + ], + "MONTH": [ + "\u049b\u0430\u04a3\u0442\u0430\u0440", + "\u0430\u049b\u043f\u0430\u043d", + "\u043d\u0430\u0443\u0440\u044b\u0437", + "\u0441\u04d9\u0443\u0456\u0440", + "\u043c\u0430\u043c\u044b\u0440", + "\u043c\u0430\u0443\u0441\u044b\u043c", + "\u0448\u0456\u043b\u0434\u0435", + "\u0442\u0430\u043c\u044b\u0437", + "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a", + "\u049b\u0430\u0437\u0430\u043d", + "\u049b\u0430\u0440\u0430\u0448\u0430", + "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d" + ], + "SHORTDAY": [ + "\u0436\u0435\u043a", + "\u0434\u04af\u0439", + "\u0441\u0435\u0439", + "\u0441\u04d9\u0440", + "\u0431\u0435\u0439", + "\u0436\u04b1\u043c\u0430", + "\u0441\u0435\u043d" + ], + "SHORTMONTH": [ + "\u049b\u0430\u04a3.", + "\u0430\u049b\u043f.", + "\u043d\u0430\u0443.", + "\u0441\u04d9\u0443.", + "\u043c\u0430\u043c.", + "\u043c\u0430\u0443.", + "\u0448\u0456\u043b.", + "\u0442\u0430\u043c.", + "\u049b\u044b\u0440.", + "\u049b\u0430\u0437.", + "\u049b\u0430\u0440.", + "\u0436\u0435\u043b\u0442." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "y, dd-MMM HH:mm:ss", + "mediumDate": "y, dd-MMM", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "kk-cyrl", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kk.js b/vendor/assets/components/angular-i18n/angular-locale_kk.js new file mode 100644 index 000000000..860a6e15f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0442\u0430\u04a3\u0435\u0440\u0442\u0435\u04a3\u0433\u0456", + "\u0442\u04af\u0441\u0442\u0435\u043d \u043a\u0435\u0439\u0456\u043d\u0433\u0456" + ], + "DAY": [ + "\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456", + "\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456", + "\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "\u0436\u04b1\u043c\u0430", + "\u0441\u0435\u043d\u0431\u0456" + ], + "ERANAMES": [ + "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437\u0493\u0430 \u0434\u0435\u0439\u0456\u043d", + "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437" + ], + "ERAS": [ + "\u0431.\u0437.\u0434.", + "\u0431.\u0437." + ], + "MONTH": [ + "\u049b\u0430\u04a3\u0442\u0430\u0440", + "\u0430\u049b\u043f\u0430\u043d", + "\u043d\u0430\u0443\u0440\u044b\u0437", + "\u0441\u04d9\u0443\u0456\u0440", + "\u043c\u0430\u043c\u044b\u0440", + "\u043c\u0430\u0443\u0441\u044b\u043c", + "\u0448\u0456\u043b\u0434\u0435", + "\u0442\u0430\u043c\u044b\u0437", + "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a", + "\u049b\u0430\u0437\u0430\u043d", + "\u049b\u0430\u0440\u0430\u0448\u0430", + "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d" + ], + "SHORTDAY": [ + "\u0436\u0435\u043a", + "\u0434\u04af\u0439", + "\u0441\u0435\u0439", + "\u0441\u04d9\u0440", + "\u0431\u0435\u0439", + "\u0436\u04b1\u043c\u0430", + "\u0441\u0435\u043d" + ], + "SHORTMONTH": [ + "\u049b\u0430\u04a3.", + "\u0430\u049b\u043f.", + "\u043d\u0430\u0443.", + "\u0441\u04d9\u0443.", + "\u043c\u0430\u043c.", + "\u043c\u0430\u0443.", + "\u0448\u0456\u043b.", + "\u0442\u0430\u043c.", + "\u049b\u044b\u0440.", + "\u049b\u0430\u0437.", + "\u049b\u0430\u0440.", + "\u0436\u0435\u043b\u0442." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "y, dd-MMM HH:mm:ss", + "mediumDate": "y, dd-MMM", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b8", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "kk", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kkj-cm.js b/vendor/assets/components/angular-i18n/angular-locale_kkj-cm.js new file mode 100644 index 000000000..6953768e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kkj-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "s\u0254ndi", + "lundi", + "mardi", + "m\u025brk\u025br\u025bdi", + "yedi", + "va\u014bd\u025br\u025bdi", + "m\u0254n\u0254 s\u0254ndi" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "pamba", + "wanja", + "mbiy\u0254 m\u025bndo\u014bg\u0254", + "Ny\u0254l\u0254mb\u0254\u014bg\u0254", + "M\u0254n\u0254 \u014bgbanja", + "Nya\u014bgw\u025b \u014bgbanja", + "ku\u014bgw\u025b", + "f\u025b", + "njapi", + "nyukul", + "11", + "\u0253ul\u0253us\u025b" + ], + "SHORTDAY": [ + "s\u0254ndi", + "lundi", + "mardi", + "m\u025brk\u025br\u025bdi", + "yedi", + "va\u014bd\u025br\u025bdi", + "m\u0254n\u0254 s\u0254ndi" + ], + "SHORTMONTH": [ + "pamba", + "wanja", + "mbiy\u0254 m\u025bndo\u014bg\u0254", + "Ny\u0254l\u0254mb\u0254\u014bg\u0254", + "M\u0254n\u0254 \u014bgbanja", + "Nya\u014bgw\u025b \u014bgbanja", + "ku\u014bgw\u025b", + "f\u025b", + "njapi", + "nyukul", + "11", + "\u0253ul\u0253us\u025b" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM y HH:mm", + "shortDate": "dd/MM y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "kkj-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kkj.js b/vendor/assets/components/angular-i18n/angular-locale_kkj.js new file mode 100644 index 000000000..2d961d320 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kkj.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "s\u0254ndi", + "lundi", + "mardi", + "m\u025brk\u025br\u025bdi", + "yedi", + "va\u014bd\u025br\u025bdi", + "m\u0254n\u0254 s\u0254ndi" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "pamba", + "wanja", + "mbiy\u0254 m\u025bndo\u014bg\u0254", + "Ny\u0254l\u0254mb\u0254\u014bg\u0254", + "M\u0254n\u0254 \u014bgbanja", + "Nya\u014bgw\u025b \u014bgbanja", + "ku\u014bgw\u025b", + "f\u025b", + "njapi", + "nyukul", + "11", + "\u0253ul\u0253us\u025b" + ], + "SHORTDAY": [ + "s\u0254ndi", + "lundi", + "mardi", + "m\u025brk\u025br\u025bdi", + "yedi", + "va\u014bd\u025br\u025bdi", + "m\u0254n\u0254 s\u0254ndi" + ], + "SHORTMONTH": [ + "pamba", + "wanja", + "mbiy\u0254 m\u025bndo\u014bg\u0254", + "Ny\u0254l\u0254mb\u0254\u014bg\u0254", + "M\u0254n\u0254 \u014bgbanja", + "Nya\u014bgw\u025b \u014bgbanja", + "ku\u014bgw\u025b", + "f\u025b", + "njapi", + "nyukul", + "11", + "\u0253ul\u0253us\u025b" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM y HH:mm", + "shortDate": "dd/MM y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "kkj", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kl-gl.js b/vendor/assets/components/angular-i18n/angular-locale_kl-gl.js new file mode 100644 index 000000000..f8fad2f13 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kl-gl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ulloqeqqata-tungaa", + "ulloqeqqata-kingorna" + ], + "DAY": [ + "sabaat", + "ataasinngorneq", + "marlunngorneq", + "pingasunngorneq", + "sisamanngorneq", + "tallimanngorneq", + "arfininngorneq" + ], + "ERANAMES": [ + "Kristusip inunngornerata siornagut", + "Kristusip inunngornerata kingornagut" + ], + "ERAS": [ + "Kr.in.si.", + "Kr.in.king." + ], + "MONTH": [ + "januari", + "februari", + "martsi", + "aprili", + "maji", + "juni", + "juli", + "augustusi", + "septemberi", + "oktoberi", + "novemberi", + "decemberi" + ], + "SHORTDAY": [ + "sab", + "ata", + "mar", + "pin", + "sis", + "tal", + "arf" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "MMM dd, y h:mm:ss a", + "mediumDate": "MMM dd, y", + "mediumTime": "h:mm:ss a", + "short": "y-MM-dd h:mm a", + "shortDate": "y-MM-dd", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kl-gl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kl.js b/vendor/assets/components/angular-i18n/angular-locale_kl.js new file mode 100644 index 000000000..d96f37a74 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ulloqeqqata-tungaa", + "ulloqeqqata-kingorna" + ], + "DAY": [ + "sabaat", + "ataasinngorneq", + "marlunngorneq", + "pingasunngorneq", + "sisamanngorneq", + "tallimanngorneq", + "arfininngorneq" + ], + "ERANAMES": [ + "Kristusip inunngornerata siornagut", + "Kristusip inunngornerata kingornagut" + ], + "ERAS": [ + "Kr.in.si.", + "Kr.in.king." + ], + "MONTH": [ + "januari", + "februari", + "martsi", + "aprili", + "maji", + "juni", + "juli", + "augustusi", + "septemberi", + "oktoberi", + "novemberi", + "decemberi" + ], + "SHORTDAY": [ + "sab", + "ata", + "mar", + "pin", + "sis", + "tal", + "arf" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE dd MMMM y", + "longDate": "dd MMMM y", + "medium": "MMM dd, y h:mm:ss a", + "mediumDate": "MMM dd, y", + "mediumTime": "h:mm:ss a", + "short": "y-MM-dd h:mm a", + "shortDate": "y-MM-dd", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kln-ke.js b/vendor/assets/components/angular-i18n/angular-locale_kln-ke.js new file mode 100644 index 000000000..935a65015 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kln-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Beet", + "Kemo" + ], + "DAY": [ + "Betutab tisap", + "Betut netai", + "Betutab aeng\u2019", + "Betutab somok", + "Betutab ang\u2019wan", + "Betutab mut", + "Betutab lo" + ], + "ERANAMES": [ + "Amait kesich Jesu", + "Kokakesich Jesu" + ], + "ERAS": [ + "AM", + "KO" + ], + "MONTH": [ + "Mulgul", + "Ng\u2019atyato", + "Kiptamo", + "Iwat kut", + "Ng\u2019eiyet", + "Waki", + "Roptui", + "Kipkogaga", + "Buret", + "Epeso", + "Kipsunde netai", + "Kipsunde nebo aeng" + ], + "SHORTDAY": [ + "Tis", + "Tai", + "Aen", + "Som", + "Ang", + "Mut", + "Loh" + ], + "SHORTMONTH": [ + "Mul", + "Nga", + "Kip", + "Iwa", + "Nge", + "Wak", + "Rop", + "Kog", + "Bur", + "Epe", + "Tai", + "Aen" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kln-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kln.js b/vendor/assets/components/angular-i18n/angular-locale_kln.js new file mode 100644 index 000000000..3fc23faa3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kln.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Beet", + "Kemo" + ], + "DAY": [ + "Betutab tisap", + "Betut netai", + "Betutab aeng\u2019", + "Betutab somok", + "Betutab ang\u2019wan", + "Betutab mut", + "Betutab lo" + ], + "ERANAMES": [ + "Amait kesich Jesu", + "Kokakesich Jesu" + ], + "ERAS": [ + "AM", + "KO" + ], + "MONTH": [ + "Mulgul", + "Ng\u2019atyato", + "Kiptamo", + "Iwat kut", + "Ng\u2019eiyet", + "Waki", + "Roptui", + "Kipkogaga", + "Buret", + "Epeso", + "Kipsunde netai", + "Kipsunde nebo aeng" + ], + "SHORTDAY": [ + "Tis", + "Tai", + "Aen", + "Som", + "Ang", + "Mut", + "Loh" + ], + "SHORTMONTH": [ + "Mul", + "Nga", + "Kip", + "Iwa", + "Nge", + "Wak", + "Rop", + "Kog", + "Bur", + "Epe", + "Tai", + "Aen" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kln", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_km-kh.js b/vendor/assets/components/angular-i18n/angular-locale_km-kh.js new file mode 100644 index 000000000..ddf1d29d9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_km-kh.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1796\u17d2\u179a\u17b9\u1780", + "\u179b\u17d2\u1784\u17b6\u1785" + ], + "DAY": [ + "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799", + "\u1785\u1793\u17d2\u1791", + "\u17a2\u1784\u17d2\u1782\u17b6\u179a", + "\u1796\u17bb\u1792", + "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd", + "\u179f\u17bb\u1780\u17d2\u179a", + "\u179f\u17c5\u179a\u17cd" + ], + "ERANAMES": [ + "\u1798\u17bb\u1793\u200b\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787", + "\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787" + ], + "ERAS": [ + "\u1798\u17bb\u1793 \u1782.\u179f.", + "\u1782.\u179f." + ], + "MONTH": [ + "\u1798\u1780\u179a\u17b6", + "\u1780\u17bb\u1798\u17d2\u1797\u17c8", + "\u1798\u17b8\u1793\u17b6", + "\u1798\u17c1\u179f\u17b6", + "\u17a7\u179f\u1797\u17b6", + "\u1798\u17b7\u1790\u17bb\u1793\u17b6", + "\u1780\u1780\u17d2\u1780\u178a\u17b6", + "\u179f\u17b8\u17a0\u17b6", + "\u1780\u1789\u17d2\u1789\u17b6", + "\u178f\u17bb\u179b\u17b6", + "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6", + "\u1792\u17d2\u1793\u17bc" + ], + "SHORTDAY": [ + "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799", + "\u1785\u1793\u17d2\u1791", + "\u17a2\u1784\u17d2\u1782\u17b6\u179a", + "\u1796\u17bb\u1792", + "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd", + "\u179f\u17bb\u1780\u17d2\u179a", + "\u179f\u17c5\u179a\u17cd" + ], + "SHORTMONTH": [ + "\u1798\u1780\u179a\u17b6", + "\u1780\u17bb\u1798\u17d2\u1797\u17c8", + "\u1798\u17b8\u1793\u17b6", + "\u1798\u17c1\u179f\u17b6", + "\u17a7\u179f\u1797\u17b6", + "\u1798\u17b7\u1790\u17bb\u1793\u17b6", + "\u1780\u1780\u17d2\u1780\u178a\u17b6", + "\u179f\u17b8\u17a0\u17b6", + "\u1780\u1789\u17d2\u1789\u17b6", + "\u178f\u17bb\u179b\u17b6", + "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6", + "\u1792\u17d2\u1793\u17bc" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Riel", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "km-kh", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_km.js b/vendor/assets/components/angular-i18n/angular-locale_km.js new file mode 100644 index 000000000..e26fe8d3b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_km.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1796\u17d2\u179a\u17b9\u1780", + "\u179b\u17d2\u1784\u17b6\u1785" + ], + "DAY": [ + "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799", + "\u1785\u1793\u17d2\u1791", + "\u17a2\u1784\u17d2\u1782\u17b6\u179a", + "\u1796\u17bb\u1792", + "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd", + "\u179f\u17bb\u1780\u17d2\u179a", + "\u179f\u17c5\u179a\u17cd" + ], + "ERANAMES": [ + "\u1798\u17bb\u1793\u200b\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787", + "\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787" + ], + "ERAS": [ + "\u1798\u17bb\u1793 \u1782.\u179f.", + "\u1782.\u179f." + ], + "MONTH": [ + "\u1798\u1780\u179a\u17b6", + "\u1780\u17bb\u1798\u17d2\u1797\u17c8", + "\u1798\u17b8\u1793\u17b6", + "\u1798\u17c1\u179f\u17b6", + "\u17a7\u179f\u1797\u17b6", + "\u1798\u17b7\u1790\u17bb\u1793\u17b6", + "\u1780\u1780\u17d2\u1780\u178a\u17b6", + "\u179f\u17b8\u17a0\u17b6", + "\u1780\u1789\u17d2\u1789\u17b6", + "\u178f\u17bb\u179b\u17b6", + "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6", + "\u1792\u17d2\u1793\u17bc" + ], + "SHORTDAY": [ + "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799", + "\u1785\u1793\u17d2\u1791", + "\u17a2\u1784\u17d2\u1782\u17b6\u179a", + "\u1796\u17bb\u1792", + "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd", + "\u179f\u17bb\u1780\u17d2\u179a", + "\u179f\u17c5\u179a\u17cd" + ], + "SHORTMONTH": [ + "\u1798\u1780\u179a\u17b6", + "\u1780\u17bb\u1798\u17d2\u1797\u17c8", + "\u1798\u17b8\u1793\u17b6", + "\u1798\u17c1\u179f\u17b6", + "\u17a7\u179f\u1797\u17b6", + "\u1798\u17b7\u1790\u17bb\u1793\u17b6", + "\u1780\u1780\u17d2\u1780\u178a\u17b6", + "\u179f\u17b8\u17a0\u17b6", + "\u1780\u1789\u17d2\u1789\u17b6", + "\u178f\u17bb\u179b\u17b6", + "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6", + "\u1792\u17d2\u1793\u17bc" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Riel", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "km", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kn-in.js b/vendor/assets/components/angular-i18n/angular-locale_kn-in.js new file mode 100644 index 000000000..6ece2bf6d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kn-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0caa\u0cc2\u0cb0\u0ccd\u0cb5\u0cbe\u0cb9\u0ccd\u0ca8", + "\u0c85\u0caa\u0cb0\u0cbe\u0cb9\u0ccd\u0ca8" + ], + "DAY": [ + "\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", + "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0", + "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", + "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0" + ], + "ERANAMES": [ + "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0caa\u0cc2\u0cb0\u0ccd\u0cb5", + "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0cb6\u0c95" + ], + "ERAS": [ + "\u0c95\u0ccd\u0cb0\u0cbf.\u0caa\u0cc2", + "\u0c95\u0ccd\u0cb0\u0cbf.\u0cb6" + ], + "MONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc7", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], + "SHORTDAY": [ + "\u0cad\u0cbe\u0ca8\u0cc1", + "\u0cb8\u0ccb\u0cae", + "\u0cae\u0c82\u0c97\u0cb3", + "\u0cac\u0cc1\u0ca7", + "\u0c97\u0cc1\u0cb0\u0cc1", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0", + "\u0cb6\u0ca8\u0cbf" + ], + "SHORTMONTH": [ + "\u0c9c\u0ca8", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf", + "\u0cae\u0cc7", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97", + "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb", + "\u0ca8\u0cb5\u0cc6\u0c82", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y hh:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "hh:mm:ss a", + "short": "M/d/yy hh:mm a", + "shortDate": "M/d/yy", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kn-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kn.js b/vendor/assets/components/angular-i18n/angular-locale_kn.js new file mode 100644 index 000000000..a9770404c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0caa\u0cc2\u0cb0\u0ccd\u0cb5\u0cbe\u0cb9\u0ccd\u0ca8", + "\u0c85\u0caa\u0cb0\u0cbe\u0cb9\u0ccd\u0ca8" + ], + "DAY": [ + "\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", + "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0", + "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", + "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0" + ], + "ERANAMES": [ + "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0caa\u0cc2\u0cb0\u0ccd\u0cb5", + "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0cb6\u0c95" + ], + "ERAS": [ + "\u0c95\u0ccd\u0cb0\u0cbf.\u0caa\u0cc2", + "\u0c95\u0ccd\u0cb0\u0cbf.\u0cb6" + ], + "MONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc7", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], + "SHORTDAY": [ + "\u0cad\u0cbe\u0ca8\u0cc1", + "\u0cb8\u0ccb\u0cae", + "\u0cae\u0c82\u0c97\u0cb3", + "\u0cac\u0cc1\u0ca7", + "\u0c97\u0cc1\u0cb0\u0cc1", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0", + "\u0cb6\u0ca8\u0cbf" + ], + "SHORTMONTH": [ + "\u0c9c\u0ca8", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf", + "\u0cae\u0cc7", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97", + "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb", + "\u0ca8\u0cb5\u0cc6\u0c82", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y hh:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "hh:mm:ss a", + "short": "M/d/yy hh:mm a", + "shortDate": "M/d/yy", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kn", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ko-kp.js b/vendor/assets/components/angular-i18n/angular-locale_ko-kp.js new file mode 100644 index 000000000..0db9d92ad --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ko-kp.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\uc624\uc804", + "\uc624\ud6c4" + ], + "DAY": [ + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c" + ], + "ERANAMES": [ + "\uae30\uc6d0\uc804", + "\uc11c\uae30" + ], + "ERAS": [ + "\uae30\uc6d0\uc804", + "\uc11c\uae30" + ], + "MONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "SHORTDAY": [ + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0" + ], + "SHORTMONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE", + "longDate": "y\ub144 M\uc6d4 d\uc77c", + "medium": "y. M. d. a h:mm:ss", + "mediumDate": "y. M. d.", + "mediumTime": "a h:mm:ss", + "short": "yy. M. d. a h:mm", + "shortDate": "yy. M. d.", + "shortTime": "a h:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a9KP", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ko-kp", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ko-kr.js b/vendor/assets/components/angular-i18n/angular-locale_ko-kr.js new file mode 100644 index 000000000..5e00a46a0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ko-kr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\uc624\uc804", + "\uc624\ud6c4" + ], + "DAY": [ + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c" + ], + "ERANAMES": [ + "\uae30\uc6d0\uc804", + "\uc11c\uae30" + ], + "ERAS": [ + "\uae30\uc6d0\uc804", + "\uc11c\uae30" + ], + "MONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "SHORTDAY": [ + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0" + ], + "SHORTMONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE", + "longDate": "y\ub144 M\uc6d4 d\uc77c", + "medium": "y. M. d. a h:mm:ss", + "mediumDate": "y. M. d.", + "mediumTime": "a h:mm:ss", + "short": "yy. M. d. a h:mm", + "shortDate": "yy. M. d.", + "shortTime": "a h:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ko-kr", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ko.js b/vendor/assets/components/angular-i18n/angular-locale_ko.js new file mode 100644 index 000000000..b3be04d75 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ko.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\uc624\uc804", + "\uc624\ud6c4" + ], + "DAY": [ + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c" + ], + "ERANAMES": [ + "\uae30\uc6d0\uc804", + "\uc11c\uae30" + ], + "ERAS": [ + "\uae30\uc6d0\uc804", + "\uc11c\uae30" + ], + "MONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "SHORTDAY": [ + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0" + ], + "SHORTMONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE", + "longDate": "y\ub144 M\uc6d4 d\uc77c", + "medium": "y. M. d. a h:mm:ss", + "mediumDate": "y. M. d.", + "mediumTime": "a h:mm:ss", + "short": "yy. M. d. a h:mm", + "shortDate": "yy. M. d.", + "shortTime": "a h:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ko", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kok-in.js b/vendor/assets/components/angular-i18n/angular-locale_kok-in.js new file mode 100644 index 000000000..754cfc19f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kok-in.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092e.\u092a\u0942.", + "\u092e.\u0928\u0902." + ], + "DAY": [ + "\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "ERANAMES": [ + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935", + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e" + ], + "ERAS": [ + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935", + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0913\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0913\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "dd-MM-y h:mm:ss a", + "mediumDate": "dd-MM-y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "kok-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kok.js b/vendor/assets/components/angular-i18n/angular-locale_kok.js new file mode 100644 index 000000000..9b97b039a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kok.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092e.\u092a\u0942.", + "\u092e.\u0928\u0902." + ], + "DAY": [ + "\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "ERANAMES": [ + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935", + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e" + ], + "ERAS": [ + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935", + "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0913\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0913\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "dd-MM-y h:mm:ss a", + "mediumDate": "dd-MM-y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "kok", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ks-arab-in.js b/vendor/assets/components/angular-i18n/angular-locale_ks-arab-in.js new file mode 100644 index 000000000..bded78c46 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ks-arab-in.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0627\u064e\u062a\u06be\u0648\u0627\u0631", + "\u0698\u0654\u0646\u065b\u062f\u0631\u0655\u0631\u0648\u0627\u0631", + "\u0628\u0648\u065a\u0645\u0648\u0627\u0631", + "\u0628\u0648\u062f\u0648\u0627\u0631", + "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631", + "\u062c\u064f\u0645\u06c1", + "\u0628\u0679\u0648\u0627\u0631" + ], + "ERANAMES": [ + "\u0642\u0628\u0655\u0644 \u0645\u0633\u06cc\u0656\u062d", + "\u0639\u06cc\u0656\u0633\u0648\u06cc \u0633\u0646\u06c1\u0655" + ], + "ERAS": [ + "\u0628\u06cc \u0633\u06cc", + "\u0627\u06d2 \u0688\u06cc" + ], + "MONTH": [ + "\u062c\u0646\u0624\u0631\u06cc", + "\u0641\u0631\u0624\u0631\u06cc", + "\u0645\u0627\u0631\u0655\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc\u0654", + "\u062c\u0648\u0657\u0646", + "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0622\u062a\u06be\u0648\u0627\u0631", + "\u0698\u0654\u0646\u065b\u062f\u0655\u0631\u0648\u0627\u0631", + "\u0628\u0648\u065a\u0645\u0648\u0627\u0631", + "\u0628\u0648\u062f\u0648\u0627\u0631", + "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631", + "\u062c\u064f\u0645\u06c1", + "\u0628\u0679\u0648\u0627\u0631" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0624\u0631\u06cc", + "\u0641\u0631\u0624\u0631\u06cc", + "\u0645\u0627\u0631\u0655\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc\u0654", + "\u062c\u0648\u0657\u0646", + "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ks-arab-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ks-arab.js b/vendor/assets/components/angular-i18n/angular-locale_ks-arab.js new file mode 100644 index 000000000..e8a7b92dc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ks-arab.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0627\u064e\u062a\u06be\u0648\u0627\u0631", + "\u0698\u0654\u0646\u065b\u062f\u0631\u0655\u0631\u0648\u0627\u0631", + "\u0628\u0648\u065a\u0645\u0648\u0627\u0631", + "\u0628\u0648\u062f\u0648\u0627\u0631", + "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631", + "\u062c\u064f\u0645\u06c1", + "\u0628\u0679\u0648\u0627\u0631" + ], + "ERANAMES": [ + "\u0642\u0628\u0655\u0644 \u0645\u0633\u06cc\u0656\u062d", + "\u0639\u06cc\u0656\u0633\u0648\u06cc \u0633\u0646\u06c1\u0655" + ], + "ERAS": [ + "\u0628\u06cc \u0633\u06cc", + "\u0627\u06d2 \u0688\u06cc" + ], + "MONTH": [ + "\u062c\u0646\u0624\u0631\u06cc", + "\u0641\u0631\u0624\u0631\u06cc", + "\u0645\u0627\u0631\u0655\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc\u0654", + "\u062c\u0648\u0657\u0646", + "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0622\u062a\u06be\u0648\u0627\u0631", + "\u0698\u0654\u0646\u065b\u062f\u0655\u0631\u0648\u0627\u0631", + "\u0628\u0648\u065a\u0645\u0648\u0627\u0631", + "\u0628\u0648\u062f\u0648\u0627\u0631", + "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631", + "\u062c\u064f\u0645\u06c1", + "\u0628\u0679\u0648\u0627\u0631" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0624\u0631\u06cc", + "\u0641\u0631\u0624\u0631\u06cc", + "\u0645\u0627\u0631\u0655\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc\u0654", + "\u062c\u0648\u0657\u0646", + "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ks-arab", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ks.js b/vendor/assets/components/angular-i18n/angular-locale_ks.js new file mode 100644 index 000000000..5fd476d5d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ks.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0627\u064e\u062a\u06be\u0648\u0627\u0631", + "\u0698\u0654\u0646\u065b\u062f\u0631\u0655\u0631\u0648\u0627\u0631", + "\u0628\u0648\u065a\u0645\u0648\u0627\u0631", + "\u0628\u0648\u062f\u0648\u0627\u0631", + "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631", + "\u062c\u064f\u0645\u06c1", + "\u0628\u0679\u0648\u0627\u0631" + ], + "ERANAMES": [ + "\u0642\u0628\u0655\u0644 \u0645\u0633\u06cc\u0656\u062d", + "\u0639\u06cc\u0656\u0633\u0648\u06cc \u0633\u0646\u06c1\u0655" + ], + "ERAS": [ + "\u0628\u06cc \u0633\u06cc", + "\u0627\u06d2 \u0688\u06cc" + ], + "MONTH": [ + "\u062c\u0646\u0624\u0631\u06cc", + "\u0641\u0631\u0624\u0631\u06cc", + "\u0645\u0627\u0631\u0655\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc\u0654", + "\u062c\u0648\u0657\u0646", + "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0622\u062a\u06be\u0648\u0627\u0631", + "\u0698\u0654\u0646\u065b\u062f\u0655\u0631\u0648\u0627\u0631", + "\u0628\u0648\u065a\u0645\u0648\u0627\u0631", + "\u0628\u0648\u062f\u0648\u0627\u0631", + "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631", + "\u062c\u064f\u0645\u06c1", + "\u0628\u0679\u0648\u0627\u0631" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0624\u0631\u06cc", + "\u0641\u0631\u0624\u0631\u06cc", + "\u0645\u0627\u0631\u0655\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc\u0654", + "\u062c\u0648\u0657\u0646", + "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ks", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ksb-tz.js b/vendor/assets/components/angular-i18n/angular-locale_ksb-tz.js new file mode 100644 index 000000000..f9d1c6dcb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ksb-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "makeo", + "nyiaghuo" + ], + "DAY": [ + "Jumaapii", + "Jumaatatu", + "Jumaane", + "Jumaatano", + "Alhamisi", + "Ijumaa", + "Jumaamosi" + ], + "ERANAMES": [ + "Kabla ya Klisto", + "Baada ya Klisto" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januali", + "Febluali", + "Machi", + "Aplili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jmn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "ksb-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ksb.js b/vendor/assets/components/angular-i18n/angular-locale_ksb.js new file mode 100644 index 000000000..f4b6b7d0c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ksb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "makeo", + "nyiaghuo" + ], + "DAY": [ + "Jumaapii", + "Jumaatatu", + "Jumaane", + "Jumaatano", + "Alhamisi", + "Ijumaa", + "Jumaamosi" + ], + "ERANAMES": [ + "Kabla ya Klisto", + "Baada ya Klisto" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januali", + "Febluali", + "Machi", + "Aplili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jmn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "ksb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ksf-cm.js b/vendor/assets/components/angular-i18n/angular-locale_ksf-cm.js new file mode 100644 index 000000000..531bf192f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ksf-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "s\u00e1r\u00faw\u00e1", + "c\u025b\u025b\u0301nko" + ], + "DAY": [ + "s\u0254\u0301nd\u01dd", + "l\u01ddnd\u00ed", + "maad\u00ed", + "m\u025bkr\u025bd\u00ed", + "j\u01dd\u01ddd\u00ed", + "j\u00famb\u00e1", + "samd\u00ed" + ], + "ERANAMES": [ + "di Y\u025b\u0301sus ak\u00e1 y\u00e1l\u025b", + "c\u00e1m\u025b\u025bn k\u01dd k\u01ddb\u0254pka Y" + ], + "ERAS": [ + "d.Y.", + "k.Y." + ], + "MONTH": [ + "\u014bw\u00ed\u00ed a nt\u0254\u0301nt\u0254", + "\u014bw\u00ed\u00ed ak\u01dd b\u025b\u0301\u025b", + "\u014bw\u00ed\u00ed ak\u01dd r\u00e1\u00e1", + "\u014bw\u00ed\u00ed ak\u01dd nin", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1an", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1af\u0254k", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1ab\u025b\u025b", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1araa", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1anin", + "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk", + "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u0254\u0301k", + "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u025b\u0301\u025b" + ], + "SHORTDAY": [ + "s\u0254\u0301n", + "l\u01ddn", + "maa", + "m\u025bk", + "j\u01dd\u01dd", + "j\u00fam", + "sam" + ], + "SHORTMONTH": [ + "\u014b1", + "\u014b2", + "\u014b3", + "\u014b4", + "\u014b5", + "\u014b6", + "\u014b7", + "\u014b8", + "\u014b9", + "\u014b10", + "\u014b11", + "\u014b12" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ksf-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ksf.js b/vendor/assets/components/angular-i18n/angular-locale_ksf.js new file mode 100644 index 000000000..3caef8b6e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ksf.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "s\u00e1r\u00faw\u00e1", + "c\u025b\u025b\u0301nko" + ], + "DAY": [ + "s\u0254\u0301nd\u01dd", + "l\u01ddnd\u00ed", + "maad\u00ed", + "m\u025bkr\u025bd\u00ed", + "j\u01dd\u01ddd\u00ed", + "j\u00famb\u00e1", + "samd\u00ed" + ], + "ERANAMES": [ + "di Y\u025b\u0301sus ak\u00e1 y\u00e1l\u025b", + "c\u00e1m\u025b\u025bn k\u01dd k\u01ddb\u0254pka Y" + ], + "ERAS": [ + "d.Y.", + "k.Y." + ], + "MONTH": [ + "\u014bw\u00ed\u00ed a nt\u0254\u0301nt\u0254", + "\u014bw\u00ed\u00ed ak\u01dd b\u025b\u0301\u025b", + "\u014bw\u00ed\u00ed ak\u01dd r\u00e1\u00e1", + "\u014bw\u00ed\u00ed ak\u01dd nin", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1an", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1af\u0254k", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1ab\u025b\u025b", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1araa", + "\u014bw\u00ed\u00ed ak\u01dd t\u00e1anin", + "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk", + "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u0254\u0301k", + "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u025b\u0301\u025b" + ], + "SHORTDAY": [ + "s\u0254\u0301n", + "l\u01ddn", + "maa", + "m\u025bk", + "j\u01dd\u01dd", + "j\u00fam", + "sam" + ], + "SHORTMONTH": [ + "\u014b1", + "\u014b2", + "\u014b3", + "\u014b4", + "\u014b5", + "\u014b6", + "\u014b7", + "\u014b8", + "\u014b9", + "\u014b10", + "\u014b11", + "\u014b12" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ksf", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ksh-de.js b/vendor/assets/components/angular-i18n/angular-locale_ksh-de.js new file mode 100644 index 000000000..57e4fe91e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ksh-de.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Uhr v\u00f6rmiddaachs", + "Uhr nommendaachs" + ], + "DAY": [ + "Sunndaach", + "Moondaach", + "Dinnsdaach", + "Metwoch", + "Dunnersdaach", + "Friidaach", + "Samsdaach" + ], + "ERANAMES": [ + "v\u00fcr Chrestus", + "noh Chrestus" + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Jannewa", + "F\u00e4browa", + "M\u00e4\u00e4z", + "Aprell", + "M\u00e4i", + "Juuni", + "Juuli", + "Oujo\u00df", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "Mo.", + "Di.", + "Me.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "F\u00e4b", + "M\u00e4z", + "Apr", + "M\u00e4i", + "Jun", + "Jul", + "Ouj", + "S\u00e4p", + "Okt", + "Nov", + "Dez" + ], + "fullDate": "EEEE, 'd\u00e4' d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM. y HH:mm:ss", + "mediumDate": "d. MMM. y", + "mediumTime": "HH:mm:ss", + "short": "d. M. y HH:mm", + "shortDate": "d. M. y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ksh-de", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ksh.js b/vendor/assets/components/angular-i18n/angular-locale_ksh.js new file mode 100644 index 000000000..65cfbc2b6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ksh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Uhr v\u00f6rmiddaachs", + "Uhr nommendaachs" + ], + "DAY": [ + "Sunndaach", + "Moondaach", + "Dinnsdaach", + "Metwoch", + "Dunnersdaach", + "Friidaach", + "Samsdaach" + ], + "ERANAMES": [ + "v\u00fcr Chrestus", + "noh Chrestus" + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Jannewa", + "F\u00e4browa", + "M\u00e4\u00e4z", + "Aprell", + "M\u00e4i", + "Juuni", + "Juuli", + "Oujo\u00df", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "Mo.", + "Di.", + "Me.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "F\u00e4b", + "M\u00e4z", + "Apr", + "M\u00e4i", + "Jun", + "Jul", + "Ouj", + "S\u00e4p", + "Okt", + "Nov", + "Dez" + ], + "fullDate": "EEEE, 'd\u00e4' d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM. y HH:mm:ss", + "mediumDate": "d. MMM. y", + "mediumTime": "HH:mm:ss", + "short": "d. M. y HH:mm", + "shortDate": "d. M. y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ksh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kw-gb.js b/vendor/assets/components/angular-i18n/angular-locale_kw-gb.js new file mode 100644 index 000000000..1fa6a58c2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kw-gb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "De Sul", + "De Lun", + "De Merth", + "De Merher", + "De Yow", + "De Gwener", + "De Sadorn" + ], + "ERANAMES": [ + "RC", + "AD" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "Mys Genver", + "Mys Whevrel", + "Mys Merth", + "Mys Ebrel", + "Mys Me", + "Mys Efan", + "Mys Gortheren", + "Mye Est", + "Mys Gwyngala", + "Mys Hedra", + "Mys Du", + "Mys Kevardhu" + ], + "SHORTDAY": [ + "Sul", + "Lun", + "Mth", + "Mhr", + "Yow", + "Gwe", + "Sad" + ], + "SHORTMONTH": [ + "Gen", + "Whe", + "Mer", + "Ebr", + "Me", + "Efn", + "Gor", + "Est", + "Gwn", + "Hed", + "Du", + "Kev" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kw-gb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_kw.js b/vendor/assets/components/angular-i18n/angular-locale_kw.js new file mode 100644 index 000000000..87ce31935 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_kw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "De Sul", + "De Lun", + "De Merth", + "De Merher", + "De Yow", + "De Gwener", + "De Sadorn" + ], + "ERANAMES": [ + "RC", + "AD" + ], + "ERAS": [ + "RC", + "AD" + ], + "MONTH": [ + "Mys Genver", + "Mys Whevrel", + "Mys Merth", + "Mys Ebrel", + "Mys Me", + "Mys Efan", + "Mys Gortheren", + "Mye Est", + "Mys Gwyngala", + "Mys Hedra", + "Mys Du", + "Mys Kevardhu" + ], + "SHORTDAY": [ + "Sul", + "Lun", + "Mth", + "Mhr", + "Yow", + "Gwe", + "Sad" + ], + "SHORTMONTH": [ + "Gen", + "Whe", + "Mer", + "Ebr", + "Me", + "Efn", + "Gor", + "Est", + "Gwn", + "Hed", + "Du", + "Kev" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a3", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "kw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ky-cyrl-kg.js b/vendor/assets/components/angular-i18n/angular-locale_ky-cyrl-kg.js new file mode 100644 index 000000000..0d7d7bc9a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ky-cyrl-kg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0442\u0430\u04a3\u043a\u044b", + "\u0442\u04af\u0448\u0442\u04e9\u043d \u043a\u0438\u0439\u0438\u043d" + ], + "DAY": [ + "\u0436\u0435\u043a\u0448\u0435\u043c\u0431\u0438", + "\u0434\u04af\u0439\u0448\u04e9\u043c\u0431\u04af", + "\u0448\u0435\u0439\u0448\u0435\u043c\u0431\u0438", + "\u0448\u0430\u0440\u0448\u0435\u043c\u0431\u0438", + "\u0431\u0435\u0439\u0448\u0435\u043c\u0431\u0438", + "\u0436\u0443\u043c\u0430", + "\u0438\u0448\u0435\u043c\u0431\u0438" + ], + "ERANAMES": [ + "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d\u0433\u0430 \u0447\u0435\u0439\u0438\u043d", + "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d" + ], + "ERAS": [ + "\u0431.\u0437.\u0447.", + "\u0431.\u0437." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044c", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044c", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0435\u043b\u044c", + "\u043c\u0430\u0439", + "\u0438\u044e\u043d\u044c", + "\u0438\u044e\u043b\u044c", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044c", + "\u043d\u043e\u044f\u0431\u0440\u044c", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044c" + ], + "SHORTDAY": [ + "\u0436\u0435\u043a.", + "\u0434\u04af\u0439.", + "\u0448\u0435\u0439\u0448.", + "\u0448\u0430\u0440\u0448.", + "\u0431\u0435\u0439\u0448.", + "\u0436\u0443\u043c\u0430", + "\u0438\u0448\u043c." + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u0438\u044e\u043d.", + "\u0438\u044e\u043b.", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d-MMMM, y-'\u0436'.", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KGS", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ky-cyrl-kg", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ky-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_ky-cyrl.js new file mode 100644 index 000000000..286231d9e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ky-cyrl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0442\u0430\u04a3\u043a\u044b", + "\u0442\u04af\u0448\u0442\u04e9\u043d \u043a\u0438\u0439\u0438\u043d" + ], + "DAY": [ + "\u0436\u0435\u043a\u0448\u0435\u043c\u0431\u0438", + "\u0434\u04af\u0439\u0448\u04e9\u043c\u0431\u04af", + "\u0448\u0435\u0439\u0448\u0435\u043c\u0431\u0438", + "\u0448\u0430\u0440\u0448\u0435\u043c\u0431\u0438", + "\u0431\u0435\u0439\u0448\u0435\u043c\u0431\u0438", + "\u0436\u0443\u043c\u0430", + "\u0438\u0448\u0435\u043c\u0431\u0438" + ], + "ERANAMES": [ + "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d\u0433\u0430 \u0447\u0435\u0439\u0438\u043d", + "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d" + ], + "ERAS": [ + "\u0431.\u0437.\u0447.", + "\u0431.\u0437." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044c", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044c", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0435\u043b\u044c", + "\u043c\u0430\u0439", + "\u0438\u044e\u043d\u044c", + "\u0438\u044e\u043b\u044c", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044c", + "\u043d\u043e\u044f\u0431\u0440\u044c", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044c" + ], + "SHORTDAY": [ + "\u0436\u0435\u043a.", + "\u0434\u04af\u0439.", + "\u0448\u0435\u0439\u0448.", + "\u0448\u0430\u0440\u0448.", + "\u0431\u0435\u0439\u0448.", + "\u0436\u0443\u043c\u0430", + "\u0438\u0448\u043c." + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u0438\u044e\u043d.", + "\u0438\u044e\u043b.", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d-MMMM, y-'\u0436'.", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ky-cyrl", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ky.js b/vendor/assets/components/angular-i18n/angular-locale_ky.js new file mode 100644 index 000000000..f8e10e097 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ky.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0442\u0430\u04a3\u043a\u044b", + "\u0442\u04af\u0448\u0442\u04e9\u043d \u043a\u0438\u0439\u0438\u043d" + ], + "DAY": [ + "\u0436\u0435\u043a\u0448\u0435\u043c\u0431\u0438", + "\u0434\u04af\u0439\u0448\u04e9\u043c\u0431\u04af", + "\u0448\u0435\u0439\u0448\u0435\u043c\u0431\u0438", + "\u0448\u0430\u0440\u0448\u0435\u043c\u0431\u0438", + "\u0431\u0435\u0439\u0448\u0435\u043c\u0431\u0438", + "\u0436\u0443\u043c\u0430", + "\u0438\u0448\u0435\u043c\u0431\u0438" + ], + "ERANAMES": [ + "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d\u0433\u0430 \u0447\u0435\u0439\u0438\u043d", + "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d" + ], + "ERAS": [ + "\u0431.\u0437.\u0447.", + "\u0431.\u0437." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044c", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044c", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0435\u043b\u044c", + "\u043c\u0430\u0439", + "\u0438\u044e\u043d\u044c", + "\u0438\u044e\u043b\u044c", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044c", + "\u043d\u043e\u044f\u0431\u0440\u044c", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044c" + ], + "SHORTDAY": [ + "\u0436\u0435\u043a.", + "\u0434\u04af\u0439.", + "\u0448\u0435\u0439\u0448.", + "\u0448\u0430\u0440\u0448.", + "\u0431\u0435\u0439\u0448.", + "\u0436\u0443\u043c\u0430", + "\u0438\u0448\u043c." + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u0438\u044e\u043d.", + "\u0438\u044e\u043b.", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d-MMMM, y-'\u0436'.", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KGS", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ky", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lag-tz.js b/vendor/assets/components/angular-i18n/angular-locale_lag-tz.js new file mode 100644 index 000000000..017fefea9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lag-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "TOO", + "MUU" + ], + "DAY": [ + "Jumap\u00ediri", + "Jumat\u00e1tu", + "Juma\u00edne", + "Jumat\u00e1ano", + "Alam\u00edisi", + "Ijum\u00e1a", + "Jumam\u00f3osi" + ], + "ERANAMES": [ + "K\u0268r\u0268sit\u0289 s\u0268 anavyaal", + "K\u0268r\u0268sit\u0289 akavyaalwe" + ], + "ERAS": [ + "KSA", + "KA" + ], + "MONTH": [ + "K\u0289f\u00fangat\u0268", + "K\u0289naan\u0268", + "K\u0289keenda", + "Kwiikumi", + "Kwiinyamb\u00e1la", + "Kwiidwaata", + "K\u0289m\u0289\u0289nch\u0268", + "K\u0289v\u0268\u0268r\u0268", + "K\u0289saat\u0289", + "Kwiinyi", + "K\u0289saano", + "K\u0289sasat\u0289" + ], + "SHORTDAY": [ + "P\u00edili", + "T\u00e1atu", + "\u00cdne", + "T\u00e1ano", + "Alh", + "Ijm", + "M\u00f3osi" + ], + "SHORTMONTH": [ + "F\u00fangat\u0268", + "Naan\u0268", + "Keenda", + "Ik\u00fami", + "Inyambala", + "Idwaata", + "M\u0289\u0289nch\u0268", + "V\u0268\u0268r\u0268", + "Saat\u0289", + "Inyi", + "Saano", + "Sasat\u0289" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "lag-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lag.js b/vendor/assets/components/angular-i18n/angular-locale_lag.js new file mode 100644 index 000000000..736f61f01 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lag.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "TOO", + "MUU" + ], + "DAY": [ + "Jumap\u00ediri", + "Jumat\u00e1tu", + "Juma\u00edne", + "Jumat\u00e1ano", + "Alam\u00edisi", + "Ijum\u00e1a", + "Jumam\u00f3osi" + ], + "ERANAMES": [ + "K\u0268r\u0268sit\u0289 s\u0268 anavyaal", + "K\u0268r\u0268sit\u0289 akavyaalwe" + ], + "ERAS": [ + "KSA", + "KA" + ], + "MONTH": [ + "K\u0289f\u00fangat\u0268", + "K\u0289naan\u0268", + "K\u0289keenda", + "Kwiikumi", + "Kwiinyamb\u00e1la", + "Kwiidwaata", + "K\u0289m\u0289\u0289nch\u0268", + "K\u0289v\u0268\u0268r\u0268", + "K\u0289saat\u0289", + "Kwiinyi", + "K\u0289saano", + "K\u0289sasat\u0289" + ], + "SHORTDAY": [ + "P\u00edili", + "T\u00e1atu", + "\u00cdne", + "T\u00e1ano", + "Alh", + "Ijm", + "M\u00f3osi" + ], + "SHORTMONTH": [ + "F\u00fangat\u0268", + "Naan\u0268", + "Keenda", + "Ik\u00fami", + "Inyambala", + "Idwaata", + "M\u0289\u0289nch\u0268", + "V\u0268\u0268r\u0268", + "Saat\u0289", + "Inyi", + "Saano", + "Sasat\u0289" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "lag", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lb-lu.js b/vendor/assets/components/angular-i18n/angular-locale_lb-lu.js new file mode 100644 index 000000000..5cb88662b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lb-lu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "moies", + "nom\u00ebttes" + ], + "DAY": [ + "Sonndeg", + "M\u00e9indeg", + "D\u00ebnschdeg", + "M\u00ebttwoch", + "Donneschdeg", + "Freideg", + "Samschdeg" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4erz", + "Abr\u00ebll", + "Mee", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "Son.", + "M\u00e9i.", + "D\u00ebn.", + "M\u00ebt.", + "Don.", + "Fre.", + "Sam." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4e.", + "Abr.", + "Mee", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "lb-lu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lb.js b/vendor/assets/components/angular-i18n/angular-locale_lb.js new file mode 100644 index 000000000..d86883c52 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lb.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "moies", + "nom\u00ebttes" + ], + "DAY": [ + "Sonndeg", + "M\u00e9indeg", + "D\u00ebnschdeg", + "M\u00ebttwoch", + "Donneschdeg", + "Freideg", + "Samschdeg" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr." + ], + "ERAS": [ + "v. Chr.", + "n. Chr." + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4erz", + "Abr\u00ebll", + "Mee", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "Son.", + "M\u00e9i.", + "D\u00ebn.", + "M\u00ebt.", + "Don.", + "Fre.", + "Sam." + ], + "SHORTMONTH": [ + "Jan.", + "Feb.", + "M\u00e4e.", + "Abr.", + "Mee", + "Juni", + "Juli", + "Aug.", + "Sep.", + "Okt.", + "Nov.", + "Dez." + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "lb", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lg-ug.js b/vendor/assets/components/angular-i18n/angular-locale_lg-ug.js new file mode 100644 index 000000000..094e3e2af --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lg-ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sabbiiti", + "Balaza", + "Lwakubiri", + "Lwakusatu", + "Lwakuna", + "Lwakutaano", + "Lwamukaaga" + ], + "ERANAMES": [ + "Kulisito nga tannaza", + "Bukya Kulisito Azaal" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Janwaliyo", + "Febwaliyo", + "Marisi", + "Apuli", + "Maayi", + "Juuni", + "Julaayi", + "Agusito", + "Sebuttemba", + "Okitobba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Sab", + "Bal", + "Lw2", + "Lw3", + "Lw4", + "Lw5", + "Lw6" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apu", + "Maa", + "Juu", + "Jul", + "Agu", + "Seb", + "Oki", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "lg-ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lg.js b/vendor/assets/components/angular-i18n/angular-locale_lg.js new file mode 100644 index 000000000..d5185d111 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sabbiiti", + "Balaza", + "Lwakubiri", + "Lwakusatu", + "Lwakuna", + "Lwakutaano", + "Lwamukaaga" + ], + "ERANAMES": [ + "Kulisito nga tannaza", + "Bukya Kulisito Azaal" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Janwaliyo", + "Febwaliyo", + "Marisi", + "Apuli", + "Maayi", + "Juuni", + "Julaayi", + "Agusito", + "Sebuttemba", + "Okitobba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Sab", + "Bal", + "Lw2", + "Lw3", + "Lw4", + "Lw5", + "Lw6" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apu", + "Maa", + "Juu", + "Jul", + "Agu", + "Seb", + "Oki", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "lg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lkt-us.js b/vendor/assets/components/angular-i18n/angular-locale_lkt-us.js new file mode 100644 index 000000000..4d4179a9c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lkt-us.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "A\u014bp\u00e9tuwak\u021fa\u014b", + "A\u014bp\u00e9tuwa\u014b\u017ei", + "A\u014bp\u00e9tunu\u014bpa", + "A\u014bp\u00e9tuyamni", + "A\u014bp\u00e9tutopa", + "A\u014bp\u00e9tuzapta\u014b", + "Ow\u00e1\u014bgyu\u017ea\u017eapi" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Wi\u00f3the\u021fika W\u00ed", + "Thiy\u00f3\u021feyu\u014bka W\u00ed", + "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed", + "P\u021fe\u017e\u00edt\u021fo W\u00ed", + "\u010cha\u014bw\u00e1pet\u021fo W\u00ed", + "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed", + "\u010cha\u014bp\u021f\u00e1sapa W\u00ed", + "Was\u00fat\u021fu\u014b W\u00ed", + "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed", + "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed", + "Wan\u00edyetu W\u00ed", + "T\u021fah\u00e9kap\u0161u\u014b W\u00ed" + ], + "SHORTDAY": [ + "A\u014bp\u00e9tuwak\u021fa\u014b", + "A\u014bp\u00e9tuwa\u014b\u017ei", + "A\u014bp\u00e9tunu\u014bpa", + "A\u014bp\u00e9tuyamni", + "A\u014bp\u00e9tutopa", + "A\u014bp\u00e9tuzapta\u014b", + "Ow\u00e1\u014bgyu\u017ea\u017eapi" + ], + "SHORTMONTH": [ + "Wi\u00f3the\u021fika W\u00ed", + "Thiy\u00f3\u021feyu\u014bka W\u00ed", + "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed", + "P\u021fe\u017e\u00edt\u021fo W\u00ed", + "\u010cha\u014bw\u00e1pet\u021fo W\u00ed", + "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed", + "\u010cha\u014bp\u021f\u00e1sapa W\u00ed", + "Was\u00fat\u021fu\u014b W\u00ed", + "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed", + "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed", + "Wan\u00edyetu W\u00ed", + "T\u021fah\u00e9kap\u0161u\u014b W\u00ed" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "lkt-us", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lkt.js b/vendor/assets/components/angular-i18n/angular-locale_lkt.js new file mode 100644 index 000000000..2520672dc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lkt.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "A\u014bp\u00e9tuwak\u021fa\u014b", + "A\u014bp\u00e9tuwa\u014b\u017ei", + "A\u014bp\u00e9tunu\u014bpa", + "A\u014bp\u00e9tuyamni", + "A\u014bp\u00e9tutopa", + "A\u014bp\u00e9tuzapta\u014b", + "Ow\u00e1\u014bgyu\u017ea\u017eapi" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Wi\u00f3the\u021fika W\u00ed", + "Thiy\u00f3\u021feyu\u014bka W\u00ed", + "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed", + "P\u021fe\u017e\u00edt\u021fo W\u00ed", + "\u010cha\u014bw\u00e1pet\u021fo W\u00ed", + "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed", + "\u010cha\u014bp\u021f\u00e1sapa W\u00ed", + "Was\u00fat\u021fu\u014b W\u00ed", + "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed", + "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed", + "Wan\u00edyetu W\u00ed", + "T\u021fah\u00e9kap\u0161u\u014b W\u00ed" + ], + "SHORTDAY": [ + "A\u014bp\u00e9tuwak\u021fa\u014b", + "A\u014bp\u00e9tuwa\u014b\u017ei", + "A\u014bp\u00e9tunu\u014bpa", + "A\u014bp\u00e9tuyamni", + "A\u014bp\u00e9tutopa", + "A\u014bp\u00e9tuzapta\u014b", + "Ow\u00e1\u014bgyu\u017ea\u017eapi" + ], + "SHORTMONTH": [ + "Wi\u00f3the\u021fika W\u00ed", + "Thiy\u00f3\u021feyu\u014bka W\u00ed", + "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed", + "P\u021fe\u017e\u00edt\u021fo W\u00ed", + "\u010cha\u014bw\u00e1pet\u021fo W\u00ed", + "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed", + "\u010cha\u014bp\u021f\u00e1sapa W\u00ed", + "Was\u00fat\u021fu\u014b W\u00ed", + "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed", + "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed", + "Wan\u00edyetu W\u00ed", + "T\u021fah\u00e9kap\u0161u\u014b W\u00ed" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "lkt", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ln-ao.js b/vendor/assets/components/angular-i18n/angular-locale_ln-ao.js new file mode 100644 index 000000000..e443c8e7a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ln-ao.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "ERANAMES": [ + "Yambo ya Y\u00e9zu Kr\u00eds", + "Nsima ya Y\u00e9zu Kr\u00eds" + ], + "ERAS": [ + "lib\u00f3so ya", + "nsima ya Y" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "dsb" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Kz", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ln-ao", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ln-cd.js b/vendor/assets/components/angular-i18n/angular-locale_ln-cd.js new file mode 100644 index 000000000..870498237 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ln-cd.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "ERANAMES": [ + "Yambo ya Y\u00e9zu Kr\u00eds", + "Nsima ya Y\u00e9zu Kr\u00eds" + ], + "ERAS": [ + "lib\u00f3so ya", + "nsima ya Y" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "dsb" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FrCD", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ln-cd", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ln-cf.js b/vendor/assets/components/angular-i18n/angular-locale_ln-cf.js new file mode 100644 index 000000000..9ae787488 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ln-cf.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "ERANAMES": [ + "Yambo ya Y\u00e9zu Kr\u00eds", + "Nsima ya Y\u00e9zu Kr\u00eds" + ], + "ERAS": [ + "lib\u00f3so ya", + "nsima ya Y" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "dsb" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ln-cf", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ln-cg.js b/vendor/assets/components/angular-i18n/angular-locale_ln-cg.js new file mode 100644 index 000000000..762d5bc28 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ln-cg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "ERANAMES": [ + "Yambo ya Y\u00e9zu Kr\u00eds", + "Nsima ya Y\u00e9zu Kr\u00eds" + ], + "ERAS": [ + "lib\u00f3so ya", + "nsima ya Y" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "dsb" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ln-cg", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ln.js b/vendor/assets/components/angular-i18n/angular-locale_ln.js new file mode 100644 index 000000000..3abd91b7a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ln.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "ERANAMES": [ + "Yambo ya Y\u00e9zu Kr\u00eds", + "Nsima ya Y\u00e9zu Kr\u00eds" + ], + "ERAS": [ + "lib\u00f3so ya", + "nsima ya Y" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "dsb" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FrCD", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ln", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lo-la.js b/vendor/assets/components/angular-i18n/angular-locale_lo-la.js new file mode 100644 index 000000000..46076464c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lo-la.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0e81\u0ec8\u0ead\u0e99\u0e97\u0ec8\u0ebd\u0e87", + "\u0eab\u0ebc\u0eb1\u0e87\u0e97\u0ec8\u0ebd\u0e87" + ], + "DAY": [ + "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94", + "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99", + "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94", + "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81", + "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2" + ], + "ERANAMES": [ + "\u0e81\u0ec8\u0ead\u0e99\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94", + "\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94" + ], + "ERAS": [ + "\u0e81\u0ec8\u0ead\u0e99 \u0e84.\u0eaa.", + "\u0e84.\u0eaa." + ], + "MONTH": [ + "\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99", + "\u0e81\u0eb8\u0ea1\u0e9e\u0eb2", + "\u0ea1\u0eb5\u0e99\u0eb2", + "\u0ec0\u0ea1\u0eaa\u0eb2", + "\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2", + "\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2", + "\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94", + "\u0eaa\u0eb4\u0e87\u0eab\u0eb2", + "\u0e81\u0eb1\u0e99\u0e8d\u0eb2", + "\u0e95\u0eb8\u0ea5\u0eb2", + "\u0e9e\u0eb0\u0e88\u0eb4\u0e81", + "\u0e97\u0eb1\u0e99\u0ea7\u0eb2" + ], + "SHORTDAY": [ + "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94", + "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99", + "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94", + "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81", + "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2" + ], + "SHORTMONTH": [ + "\u0ea1.\u0e81.", + "\u0e81.\u0e9e.", + "\u0ea1.\u0e99.", + "\u0ea1.\u0eaa.", + "\u0e9e.\u0e9e.", + "\u0ea1\u0eb4.\u0e96.", + "\u0e81.\u0ea5.", + "\u0eaa.\u0eab.", + "\u0e81.\u0e8d.", + "\u0e95.\u0ea5.", + "\u0e9e.\u0e88.", + "\u0e97.\u0ea7." + ], + "fullDate": "EEEE \u0e97\u0eb5 d MMMM G y", + "longDate": "d MMMM y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/y H:mm", + "shortDate": "d/M/y", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ad", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "lo-la", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lo.js b/vendor/assets/components/angular-i18n/angular-locale_lo.js new file mode 100644 index 000000000..8c33711a7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lo.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0e81\u0ec8\u0ead\u0e99\u0e97\u0ec8\u0ebd\u0e87", + "\u0eab\u0ebc\u0eb1\u0e87\u0e97\u0ec8\u0ebd\u0e87" + ], + "DAY": [ + "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94", + "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99", + "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94", + "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81", + "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2" + ], + "ERANAMES": [ + "\u0e81\u0ec8\u0ead\u0e99\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94", + "\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94" + ], + "ERAS": [ + "\u0e81\u0ec8\u0ead\u0e99 \u0e84.\u0eaa.", + "\u0e84.\u0eaa." + ], + "MONTH": [ + "\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99", + "\u0e81\u0eb8\u0ea1\u0e9e\u0eb2", + "\u0ea1\u0eb5\u0e99\u0eb2", + "\u0ec0\u0ea1\u0eaa\u0eb2", + "\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2", + "\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2", + "\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94", + "\u0eaa\u0eb4\u0e87\u0eab\u0eb2", + "\u0e81\u0eb1\u0e99\u0e8d\u0eb2", + "\u0e95\u0eb8\u0ea5\u0eb2", + "\u0e9e\u0eb0\u0e88\u0eb4\u0e81", + "\u0e97\u0eb1\u0e99\u0ea7\u0eb2" + ], + "SHORTDAY": [ + "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94", + "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99", + "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94", + "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94", + "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81", + "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2" + ], + "SHORTMONTH": [ + "\u0ea1.\u0e81.", + "\u0e81.\u0e9e.", + "\u0ea1.\u0e99.", + "\u0ea1.\u0eaa.", + "\u0e9e.\u0e9e.", + "\u0ea1\u0eb4.\u0e96.", + "\u0e81.\u0ea5.", + "\u0eaa.\u0eab.", + "\u0e81.\u0e8d.", + "\u0e95.\u0ea5.", + "\u0e9e.\u0e88.", + "\u0e97.\u0ea7." + ], + "fullDate": "EEEE \u0e97\u0eb5 d MMMM G y", + "longDate": "d MMMM y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "d/M/y H:mm", + "shortDate": "d/M/y", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ad", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "lo", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lt-lt.js b/vendor/assets/components/angular-i18n/angular-locale_lt-lt.js new file mode 100644 index 000000000..524151f95 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lt-lt.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "prie\u0161piet", + "popiet" + ], + "DAY": [ + "sekmadienis", + "pirmadienis", + "antradienis", + "tre\u010diadienis", + "ketvirtadienis", + "penktadienis", + "\u0161e\u0161tadienis" + ], + "ERANAMES": [ + "prie\u0161 Krist\u0173", + "po Kristaus" + ], + "ERAS": [ + "pr. Kr.", + "po Kr." + ], + "MONTH": [ + "sausio", + "vasario", + "kovo", + "baland\u017eio", + "gegu\u017e\u0117s", + "bir\u017eelio", + "liepos", + "rugpj\u016b\u010dio", + "rugs\u0117jo", + "spalio", + "lapkri\u010dio", + "gruod\u017eio" + ], + "SHORTDAY": [ + "sk", + "pr", + "an", + "tr", + "kt", + "pn", + "\u0161t" + ], + "SHORTMONTH": [ + "saus.", + "vas.", + "kov.", + "bal.", + "geg.", + "bir\u017e.", + "liep.", + "rugp.", + "rugs.", + "spal.", + "lapkr.", + "gruod." + ], + "fullDate": "y 'm'. MMMM d 'd'., EEEE", + "longDate": "y 'm'. MMMM d 'd'.", + "medium": "y-MM-dd HH:mm:ss", + "mediumDate": "y-MM-dd", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "lt-lt", + "pluralCat": function(n, opt_precision) { var vf = getVF(n, opt_precision); if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.ONE; } if (n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.FEW; } if (vf.f != 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lt.js b/vendor/assets/components/angular-i18n/angular-locale_lt.js new file mode 100644 index 000000000..59d1306a5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lt.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "prie\u0161piet", + "popiet" + ], + "DAY": [ + "sekmadienis", + "pirmadienis", + "antradienis", + "tre\u010diadienis", + "ketvirtadienis", + "penktadienis", + "\u0161e\u0161tadienis" + ], + "ERANAMES": [ + "prie\u0161 Krist\u0173", + "po Kristaus" + ], + "ERAS": [ + "pr. Kr.", + "po Kr." + ], + "MONTH": [ + "sausio", + "vasario", + "kovo", + "baland\u017eio", + "gegu\u017e\u0117s", + "bir\u017eelio", + "liepos", + "rugpj\u016b\u010dio", + "rugs\u0117jo", + "spalio", + "lapkri\u010dio", + "gruod\u017eio" + ], + "SHORTDAY": [ + "sk", + "pr", + "an", + "tr", + "kt", + "pn", + "\u0161t" + ], + "SHORTMONTH": [ + "saus.", + "vas.", + "kov.", + "bal.", + "geg.", + "bir\u017e.", + "liep.", + "rugp.", + "rugs.", + "spal.", + "lapkr.", + "gruod." + ], + "fullDate": "y 'm'. MMMM d 'd'., EEEE", + "longDate": "y 'm'. MMMM d 'd'.", + "medium": "y-MM-dd HH:mm:ss", + "mediumDate": "y-MM-dd", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "lt", + "pluralCat": function(n, opt_precision) { var vf = getVF(n, opt_precision); if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.ONE; } if (n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.FEW; } if (vf.f != 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lu-cd.js b/vendor/assets/components/angular-i18n/angular-locale_lu-cd.js new file mode 100644 index 000000000..0fa79527e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lu-cd.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Dinda", + "Dilolo" + ], + "DAY": [ + "Lumingu", + "Nkodya", + "Nd\u00e0ay\u00e0", + "Ndang\u00f9", + "Nj\u00f2wa", + "Ng\u00f2vya", + "Lubingu" + ], + "ERANAMES": [ + "Kumpala kwa Yezu Kli", + "Kunyima kwa Yezu Kli" + ], + "ERAS": [ + "kmp. Y.K.", + "kny. Y. K." + ], + "MONTH": [ + "Ciongo", + "L\u00f9ishi", + "Lus\u00f2lo", + "M\u00f9uy\u00e0", + "Lum\u00f9ng\u00f9l\u00f9", + "Lufuimi", + "Kab\u00e0l\u00e0sh\u00ecp\u00f9", + "L\u00f9sh\u00eck\u00e0", + "Lutongolo", + "Lung\u00f9di", + "Kasw\u00e8k\u00e8s\u00e8", + "Cisw\u00e0" + ], + "SHORTDAY": [ + "Lum", + "Nko", + "Ndy", + "Ndg", + "Njw", + "Ngv", + "Lub" + ], + "SHORTMONTH": [ + "Cio", + "Lui", + "Lus", + "Muu", + "Lum", + "Luf", + "Kab", + "Lush", + "Lut", + "Lun", + "Kas", + "Cis" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FrCD", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "lu-cd", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lu.js b/vendor/assets/components/angular-i18n/angular-locale_lu.js new file mode 100644 index 000000000..0772977c2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Dinda", + "Dilolo" + ], + "DAY": [ + "Lumingu", + "Nkodya", + "Nd\u00e0ay\u00e0", + "Ndang\u00f9", + "Nj\u00f2wa", + "Ng\u00f2vya", + "Lubingu" + ], + "ERANAMES": [ + "Kumpala kwa Yezu Kli", + "Kunyima kwa Yezu Kli" + ], + "ERAS": [ + "kmp. Y.K.", + "kny. Y. K." + ], + "MONTH": [ + "Ciongo", + "L\u00f9ishi", + "Lus\u00f2lo", + "M\u00f9uy\u00e0", + "Lum\u00f9ng\u00f9l\u00f9", + "Lufuimi", + "Kab\u00e0l\u00e0sh\u00ecp\u00f9", + "L\u00f9sh\u00eck\u00e0", + "Lutongolo", + "Lung\u00f9di", + "Kasw\u00e8k\u00e8s\u00e8", + "Cisw\u00e0" + ], + "SHORTDAY": [ + "Lum", + "Nko", + "Ndy", + "Ndg", + "Njw", + "Ngv", + "Lub" + ], + "SHORTMONTH": [ + "Cio", + "Lui", + "Lus", + "Muu", + "Lum", + "Luf", + "Kab", + "Lush", + "Lut", + "Lun", + "Kas", + "Cis" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FrCD", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "lu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_luo-ke.js b/vendor/assets/components/angular-i18n/angular-locale_luo-ke.js new file mode 100644 index 000000000..3e8e14942 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_luo-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "OD", + "OT" + ], + "DAY": [ + "Jumapil", + "Wuok Tich", + "Tich Ariyo", + "Tich Adek", + "Tich Ang\u2019wen", + "Tich Abich", + "Ngeso" + ], + "ERANAMES": [ + "Kapok Kristo obiro", + "Ka Kristo osebiro" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Dwe mar Achiel", + "Dwe mar Ariyo", + "Dwe mar Adek", + "Dwe mar Ang\u2019wen", + "Dwe mar Abich", + "Dwe mar Auchiel", + "Dwe mar Abiriyo", + "Dwe mar Aboro", + "Dwe mar Ochiko", + "Dwe mar Apar", + "Dwe mar gi achiel", + "Dwe mar Apar gi ariyo" + ], + "SHORTDAY": [ + "JMP", + "WUT", + "TAR", + "TAD", + "TAN", + "TAB", + "NGS" + ], + "SHORTMONTH": [ + "DAC", + "DAR", + "DAD", + "DAN", + "DAH", + "DAU", + "DAO", + "DAB", + "DOC", + "DAP", + "DGI", + "DAG" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "luo-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_luo.js b/vendor/assets/components/angular-i18n/angular-locale_luo.js new file mode 100644 index 000000000..8a7989e8a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_luo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "OD", + "OT" + ], + "DAY": [ + "Jumapil", + "Wuok Tich", + "Tich Ariyo", + "Tich Adek", + "Tich Ang\u2019wen", + "Tich Abich", + "Ngeso" + ], + "ERANAMES": [ + "Kapok Kristo obiro", + "Ka Kristo osebiro" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Dwe mar Achiel", + "Dwe mar Ariyo", + "Dwe mar Adek", + "Dwe mar Ang\u2019wen", + "Dwe mar Abich", + "Dwe mar Auchiel", + "Dwe mar Abiriyo", + "Dwe mar Aboro", + "Dwe mar Ochiko", + "Dwe mar Apar", + "Dwe mar gi achiel", + "Dwe mar Apar gi ariyo" + ], + "SHORTDAY": [ + "JMP", + "WUT", + "TAR", + "TAD", + "TAN", + "TAB", + "NGS" + ], + "SHORTMONTH": [ + "DAC", + "DAR", + "DAD", + "DAN", + "DAH", + "DAU", + "DAO", + "DAB", + "DOC", + "DAP", + "DGI", + "DAG" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "luo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_luy-ke.js b/vendor/assets/components/angular-i18n/angular-locale_luy-ke.js new file mode 100644 index 000000000..5a295a200 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_luy-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Jumapiri", + "Jumatatu", + "Jumanne", + "Jumatano", + "Murwa wa Kanne", + "Murwa wa Katano", + "Jumamosi" + ], + "ERANAMES": [ + "Imberi ya Kuuza Kwa", + "Muhiga Kuvita Kuuza" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "J2", + "J3", + "J4", + "J5", + "Al", + "Ij", + "J1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-\u00a0", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "luy-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_luy.js b/vendor/assets/components/angular-i18n/angular-locale_luy.js new file mode 100644 index 000000000..1173ea493 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_luy.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Jumapiri", + "Jumatatu", + "Jumanne", + "Jumatano", + "Murwa wa Kanne", + "Murwa wa Katano", + "Jumamosi" + ], + "ERANAMES": [ + "Imberi ya Kuuza Kwa", + "Muhiga Kuvita Kuuza" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "J2", + "J3", + "J4", + "J5", + "Al", + "Ij", + "J1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-\u00a0", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "luy", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lv-lv.js b/vendor/assets/components/angular-i18n/angular-locale_lv-lv.js new file mode 100644 index 000000000..180ea4e78 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lv-lv.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "priek\u0161pusdien\u0101", + "p\u0113cpusdien\u0101" + ], + "DAY": [ + "sv\u0113tdiena", + "pirmdiena", + "otrdiena", + "tre\u0161diena", + "ceturtdiena", + "piektdiena", + "sestdiena" + ], + "ERANAMES": [ + "pirms m\u016bsu \u0113ras", + "m\u016bsu \u0113r\u0101" + ], + "ERAS": [ + "p.m.\u0113.", + "m.\u0113." + ], + "MONTH": [ + "janv\u0101ris", + "febru\u0101ris", + "marts", + "apr\u012blis", + "maijs", + "j\u016bnijs", + "j\u016blijs", + "augusts", + "septembris", + "oktobris", + "novembris", + "decembris" + ], + "SHORTDAY": [ + "Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se" + ], + "SHORTMONTH": [ + "janv.", + "febr.", + "marts", + "apr.", + "maijs", + "j\u016bn.", + "j\u016bl.", + "aug.", + "sept.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE, y. 'gada' d. MMMM", + "longDate": "y. 'gada' d. MMMM", + "medium": "y. 'gada' d. MMM HH:mm:ss", + "mediumDate": "y. 'gada' d. MMM", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "lv-lv", + "pluralCat": function(n, opt_precision) { var vf = getVF(n, opt_precision); if (n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19 || vf.v == 2 && vf.f % 100 >= 11 && vf.f % 100 <= 19) { return PLURAL_CATEGORY.ZERO; } if (n % 10 == 1 && n % 100 != 11 || vf.v == 2 && vf.f % 10 == 1 && vf.f % 100 != 11 || vf.v != 2 && vf.f % 10 == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_lv.js b/vendor/assets/components/angular-i18n/angular-locale_lv.js new file mode 100644 index 000000000..acf7b56e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_lv.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "priek\u0161pusdien\u0101", + "p\u0113cpusdien\u0101" + ], + "DAY": [ + "sv\u0113tdiena", + "pirmdiena", + "otrdiena", + "tre\u0161diena", + "ceturtdiena", + "piektdiena", + "sestdiena" + ], + "ERANAMES": [ + "pirms m\u016bsu \u0113ras", + "m\u016bsu \u0113r\u0101" + ], + "ERAS": [ + "p.m.\u0113.", + "m.\u0113." + ], + "MONTH": [ + "janv\u0101ris", + "febru\u0101ris", + "marts", + "apr\u012blis", + "maijs", + "j\u016bnijs", + "j\u016blijs", + "augusts", + "septembris", + "oktobris", + "novembris", + "decembris" + ], + "SHORTDAY": [ + "Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se" + ], + "SHORTMONTH": [ + "janv.", + "febr.", + "marts", + "apr.", + "maijs", + "j\u016bn.", + "j\u016bl.", + "aug.", + "sept.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE, y. 'gada' d. MMMM", + "longDate": "y. 'gada' d. MMMM", + "medium": "y. 'gada' d. MMM HH:mm:ss", + "mediumDate": "y. 'gada' d. MMM", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 0, + "lgSize": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "lv", + "pluralCat": function(n, opt_precision) { var vf = getVF(n, opt_precision); if (n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19 || vf.v == 2 && vf.f % 100 >= 11 && vf.f % 100 <= 19) { return PLURAL_CATEGORY.ZERO; } if (n % 10 == 1 && n % 100 != 11 || vf.v == 2 && vf.f % 10 == 1 && vf.f % 100 != 11 || vf.v != 2 && vf.f % 10 == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mas-ke.js b/vendor/assets/components/angular-i18n/angular-locale_mas-ke.js new file mode 100644 index 000000000..bde8d6c9d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mas-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0190nkak\u025bny\u00e1", + "\u0190nd\u00e1m\u00e2" + ], + "DAY": [ + "Jumap\u00edl\u00ed", + "Jumat\u00e1tu", + "Jumane", + "Jumat\u00e1n\u0254", + "Ala\u00e1misi", + "Jum\u00e1a", + "Jumam\u00f3si" + ], + "ERANAMES": [ + "Me\u00edn\u014d Y\u025b\u0301s\u0289", + "E\u00edn\u014d Y\u025b\u0301s\u0289" + ], + "ERAS": [ + "MY", + "EY" + ], + "MONTH": [ + "Oladal\u0289\u0301", + "Ar\u00e1t", + "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k", + "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2", + "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2", + "K\u00faj\u00fa\u0254r\u0254k", + "M\u00f3rus\u00e1sin", + "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b", + "K\u00fash\u00een", + "Olg\u00edsan", + "P\u0289sh\u0289\u0301ka", + "Nt\u0289\u0301\u014b\u0289\u0301s" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Dal", + "Ar\u00e1", + "\u0186\u025bn", + "Doy", + "L\u00e9p", + "Rok", + "S\u00e1s", + "B\u0254\u0301r", + "K\u00fas", + "G\u00eds", + "Sh\u0289\u0301", + "Nt\u0289\u0301" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mas-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mas-tz.js b/vendor/assets/components/angular-i18n/angular-locale_mas-tz.js new file mode 100644 index 000000000..57c1c3d14 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mas-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0190nkak\u025bny\u00e1", + "\u0190nd\u00e1m\u00e2" + ], + "DAY": [ + "Jumap\u00edl\u00ed", + "Jumat\u00e1tu", + "Jumane", + "Jumat\u00e1n\u0254", + "Ala\u00e1misi", + "Jum\u00e1a", + "Jumam\u00f3si" + ], + "ERANAMES": [ + "Me\u00edn\u014d Y\u025b\u0301s\u0289", + "E\u00edn\u014d Y\u025b\u0301s\u0289" + ], + "ERAS": [ + "MY", + "EY" + ], + "MONTH": [ + "Oladal\u0289\u0301", + "Ar\u00e1t", + "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k", + "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2", + "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2", + "K\u00faj\u00fa\u0254r\u0254k", + "M\u00f3rus\u00e1sin", + "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b", + "K\u00fash\u00een", + "Olg\u00edsan", + "P\u0289sh\u0289\u0301ka", + "Nt\u0289\u0301\u014b\u0289\u0301s" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Dal", + "Ar\u00e1", + "\u0186\u025bn", + "Doy", + "L\u00e9p", + "Rok", + "S\u00e1s", + "B\u0254\u0301r", + "K\u00fas", + "G\u00eds", + "Sh\u0289\u0301", + "Nt\u0289\u0301" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mas-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mas.js b/vendor/assets/components/angular-i18n/angular-locale_mas.js new file mode 100644 index 000000000..e90fe5b02 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mas.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0190nkak\u025bny\u00e1", + "\u0190nd\u00e1m\u00e2" + ], + "DAY": [ + "Jumap\u00edl\u00ed", + "Jumat\u00e1tu", + "Jumane", + "Jumat\u00e1n\u0254", + "Ala\u00e1misi", + "Jum\u00e1a", + "Jumam\u00f3si" + ], + "ERANAMES": [ + "Me\u00edn\u014d Y\u025b\u0301s\u0289", + "E\u00edn\u014d Y\u025b\u0301s\u0289" + ], + "ERAS": [ + "MY", + "EY" + ], + "MONTH": [ + "Oladal\u0289\u0301", + "Ar\u00e1t", + "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k", + "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2", + "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2", + "K\u00faj\u00fa\u0254r\u0254k", + "M\u00f3rus\u00e1sin", + "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b", + "K\u00fash\u00een", + "Olg\u00edsan", + "P\u0289sh\u0289\u0301ka", + "Nt\u0289\u0301\u014b\u0289\u0301s" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Dal", + "Ar\u00e1", + "\u0186\u025bn", + "Doy", + "L\u00e9p", + "Rok", + "S\u00e1s", + "B\u0254\u0301r", + "K\u00fas", + "G\u00eds", + "Sh\u0289\u0301", + "Nt\u0289\u0301" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mas", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mer-ke.js b/vendor/assets/components/angular-i18n/angular-locale_mer-ke.js new file mode 100644 index 000000000..ef2a4a580 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mer-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "R\u0168", + "\u0168G" + ], + "DAY": [ + "Kiumia", + "Muramuko", + "Wairi", + "Wethatu", + "Wena", + "Wetano", + "Jumamosi" + ], + "ERANAMES": [ + "Mbere ya Krist\u0169", + "Nyuma ya Krist\u0169" + ], + "ERAS": [ + "MK", + "NK" + ], + "MONTH": [ + "Januar\u0129", + "Feburuar\u0129", + "Machi", + "\u0128pur\u0169", + "M\u0129\u0129", + "Njuni", + "Njura\u0129", + "Agasti", + "Septemba", + "Okt\u0169ba", + "Novemba", + "Dicemba" + ], + "SHORTDAY": [ + "KIU", + "MRA", + "WAI", + "WET", + "WEN", + "WTN", + "JUM" + ], + "SHORTMONTH": [ + "JAN", + "FEB", + "MAC", + "\u0128PU", + "M\u0128\u0128", + "NJU", + "NJR", + "AGA", + "SPT", + "OKT", + "NOV", + "DEC" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mer-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mer.js b/vendor/assets/components/angular-i18n/angular-locale_mer.js new file mode 100644 index 000000000..da846d2da --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mer.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "R\u0168", + "\u0168G" + ], + "DAY": [ + "Kiumia", + "Muramuko", + "Wairi", + "Wethatu", + "Wena", + "Wetano", + "Jumamosi" + ], + "ERANAMES": [ + "Mbere ya Krist\u0169", + "Nyuma ya Krist\u0169" + ], + "ERAS": [ + "MK", + "NK" + ], + "MONTH": [ + "Januar\u0129", + "Feburuar\u0129", + "Machi", + "\u0128pur\u0169", + "M\u0129\u0129", + "Njuni", + "Njura\u0129", + "Agasti", + "Septemba", + "Okt\u0169ba", + "Novemba", + "Dicemba" + ], + "SHORTDAY": [ + "KIU", + "MRA", + "WAI", + "WET", + "WEN", + "WTN", + "JUM" + ], + "SHORTMONTH": [ + "JAN", + "FEB", + "MAC", + "\u0128PU", + "M\u0128\u0128", + "NJU", + "NJR", + "AGA", + "SPT", + "OKT", + "NOV", + "DEC" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mer", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mfe-mu.js b/vendor/assets/components/angular-i18n/angular-locale_mfe-mu.js new file mode 100644 index 000000000..c99f58979 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mfe-mu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimans", + "lindi", + "mardi", + "merkredi", + "zedi", + "vandredi", + "samdi" + ], + "ERANAMES": [ + "avan Zezi-Krist", + "apre Zezi-Krist" + ], + "ERAS": [ + "av. Z-K", + "ap. Z-K" + ], + "MONTH": [ + "zanvie", + "fevriye", + "mars", + "avril", + "me", + "zin", + "zilye", + "out", + "septam", + "oktob", + "novam", + "desam" + ], + "SHORTDAY": [ + "dim", + "lin", + "mar", + "mer", + "ze", + "van", + "sam" + ], + "SHORTMONTH": [ + "zan", + "fev", + "mar", + "avr", + "me", + "zin", + "zil", + "out", + "sep", + "okt", + "nov", + "des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MURs", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mfe-mu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mfe.js b/vendor/assets/components/angular-i18n/angular-locale_mfe.js new file mode 100644 index 000000000..725d62164 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mfe.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimans", + "lindi", + "mardi", + "merkredi", + "zedi", + "vandredi", + "samdi" + ], + "ERANAMES": [ + "avan Zezi-Krist", + "apre Zezi-Krist" + ], + "ERAS": [ + "av. Z-K", + "ap. Z-K" + ], + "MONTH": [ + "zanvie", + "fevriye", + "mars", + "avril", + "me", + "zin", + "zilye", + "out", + "septam", + "oktob", + "novam", + "desam" + ], + "SHORTDAY": [ + "dim", + "lin", + "mar", + "mer", + "ze", + "van", + "sam" + ], + "SHORTMONTH": [ + "zan", + "fev", + "mar", + "avr", + "me", + "zin", + "zil", + "out", + "sep", + "okt", + "nov", + "des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MURs", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mfe", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mg-mg.js b/vendor/assets/components/angular-i18n/angular-locale_mg-mg.js new file mode 100644 index 000000000..623fe7090 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mg-mg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Alahady", + "Alatsinainy", + "Talata", + "Alarobia", + "Alakamisy", + "Zoma", + "Asabotsy" + ], + "ERANAMES": [ + "Alohan\u2019i JK", + "Aorian\u2019i JK" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Janoary", + "Febroary", + "Martsa", + "Aprily", + "Mey", + "Jona", + "Jolay", + "Aogositra", + "Septambra", + "Oktobra", + "Novambra", + "Desambra" + ], + "SHORTDAY": [ + "Alah", + "Alats", + "Tal", + "Alar", + "Alak", + "Zom", + "Asab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mey", + "Jon", + "Jol", + "Aog", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ar", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mg-mg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mg.js b/vendor/assets/components/angular-i18n/angular-locale_mg.js new file mode 100644 index 000000000..b2850eb1b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Alahady", + "Alatsinainy", + "Talata", + "Alarobia", + "Alakamisy", + "Zoma", + "Asabotsy" + ], + "ERANAMES": [ + "Alohan\u2019i JK", + "Aorian\u2019i JK" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Janoary", + "Febroary", + "Martsa", + "Aprily", + "Mey", + "Jona", + "Jolay", + "Aogositra", + "Septambra", + "Oktobra", + "Novambra", + "Desambra" + ], + "SHORTDAY": [ + "Alah", + "Alats", + "Tal", + "Alar", + "Alak", + "Zom", + "Asab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mey", + "Jon", + "Jol", + "Aog", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ar", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mgh-mz.js b/vendor/assets/components/angular-i18n/angular-locale_mgh-mz.js new file mode 100644 index 000000000..c15b878bf --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mgh-mz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "wichishu", + "mchochil\u2019l" + ], + "DAY": [ + "Sabato", + "Jumatatu", + "Jumanne", + "Jumatano", + "Arahamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Hinapiya yesu", + "Yopia yesu" + ], + "ERAS": [ + "HY", + "YY" + ], + "MONTH": [ + "Mweri wo kwanza", + "Mweri wo unayeli", + "Mweri wo uneraru", + "Mweri wo unecheshe", + "Mweri wo unethanu", + "Mweri wo thanu na mocha", + "Mweri wo saba", + "Mweri wo nane", + "Mweri wo tisa", + "Mweri wo kumi", + "Mweri wo kumi na moja", + "Mweri wo kumi na yel\u2019li" + ], + "SHORTDAY": [ + "Sab", + "Jtt", + "Jnn", + "Jtn", + "Ara", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Kwa", + "Una", + "Rar", + "Che", + "Tha", + "Moc", + "Sab", + "Nan", + "Tis", + "Kum", + "Moj", + "Yel" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MTn", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mgh-mz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mgh.js b/vendor/assets/components/angular-i18n/angular-locale_mgh.js new file mode 100644 index 000000000..b74d9ecb6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mgh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "wichishu", + "mchochil\u2019l" + ], + "DAY": [ + "Sabato", + "Jumatatu", + "Jumanne", + "Jumatano", + "Arahamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Hinapiya yesu", + "Yopia yesu" + ], + "ERAS": [ + "HY", + "YY" + ], + "MONTH": [ + "Mweri wo kwanza", + "Mweri wo unayeli", + "Mweri wo uneraru", + "Mweri wo unecheshe", + "Mweri wo unethanu", + "Mweri wo thanu na mocha", + "Mweri wo saba", + "Mweri wo nane", + "Mweri wo tisa", + "Mweri wo kumi", + "Mweri wo kumi na moja", + "Mweri wo kumi na yel\u2019li" + ], + "SHORTDAY": [ + "Sab", + "Jtt", + "Jnn", + "Jtn", + "Ara", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Kwa", + "Una", + "Rar", + "Che", + "Tha", + "Moc", + "Sab", + "Nan", + "Tis", + "Kum", + "Moj", + "Yel" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MTn", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mgh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mgo-cm.js b/vendor/assets/components/angular-i18n/angular-locale_mgo-cm.js new file mode 100644 index 000000000..05b02f095 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mgo-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Aneg 1", + "Aneg 2", + "Aneg 3", + "Aneg 4", + "Aneg 5", + "Aneg 6", + "Aneg 7" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "im\u0259g mbegtug", + "imeg \u00e0b\u00f9b\u00ec", + "imeg mb\u0259\u014bchubi", + "im\u0259g ngw\u0259\u0300t", + "im\u0259g fog", + "im\u0259g ichiib\u0254d", + "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b", + "im\u0259g ichika", + "im\u0259g kud", + "im\u0259g t\u00e8si\u02bce", + "im\u0259g z\u00f2", + "im\u0259g krizmed" + ], + "SHORTDAY": [ + "Aneg 1", + "Aneg 2", + "Aneg 3", + "Aneg 4", + "Aneg 5", + "Aneg 6", + "Aneg 7" + ], + "SHORTMONTH": [ + "mbegtug", + "imeg \u00e0b\u00f9b\u00ec", + "imeg mb\u0259\u014bchubi", + "im\u0259g ngw\u0259\u0300t", + "im\u0259g fog", + "im\u0259g ichiib\u0254d", + "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b", + "im\u0259g ichika", + "im\u0259g kud", + "im\u0259g t\u00e8si\u02bce", + "im\u0259g z\u00f2", + "im\u0259g krizmed" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mgo-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mgo.js b/vendor/assets/components/angular-i18n/angular-locale_mgo.js new file mode 100644 index 000000000..a8785e2b1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mgo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Aneg 1", + "Aneg 2", + "Aneg 3", + "Aneg 4", + "Aneg 5", + "Aneg 6", + "Aneg 7" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "im\u0259g mbegtug", + "imeg \u00e0b\u00f9b\u00ec", + "imeg mb\u0259\u014bchubi", + "im\u0259g ngw\u0259\u0300t", + "im\u0259g fog", + "im\u0259g ichiib\u0254d", + "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b", + "im\u0259g ichika", + "im\u0259g kud", + "im\u0259g t\u00e8si\u02bce", + "im\u0259g z\u00f2", + "im\u0259g krizmed" + ], + "SHORTDAY": [ + "Aneg 1", + "Aneg 2", + "Aneg 3", + "Aneg 4", + "Aneg 5", + "Aneg 6", + "Aneg 7" + ], + "SHORTMONTH": [ + "mbegtug", + "imeg \u00e0b\u00f9b\u00ec", + "imeg mb\u0259\u014bchubi", + "im\u0259g ngw\u0259\u0300t", + "im\u0259g fog", + "im\u0259g ichiib\u0254d", + "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b", + "im\u0259g ichika", + "im\u0259g kud", + "im\u0259g t\u00e8si\u02bce", + "im\u0259g z\u00f2", + "im\u0259g krizmed" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mgo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mk-mk.js b/vendor/assets/components/angular-i18n/angular-locale_mk-mk.js new file mode 100644 index 000000000..b6aaf0f25 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mk-mk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a", + "\u043f\u0435\u0442\u043e\u043a", + "\u0441\u0430\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u043f\u0440\u0435\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430", + "\u043e\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430" + ], + "ERAS": [ + "\u043f\u0440.\u043d.\u0435.", + "\u043d.\u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d\u0438", + "\u0458\u0443\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434.", + "\u043f\u043e\u043d.", + "\u0432\u0442.", + "\u0441\u0440\u0435.", + "\u0447\u0435\u0442.", + "\u043f\u0435\u0442.", + "\u0441\u0430\u0431." + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d.", + "\u0458\u0443\u043b.", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd.M.y HH:mm:ss", + "mediumDate": "dd.M.y", + "mediumTime": "HH:mm:ss", + "short": "dd.M.yy HH:mm", + "shortDate": "dd.M.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mk-mk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mk.js b/vendor/assets/components/angular-i18n/angular-locale_mk.js new file mode 100644 index 000000000..9179aea1c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a", + "\u043f\u0435\u0442\u043e\u043a", + "\u0441\u0430\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u043f\u0440\u0435\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430", + "\u043e\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430" + ], + "ERAS": [ + "\u043f\u0440.\u043d.\u0435.", + "\u043d.\u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d\u0438", + "\u0458\u0443\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434.", + "\u043f\u043e\u043d.", + "\u0432\u0442.", + "\u0441\u0440\u0435.", + "\u0447\u0435\u0442.", + "\u043f\u0435\u0442.", + "\u0441\u0430\u0431." + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d.", + "\u0458\u0443\u043b.", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "dd MMMM y", + "medium": "dd.M.y HH:mm:ss", + "mediumDate": "dd.M.y", + "mediumTime": "HH:mm:ss", + "short": "dd.M.yy HH:mm", + "shortDate": "dd.M.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ml-in.js b/vendor/assets/components/angular-i18n/angular-locale_ml-in.js new file mode 100644 index 000000000..f1348941d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ml-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a" + ], + "ERANAMES": [ + "\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u200c\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d4d \u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d4d", + "\u0d06\u0d28\u0d4d\u0d28\u0d4b \u0d21\u0d4a\u0d2e\u0d3f\u0d28\u0d3f" + ], + "ERAS": [ + "\u0d15\u0d4d\u0d30\u0d3f.\u0d2e\u0d41.", + "\u0d0e\u0d21\u0d3f" + ], + "MONTH": [ + "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", + "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d7a", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c", + "\u0d12\u0d15\u0d4d\u200c\u0d1f\u0d4b\u0d2c\u0d7c", + "\u0d28\u0d35\u0d02\u0d2c\u0d7c", + "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c" + ], + "SHORTDAY": [ + "\u0d1e\u0d3e\u0d2f\u0d7c", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35", + "\u0d2c\u0d41\u0d27\u0d7b", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", + "\u0d36\u0d28\u0d3f" + ], + "SHORTMONTH": [ + "\u0d1c\u0d28\u0d41", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", + "\u0d2e\u0d3e\u0d7c", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d7a", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d13\u0d17", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", + "\u0d28\u0d35\u0d02", + "\u0d21\u0d3f\u0d38\u0d02" + ], + "fullDate": "y, MMMM d, EEEE", + "longDate": "y, MMMM d", + "medium": "y, MMM d h:mm:ss a", + "mediumDate": "y, MMM d", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ml-in", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ml.js b/vendor/assets/components/angular-i18n/angular-locale_ml.js new file mode 100644 index 000000000..8f4ba63b3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ml.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a", + "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a" + ], + "ERANAMES": [ + "\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u200c\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d4d \u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d4d", + "\u0d06\u0d28\u0d4d\u0d28\u0d4b \u0d21\u0d4a\u0d2e\u0d3f\u0d28\u0d3f" + ], + "ERAS": [ + "\u0d15\u0d4d\u0d30\u0d3f.\u0d2e\u0d41.", + "\u0d0e\u0d21\u0d3f" + ], + "MONTH": [ + "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", + "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d7a", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c", + "\u0d12\u0d15\u0d4d\u200c\u0d1f\u0d4b\u0d2c\u0d7c", + "\u0d28\u0d35\u0d02\u0d2c\u0d7c", + "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c" + ], + "SHORTDAY": [ + "\u0d1e\u0d3e\u0d2f\u0d7c", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35", + "\u0d2c\u0d41\u0d27\u0d7b", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", + "\u0d36\u0d28\u0d3f" + ], + "SHORTMONTH": [ + "\u0d1c\u0d28\u0d41", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", + "\u0d2e\u0d3e\u0d7c", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d7a", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d13\u0d17", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", + "\u0d28\u0d35\u0d02", + "\u0d21\u0d3f\u0d38\u0d02" + ], + "fullDate": "y, MMMM d, EEEE", + "longDate": "y, MMMM d", + "medium": "y, MMM d h:mm:ss a", + "mediumDate": "y, MMM d", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ml", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mn-cyrl-mn.js b/vendor/assets/components/angular-i18n/angular-locale_mn-cyrl-mn.js new file mode 100644 index 000000000..15dfb76af --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mn-cyrl-mn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u04ae\u04e8", + "\u04ae\u0425" + ], + "DAY": [ + "\u043d\u044f\u043c", + "\u0434\u0430\u0432\u0430\u0430", + "\u043c\u044f\u0433\u043c\u0430\u0440", + "\u043b\u0445\u0430\u0433\u0432\u0430", + "\u043f\u04af\u0440\u044d\u0432", + "\u0431\u0430\u0430\u0441\u0430\u043d", + "\u0431\u044f\u043c\u0431\u0430" + ], + "ERANAMES": [ + "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439 \u04e9\u043c\u043d\u04e9\u0445", + "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439" + ], + "ERAS": [ + "\u041c\u042d\u04e8", + "\u041c\u042d" + ], + "MONTH": [ + "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440" + ], + "SHORTDAY": [ + "\u041d\u044f", + "\u0414\u0430", + "\u041c\u044f", + "\u041b\u0445", + "\u041f\u04af", + "\u0411\u0430", + "\u0411\u044f" + ], + "SHORTMONTH": [ + "1-\u0440 \u0441\u0430\u0440", + "2-\u0440 \u0441\u0430\u0440", + "3-\u0440 \u0441\u0430\u0440", + "4-\u0440 \u0441\u0430\u0440", + "5-\u0440 \u0441\u0430\u0440", + "6-\u0440 \u0441\u0430\u0440", + "7-\u0440 \u0441\u0430\u0440", + "8-\u0440 \u0441\u0430\u0440", + "9-\u0440 \u0441\u0430\u0440", + "10-\u0440 \u0441\u0430\u0440", + "11-\u0440 \u0441\u0430\u0440", + "12-\u0440 \u0441\u0430\u0440" + ], + "fullDate": "EEEE, y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d", + "longDate": "y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ae", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mn-cyrl-mn", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mn-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_mn-cyrl.js new file mode 100644 index 000000000..91b4c2e38 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mn-cyrl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u04ae\u04e8", + "\u04ae\u0425" + ], + "DAY": [ + "\u043d\u044f\u043c", + "\u0434\u0430\u0432\u0430\u0430", + "\u043c\u044f\u0433\u043c\u0430\u0440", + "\u043b\u0445\u0430\u0433\u0432\u0430", + "\u043f\u04af\u0440\u044d\u0432", + "\u0431\u0430\u0430\u0441\u0430\u043d", + "\u0431\u044f\u043c\u0431\u0430" + ], + "ERANAMES": [ + "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439 \u04e9\u043c\u043d\u04e9\u0445", + "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439" + ], + "ERAS": [ + "\u041c\u042d\u04e8", + "\u041c\u042d" + ], + "MONTH": [ + "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440" + ], + "SHORTDAY": [ + "\u041d\u044f", + "\u0414\u0430", + "\u041c\u044f", + "\u041b\u0445", + "\u041f\u04af", + "\u0411\u0430", + "\u0411\u044f" + ], + "SHORTMONTH": [ + "1-\u0440 \u0441\u0430\u0440", + "2-\u0440 \u0441\u0430\u0440", + "3-\u0440 \u0441\u0430\u0440", + "4-\u0440 \u0441\u0430\u0440", + "5-\u0440 \u0441\u0430\u0440", + "6-\u0440 \u0441\u0430\u0440", + "7-\u0440 \u0441\u0430\u0440", + "8-\u0440 \u0441\u0430\u0440", + "9-\u0440 \u0441\u0430\u0440", + "10-\u0440 \u0441\u0430\u0440", + "11-\u0440 \u0441\u0430\u0440", + "12-\u0440 \u0441\u0430\u0440" + ], + "fullDate": "EEEE, y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d", + "longDate": "y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mn-cyrl", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mn.js b/vendor/assets/components/angular-i18n/angular-locale_mn.js new file mode 100644 index 000000000..3a3174c09 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u04ae\u04e8", + "\u04ae\u0425" + ], + "DAY": [ + "\u043d\u044f\u043c", + "\u0434\u0430\u0432\u0430\u0430", + "\u043c\u044f\u0433\u043c\u0430\u0440", + "\u043b\u0445\u0430\u0433\u0432\u0430", + "\u043f\u04af\u0440\u044d\u0432", + "\u0431\u0430\u0430\u0441\u0430\u043d", + "\u0431\u044f\u043c\u0431\u0430" + ], + "ERANAMES": [ + "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439 \u04e9\u043c\u043d\u04e9\u0445", + "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439" + ], + "ERAS": [ + "\u041c\u042d\u04e8", + "\u041c\u042d" + ], + "MONTH": [ + "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440", + "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440" + ], + "SHORTDAY": [ + "\u041d\u044f", + "\u0414\u0430", + "\u041c\u044f", + "\u041b\u0445", + "\u041f\u04af", + "\u0411\u0430", + "\u0411\u044f" + ], + "SHORTMONTH": [ + "1-\u0440 \u0441\u0430\u0440", + "2-\u0440 \u0441\u0430\u0440", + "3-\u0440 \u0441\u0430\u0440", + "4-\u0440 \u0441\u0430\u0440", + "5-\u0440 \u0441\u0430\u0440", + "6-\u0440 \u0441\u0430\u0440", + "7-\u0440 \u0441\u0430\u0440", + "8-\u0440 \u0441\u0430\u0440", + "9-\u0440 \u0441\u0430\u0440", + "10-\u0440 \u0441\u0430\u0440", + "11-\u0440 \u0441\u0430\u0440", + "12-\u0440 \u0441\u0430\u0440" + ], + "fullDate": "EEEE, y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d", + "longDate": "y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ae", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "mn", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mr-in.js b/vendor/assets/components/angular-i18n/angular-locale_mr-in.js new file mode 100644 index 000000000..19fdc528a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mr-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092e.\u092a\u0942.", + "\u092e.\u0909." + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u0935\u0940\u0938\u0928\u092a\u0942\u0930\u094d\u0935", + "\u0908\u0938\u0935\u0940\u0938\u0928" + ], + "ERAS": [ + "\u0907. \u0938. \u092a\u0942.", + "\u0907. \u0938." + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917\u0938\u094d\u091f", + "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947", + "\u092b\u0947\u092c\u094d\u0930\u0941", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917", + "\u0938\u092a\u094d\u091f\u0947\u0902", + "\u0911\u0915\u094d\u091f\u094b", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", + "\u0921\u093f\u0938\u0947\u0902" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mr-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mr.js b/vendor/assets/components/angular-i18n/angular-locale_mr.js new file mode 100644 index 000000000..8c3ccf25e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092e.\u092a\u0942.", + "\u092e.\u0909." + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u0935\u0940\u0938\u0928\u092a\u0942\u0930\u094d\u0935", + "\u0908\u0938\u0935\u0940\u0938\u0928" + ], + "ERAS": [ + "\u0907. \u0938. \u092a\u0942.", + "\u0907. \u0938." + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917\u0938\u094d\u091f", + "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947", + "\u092b\u0947\u092c\u094d\u0930\u0941", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917", + "\u0938\u092a\u094d\u091f\u0947\u0902", + "\u0911\u0915\u094d\u091f\u094b", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", + "\u0921\u093f\u0938\u0947\u0902" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mr", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ms-bn.js b/vendor/assets/components/angular-i18n/angular-locale_ms-bn.js new file mode 100644 index 000000000..cd32b5607 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ms-bn.js @@ -0,0 +1,99 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogos", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "dd MMMM y", + "longDate": "d MMMM y", + "medium": "dd/MM/yyyy h:mm:ss a", + "mediumDate": "dd/MM/yyyy", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RM", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "(\u00a4", + "negSuf": ")", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ms-bn", + "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} +}); +}]); \ No newline at end of file diff --git a/vendor/assets/components/angular-i18n/angular-locale_ms-latn-bn.js b/vendor/assets/components/angular-i18n/angular-locale_ms-latn-bn.js new file mode 100644 index 000000000..00fd9e3af --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ms-latn-bn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "ERANAMES": [ + "S.M.", + "TM" + ], + "ERAS": [ + "S.M.", + "TM" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogo", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ms-latn-bn", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ms-latn-my.js b/vendor/assets/components/angular-i18n/angular-locale_ms-latn-my.js new file mode 100644 index 000000000..fdea6a42e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ms-latn-my.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "ERANAMES": [ + "S.M.", + "TM" + ], + "ERAS": [ + "S.M.", + "TM" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogo", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RM", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ms-latn-my", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ms-latn-sg.js b/vendor/assets/components/angular-i18n/angular-locale_ms-latn-sg.js new file mode 100644 index 000000000..dbcbd6eb0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ms-latn-sg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "ERANAMES": [ + "S.M.", + "TM" + ], + "ERAS": [ + "S.M.", + "TM" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogo", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ms-latn-sg", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ms-latn.js b/vendor/assets/components/angular-i18n/angular-locale_ms-latn.js new file mode 100644 index 000000000..8a8bac0d1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ms-latn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "ERANAMES": [ + "S.M.", + "TM" + ], + "ERAS": [ + "S.M.", + "TM" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogo", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ms-latn", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ms-my.js b/vendor/assets/components/angular-i18n/angular-locale_ms-my.js new file mode 100644 index 000000000..6f91161ee --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ms-my.js @@ -0,0 +1,99 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogos", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "dd/MM/yyyy h:mm:ss a", + "mediumDate": "dd/MM/yyyy", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RM", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "(\u00a4", + "negSuf": ")", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ms-my", + "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;} +}); +}]); \ No newline at end of file diff --git a/vendor/assets/components/angular-i18n/angular-locale_ms.js b/vendor/assets/components/angular-i18n/angular-locale_ms.js new file mode 100644 index 000000000..a5c494857 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ms.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "ERANAMES": [ + "S.M.", + "TM" + ], + "ERAS": [ + "S.M.", + "TM" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogo", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/yy h:mm a", + "shortDate": "d/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RM", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ms", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mt-mt.js b/vendor/assets/components/angular-i18n/angular-locale_mt-mt.js new file mode 100644 index 000000000..8fffab592 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mt-mt.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Il-\u0126add", + "It-Tnejn", + "It-Tlieta", + "L-Erbg\u0127a", + "Il-\u0126amis", + "Il-\u0120img\u0127a", + "Is-Sibt" + ], + "ERANAMES": [ + "Qabel Kristu", + "Wara Kristu" + ], + "ERAS": [ + "QK", + "WK" + ], + "MONTH": [ + "Jannar", + "Frar", + "Marzu", + "April", + "Mejju", + "\u0120unju", + "Lulju", + "Awwissu", + "Settembru", + "Ottubru", + "Novembru", + "Di\u010bembru" + ], + "SHORTDAY": [ + "\u0126ad", + "Tne", + "Tli", + "Erb", + "\u0126am", + "\u0120im", + "Sib" + ], + "SHORTMONTH": [ + "Jan", + "Fra", + "Mar", + "Apr", + "Mej", + "\u0120un", + "Lul", + "Aww", + "Set", + "Ott", + "Nov", + "Di\u010b" + ], + "fullDate": "EEEE, d 'ta'\u2019 MMMM y", + "longDate": "d 'ta'\u2019 MMMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mt-mt", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n % 100 >= 2 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 19) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mt.js b/vendor/assets/components/angular-i18n/angular-locale_mt.js new file mode 100644 index 000000000..8d1f9ed57 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mt.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Il-\u0126add", + "It-Tnejn", + "It-Tlieta", + "L-Erbg\u0127a", + "Il-\u0126amis", + "Il-\u0120img\u0127a", + "Is-Sibt" + ], + "ERANAMES": [ + "Qabel Kristu", + "Wara Kristu" + ], + "ERAS": [ + "QK", + "WK" + ], + "MONTH": [ + "Jannar", + "Frar", + "Marzu", + "April", + "Mejju", + "\u0120unju", + "Lulju", + "Awwissu", + "Settembru", + "Ottubru", + "Novembru", + "Di\u010bembru" + ], + "SHORTDAY": [ + "\u0126ad", + "Tne", + "Tli", + "Erb", + "\u0126am", + "\u0120im", + "Sib" + ], + "SHORTMONTH": [ + "Jan", + "Fra", + "Mar", + "Apr", + "Mej", + "\u0120un", + "Lul", + "Aww", + "Set", + "Ott", + "Nov", + "Di\u010b" + ], + "fullDate": "EEEE, d 'ta'\u2019 MMMM y", + "longDate": "d 'ta'\u2019 MMMM y", + "medium": "dd MMM y HH:mm:ss", + "mediumDate": "dd MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mt", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n % 100 >= 2 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n % 100 >= 11 && n % 100 <= 19) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mua-cm.js b/vendor/assets/components/angular-i18n/angular-locale_mua-cm.js new file mode 100644 index 000000000..58f9d1c20 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mua-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "comme", + "lilli" + ], + "DAY": [ + "Com\u2019yakke", + "Comlaa\u0257ii", + "Comzyii\u0257ii", + "Comkolle", + "Comkald\u01dd\u0253lii", + "Comgaisuu", + "Comzye\u0253suu" + ], + "ERANAMES": [ + "K\u01ddPel Kristu", + "Pel Kristu" + ], + "ERAS": [ + "KK", + "PK" + ], + "MONTH": [ + "F\u0129i Loo", + "Cokcwakla\u014bne", + "Cokcwaklii", + "F\u0129i Marfoo", + "Mad\u01dd\u01dduut\u01ddbija\u014b", + "Mam\u01dd\u014bgw\u00e3afahbii", + "Mam\u01dd\u014bgw\u00e3alii", + "Mad\u01ddmbii", + "F\u0129i D\u01dd\u0253lii", + "F\u0129i Munda\u014b", + "F\u0129i Gwahlle", + "F\u0129i Yuru" + ], + "SHORTDAY": [ + "Cya", + "Cla", + "Czi", + "Cko", + "Cka", + "Cga", + "Cze" + ], + "SHORTMONTH": [ + "FLO", + "CLA", + "CKI", + "FMF", + "MAD", + "MBI", + "MLI", + "MAM", + "FDE", + "FMU", + "FGW", + "FYU" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mua-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_mua.js b/vendor/assets/components/angular-i18n/angular-locale_mua.js new file mode 100644 index 000000000..626249adf --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_mua.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "comme", + "lilli" + ], + "DAY": [ + "Com\u2019yakke", + "Comlaa\u0257ii", + "Comzyii\u0257ii", + "Comkolle", + "Comkald\u01dd\u0253lii", + "Comgaisuu", + "Comzye\u0253suu" + ], + "ERANAMES": [ + "K\u01ddPel Kristu", + "Pel Kristu" + ], + "ERAS": [ + "KK", + "PK" + ], + "MONTH": [ + "F\u0129i Loo", + "Cokcwakla\u014bne", + "Cokcwaklii", + "F\u0129i Marfoo", + "Mad\u01dd\u01dduut\u01ddbija\u014b", + "Mam\u01dd\u014bgw\u00e3afahbii", + "Mam\u01dd\u014bgw\u00e3alii", + "Mad\u01ddmbii", + "F\u0129i D\u01dd\u0253lii", + "F\u0129i Munda\u014b", + "F\u0129i Gwahlle", + "F\u0129i Yuru" + ], + "SHORTDAY": [ + "Cya", + "Cla", + "Czi", + "Cko", + "Cka", + "Cga", + "Cze" + ], + "SHORTMONTH": [ + "FLO", + "CLA", + "CKI", + "FMF", + "MAD", + "MBI", + "MLI", + "MAM", + "FDE", + "FMU", + "FGW", + "FYU" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "mua", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_my-mm.js b/vendor/assets/components/angular-i18n/angular-locale_my-mm.js new file mode 100644 index 000000000..3dc2ddc6d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_my-mm.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1014\u1036\u1014\u1000\u103a", + "\u100a\u1014\u1031" + ], + "DAY": [ + "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031", + "\u1010\u1014\u1004\u103a\u1039\u101c\u102c", + "\u1021\u1004\u103a\u1039\u1002\u102b", + "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038", + "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038", + "\u101e\u1031\u102c\u1000\u103c\u102c", + "\u1005\u1014\u1031" + ], + "ERANAMES": [ + "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1019\u1015\u1031\u102b\u103a\u1019\u102e\u1000\u102c\u101c", + "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1015\u1031\u102b\u103a\u1011\u103d\u1014\u103a\u1038\u1015\u103c\u102e\u1038\u1000\u102c\u101c" + ], + "ERAS": [ + "\u1018\u102e\u1005\u102e", + "\u1021\u1031\u1012\u102e" + ], + "MONTH": [ + "\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e", + "\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e", + "\u1019\u1010\u103a", + "\u1027\u1015\u103c\u102e", + "\u1019\u1031", + "\u1007\u103d\u1014\u103a", + "\u1007\u1030\u101c\u102d\u102f\u1004\u103a", + "\u1029\u1002\u102f\u1010\u103a", + "\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c", + "\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c", + "\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c", + "\u1012\u102e\u1007\u1004\u103a\u1018\u102c" + ], + "SHORTDAY": [ + "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031", + "\u1010\u1014\u1004\u103a\u1039\u101c\u102c", + "\u1021\u1004\u103a\u1039\u1002\u102b", + "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038", + "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038", + "\u101e\u1031\u102c\u1000\u103c\u102c", + "\u1005\u1014\u1031" + ], + "SHORTMONTH": [ + "\u1007\u1014\u103a", + "\u1016\u1031", + "\u1019\u1010\u103a", + "\u1027\u1015\u103c\u102e", + "\u1019\u1031", + "\u1007\u103d\u1014\u103a", + "\u1007\u1030", + "\u1029", + "\u1005\u1000\u103a", + "\u1021\u1031\u102c\u1000\u103a", + "\u1014\u102d\u102f", + "\u1012\u102e" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "K", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "my-mm", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_my.js b/vendor/assets/components/angular-i18n/angular-locale_my.js new file mode 100644 index 000000000..801d3ea42 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_my.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1014\u1036\u1014\u1000\u103a", + "\u100a\u1014\u1031" + ], + "DAY": [ + "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031", + "\u1010\u1014\u1004\u103a\u1039\u101c\u102c", + "\u1021\u1004\u103a\u1039\u1002\u102b", + "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038", + "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038", + "\u101e\u1031\u102c\u1000\u103c\u102c", + "\u1005\u1014\u1031" + ], + "ERANAMES": [ + "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1019\u1015\u1031\u102b\u103a\u1019\u102e\u1000\u102c\u101c", + "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1015\u1031\u102b\u103a\u1011\u103d\u1014\u103a\u1038\u1015\u103c\u102e\u1038\u1000\u102c\u101c" + ], + "ERAS": [ + "\u1018\u102e\u1005\u102e", + "\u1021\u1031\u1012\u102e" + ], + "MONTH": [ + "\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e", + "\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e", + "\u1019\u1010\u103a", + "\u1027\u1015\u103c\u102e", + "\u1019\u1031", + "\u1007\u103d\u1014\u103a", + "\u1007\u1030\u101c\u102d\u102f\u1004\u103a", + "\u1029\u1002\u102f\u1010\u103a", + "\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c", + "\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c", + "\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c", + "\u1012\u102e\u1007\u1004\u103a\u1018\u102c" + ], + "SHORTDAY": [ + "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031", + "\u1010\u1014\u1004\u103a\u1039\u101c\u102c", + "\u1021\u1004\u103a\u1039\u1002\u102b", + "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038", + "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038", + "\u101e\u1031\u102c\u1000\u103c\u102c", + "\u1005\u1014\u1031" + ], + "SHORTMONTH": [ + "\u1007\u1014\u103a", + "\u1016\u1031", + "\u1019\u1010\u103a", + "\u1027\u1015\u103c\u102e", + "\u1019\u1031", + "\u1007\u103d\u1014\u103a", + "\u1007\u1030", + "\u1029", + "\u1005\u1000\u103a", + "\u1021\u1031\u102c\u1000\u103a", + "\u1014\u102d\u102f", + "\u1012\u102e" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "K", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "my", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_naq-na.js b/vendor/assets/components/angular-i18n/angular-locale_naq-na.js new file mode 100644 index 000000000..e2ef3a95f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_naq-na.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u01c1goagas", + "\u01c3uias" + ], + "DAY": [ + "Sontaxtsees", + "Mantaxtsees", + "Denstaxtsees", + "Wunstaxtsees", + "Dondertaxtsees", + "Fraitaxtsees", + "Satertaxtsees" + ], + "ERANAMES": [ + "Xristub ai\u01c3\u00e2", + "Xristub khao\u01c3g\u00e2" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "\u01c3Khanni", + "\u01c3Khan\u01c0g\u00f4ab", + "\u01c0Khuu\u01c1kh\u00e2b", + "\u01c3H\u00f4a\u01c2khaib", + "\u01c3Khaits\u00e2b", + "Gama\u01c0aeb", + "\u01c2Khoesaob", + "Ao\u01c1khuum\u00fb\u01c1kh\u00e2b", + "Tara\u01c0khuum\u00fb\u01c1kh\u00e2b", + "\u01c2N\u00fb\u01c1n\u00e2iseb", + "\u01c0Hoo\u01c2gaeb", + "H\u00f4asore\u01c1kh\u00e2b" + ], + "SHORTDAY": [ + "Son", + "Ma", + "De", + "Wu", + "Do", + "Fr", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "naq-na", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_naq.js b/vendor/assets/components/angular-i18n/angular-locale_naq.js new file mode 100644 index 000000000..d10247d62 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_naq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u01c1goagas", + "\u01c3uias" + ], + "DAY": [ + "Sontaxtsees", + "Mantaxtsees", + "Denstaxtsees", + "Wunstaxtsees", + "Dondertaxtsees", + "Fraitaxtsees", + "Satertaxtsees" + ], + "ERANAMES": [ + "Xristub ai\u01c3\u00e2", + "Xristub khao\u01c3g\u00e2" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "\u01c3Khanni", + "\u01c3Khan\u01c0g\u00f4ab", + "\u01c0Khuu\u01c1kh\u00e2b", + "\u01c3H\u00f4a\u01c2khaib", + "\u01c3Khaits\u00e2b", + "Gama\u01c0aeb", + "\u01c2Khoesaob", + "Ao\u01c1khuum\u00fb\u01c1kh\u00e2b", + "Tara\u01c0khuum\u00fb\u01c1kh\u00e2b", + "\u01c2N\u00fb\u01c1n\u00e2iseb", + "\u01c0Hoo\u01c2gaeb", + "H\u00f4asore\u01c1kh\u00e2b" + ], + "SHORTDAY": [ + "Son", + "Ma", + "De", + "Wu", + "Do", + "Fr", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "naq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nb-no.js b/vendor/assets/components/angular-i18n/angular-locale_nb-no.js new file mode 100644 index 000000000..3c2a4c11b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nb-no.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "mai", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH.mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd.MM.y HH.mm", + "shortDate": "dd.MM.y", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nb-no", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nb-sj.js b/vendor/assets/components/angular-i18n/angular-locale_nb-sj.js new file mode 100644 index 000000000..af5e8f370 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nb-sj.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "mai", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH.mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd.MM.y HH.mm", + "shortDate": "dd.MM.y", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nb-sj", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nb.js b/vendor/assets/components/angular-i18n/angular-locale_nb.js new file mode 100644 index 000000000..6a9b5d2f1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nb.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "mai", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH.mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd.MM.y HH.mm", + "shortDate": "dd.MM.y", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nb", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nd-zw.js b/vendor/assets/components/angular-i18n/angular-locale_nd-zw.js new file mode 100644 index 000000000..769f64fe8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nd-zw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Mvulo", + "Sibili", + "Sithathu", + "Sine", + "Sihlanu", + "Mgqibelo" + ], + "ERANAMES": [ + "UKristo angakabuyi", + "Ukristo ebuyile" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Zibandlela", + "Nhlolanja", + "Mbimbitho", + "Mabasa", + "Nkwenkwezi", + "Nhlangula", + "Ntulikazi", + "Ncwabakazi", + "Mpandula", + "Mfumfu", + "Lwezi", + "Mpalakazi" + ], + "SHORTDAY": [ + "Son", + "Mvu", + "Sib", + "Sit", + "Sin", + "Sih", + "Mgq" + ], + "SHORTMONTH": [ + "Zib", + "Nhlo", + "Mbi", + "Mab", + "Nkw", + "Nhla", + "Ntu", + "Ncw", + "Mpan", + "Mfu", + "Lwe", + "Mpal" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nd-zw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nd.js b/vendor/assets/components/angular-i18n/angular-locale_nd.js new file mode 100644 index 000000000..8ff775a98 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nd.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Mvulo", + "Sibili", + "Sithathu", + "Sine", + "Sihlanu", + "Mgqibelo" + ], + "ERANAMES": [ + "UKristo angakabuyi", + "Ukristo ebuyile" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Zibandlela", + "Nhlolanja", + "Mbimbitho", + "Mabasa", + "Nkwenkwezi", + "Nhlangula", + "Ntulikazi", + "Ncwabakazi", + "Mpandula", + "Mfumfu", + "Lwezi", + "Mpalakazi" + ], + "SHORTDAY": [ + "Son", + "Mvu", + "Sib", + "Sit", + "Sin", + "Sih", + "Mgq" + ], + "SHORTMONTH": [ + "Zib", + "Nhlo", + "Mbi", + "Mab", + "Nkw", + "Nhla", + "Ntu", + "Ncw", + "Mpan", + "Mfu", + "Lwe", + "Mpal" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nd", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ne-in.js b/vendor/assets/components/angular-i18n/angular-locale_ne-in.js new file mode 100644 index 000000000..db2e7a9a6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ne-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928", + "\u0905\u092a\u0930\u093e\u0939\u094d\u0928" + ], + "DAY": [ + "\u0906\u0907\u0924\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0919\u094d\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u092c\u093f\u0939\u0940\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928\u094d" + ], + "ERAS": [ + "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928\u094d" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0947\u0932", + "\u092e\u0908", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930", + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930" + ], + "SHORTDAY": [ + "\u0906\u0907\u0924", + "\u0938\u094b\u092e", + "\u092e\u0919\u094d\u0917\u0932", + "\u092c\u0941\u0927", + "\u092c\u093f\u0939\u0940", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930", + "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ne-in", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ne-np.js b/vendor/assets/components/angular-i18n/angular-locale_ne-np.js new file mode 100644 index 000000000..7a4ab6d65 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ne-np.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092a\u0942\u0930\u094d\u0935 \u092e\u0927\u094d\u092f\u093e\u0928\u094d\u0939", + "\u0909\u0924\u094d\u0924\u0930 \u092e\u0927\u094d\u092f\u093e\u0928\u094d\u0939" + ], + "DAY": [ + "\u0906\u0907\u0924\u092c\u093e\u0930", + "\u0938\u094b\u092e\u092c\u093e\u0930", + "\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930", + "\u092c\u0941\u0927\u092c\u093e\u0930", + "\u092c\u093f\u0939\u0940\u092c\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930", + "\u0936\u0928\u093f\u092c\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928\u094d" + ], + "ERAS": [ + "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928\u094d" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930", + "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930" + ], + "SHORTDAY": [ + "\u0906\u0907\u0924", + "\u0938\u094b\u092e", + "\u092e\u0919\u094d\u0917\u0932", + "\u092c\u0941\u0927", + "\u092c\u093f\u0939\u0940", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930", + "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ne-np", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ne.js b/vendor/assets/components/angular-i18n/angular-locale_ne.js new file mode 100644 index 000000000..070c9e6ba --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ne.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u092a\u0942\u0930\u094d\u0935 \u092e\u0927\u094d\u092f\u093e\u0928\u094d\u0939", + "\u0909\u0924\u094d\u0924\u0930 \u092e\u0927\u094d\u092f\u093e\u0928\u094d\u0939" + ], + "DAY": [ + "\u0906\u0907\u0924\u092c\u093e\u0930", + "\u0938\u094b\u092e\u092c\u093e\u0930", + "\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930", + "\u092c\u0941\u0927\u092c\u093e\u0930", + "\u092c\u093f\u0939\u0940\u092c\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930", + "\u0936\u0928\u093f\u092c\u093e\u0930" + ], + "ERANAMES": [ + "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928\u094d" + ], + "ERAS": [ + "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935", + "\u0938\u0928\u094d" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930", + "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930" + ], + "SHORTDAY": [ + "\u0906\u0907\u0924", + "\u0938\u094b\u092e", + "\u092e\u0919\u094d\u0917\u0932", + "\u092c\u0941\u0927", + "\u092c\u093f\u0939\u0940", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0941\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u091f", + "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930", + "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ne", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl-aw.js b/vendor/assets/components/angular-i18n/angular-locale_nl-aw.js new file mode 100644 index 000000000..7fcc09264 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl-aw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Afl.", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nl-aw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl-be.js b/vendor/assets/components/angular-i18n/angular-locale_nl-be.js new file mode 100644 index 000000000..c6e72dd1f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl-be.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d-MMM-y HH:mm:ss", + "mediumDate": "d-MMM-y", + "mediumTime": "HH:mm:ss", + "short": "d/MM/yy HH:mm", + "shortDate": "d/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "nl-be", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl-bq.js b/vendor/assets/components/angular-i18n/angular-locale_nl-bq.js new file mode 100644 index 000000000..8a61a74d4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl-bq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nl-bq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl-cw.js b/vendor/assets/components/angular-i18n/angular-locale_nl-cw.js new file mode 100644 index 000000000..1aedec941 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl-cw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "ANG", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nl-cw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl-nl.js b/vendor/assets/components/angular-i18n/angular-locale_nl-nl.js new file mode 100644 index 000000000..2723fd188 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl-nl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nl-nl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl-sr.js b/vendor/assets/components/angular-i18n/angular-locale_nl-sr.js new file mode 100644 index 000000000..2b978af75 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl-sr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nl-sr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl-sx.js b/vendor/assets/components/angular-i18n/angular-locale_nl-sx.js new file mode 100644 index 000000000..c12d76de3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl-sx.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "ANG", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nl-sx", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nl.js b/vendor/assets/components/angular-i18n/angular-locale_nl.js new file mode 100644 index 000000000..8c6bed06e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "ERANAMES": [ + "voor Christus", + "na Christus" + ], + "ERAS": [ + "v.Chr.", + "n.Chr." + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0", + "negSuf": "-", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nmg-cm.js b/vendor/assets/components/angular-i18n/angular-locale_nmg-cm.js new file mode 100644 index 000000000..b6f696db3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nmg-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "man\u00e1", + "kug\u00fa" + ], + "DAY": [ + "s\u0254\u0301nd\u0254", + "m\u0254\u0301nd\u0254", + "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1ba", + "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1lal", + "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1na", + "mab\u00e1g\u00e1 m\u00e1 sukul", + "s\u00e1sadi" + ], + "ERANAMES": [ + "B\u00f3 Lahl\u025b\u0304", + "Pfi\u025b Bur\u012b" + ], + "ERAS": [ + "BL", + "PB" + ], + "MONTH": [ + "ngw\u025bn mat\u00e1hra", + "ngw\u025bn \u0144mba", + "ngw\u025bn \u0144lal", + "ngw\u025bn \u0144na", + "ngw\u025bn \u0144tan", + "ngw\u025bn \u0144tu\u00f3", + "ngw\u025bn h\u025bmbu\u025br\u00ed", + "ngw\u025bn l\u0254mbi", + "ngw\u025bn r\u025bbvu\u00e2", + "ngw\u025bn wum", + "ngw\u025bn wum nav\u01d4r", + "kr\u00edsimin" + ], + "SHORTDAY": [ + "s\u0254\u0301n", + "m\u0254\u0301n", + "smb", + "sml", + "smn", + "mbs", + "sas" + ], + "SHORTMONTH": [ + "ng1", + "ng2", + "ng3", + "ng4", + "ng5", + "ng6", + "ng7", + "ng8", + "ng9", + "ng10", + "ng11", + "kris" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "nmg-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nmg.js b/vendor/assets/components/angular-i18n/angular-locale_nmg.js new file mode 100644 index 000000000..7232a2cc8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nmg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "man\u00e1", + "kug\u00fa" + ], + "DAY": [ + "s\u0254\u0301nd\u0254", + "m\u0254\u0301nd\u0254", + "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1ba", + "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1lal", + "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1na", + "mab\u00e1g\u00e1 m\u00e1 sukul", + "s\u00e1sadi" + ], + "ERANAMES": [ + "B\u00f3 Lahl\u025b\u0304", + "Pfi\u025b Bur\u012b" + ], + "ERAS": [ + "BL", + "PB" + ], + "MONTH": [ + "ngw\u025bn mat\u00e1hra", + "ngw\u025bn \u0144mba", + "ngw\u025bn \u0144lal", + "ngw\u025bn \u0144na", + "ngw\u025bn \u0144tan", + "ngw\u025bn \u0144tu\u00f3", + "ngw\u025bn h\u025bmbu\u025br\u00ed", + "ngw\u025bn l\u0254mbi", + "ngw\u025bn r\u025bbvu\u00e2", + "ngw\u025bn wum", + "ngw\u025bn wum nav\u01d4r", + "kr\u00edsimin" + ], + "SHORTDAY": [ + "s\u0254\u0301n", + "m\u0254\u0301n", + "smb", + "sml", + "smn", + "mbs", + "sas" + ], + "SHORTMONTH": [ + "ng1", + "ng2", + "ng3", + "ng4", + "ng5", + "ng6", + "ng7", + "ng8", + "ng9", + "ng10", + "ng11", + "kris" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "nmg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nn-no.js b/vendor/assets/components/angular-i18n/angular-locale_nn-no.js new file mode 100644 index 000000000..e8a4e1a22 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nn-no.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "formiddag", + "ettermiddag" + ], + "DAY": [ + "s\u00f8ndag", + "m\u00e5ndag", + "tysdag", + "onsdag", + "torsdag", + "fredag", + "laurdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8.", + "m\u00e5.", + "ty.", + "on.", + "to.", + "fr.", + "la." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "mai", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y HH:mm", + "shortDate": "dd.MM.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "nn-no", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nn.js b/vendor/assets/components/angular-i18n/angular-locale_nn.js new file mode 100644 index 000000000..9ebbe9182 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "formiddag", + "ettermiddag" + ], + "DAY": [ + "s\u00f8ndag", + "m\u00e5ndag", + "tysdag", + "onsdag", + "torsdag", + "fredag", + "laurdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8.", + "m\u00e5.", + "ty.", + "on.", + "to.", + "fr.", + "la." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "mai", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y HH:mm", + "shortDate": "dd.MM.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "nn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nnh-cm.js b/vendor/assets/components/angular-i18n/angular-locale_nnh-cm.js new file mode 100644 index 000000000..f2ec9d498 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nnh-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "mba\u02bc\u00e1mba\u02bc", + "ncw\u00f2nz\u00e9m" + ], + "DAY": [ + "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8", + "mvf\u00f2 ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc", + "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc", + "m\u00e0ga ly\u025b\u030c\u02bc" + ], + "ERANAMES": [ + "m\u00e9 zy\u00e9 Y\u011bs\u00f4", + "m\u00e9 g\u00ffo \u0144zy\u00e9 Y\u011bs\u00f4" + ], + "ERAS": [ + "m.z.Y.", + "m.g.n.Y." + ], + "MONTH": [ + "sa\u014b tsets\u025b\u0300\u025b l\u00f9m", + "sa\u014b k\u00e0g ngw\u00f3\u014b", + "sa\u014b lepy\u00e8 sh\u00fam", + "sa\u014b c\u00ff\u00f3", + "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3", + "sa\u014b nj\u00ffol\u00e1\u02bc", + "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300", + "sa\u014b mb\u0289\u0300\u014b", + "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b", + "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc", + "sa\u014b mejwo\u014b\u00f3", + "sa\u014b l\u00f9m" + ], + "SHORTDAY": [ + "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8", + "mvf\u00f2 ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc", + "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc", + "m\u00e0ga ly\u025b\u030c\u02bc" + ], + "SHORTMONTH": [ + "sa\u014b tsets\u025b\u0300\u025b l\u00f9m", + "sa\u014b k\u00e0g ngw\u00f3\u014b", + "sa\u014b lepy\u00e8 sh\u00fam", + "sa\u014b c\u00ff\u00f3", + "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3", + "sa\u014b nj\u00ffol\u00e1\u02bc", + "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300", + "sa\u014b mb\u0289\u0300\u014b", + "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b", + "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc", + "sa\u014b mejwo\u014b\u00f3", + "sa\u014b l\u00f9m" + ], + "fullDate": "EEEE , 'ly\u025b'\u030c\u02bc d 'na' MMMM, y", + "longDate": "'ly\u025b'\u030c\u02bc d 'na' MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nnh-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nnh.js b/vendor/assets/components/angular-i18n/angular-locale_nnh.js new file mode 100644 index 000000000..48979e2b2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nnh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "mba\u02bc\u00e1mba\u02bc", + "ncw\u00f2nz\u00e9m" + ], + "DAY": [ + "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8", + "mvf\u00f2 ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc", + "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc", + "m\u00e0ga ly\u025b\u030c\u02bc" + ], + "ERANAMES": [ + "m\u00e9 zy\u00e9 Y\u011bs\u00f4", + "m\u00e9 g\u00ffo \u0144zy\u00e9 Y\u011bs\u00f4" + ], + "ERAS": [ + "m.z.Y.", + "m.g.n.Y." + ], + "MONTH": [ + "sa\u014b tsets\u025b\u0300\u025b l\u00f9m", + "sa\u014b k\u00e0g ngw\u00f3\u014b", + "sa\u014b lepy\u00e8 sh\u00fam", + "sa\u014b c\u00ff\u00f3", + "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3", + "sa\u014b nj\u00ffol\u00e1\u02bc", + "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300", + "sa\u014b mb\u0289\u0300\u014b", + "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b", + "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc", + "sa\u014b mejwo\u014b\u00f3", + "sa\u014b l\u00f9m" + ], + "SHORTDAY": [ + "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8", + "mvf\u00f2 ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc", + "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc", + "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc", + "m\u00e0ga ly\u025b\u030c\u02bc" + ], + "SHORTMONTH": [ + "sa\u014b tsets\u025b\u0300\u025b l\u00f9m", + "sa\u014b k\u00e0g ngw\u00f3\u014b", + "sa\u014b lepy\u00e8 sh\u00fam", + "sa\u014b c\u00ff\u00f3", + "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3", + "sa\u014b nj\u00ffol\u00e1\u02bc", + "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300", + "sa\u014b mb\u0289\u0300\u014b", + "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b", + "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc", + "sa\u014b mejwo\u014b\u00f3", + "sa\u014b l\u00f9m" + ], + "fullDate": "EEEE , 'ly\u025b'\u030c\u02bc d 'na' MMMM, y", + "longDate": "'ly\u025b'\u030c\u02bc d 'na' MMMM, y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "nnh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_no-no.js b/vendor/assets/components/angular-i18n/angular-locale_no-no.js new file mode 100644 index 000000000..48cbee66b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_no-no.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "mai", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH.mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd.MM.y HH.mm", + "shortDate": "dd.MM.y", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "no-no", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_no.js b/vendor/assets/components/angular-i18n/angular-locale_no.js new file mode 100644 index 000000000..5ead6b8aa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_no.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "ERANAMES": [ + "f.Kr.", + "e.Kr." + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "mai", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "des." + ], + "fullDate": "EEEE d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH.mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH.mm.ss", + "short": "dd.MM.y HH.mm", + "shortDate": "dd.MM.y", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "no", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nr-za.js b/vendor/assets/components/angular-i18n/angular-locale_nr-za.js new file mode 100644 index 000000000..b3274e4b2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nr-za.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "uSonto", + "uMvulo", + "uLesibili", + "Lesithathu", + "uLesine", + "ngoLesihlanu", + "umGqibelo" + ], + "ERANAMES": [ + "BC", + "AD" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Janabari", + "uFeberbari", + "uMatjhi", + "u-Apreli", + "Meyi", + "Juni", + "Julayi", + "Arhostosi", + "Septemba", + "Oktoba", + "Usinyikhaba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mvu", + "Bil", + "Tha", + "Ne", + "Hla", + "Gqi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mat", + "Apr", + "Mey", + "Jun", + "Jul", + "Arh", + "Sep", + "Okt", + "Usi", + "Dis" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nr-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nr.js b/vendor/assets/components/angular-i18n/angular-locale_nr.js new file mode 100644 index 000000000..7e73f29dc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "uSonto", + "uMvulo", + "uLesibili", + "Lesithathu", + "uLesine", + "ngoLesihlanu", + "umGqibelo" + ], + "ERANAMES": [ + "BC", + "AD" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Janabari", + "uFeberbari", + "uMatjhi", + "u-Apreli", + "Meyi", + "Juni", + "Julayi", + "Arhostosi", + "Septemba", + "Oktoba", + "Usinyikhaba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mvu", + "Bil", + "Tha", + "Ne", + "Hla", + "Gqi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mat", + "Apr", + "Mey", + "Jun", + "Jul", + "Arh", + "Sep", + "Okt", + "Usi", + "Dis" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nso-za.js b/vendor/assets/components/angular-i18n/angular-locale_nso-za.js new file mode 100644 index 000000000..a51de6046 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nso-za.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sontaga", + "Mosupalogo", + "Labobedi", + "Laboraro", + "Labone", + "Labohlano", + "Mokibelo" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Janaware", + "Feberware", + "Mat\u0161he", + "Aporele", + "Mei", + "June", + "Julae", + "Agostose", + "Setemere", + "Oktobore", + "Nofemere", + "Disemere" + ], + "SHORTDAY": [ + "Son", + "Mos", + "Bed", + "Rar", + "Ne", + "Hla", + "Mok" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mat", + "Apo", + "Mei", + "Jun", + "Jul", + "Ago", + "Set", + "Okt", + "Nof", + "Dis" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nso-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nso.js b/vendor/assets/components/angular-i18n/angular-locale_nso.js new file mode 100644 index 000000000..b0895aade --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nso.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sontaga", + "Mosupalogo", + "Labobedi", + "Laboraro", + "Labone", + "Labohlano", + "Mokibelo" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Janaware", + "Feberware", + "Mat\u0161he", + "Aporele", + "Mei", + "June", + "Julae", + "Agostose", + "Setemere", + "Oktobore", + "Nofemere", + "Disemere" + ], + "SHORTDAY": [ + "Son", + "Mos", + "Bed", + "Rar", + "Ne", + "Hla", + "Mok" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mat", + "Apo", + "Mei", + "Jun", + "Jul", + "Ago", + "Set", + "Okt", + "Nof", + "Dis" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nso", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nus-sd.js b/vendor/assets/components/angular-i18n/angular-locale_nus-sd.js new file mode 100644 index 000000000..10c4631ad --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nus-sd.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "RW", + "T\u014a" + ], + "DAY": [ + "C\u00e4\u014b ku\u0254th", + "Jiec la\u0331t", + "R\u025bw l\u00e4tni", + "Di\u0254\u0331k l\u00e4tni", + "\u014auaan l\u00e4tni", + "Dhieec l\u00e4tni", + "B\u00e4k\u025bl l\u00e4tni" + ], + "ERANAMES": [ + "A ka\u0331n Yecu ni dap", + "\u0190 ca Yecu dap" + ], + "ERAS": [ + "AY", + "\u0190Y" + ], + "MONTH": [ + "Tiop thar p\u025bt", + "P\u025bt", + "Du\u0254\u0331\u0254\u0331\u014b", + "Guak", + "Du\u00e4t", + "Kornyoot", + "Pay yie\u0331tni", + "Tho\u0331o\u0331r", + "T\u025b\u025br", + "Laath", + "Kur", + "Tio\u0331p in di\u0331i\u0331t" + ], + "SHORTDAY": [ + "C\u00e4\u014b", + "Jiec", + "R\u025bw", + "Di\u0254\u0331k", + "\u014auaan", + "Dhieec", + "B\u00e4k\u025bl" + ], + "SHORTMONTH": [ + "Tiop", + "P\u025bt", + "Du\u0254\u0331\u0254\u0331", + "Guak", + "Du\u00e4", + "Kor", + "Pay", + "Thoo", + "T\u025b\u025b", + "Laa", + "Kur", + "Tid" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/y h:mm a", + "shortDate": "d/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SDG", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nus-sd", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nus.js b/vendor/assets/components/angular-i18n/angular-locale_nus.js new file mode 100644 index 000000000..5573be001 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nus.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "RW", + "T\u014a" + ], + "DAY": [ + "C\u00e4\u014b ku\u0254th", + "Jiec la\u0331t", + "R\u025bw l\u00e4tni", + "Di\u0254\u0331k l\u00e4tni", + "\u014auaan l\u00e4tni", + "Dhieec l\u00e4tni", + "B\u00e4k\u025bl l\u00e4tni" + ], + "ERANAMES": [ + "A ka\u0331n Yecu ni dap", + "\u0190 ca Yecu dap" + ], + "ERAS": [ + "AY", + "\u0190Y" + ], + "MONTH": [ + "Tiop thar p\u025bt", + "P\u025bt", + "Du\u0254\u0331\u0254\u0331\u014b", + "Guak", + "Du\u00e4t", + "Kornyoot", + "Pay yie\u0331tni", + "Tho\u0331o\u0331r", + "T\u025b\u025br", + "Laath", + "Kur", + "Tio\u0331p in di\u0331i\u0331t" + ], + "SHORTDAY": [ + "C\u00e4\u014b", + "Jiec", + "R\u025bw", + "Di\u0254\u0331k", + "\u014auaan", + "Dhieec", + "B\u00e4k\u025bl" + ], + "SHORTMONTH": [ + "Tiop", + "P\u025bt", + "Du\u0254\u0331\u0254\u0331", + "Guak", + "Du\u00e4", + "Kor", + "Pay", + "Thoo", + "T\u025b\u025b", + "Laa", + "Kur", + "Tid" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/MM/y h:mm a", + "shortDate": "d/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SDG", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nus", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nyn-ug.js b/vendor/assets/components/angular-i18n/angular-locale_nyn-ug.js new file mode 100644 index 000000000..2893196ff --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nyn-ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sande", + "Orwokubanza", + "Orwakabiri", + "Orwakashatu", + "Orwakana", + "Orwakataano", + "Orwamukaaga" + ], + "ERANAMES": [ + "Kurisito Atakaijire", + "Kurisito Yaijire" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Okwokubanza", + "Okwakabiri", + "Okwakashatu", + "Okwakana", + "Okwakataana", + "Okwamukaaga", + "Okwamushanju", + "Okwamunaana", + "Okwamwenda", + "Okwaikumi", + "Okwaikumi na kumwe", + "Okwaikumi na ibiri" + ], + "SHORTDAY": [ + "SAN", + "ORK", + "OKB", + "OKS", + "OKN", + "OKT", + "OMK" + ], + "SHORTMONTH": [ + "KBZ", + "KBR", + "KST", + "KKN", + "KTN", + "KMK", + "KMS", + "KMN", + "KMW", + "KKM", + "KNK", + "KNB" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nyn-ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_nyn.js b/vendor/assets/components/angular-i18n/angular-locale_nyn.js new file mode 100644 index 000000000..1975d6e7a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_nyn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sande", + "Orwokubanza", + "Orwakabiri", + "Orwakashatu", + "Orwakana", + "Orwakataano", + "Orwamukaaga" + ], + "ERANAMES": [ + "Kurisito Atakaijire", + "Kurisito Yaijire" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Okwokubanza", + "Okwakabiri", + "Okwakashatu", + "Okwakana", + "Okwakataana", + "Okwamukaaga", + "Okwamushanju", + "Okwamunaana", + "Okwamwenda", + "Okwaikumi", + "Okwaikumi na kumwe", + "Okwaikumi na ibiri" + ], + "SHORTDAY": [ + "SAN", + "ORK", + "OKB", + "OKS", + "OKN", + "OKT", + "OMK" + ], + "SHORTMONTH": [ + "KBZ", + "KBR", + "KST", + "KKN", + "KTN", + "KMK", + "KMS", + "KMN", + "KMW", + "KKM", + "KNK", + "KNB" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "nyn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_om-et.js b/vendor/assets/components/angular-i18n/angular-locale_om-et.js new file mode 100644 index 000000000..fb7b220f4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_om-et.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "WD", + "WB" + ], + "DAY": [ + "Dilbata", + "Wiixata", + "Qibxata", + "Roobii", + "Kamiisa", + "Jimaata", + "Sanbata" + ], + "ERANAMES": [ + "KD", + "KB" + ], + "ERAS": [ + "KD", + "KB" + ], + "MONTH": [ + "Amajjii", + "Guraandhala", + "Bitooteessa", + "Elba", + "Caamsa", + "Waxabajjii", + "Adooleessa", + "Hagayya", + "Fuulbana", + "Onkololeessa", + "Sadaasa", + "Muddee" + ], + "SHORTDAY": [ + "Dil", + "Wix", + "Qib", + "Rob", + "Kam", + "Jim", + "San" + ], + "SHORTMONTH": [ + "Ama", + "Gur", + "Bit", + "Elb", + "Cam", + "Wax", + "Ado", + "Hag", + "Ful", + "Onk", + "Sad", + "Mud" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "om-et", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_om-ke.js b/vendor/assets/components/angular-i18n/angular-locale_om-ke.js new file mode 100644 index 000000000..05600e862 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_om-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "WD", + "WB" + ], + "DAY": [ + "Dilbata", + "Wiixata", + "Qibxata", + "Roobii", + "Kamiisa", + "Jimaata", + "Sanbata" + ], + "ERANAMES": [ + "KD", + "KB" + ], + "ERAS": [ + "KD", + "KB" + ], + "MONTH": [ + "Amajjii", + "Guraandhala", + "Bitooteessa", + "Elba", + "Caamsa", + "Waxabajjii", + "Adooleessa", + "Hagayya", + "Fuulbana", + "Onkololeessa", + "Sadaasa", + "Muddee" + ], + "SHORTDAY": [ + "Dil", + "Wix", + "Qib", + "Rob", + "Kam", + "Jim", + "San" + ], + "SHORTMONTH": [ + "Ama", + "Gur", + "Bit", + "Elb", + "Cam", + "Wax", + "Ado", + "Hag", + "Ful", + "Onk", + "Sad", + "Mud" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "om-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_om.js b/vendor/assets/components/angular-i18n/angular-locale_om.js new file mode 100644 index 000000000..e36c810a2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_om.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "WD", + "WB" + ], + "DAY": [ + "Dilbata", + "Wiixata", + "Qibxata", + "Roobii", + "Kamiisa", + "Jimaata", + "Sanbata" + ], + "ERANAMES": [ + "KD", + "KB" + ], + "ERAS": [ + "KD", + "KB" + ], + "MONTH": [ + "Amajjii", + "Guraandhala", + "Bitooteessa", + "Elba", + "Caamsa", + "Waxabajjii", + "Adooleessa", + "Hagayya", + "Fuulbana", + "Onkololeessa", + "Sadaasa", + "Muddee" + ], + "SHORTDAY": [ + "Dil", + "Wix", + "Qib", + "Rob", + "Kam", + "Jim", + "San" + ], + "SHORTMONTH": [ + "Ama", + "Gur", + "Bit", + "Elb", + "Cam", + "Wax", + "Ado", + "Hag", + "Ful", + "Onk", + "Sad", + "Mud" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "om", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_or-in.js b/vendor/assets/components/angular-i18n/angular-locale_or-in.js new file mode 100644 index 000000000..b3352dede --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_or-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30", + "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", + "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", + "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30", + "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", + "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b07", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "SHORTDAY": [ + "\u0b30\u0b2c\u0b3f", + "\u0b38\u0b4b\u0b2e", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33", + "\u0b2c\u0b41\u0b27", + "\u0b17\u0b41\u0b30\u0b41", + "\u0b36\u0b41\u0b15\u0b4d\u0b30", + "\u0b36\u0b28\u0b3f" + ], + "SHORTMONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b07", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "or-in", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_or.js b/vendor/assets/components/angular-i18n/angular-locale_or.js new file mode 100644 index 000000000..ba0f7a762 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_or.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30", + "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", + "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", + "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30", + "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", + "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b07", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "SHORTDAY": [ + "\u0b30\u0b2c\u0b3f", + "\u0b38\u0b4b\u0b2e", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33", + "\u0b2c\u0b41\u0b27", + "\u0b17\u0b41\u0b30\u0b41", + "\u0b36\u0b41\u0b15\u0b4d\u0b30", + "\u0b36\u0b28\u0b3f" + ], + "SHORTMONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b07", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "or", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_os-ge.js b/vendor/assets/components/angular-i18n/angular-locale_os-ge.js new file mode 100644 index 000000000..7658cb15d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_os-ge.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0440\u0430\u0437\u043c\u04d5", + "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0444\u04d5\u0441\u0442\u04d5" + ], + "DAY": [ + "\u0445\u0443\u044b\u0446\u0430\u0443\u0431\u043e\u043d", + "\u043a\u044a\u0443\u044b\u0440\u0438\u0441\u04d5\u0440", + "\u0434\u044b\u0446\u0446\u04d5\u0433", + "\u04d5\u0440\u0442\u044b\u0446\u0446\u04d5\u0433", + "\u0446\u044b\u043f\u043f\u04d5\u0440\u04d5\u043c", + "\u043c\u0430\u0439\u0440\u04d5\u043c\u0431\u043e\u043d", + "\u0441\u0430\u0431\u0430\u0442" + ], + "ERANAMES": [ + "\u043d.\u0434.\u0430.", + "\u043d.\u0434." + ], + "ERAS": [ + "\u043d.\u0434.\u0430.", + "\u043d.\u0434." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044b", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044b", + "\u043c\u0430\u0440\u0442\u044a\u0438\u0439\u044b", + "\u0430\u043f\u0440\u0435\u043b\u044b", + "\u043c\u0430\u0439\u044b", + "\u0438\u044e\u043d\u044b", + "\u0438\u044e\u043b\u044b", + "\u0430\u0432\u0433\u0443\u0441\u0442\u044b", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044b", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044b", + "\u043d\u043e\u044f\u0431\u0440\u044b", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044b" + ], + "SHORTDAY": [ + "\u0445\u0446\u0431", + "\u043a\u0440\u0441", + "\u0434\u0446\u0433", + "\u04d5\u0440\u0442", + "\u0446\u043f\u0440", + "\u043c\u0440\u0431", + "\u0441\u0431\u0442" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044b", + "\u0438\u044e\u043b\u044b", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM, y '\u0430\u0437'", + "longDate": "d MMMM, y '\u0430\u0437'", + "medium": "dd MMM y '\u0430\u0437' HH:mm:ss", + "mediumDate": "dd MMM y '\u0430\u0437'", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GEL", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "os-ge", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_os-ru.js b/vendor/assets/components/angular-i18n/angular-locale_os-ru.js new file mode 100644 index 000000000..e7e59f1b8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_os-ru.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0440\u0430\u0437\u043c\u04d5", + "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0444\u04d5\u0441\u0442\u04d5" + ], + "DAY": [ + "\u0445\u0443\u044b\u0446\u0430\u0443\u0431\u043e\u043d", + "\u043a\u044a\u0443\u044b\u0440\u0438\u0441\u04d5\u0440", + "\u0434\u044b\u0446\u0446\u04d5\u0433", + "\u04d5\u0440\u0442\u044b\u0446\u0446\u04d5\u0433", + "\u0446\u044b\u043f\u043f\u04d5\u0440\u04d5\u043c", + "\u043c\u0430\u0439\u0440\u04d5\u043c\u0431\u043e\u043d", + "\u0441\u0430\u0431\u0430\u0442" + ], + "ERANAMES": [ + "\u043d.\u0434.\u0430.", + "\u043d.\u0434." + ], + "ERAS": [ + "\u043d.\u0434.\u0430.", + "\u043d.\u0434." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044b", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044b", + "\u043c\u0430\u0440\u0442\u044a\u0438\u0439\u044b", + "\u0430\u043f\u0440\u0435\u043b\u044b", + "\u043c\u0430\u0439\u044b", + "\u0438\u044e\u043d\u044b", + "\u0438\u044e\u043b\u044b", + "\u0430\u0432\u0433\u0443\u0441\u0442\u044b", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044b", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044b", + "\u043d\u043e\u044f\u0431\u0440\u044b", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044b" + ], + "SHORTDAY": [ + "\u0445\u0446\u0431", + "\u043a\u0440\u0441", + "\u0434\u0446\u0433", + "\u04d5\u0440\u0442", + "\u0446\u043f\u0440", + "\u043c\u0440\u0431", + "\u0441\u0431\u0442" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044b", + "\u0438\u044e\u043b\u044b", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM, y '\u0430\u0437'", + "longDate": "d MMMM, y '\u0430\u0437'", + "medium": "dd MMM y '\u0430\u0437' HH:mm:ss", + "mediumDate": "dd MMM y '\u0430\u0437'", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u0440\u0443\u0431.", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "os-ru", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_os.js b/vendor/assets/components/angular-i18n/angular-locale_os.js new file mode 100644 index 000000000..b0b430c3d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_os.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0440\u0430\u0437\u043c\u04d5", + "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0444\u04d5\u0441\u0442\u04d5" + ], + "DAY": [ + "\u0445\u0443\u044b\u0446\u0430\u0443\u0431\u043e\u043d", + "\u043a\u044a\u0443\u044b\u0440\u0438\u0441\u04d5\u0440", + "\u0434\u044b\u0446\u0446\u04d5\u0433", + "\u04d5\u0440\u0442\u044b\u0446\u0446\u04d5\u0433", + "\u0446\u044b\u043f\u043f\u04d5\u0440\u04d5\u043c", + "\u043c\u0430\u0439\u0440\u04d5\u043c\u0431\u043e\u043d", + "\u0441\u0430\u0431\u0430\u0442" + ], + "ERANAMES": [ + "\u043d.\u0434.\u0430.", + "\u043d.\u0434." + ], + "ERAS": [ + "\u043d.\u0434.\u0430.", + "\u043d.\u0434." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044b", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044b", + "\u043c\u0430\u0440\u0442\u044a\u0438\u0439\u044b", + "\u0430\u043f\u0440\u0435\u043b\u044b", + "\u043c\u0430\u0439\u044b", + "\u0438\u044e\u043d\u044b", + "\u0438\u044e\u043b\u044b", + "\u0430\u0432\u0433\u0443\u0441\u0442\u044b", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044b", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044b", + "\u043d\u043e\u044f\u0431\u0440\u044b", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044b" + ], + "SHORTDAY": [ + "\u0445\u0446\u0431", + "\u043a\u0440\u0441", + "\u0434\u0446\u0433", + "\u04d5\u0440\u0442", + "\u0446\u043f\u0440", + "\u043c\u0440\u0431", + "\u0441\u0431\u0442" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432.", + "\u043c\u0430\u0440.", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044b", + "\u0438\u044e\u043b\u044b", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM, y '\u0430\u0437'", + "longDate": "d MMMM, y '\u0430\u0437'", + "medium": "dd MMM y '\u0430\u0437' HH:mm:ss", + "mediumDate": "dd MMM y '\u0430\u0437'", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "GEL", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "os", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pa-arab-pk.js b/vendor/assets/components/angular-i18n/angular-locale_pa-arab-pk.js new file mode 100644 index 000000000..8c6d2f9af --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pa-arab-pk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u06cc\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u064f\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "ERANAMES": [ + "\u0627\u064a\u0633\u0627\u067e\u0648\u0631\u0648", + "\u0633\u06ba" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u06cc\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u064f\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "pa-arab-pk", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pa-arab.js b/vendor/assets/components/angular-i18n/angular-locale_pa-arab.js new file mode 100644 index 000000000..d3b4de4c8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pa-arab.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u06cc\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u064f\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "ERANAMES": [ + "\u0627\u064a\u0633\u0627\u067e\u0648\u0631\u0648", + "\u0633\u06ba" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u06cc\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u064f\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE, dd MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "pa-arab", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pa-guru-in.js b/vendor/assets/components/angular-i18n/angular-locale_pa-guru-in.js new file mode 100644 index 000000000..6180b714e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pa-guru-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0a2a\u0a42.\u0a26\u0a41.", + "\u0a2c\u0a3e.\u0a26\u0a41." + ], + "DAY": [ + "\u0a10\u0a24\u0a35\u0a3e\u0a30", + "\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30", + "\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30", + "\u0a2c\u0a41\u0a71\u0a27\u0a35\u0a3e\u0a30", + "\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30", + "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30", + "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30\u0a35\u0a3e\u0a30" + ], + "ERANAMES": [ + "\u0a08\u0a38\u0a35\u0a40 \u0a2a\u0a42\u0a30\u0a35", + "\u0a08\u0a38\u0a35\u0a40 \u0a38\u0a70\u0a28" + ], + "ERAS": [ + "\u0a08. \u0a2a\u0a42.", + "\u0a38\u0a70\u0a28" + ], + "MONTH": [ + "\u0a1c\u0a28\u0a35\u0a30\u0a40", + "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40", + "\u0a2e\u0a3e\u0a30\u0a1a", + "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32", + "\u0a2e\u0a08", + "\u0a1c\u0a42\u0a28", + "\u0a1c\u0a41\u0a32\u0a3e\u0a08", + "\u0a05\u0a17\u0a38\u0a24", + "\u0a38\u0a24\u0a70\u0a2c\u0a30", + "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30", + "\u0a28\u0a35\u0a70\u0a2c\u0a30", + "\u0a26\u0a38\u0a70\u0a2c\u0a30" + ], + "SHORTDAY": [ + "\u0a10\u0a24", + "\u0a38\u0a4b\u0a2e", + "\u0a2e\u0a70\u0a17\u0a32", + "\u0a2c\u0a41\u0a71\u0a27", + "\u0a35\u0a40\u0a30", + "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30", + "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30" + ], + "SHORTMONTH": [ + "\u0a1c\u0a28", + "\u0a2b\u0a3c\u0a30", + "\u0a2e\u0a3e\u0a30\u0a1a", + "\u0a05\u0a2a\u0a4d\u0a30\u0a48", + "\u0a2e\u0a08", + "\u0a1c\u0a42\u0a28", + "\u0a1c\u0a41\u0a32\u0a3e", + "\u0a05\u0a17", + "\u0a38\u0a24\u0a70", + "\u0a05\u0a15\u0a24\u0a42", + "\u0a28\u0a35\u0a70", + "\u0a26\u0a38\u0a70" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "pa-guru-in", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pa-guru.js b/vendor/assets/components/angular-i18n/angular-locale_pa-guru.js new file mode 100644 index 000000000..a11cadca9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pa-guru.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0a2a\u0a42.\u0a26\u0a41.", + "\u0a2c\u0a3e.\u0a26\u0a41." + ], + "DAY": [ + "\u0a10\u0a24\u0a35\u0a3e\u0a30", + "\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30", + "\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30", + "\u0a2c\u0a41\u0a71\u0a27\u0a35\u0a3e\u0a30", + "\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30", + "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30", + "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30\u0a35\u0a3e\u0a30" + ], + "ERANAMES": [ + "\u0a08\u0a38\u0a35\u0a40 \u0a2a\u0a42\u0a30\u0a35", + "\u0a08\u0a38\u0a35\u0a40 \u0a38\u0a70\u0a28" + ], + "ERAS": [ + "\u0a08. \u0a2a\u0a42.", + "\u0a38\u0a70\u0a28" + ], + "MONTH": [ + "\u0a1c\u0a28\u0a35\u0a30\u0a40", + "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40", + "\u0a2e\u0a3e\u0a30\u0a1a", + "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32", + "\u0a2e\u0a08", + "\u0a1c\u0a42\u0a28", + "\u0a1c\u0a41\u0a32\u0a3e\u0a08", + "\u0a05\u0a17\u0a38\u0a24", + "\u0a38\u0a24\u0a70\u0a2c\u0a30", + "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30", + "\u0a28\u0a35\u0a70\u0a2c\u0a30", + "\u0a26\u0a38\u0a70\u0a2c\u0a30" + ], + "SHORTDAY": [ + "\u0a10\u0a24", + "\u0a38\u0a4b\u0a2e", + "\u0a2e\u0a70\u0a17\u0a32", + "\u0a2c\u0a41\u0a71\u0a27", + "\u0a35\u0a40\u0a30", + "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30", + "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30" + ], + "SHORTMONTH": [ + "\u0a1c\u0a28", + "\u0a2b\u0a3c\u0a30", + "\u0a2e\u0a3e\u0a30\u0a1a", + "\u0a05\u0a2a\u0a4d\u0a30\u0a48", + "\u0a2e\u0a08", + "\u0a1c\u0a42\u0a28", + "\u0a1c\u0a41\u0a32\u0a3e", + "\u0a05\u0a17", + "\u0a38\u0a24\u0a70", + "\u0a05\u0a15\u0a24\u0a42", + "\u0a28\u0a35\u0a70", + "\u0a26\u0a38\u0a70" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "pa-guru", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pa.js b/vendor/assets/components/angular-i18n/angular-locale_pa.js new file mode 100644 index 000000000..3dec9fd42 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pa.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0a2a\u0a42.\u0a26\u0a41.", + "\u0a2c\u0a3e.\u0a26\u0a41." + ], + "DAY": [ + "\u0a10\u0a24\u0a35\u0a3e\u0a30", + "\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30", + "\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30", + "\u0a2c\u0a41\u0a71\u0a27\u0a35\u0a3e\u0a30", + "\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30", + "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30", + "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30\u0a35\u0a3e\u0a30" + ], + "ERANAMES": [ + "\u0a08\u0a38\u0a35\u0a40 \u0a2a\u0a42\u0a30\u0a35", + "\u0a08\u0a38\u0a35\u0a40 \u0a38\u0a70\u0a28" + ], + "ERAS": [ + "\u0a08. \u0a2a\u0a42.", + "\u0a38\u0a70\u0a28" + ], + "MONTH": [ + "\u0a1c\u0a28\u0a35\u0a30\u0a40", + "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40", + "\u0a2e\u0a3e\u0a30\u0a1a", + "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32", + "\u0a2e\u0a08", + "\u0a1c\u0a42\u0a28", + "\u0a1c\u0a41\u0a32\u0a3e\u0a08", + "\u0a05\u0a17\u0a38\u0a24", + "\u0a38\u0a24\u0a70\u0a2c\u0a30", + "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30", + "\u0a28\u0a35\u0a70\u0a2c\u0a30", + "\u0a26\u0a38\u0a70\u0a2c\u0a30" + ], + "SHORTDAY": [ + "\u0a10\u0a24", + "\u0a38\u0a4b\u0a2e", + "\u0a2e\u0a70\u0a17\u0a32", + "\u0a2c\u0a41\u0a71\u0a27", + "\u0a35\u0a40\u0a30", + "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30", + "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30" + ], + "SHORTMONTH": [ + "\u0a1c\u0a28", + "\u0a2b\u0a3c\u0a30", + "\u0a2e\u0a3e\u0a30\u0a1a", + "\u0a05\u0a2a\u0a4d\u0a30\u0a48", + "\u0a2e\u0a08", + "\u0a1c\u0a42\u0a28", + "\u0a1c\u0a41\u0a32\u0a3e", + "\u0a05\u0a17", + "\u0a38\u0a24\u0a70", + "\u0a05\u0a15\u0a24\u0a42", + "\u0a28\u0a35\u0a70", + "\u0a26\u0a38\u0a70" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "pa", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pl-pl.js b/vendor/assets/components/angular-i18n/angular-locale_pl-pl.js new file mode 100644 index 000000000..f1d9c2645 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pl-pl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "niedziela", + "poniedzia\u0142ek", + "wtorek", + "\u015broda", + "czwartek", + "pi\u0105tek", + "sobota" + ], + "ERANAMES": [ + "p.n.e.", + "n.e." + ], + "ERAS": [ + "p.n.e.", + "n.e." + ], + "MONTH": [ + "stycznia", + "lutego", + "marca", + "kwietnia", + "maja", + "czerwca", + "lipca", + "sierpnia", + "wrze\u015bnia", + "pa\u017adziernika", + "listopada", + "grudnia" + ], + "SHORTDAY": [ + "niedz.", + "pon.", + "wt.", + "\u015br.", + "czw.", + "pt.", + "sob." + ], + "SHORTMONTH": [ + "sty", + "lut", + "mar", + "kwi", + "maj", + "cze", + "lip", + "sie", + "wrz", + "pa\u017a", + "lis", + "gru" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y HH:mm", + "shortDate": "dd.MM.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "z\u0142", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pl-pl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i != 1 && i % 10 >= 0 && i % 10 <= 1 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 12 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pl.js b/vendor/assets/components/angular-i18n/angular-locale_pl.js new file mode 100644 index 000000000..5d69856e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "niedziela", + "poniedzia\u0142ek", + "wtorek", + "\u015broda", + "czwartek", + "pi\u0105tek", + "sobota" + ], + "ERANAMES": [ + "p.n.e.", + "n.e." + ], + "ERAS": [ + "p.n.e.", + "n.e." + ], + "MONTH": [ + "stycznia", + "lutego", + "marca", + "kwietnia", + "maja", + "czerwca", + "lipca", + "sierpnia", + "wrze\u015bnia", + "pa\u017adziernika", + "listopada", + "grudnia" + ], + "SHORTDAY": [ + "niedz.", + "pon.", + "wt.", + "\u015br.", + "czw.", + "pt.", + "sob." + ], + "SHORTMONTH": [ + "sty", + "lut", + "mar", + "kwi", + "maj", + "cze", + "lip", + "sie", + "wrz", + "pa\u017a", + "lis", + "gru" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y HH:mm", + "shortDate": "dd.MM.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "z\u0142", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i != 1 && i % 10 >= 0 && i % 10 <= 1 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 12 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ps-af.js b/vendor/assets/components/angular-i18n/angular-locale_ps-af.js new file mode 100644 index 000000000..f41e83e41 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ps-af.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u063a.\u0645.", + "\u063a.\u0648." + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "ERANAMES": [ + "\u0642.\u0645.", + "\u0645." + ], + "ERAS": [ + "\u0642.\u0645.", + "\u0645." + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u064a", + "\u0641\u0628\u0631\u0648\u0631\u064a", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06ab\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u064a", + "\u0641\u0628\u0631\u0648\u0631\u064a", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06ab\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE \u062f y \u062f MMMM d", + "longDate": "\u062f y \u062f MMMM d", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "y/M/d H:mm", + "shortDate": "y/M/d", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Af.", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ps-af", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ps.js b/vendor/assets/components/angular-i18n/angular-locale_ps.js new file mode 100644 index 000000000..8b8a9f0bf --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ps.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u063a.\u0645.", + "\u063a.\u0648." + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "ERANAMES": [ + "\u0642.\u0645.", + "\u0645." + ], + "ERAS": [ + "\u0642.\u0645.", + "\u0645." + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u064a", + "\u0641\u0628\u0631\u0648\u0631\u064a", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06ab\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u064a", + "\u0641\u0628\u0631\u0648\u0631\u064a", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06ab\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE \u062f y \u062f MMMM d", + "longDate": "\u062f y \u062f MMMM d", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "y/M/d H:mm", + "shortDate": "y/M/d", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Af.", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ps", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-ao.js b/vendor/assets/components/angular-i18n/angular-locale_pt-ao.js new file mode 100644 index 000000000..fcdb6bf7d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-ao.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Kz", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-ao", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-br.js b/vendor/assets/components/angular-i18n/angular-locale_pt-br.js new file mode 100644 index 000000000..78713f2c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-br.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "Antes de Cristo", + "Ano do Senhor" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y HH:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "pt-br", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-cv.js b/vendor/assets/components/angular-i18n/angular-locale_pt-cv.js new file mode 100644 index 000000000..99d6ea100 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-cv.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CVE", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-cv", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-gw.js b/vendor/assets/components/angular-i18n/angular-locale_pt-gw.js new file mode 100644 index 000000000..14fd130ed --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-gw.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-gw", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-mo.js b/vendor/assets/components/angular-i18n/angular-locale_pt-mo.js new file mode 100644 index 000000000..eb975f9c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-mo.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MOP", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-mo", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-mz.js b/vendor/assets/components/angular-i18n/angular-locale_pt-mz.js new file mode 100644 index 000000000..42e07ea9c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-mz.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MTn", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-mz", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-pt.js b/vendor/assets/components/angular-i18n/angular-locale_pt-pt.js new file mode 100644 index 000000000..7cec3fabe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-pt.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-pt", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-st.js b/vendor/assets/components/angular-i18n/angular-locale_pt-st.js new file mode 100644 index 000000000..df8397019 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-st.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Db", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-st", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt-tl.js b/vendor/assets/components/angular-i18n/angular-locale_pt-tl.js new file mode 100644 index 000000000..163be2da3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt-tl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "da manh\u00e3", + "da tarde" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "antes de Cristo", + "depois de Cristo" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "dd/MM/y HH:mm:ss", + "mediumDate": "dd/MM/y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "pt-tl", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_pt.js b/vendor/assets/components/angular-i18n/angular-locale_pt.js new file mode 100644 index 000000000..1d158849b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_pt.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "ERANAMES": [ + "Antes de Cristo", + "Ano do Senhor" + ], + "ERAS": [ + "a.C.", + "d.C." + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "dez" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y HH:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R$", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "pt", + "pluralCat": function(n, opt_precision) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_qu-bo.js b/vendor/assets/components/angular-i18n/angular-locale_qu-bo.js new file mode 100644 index 000000000..30539839a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_qu-bo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Lunes", + "Martes", + "Mi\u00e9rcoles", + "Jueves", + "Viernes", + "S\u00e1bado" + ], + "ERANAMES": [ + "BCE", + "d.C." + ], + "ERAS": [ + "BCE", + "d.C." + ], + "MONTH": [ + "Qulla puquy", + "Hatun puquy", + "Pauqar waray", + "Ayriwa", + "Aymuray", + "Inti raymi", + "Anta Sitwa", + "Qhapaq Sitwa", + "Uma raymi", + "Kantaray", + "Ayamarq\u02bca", + "Kapaq Raymi" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "Mi\u00e9", + "Jue", + "Vie", + "Sab" + ], + "SHORTMONTH": [ + "Qul", + "Hat", + "Pau", + "Ayr", + "Aym", + "Int", + "Ant", + "Qha", + "Uma", + "Kan", + "Aya", + "Kap" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "y MMMM d", + "medium": "y MMM d hh:mm:ss a", + "mediumDate": "y MMM d", + "mediumTime": "hh:mm:ss a", + "short": "dd/MM/y hh:mm a", + "shortDate": "dd/MM/y", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Bs", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "qu-bo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_qu-ec.js b/vendor/assets/components/angular-i18n/angular-locale_qu-ec.js new file mode 100644 index 000000000..889cc8028 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_qu-ec.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Lunes", + "Martes", + "Mi\u00e9rcoles", + "Jueves", + "Viernes", + "S\u00e1bado" + ], + "ERANAMES": [ + "BCE", + "d.C." + ], + "ERAS": [ + "BCE", + "d.C." + ], + "MONTH": [ + "Qulla puquy", + "Hatun puquy", + "Pauqar waray", + "Ayriwa", + "Aymuray", + "Inti raymi", + "Anta Sitwa", + "Qhapaq Sitwa", + "Uma raymi", + "Kantaray", + "Ayamarq\u02bca", + "Kapaq Raymi" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "Mi\u00e9", + "Jue", + "Vie", + "Sab" + ], + "SHORTMONTH": [ + "Qul", + "Hat", + "Pau", + "Ayr", + "Aym", + "Int", + "Ant", + "Qha", + "Uma", + "Kan", + "Aya", + "Kap" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "y MMMM d", + "medium": "y MMM d hh:mm:ss a", + "mediumDate": "y MMM d", + "mediumTime": "hh:mm:ss a", + "short": "dd/MM/y hh:mm a", + "shortDate": "dd/MM/y", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "qu-ec", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_qu-pe.js b/vendor/assets/components/angular-i18n/angular-locale_qu-pe.js new file mode 100644 index 000000000..242af56c8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_qu-pe.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Lunes", + "Martes", + "Mi\u00e9rcoles", + "Jueves", + "Viernes", + "S\u00e1bado" + ], + "ERANAMES": [ + "BCE", + "d.C." + ], + "ERAS": [ + "BCE", + "d.C." + ], + "MONTH": [ + "Qulla puquy", + "Hatun puquy", + "Pauqar waray", + "Ayriwa", + "Aymuray", + "Inti raymi", + "Anta Sitwa", + "Qhapaq Sitwa", + "Uma raymi", + "Kantaray", + "Ayamarq\u02bca", + "Kapaq Raymi" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "Mi\u00e9", + "Jue", + "Vie", + "Sab" + ], + "SHORTMONTH": [ + "Qul", + "Hat", + "Pau", + "Ayr", + "Aym", + "Int", + "Ant", + "Qha", + "Uma", + "Kan", + "Aya", + "Kap" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "y MMMM d", + "medium": "y MMM d hh:mm:ss a", + "mediumDate": "y MMM d", + "mediumTime": "hh:mm:ss a", + "short": "dd/MM/y hh:mm a", + "shortDate": "dd/MM/y", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "S/.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "qu-pe", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_qu.js b/vendor/assets/components/angular-i18n/angular-locale_qu.js new file mode 100644 index 000000000..28ae3a0f4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_qu.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Lunes", + "Martes", + "Mi\u00e9rcoles", + "Jueves", + "Viernes", + "S\u00e1bado" + ], + "ERANAMES": [ + "BCE", + "d.C." + ], + "ERAS": [ + "BCE", + "d.C." + ], + "MONTH": [ + "Qulla puquy", + "Hatun puquy", + "Pauqar waray", + "Ayriwa", + "Aymuray", + "Inti raymi", + "Anta Sitwa", + "Qhapaq Sitwa", + "Uma raymi", + "Kantaray", + "Ayamarq\u02bca", + "Kapaq Raymi" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "Mi\u00e9", + "Jue", + "Vie", + "Sab" + ], + "SHORTMONTH": [ + "Qul", + "Hat", + "Pau", + "Ayr", + "Aym", + "Int", + "Ant", + "Qha", + "Uma", + "Kan", + "Aya", + "Kap" + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "y MMMM d", + "medium": "y MMM d hh:mm:ss a", + "mediumDate": "y MMM d", + "mediumTime": "hh:mm:ss a", + "short": "dd/MM/y hh:mm a", + "shortDate": "dd/MM/y", + "shortTime": "hh:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "S/.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "qu", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rm-ch.js b/vendor/assets/components/angular-i18n/angular-locale_rm-ch.js new file mode 100644 index 000000000..555c74d5b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rm-ch.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "sm" + ], + "DAY": [ + "dumengia", + "glindesdi", + "mardi", + "mesemna", + "gievgia", + "venderdi", + "sonda" + ], + "ERANAMES": [ + "avant Cristus", + "suenter Cristus" + ], + "ERAS": [ + "av. Cr.", + "s. Cr." + ], + "MONTH": [ + "schaner", + "favrer", + "mars", + "avrigl", + "matg", + "zercladur", + "fanadur", + "avust", + "settember", + "october", + "november", + "december" + ], + "SHORTDAY": [ + "du", + "gli", + "ma", + "me", + "gie", + "ve", + "so" + ], + "SHORTMONTH": [ + "schan.", + "favr.", + "mars", + "avr.", + "matg", + "zercl.", + "fan.", + "avust", + "sett.", + "oct.", + "nov.", + "dec." + ], + "fullDate": "EEEE, 'ils' d 'da' MMMM y", + "longDate": "d 'da' MMMM y", + "medium": "dd-MM-y HH:mm:ss", + "mediumDate": "dd-MM-y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "rm-ch", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rm.js b/vendor/assets/components/angular-i18n/angular-locale_rm.js new file mode 100644 index 000000000..988aada65 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "sm" + ], + "DAY": [ + "dumengia", + "glindesdi", + "mardi", + "mesemna", + "gievgia", + "venderdi", + "sonda" + ], + "ERANAMES": [ + "avant Cristus", + "suenter Cristus" + ], + "ERAS": [ + "av. Cr.", + "s. Cr." + ], + "MONTH": [ + "schaner", + "favrer", + "mars", + "avrigl", + "matg", + "zercladur", + "fanadur", + "avust", + "settember", + "october", + "november", + "december" + ], + "SHORTDAY": [ + "du", + "gli", + "ma", + "me", + "gie", + "ve", + "so" + ], + "SHORTMONTH": [ + "schan.", + "favr.", + "mars", + "avr.", + "matg", + "zercl.", + "fan.", + "avust", + "sett.", + "oct.", + "nov.", + "dec." + ], + "fullDate": "EEEE, 'ils' d 'da' MMMM y", + "longDate": "d 'da' MMMM y", + "medium": "dd-MM-y HH:mm:ss", + "mediumDate": "dd-MM-y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-yy HH:mm", + "shortDate": "dd-MM-yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "rm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rn-bi.js b/vendor/assets/components/angular-i18n/angular-locale_rn-bi.js new file mode 100644 index 000000000..096349297 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rn-bi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Z.MU.", + "Z.MW." + ], + "DAY": [ + "Ku w\u2019indwi", + "Ku wa mbere", + "Ku wa kabiri", + "Ku wa gatatu", + "Ku wa kane", + "Ku wa gatanu", + "Ku wa gatandatu" + ], + "ERANAMES": [ + "Mbere ya Yezu", + "Nyuma ya Yezu" + ], + "ERAS": [ + "Mb.Y.", + "Ny.Y" + ], + "MONTH": [ + "Nzero", + "Ruhuhuma", + "Ntwarante", + "Ndamukiza", + "Rusama", + "Ruheshi", + "Mukakaro", + "Nyandagaro", + "Nyakanga", + "Gitugutu", + "Munyonyo", + "Kigarama" + ], + "SHORTDAY": [ + "cu.", + "mbe.", + "kab.", + "gtu.", + "kan.", + "gnu.", + "gnd." + ], + "SHORTMONTH": [ + "Mut.", + "Gas.", + "Wer.", + "Mat.", + "Gic.", + "Kam.", + "Nya.", + "Kan.", + "Nze.", + "Ukw.", + "Ugu.", + "Uku." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FBu", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "rn-bi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rn.js b/vendor/assets/components/angular-i18n/angular-locale_rn.js new file mode 100644 index 000000000..09f1901b6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Z.MU.", + "Z.MW." + ], + "DAY": [ + "Ku w\u2019indwi", + "Ku wa mbere", + "Ku wa kabiri", + "Ku wa gatatu", + "Ku wa kane", + "Ku wa gatanu", + "Ku wa gatandatu" + ], + "ERANAMES": [ + "Mbere ya Yezu", + "Nyuma ya Yezu" + ], + "ERAS": [ + "Mb.Y.", + "Ny.Y" + ], + "MONTH": [ + "Nzero", + "Ruhuhuma", + "Ntwarante", + "Ndamukiza", + "Rusama", + "Ruheshi", + "Mukakaro", + "Nyandagaro", + "Nyakanga", + "Gitugutu", + "Munyonyo", + "Kigarama" + ], + "SHORTDAY": [ + "cu.", + "mbe.", + "kab.", + "gtu.", + "kan.", + "gnu.", + "gnd." + ], + "SHORTMONTH": [ + "Mut.", + "Gas.", + "Wer.", + "Mat.", + "Gic.", + "Kam.", + "Nya.", + "Kan.", + "Nze.", + "Ukw.", + "Ugu.", + "Uku." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FBu", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "rn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ro-md.js b/vendor/assets/components/angular-i18n/angular-locale_ro-md.js new file mode 100644 index 000000000..5a9dc3d41 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ro-md.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103" + ], + "ERANAMES": [ + "\u00eenainte de Hristos", + "dup\u0103 Hristos" + ], + "ERAS": [ + "\u00ee.Hr.", + "d.Hr." + ], + "MONTH": [ + "ianuarie", + "februarie", + "martie", + "aprilie", + "mai", + "iunie", + "iulie", + "august", + "septembrie", + "octombrie", + "noiembrie", + "decembrie" + ], + "SHORTDAY": [ + "Dum", + "Lun", + "Mar", + "Mie", + "Joi", + "Vin", + "S\u00e2m" + ], + "SHORTMONTH": [ + "ian.", + "feb.", + "mar.", + "apr.", + "mai", + "iun.", + "iul.", + "aug.", + "sept.", + "oct.", + "nov.", + "dec." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y HH:mm", + "shortDate": "dd.MM.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MDL", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ro-md", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ro-ro.js b/vendor/assets/components/angular-i18n/angular-locale_ro-ro.js new file mode 100644 index 000000000..55f10bb42 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ro-ro.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103" + ], + "ERANAMES": [ + "\u00eenainte de Hristos", + "dup\u0103 Hristos" + ], + "ERAS": [ + "\u00ee.Hr.", + "d.Hr." + ], + "MONTH": [ + "ianuarie", + "februarie", + "martie", + "aprilie", + "mai", + "iunie", + "iulie", + "august", + "septembrie", + "octombrie", + "noiembrie", + "decembrie" + ], + "SHORTDAY": [ + "Dum", + "Lun", + "Mar", + "Mie", + "Joi", + "Vin", + "S\u00e2m" + ], + "SHORTMONTH": [ + "ian.", + "feb.", + "mar.", + "apr.", + "mai", + "iun.", + "iul.", + "aug.", + "sept.", + "oct.", + "nov.", + "dec." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y HH:mm", + "shortDate": "dd.MM.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RON", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ro-ro", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ro.js b/vendor/assets/components/angular-i18n/angular-locale_ro.js new file mode 100644 index 000000000..2e17320fa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ro.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103" + ], + "ERANAMES": [ + "\u00eenainte de Hristos", + "dup\u0103 Hristos" + ], + "ERAS": [ + "\u00ee.Hr.", + "d.Hr." + ], + "MONTH": [ + "ianuarie", + "februarie", + "martie", + "aprilie", + "mai", + "iunie", + "iulie", + "august", + "septembrie", + "octombrie", + "noiembrie", + "decembrie" + ], + "SHORTDAY": [ + "Dum", + "Lun", + "Mar", + "Mie", + "Joi", + "Vin", + "S\u00e2m" + ], + "SHORTMONTH": [ + "ian.", + "feb.", + "mar.", + "apr.", + "mai", + "iun.", + "iul.", + "aug.", + "sept.", + "oct.", + "nov.", + "dec." + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.y HH:mm", + "shortDate": "dd.MM.y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RON", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ro", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rof-tz.js b/vendor/assets/components/angular-i18n/angular-locale_rof-tz.js new file mode 100644 index 000000000..b914faf02 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rof-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "kang\u2019ama", + "kingoto" + ], + "DAY": [ + "Ijumapili", + "Ijumatatu", + "Ijumanne", + "Ijumatano", + "Alhamisi", + "Ijumaa", + "Ijumamosi" + ], + "ERANAMES": [ + "Kabla ya Mayesu", + "Baada ya Mayesu" + ], + "ERAS": [ + "KM", + "BM" + ], + "MONTH": [ + "Mweri wa kwanza", + "Mweri wa kaili", + "Mweri wa katatu", + "Mweri wa kaana", + "Mweri wa tanu", + "Mweri wa sita", + "Mweri wa saba", + "Mweri wa nane", + "Mweri wa tisa", + "Mweri wa ikumi", + "Mweri wa ikumi na moja", + "Mweri wa ikumi na mbili" + ], + "SHORTDAY": [ + "Ijp", + "Ijt", + "Ijn", + "Ijtn", + "Alh", + "Iju", + "Ijm" + ], + "SHORTMONTH": [ + "M1", + "M2", + "M3", + "M4", + "M5", + "M6", + "M7", + "M8", + "M9", + "M10", + "M11", + "M12" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "rof-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rof.js b/vendor/assets/components/angular-i18n/angular-locale_rof.js new file mode 100644 index 000000000..e110849c3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rof.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "kang\u2019ama", + "kingoto" + ], + "DAY": [ + "Ijumapili", + "Ijumatatu", + "Ijumanne", + "Ijumatano", + "Alhamisi", + "Ijumaa", + "Ijumamosi" + ], + "ERANAMES": [ + "Kabla ya Mayesu", + "Baada ya Mayesu" + ], + "ERAS": [ + "KM", + "BM" + ], + "MONTH": [ + "Mweri wa kwanza", + "Mweri wa kaili", + "Mweri wa katatu", + "Mweri wa kaana", + "Mweri wa tanu", + "Mweri wa sita", + "Mweri wa saba", + "Mweri wa nane", + "Mweri wa tisa", + "Mweri wa ikumi", + "Mweri wa ikumi na moja", + "Mweri wa ikumi na mbili" + ], + "SHORTDAY": [ + "Ijp", + "Ijt", + "Ijn", + "Ijtn", + "Alh", + "Iju", + "Ijm" + ], + "SHORTMONTH": [ + "M1", + "M2", + "M3", + "M4", + "M5", + "M6", + "M7", + "M8", + "M9", + "M10", + "M11", + "M12" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "rof", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ru-by.js b/vendor/assets/components/angular-i18n/angular-locale_ru-by.js new file mode 100644 index 000000000..e3ce45c30 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ru-by.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "ERAS": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d MMM y '\u0433'. H:mm:ss", + "mediumDate": "d MMM y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "BYR", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ru-by", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ru-kg.js b/vendor/assets/components/angular-i18n/angular-locale_ru-kg.js new file mode 100644 index 000000000..e84041a31 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ru-kg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "ERAS": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d MMM y '\u0433'. H:mm:ss", + "mediumDate": "d MMM y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KGS", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ru-kg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ru-kz.js b/vendor/assets/components/angular-i18n/angular-locale_ru-kz.js new file mode 100644 index 000000000..12e4de8f3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ru-kz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "ERAS": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d MMM y '\u0433'. H:mm:ss", + "mediumDate": "d MMM y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b8", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ru-kz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ru-md.js b/vendor/assets/components/angular-i18n/angular-locale_ru-md.js new file mode 100644 index 000000000..105cf2e9a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ru-md.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "ERAS": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d MMM y '\u0433'. H:mm:ss", + "mediumDate": "d MMM y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MDL", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ru-md", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ru-ru.js b/vendor/assets/components/angular-i18n/angular-locale_ru-ru.js new file mode 100644 index 000000000..b2fac2d50 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ru-ru.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "ERAS": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d MMM y '\u0433'. H:mm:ss", + "mediumDate": "d MMM y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u0440\u0443\u0431.", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ru-ru", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ru-ua.js b/vendor/assets/components/angular-i18n/angular-locale_ru-ua.js new file mode 100644 index 000000000..6b49398cd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ru-ua.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "ERAS": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b4", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ru-ua", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ru.js b/vendor/assets/components/angular-i18n/angular-locale_ru.js new file mode 100644 index 000000000..9878880be --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ru.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "ERAS": [ + "\u0434\u043e \u043d. \u044d.", + "\u043d. \u044d." + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\u0434\u0435\u043a." + ], + "fullDate": "EEEE, d MMMM y '\u0433'.", + "longDate": "d MMMM y '\u0433'.", + "medium": "d MMM y '\u0433'. H:mm:ss", + "mediumDate": "d MMM y '\u0433'.", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u0440\u0443\u0431.", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "ru", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rw-rw.js b/vendor/assets/components/angular-i18n/angular-locale_rw-rw.js new file mode 100644 index 000000000..277793e7a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rw-rw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Ku cyumweru", + "Kuwa mbere", + "Kuwa kabiri", + "Kuwa gatatu", + "Kuwa kane", + "Kuwa gatanu", + "Kuwa gatandatu" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Mutarama", + "Gashyantare", + "Werurwe", + "Mata", + "Gicuransi", + "Kamena", + "Nyakanga", + "Kanama", + "Nzeli", + "Ukwakira", + "Ugushyingo", + "Ukuboza" + ], + "SHORTDAY": [ + "cyu.", + "mbe.", + "kab.", + "gtu.", + "kan.", + "gnu.", + "gnd." + ], + "SHORTMONTH": [ + "mut.", + "gas.", + "wer.", + "mat.", + "gic.", + "kam.", + "nya.", + "kan.", + "nze.", + "ukw.", + "ugu.", + "uku." + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RF", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "rw-rw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rw.js b/vendor/assets/components/angular-i18n/angular-locale_rw.js new file mode 100644 index 000000000..515274799 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Ku cyumweru", + "Kuwa mbere", + "Kuwa kabiri", + "Kuwa gatatu", + "Kuwa kane", + "Kuwa gatanu", + "Kuwa gatandatu" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Mutarama", + "Gashyantare", + "Werurwe", + "Mata", + "Gicuransi", + "Kamena", + "Nyakanga", + "Kanama", + "Nzeli", + "Ukwakira", + "Ugushyingo", + "Ukuboza" + ], + "SHORTDAY": [ + "cyu.", + "mbe.", + "kab.", + "gtu.", + "kan.", + "gnu.", + "gnd." + ], + "SHORTMONTH": [ + "mut.", + "gas.", + "wer.", + "mat.", + "gic.", + "kam.", + "nya.", + "kan.", + "nze.", + "ukw.", + "ugu.", + "uku." + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RF", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "rw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rwk-tz.js b/vendor/assets/components/angular-i18n/angular-locale_rwk-tz.js new file mode 100644 index 000000000..b93109c1b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rwk-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "utuko", + "kyiukonyi" + ], + "DAY": [ + "Jumapilyi", + "Jumatatuu", + "Jumanne", + "Jumatanu", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristu", + "Baada ya Kristu" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprilyi", + "Mei", + "Junyi", + "Julyai", + "Agusti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "rwk-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_rwk.js b/vendor/assets/components/angular-i18n/angular-locale_rwk.js new file mode 100644 index 000000000..c2a8d2691 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_rwk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "utuko", + "kyiukonyi" + ], + "DAY": [ + "Jumapilyi", + "Jumatatuu", + "Jumanne", + "Jumatanu", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristu", + "Baada ya Kristu" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprilyi", + "Mei", + "Junyi", + "Julyai", + "Agusti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "rwk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sah-ru.js b/vendor/assets/components/angular-i18n/angular-locale_sah-ru.js new file mode 100644 index 000000000..00070fa64 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sah-ru.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u042d\u0418", + "\u042d\u041a" + ], + "DAY": [ + "\u0411\u0430\u0441\u043a\u044b\u04bb\u044b\u0430\u043d\u043d\u044c\u0430", + "\u0411\u044d\u043d\u0438\u0434\u0438\u044d\u043b\u0438\u043d\u043d\u044c\u0438\u043a", + "\u041e\u043f\u0442\u0443\u043e\u0440\u0443\u043d\u043d\u044c\u0443\u043a", + "\u0421\u044d\u0440\u044d\u0434\u044d", + "\u0427\u044d\u043f\u043f\u0438\u044d\u0440", + "\u0411\u044d\u044d\u0442\u0438\u04a5\u0441\u044d", + "\u0421\u0443\u0431\u0443\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0431. \u044d. \u0438.", + "\u0431. \u044d" + ], + "ERAS": [ + "\u0431. \u044d. \u0438.", + "\u0431. \u044d" + ], + "MONTH": [ + "\u0422\u043e\u0445\u0441\u0443\u043d\u043d\u044c\u0443", + "\u041e\u043b\u0443\u043d\u043d\u044c\u0443", + "\u041a\u0443\u043b\u0443\u043d \u0442\u0443\u0442\u0430\u0440", + "\u041c\u0443\u0443\u0441 \u0443\u0441\u0442\u0430\u0440", + "\u042b\u0430\u043c \u044b\u0439\u044b\u043d", + "\u0411\u044d\u0441 \u044b\u0439\u044b\u043d", + "\u041e\u0442 \u044b\u0439\u044b\u043d", + "\u0410\u0442\u044b\u0440\u0434\u044c\u044b\u0445 \u044b\u0439\u044b\u043d", + "\u0411\u0430\u043b\u0430\u0495\u0430\u043d \u044b\u0439\u044b\u043d", + "\u0410\u043b\u0442\u044b\u043d\u043d\u044c\u044b", + "\u0421\u044d\u0442\u0438\u043d\u043d\u044c\u0438", + "\u0410\u0445\u0441\u044b\u043d\u043d\u044c\u044b" + ], + "SHORTDAY": [ + "\u0411\u0441", + "\u0411\u043d", + "\u041e\u043f", + "\u0421\u044d", + "\u0427\u043f", + "\u0411\u044d", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0422\u043e\u0445\u0441", + "\u041e\u043b\u0443\u043d", + "\u041a\u043b\u043d_\u0442\u0442\u0440", + "\u041c\u0443\u0441_\u0443\u0441\u0442", + "\u042b\u0430\u043c_\u0439\u043d", + "\u0411\u044d\u0441_\u0439\u043d", + "\u041e\u0442_\u0439\u043d", + "\u0410\u0442\u0440\u0434\u044c_\u0439\u043d", + "\u0411\u043b\u0495\u043d_\u0439\u043d", + "\u0410\u043b\u0442", + "\u0421\u044d\u0442", + "\u0410\u0445\u0441" + ], + "fullDate": "y '\u0441\u044b\u043b' MMMM d '\u043a\u04af\u043d\u044d', EEEE", + "longDate": "y, MMMM d", + "medium": "y, MMM d HH:mm:ss", + "mediumDate": "y, MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/M/d HH:mm", + "shortDate": "yy/M/d", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u0440\u0443\u0431.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "sah-ru", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sah.js b/vendor/assets/components/angular-i18n/angular-locale_sah.js new file mode 100644 index 000000000..b83e0f19a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sah.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u042d\u0418", + "\u042d\u041a" + ], + "DAY": [ + "\u0411\u0430\u0441\u043a\u044b\u04bb\u044b\u0430\u043d\u043d\u044c\u0430", + "\u0411\u044d\u043d\u0438\u0434\u0438\u044d\u043b\u0438\u043d\u043d\u044c\u0438\u043a", + "\u041e\u043f\u0442\u0443\u043e\u0440\u0443\u043d\u043d\u044c\u0443\u043a", + "\u0421\u044d\u0440\u044d\u0434\u044d", + "\u0427\u044d\u043f\u043f\u0438\u044d\u0440", + "\u0411\u044d\u044d\u0442\u0438\u04a5\u0441\u044d", + "\u0421\u0443\u0431\u0443\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0431. \u044d. \u0438.", + "\u0431. \u044d" + ], + "ERAS": [ + "\u0431. \u044d. \u0438.", + "\u0431. \u044d" + ], + "MONTH": [ + "\u0422\u043e\u0445\u0441\u0443\u043d\u043d\u044c\u0443", + "\u041e\u043b\u0443\u043d\u043d\u044c\u0443", + "\u041a\u0443\u043b\u0443\u043d \u0442\u0443\u0442\u0430\u0440", + "\u041c\u0443\u0443\u0441 \u0443\u0441\u0442\u0430\u0440", + "\u042b\u0430\u043c \u044b\u0439\u044b\u043d", + "\u0411\u044d\u0441 \u044b\u0439\u044b\u043d", + "\u041e\u0442 \u044b\u0439\u044b\u043d", + "\u0410\u0442\u044b\u0440\u0434\u044c\u044b\u0445 \u044b\u0439\u044b\u043d", + "\u0411\u0430\u043b\u0430\u0495\u0430\u043d \u044b\u0439\u044b\u043d", + "\u0410\u043b\u0442\u044b\u043d\u043d\u044c\u044b", + "\u0421\u044d\u0442\u0438\u043d\u043d\u044c\u0438", + "\u0410\u0445\u0441\u044b\u043d\u043d\u044c\u044b" + ], + "SHORTDAY": [ + "\u0411\u0441", + "\u0411\u043d", + "\u041e\u043f", + "\u0421\u044d", + "\u0427\u043f", + "\u0411\u044d", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0422\u043e\u0445\u0441", + "\u041e\u043b\u0443\u043d", + "\u041a\u043b\u043d_\u0442\u0442\u0440", + "\u041c\u0443\u0441_\u0443\u0441\u0442", + "\u042b\u0430\u043c_\u0439\u043d", + "\u0411\u044d\u0441_\u0439\u043d", + "\u041e\u0442_\u0439\u043d", + "\u0410\u0442\u0440\u0434\u044c_\u0439\u043d", + "\u0411\u043b\u0495\u043d_\u0439\u043d", + "\u0410\u043b\u0442", + "\u0421\u044d\u0442", + "\u0410\u0445\u0441" + ], + "fullDate": "y '\u0441\u044b\u043b' MMMM d '\u043a\u04af\u043d\u044d', EEEE", + "longDate": "y, MMMM d", + "medium": "y, MMM d HH:mm:ss", + "mediumDate": "y, MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/M/d HH:mm", + "shortDate": "yy/M/d", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u0440\u0443\u0431.", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "sah", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_saq-ke.js b/vendor/assets/components/angular-i18n/angular-locale_saq-ke.js new file mode 100644 index 000000000..8f04bc4be --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_saq-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Tesiran", + "Teipa" + ], + "DAY": [ + "Mderot ee are", + "Mderot ee kuni", + "Mderot ee ong\u2019wan", + "Mderot ee inet", + "Mderot ee ile", + "Mderot ee sapa", + "Mderot ee kwe" + ], + "ERANAMES": [ + "Kabla ya Christo", + "Baada ya Christo" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Lapa le obo", + "Lapa le waare", + "Lapa le okuni", + "Lapa le ong\u2019wan", + "Lapa le imet", + "Lapa le ile", + "Lapa le sapa", + "Lapa le isiet", + "Lapa le saal", + "Lapa le tomon", + "Lapa le tomon obo", + "Lapa le tomon waare" + ], + "SHORTDAY": [ + "Are", + "Kun", + "Ong", + "Ine", + "Ile", + "Sap", + "Kwe" + ], + "SHORTMONTH": [ + "Obo", + "Waa", + "Oku", + "Ong", + "Ime", + "Ile", + "Sap", + "Isi", + "Saa", + "Tom", + "Tob", + "Tow" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "saq-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_saq.js b/vendor/assets/components/angular-i18n/angular-locale_saq.js new file mode 100644 index 000000000..5260126c2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_saq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Tesiran", + "Teipa" + ], + "DAY": [ + "Mderot ee are", + "Mderot ee kuni", + "Mderot ee ong\u2019wan", + "Mderot ee inet", + "Mderot ee ile", + "Mderot ee sapa", + "Mderot ee kwe" + ], + "ERANAMES": [ + "Kabla ya Christo", + "Baada ya Christo" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Lapa le obo", + "Lapa le waare", + "Lapa le okuni", + "Lapa le ong\u2019wan", + "Lapa le imet", + "Lapa le ile", + "Lapa le sapa", + "Lapa le isiet", + "Lapa le saal", + "Lapa le tomon", + "Lapa le tomon obo", + "Lapa le tomon waare" + ], + "SHORTDAY": [ + "Are", + "Kun", + "Ong", + "Ine", + "Ile", + "Sap", + "Kwe" + ], + "SHORTMONTH": [ + "Obo", + "Waa", + "Oku", + "Ong", + "Ime", + "Ile", + "Sap", + "Isi", + "Saa", + "Tom", + "Tob", + "Tow" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "saq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sbp-tz.js b/vendor/assets/components/angular-i18n/angular-locale_sbp-tz.js new file mode 100644 index 000000000..6ea64f4e4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sbp-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Lwamilawu", + "Pashamihe" + ], + "DAY": [ + "Mulungu", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alahamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Ashanali uKilisito", + "Pamwandi ya Kilisto" + ], + "ERAS": [ + "AK", + "PK" + ], + "MONTH": [ + "Mupalangulwa", + "Mwitope", + "Mushende", + "Munyi", + "Mushende Magali", + "Mujimbi", + "Mushipepo", + "Mupuguto", + "Munyense", + "Mokhu", + "Musongandembwe", + "Muhaano" + ], + "SHORTDAY": [ + "Mul", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Mup", + "Mwi", + "Msh", + "Mun", + "Mag", + "Muj", + "Msp", + "Mpg", + "Mye", + "Mok", + "Mus", + "Muh" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "sbp-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sbp.js b/vendor/assets/components/angular-i18n/angular-locale_sbp.js new file mode 100644 index 000000000..412fd9d60 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sbp.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Lwamilawu", + "Pashamihe" + ], + "DAY": [ + "Mulungu", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alahamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Ashanali uKilisito", + "Pamwandi ya Kilisto" + ], + "ERAS": [ + "AK", + "PK" + ], + "MONTH": [ + "Mupalangulwa", + "Mwitope", + "Mushende", + "Munyi", + "Mushende Magali", + "Mujimbi", + "Mushipepo", + "Mupuguto", + "Munyense", + "Mokhu", + "Musongandembwe", + "Muhaano" + ], + "SHORTDAY": [ + "Mul", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Mup", + "Mwi", + "Msh", + "Mun", + "Mag", + "Muj", + "Msp", + "Mpg", + "Mye", + "Mok", + "Mus", + "Muh" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "sbp", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_se-fi.js b/vendor/assets/components/angular-i18n/angular-locale_se-fi.js new file mode 100644 index 000000000..bec221c9e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_se-fi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "i\u0111itbeaivet", + "eahketbeaivet" + ], + "DAY": [ + "aejlege", + "m\u00e5anta", + "d\u00e4jsta", + "gaskevahkoe", + "d\u00e5arsta", + "bearjadahke", + "laavadahke" + ], + "ERANAMES": [ + "ovdal Kristtusa", + "ma\u014b\u014bel Kristtusa" + ], + "ERAS": [ + "o.Kr.", + "m.Kr." + ], + "MONTH": [ + "o\u0111\u0111ajagem\u00e1nnu", + "guovvam\u00e1nnu", + "njuk\u010dam\u00e1nnu", + "cuo\u014bom\u00e1nnu", + "miessem\u00e1nnu", + "geassem\u00e1nnu", + "suoidnem\u00e1nnu", + "borgem\u00e1nnu", + "\u010dak\u010dam\u00e1nnu", + "golggotm\u00e1nnu", + "sk\u00e1bmam\u00e1nnu", + "juovlam\u00e1nnu" + ], + "SHORTDAY": [ + "sotn", + "vuos", + "ma\u014b", + "gask", + "duor", + "bear", + "l\u00e1v" + ], + "SHORTMONTH": [ + "o\u0111\u0111ajage", + "guovva", + "njuk\u010da", + "cuo\u014bo", + "miesse", + "geasse", + "suoidne", + "borge", + "\u010dak\u010da", + "golggot", + "sk\u00e1bma", + "juovla" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "se-fi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_se-no.js b/vendor/assets/components/angular-i18n/angular-locale_se-no.js new file mode 100644 index 000000000..e5d645b21 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_se-no.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "i\u0111itbeaivet", + "eahketbeaivet" + ], + "DAY": [ + "sotnabeaivi", + "vuoss\u00e1rga", + "ma\u014b\u014beb\u00e1rga", + "gaskavahkku", + "duorasdat", + "bearjadat", + "l\u00e1vvardat" + ], + "ERANAMES": [ + "ovdal Kristtusa", + "ma\u014b\u014bel Kristtusa" + ], + "ERAS": [ + "o.Kr.", + "m.Kr." + ], + "MONTH": [ + "o\u0111\u0111ajagem\u00e1nnu", + "guovvam\u00e1nnu", + "njuk\u010dam\u00e1nnu", + "cuo\u014bom\u00e1nnu", + "miessem\u00e1nnu", + "geassem\u00e1nnu", + "suoidnem\u00e1nnu", + "borgem\u00e1nnu", + "\u010dak\u010dam\u00e1nnu", + "golggotm\u00e1nnu", + "sk\u00e1bmam\u00e1nnu", + "juovlam\u00e1nnu" + ], + "SHORTDAY": [ + "sotn", + "vuos", + "ma\u014b", + "gask", + "duor", + "bear", + "l\u00e1v" + ], + "SHORTMONTH": [ + "o\u0111\u0111j", + "guov", + "njuk", + "cuo", + "mies", + "geas", + "suoi", + "borg", + "\u010dak\u010d", + "golg", + "sk\u00e1b", + "juov" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "se-no", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_se-se.js b/vendor/assets/components/angular-i18n/angular-locale_se-se.js new file mode 100644 index 000000000..b08514193 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_se-se.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "i\u0111itbeaivet", + "eahketbeaivet" + ], + "DAY": [ + "sotnabeaivi", + "vuoss\u00e1rga", + "ma\u014b\u014beb\u00e1rga", + "gaskavahkku", + "duorasdat", + "bearjadat", + "l\u00e1vvardat" + ], + "ERANAMES": [ + "ovdal Kristtusa", + "ma\u014b\u014bel Kristtusa" + ], + "ERAS": [ + "o.Kr.", + "m.Kr." + ], + "MONTH": [ + "o\u0111\u0111ajagem\u00e1nnu", + "guovvam\u00e1nnu", + "njuk\u010dam\u00e1nnu", + "cuo\u014bom\u00e1nnu", + "miessem\u00e1nnu", + "geassem\u00e1nnu", + "suoidnem\u00e1nnu", + "borgem\u00e1nnu", + "\u010dak\u010dam\u00e1nnu", + "golggotm\u00e1nnu", + "sk\u00e1bmam\u00e1nnu", + "juovlam\u00e1nnu" + ], + "SHORTDAY": [ + "sotn", + "vuos", + "ma\u014b", + "gask", + "duor", + "bear", + "l\u00e1v" + ], + "SHORTMONTH": [ + "o\u0111\u0111j", + "guov", + "njuk", + "cuo", + "mies", + "geas", + "suoi", + "borg", + "\u010dak\u010d", + "golg", + "sk\u00e1b", + "juov" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "se-se", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_se.js b/vendor/assets/components/angular-i18n/angular-locale_se.js new file mode 100644 index 000000000..1e0676bdd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_se.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "i\u0111itbeaivet", + "eahketbeaivet" + ], + "DAY": [ + "sotnabeaivi", + "vuoss\u00e1rga", + "ma\u014b\u014beb\u00e1rga", + "gaskavahkku", + "duorasdat", + "bearjadat", + "l\u00e1vvardat" + ], + "ERANAMES": [ + "ovdal Kristtusa", + "ma\u014b\u014bel Kristtusa" + ], + "ERAS": [ + "o.Kr.", + "m.Kr." + ], + "MONTH": [ + "o\u0111\u0111ajagem\u00e1nnu", + "guovvam\u00e1nnu", + "njuk\u010dam\u00e1nnu", + "cuo\u014bom\u00e1nnu", + "miessem\u00e1nnu", + "geassem\u00e1nnu", + "suoidnem\u00e1nnu", + "borgem\u00e1nnu", + "\u010dak\u010dam\u00e1nnu", + "golggotm\u00e1nnu", + "sk\u00e1bmam\u00e1nnu", + "juovlam\u00e1nnu" + ], + "SHORTDAY": [ + "sotn", + "vuos", + "ma\u014b", + "gask", + "duor", + "bear", + "l\u00e1v" + ], + "SHORTMONTH": [ + "o\u0111\u0111j", + "guov", + "njuk", + "cuo", + "mies", + "geas", + "suoi", + "borg", + "\u010dak\u010d", + "golg", + "sk\u00e1b", + "juov" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "se", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_seh-mz.js b/vendor/assets/components/angular-i18n/angular-locale_seh-mz.js new file mode 100644 index 000000000..998f73483 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_seh-mz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Dimingu", + "Chiposi", + "Chipiri", + "Chitatu", + "Chinai", + "Chishanu", + "Sabudu" + ], + "ERANAMES": [ + "Antes de Cristo", + "Anno Domini" + ], + "ERAS": [ + "AC", + "AD" + ], + "MONTH": [ + "Janeiro", + "Fevreiro", + "Marco", + "Abril", + "Maio", + "Junho", + "Julho", + "Augusto", + "Setembro", + "Otubro", + "Novembro", + "Decembro" + ], + "SHORTDAY": [ + "Dim", + "Pos", + "Pir", + "Tat", + "Nai", + "Sha", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Fev", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Aug", + "Set", + "Otu", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y HH:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MTn", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "seh-mz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_seh.js b/vendor/assets/components/angular-i18n/angular-locale_seh.js new file mode 100644 index 000000000..29275e70e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_seh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Dimingu", + "Chiposi", + "Chipiri", + "Chitatu", + "Chinai", + "Chishanu", + "Sabudu" + ], + "ERANAMES": [ + "Antes de Cristo", + "Anno Domini" + ], + "ERAS": [ + "AC", + "AD" + ], + "MONTH": [ + "Janeiro", + "Fevreiro", + "Marco", + "Abril", + "Maio", + "Junho", + "Julho", + "Augusto", + "Setembro", + "Otubro", + "Novembro", + "Decembro" + ], + "SHORTDAY": [ + "Dim", + "Pos", + "Pir", + "Tat", + "Nai", + "Sha", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Fev", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Aug", + "Set", + "Otu", + "Nov", + "Dec" + ], + "fullDate": "EEEE, d 'de' MMMM 'de' y", + "longDate": "d 'de' MMMM 'de' y", + "medium": "d 'de' MMM 'de' y HH:mm:ss", + "mediumDate": "d 'de' MMM 'de' y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MTn", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "seh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ses-ml.js b/vendor/assets/components/angular-i18n/angular-locale_ses-ml.js new file mode 100644 index 000000000..6be43d664 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ses-ml.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Adduha", + "Aluula" + ], + "DAY": [ + "Alhadi", + "Atinni", + "Atalaata", + "Alarba", + "Alhamiisa", + "Alzuma", + "Asibti" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa zamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alz", + "Asi" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "ses-ml", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ses.js b/vendor/assets/components/angular-i18n/angular-locale_ses.js new file mode 100644 index 000000000..69e5915c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ses.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Adduha", + "Aluula" + ], + "DAY": [ + "Alhadi", + "Atinni", + "Atalaata", + "Alarba", + "Alhamiisa", + "Alzuma", + "Asibti" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa zamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alz", + "Asi" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "ses", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sg-cf.js b/vendor/assets/components/angular-i18n/angular-locale_sg-cf.js new file mode 100644 index 000000000..2889f05df --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sg-cf.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ND", + "LK" + ], + "DAY": [ + "Bikua-\u00f4ko", + "B\u00efkua-\u00fbse", + "B\u00efkua-pt\u00e2", + "B\u00efkua-us\u00ef\u00f6", + "B\u00efkua-ok\u00fc", + "L\u00e2p\u00f4s\u00f6", + "L\u00e2yenga" + ], + "ERANAMES": [ + "K\u00f4zo na Kr\u00eestu", + "Na pek\u00f4 t\u00ee Kr\u00eestu" + ], + "ERAS": [ + "KnK", + "NpK" + ], + "MONTH": [ + "Nyenye", + "Fulund\u00efgi", + "Mb\u00e4ng\u00fc", + "Ngub\u00f9e", + "B\u00eal\u00e4w\u00fc", + "F\u00f6ndo", + "Lengua", + "K\u00fck\u00fcr\u00fc", + "Mvuka", + "Ngberere", + "Nab\u00e4nd\u00fcru", + "Kakauka" + ], + "SHORTDAY": [ + "Bk1", + "Bk2", + "Bk3", + "Bk4", + "Bk5", + "L\u00e2p", + "L\u00e2y" + ], + "SHORTMONTH": [ + "Nye", + "Ful", + "Mb\u00e4", + "Ngu", + "B\u00eal", + "F\u00f6n", + "Len", + "K\u00fck", + "Mvu", + "Ngb", + "Nab", + "Kak" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sg-cf", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sg.js b/vendor/assets/components/angular-i18n/angular-locale_sg.js new file mode 100644 index 000000000..7b8abd13a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sg.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ND", + "LK" + ], + "DAY": [ + "Bikua-\u00f4ko", + "B\u00efkua-\u00fbse", + "B\u00efkua-pt\u00e2", + "B\u00efkua-us\u00ef\u00f6", + "B\u00efkua-ok\u00fc", + "L\u00e2p\u00f4s\u00f6", + "L\u00e2yenga" + ], + "ERANAMES": [ + "K\u00f4zo na Kr\u00eestu", + "Na pek\u00f4 t\u00ee Kr\u00eestu" + ], + "ERAS": [ + "KnK", + "NpK" + ], + "MONTH": [ + "Nyenye", + "Fulund\u00efgi", + "Mb\u00e4ng\u00fc", + "Ngub\u00f9e", + "B\u00eal\u00e4w\u00fc", + "F\u00f6ndo", + "Lengua", + "K\u00fck\u00fcr\u00fc", + "Mvuka", + "Ngberere", + "Nab\u00e4nd\u00fcru", + "Kakauka" + ], + "SHORTDAY": [ + "Bk1", + "Bk2", + "Bk3", + "Bk4", + "Bk5", + "L\u00e2p", + "L\u00e2y" + ], + "SHORTMONTH": [ + "Nye", + "Ful", + "Mb\u00e4", + "Ngu", + "B\u00eal", + "F\u00f6n", + "Len", + "K\u00fck", + "Mvu", + "Ngb", + "Nab", + "Kak" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_shi-latn-ma.js b/vendor/assets/components/angular-i18n/angular-locale_shi-latn-ma.js new file mode 100644 index 000000000..1422ceae4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_shi-latn-ma.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "tifawt", + "tadgg\u02b7at" + ], + "DAY": [ + "asamas", + "aynas", + "asinas", + "ak\u1e5bas", + "akwas", + "asimwas", + "asi\u1e0dyas" + ], + "ERANAMES": [ + "dat n \u025bisa", + "dffir n \u025bisa" + ], + "ERAS": [ + "da\u025b", + "df\u025b" + ], + "MONTH": [ + "innayr", + "b\u1e5bay\u1e5b", + "ma\u1e5b\u1e63", + "ibrir", + "mayyu", + "yunyu", + "yulyuz", + "\u0263uct", + "cutanbir", + "ktubr", + "nuwanbir", + "dujanbir" + ], + "SHORTDAY": [ + "asa", + "ayn", + "asi", + "ak\u1e5b", + "akw", + "asim", + "asi\u1e0d" + ], + "SHORTMONTH": [ + "inn", + "b\u1e5ba", + "ma\u1e5b", + "ibr", + "may", + "yun", + "yul", + "\u0263uc", + "cut", + "ktu", + "nuw", + "duj" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "shi-latn-ma", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_shi-latn.js b/vendor/assets/components/angular-i18n/angular-locale_shi-latn.js new file mode 100644 index 000000000..8a6a220f7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_shi-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "tifawt", + "tadgg\u02b7at" + ], + "DAY": [ + "asamas", + "aynas", + "asinas", + "ak\u1e5bas", + "akwas", + "asimwas", + "asi\u1e0dyas" + ], + "ERANAMES": [ + "dat n \u025bisa", + "dffir n \u025bisa" + ], + "ERAS": [ + "da\u025b", + "df\u025b" + ], + "MONTH": [ + "innayr", + "b\u1e5bay\u1e5b", + "ma\u1e5b\u1e63", + "ibrir", + "mayyu", + "yunyu", + "yulyuz", + "\u0263uct", + "cutanbir", + "ktubr", + "nuwanbir", + "dujanbir" + ], + "SHORTDAY": [ + "asa", + "ayn", + "asi", + "ak\u1e5b", + "akw", + "asim", + "asi\u1e0d" + ], + "SHORTMONTH": [ + "inn", + "b\u1e5ba", + "ma\u1e5b", + "ibr", + "may", + "yun", + "yul", + "\u0263uc", + "cut", + "ktu", + "nuw", + "duj" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "shi-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_shi-tfng-ma.js b/vendor/assets/components/angular-i18n/angular-locale_shi-tfng-ma.js new file mode 100644 index 000000000..e21ff1631 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_shi-tfng-ma.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c", + "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c" + ], + "DAY": [ + "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59", + "\u2d30\u2d62\u2d4f\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59", + "\u2d30\u2d3d\u2d55\u2d30\u2d59", + "\u2d30\u2d3d\u2d61\u2d30\u2d59", + "\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59" + ], + "ERANAMES": [ + "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30", + "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30" + ], + "ERAS": [ + "\u2d37\u2d30\u2d44", + "\u2d37\u2d3c\u2d44" + ], + "MONTH": [ + "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54", + "\u2d31\u2d55\u2d30\u2d62\u2d55", + "\u2d4e\u2d30\u2d55\u2d5a", + "\u2d49\u2d31\u2d54\u2d49\u2d54", + "\u2d4e\u2d30\u2d62\u2d62\u2d53", + "\u2d62\u2d53\u2d4f\u2d62\u2d53", + "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63", + "\u2d56\u2d53\u2d5b\u2d5c", + "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d3d\u2d5c\u2d53\u2d31\u2d54", + "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54" + ], + "SHORTDAY": [ + "\u2d30\u2d59\u2d30", + "\u2d30\u2d62\u2d4f", + "\u2d30\u2d59\u2d49", + "\u2d30\u2d3d\u2d55", + "\u2d30\u2d3d\u2d61", + "\u2d30\u2d59\u2d49\u2d4e", + "\u2d30\u2d59\u2d49\u2d39" + ], + "SHORTMONTH": [ + "\u2d49\u2d4f\u2d4f", + "\u2d31\u2d55\u2d30", + "\u2d4e\u2d30\u2d55", + "\u2d49\u2d31\u2d54", + "\u2d4e\u2d30\u2d62", + "\u2d62\u2d53\u2d4f", + "\u2d62\u2d53\u2d4d", + "\u2d56\u2d53\u2d5b", + "\u2d5b\u2d53\u2d5c", + "\u2d3d\u2d5c\u2d53", + "\u2d4f\u2d53\u2d61", + "\u2d37\u2d53\u2d4a" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "shi-tfng-ma", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_shi-tfng.js b/vendor/assets/components/angular-i18n/angular-locale_shi-tfng.js new file mode 100644 index 000000000..a982b92d5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_shi-tfng.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c", + "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c" + ], + "DAY": [ + "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59", + "\u2d30\u2d62\u2d4f\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59", + "\u2d30\u2d3d\u2d55\u2d30\u2d59", + "\u2d30\u2d3d\u2d61\u2d30\u2d59", + "\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59" + ], + "ERANAMES": [ + "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30", + "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30" + ], + "ERAS": [ + "\u2d37\u2d30\u2d44", + "\u2d37\u2d3c\u2d44" + ], + "MONTH": [ + "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54", + "\u2d31\u2d55\u2d30\u2d62\u2d55", + "\u2d4e\u2d30\u2d55\u2d5a", + "\u2d49\u2d31\u2d54\u2d49\u2d54", + "\u2d4e\u2d30\u2d62\u2d62\u2d53", + "\u2d62\u2d53\u2d4f\u2d62\u2d53", + "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63", + "\u2d56\u2d53\u2d5b\u2d5c", + "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d3d\u2d5c\u2d53\u2d31\u2d54", + "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54" + ], + "SHORTDAY": [ + "\u2d30\u2d59\u2d30", + "\u2d30\u2d62\u2d4f", + "\u2d30\u2d59\u2d49", + "\u2d30\u2d3d\u2d55", + "\u2d30\u2d3d\u2d61", + "\u2d30\u2d59\u2d49\u2d4e", + "\u2d30\u2d59\u2d49\u2d39" + ], + "SHORTMONTH": [ + "\u2d49\u2d4f\u2d4f", + "\u2d31\u2d55\u2d30", + "\u2d4e\u2d30\u2d55", + "\u2d49\u2d31\u2d54", + "\u2d4e\u2d30\u2d62", + "\u2d62\u2d53\u2d4f", + "\u2d62\u2d53\u2d4d", + "\u2d56\u2d53\u2d5b", + "\u2d5b\u2d53\u2d5c", + "\u2d3d\u2d5c\u2d53", + "\u2d4f\u2d53\u2d61", + "\u2d37\u2d53\u2d4a" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "shi-tfng", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_shi.js b/vendor/assets/components/angular-i18n/angular-locale_shi.js new file mode 100644 index 000000000..077f1c831 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_shi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c", + "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c" + ], + "DAY": [ + "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59", + "\u2d30\u2d62\u2d4f\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59", + "\u2d30\u2d3d\u2d55\u2d30\u2d59", + "\u2d30\u2d3d\u2d61\u2d30\u2d59", + "\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59" + ], + "ERANAMES": [ + "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30", + "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30" + ], + "ERAS": [ + "\u2d37\u2d30\u2d44", + "\u2d37\u2d3c\u2d44" + ], + "MONTH": [ + "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54", + "\u2d31\u2d55\u2d30\u2d62\u2d55", + "\u2d4e\u2d30\u2d55\u2d5a", + "\u2d49\u2d31\u2d54\u2d49\u2d54", + "\u2d4e\u2d30\u2d62\u2d62\u2d53", + "\u2d62\u2d53\u2d4f\u2d62\u2d53", + "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63", + "\u2d56\u2d53\u2d5b\u2d5c", + "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d3d\u2d5c\u2d53\u2d31\u2d54", + "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54" + ], + "SHORTDAY": [ + "\u2d30\u2d59\u2d30", + "\u2d30\u2d62\u2d4f", + "\u2d30\u2d59\u2d49", + "\u2d30\u2d3d\u2d55", + "\u2d30\u2d3d\u2d61", + "\u2d30\u2d59\u2d49\u2d4e", + "\u2d30\u2d59\u2d49\u2d39" + ], + "SHORTMONTH": [ + "\u2d49\u2d4f\u2d4f", + "\u2d31\u2d55\u2d30", + "\u2d4e\u2d30\u2d55", + "\u2d49\u2d31\u2d54", + "\u2d4e\u2d30\u2d62", + "\u2d62\u2d53\u2d4f", + "\u2d62\u2d53\u2d4d", + "\u2d56\u2d53\u2d5b", + "\u2d5b\u2d53\u2d5c", + "\u2d3d\u2d5c\u2d53", + "\u2d4f\u2d53\u2d61", + "\u2d37\u2d53\u2d4a" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "shi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_si-lk.js b/vendor/assets/components/angular-i18n/angular-locale_si-lk.js new file mode 100644 index 000000000..8002c7009 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_si-lk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0db4\u0dd9.\u0dc0.", + "\u0db4.\u0dc0." + ], + "DAY": [ + "\u0d89\u0dbb\u0dd2\u0daf\u0dcf", + "\u0dc3\u0db3\u0dd4\u0daf\u0dcf", + "\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf", + "\u0db6\u0daf\u0dcf\u0daf\u0dcf", + "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf", + "\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf", + "\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf" + ], + "ERANAMES": [ + "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0db4\u0dd6\u0dbb\u0dca\u200d\u0dc0", + "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0dc0\u0dbb\u0dca\u200d\u0dc2" + ], + "ERAS": [ + "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0db4\u0dd6.", + "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0dc0." + ], + "MONTH": [ + "\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2", + "\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2", + "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4", + "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca", + "\u0db8\u0dd0\u0dba\u0dd2", + "\u0da2\u0dd6\u0db1\u0dd2", + "\u0da2\u0dd6\u0dbd\u0dd2", + "\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4", + "\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca", + "\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca", + "\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca", + "\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca" + ], + "SHORTDAY": [ + "\u0d89\u0dbb\u0dd2\u0daf\u0dcf", + "\u0dc3\u0db3\u0dd4\u0daf\u0dcf", + "\u0d85\u0d9f\u0dc4", + "\u0db6\u0daf\u0dcf\u0daf\u0dcf", + "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca", + "\u0dc3\u0dd2\u0d9a\u0dd4", + "\u0dc3\u0dd9\u0db1" + ], + "SHORTMONTH": [ + "\u0da2\u0db1", + "\u0db4\u0dd9\u0db6", + "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4", + "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca", + "\u0db8\u0dd0\u0dba\u0dd2", + "\u0da2\u0dd6\u0db1\u0dd2", + "\u0da2\u0dd6\u0dbd\u0dd2", + "\u0d85\u0d9c\u0ddd", + "\u0dc3\u0dd0\u0db4\u0dca", + "\u0d94\u0d9a\u0dca", + "\u0db1\u0ddc\u0dc0\u0dd0", + "\u0daf\u0dd9\u0dc3\u0dd0" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d a h.mm.ss", + "mediumDate": "y MMM d", + "mediumTime": "a h.mm.ss", + "short": "y-MM-dd a h.mm", + "shortDate": "y-MM-dd", + "shortTime": "a h.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "si-lk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if ((n == 0 || n == 1) || i == 0 && vf.f == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_si.js b/vendor/assets/components/angular-i18n/angular-locale_si.js new file mode 100644 index 000000000..669d470f2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_si.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0db4\u0dd9.\u0dc0.", + "\u0db4.\u0dc0." + ], + "DAY": [ + "\u0d89\u0dbb\u0dd2\u0daf\u0dcf", + "\u0dc3\u0db3\u0dd4\u0daf\u0dcf", + "\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf", + "\u0db6\u0daf\u0dcf\u0daf\u0dcf", + "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf", + "\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf", + "\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf" + ], + "ERANAMES": [ + "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0db4\u0dd6\u0dbb\u0dca\u200d\u0dc0", + "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0dc0\u0dbb\u0dca\u200d\u0dc2" + ], + "ERAS": [ + "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0db4\u0dd6.", + "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0dc0." + ], + "MONTH": [ + "\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2", + "\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2", + "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4", + "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca", + "\u0db8\u0dd0\u0dba\u0dd2", + "\u0da2\u0dd6\u0db1\u0dd2", + "\u0da2\u0dd6\u0dbd\u0dd2", + "\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4", + "\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca", + "\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca", + "\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca", + "\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca" + ], + "SHORTDAY": [ + "\u0d89\u0dbb\u0dd2\u0daf\u0dcf", + "\u0dc3\u0db3\u0dd4\u0daf\u0dcf", + "\u0d85\u0d9f\u0dc4", + "\u0db6\u0daf\u0dcf\u0daf\u0dcf", + "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca", + "\u0dc3\u0dd2\u0d9a\u0dd4", + "\u0dc3\u0dd9\u0db1" + ], + "SHORTMONTH": [ + "\u0da2\u0db1", + "\u0db4\u0dd9\u0db6", + "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4", + "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca", + "\u0db8\u0dd0\u0dba\u0dd2", + "\u0da2\u0dd6\u0db1\u0dd2", + "\u0da2\u0dd6\u0dbd\u0dd2", + "\u0d85\u0d9c\u0ddd", + "\u0dc3\u0dd0\u0db4\u0dca", + "\u0d94\u0d9a\u0dca", + "\u0db1\u0ddc\u0dc0\u0dd0", + "\u0daf\u0dd9\u0dc3\u0dd0" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d a h.mm.ss", + "mediumDate": "y MMM d", + "mediumTime": "a h.mm.ss", + "short": "y-MM-dd a h.mm", + "shortDate": "y-MM-dd", + "shortTime": "a h.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "si", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if ((n == 0 || n == 1) || i == 0 && vf.f == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sk-sk.js b/vendor/assets/components/angular-i18n/angular-locale_sk-sk.js new file mode 100644 index 000000000..89c2b4914 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sk-sk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopoludnia", + "odpoludnia" + ], + "DAY": [ + "nede\u013ea", + "pondelok", + "utorok", + "streda", + "\u0161tvrtok", + "piatok", + "sobota" + ], + "ERANAMES": [ + "pred Kristom", + "po Kristovi" + ], + "ERAS": [ + "pred Kr.", + "po Kr." + ], + "MONTH": [ + "janu\u00e1ra", + "febru\u00e1ra", + "marca", + "apr\u00edla", + "m\u00e1ja", + "j\u00fana", + "j\u00fala", + "augusta", + "septembra", + "okt\u00f3bra", + "novembra", + "decembra" + ], + "SHORTDAY": [ + "ne", + "po", + "ut", + "st", + "\u0161t", + "pi", + "so" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "m\u00e1j", + "j\u00fan", + "j\u00fal", + "aug", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. M. y H:mm:ss", + "mediumDate": "d. M. y", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sk-sk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (i >= 2 && i <= 4 && vf.v == 0) { return PLURAL_CATEGORY.FEW; } if (vf.v != 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sk.js b/vendor/assets/components/angular-i18n/angular-locale_sk.js new file mode 100644 index 000000000..60fa24526 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopoludnia", + "odpoludnia" + ], + "DAY": [ + "nede\u013ea", + "pondelok", + "utorok", + "streda", + "\u0161tvrtok", + "piatok", + "sobota" + ], + "ERANAMES": [ + "pred Kristom", + "po Kristovi" + ], + "ERAS": [ + "pred Kr.", + "po Kr." + ], + "MONTH": [ + "janu\u00e1ra", + "febru\u00e1ra", + "marca", + "apr\u00edla", + "m\u00e1ja", + "j\u00fana", + "j\u00fala", + "augusta", + "septembra", + "okt\u00f3bra", + "novembra", + "decembra" + ], + "SHORTDAY": [ + "ne", + "po", + "ut", + "st", + "\u0161t", + "pi", + "so" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "m\u00e1j", + "j\u00fan", + "j\u00fal", + "aug", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. M. y H:mm:ss", + "mediumDate": "d. M. y", + "mediumTime": "H:mm:ss", + "short": "dd.MM.yy H:mm", + "shortDate": "dd.MM.yy", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } if (i >= 2 && i <= 4 && vf.v == 0) { return PLURAL_CATEGORY.FEW; } if (vf.v != 0) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sl-si.js b/vendor/assets/components/angular-i18n/angular-locale_sl-si.js new file mode 100644 index 000000000..5bac8caa9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sl-si.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dop.", + "pop." + ], + "DAY": [ + "nedelja", + "ponedeljek", + "torek", + "sreda", + "\u010detrtek", + "petek", + "sobota" + ], + "ERANAMES": [ + "pred na\u0161im \u0161tetjem", + "na\u0161e \u0161tetje" + ], + "ERAS": [ + "pr. n. \u0161t.", + "po Kr." + ], + "MONTH": [ + "januar", + "februar", + "marec", + "april", + "maj", + "junij", + "julij", + "avgust", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "ned.", + "pon.", + "tor.", + "sre.", + "\u010det.", + "pet.", + "sob." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "avg.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE, dd. MMMM y", + "longDate": "dd. MMMM y", + "medium": "d. MMM y HH.mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH.mm.ss", + "short": "d. MM. yy HH.mm", + "shortDate": "d. MM. yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sl-si", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 100 == 1) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 100 == 2) { return PLURAL_CATEGORY.TWO; } if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sl.js b/vendor/assets/components/angular-i18n/angular-locale_sl.js new file mode 100644 index 000000000..e8c8310a5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dop.", + "pop." + ], + "DAY": [ + "nedelja", + "ponedeljek", + "torek", + "sreda", + "\u010detrtek", + "petek", + "sobota" + ], + "ERANAMES": [ + "pred na\u0161im \u0161tetjem", + "na\u0161e \u0161tetje" + ], + "ERAS": [ + "pr. n. \u0161t.", + "po Kr." + ], + "MONTH": [ + "januar", + "februar", + "marec", + "april", + "maj", + "junij", + "julij", + "avgust", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "ned.", + "pon.", + "tor.", + "sre.", + "\u010det.", + "pet.", + "sob." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "avg.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE, dd. MMMM y", + "longDate": "dd. MMMM y", + "medium": "d. MMM y HH.mm.ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH.mm.ss", + "short": "d. MM. yy HH.mm", + "shortDate": "d. MM. yy", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 100 == 1) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 100 == 2) { return PLURAL_CATEGORY.TWO; } if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_smn-fi.js b/vendor/assets/components/angular-i18n/angular-locale_smn-fi.js new file mode 100644 index 000000000..57355304b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_smn-fi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "pasepeeivi", + "vuossaarg\u00e2", + "majebaarg\u00e2", + "koskoho", + "tuor\u00e2stuv", + "v\u00e1stuppeeivi", + "l\u00e1vurduv" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12" + ], + "SHORTDAY": [ + "pa", + "vu", + "ma", + "ko", + "tu", + "v\u00e1", + "l\u00e1" + ], + "SHORTMONTH": [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "smn-fi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_smn.js b/vendor/assets/components/angular-i18n/angular-locale_smn.js new file mode 100644 index 000000000..25b601efb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_smn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "pasepeeivi", + "vuossaarg\u00e2", + "majebaarg\u00e2", + "koskoho", + "tuor\u00e2stuv", + "v\u00e1stuppeeivi", + "l\u00e1vurduv" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12" + ], + "SHORTDAY": [ + "pa", + "vu", + "ma", + "ko", + "tu", + "v\u00e1", + "l\u00e1" + ], + "SHORTMONTH": [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "smn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sn-zw.js b/vendor/assets/components/angular-i18n/angular-locale_sn-zw.js new file mode 100644 index 000000000..303d780b1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sn-zw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Svondo", + "Muvhuro", + "Chipiri", + "Chitatu", + "China", + "Chishanu", + "Mugovera" + ], + "ERANAMES": [ + "Kristo asati auya", + "Kristo ashaya" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Ndira", + "Kukadzi", + "Kurume", + "Kubvumbi", + "Chivabvu", + "Chikumi", + "Chikunguru", + "Nyamavhuvhu", + "Gunyana", + "Gumiguru", + "Mbudzi", + "Zvita" + ], + "SHORTDAY": [ + "Svo", + "Muv", + "Chip", + "Chit", + "Chin", + "Chis", + "Mug" + ], + "SHORTMONTH": [ + "Ndi", + "Kuk", + "Kur", + "Kub", + "Chv", + "Chk", + "Chg", + "Nya", + "Gun", + "Gum", + "Mb", + "Zvi" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sn-zw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sn.js b/vendor/assets/components/angular-i18n/angular-locale_sn.js new file mode 100644 index 000000000..d5df142ba --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Svondo", + "Muvhuro", + "Chipiri", + "Chitatu", + "China", + "Chishanu", + "Mugovera" + ], + "ERANAMES": [ + "Kristo asati auya", + "Kristo ashaya" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Ndira", + "Kukadzi", + "Kurume", + "Kubvumbi", + "Chivabvu", + "Chikumi", + "Chikunguru", + "Nyamavhuvhu", + "Gunyana", + "Gumiguru", + "Mbudzi", + "Zvita" + ], + "SHORTDAY": [ + "Svo", + "Muv", + "Chip", + "Chit", + "Chin", + "Chis", + "Mug" + ], + "SHORTMONTH": [ + "Ndi", + "Kuk", + "Kur", + "Kub", + "Chv", + "Chk", + "Chg", + "Nya", + "Gun", + "Gum", + "Mb", + "Zvi" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_so-dj.js b/vendor/assets/components/angular-i18n/angular-locale_so-dj.js new file mode 100644 index 000000000..417566948 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_so-dj.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "sn.", + "gn." + ], + "DAY": [ + "Axad", + "Isniin", + "Talaado", + "Arbaco", + "Khamiis", + "Jimco", + "Sabti" + ], + "ERANAMES": [ + "Ciise ka hor (CS)", + "Ciise ka dib (CS)" + ], + "ERAS": [ + "CK", + "CD" + ], + "MONTH": [ + "Bisha Koobaad", + "Bisha Labaad", + "Bisha Saddexaad", + "Bisha Afraad", + "Bisha Shanaad", + "Bisha Lixaad", + "Bisha Todobaad", + "Bisha Sideedaad", + "Bisha Sagaalaad", + "Bisha Tobnaad", + "Bisha Kow iyo Tobnaad", + "Bisha Laba iyo Tobnaad" + ], + "SHORTDAY": [ + "Axd", + "Isn", + "Tal", + "Arb", + "Kha", + "Jim", + "Sab" + ], + "SHORTMONTH": [ + "Kob", + "Lab", + "Sad", + "Afr", + "Sha", + "Lix", + "Tod", + "Sid", + "Sag", + "Tob", + "KIT", + "LIT" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Fdj", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "so-dj", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_so-et.js b/vendor/assets/components/angular-i18n/angular-locale_so-et.js new file mode 100644 index 000000000..b8a553218 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_so-et.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "sn.", + "gn." + ], + "DAY": [ + "Axad", + "Isniin", + "Talaado", + "Arbaco", + "Khamiis", + "Jimco", + "Sabti" + ], + "ERANAMES": [ + "Ciise ka hor (CS)", + "Ciise ka dib (CS)" + ], + "ERAS": [ + "CK", + "CD" + ], + "MONTH": [ + "Bisha Koobaad", + "Bisha Labaad", + "Bisha Saddexaad", + "Bisha Afraad", + "Bisha Shanaad", + "Bisha Lixaad", + "Bisha Todobaad", + "Bisha Sideedaad", + "Bisha Sagaalaad", + "Bisha Tobnaad", + "Bisha Kow iyo Tobnaad", + "Bisha Laba iyo Tobnaad" + ], + "SHORTDAY": [ + "Axd", + "Isn", + "Tal", + "Arb", + "Kha", + "Jim", + "Sab" + ], + "SHORTMONTH": [ + "Kob", + "Lab", + "Sad", + "Afr", + "Sha", + "Lix", + "Tod", + "Sid", + "Sag", + "Tob", + "KIT", + "LIT" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "so-et", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_so-ke.js b/vendor/assets/components/angular-i18n/angular-locale_so-ke.js new file mode 100644 index 000000000..eddc125da --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_so-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "sn.", + "gn." + ], + "DAY": [ + "Axad", + "Isniin", + "Talaado", + "Arbaco", + "Khamiis", + "Jimco", + "Sabti" + ], + "ERANAMES": [ + "Ciise ka hor (CS)", + "Ciise ka dib (CS)" + ], + "ERAS": [ + "CK", + "CD" + ], + "MONTH": [ + "Bisha Koobaad", + "Bisha Labaad", + "Bisha Saddexaad", + "Bisha Afraad", + "Bisha Shanaad", + "Bisha Lixaad", + "Bisha Todobaad", + "Bisha Sideedaad", + "Bisha Sagaalaad", + "Bisha Tobnaad", + "Bisha Kow iyo Tobnaad", + "Bisha Laba iyo Tobnaad" + ], + "SHORTDAY": [ + "Axd", + "Isn", + "Tal", + "Arb", + "Kha", + "Jim", + "Sab" + ], + "SHORTMONTH": [ + "Kob", + "Lab", + "Sad", + "Afr", + "Sha", + "Lix", + "Tod", + "Sid", + "Sag", + "Tob", + "KIT", + "LIT" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "so-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_so-so.js b/vendor/assets/components/angular-i18n/angular-locale_so-so.js new file mode 100644 index 000000000..e67737822 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_so-so.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "sn.", + "gn." + ], + "DAY": [ + "Axad", + "Isniin", + "Talaado", + "Arbaco", + "Khamiis", + "Jimco", + "Sabti" + ], + "ERANAMES": [ + "Ciise ka hor (CS)", + "Ciise ka dib (CS)" + ], + "ERAS": [ + "CK", + "CD" + ], + "MONTH": [ + "Bisha Koobaad", + "Bisha Labaad", + "Bisha Saddexaad", + "Bisha Afraad", + "Bisha Shanaad", + "Bisha Lixaad", + "Bisha Todobaad", + "Bisha Sideedaad", + "Bisha Sagaalaad", + "Bisha Tobnaad", + "Bisha Kow iyo Tobnaad", + "Bisha Laba iyo Tobnaad" + ], + "SHORTDAY": [ + "Axd", + "Isn", + "Tal", + "Arb", + "Kha", + "Jim", + "Sab" + ], + "SHORTMONTH": [ + "Kob", + "Lab", + "Sad", + "Afr", + "Sha", + "Lix", + "Tod", + "Sid", + "Sag", + "Tob", + "KIT", + "LIT" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SOS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "so-so", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_so.js b/vendor/assets/components/angular-i18n/angular-locale_so.js new file mode 100644 index 000000000..3abf49f25 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_so.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "sn.", + "gn." + ], + "DAY": [ + "Axad", + "Isniin", + "Talaado", + "Arbaco", + "Khamiis", + "Jimco", + "Sabti" + ], + "ERANAMES": [ + "Ciise ka hor (CS)", + "Ciise ka dib (CS)" + ], + "ERAS": [ + "CK", + "CD" + ], + "MONTH": [ + "Bisha Koobaad", + "Bisha Labaad", + "Bisha Saddexaad", + "Bisha Afraad", + "Bisha Shanaad", + "Bisha Lixaad", + "Bisha Todobaad", + "Bisha Sideedaad", + "Bisha Sagaalaad", + "Bisha Tobnaad", + "Bisha Kow iyo Tobnaad", + "Bisha Laba iyo Tobnaad" + ], + "SHORTDAY": [ + "Axd", + "Isn", + "Tal", + "Arb", + "Kha", + "Jim", + "Sab" + ], + "SHORTMONTH": [ + "Kob", + "Lab", + "Sad", + "Afr", + "Sha", + "Lix", + "Tod", + "Sid", + "Sag", + "Tob", + "KIT", + "LIT" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SOS", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "so", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sq-al.js b/vendor/assets/components/angular-i18n/angular-locale_sq-al.js new file mode 100644 index 000000000..c568edfea --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sq-al.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "paradite", + "pasdite" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "ERANAMES": [ + "para er\u00ebs s\u00eb re", + "er\u00ebs s\u00eb re" + ], + "ERAS": [ + "p.e.r.", + "e.r." + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "Dhj" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.yy HH:mm", + "shortDate": "d.M.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Lek", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sq-al", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sq-mk.js b/vendor/assets/components/angular-i18n/angular-locale_sq-mk.js new file mode 100644 index 000000000..285e7a450 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sq-mk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "paradite", + "pasdite" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "ERANAMES": [ + "para er\u00ebs s\u00eb re", + "er\u00ebs s\u00eb re" + ], + "ERAS": [ + "p.e.r.", + "e.r." + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "Dhj" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.yy HH:mm", + "shortDate": "d.M.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sq-mk", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sq-xk.js b/vendor/assets/components/angular-i18n/angular-locale_sq-xk.js new file mode 100644 index 000000000..b40280e34 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sq-xk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "paradite", + "pasdite" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "ERANAMES": [ + "para er\u00ebs s\u00eb re", + "er\u00ebs s\u00eb re" + ], + "ERAS": [ + "p.e.r.", + "e.r." + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "Dhj" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.yy HH:mm", + "shortDate": "d.M.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sq-xk", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sq.js b/vendor/assets/components/angular-i18n/angular-locale_sq.js new file mode 100644 index 000000000..a3c5d63cd --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sq.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "paradite", + "pasdite" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "ERANAMES": [ + "para er\u00ebs s\u00eb re", + "er\u00ebs s\u00eb re" + ], + "ERAS": [ + "p.e.r.", + "e.r." + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "Dhj" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d.M.yy HH:mm", + "shortDate": "d.M.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Lek", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sq", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-ba.js b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-ba.js new file mode 100644 index 000000000..9e5fbb157 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-ba.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e \u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0438\u0458\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d\u0438", + "\u0458\u0443\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0438", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "y-MM-dd HH:mm:ss", + "mediumDate": "y-MM-dd", + "mediumTime": "HH:mm:ss", + "short": "yy-MM-dd HH:mm", + "shortDate": "yy-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KM", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-cyrl-ba", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-me.js b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-me.js new file mode 100644 index 000000000..43f8fc0b8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-me.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e \u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-cyrl-me", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-rs.js b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-rs.js new file mode 100644 index 000000000..d064a3358 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-rs.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e \u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-cyrl-rs", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-xk.js b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-xk.js new file mode 100644 index 000000000..baee4af47 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl-xk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e \u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-cyrl-xk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl.js new file mode 100644 index 000000000..9b496890e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-cyrl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e \u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-cyrl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-latn-ba.js b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-ba.js new file mode 100644 index 000000000..0af692313 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-ba.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pre podne", + "po podne" + ], + "DAY": [ + "nedelja", + "ponedeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Pre nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "juni", + "juli", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "y-MM-dd HH:mm:ss", + "mediumDate": "y-MM-dd", + "mediumTime": "HH:mm:ss", + "short": "yy-MM-dd HH:mm", + "shortDate": "yy-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "KM", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-latn-ba", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-latn-me.js b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-me.js new file mode 100644 index 000000000..29baa1efc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-me.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pre podne", + "po podne" + ], + "DAY": [ + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Pre nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sre", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-latn-me", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-latn-rs.js b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-rs.js new file mode 100644 index 000000000..24d0fedeb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-rs.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pre podne", + "po podne" + ], + "DAY": [ + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Pre nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sre", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-latn-rs", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-latn-xk.js b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-xk.js new file mode 100644 index 000000000..9e4a37356 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-latn-xk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pre podne", + "po podne" + ], + "DAY": [ + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Pre nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sre", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-latn-xk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr-latn.js b/vendor/assets/components/angular-i18n/angular-locale_sr-latn.js new file mode 100644 index 000000000..e6c63623b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pre podne", + "po podne" + ], + "DAY": [ + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "\u010detvrtak", + "petak", + "subota" + ], + "ERANAMES": [ + "Pre nove ere", + "Nove ere" + ], + "ERAS": [ + "p. n. e.", + "n. e." + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sre", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "dec" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sr.js b/vendor/assets/components/angular-i18n/angular-locale_sr.js new file mode 100644 index 000000000..965ef67c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e \u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", + "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435" + ], + "ERAS": [ + "\u043f. \u043d. \u0435.", + "\u043d. \u0435." + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\u0434\u0435\u0446" + ], + "fullDate": "EEEE, dd. MMMM y.", + "longDate": "dd. MMMM y.", + "medium": "dd.MM.y. HH.mm.ss", + "mediumDate": "dd.MM.y.", + "mediumTime": "HH.mm.ss", + "short": "d.M.yy. HH.mm", + "shortDate": "d.M.yy.", + "shortTime": "HH.mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "din", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ss-sz.js b/vendor/assets/components/angular-i18n/angular-locale_ss-sz.js new file mode 100644 index 000000000..5c273a712 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ss-sz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lisontfo", + "uMsombuluko", + "Lesibili", + "Lesitsatfu", + "Lesine", + "Lesihlanu", + "uMgcibelo" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Bhimbidvwane", + "iNdlovana", + "iNdlovu-lenkhulu", + "Mabasa", + "iNkhwekhweti", + "iNhlaba", + "Kholwane", + "iNgci", + "iNyoni", + "iMphala", + "Lweti", + "iNgongoni" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tsa", + "Ne", + "Hla", + "Mgc" + ], + "SHORTMONTH": [ + "Bhi", + "Van", + "Vol", + "Mab", + "Nkh", + "Nhl", + "Kho", + "Ngc", + "Nyo", + "Mph", + "Lwe", + "Ngo" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "SZL", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ss-sz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ss-za.js b/vendor/assets/components/angular-i18n/angular-locale_ss-za.js new file mode 100644 index 000000000..0b7686e50 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ss-za.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lisontfo", + "uMsombuluko", + "Lesibili", + "Lesitsatfu", + "Lesine", + "Lesihlanu", + "uMgcibelo" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Bhimbidvwane", + "iNdlovana", + "iNdlovu-lenkhulu", + "Mabasa", + "iNkhwekhweti", + "iNhlaba", + "Kholwane", + "iNgci", + "iNyoni", + "iMphala", + "Lweti", + "iNgongoni" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tsa", + "Ne", + "Hla", + "Mgc" + ], + "SHORTMONTH": [ + "Bhi", + "Van", + "Vol", + "Mab", + "Nkh", + "Nhl", + "Kho", + "Ngc", + "Nyo", + "Mph", + "Lwe", + "Ngo" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ss-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ss.js b/vendor/assets/components/angular-i18n/angular-locale_ss.js new file mode 100644 index 000000000..7c8fb73e5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ss.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Lisontfo", + "uMsombuluko", + "Lesibili", + "Lesitsatfu", + "Lesine", + "Lesihlanu", + "uMgcibelo" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Bhimbidvwane", + "iNdlovana", + "iNdlovu-lenkhulu", + "Mabasa", + "iNkhwekhweti", + "iNhlaba", + "Kholwane", + "iNgci", + "iNyoni", + "iMphala", + "Lweti", + "iNgongoni" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tsa", + "Ne", + "Hla", + "Mgc" + ], + "SHORTMONTH": [ + "Bhi", + "Van", + "Vol", + "Mab", + "Nkh", + "Nhl", + "Kho", + "Ngc", + "Nyo", + "Mph", + "Lwe", + "Ngo" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ss", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ssy-er.js b/vendor/assets/components/angular-i18n/angular-locale_ssy-er.js new file mode 100644 index 000000000..4192ac2e7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ssy-er.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "saaku", + "carra" + ], + "DAY": [ + "Naba Sambat", + "Sani", + "Salus", + "Rabuq", + "Camus", + "Jumqata", + "Qunxa Sambat" + ], + "ERANAMES": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "ERAS": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "MONTH": [ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Liiqen", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu" + ], + "SHORTDAY": [ + "Nab", + "San", + "Sal", + "Rab", + "Cam", + "Jum", + "Qun" + ], + "SHORTMONTH": [ + "Qun", + "Nah", + "Cig", + "Agd", + "Cax", + "Qas", + "Qad", + "Leq", + "Way", + "Dit", + "Xim", + "Kax" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ssy-er", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ssy.js b/vendor/assets/components/angular-i18n/angular-locale_ssy.js new file mode 100644 index 000000000..7820dcc6b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ssy.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "saaku", + "carra" + ], + "DAY": [ + "Naba Sambat", + "Sani", + "Salus", + "Rabuq", + "Camus", + "Jumqata", + "Qunxa Sambat" + ], + "ERANAMES": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "ERAS": [ + "Yaasuusuk Duma", + "Yaasuusuk Wadir" + ], + "MONTH": [ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Liiqen", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu" + ], + "SHORTDAY": [ + "Nab", + "San", + "Sal", + "Rab", + "Cam", + "Jum", + "Qun" + ], + "SHORTMONTH": [ + "Qun", + "Nah", + "Cig", + "Agd", + "Cax", + "Qas", + "Qad", + "Leq", + "Way", + "Dit", + "Xim", + "Kax" + ], + "fullDate": "EEEE, MMMM dd, y", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ssy", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_st-ls.js b/vendor/assets/components/angular-i18n/angular-locale_st-ls.js new file mode 100644 index 000000000..c17e6a3c9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_st-ls.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sontaha", + "Mmantaha", + "Labobedi", + "Laboraru", + "Labone", + "Labohlane", + "Moqebelo" + ], + "MONTH": [ + "Phesekgong", + "Hlakola", + "Hlakubele", + "Mmese", + "Motsheanong", + "Phupjane", + "Phupu", + "Phata", + "Leotshe", + "Mphalane", + "Pundungwane", + "Tshitwe" + ], + "SHORTDAY": [ + "Son", + "Mma", + "Bed", + "Rar", + "Ne", + "Hla", + "Moq" + ], + "SHORTMONTH": [ + "Phe", + "Kol", + "Ube", + "Mme", + "Mot", + "Jan", + "Upu", + "Pha", + "Leo", + "Mph", + "Pun", + "Tsh" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "st-ls", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_st-za.js b/vendor/assets/components/angular-i18n/angular-locale_st-za.js new file mode 100644 index 000000000..ed1ac9cd6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_st-za.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sontaha", + "Mmantaha", + "Labobedi", + "Laboraru", + "Labone", + "Labohlane", + "Moqebelo" + ], + "MONTH": [ + "Phesekgong", + "Hlakola", + "Hlakubele", + "Mmese", + "Motsheanong", + "Phupjane", + "Phupu", + "Phata", + "Leotshe", + "Mphalane", + "Pundungwane", + "Tshitwe" + ], + "SHORTDAY": [ + "Son", + "Mma", + "Bed", + "Rar", + "Ne", + "Hla", + "Moq" + ], + "SHORTMONTH": [ + "Phe", + "Kol", + "Ube", + "Mme", + "Mot", + "Jan", + "Upu", + "Pha", + "Leo", + "Mph", + "Pun", + "Tsh" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "st-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_st.js b/vendor/assets/components/angular-i18n/angular-locale_st.js new file mode 100644 index 000000000..64d95b6b6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_st.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sontaha", + "Mmantaha", + "Labobedi", + "Laboraru", + "Labone", + "Labohlane", + "Moqebelo" + ], + "MONTH": [ + "Phesekgong", + "Hlakola", + "Hlakubele", + "Mmese", + "Motsheanong", + "Phupjane", + "Phupu", + "Phata", + "Leotshe", + "Mphalane", + "Pundungwane", + "Tshitwe" + ], + "SHORTDAY": [ + "Son", + "Mma", + "Bed", + "Rar", + "Ne", + "Hla", + "Moq" + ], + "SHORTMONTH": [ + "Phe", + "Kol", + "Ube", + "Mme", + "Mot", + "Jan", + "Upu", + "Pha", + "Leo", + "Mph", + "Pun", + "Tsh" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "st", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sv-ax.js b/vendor/assets/components/angular-i18n/angular-locale_sv-ax.js new file mode 100644 index 000000000..46e8550ec --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sv-ax.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "ERANAMES": [ + "f\u00f6re Kristus", + "efter Kristus" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "maj", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sv-ax", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sv-fi.js b/vendor/assets/components/angular-i18n/angular-locale_sv-fi.js new file mode 100644 index 000000000..3cc32c9a7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sv-fi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "ERANAMES": [ + "f\u00f6re Kristus", + "efter Kristus" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "maj", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE'en' 'den' d:'e' MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd-MM-y HH:mm", + "shortDate": "dd-MM-y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sv-fi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sv-se.js b/vendor/assets/components/angular-i18n/angular-locale_sv-se.js new file mode 100644 index 000000000..a91b254f4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sv-se.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "ERANAMES": [ + "f\u00f6re Kristus", + "efter Kristus" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "maj", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sv-se", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sv.js b/vendor/assets/components/angular-i18n/angular-locale_sv.js new file mode 100644 index 000000000..1515c2896 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sv.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "ERANAMES": [ + "f\u00f6re Kristus", + "efter Kristus" + ], + "ERAS": [ + "f.Kr.", + "e.Kr." + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "maj", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "dec." + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "kr", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "sv", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sw-ke.js b/vendor/assets/components/angular-i18n/angular-locale_sw-ke.js new file mode 100644 index 000000000..d258d9b3d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sw-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristo", + "Baada ya Kristo" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sw-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sw-tz.js b/vendor/assets/components/angular-i18n/angular-locale_sw-tz.js new file mode 100644 index 000000000..e2157e4fb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sw-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristo", + "Baada ya Kristo" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sw-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sw-ug.js b/vendor/assets/components/angular-i18n/angular-locale_sw-ug.js new file mode 100644 index 000000000..c03ee11fb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sw-ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristo", + "Baada ya Kristo" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sw-ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_sw.js b/vendor/assets/components/angular-i18n/angular-locale_sw.js new file mode 100644 index 000000000..c7873fc2f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_sw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristo", + "Baada ya Kristo" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "sw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_swc-cd.js b/vendor/assets/components/angular-i18n/angular-locale_swc-cd.js new file mode 100644 index 000000000..461962d50 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_swc-cd.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ya asubuyi", + "ya muchana" + ], + "DAY": [ + "siku ya yenga", + "siku ya kwanza", + "siku ya pili", + "siku ya tatu", + "siku ya ine", + "siku ya tanu", + "siku ya sita" + ], + "ERANAMES": [ + "mbele ya Yezu Kristo", + "kisha ya Yezu Kristo" + ], + "ERAS": [ + "mbele ya Y", + "kisha ya Y" + ], + "MONTH": [ + "mwezi ya kwanja", + "mwezi ya pili", + "mwezi ya tatu", + "mwezi ya ine", + "mwezi ya tanu", + "mwezi ya sita", + "mwezi ya saba", + "mwezi ya munane", + "mwezi ya tisa", + "mwezi ya kumi", + "mwezi ya kumi na moya", + "mwezi ya kumi ya mbili" + ], + "SHORTDAY": [ + "yen", + "kwa", + "pil", + "tat", + "ine", + "tan", + "sit" + ], + "SHORTMONTH": [ + "mkw", + "mpi", + "mtu", + "min", + "mtn", + "mst", + "msb", + "mun", + "mts", + "mku", + "mkm", + "mkb" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FrCD", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "swc-cd", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_swc.js b/vendor/assets/components/angular-i18n/angular-locale_swc.js new file mode 100644 index 000000000..04ecbf367 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_swc.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ya asubuyi", + "ya muchana" + ], + "DAY": [ + "siku ya yenga", + "siku ya kwanza", + "siku ya pili", + "siku ya tatu", + "siku ya ine", + "siku ya tanu", + "siku ya sita" + ], + "ERANAMES": [ + "mbele ya Yezu Kristo", + "kisha ya Yezu Kristo" + ], + "ERAS": [ + "mbele ya Y", + "kisha ya Y" + ], + "MONTH": [ + "mwezi ya kwanja", + "mwezi ya pili", + "mwezi ya tatu", + "mwezi ya ine", + "mwezi ya tanu", + "mwezi ya sita", + "mwezi ya saba", + "mwezi ya munane", + "mwezi ya tisa", + "mwezi ya kumi", + "mwezi ya kumi na moya", + "mwezi ya kumi ya mbili" + ], + "SHORTDAY": [ + "yen", + "kwa", + "pil", + "tat", + "ine", + "tan", + "sit" + ], + "SHORTMONTH": [ + "mkw", + "mpi", + "mtu", + "min", + "mtn", + "mst", + "msb", + "mun", + "mts", + "mku", + "mkm", + "mkb" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FrCD", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "swc", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ta-in.js b/vendor/assets/components/angular-i18n/angular-locale_ta-in.js new file mode 100644 index 000000000..fd6963b3d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ta-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd", + "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "ERANAMES": [ + "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd", + "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf" + ], + "ERAS": [ + "\u0b95\u0bbf.\u0bae\u0bc1.", + "\u0b95\u0bbf.\u0baa\u0bbf." + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\u0b9f\u0bbf\u0b9a." + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ta-in", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ta-lk.js b/vendor/assets/components/angular-i18n/angular-locale_ta-lk.js new file mode 100644 index 000000000..a548284fa --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ta-lk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd", + "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "ERANAMES": [ + "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd", + "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf" + ], + "ERAS": [ + "\u0b95\u0bbf.\u0bae\u0bc1.", + "\u0b95\u0bbf.\u0baa\u0bbf." + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\u0b9f\u0bbf\u0b9a." + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ta-lk", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ta-my.js b/vendor/assets/components/angular-i18n/angular-locale_ta-my.js new file mode 100644 index 000000000..3d3ae774e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ta-my.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd", + "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "ERANAMES": [ + "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd", + "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf" + ], + "ERAS": [ + "\u0b95\u0bbf.\u0bae\u0bc1.", + "\u0b95\u0bbf.\u0baa\u0bbf." + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\u0b9f\u0bbf\u0b9a." + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "RM", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ta-my", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ta-sg.js b/vendor/assets/components/angular-i18n/angular-locale_ta-sg.js new file mode 100644 index 000000000..bf7ecac5b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ta-sg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd", + "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "ERANAMES": [ + "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd", + "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf" + ], + "ERAS": [ + "\u0b95\u0bbf.\u0bae\u0bc1.", + "\u0b95\u0bbf.\u0baa\u0bbf." + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\u0b9f\u0bbf\u0b9a." + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ta-sg", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ta.js b/vendor/assets/components/angular-i18n/angular-locale_ta.js new file mode 100644 index 000000000..c1f820aad --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ta.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd", + "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "ERANAMES": [ + "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd", + "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf" + ], + "ERAS": [ + "\u0b95\u0bbf.\u0bae\u0bc1.", + "\u0b95\u0bbf.\u0baa\u0bbf." + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\u0b9f\u0bbf\u0b9a." + ], + "fullDate": "EEEE, d MMMM, y", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "d-M-yy h:mm a", + "shortDate": "d-M-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ta", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_te-in.js b/vendor/assets/components/angular-i18n/angular-locale_te-in.js new file mode 100644 index 000000000..4abdede78 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_te-in.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "[AM]", + "[PM]" + ], + "DAY": [ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02", + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02" + ], + "ERANAMES": [ + "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c02", + "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c36\u0c15\u0c02" + ], + "ERAS": [ + "\u0c15\u0c4d\u0c30\u0c40\u0c2a\u0c42", + "\u0c15\u0c4d\u0c30\u0c40\u0c36" + ], + "MONTH": [ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c41\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], + "SHORTDAY": [ + "\u0c06\u0c26\u0c3f", + "\u0c38\u0c4b\u0c2e", + "\u0c2e\u0c02\u0c17\u0c33", + "\u0c2c\u0c41\u0c27", + "\u0c17\u0c41\u0c30\u0c41", + "\u0c36\u0c41\u0c15\u0c4d\u0c30", + "\u0c36\u0c28\u0c3f" + ], + "SHORTMONTH": [ + "\u0c1c\u0c28", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c41\u0c32\u0c48", + "\u0c06\u0c17", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b", + "\u0c28\u0c35\u0c02", + "\u0c21\u0c3f\u0c38\u0c46\u0c02" + ], + "fullDate": "d, MMMM y, EEEE", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "dd-MM-yy h:mm a", + "shortDate": "dd-MM-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "te-in", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_te.js b/vendor/assets/components/angular-i18n/angular-locale_te.js new file mode 100644 index 000000000..a34bfefe9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_te.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "[AM]", + "[PM]" + ], + "DAY": [ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02", + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02" + ], + "ERANAMES": [ + "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c02", + "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c36\u0c15\u0c02" + ], + "ERAS": [ + "\u0c15\u0c4d\u0c30\u0c40\u0c2a\u0c42", + "\u0c15\u0c4d\u0c30\u0c40\u0c36" + ], + "MONTH": [ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c41\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], + "SHORTDAY": [ + "\u0c06\u0c26\u0c3f", + "\u0c38\u0c4b\u0c2e", + "\u0c2e\u0c02\u0c17\u0c33", + "\u0c2c\u0c41\u0c27", + "\u0c17\u0c41\u0c30\u0c41", + "\u0c36\u0c41\u0c15\u0c4d\u0c30", + "\u0c36\u0c28\u0c3f" + ], + "SHORTMONTH": [ + "\u0c1c\u0c28", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c41\u0c32\u0c48", + "\u0c06\u0c17", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b", + "\u0c28\u0c35\u0c02", + "\u0c21\u0c3f\u0c38\u0c46\u0c02" + ], + "fullDate": "d, MMMM y, EEEE", + "longDate": "d MMMM, y", + "medium": "d MMM, y h:mm:ss a", + "mediumDate": "d MMM, y", + "mediumTime": "h:mm:ss a", + "short": "dd-MM-yy h:mm a", + "shortDate": "dd-MM-yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "te", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_teo-ke.js b/vendor/assets/components/angular-i18n/angular-locale_teo-ke.js new file mode 100644 index 000000000..2af9f55d4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_teo-ke.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Taparachu", + "Ebongi" + ], + "DAY": [ + "Nakaejuma", + "Nakaebarasa", + "Nakaare", + "Nakauni", + "Nakaung\u2019on", + "Nakakany", + "Nakasabiti" + ], + "ERANAMES": [ + "Kabla ya Christo", + "Baada ya Christo" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Orara", + "Omuk", + "Okwamg\u2019", + "Odung\u2019el", + "Omaruk", + "Omodok\u2019king\u2019ol", + "Ojola", + "Opedel", + "Osokosokoma", + "Otibar", + "Olabor", + "Opoo" + ], + "SHORTDAY": [ + "Jum", + "Bar", + "Aar", + "Uni", + "Ung", + "Kan", + "Sab" + ], + "SHORTMONTH": [ + "Rar", + "Muk", + "Kwa", + "Dun", + "Mar", + "Mod", + "Jol", + "Ped", + "Sok", + "Tib", + "Lab", + "Poo" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Ksh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "teo-ke", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_teo-ug.js b/vendor/assets/components/angular-i18n/angular-locale_teo-ug.js new file mode 100644 index 000000000..9d1cc297f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_teo-ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Taparachu", + "Ebongi" + ], + "DAY": [ + "Nakaejuma", + "Nakaebarasa", + "Nakaare", + "Nakauni", + "Nakaung\u2019on", + "Nakakany", + "Nakasabiti" + ], + "ERANAMES": [ + "Kabla ya Christo", + "Baada ya Christo" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Orara", + "Omuk", + "Okwamg\u2019", + "Odung\u2019el", + "Omaruk", + "Omodok\u2019king\u2019ol", + "Ojola", + "Opedel", + "Osokosokoma", + "Otibar", + "Olabor", + "Opoo" + ], + "SHORTDAY": [ + "Jum", + "Bar", + "Aar", + "Uni", + "Ung", + "Kan", + "Sab" + ], + "SHORTMONTH": [ + "Rar", + "Muk", + "Kwa", + "Dun", + "Mar", + "Mod", + "Jol", + "Ped", + "Sok", + "Tib", + "Lab", + "Poo" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "teo-ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_teo.js b/vendor/assets/components/angular-i18n/angular-locale_teo.js new file mode 100644 index 000000000..f458c91dc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_teo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Taparachu", + "Ebongi" + ], + "DAY": [ + "Nakaejuma", + "Nakaebarasa", + "Nakaare", + "Nakauni", + "Nakaung\u2019on", + "Nakakany", + "Nakasabiti" + ], + "ERANAMES": [ + "Kabla ya Christo", + "Baada ya Christo" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Orara", + "Omuk", + "Okwamg\u2019", + "Odung\u2019el", + "Omaruk", + "Omodok\u2019king\u2019ol", + "Ojola", + "Opedel", + "Osokosokoma", + "Otibar", + "Olabor", + "Opoo" + ], + "SHORTDAY": [ + "Jum", + "Bar", + "Aar", + "Uni", + "Ung", + "Kan", + "Sab" + ], + "SHORTMONTH": [ + "Rar", + "Muk", + "Kwa", + "Dun", + "Mar", + "Mod", + "Jol", + "Ped", + "Sok", + "Tib", + "Lab", + "Poo" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "teo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tg-cyrl-tj.js b/vendor/assets/components/angular-i18n/angular-locale_tg-cyrl-tj.js new file mode 100644 index 000000000..c25e8f706 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tg-cyrl-tj.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0435. \u0447\u043e.", + "\u043f\u0430. \u0447\u043e." + ], + "DAY": [ + "\u042f\u043a\u0448\u0430\u043d\u0431\u0435", + "\u0414\u0443\u0448\u0430\u043d\u0431\u0435", + "\u0421\u0435\u0448\u0430\u043d\u0431\u0435", + "\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0435", + "\u041f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435", + "\u04b6\u0443\u043c\u044a\u0430", + "\u0428\u0430\u043d\u0431\u0435" + ], + "MONTH": [ + "\u042f\u043d\u0432\u0430\u0440", + "\u0424\u0435\u0432\u0440\u0430\u043b", + "\u041c\u0430\u0440\u0442", + "\u0410\u043f\u0440\u0435\u043b", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433\u0443\u0441\u0442", + "\u0421\u0435\u043d\u0442\u044f\u0431\u0440", + "\u041e\u043a\u0442\u044f\u0431\u0440", + "\u041d\u043e\u044f\u0431\u0440", + "\u0414\u0435\u043a\u0430\u0431\u0440" + ], + "SHORTDAY": [ + "\u042f\u0448\u0431", + "\u0414\u0448\u0431", + "\u0421\u0448\u0431", + "\u0427\u0448\u0431", + "\u041f\u0448\u0431", + "\u04b6\u043c\u044a", + "\u0428\u043d\u0431" + ], + "SHORTMONTH": [ + "\u042f\u043d\u0432", + "\u0424\u0435\u0432", + "\u041c\u0430\u0440", + "\u0410\u043f\u0440", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433", + "\u0421\u0435\u043d", + "\u041e\u043a\u0442", + "\u041d\u043e\u044f", + "\u0414\u0435\u043a" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Som", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "tg-cyrl-tj", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tg-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_tg-cyrl.js new file mode 100644 index 000000000..7c0b60f62 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tg-cyrl.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0435. \u0447\u043e.", + "\u043f\u0430. \u0447\u043e." + ], + "DAY": [ + "\u042f\u043a\u0448\u0430\u043d\u0431\u0435", + "\u0414\u0443\u0448\u0430\u043d\u0431\u0435", + "\u0421\u0435\u0448\u0430\u043d\u0431\u0435", + "\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0435", + "\u041f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435", + "\u04b6\u0443\u043c\u044a\u0430", + "\u0428\u0430\u043d\u0431\u0435" + ], + "MONTH": [ + "\u042f\u043d\u0432\u0430\u0440", + "\u0424\u0435\u0432\u0440\u0430\u043b", + "\u041c\u0430\u0440\u0442", + "\u0410\u043f\u0440\u0435\u043b", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433\u0443\u0441\u0442", + "\u0421\u0435\u043d\u0442\u044f\u0431\u0440", + "\u041e\u043a\u0442\u044f\u0431\u0440", + "\u041d\u043e\u044f\u0431\u0440", + "\u0414\u0435\u043a\u0430\u0431\u0440" + ], + "SHORTDAY": [ + "\u042f\u0448\u0431", + "\u0414\u0448\u0431", + "\u0421\u0448\u0431", + "\u0427\u0448\u0431", + "\u041f\u0448\u0431", + "\u04b6\u043c\u044a", + "\u0428\u043d\u0431" + ], + "SHORTMONTH": [ + "\u042f\u043d\u0432", + "\u0424\u0435\u0432", + "\u041c\u0430\u0440", + "\u0410\u043f\u0440", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433", + "\u0421\u0435\u043d", + "\u041e\u043a\u0442", + "\u041d\u043e\u044f", + "\u0414\u0435\u043a" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "tg-cyrl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tg.js b/vendor/assets/components/angular-i18n/angular-locale_tg.js new file mode 100644 index 000000000..6a15c5c6b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tg.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0435. \u0447\u043e.", + "\u043f\u0430. \u0447\u043e." + ], + "DAY": [ + "\u042f\u043a\u0448\u0430\u043d\u0431\u0435", + "\u0414\u0443\u0448\u0430\u043d\u0431\u0435", + "\u0421\u0435\u0448\u0430\u043d\u0431\u0435", + "\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0435", + "\u041f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435", + "\u04b6\u0443\u043c\u044a\u0430", + "\u0428\u0430\u043d\u0431\u0435" + ], + "MONTH": [ + "\u042f\u043d\u0432\u0430\u0440", + "\u0424\u0435\u0432\u0440\u0430\u043b", + "\u041c\u0430\u0440\u0442", + "\u0410\u043f\u0440\u0435\u043b", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433\u0443\u0441\u0442", + "\u0421\u0435\u043d\u0442\u044f\u0431\u0440", + "\u041e\u043a\u0442\u044f\u0431\u0440", + "\u041d\u043e\u044f\u0431\u0440", + "\u0414\u0435\u043a\u0430\u0431\u0440" + ], + "SHORTDAY": [ + "\u042f\u0448\u0431", + "\u0414\u0448\u0431", + "\u0421\u0448\u0431", + "\u0427\u0448\u0431", + "\u041f\u0448\u0431", + "\u04b6\u043c\u044a", + "\u0428\u043d\u0431" + ], + "SHORTMONTH": [ + "\u042f\u043d\u0432", + "\u0424\u0435\u0432", + "\u041c\u0430\u0440", + "\u0410\u043f\u0440", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433", + "\u0421\u0435\u043d", + "\u041e\u043a\u0442", + "\u041d\u043e\u044f", + "\u0414\u0435\u043a" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Som", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "tg", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_th-th.js b/vendor/assets/components/angular-i18n/angular-locale_th-th.js new file mode 100644 index 000000000..57c08023a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_th-th.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ], + "DAY": [ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c" + ], + "ERANAMES": [ + "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a", + "\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a" + ], + "ERAS": [ + "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19 \u0e04.\u0e28.", + "\u0e04.\u0e28." + ], + "MONTH": [ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21" + ], + "SHORTDAY": [ + "\u0e2d\u0e32.", + "\u0e08.", + "\u0e2d.", + "\u0e1e.", + "\u0e1e\u0e24.", + "\u0e28.", + "\u0e2a." + ], + "SHORTMONTH": [ + "\u0e21.\u0e04.", + "\u0e01.\u0e1e.", + "\u0e21\u0e35.\u0e04.", + "\u0e40\u0e21.\u0e22.", + "\u0e1e.\u0e04.", + "\u0e21\u0e34.\u0e22.", + "\u0e01.\u0e04.", + "\u0e2a.\u0e04.", + "\u0e01.\u0e22.", + "\u0e15.\u0e04.", + "\u0e1e.\u0e22.", + "\u0e18.\u0e04." + ], + "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y", + "longDate": "d MMMM G y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u0e3f", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "th-th", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_th.js b/vendor/assets/components/angular-i18n/angular-locale_th.js new file mode 100644 index 000000000..e58008c62 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_th.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ], + "DAY": [ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c" + ], + "ERANAMES": [ + "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a", + "\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a" + ], + "ERAS": [ + "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19 \u0e04.\u0e28.", + "\u0e04.\u0e28." + ], + "MONTH": [ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21" + ], + "SHORTDAY": [ + "\u0e2d\u0e32.", + "\u0e08.", + "\u0e2d.", + "\u0e1e.", + "\u0e1e\u0e24.", + "\u0e28.", + "\u0e2a." + ], + "SHORTMONTH": [ + "\u0e21.\u0e04.", + "\u0e01.\u0e1e.", + "\u0e21\u0e35.\u0e04.", + "\u0e40\u0e21.\u0e22.", + "\u0e1e.\u0e04.", + "\u0e21\u0e34.\u0e22.", + "\u0e01.\u0e04.", + "\u0e2a.\u0e04.", + "\u0e01.\u0e22.", + "\u0e15.\u0e04.", + "\u0e1e.\u0e22.", + "\u0e18.\u0e04." + ], + "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y", + "longDate": "d MMMM G y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/yy HH:mm", + "shortDate": "d/M/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u0e3f", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "th", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ti-er.js b/vendor/assets/components/angular-i18n/angular-locale_ti-er.js new file mode 100644 index 000000000..a6b7713c0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ti-er.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1295\u1309\u1206 \u1230\u12d3\u1270", + "\u12f5\u1215\u122d \u1230\u12d3\u1275" + ], + "DAY": [ + "\u1230\u1295\u1260\u1275", + "\u1230\u1291\u12ed", + "\u1230\u1209\u1235", + "\u1228\u1261\u12d5", + "\u1213\u1219\u1235", + "\u12d3\u122d\u1262", + "\u1240\u12f3\u121d" + ], + "ERANAMES": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "ERAS": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "MONTH": [ + "\u1325\u122a", + "\u1208\u12ab\u1272\u1275", + "\u1218\u130b\u1262\u1275", + "\u121a\u12eb\u12dd\u12eb", + "\u130d\u1295\u1266\u1275", + "\u1230\u1290", + "\u1213\u121d\u1208", + "\u1290\u1213\u1230", + "\u1218\u1235\u12a8\u1228\u121d", + "\u1325\u1245\u121d\u1272", + "\u1215\u12f3\u122d", + "\u1273\u1215\u1233\u1235" + ], + "SHORTDAY": [ + "\u1230\u1295\u1260\u1275", + "\u1230\u1291\u12ed", + "\u1230\u1209\u1235", + "\u1228\u1261\u12d5", + "\u1213\u1219\u1235", + "\u12d3\u122d\u1262", + "\u1240\u12f3\u121d" + ], + "SHORTMONTH": [ + "\u1325\u122a", + "\u1208\u12ab\u1272", + "\u1218\u130b\u1262", + "\u121a\u12eb\u12dd", + "\u130d\u1295\u1266", + "\u1230\u1290", + "\u1213\u121d\u1208", + "\u1290\u1213\u1230", + "\u1218\u1235\u12a8", + "\u1325\u1245\u121d", + "\u1215\u12f3\u122d", + "\u1273\u1215\u1233" + ], + "fullDate": "EEEE\u1361 dd MMMM \u1218\u12d3\u120d\u1272 y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ti-er", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ti-et.js b/vendor/assets/components/angular-i18n/angular-locale_ti-et.js new file mode 100644 index 000000000..991163ee7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ti-et.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1295\u1309\u1206 \u1230\u12d3\u1270", + "\u12f5\u1215\u122d \u1230\u12d3\u1275" + ], + "DAY": [ + "\u1230\u1295\u1260\u1275", + "\u1230\u1291\u12ed", + "\u1220\u1209\u1235", + "\u1228\u1261\u12d5", + "\u1283\u1219\u1235", + "\u12d3\u122d\u1262", + "\u1240\u12f3\u121d" + ], + "ERANAMES": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "ERAS": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u1230\u1295\u1260\u1275", + "\u1230\u1291\u12ed", + "\u1220\u1209\u1235", + "\u1228\u1261\u12d5", + "\u1283\u1219\u1235", + "\u12d3\u122d\u1262", + "\u1240\u12f3\u121d" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE\u1363 dd MMMM \u1218\u12d3\u120d\u1272 y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ti-et", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ti.js b/vendor/assets/components/angular-i18n/angular-locale_ti.js new file mode 100644 index 000000000..310563e6c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ti.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1295\u1309\u1206 \u1230\u12d3\u1270", + "\u12f5\u1215\u122d \u1230\u12d3\u1275" + ], + "DAY": [ + "\u1230\u1295\u1260\u1275", + "\u1230\u1291\u12ed", + "\u1220\u1209\u1235", + "\u1228\u1261\u12d5", + "\u1283\u1219\u1235", + "\u12d3\u122d\u1262", + "\u1240\u12f3\u121d" + ], + "ERANAMES": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "ERAS": [ + "\u12d3/\u12d3", + "\u12d3/\u121d" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u1230\u1295\u1260\u1275", + "\u1230\u1291\u12ed", + "\u1220\u1209\u1235", + "\u1228\u1261\u12d5", + "\u1283\u1219\u1235", + "\u12d3\u122d\u1262", + "\u1240\u12f3\u121d" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE\u1363 dd MMMM \u1218\u12d3\u120d\u1272 y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ti", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tig-er.js b/vendor/assets/components/angular-i18n/angular-locale_tig-er.js new file mode 100644 index 000000000..0f137e05d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tig-er.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1240\u12f0\u121d \u1230\u122d\u121d\u12d5\u120d", + "\u1213\u1246 \u1235\u122d\u121d\u12d5\u120d" + ], + "DAY": [ + "\u1230\u1295\u1260\u1275 \u12d3\u1263\u12ed", + "\u1230\u1296", + "\u1273\u120b\u1238\u1296", + "\u12a3\u1228\u122d\u1263\u12d3", + "\u12a8\u121a\u123d", + "\u1305\u121d\u12d3\u1275", + "\u1230\u1295\u1260\u1275 \u1295\u12a2\u123d" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u1230/\u12d3", + "\u1230\u1296", + "\u1273\u120b\u1238", + "\u12a3\u1228\u122d", + "\u12a8\u121a\u123d", + "\u1305\u121d\u12d3", + "\u1230/\u1295" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE\u1361 dd MMMM \u12ee\u121d y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "tig-er", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tig.js b/vendor/assets/components/angular-i18n/angular-locale_tig.js new file mode 100644 index 000000000..493fd3961 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tig.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1240\u12f0\u121d \u1230\u122d\u121d\u12d5\u120d", + "\u1213\u1246 \u1235\u122d\u121d\u12d5\u120d" + ], + "DAY": [ + "\u1230\u1295\u1260\u1275 \u12d3\u1263\u12ed", + "\u1230\u1296", + "\u1273\u120b\u1238\u1296", + "\u12a3\u1228\u122d\u1263\u12d3", + "\u12a8\u121a\u123d", + "\u1305\u121d\u12d3\u1275", + "\u1230\u1295\u1260\u1275 \u1295\u12a2\u123d" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u1230/\u12d3", + "\u1230\u1296", + "\u1273\u120b\u1238", + "\u12a3\u1228\u122d", + "\u12a8\u121a\u123d", + "\u1305\u121d\u12d3", + "\u1230/\u1295" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE\u1361 dd MMMM \u12ee\u121d y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Nfk", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "tig", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tl.js b/vendor/assets/components/angular-i18n/angular-locale_tl.js new file mode 100644 index 000000000..151bb6116 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tl.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "ERANAMES": [ + "BC", + "AD" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Miy", + "Huw", + "Biy", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "Dis" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b1", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "tl", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tn-bw.js b/vendor/assets/components/angular-i18n/angular-locale_tn-bw.js new file mode 100644 index 000000000..eb37be266 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tn-bw.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Tshipi", + "Mosopulogo", + "Labobedi", + "Laboraro", + "Labone", + "Labotlhano", + "Matlhatso" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Ferikgong", + "Tlhakole", + "Mopitlo", + "Moranang", + "Motsheganang", + "Seetebosigo", + "Phukwi", + "Phatwe", + "Lwetse", + "Diphalane", + "Ngwanatsele", + "Sedimonthole" + ], + "SHORTDAY": [ + "Tsh", + "Mos", + "Bed", + "Rar", + "Ne", + "Tla", + "Mat" + ], + "SHORTMONTH": [ + "Fer", + "Tlh", + "Mop", + "Mor", + "Mot", + "See", + "Phu", + "Pha", + "Lwe", + "Dip", + "Ngw", + "Sed" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "P", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "tn-bw", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tn-za.js b/vendor/assets/components/angular-i18n/angular-locale_tn-za.js new file mode 100644 index 000000000..9bc362555 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tn-za.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Tshipi", + "Mosopulogo", + "Labobedi", + "Laboraro", + "Labone", + "Labotlhano", + "Matlhatso" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Ferikgong", + "Tlhakole", + "Mopitlo", + "Moranang", + "Motsheganang", + "Seetebosigo", + "Phukwi", + "Phatwe", + "Lwetse", + "Diphalane", + "Ngwanatsele", + "Sedimonthole" + ], + "SHORTDAY": [ + "Tsh", + "Mos", + "Bed", + "Rar", + "Ne", + "Tla", + "Mat" + ], + "SHORTMONTH": [ + "Fer", + "Tlh", + "Mop", + "Mor", + "Mot", + "See", + "Phu", + "Pha", + "Lwe", + "Dip", + "Ngw", + "Sed" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "tn-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tn.js b/vendor/assets/components/angular-i18n/angular-locale_tn.js new file mode 100644 index 000000000..a353e6e32 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Tshipi", + "Mosopulogo", + "Labobedi", + "Laboraro", + "Labone", + "Labotlhano", + "Matlhatso" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Ferikgong", + "Tlhakole", + "Mopitlo", + "Moranang", + "Motsheganang", + "Seetebosigo", + "Phukwi", + "Phatwe", + "Lwetse", + "Diphalane", + "Ngwanatsele", + "Sedimonthole" + ], + "SHORTDAY": [ + "Tsh", + "Mos", + "Bed", + "Rar", + "Ne", + "Tla", + "Mat" + ], + "SHORTMONTH": [ + "Fer", + "Tlh", + "Mop", + "Mor", + "Mot", + "See", + "Phu", + "Pha", + "Lwe", + "Dip", + "Ngw", + "Sed" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "tn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_to-to.js b/vendor/assets/components/angular-i18n/angular-locale_to-to.js new file mode 100644 index 000000000..0a177e3fb --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_to-to.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "S\u0101pate", + "M\u014dnite", + "T\u016bsite", + "Pulelulu", + "Tu\u02bbapulelulu", + "Falaite", + "Tokonaki" + ], + "ERANAMES": [ + "ki mu\u02bba", + "ta\u02bbu \u02bbo S\u012bs\u016b" + ], + "ERAS": [ + "KM", + "TS" + ], + "MONTH": [ + "S\u0101nuali", + "F\u0113pueli", + "Ma\u02bbasi", + "\u02bbEpeleli", + "M\u0113", + "Sune", + "Siulai", + "\u02bbAokosi", + "Sepitema", + "\u02bbOkatopa", + "N\u014dvema", + "T\u012bsema" + ], + "SHORTDAY": [ + "S\u0101p", + "M\u014dn", + "T\u016bs", + "Pul", + "Tu\u02bba", + "Fal", + "Tok" + ], + "SHORTMONTH": [ + "S\u0101n", + "F\u0113p", + "Ma\u02bba", + "\u02bbEpe", + "M\u0113", + "Sun", + "Siu", + "\u02bbAok", + "Sep", + "\u02bbOka", + "N\u014dv", + "T\u012bs" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "T$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "to-to", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_to.js b/vendor/assets/components/angular-i18n/angular-locale_to.js new file mode 100644 index 000000000..095844c72 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_to.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "S\u0101pate", + "M\u014dnite", + "T\u016bsite", + "Pulelulu", + "Tu\u02bbapulelulu", + "Falaite", + "Tokonaki" + ], + "ERANAMES": [ + "ki mu\u02bba", + "ta\u02bbu \u02bbo S\u012bs\u016b" + ], + "ERAS": [ + "KM", + "TS" + ], + "MONTH": [ + "S\u0101nuali", + "F\u0113pueli", + "Ma\u02bbasi", + "\u02bbEpeleli", + "M\u0113", + "Sune", + "Siulai", + "\u02bbAokosi", + "Sepitema", + "\u02bbOkatopa", + "N\u014dvema", + "T\u012bsema" + ], + "SHORTDAY": [ + "S\u0101p", + "M\u014dn", + "T\u016bs", + "Pul", + "Tu\u02bba", + "Fal", + "Tok" + ], + "SHORTMONTH": [ + "S\u0101n", + "F\u0113p", + "Ma\u02bba", + "\u02bbEpe", + "M\u0113", + "Sun", + "Siu", + "\u02bbAok", + "Sep", + "\u02bbOka", + "N\u014dv", + "T\u012bs" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "T$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "to", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tr-cy.js b/vendor/assets/components/angular-i18n/angular-locale_tr-cy.js new file mode 100644 index 000000000..2244cc06a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tr-cy.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u00d6\u00d6", + "\u00d6S" + ], + "DAY": [ + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi" + ], + "ERANAMES": [ + "Milattan \u00d6nce", + "Milattan Sonra" + ], + "ERAS": [ + "M\u00d6", + "MS" + ], + "MONTH": [ + "Ocak", + "\u015eubat", + "Mart", + "Nisan", + "May\u0131s", + "Haziran", + "Temmuz", + "A\u011fustos", + "Eyl\u00fcl", + "Ekim", + "Kas\u0131m", + "Aral\u0131k" + ], + "SHORTDAY": [ + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt" + ], + "SHORTMONTH": [ + "Oca", + "\u015eub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "A\u011fu", + "Eyl", + "Eki", + "Kas", + "Ara" + ], + "fullDate": "d MMMM y EEEE", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d MM y HH:mm", + "shortDate": "d MM y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "tr-cy", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tr-tr.js b/vendor/assets/components/angular-i18n/angular-locale_tr-tr.js new file mode 100644 index 000000000..843de9d48 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tr-tr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u00d6\u00d6", + "\u00d6S" + ], + "DAY": [ + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi" + ], + "ERANAMES": [ + "Milattan \u00d6nce", + "Milattan Sonra" + ], + "ERAS": [ + "M\u00d6", + "MS" + ], + "MONTH": [ + "Ocak", + "\u015eubat", + "Mart", + "Nisan", + "May\u0131s", + "Haziran", + "Temmuz", + "A\u011fustos", + "Eyl\u00fcl", + "Ekim", + "Kas\u0131m", + "Aral\u0131k" + ], + "SHORTDAY": [ + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt" + ], + "SHORTMONTH": [ + "Oca", + "\u015eub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "A\u011fu", + "Eyl", + "Eki", + "Kas", + "Ara" + ], + "fullDate": "d MMMM y EEEE", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d MM y HH:mm", + "shortDate": "d MM y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TL", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "tr-tr", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tr.js b/vendor/assets/components/angular-i18n/angular-locale_tr.js new file mode 100644 index 000000000..728ecdb6c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tr.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u00d6\u00d6", + "\u00d6S" + ], + "DAY": [ + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi" + ], + "ERANAMES": [ + "Milattan \u00d6nce", + "Milattan Sonra" + ], + "ERAS": [ + "M\u00d6", + "MS" + ], + "MONTH": [ + "Ocak", + "\u015eubat", + "Mart", + "Nisan", + "May\u0131s", + "Haziran", + "Temmuz", + "A\u011fustos", + "Eyl\u00fcl", + "Ekim", + "Kas\u0131m", + "Aral\u0131k" + ], + "SHORTDAY": [ + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt" + ], + "SHORTMONTH": [ + "Oca", + "\u015eub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "A\u011fu", + "Eyl", + "Eki", + "Kas", + "Ara" + ], + "fullDate": "d MMMM y EEEE", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d MM y HH:mm", + "shortDate": "d MM y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TL", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "tr", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ts-za.js b/vendor/assets/components/angular-i18n/angular-locale_ts-za.js new file mode 100644 index 000000000..0d65e344c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ts-za.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Musumbhunuku", + "Ravumbirhi", + "Ravunharhu", + "Ravumune", + "Ravuntlhanu", + "Mugqivela" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Sunguti", + "Nyenyenyani", + "Nyenyankulu", + "Dzivamisoko", + "Mudyaxihi", + "Khotavuxika", + "Mawuwani", + "Mhawuri", + "Ndzhati", + "Nhlangula", + "Hukuri", + "N\u2019wendzamhala" + ], + "SHORTDAY": [ + "Son", + "Mus", + "Bir", + "Har", + "Ne", + "Tlh", + "Mug" + ], + "SHORTMONTH": [ + "Sun", + "Yan", + "Kul", + "Dzi", + "Mud", + "Kho", + "Maw", + "Mha", + "Ndz", + "Nhl", + "Huk", + "N\u2019w" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ts-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ts.js b/vendor/assets/components/angular-i18n/angular-locale_ts.js new file mode 100644 index 000000000..9eae22681 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ts.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Musumbhunuku", + "Ravumbirhi", + "Ravunharhu", + "Ravumune", + "Ravuntlhanu", + "Mugqivela" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Sunguti", + "Nyenyenyani", + "Nyenyankulu", + "Dzivamisoko", + "Mudyaxihi", + "Khotavuxika", + "Mawuwani", + "Mhawuri", + "Ndzhati", + "Nhlangula", + "Hukuri", + "N\u2019wendzamhala" + ], + "SHORTDAY": [ + "Son", + "Mus", + "Bir", + "Har", + "Ne", + "Tlh", + "Mug" + ], + "SHORTMONTH": [ + "Sun", + "Yan", + "Kul", + "Dzi", + "Mud", + "Kho", + "Maw", + "Mha", + "Ndz", + "Nhl", + "Huk", + "N\u2019w" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ts", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_twq-ne.js b/vendor/assets/components/angular-i18n/angular-locale_twq-ne.js new file mode 100644 index 000000000..bbf0174fe --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_twq-ne.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Subbaahi", + "Zaarikay b" + ], + "DAY": [ + "Alhadi", + "Atinni", + "Atalaata", + "Alarba", + "Alhamiisa", + "Alzuma", + "Asibti" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa zamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alz", + "Asi" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "twq-ne", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_twq.js b/vendor/assets/components/angular-i18n/angular-locale_twq.js new file mode 100644 index 000000000..affbf76e5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_twq.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Subbaahi", + "Zaarikay b" + ], + "DAY": [ + "Alhadi", + "Atinni", + "Atalaata", + "Alarba", + "Alhamiisa", + "Alzuma", + "Asibti" + ], + "ERANAMES": [ + "Isaa jine", + "Isaa zamanoo" + ], + "ERAS": [ + "IJ", + "IZ" + ], + "MONTH": [ + "\u017danwiye", + "Feewiriye", + "Marsi", + "Awiril", + "Me", + "\u017duwe\u014b", + "\u017duyye", + "Ut", + "Sektanbur", + "Oktoobur", + "Noowanbur", + "Deesanbur" + ], + "SHORTDAY": [ + "Alh", + "Ati", + "Ata", + "Ala", + "Alm", + "Alz", + "Asi" + ], + "SHORTMONTH": [ + "\u017dan", + "Fee", + "Mar", + "Awi", + "Me", + "\u017duw", + "\u017duy", + "Ut", + "Sek", + "Okt", + "Noo", + "Dee" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "twq", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tzm-latn-ma.js b/vendor/assets/components/angular-i18n/angular-locale_tzm-latn-ma.js new file mode 100644 index 000000000..41640ab70 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tzm-latn-ma.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Zdat azal", + "\u1e0ceffir aza" + ], + "DAY": [ + "Asamas", + "Aynas", + "Asinas", + "Akras", + "Akwas", + "Asimwas", + "Asi\u1e0dyas" + ], + "ERANAMES": [ + "Zdat \u0190isa (TA\u0194)", + "\u1e0ceffir \u0190isa (TA\u0194)" + ], + "ERAS": [ + "Z\u0190", + "\u1e0c\u0190" + ], + "MONTH": [ + "Yennayer", + "Yebrayer", + "Mars", + "Ibrir", + "Mayyu", + "Yunyu", + "Yulyuz", + "\u0194uct", + "Cutanbir", + "K\u1e6duber", + "Nwanbir", + "Dujanbir" + ], + "SHORTDAY": [ + "Asa", + "Ayn", + "Asn", + "Akr", + "Akw", + "Asm", + "As\u1e0d" + ], + "SHORTMONTH": [ + "Yen", + "Yeb", + "Mar", + "Ibr", + "May", + "Yun", + "Yul", + "\u0194uc", + "Cut", + "K\u1e6du", + "Nwa", + "Duj" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "tzm-latn-ma", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tzm-latn.js b/vendor/assets/components/angular-i18n/angular-locale_tzm-latn.js new file mode 100644 index 000000000..976becd48 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tzm-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Zdat azal", + "\u1e0ceffir aza" + ], + "DAY": [ + "Asamas", + "Aynas", + "Asinas", + "Akras", + "Akwas", + "Asimwas", + "Asi\u1e0dyas" + ], + "ERANAMES": [ + "Zdat \u0190isa (TA\u0194)", + "\u1e0ceffir \u0190isa (TA\u0194)" + ], + "ERAS": [ + "Z\u0190", + "\u1e0c\u0190" + ], + "MONTH": [ + "Yennayer", + "Yebrayer", + "Mars", + "Ibrir", + "Mayyu", + "Yunyu", + "Yulyuz", + "\u0194uct", + "Cutanbir", + "K\u1e6duber", + "Nwanbir", + "Dujanbir" + ], + "SHORTDAY": [ + "Asa", + "Ayn", + "Asn", + "Akr", + "Akw", + "Asm", + "As\u1e0d" + ], + "SHORTMONTH": [ + "Yen", + "Yeb", + "Mar", + "Ibr", + "May", + "Yun", + "Yul", + "\u0194uc", + "Cut", + "K\u1e6du", + "Nwa", + "Duj" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "tzm-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_tzm.js b/vendor/assets/components/angular-i18n/angular-locale_tzm.js new file mode 100644 index 000000000..2e02c320e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_tzm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Zdat azal", + "\u1e0ceffir aza" + ], + "DAY": [ + "Asamas", + "Aynas", + "Asinas", + "Akras", + "Akwas", + "Asimwas", + "Asi\u1e0dyas" + ], + "ERANAMES": [ + "Zdat \u0190isa (TA\u0194)", + "\u1e0ceffir \u0190isa (TA\u0194)" + ], + "ERAS": [ + "Z\u0190", + "\u1e0c\u0190" + ], + "MONTH": [ + "Yennayer", + "Yebrayer", + "Mars", + "Ibrir", + "Mayyu", + "Yunyu", + "Yulyuz", + "\u0194uct", + "Cutanbir", + "K\u1e6duber", + "Nwanbir", + "Dujanbir" + ], + "SHORTDAY": [ + "Asa", + "Ayn", + "Asn", + "Akr", + "Akw", + "Asm", + "As\u1e0d" + ], + "SHORTMONTH": [ + "Yen", + "Yeb", + "Mar", + "Ibr", + "May", + "Yun", + "Yul", + "\u0194uc", + "Cut", + "K\u1e6du", + "Nwa", + "Duj" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "tzm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ug-arab-cn.js b/vendor/assets/components/angular-i18n/angular-locale_ug-arab-cn.js new file mode 100644 index 000000000..362d72ff2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ug-arab-cn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646" + ], + "DAY": [ + "\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5", + "\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5", + "\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5", + "\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5", + "\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5", + "\u062c\u06c8\u0645\u06d5", + "\u0634\u06d5\u0646\u0628\u06d5" + ], + "ERANAMES": [ + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5" + ], + "ERAS": [ + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5" + ], + "MONTH": [ + "\u064a\u0627\u0646\u06cb\u0627\u0631", + "\u0641\u06d0\u06cb\u0631\u0627\u0644", + "\u0645\u0627\u0631\u062a", + "\u0626\u0627\u067e\u0631\u06d0\u0644", + "\u0645\u0627\u064a", + "\u0626\u0649\u064a\u06c7\u0646", + "\u0626\u0649\u064a\u06c7\u0644", + "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a", + "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631", + "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631", + "\u0628\u0648\u064a\u0627\u0628\u0649\u0631", + "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631" + ], + "SHORTDAY": [ + "\u064a\u06d5", + "\u062f\u06c8", + "\u0633\u06d5", + "\u0686\u0627", + "\u067e\u06d5", + "\u0686\u06c8", + "\u0634\u06d5" + ], + "SHORTMONTH": [ + "\u064a\u0627\u0646\u06cb\u0627\u0631", + "\u0641\u06d0\u06cb\u0631\u0627\u0644", + "\u0645\u0627\u0631\u062a", + "\u0626\u0627\u067e\u0631\u06d0\u0644", + "\u0645\u0627\u064a", + "\u0626\u0649\u064a\u06c7\u0646", + "\u0626\u0649\u064a\u06c7\u0644", + "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a", + "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631", + "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631", + "\u0646\u0648\u064a\u0627\u0628\u0649\u0631", + "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631" + ], + "fullDate": "EEEE\u060c MMMM d\u060c y", + "longDate": "MMMM d\u060c y", + "medium": "MMM d\u060c y h:mm:ss a", + "mediumDate": "MMM d\u060c y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ug-arab-cn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ug-arab.js b/vendor/assets/components/angular-i18n/angular-locale_ug-arab.js new file mode 100644 index 000000000..810b0d541 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ug-arab.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646" + ], + "DAY": [ + "\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5", + "\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5", + "\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5", + "\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5", + "\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5", + "\u062c\u06c8\u0645\u06d5", + "\u0634\u06d5\u0646\u0628\u06d5" + ], + "ERANAMES": [ + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5" + ], + "ERAS": [ + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5" + ], + "MONTH": [ + "\u064a\u0627\u0646\u06cb\u0627\u0631", + "\u0641\u06d0\u06cb\u0631\u0627\u0644", + "\u0645\u0627\u0631\u062a", + "\u0626\u0627\u067e\u0631\u06d0\u0644", + "\u0645\u0627\u064a", + "\u0626\u0649\u064a\u06c7\u0646", + "\u0626\u0649\u064a\u06c7\u0644", + "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a", + "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631", + "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631", + "\u0628\u0648\u064a\u0627\u0628\u0649\u0631", + "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631" + ], + "SHORTDAY": [ + "\u064a\u06d5", + "\u062f\u06c8", + "\u0633\u06d5", + "\u0686\u0627", + "\u067e\u06d5", + "\u0686\u06c8", + "\u0634\u06d5" + ], + "SHORTMONTH": [ + "\u064a\u0627\u0646\u06cb\u0627\u0631", + "\u0641\u06d0\u06cb\u0631\u0627\u0644", + "\u0645\u0627\u0631\u062a", + "\u0626\u0627\u067e\u0631\u06d0\u0644", + "\u0645\u0627\u064a", + "\u0626\u0649\u064a\u06c7\u0646", + "\u0626\u0649\u064a\u06c7\u0644", + "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a", + "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631", + "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631", + "\u0646\u0648\u064a\u0627\u0628\u0649\u0631", + "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631" + ], + "fullDate": "EEEE\u060c MMMM d\u060c y", + "longDate": "MMMM d\u060c y", + "medium": "MMM d\u060c y h:mm:ss a", + "mediumDate": "MMM d\u060c y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ug-arab", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ug.js b/vendor/assets/components/angular-i18n/angular-locale_ug.js new file mode 100644 index 000000000..bbdb26615 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646" + ], + "DAY": [ + "\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5", + "\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5", + "\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5", + "\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5", + "\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5", + "\u062c\u06c8\u0645\u06d5", + "\u0634\u06d5\u0646\u0628\u06d5" + ], + "ERANAMES": [ + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5" + ], + "ERAS": [ + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646", + "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5" + ], + "MONTH": [ + "\u064a\u0627\u0646\u06cb\u0627\u0631", + "\u0641\u06d0\u06cb\u0631\u0627\u0644", + "\u0645\u0627\u0631\u062a", + "\u0626\u0627\u067e\u0631\u06d0\u0644", + "\u0645\u0627\u064a", + "\u0626\u0649\u064a\u06c7\u0646", + "\u0626\u0649\u064a\u06c7\u0644", + "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a", + "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631", + "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631", + "\u0628\u0648\u064a\u0627\u0628\u0649\u0631", + "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631" + ], + "SHORTDAY": [ + "\u064a\u06d5", + "\u062f\u06c8", + "\u0633\u06d5", + "\u0686\u0627", + "\u067e\u06d5", + "\u0686\u06c8", + "\u0634\u06d5" + ], + "SHORTMONTH": [ + "\u064a\u0627\u0646\u06cb\u0627\u0631", + "\u0641\u06d0\u06cb\u0631\u0627\u0644", + "\u0645\u0627\u0631\u062a", + "\u0626\u0627\u067e\u0631\u06d0\u0644", + "\u0645\u0627\u064a", + "\u0626\u0649\u064a\u06c7\u0646", + "\u0626\u0649\u064a\u06c7\u0644", + "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a", + "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631", + "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631", + "\u0646\u0648\u064a\u0627\u0628\u0649\u0631", + "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631" + ], + "fullDate": "EEEE\u060c MMMM d\u060c y", + "longDate": "MMMM d\u060c y", + "medium": "MMM d\u060c y h:mm:ss a", + "mediumDate": "MMM d\u060c y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uk-ua.js b/vendor/assets/components/angular-i18n/angular-locale_uk-ua.js new file mode 100644 index 000000000..6aaf2deb0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uk-ua.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u043f", + "\u043f\u043f" + ], + "DAY": [ + "\u043d\u0435\u0434\u0456\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", + "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a", + "\u0441\u0435\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440", + "\u043f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438", + "\u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438" + ], + "ERAS": [ + "\u0434\u043e \u043d.\u0435.", + "\u043d.\u0435." + ], + "MONTH": [ + "\u0441\u0456\u0447\u043d\u044f", + "\u043b\u044e\u0442\u043e\u0433\u043e", + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", + "\u043a\u0432\u0456\u0442\u043d\u044f", + "\u0442\u0440\u0430\u0432\u043d\u044f", + "\u0447\u0435\u0440\u0432\u043d\u044f", + "\u043b\u0438\u043f\u043d\u044f", + "\u0441\u0435\u0440\u043f\u043d\u044f", + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", + "\u0436\u043e\u0432\u0442\u043d\u044f", + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", + "\u0433\u0440\u0443\u0434\u043d\u044f" + ], + "SHORTDAY": [ + "\u041d\u0434", + "\u041f\u043d", + "\u0412\u0442", + "\u0421\u0440", + "\u0427\u0442", + "\u041f\u0442", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0456\u0447.", + "\u043b\u044e\u0442.", + "\u0431\u0435\u0440.", + "\u043a\u0432\u0456\u0442.", + "\u0442\u0440\u0430\u0432.", + "\u0447\u0435\u0440\u0432.", + "\u043b\u0438\u043f.", + "\u0441\u0435\u0440\u043f.", + "\u0432\u0435\u0440.", + "\u0436\u043e\u0432\u0442.", + "\u043b\u0438\u0441\u0442.", + "\u0433\u0440\u0443\u0434." + ], + "fullDate": "EEEE, d MMMM y '\u0440'.", + "longDate": "d MMMM y '\u0440'.", + "medium": "d MMM y '\u0440'. HH:mm:ss", + "mediumDate": "d MMM y '\u0440'.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b4", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "uk-ua", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uk.js b/vendor/assets/components/angular-i18n/angular-locale_uk.js new file mode 100644 index 000000000..ba3e17c14 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u043f", + "\u043f\u043f" + ], + "DAY": [ + "\u043d\u0435\u0434\u0456\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", + "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a", + "\u0441\u0435\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440", + "\u043f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "ERANAMES": [ + "\u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438", + "\u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438" + ], + "ERAS": [ + "\u0434\u043e \u043d.\u0435.", + "\u043d.\u0435." + ], + "MONTH": [ + "\u0441\u0456\u0447\u043d\u044f", + "\u043b\u044e\u0442\u043e\u0433\u043e", + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", + "\u043a\u0432\u0456\u0442\u043d\u044f", + "\u0442\u0440\u0430\u0432\u043d\u044f", + "\u0447\u0435\u0440\u0432\u043d\u044f", + "\u043b\u0438\u043f\u043d\u044f", + "\u0441\u0435\u0440\u043f\u043d\u044f", + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", + "\u0436\u043e\u0432\u0442\u043d\u044f", + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", + "\u0433\u0440\u0443\u0434\u043d\u044f" + ], + "SHORTDAY": [ + "\u041d\u0434", + "\u041f\u043d", + "\u0412\u0442", + "\u0421\u0440", + "\u0427\u0442", + "\u041f\u0442", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0456\u0447.", + "\u043b\u044e\u0442.", + "\u0431\u0435\u0440.", + "\u043a\u0432\u0456\u0442.", + "\u0442\u0440\u0430\u0432.", + "\u0447\u0435\u0440\u0432.", + "\u043b\u0438\u043f.", + "\u0441\u0435\u0440\u043f.", + "\u0432\u0435\u0440.", + "\u0436\u043e\u0432\u0442.", + "\u043b\u0438\u0441\u0442.", + "\u0433\u0440\u0443\u0434." + ], + "fullDate": "EEEE, d MMMM y '\u0440'.", + "longDate": "d MMMM y '\u0440'.", + "medium": "d MMM y '\u0440'. HH:mm:ss", + "mediumDate": "d MMM y '\u0440'.", + "mediumTime": "HH:mm:ss", + "short": "dd.MM.yy HH:mm", + "shortDate": "dd.MM.yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b4", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "uk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ur-in.js b/vendor/assets/components/angular-i18n/angular-locale_ur-in.js new file mode 100644 index 000000000..a3d7ee36f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ur-in.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631", + "\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u06cc\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d", + "\u0639\u06cc\u0633\u0648\u06cc" + ], + "ERAS": [ + "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d", + "\u0639\u06cc\u0633\u0648\u06cc" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u06cc\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "d MMM\u060c y h:mm:ss a", + "mediumDate": "d MMM\u060c y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20b9", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ur-in", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ur-pk.js b/vendor/assets/components/angular-i18n/angular-locale_ur-pk.js new file mode 100644 index 000000000..80f89e95d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ur-pk.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631", + "\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u0633\u0648\u0645\u0648\u0627\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d", + "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646" + ], + "ERAS": [ + "\u0642 \u0645", + "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u0633\u0648\u0645\u0648\u0627\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "d MMM\u060c y h:mm:ss a", + "mediumDate": "d MMM\u060c y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ur-pk", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ur.js b/vendor/assets/components/angular-i18n/angular-locale_ur.js new file mode 100644 index 000000000..54a14f514 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ur.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631", + "\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u0633\u0648\u0645\u0648\u0627\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "ERANAMES": [ + "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d", + "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646" + ], + "ERAS": [ + "\u0642 \u0645", + "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u0633\u0648\u0645\u0648\u0627\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u06be", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u0626\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "fullDate": "EEEE\u060c d MMMM\u060c y", + "longDate": "d MMMM\u060c y", + "medium": "d MMM\u060c y h:mm:ss a", + "mediumDate": "d MMM\u060c y", + "mediumTime": "h:mm:ss a", + "short": "d/M/yy h:mm a", + "shortDate": "d/M/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Rs", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 2, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "ur", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uz-arab-af.js b/vendor/assets/components/angular-i18n/angular-locale_uz-arab-af.js new file mode 100644 index 000000000..0a38c24c2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uz-arab-af.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "ERANAMES": [ + "\u0642.\u0645.", + "\u0645." + ], + "ERAS": [ + "\u0642.\u0645.", + "\u0645." + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0628\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc.", + "\u062f.", + "\u0633.", + "\u0686.", + "\u067e.", + "\u062c.", + "\u0634." + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648", + "\u0641\u0628\u0631", + "\u0645\u0627\u0631", + "\u0627\u067e\u0631", + "\u0645\u0640\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644", + "\u0627\u06af\u0633", + "\u0633\u067e\u062a", + "\u0627\u06a9\u062a", + "\u0646\u0648\u0645", + "\u062f\u0633\u0645" + ], + "fullDate": "y \u0646\u0686\u06cc \u06cc\u06cc\u0644 d \u0646\u0686\u06cc MMMM EEEE \u06a9\u0648\u0646\u06cc", + "longDate": "d \u0646\u0686\u06cc MMMM y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "y/M/d H:mm", + "shortDate": "y/M/d", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Af.", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "uz-arab-af", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uz-arab.js b/vendor/assets/components/angular-i18n/angular-locale_uz-arab.js new file mode 100644 index 000000000..fdb2cad92 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uz-arab.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "ERANAMES": [ + "\u0642.\u0645.", + "\u0645." + ], + "ERAS": [ + "\u0642.\u0645.", + "\u0645." + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0628\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc.", + "\u062f.", + "\u0633.", + "\u0686.", + "\u067e.", + "\u062c.", + "\u0634." + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648", + "\u0641\u0628\u0631", + "\u0645\u0627\u0631", + "\u0627\u067e\u0631", + "\u0645\u0640\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644", + "\u0627\u06af\u0633", + "\u0633\u067e\u062a", + "\u0627\u06a9\u062a", + "\u0646\u0648\u0645", + "\u062f\u0633\u0645" + ], + "fullDate": "y \u0646\u0686\u06cc \u06cc\u06cc\u0644 d \u0646\u0686\u06cc MMMM EEEE \u06a9\u0648\u0646\u06cc", + "longDate": "d \u0646\u0686\u06cc MMMM y", + "medium": "d MMM y H:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "H:mm:ss", + "short": "y/M/d H:mm", + "shortDate": "y/M/d", + "shortTime": "H:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Af.", + "DECIMAL_SEP": "\u066b", + "GROUP_SEP": "\u066c", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "uz-arab", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uz-cyrl-uz.js b/vendor/assets/components/angular-i18n/angular-locale_uz-cyrl-uz.js new file mode 100644 index 000000000..c133b36b0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uz-cyrl-uz.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u044f\u043a\u0448\u0430\u043d\u0431\u0430", + "\u0434\u0443\u0448\u0430\u043d\u0431\u0430", + "\u0441\u0435\u0448\u0430\u043d\u0431\u0430", + "\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0430", + "\u043f\u0430\u0439\u0448\u0430\u043d\u0431\u0430", + "\u0436\u0443\u043c\u0430", + "\u0448\u0430\u043d\u0431\u0430" + ], + "ERANAMES": [ + "\u041c.\u0410.", + "\u042d" + ], + "ERAS": [ + "\u041c.\u0410.", + "\u042d" + ], + "MONTH": [ + "\u042f\u043d\u0432\u0430\u0440", + "\u0424\u0435\u0432\u0440\u0430\u043b", + "\u041c\u0430\u0440\u0442", + "\u0410\u043f\u0440\u0435\u043b", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433\u0443\u0441\u0442", + "\u0421\u0435\u043d\u0442\u044f\u0431\u0440", + "\u041e\u043a\u0442\u044f\u0431\u0440", + "\u041d\u043e\u044f\u0431\u0440", + "\u0414\u0435\u043a\u0430\u0431\u0440" + ], + "SHORTDAY": [ + "\u042f\u043a\u0448", + "\u0414\u0443\u0448", + "\u0421\u0435\u0448", + "\u0427\u043e\u0440", + "\u041f\u0430\u0439", + "\u0416\u0443\u043c", + "\u0428\u0430\u043d" + ], + "SHORTMONTH": [ + "\u042f\u043d\u0432", + "\u0424\u0435\u0432", + "\u041c\u0430\u0440", + "\u0410\u043f\u0440", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433", + "\u0421\u0435\u043d", + "\u041e\u043a\u0442", + "\u041d\u043e\u044f", + "\u0414\u0435\u043a" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "so\u02bcm", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "uz-cyrl-uz", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uz-cyrl.js b/vendor/assets/components/angular-i18n/angular-locale_uz-cyrl.js new file mode 100644 index 000000000..b84d91c9f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uz-cyrl.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\u044f\u043a\u0448\u0430\u043d\u0431\u0430", + "\u0434\u0443\u0448\u0430\u043d\u0431\u0430", + "\u0441\u0435\u0448\u0430\u043d\u0431\u0430", + "\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0430", + "\u043f\u0430\u0439\u0448\u0430\u043d\u0431\u0430", + "\u0436\u0443\u043c\u0430", + "\u0448\u0430\u043d\u0431\u0430" + ], + "ERANAMES": [ + "\u041c.\u0410.", + "\u042d" + ], + "ERAS": [ + "\u041c.\u0410.", + "\u042d" + ], + "MONTH": [ + "\u042f\u043d\u0432\u0430\u0440", + "\u0424\u0435\u0432\u0440\u0430\u043b", + "\u041c\u0430\u0440\u0442", + "\u0410\u043f\u0440\u0435\u043b", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433\u0443\u0441\u0442", + "\u0421\u0435\u043d\u0442\u044f\u0431\u0440", + "\u041e\u043a\u0442\u044f\u0431\u0440", + "\u041d\u043e\u044f\u0431\u0440", + "\u0414\u0435\u043a\u0430\u0431\u0440" + ], + "SHORTDAY": [ + "\u042f\u043a\u0448", + "\u0414\u0443\u0448", + "\u0421\u0435\u0448", + "\u0427\u043e\u0440", + "\u041f\u0430\u0439", + "\u0416\u0443\u043c", + "\u0428\u0430\u043d" + ], + "SHORTMONTH": [ + "\u042f\u043d\u0432", + "\u0424\u0435\u0432", + "\u041c\u0430\u0440", + "\u0410\u043f\u0440", + "\u041c\u0430\u0439", + "\u0418\u044e\u043d", + "\u0418\u044e\u043b", + "\u0410\u0432\u0433", + "\u0421\u0435\u043d", + "\u041e\u043a\u0442", + "\u041d\u043e\u044f", + "\u0414\u0435\u043a" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "uz-cyrl", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uz-latn-uz.js b/vendor/assets/components/angular-i18n/angular-locale_uz-latn-uz.js new file mode 100644 index 000000000..e35849e94 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uz-latn-uz.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "TO", + "TK" + ], + "DAY": [ + "yakshanba", + "dushanba", + "seshanba", + "chorshanba", + "payshanba", + "juma", + "shanba" + ], + "ERANAMES": [ + "M.A.", + "E" + ], + "ERAS": [ + "M.A.", + "E" + ], + "MONTH": [ + "Yanvar", + "Fevral", + "Mart", + "Aprel", + "May", + "Iyun", + "Iyul", + "Avgust", + "Sentabr", + "Oktabr", + "Noyabr", + "Dekabr" + ], + "SHORTDAY": [ + "Yaksh", + "Dush", + "Sesh", + "Chor", + "Pay", + "Jum", + "Shan" + ], + "SHORTMONTH": [ + "Yanv", + "Fev", + "Mar", + "Apr", + "May", + "Iyun", + "Iyul", + "Avg", + "Sen", + "Okt", + "Noya", + "Dek" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "so\u02bcm", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "uz-latn-uz", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uz-latn.js b/vendor/assets/components/angular-i18n/angular-locale_uz-latn.js new file mode 100644 index 000000000..06482ac8b --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uz-latn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "TO", + "TK" + ], + "DAY": [ + "yakshanba", + "dushanba", + "seshanba", + "chorshanba", + "payshanba", + "juma", + "shanba" + ], + "ERANAMES": [ + "M.A.", + "E" + ], + "ERAS": [ + "M.A.", + "E" + ], + "MONTH": [ + "Yanvar", + "Fevral", + "Mart", + "Aprel", + "May", + "Iyun", + "Iyul", + "Avgust", + "Sentabr", + "Oktabr", + "Noyabr", + "Dekabr" + ], + "SHORTDAY": [ + "Yaksh", + "Dush", + "Sesh", + "Chor", + "Pay", + "Jum", + "Shan" + ], + "SHORTMONTH": [ + "Yanv", + "Fev", + "Mar", + "Apr", + "May", + "Iyun", + "Iyul", + "Avg", + "Sen", + "Okt", + "Noya", + "Dek" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "uz-latn", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_uz.js b/vendor/assets/components/angular-i18n/angular-locale_uz.js new file mode 100644 index 000000000..ec337d997 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_uz.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "TO", + "TK" + ], + "DAY": [ + "yakshanba", + "dushanba", + "seshanba", + "chorshanba", + "payshanba", + "juma", + "shanba" + ], + "ERANAMES": [ + "M.A.", + "E" + ], + "ERAS": [ + "M.A.", + "E" + ], + "MONTH": [ + "Yanvar", + "Fevral", + "Mart", + "Aprel", + "May", + "Iyun", + "Iyul", + "Avgust", + "Sentabr", + "Oktabr", + "Noyabr", + "Dekabr" + ], + "SHORTDAY": [ + "Yaksh", + "Dush", + "Sesh", + "Chor", + "Pay", + "Jum", + "Shan" + ], + "SHORTMONTH": [ + "Yanv", + "Fev", + "Mar", + "Apr", + "May", + "Iyun", + "Iyul", + "Avg", + "Sen", + "Okt", + "Noya", + "Dek" + ], + "fullDate": "EEEE, y MMMM dd", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "yy/MM/dd HH:mm", + "shortDate": "yy/MM/dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "so\u02bcm", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "uz", + "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vai-latn-lr.js b/vendor/assets/components/angular-i18n/angular-locale_vai-latn-lr.js new file mode 100644 index 000000000..c407722db --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vai-latn-lr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "lahadi", + "t\u025b\u025bn\u025b\u025b", + "talata", + "alaba", + "aimisa", + "aijima", + "si\u0253iti" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "luukao kem\u00e3", + "\u0253anda\u0253u", + "v\u0254\u0254", + "fulu", + "goo", + "6", + "7", + "k\u0254nde", + "saah", + "galo", + "kenpkato \u0253olol\u0254", + "luukao l\u0254ma" + ], + "SHORTDAY": [ + "lahadi", + "t\u025b\u025bn\u025b\u025b", + "talata", + "alaba", + "aimisa", + "aijima", + "si\u0253iti" + ], + "SHORTMONTH": [ + "luukao kem\u00e3", + "\u0253anda\u0253u", + "v\u0254\u0254", + "fulu", + "goo", + "6", + "7", + "k\u0254nde", + "saah", + "galo", + "kenpkato \u0253olol\u0254", + "luukao l\u0254ma" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "vai-latn-lr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vai-latn.js b/vendor/assets/components/angular-i18n/angular-locale_vai-latn.js new file mode 100644 index 000000000..f82a59697 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vai-latn.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "lahadi", + "t\u025b\u025bn\u025b\u025b", + "talata", + "alaba", + "aimisa", + "aijima", + "si\u0253iti" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "luukao kem\u00e3", + "\u0253anda\u0253u", + "v\u0254\u0254", + "fulu", + "goo", + "6", + "7", + "k\u0254nde", + "saah", + "galo", + "kenpkato \u0253olol\u0254", + "luukao l\u0254ma" + ], + "SHORTDAY": [ + "lahadi", + "t\u025b\u025bn\u025b\u025b", + "talata", + "alaba", + "aimisa", + "aijima", + "si\u0253iti" + ], + "SHORTMONTH": [ + "luukao kem\u00e3", + "\u0253anda\u0253u", + "v\u0254\u0254", + "fulu", + "goo", + "6", + "7", + "k\u0254nde", + "saah", + "galo", + "kenpkato \u0253olol\u0254", + "luukao l\u0254ma" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "vai-latn", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vai-vaii-lr.js b/vendor/assets/components/angular-i18n/angular-locale_vai-vaii-lr.js new file mode 100644 index 000000000..09cc85579 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vai-vaii-lr.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\ua55e\ua54c\ua535", + "\ua5f3\ua5e1\ua609", + "\ua55a\ua55e\ua55a", + "\ua549\ua55e\ua552", + "\ua549\ua524\ua546\ua562", + "\ua549\ua524\ua540\ua56e", + "\ua53b\ua52c\ua533" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\ua5a8\ua56a\ua583 \ua51e\ua56e", + "\ua552\ua561\ua59d\ua595", + "\ua57e\ua5ba", + "\ua5a2\ua595", + "\ua591\ua571", + "6", + "7", + "\ua5db\ua515", + "\ua562\ua54c", + "\ua56d\ua583", + "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf", + "\ua5a8\ua56a\ua571 \ua5cf\ua56e" + ], + "SHORTDAY": [ + "\ua55e\ua54c\ua535", + "\ua5f3\ua5e1\ua609", + "\ua55a\ua55e\ua55a", + "\ua549\ua55e\ua552", + "\ua549\ua524\ua546\ua562", + "\ua549\ua524\ua540\ua56e", + "\ua53b\ua52c\ua533" + ], + "SHORTMONTH": [ + "\ua5a8\ua56a\ua583 \ua51e\ua56e", + "\ua552\ua561\ua59d\ua595", + "\ua57e\ua5ba", + "\ua5a2\ua595", + "\ua591\ua571", + "6", + "7", + "\ua5db\ua515", + "\ua562\ua54c", + "\ua56d\ua583", + "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf", + "\ua5a8\ua56a\ua571 \ua5cf\ua56e" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "vai-vaii-lr", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vai-vaii.js b/vendor/assets/components/angular-i18n/angular-locale_vai-vaii.js new file mode 100644 index 000000000..01757b7f9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vai-vaii.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\ua55e\ua54c\ua535", + "\ua5f3\ua5e1\ua609", + "\ua55a\ua55e\ua55a", + "\ua549\ua55e\ua552", + "\ua549\ua524\ua546\ua562", + "\ua549\ua524\ua540\ua56e", + "\ua53b\ua52c\ua533" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\ua5a8\ua56a\ua583 \ua51e\ua56e", + "\ua552\ua561\ua59d\ua595", + "\ua57e\ua5ba", + "\ua5a2\ua595", + "\ua591\ua571", + "6", + "7", + "\ua5db\ua515", + "\ua562\ua54c", + "\ua56d\ua583", + "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf", + "\ua5a8\ua56a\ua571 \ua5cf\ua56e" + ], + "SHORTDAY": [ + "\ua55e\ua54c\ua535", + "\ua5f3\ua5e1\ua609", + "\ua55a\ua55e\ua55a", + "\ua549\ua55e\ua552", + "\ua549\ua524\ua546\ua562", + "\ua549\ua524\ua540\ua56e", + "\ua53b\ua52c\ua533" + ], + "SHORTMONTH": [ + "\ua5a8\ua56a\ua583 \ua51e\ua56e", + "\ua552\ua561\ua59d\ua595", + "\ua57e\ua5ba", + "\ua5a2\ua595", + "\ua591\ua571", + "6", + "7", + "\ua5db\ua515", + "\ua562\ua54c", + "\ua56d\ua583", + "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf", + "\ua5a8\ua56a\ua571 \ua5cf\ua56e" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "vai-vaii", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vai.js b/vendor/assets/components/angular-i18n/angular-locale_vai.js new file mode 100644 index 000000000..f9974baf7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vai.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "\ua55e\ua54c\ua535", + "\ua5f3\ua5e1\ua609", + "\ua55a\ua55e\ua55a", + "\ua549\ua55e\ua552", + "\ua549\ua524\ua546\ua562", + "\ua549\ua524\ua540\ua56e", + "\ua53b\ua52c\ua533" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\ua5a8\ua56a\ua583 \ua51e\ua56e", + "\ua552\ua561\ua59d\ua595", + "\ua57e\ua5ba", + "\ua5a2\ua595", + "\ua591\ua571", + "6", + "7", + "\ua5db\ua515", + "\ua562\ua54c", + "\ua56d\ua583", + "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf", + "\ua5a8\ua56a\ua571 \ua5cf\ua56e" + ], + "SHORTDAY": [ + "\ua55e\ua54c\ua535", + "\ua5f3\ua5e1\ua609", + "\ua55a\ua55e\ua55a", + "\ua549\ua55e\ua552", + "\ua549\ua524\ua546\ua562", + "\ua549\ua524\ua540\ua56e", + "\ua53b\ua52c\ua533" + ], + "SHORTMONTH": [ + "\ua5a8\ua56a\ua583 \ua51e\ua56e", + "\ua552\ua561\ua59d\ua595", + "\ua57e\ua5ba", + "\ua5a2\ua595", + "\ua591\ua571", + "6", + "7", + "\ua5db\ua515", + "\ua562\ua54c", + "\ua56d\ua583", + "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf", + "\ua5a8\ua56a\ua571 \ua5cf\ua56e" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "vai", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ve-za.js b/vendor/assets/components/angular-i18n/angular-locale_ve-za.js new file mode 100644 index 000000000..f0376e57d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ve-za.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Swondaha", + "Musumbuluwo", + "\u1e3cavhuvhili", + "\u1e3cavhuraru", + "\u1e3cavhu\u1e4ba", + "\u1e3cavhu\u1e71anu", + "Mugivhela" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Phando", + "Luhuhi", + "\u1e70hafamuhwe", + "Lambamai", + "Shundunthule", + "Fulwi", + "Fulwana", + "\u1e70hangule", + "Khubvumedzi", + "Tshimedzi", + "\u1e3cara", + "Nyendavhusiku" + ], + "SHORTDAY": [ + "Swo", + "Mus", + "Vhi", + "Rar", + "\u1e4aa", + "\u1e70an", + "Mug" + ], + "SHORTMONTH": [ + "Pha", + "Luh", + "\u1e70hf", + "Lam", + "Shu", + "Lwi", + "Lwa", + "\u1e70ha", + "Khu", + "Tsh", + "\u1e3car", + "Nye" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ve-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_ve.js b/vendor/assets/components/angular-i18n/angular-locale_ve.js new file mode 100644 index 000000000..aa681920a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_ve.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Swondaha", + "Musumbuluwo", + "\u1e3cavhuvhili", + "\u1e3cavhuraru", + "\u1e3cavhu\u1e4ba", + "\u1e3cavhu\u1e71anu", + "Mugivhela" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "Phando", + "Luhuhi", + "\u1e70hafamuhwe", + "Lambamai", + "Shundunthule", + "Fulwi", + "Fulwana", + "\u1e70hangule", + "Khubvumedzi", + "Tshimedzi", + "\u1e3cara", + "Nyendavhusiku" + ], + "SHORTDAY": [ + "Swo", + "Mus", + "Vhi", + "Rar", + "\u1e4aa", + "\u1e70an", + "Mug" + ], + "SHORTMONTH": [ + "Pha", + "Luh", + "\u1e70hf", + "Lam", + "Shu", + "Lwi", + "Lwa", + "\u1e70ha", + "Khu", + "Tsh", + "\u1e3car", + "Nye" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "ve", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vi-vn.js b/vendor/assets/components/angular-i18n/angular-locale_vi-vn.js new file mode 100644 index 000000000..ebafa550f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vi-vn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "SA", + "CH" + ], + "DAY": [ + "Ch\u1ee7 Nh\u1eadt", + "Th\u1ee9 Hai", + "Th\u1ee9 Ba", + "Th\u1ee9 T\u01b0", + "Th\u1ee9 N\u0103m", + "Th\u1ee9 S\u00e1u", + "Th\u1ee9 B\u1ea3y" + ], + "ERANAMES": [ + "tr. CN", + "sau CN" + ], + "ERAS": [ + "tr. CN", + "sau CN" + ], + "MONTH": [ + "th\u00e1ng 1", + "th\u00e1ng 2", + "th\u00e1ng 3", + "th\u00e1ng 4", + "th\u00e1ng 5", + "th\u00e1ng 6", + "th\u00e1ng 7", + "th\u00e1ng 8", + "th\u00e1ng 9", + "th\u00e1ng 10", + "th\u00e1ng 11", + "th\u00e1ng 12" + ], + "SHORTDAY": [ + "CN", + "Th 2", + "Th 3", + "Th 4", + "Th 5", + "Th 6", + "Th 7" + ], + "SHORTMONTH": [ + "thg 1", + "thg 2", + "thg 3", + "thg 4", + "thg 5", + "thg 6", + "thg 7", + "thg 8", + "thg 9", + "thg 10", + "thg 11", + "thg 12" + ], + "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y", + "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' MM 'n\u0103m' y", + "medium": "dd-MM-y HH:mm:ss", + "mediumDate": "dd-MM-y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ab", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "vi-vn", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vi.js b/vendor/assets/components/angular-i18n/angular-locale_vi.js new file mode 100644 index 000000000..28c3bef6c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vi.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "SA", + "CH" + ], + "DAY": [ + "Ch\u1ee7 Nh\u1eadt", + "Th\u1ee9 Hai", + "Th\u1ee9 Ba", + "Th\u1ee9 T\u01b0", + "Th\u1ee9 N\u0103m", + "Th\u1ee9 S\u00e1u", + "Th\u1ee9 B\u1ea3y" + ], + "ERANAMES": [ + "tr. CN", + "sau CN" + ], + "ERAS": [ + "tr. CN", + "sau CN" + ], + "MONTH": [ + "th\u00e1ng 1", + "th\u00e1ng 2", + "th\u00e1ng 3", + "th\u00e1ng 4", + "th\u00e1ng 5", + "th\u00e1ng 6", + "th\u00e1ng 7", + "th\u00e1ng 8", + "th\u00e1ng 9", + "th\u00e1ng 10", + "th\u00e1ng 11", + "th\u00e1ng 12" + ], + "SHORTDAY": [ + "CN", + "Th 2", + "Th 3", + "Th 4", + "Th 5", + "Th 6", + "Th 7" + ], + "SHORTMONTH": [ + "thg 1", + "thg 2", + "thg 3", + "thg 4", + "thg 5", + "thg 6", + "thg 7", + "thg 8", + "thg 9", + "thg 10", + "thg 11", + "thg 12" + ], + "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y", + "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' MM 'n\u0103m' y", + "medium": "dd-MM-y HH:mm:ss", + "mediumDate": "dd-MM-y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/y HH:mm", + "shortDate": "dd/MM/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ab", + "DECIMAL_SEP": ",", + "GROUP_SEP": ".", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "vi", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vo-001.js b/vendor/assets/components/angular-i18n/angular-locale_vo-001.js new file mode 100644 index 000000000..32cb60e27 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vo-001.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "posz.", + "b\u00fcz." + ], + "DAY": [ + "sudel", + "mudel", + "tudel", + "vedel", + "d\u00f6del", + "fridel", + "z\u00e4del" + ], + "ERANAMES": [ + "b. t. kr.", + "p. t. kr." + ], + "ERAS": [ + "b. t. kr.", + "p. t. kr." + ], + "MONTH": [ + "janul", + "febul", + "m\u00e4zil", + "prilul", + "mayul", + "yunul", + "yulul", + "gustul", + "setul", + "tobul", + "novul", + "dekul" + ], + "SHORTDAY": [ + "su.", + "mu.", + "tu.", + "ve.", + "d\u00f6.", + "fr.", + "z\u00e4." + ], + "SHORTMONTH": [ + "jan", + "feb", + "m\u00e4z", + "prl", + "may", + "yun", + "yul", + "gst", + "set", + "ton", + "nov", + "dek" + ], + "fullDate": "y MMMMa 'd'. d'id'", + "longDate": "y MMMM d", + "medium": "y MMM. d HH:mm:ss", + "mediumDate": "y MMM. d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "vo-001", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vo.js b/vendor/assets/components/angular-i18n/angular-locale_vo.js new file mode 100644 index 000000000..ca21c8ac2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "posz.", + "b\u00fcz." + ], + "DAY": [ + "sudel", + "mudel", + "tudel", + "vedel", + "d\u00f6del", + "fridel", + "z\u00e4del" + ], + "ERANAMES": [ + "b. t. kr.", + "p. t. kr." + ], + "ERAS": [ + "b. t. kr.", + "p. t. kr." + ], + "MONTH": [ + "janul", + "febul", + "m\u00e4zil", + "prilul", + "mayul", + "yunul", + "yulul", + "gustul", + "setul", + "tobul", + "novul", + "dekul" + ], + "SHORTDAY": [ + "su.", + "mu.", + "tu.", + "ve.", + "d\u00f6.", + "fr.", + "z\u00e4." + ], + "SHORTMONTH": [ + "jan", + "feb", + "m\u00e4z", + "prl", + "may", + "yun", + "yul", + "gst", + "set", + "ton", + "nov", + "dek" + ], + "fullDate": "y MMMMa 'd'. d'id'", + "longDate": "y MMMM d", + "medium": "y MMM. d HH:mm:ss", + "mediumDate": "y MMM. d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "vo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vun-tz.js b/vendor/assets/components/angular-i18n/angular-locale_vun-tz.js new file mode 100644 index 000000000..7ddf4f66a --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vun-tz.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "utuko", + "kyiukonyi" + ], + "DAY": [ + "Jumapilyi", + "Jumatatuu", + "Jumanne", + "Jumatanu", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristu", + "Baada ya Kristu" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprilyi", + "Mei", + "Junyi", + "Julyai", + "Agusti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "vun-tz", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_vun.js b/vendor/assets/components/angular-i18n/angular-locale_vun.js new file mode 100644 index 000000000..5c0713e60 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_vun.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "utuko", + "kyiukonyi" + ], + "DAY": [ + "Jumapilyi", + "Jumatatuu", + "Jumanne", + "Jumatanu", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "ERANAMES": [ + "Kabla ya Kristu", + "Baada ya Kristu" + ], + "ERAS": [ + "KK", + "BK" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprilyi", + "Mei", + "Junyi", + "Julyai", + "Agusti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Jpi", + "Jtt", + "Jnn", + "Jtn", + "Alh", + "Iju", + "Jmo" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "TSh", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "vun", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_wae-ch.js b/vendor/assets/components/angular-i18n/angular-locale_wae-ch.js new file mode 100644 index 000000000..0ac395016 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_wae-ch.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunntag", + "M\u00e4ntag", + "Zi\u0161tag", + "Mittwu\u010d", + "Fr\u00f3ntag", + "Fritag", + "Sam\u0161tag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr" + ], + "ERAS": [ + "v. Chr.", + "n. Chr" + ], + "MONTH": [ + "Jenner", + "Hornig", + "M\u00e4rze", + "Abrille", + "Meije", + "Br\u00e1\u010det", + "Heiwet", + "\u00d6ig\u0161te", + "Herb\u0161tm\u00e1net", + "W\u00edm\u00e1net", + "Winterm\u00e1net", + "Chri\u0161tm\u00e1net" + ], + "SHORTDAY": [ + "Sun", + "M\u00e4n", + "Zi\u0161", + "Mit", + "Fr\u00f3", + "Fri", + "Sam" + ], + "SHORTMONTH": [ + "Jen", + "Hor", + "M\u00e4r", + "Abr", + "Mei", + "Br\u00e1", + "Hei", + "\u00d6ig", + "Her", + "W\u00edm", + "Win", + "Chr" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "wae-ch", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_wae.js b/vendor/assets/components/angular-i18n/angular-locale_wae.js new file mode 100644 index 000000000..698f261ac --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_wae.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunntag", + "M\u00e4ntag", + "Zi\u0161tag", + "Mittwu\u010d", + "Fr\u00f3ntag", + "Fritag", + "Sam\u0161tag" + ], + "ERANAMES": [ + "v. Chr.", + "n. Chr" + ], + "ERAS": [ + "v. Chr.", + "n. Chr" + ], + "MONTH": [ + "Jenner", + "Hornig", + "M\u00e4rze", + "Abrille", + "Meije", + "Br\u00e1\u010det", + "Heiwet", + "\u00d6ig\u0161te", + "Herb\u0161tm\u00e1net", + "W\u00edm\u00e1net", + "Winterm\u00e1net", + "Chri\u0161tm\u00e1net" + ], + "SHORTDAY": [ + "Sun", + "M\u00e4n", + "Zi\u0161", + "Mit", + "Fr\u00f3", + "Fri", + "Sam" + ], + "SHORTMONTH": [ + "Jen", + "Hor", + "M\u00e4r", + "Abr", + "Mei", + "Br\u00e1", + "Hei", + "\u00d6ig", + "Her", + "W\u00edm", + "Win", + "Chr" + ], + "fullDate": "EEEE, d. MMMM y", + "longDate": "d. MMMM y", + "medium": "d. MMM y HH:mm:ss", + "mediumDate": "d. MMM y", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CHF", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "wae", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_wal-et.js b/vendor/assets/components/angular-i18n/angular-locale_wal-et.js new file mode 100644 index 000000000..16a842ae4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_wal-et.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u121b\u1208\u12f6", + "\u1243\u121b" + ], + "DAY": [ + "\u12c8\u130b", + "\u1233\u12ed\u1296", + "\u121b\u1246\u1233\u129b", + "\u12a0\u1229\u12cb", + "\u1203\u1219\u1233", + "\u12a0\u122d\u1263", + "\u1244\u122b" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12c8\u130b", + "\u1233\u12ed\u1296", + "\u121b\u1246\u1233\u129b", + "\u12a0\u1229\u12cb", + "\u1203\u1219\u1233", + "\u12a0\u122d\u1263", + "\u1244\u122b" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE\u1365 dd MMMM \u130b\u120b\u1233 y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "wal-et", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_wal.js b/vendor/assets/components/angular-i18n/angular-locale_wal.js new file mode 100644 index 000000000..795c02d2e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_wal.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u121b\u1208\u12f6", + "\u1243\u121b" + ], + "DAY": [ + "\u12c8\u130b", + "\u1233\u12ed\u1296", + "\u121b\u1246\u1233\u129b", + "\u12a0\u1229\u12cb", + "\u1203\u1219\u1233", + "\u12a0\u122d\u1263", + "\u1244\u122b" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12c8\u130b", + "\u1233\u12ed\u1296", + "\u121b\u1246\u1233\u129b", + "\u12a0\u1229\u12cb", + "\u1203\u1219\u1233", + "\u12a0\u122d\u1263", + "\u1244\u122b" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\u12f2\u1234\u121d" + ], + "fullDate": "EEEE\u1365 dd MMMM \u130b\u120b\u1233 y G", + "longDate": "dd MMMM y", + "medium": "dd-MMM-y h:mm:ss a", + "mediumDate": "dd-MMM-y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/yy h:mm a", + "shortDate": "dd/MM/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "Birr", + "DECIMAL_SEP": ".", + "GROUP_SEP": "\u2019", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "wal", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_xh-za.js b/vendor/assets/components/angular-i18n/angular-locale_xh-za.js new file mode 100644 index 000000000..5eeb809a6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_xh-za.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Cawe", + "Mvulo", + "Lwesibini", + "Lwesithathu", + "Lwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "MONTH": [ + "Janyuwari", + "Februwari", + "Matshi", + "Epreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Caw", + "Mvu", + "Bin", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mat", + "Epr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "xh-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_xh.js b/vendor/assets/components/angular-i18n/angular-locale_xh.js new file mode 100644 index 000000000..756a9f774 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_xh.js @@ -0,0 +1,115 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Cawe", + "Mvulo", + "Lwesibini", + "Lwesithathu", + "Lwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "MONTH": [ + "Janyuwari", + "Februwari", + "Matshi", + "Epreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Caw", + "Mvu", + "Bin", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mat", + "Epr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "y MMMM d, EEEE", + "longDate": "y MMMM d", + "medium": "y MMM d HH:mm:ss", + "mediumDate": "y MMM d", + "mediumTime": "HH:mm:ss", + "short": "y-MM-dd HH:mm", + "shortDate": "y-MM-dd", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "xh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_xog-ug.js b/vendor/assets/components/angular-i18n/angular-locale_xog-ug.js new file mode 100644 index 000000000..b62b6b43e --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_xog-ug.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Munkyo", + "Eigulo" + ], + "DAY": [ + "Sabiiti", + "Balaza", + "Owokubili", + "Owokusatu", + "Olokuna", + "Olokutaanu", + "Olomukaaga" + ], + "ERANAMES": [ + "Kulisto nga azilawo", + "Kulisto nga affile" + ], + "ERAS": [ + "AZ", + "AF" + ], + "MONTH": [ + "Janwaliyo", + "Febwaliyo", + "Marisi", + "Apuli", + "Maayi", + "Juuni", + "Julaayi", + "Agusito", + "Sebuttemba", + "Okitobba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Sabi", + "Bala", + "Kubi", + "Kusa", + "Kuna", + "Kuta", + "Muka" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apu", + "Maa", + "Juu", + "Jul", + "Agu", + "Seb", + "Oki", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "xog-ug", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_xog.js b/vendor/assets/components/angular-i18n/angular-locale_xog.js new file mode 100644 index 000000000..801502cda --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_xog.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Munkyo", + "Eigulo" + ], + "DAY": [ + "Sabiiti", + "Balaza", + "Owokubili", + "Owokusatu", + "Olokuna", + "Olokutaanu", + "Olomukaaga" + ], + "ERANAMES": [ + "Kulisto nga azilawo", + "Kulisto nga affile" + ], + "ERAS": [ + "AZ", + "AF" + ], + "MONTH": [ + "Janwaliyo", + "Febwaliyo", + "Marisi", + "Apuli", + "Maayi", + "Juuni", + "Julaayi", + "Agusito", + "Sebuttemba", + "Okitobba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "Sabi", + "Bala", + "Kubi", + "Kusa", + "Kuna", + "Kuta", + "Muka" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apu", + "Maa", + "Juu", + "Jul", + "Agu", + "Seb", + "Oki", + "Nov", + "Des" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "UGX", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "xog", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_yav-cm.js b/vendor/assets/components/angular-i18n/angular-locale_yav-cm.js new file mode 100644 index 000000000..02de268e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_yav-cm.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ki\u025bm\u025b\u0301\u025bm", + "kis\u025b\u0301nd\u025b" + ], + "DAY": [ + "s\u0254\u0301ndi\u025b", + "m\u00f3ndie", + "mu\u00e1ny\u00e1\u014bm\u00f3ndie", + "met\u00fakp\u00ed\u00e1p\u025b", + "k\u00fap\u00e9limet\u00fakpiap\u025b", + "fel\u00e9te", + "s\u00e9sel\u00e9" + ], + "ERANAMES": [ + "katikup\u00eden Y\u00e9suse", + "\u00e9k\u00e9l\u00e9mk\u00fanup\u00ed\u00e9n n" + ], + "ERAS": [ + "k.Y.", + "+J.C." + ], + "MONTH": [ + "pik\u00edt\u00edk\u00edtie, o\u00f3l\u00ed \u00fa kut\u00faan", + "si\u025by\u025b\u0301, o\u00f3li \u00fa k\u00e1nd\u00ed\u025b", + "\u0254ns\u00famb\u0254l, o\u00f3li \u00fa k\u00e1t\u00e1t\u00fa\u025b", + "mesi\u014b, o\u00f3li \u00fa k\u00e9nie", + "ensil, o\u00f3li \u00fa k\u00e1t\u00e1nu\u025b", + "\u0254s\u0254n", + "efute", + "pisuy\u00fa", + "im\u025b\u014b i pu\u0254s", + "im\u025b\u014b i put\u00fak,o\u00f3li \u00fa k\u00e1t\u00ed\u025b", + "makandik\u025b", + "pil\u0254nd\u0254\u0301" + ], + "SHORTDAY": [ + "sd", + "md", + "mw", + "et", + "kl", + "fl", + "ss" + ], + "SHORTMONTH": [ + "o.1", + "o.2", + "o.3", + "o.4", + "o.5", + "o.6", + "o.7", + "o.8", + "o.9", + "o.10", + "o.11", + "o.12" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "yav-cm", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_yav.js b/vendor/assets/components/angular-i18n/angular-locale_yav.js new file mode 100644 index 000000000..d00417a41 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_yav.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ki\u025bm\u025b\u0301\u025bm", + "kis\u025b\u0301nd\u025b" + ], + "DAY": [ + "s\u0254\u0301ndi\u025b", + "m\u00f3ndie", + "mu\u00e1ny\u00e1\u014bm\u00f3ndie", + "met\u00fakp\u00ed\u00e1p\u025b", + "k\u00fap\u00e9limet\u00fakpiap\u025b", + "fel\u00e9te", + "s\u00e9sel\u00e9" + ], + "ERANAMES": [ + "katikup\u00eden Y\u00e9suse", + "\u00e9k\u00e9l\u00e9mk\u00fanup\u00ed\u00e9n n" + ], + "ERAS": [ + "k.Y.", + "+J.C." + ], + "MONTH": [ + "pik\u00edt\u00edk\u00edtie, o\u00f3l\u00ed \u00fa kut\u00faan", + "si\u025by\u025b\u0301, o\u00f3li \u00fa k\u00e1nd\u00ed\u025b", + "\u0254ns\u00famb\u0254l, o\u00f3li \u00fa k\u00e1t\u00e1t\u00fa\u025b", + "mesi\u014b, o\u00f3li \u00fa k\u00e9nie", + "ensil, o\u00f3li \u00fa k\u00e1t\u00e1nu\u025b", + "\u0254s\u0254n", + "efute", + "pisuy\u00fa", + "im\u025b\u014b i pu\u0254s", + "im\u025b\u014b i put\u00fak,o\u00f3li \u00fa k\u00e1t\u00ed\u025b", + "makandik\u025b", + "pil\u0254nd\u0254\u0301" + ], + "SHORTDAY": [ + "sd", + "md", + "mw", + "et", + "kl", + "fl", + "ss" + ], + "SHORTMONTH": [ + "o.1", + "o.2", + "o.3", + "o.4", + "o.5", + "o.6", + "o.7", + "o.8", + "o.9", + "o.10", + "o.11", + "o.12" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y HH:mm:ss", + "mediumDate": "d MMM y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "FCFA", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a0\u00a4", + "posPre": "", + "posSuf": "\u00a0\u00a4" + } + ] + }, + "id": "yav", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_yi-001.js b/vendor/assets/components/angular-i18n/angular-locale_yi-001.js new file mode 100644 index 000000000..1b824e1b3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_yi-001.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05e4\u05d0\u05e8\u05de\u05d9\u05d8\u05d0\u05d2", + "\u05e0\u05d0\u05db\u05de\u05d9\u05d8\u05d0\u05d2" + ], + "DAY": [ + "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7", + "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7", + "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7", + "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da", + "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7", + "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7", + "\u05e9\u05d1\u05ea" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8", + "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8", + "\u05de\u05e2\u05e8\u05e5", + "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc", + "\u05de\u05d9\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8", + "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8" + ], + "SHORTDAY": [ + "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7", + "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7", + "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7", + "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da", + "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7", + "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8", + "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8", + "\u05de\u05e2\u05e8\u05e5", + "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc", + "\u05de\u05d9\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8", + "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8" + ], + "fullDate": "EEEE, d\u05d8\u05df MMMM y", + "longDate": "d\u05d8\u05df MMMM y", + "medium": "d\u05d8\u05df MMM y HH:mm:ss", + "mediumDate": "d\u05d8\u05df MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "yi-001", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_yi.js b/vendor/assets/components/angular-i18n/angular-locale_yi.js new file mode 100644 index 000000000..4436089f4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_yi.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05e4\u05d0\u05e8\u05de\u05d9\u05d8\u05d0\u05d2", + "\u05e0\u05d0\u05db\u05de\u05d9\u05d8\u05d0\u05d2" + ], + "DAY": [ + "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7", + "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7", + "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7", + "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da", + "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7", + "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7", + "\u05e9\u05d1\u05ea" + ], + "ERANAMES": [ + "BCE", + "CE" + ], + "ERAS": [ + "BCE", + "CE" + ], + "MONTH": [ + "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8", + "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8", + "\u05de\u05e2\u05e8\u05e5", + "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc", + "\u05de\u05d9\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8", + "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8" + ], + "SHORTDAY": [ + "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7", + "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7", + "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7", + "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da", + "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7", + "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8", + "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8", + "\u05de\u05e2\u05e8\u05e5", + "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc", + "\u05de\u05d9\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8", + "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8", + "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8" + ], + "fullDate": "EEEE, d\u05d8\u05df MMMM y", + "longDate": "d\u05d8\u05df MMMM y", + "medium": "d\u05d8\u05df MMM y HH:mm:ss", + "mediumDate": "d\u05d8\u05df MMM y", + "mediumTime": "HH:mm:ss", + "short": "dd/MM/yy HH:mm", + "shortDate": "dd/MM/yy", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "yi", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_yo-bj.js b/vendor/assets/components/angular-i18n/angular-locale_yo-bj.js new file mode 100644 index 000000000..f878239da --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_yo-bj.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u00c0\u00e1r\u0254\u0300", + "\u0186\u0300s\u00e1n" + ], + "DAY": [ + "\u0186j\u0254\u0301 \u00c0\u00eck\u00fa", + "\u0186j\u0254\u0301 Aj\u00e9", + "\u0186j\u0254\u0301 \u00ccs\u025b\u0301gun", + "\u0186j\u0254\u0301r\u00fa", + "\u0186j\u0254\u0301b\u0254", + "\u0186j\u0254\u0301 \u0190t\u00ec", + "\u0186j\u0254\u0301 \u00c0b\u00e1m\u025b\u0301ta" + ], + "ERANAMES": [ + "Saju Kristi", + "Lehin Kristi" + ], + "ERAS": [ + "SK", + "LK" + ], + "MONTH": [ + "Osh\u00f9 Sh\u025b\u0301r\u025b\u0301", + "Osh\u00f9 \u00c8r\u00e8l\u00e8", + "Osh\u00f9 \u0190r\u025b\u0300n\u00e0", + "Osh\u00f9 \u00ccgb\u00e9", + "Osh\u00f9 \u0190\u0300bibi", + "Osh\u00f9 \u00d2k\u00fadu", + "Osh\u00f9 Ag\u025bm\u0254", + "Osh\u00f9 \u00d2g\u00fan", + "Osh\u00f9 Owewe", + "Osh\u00f9 \u0186\u0300w\u00e0r\u00e0", + "Osh\u00f9 B\u00e9l\u00fa", + "Osh\u00f9 \u0186\u0300p\u025b\u0300" + ], + "SHORTDAY": [ + "\u00c0\u00eck\u00fa", + "Aj\u00e9", + "\u00ccs\u025b\u0301gun", + "\u0186j\u0254\u0301r\u00fa", + "\u0186j\u0254\u0301b\u0254", + "\u0190t\u00ec", + "\u00c0b\u00e1m\u025b\u0301ta" + ], + "SHORTMONTH": [ + "Sh\u025b\u0301r\u025b\u0301", + "\u00c8r\u00e8l\u00e8", + "\u0190r\u025b\u0300n\u00e0", + "\u00ccgb\u00e9", + "\u0190\u0300bibi", + "\u00d2k\u00fadu", + "Ag\u025bm\u0254", + "\u00d2g\u00fan", + "Owewe", + "\u0186\u0300w\u00e0r\u00e0", + "B\u00e9l\u00fa", + "\u0186\u0300p\u025b\u0300" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "CFA", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "yo-bj", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_yo-ng.js b/vendor/assets/components/angular-i18n/angular-locale_yo-ng.js new file mode 100644 index 000000000..945142831 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_yo-ng.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u00c0\u00e1r\u1ecd\u0300", + "\u1ecc\u0300s\u00e1n" + ], + "DAY": [ + "\u1eccj\u1ecd\u0301 \u00c0\u00eck\u00fa", + "\u1eccj\u1ecd\u0301 Aj\u00e9", + "\u1eccj\u1ecd\u0301 \u00ccs\u1eb9\u0301gun", + "\u1eccj\u1ecd\u0301r\u00fa", + "\u1eccj\u1ecd\u0301b\u1ecd", + "\u1eccj\u1ecd\u0301 \u1eb8t\u00ec", + "\u1eccj\u1ecd\u0301 \u00c0b\u00e1m\u1eb9\u0301ta" + ], + "ERANAMES": [ + "Saju Kristi", + "Lehin Kristi" + ], + "ERAS": [ + "SK", + "LK" + ], + "MONTH": [ + "O\u1e63\u00f9 \u1e62\u1eb9\u0301r\u1eb9\u0301", + "O\u1e63\u00f9 \u00c8r\u00e8l\u00e8", + "O\u1e63\u00f9 \u1eb8r\u1eb9\u0300n\u00e0", + "O\u1e63\u00f9 \u00ccgb\u00e9", + "O\u1e63\u00f9 \u1eb8\u0300bibi", + "O\u1e63\u00f9 \u00d2k\u00fadu", + "O\u1e63\u00f9 Ag\u1eb9m\u1ecd", + "O\u1e63\u00f9 \u00d2g\u00fan", + "O\u1e63\u00f9 Owewe", + "O\u1e63\u00f9 \u1ecc\u0300w\u00e0r\u00e0", + "O\u1e63\u00f9 B\u00e9l\u00fa", + "O\u1e63\u00f9 \u1ecc\u0300p\u1eb9\u0300" + ], + "SHORTDAY": [ + "\u00c0\u00eck\u00fa", + "Aj\u00e9", + "\u00ccs\u1eb9\u0301gun", + "\u1eccj\u1ecd\u0301r\u00fa", + "\u1eccj\u1ecd\u0301b\u1ecd", + "\u1eb8t\u00ec", + "\u00c0b\u00e1m\u1eb9\u0301ta" + ], + "SHORTMONTH": [ + "\u1e62\u1eb9\u0301r\u1eb9\u0301", + "\u00c8r\u00e8l\u00e8", + "\u1eb8r\u1eb9\u0300n\u00e0", + "\u00ccgb\u00e9", + "\u1eb8\u0300bibi", + "\u00d2k\u00fadu", + "Ag\u1eb9m\u1ecd", + "\u00d2g\u00fan", + "Owewe", + "\u1ecc\u0300w\u00e0r\u00e0", + "B\u00e9l\u00fa", + "\u1ecc\u0300p\u1eb9\u0300" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a6", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "yo-ng", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_yo.js b/vendor/assets/components/angular-i18n/angular-locale_yo.js new file mode 100644 index 000000000..e5478c0f8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_yo.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u00c0\u00e1r\u1ecd\u0300", + "\u1ecc\u0300s\u00e1n" + ], + "DAY": [ + "\u1eccj\u1ecd\u0301 \u00c0\u00eck\u00fa", + "\u1eccj\u1ecd\u0301 Aj\u00e9", + "\u1eccj\u1ecd\u0301 \u00ccs\u1eb9\u0301gun", + "\u1eccj\u1ecd\u0301r\u00fa", + "\u1eccj\u1ecd\u0301b\u1ecd", + "\u1eccj\u1ecd\u0301 \u1eb8t\u00ec", + "\u1eccj\u1ecd\u0301 \u00c0b\u00e1m\u1eb9\u0301ta" + ], + "ERANAMES": [ + "Saju Kristi", + "Lehin Kristi" + ], + "ERAS": [ + "SK", + "LK" + ], + "MONTH": [ + "O\u1e63\u00f9 \u1e62\u1eb9\u0301r\u1eb9\u0301", + "O\u1e63\u00f9 \u00c8r\u00e8l\u00e8", + "O\u1e63\u00f9 \u1eb8r\u1eb9\u0300n\u00e0", + "O\u1e63\u00f9 \u00ccgb\u00e9", + "O\u1e63\u00f9 \u1eb8\u0300bibi", + "O\u1e63\u00f9 \u00d2k\u00fadu", + "O\u1e63\u00f9 Ag\u1eb9m\u1ecd", + "O\u1e63\u00f9 \u00d2g\u00fan", + "O\u1e63\u00f9 Owewe", + "O\u1e63\u00f9 \u1ecc\u0300w\u00e0r\u00e0", + "O\u1e63\u00f9 B\u00e9l\u00fa", + "O\u1e63\u00f9 \u1ecc\u0300p\u1eb9\u0300" + ], + "SHORTDAY": [ + "\u00c0\u00eck\u00fa", + "Aj\u00e9", + "\u00ccs\u1eb9\u0301gun", + "\u1eccj\u1ecd\u0301r\u00fa", + "\u1eccj\u1ecd\u0301b\u1ecd", + "\u1eb8t\u00ec", + "\u00c0b\u00e1m\u1eb9\u0301ta" + ], + "SHORTMONTH": [ + "\u1e62\u1eb9\u0301r\u1eb9\u0301", + "\u00c8r\u00e8l\u00e8", + "\u1eb8r\u1eb9\u0300n\u00e0", + "\u00ccgb\u00e9", + "\u1eb8\u0300bibi", + "\u00d2k\u00fadu", + "Ag\u1eb9m\u1ecd", + "\u00d2g\u00fan", + "Owewe", + "\u1ecc\u0300w\u00e0r\u00e0", + "B\u00e9l\u00fa", + "\u1ecc\u0300p\u1eb9\u0300" + ], + "fullDate": "EEEE, d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM y h:mm:ss a", + "mediumDate": "d MMM y", + "mediumTime": "h:mm:ss a", + "short": "dd/MM/y h:mm a", + "shortDate": "dd/MM/y", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20a6", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "yo", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zgh-ma.js b/vendor/assets/components/angular-i18n/angular-locale_zgh-ma.js new file mode 100644 index 000000000..a4c447118 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zgh-ma.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c", + "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c" + ], + "DAY": [ + "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59", + "\u2d30\u2d62\u2d4f\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59", + "\u2d30\u2d3d\u2d55\u2d30\u2d59", + "\u2d30\u2d3d\u2d61\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59" + ], + "ERANAMES": [ + "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30", + "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30" + ], + "ERAS": [ + "\u2d37\u2d30\u2d44", + "\u2d37\u2d3c\u2d44" + ], + "MONTH": [ + "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54", + "\u2d31\u2d55\u2d30\u2d62\u2d55", + "\u2d4e\u2d30\u2d55\u2d5a", + "\u2d49\u2d31\u2d54\u2d49\u2d54", + "\u2d4e\u2d30\u2d62\u2d62\u2d53", + "\u2d62\u2d53\u2d4f\u2d62\u2d53", + "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63", + "\u2d56\u2d53\u2d5b\u2d5c", + "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d3d\u2d5c\u2d53\u2d31\u2d54", + "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54" + ], + "SHORTDAY": [ + "\u2d30\u2d59\u2d30", + "\u2d30\u2d62\u2d4f", + "\u2d30\u2d59\u2d49", + "\u2d30\u2d3d\u2d55", + "\u2d30\u2d3d\u2d61", + "\u2d30\u2d59\u2d49\u2d4e", + "\u2d30\u2d59\u2d49\u2d39" + ], + "SHORTMONTH": [ + "\u2d49\u2d4f\u2d4f", + "\u2d31\u2d55\u2d30", + "\u2d4e\u2d30\u2d55", + "\u2d49\u2d31\u2d54", + "\u2d4e\u2d30\u2d62", + "\u2d62\u2d53\u2d4f", + "\u2d62\u2d53\u2d4d", + "\u2d56\u2d53\u2d5b", + "\u2d5b\u2d53\u2d5c", + "\u2d3d\u2d5c\u2d53", + "\u2d4f\u2d53\u2d61", + "\u2d37\u2d53\u2d4a" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "zgh-ma", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zgh.js b/vendor/assets/components/angular-i18n/angular-locale_zgh.js new file mode 100644 index 000000000..723276b0d --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zgh.js @@ -0,0 +1,123 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +function getDecimals(n) { + n = n + ''; + var i = n.indexOf('.'); + return (i == -1) ? 0 : n.length - i - 1; +} + +function getVF(n, opt_precision) { + var v = opt_precision; + + if (undefined === v) { + v = Math.min(getDecimals(n), 3); + } + + var base = Math.pow(10, v); + var f = ((n * base) | 0) % base; + return {v: v, f: f}; +} + +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c", + "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c" + ], + "DAY": [ + "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59", + "\u2d30\u2d62\u2d4f\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59", + "\u2d30\u2d3d\u2d55\u2d30\u2d59", + "\u2d30\u2d3d\u2d61\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59", + "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59" + ], + "ERANAMES": [ + "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30", + "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30" + ], + "ERAS": [ + "\u2d37\u2d30\u2d44", + "\u2d37\u2d3c\u2d44" + ], + "MONTH": [ + "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54", + "\u2d31\u2d55\u2d30\u2d62\u2d55", + "\u2d4e\u2d30\u2d55\u2d5a", + "\u2d49\u2d31\u2d54\u2d49\u2d54", + "\u2d4e\u2d30\u2d62\u2d62\u2d53", + "\u2d62\u2d53\u2d4f\u2d62\u2d53", + "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63", + "\u2d56\u2d53\u2d5b\u2d5c", + "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d3d\u2d5c\u2d53\u2d31\u2d54", + "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54", + "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54" + ], + "SHORTDAY": [ + "\u2d30\u2d59\u2d30", + "\u2d30\u2d62\u2d4f", + "\u2d30\u2d59\u2d49", + "\u2d30\u2d3d\u2d55", + "\u2d30\u2d3d\u2d61", + "\u2d30\u2d59\u2d49\u2d4e", + "\u2d30\u2d59\u2d49\u2d39" + ], + "SHORTMONTH": [ + "\u2d49\u2d4f\u2d4f", + "\u2d31\u2d55\u2d30", + "\u2d4e\u2d30\u2d55", + "\u2d49\u2d31\u2d54", + "\u2d4e\u2d30\u2d62", + "\u2d62\u2d53\u2d4f", + "\u2d62\u2d53\u2d4d", + "\u2d56\u2d53\u2d5b", + "\u2d5b\u2d53\u2d5c", + "\u2d3d\u2d5c\u2d53", + "\u2d4f\u2d53\u2d61", + "\u2d37\u2d53\u2d4a" + ], + "fullDate": "EEEE d MMMM y", + "longDate": "d MMMM y", + "medium": "d MMM, y HH:mm:ss", + "mediumDate": "d MMM, y", + "mediumTime": "HH:mm:ss", + "short": "d/M/y HH:mm", + "shortDate": "d/M/y", + "shortTime": "HH:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "dh", + "DECIMAL_SEP": ",", + "GROUP_SEP": "\u00a0", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "-", + "negSuf": "\u00a4", + "posPre": "", + "posSuf": "\u00a4" + } + ] + }, + "id": "zgh", + "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-cn.js b/vendor/assets/components/angular-i18n/angular-locale_zh-cn.js new file mode 100644 index 000000000..c069d2c3c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-cn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "MONTH": [ + "\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "yy/M/d ah:mm", + "shortDate": "yy/M/d", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "zh-cn", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hans-cn.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-cn.js new file mode 100644 index 000000000..3914a0090 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-cn.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "MONTH": [ + "\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "yy/M/d ah:mm", + "shortDate": "yy/M/d", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "zh-hans-cn", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hans-hk.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-hk.js new file mode 100644 index 000000000..e2d3823f6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-hk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "MONTH": [ + "\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "d/M/yy ah:mm", + "shortDate": "d/M/yy", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hans-hk", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hans-mo.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-mo.js new file mode 100644 index 000000000..40b5d078c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-mo.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "MONTH": [ + "\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "d/M/yy ah:mm", + "shortDate": "d/M/yy", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MOP", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hans-mo", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hans-sg.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-sg.js new file mode 100644 index 000000000..cdc6cf4a9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hans-sg.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "MONTH": [ + "\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "dd/MM/yy ahh:mm", + "shortDate": "dd/MM/yy", + "shortTime": "ahh:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hans-sg", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hans.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hans.js new file mode 100644 index 000000000..e547e4738 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hans.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "MONTH": [ + "\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "yy/M/d ah:mm", + "shortDate": "yy/M/d", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u20ac", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "zh-hans", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hant-hk.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hant-hk.js new file mode 100644 index 000000000..5cbe087fc --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hant-hk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "d/M/yy ah:mm", + "shortDate": "d/M/yy", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hant-hk", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hant-mo.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hant-mo.js new file mode 100644 index 000000000..2ebabcae1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hant-mo.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74MM\u6708dd\u65e5EEEE", + "longDate": "y\u5e74MM\u6708dd\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "yy\u5e74M\u6708d\u65e5 ah:mm", + "shortDate": "yy\u5e74M\u6708d\u65e5", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "MOP", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hant-mo", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hant-tw.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hant-tw.js new file mode 100644 index 000000000..622c6d38f --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hant-tw.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u897f\u5143\u524d", + "\u897f\u5143" + ], + "ERAS": [ + "\u897f\u5143\u524d", + "\u897f\u5143" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5 EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "y/M/d ah:mm", + "shortDate": "y/M/d", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "NT$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hant-tw", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hant.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hant.js new file mode 100644 index 000000000..2f78853ac --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hant.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u897f\u5143\u524d", + "\u897f\u5143" + ], + "ERAS": [ + "\u897f\u5143\u524d", + "\u897f\u5143" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5 EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "y/M/d ah:mm", + "shortDate": "y/M/d", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "NT$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hant", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-hk.js b/vendor/assets/components/angular-i18n/angular-locale_zh-hk.js new file mode 100644 index 000000000..b1d73a9e5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-hk.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "d/M/yy ah:mm", + "shortDate": "d/M/yy", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-hk", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh-tw.js b/vendor/assets/components/angular-i18n/angular-locale_zh-tw.js new file mode 100644 index 000000000..9ade2b5b7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh-tw.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u897f\u5143\u524d", + "\u897f\u5143" + ], + "ERAS": [ + "\u897f\u5143\u524d", + "\u897f\u5143" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5 EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "y/M/d ah:mm", + "shortDate": "y/M/d", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "NT$", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zh-tw", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zh.js b/vendor/assets/components/angular-i18n/angular-locale_zh.js new file mode 100644 index 000000000..7bf7c1104 --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zh.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "ERANAMES": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "ERAS": [ + "\u516c\u5143\u524d", + "\u516c\u5143" + ], + "MONTH": [ + "\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "fullDate": "y\u5e74M\u6708d\u65e5EEEE", + "longDate": "y\u5e74M\u6708d\u65e5", + "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss", + "mediumDate": "y\u5e74M\u6708d\u65e5", + "mediumTime": "ah:mm:ss", + "short": "yy/M/d ah:mm", + "shortDate": "yy/M/d", + "shortTime": "ah:mm" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "\u00a5", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4\u00a0-", + "negSuf": "", + "posPre": "\u00a4\u00a0", + "posSuf": "" + } + ] + }, + "id": "zh", + "pluralCat": function(n, opt_precision) { return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zu-za.js b/vendor/assets/components/angular-i18n/angular-locale_zu-za.js new file mode 100644 index 000000000..3a76492be --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zu-za.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Ekuseni", + "Ntambama" + ], + "DAY": [ + "Sonto", + "Msombuluko", + "Lwesibili", + "Lwesithathu", + "Lwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "ERANAMES": [ + "BC", + "AD" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januwari", + "Februwari", + "Mashi", + "Apreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septhemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mas", + "Apr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zu-za", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/angular-locale_zu.js b/vendor/assets/components/angular-i18n/angular-locale_zu.js new file mode 100644 index 000000000..687f8fd2c --- /dev/null +++ b/vendor/assets/components/angular-i18n/angular-locale_zu.js @@ -0,0 +1,105 @@ +'use strict'; +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "Ekuseni", + "Ntambama" + ], + "DAY": [ + "Sonto", + "Msombuluko", + "Lwesibili", + "Lwesithathu", + "Lwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "ERANAMES": [ + "BC", + "AD" + ], + "ERAS": [ + "BC", + "AD" + ], + "MONTH": [ + "Januwari", + "Februwari", + "Mashi", + "Apreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septhemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mas", + "Apr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "Dis" + ], + "fullDate": "EEEE, MMMM d, y", + "longDate": "MMMM d, y", + "medium": "MMM d, y h:mm:ss a", + "mediumDate": "MMM d, y", + "mediumTime": "h:mm:ss a", + "short": "M/d/yy h:mm a", + "shortDate": "M/d/yy", + "shortTime": "h:mm a" + }, + "NUMBER_FORMATS": { + "CURRENCY_SYM": "R", + "DECIMAL_SEP": ".", + "GROUP_SEP": ",", + "PATTERNS": [ + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "gSize": 3, + "lgSize": 3, + "maxFrac": 2, + "minFrac": 2, + "minInt": 1, + "negPre": "\u00a4-", + "negSuf": "", + "posPre": "\u00a4", + "posSuf": "" + } + ] + }, + "id": "zu", + "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} +}); +}]); diff --git a/vendor/assets/components/angular-i18n/ar-001.js b/vendor/assets/components/angular-i18n/ar-001.js new file mode 100644 index 000000000..91159a8c2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-001.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-001'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-ae.js b/vendor/assets/components/angular-i18n/ar-ae.js new file mode 100644 index 000000000..43ea9f82f --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-ae.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-ae'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-bh.js b/vendor/assets/components/angular-i18n/ar-bh.js new file mode 100644 index 000000000..31a78ebd6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-bh.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-bh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-dj.js b/vendor/assets/components/angular-i18n/ar-dj.js new file mode 100644 index 000000000..8f70242ba --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-dj.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-dj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-dz.js b/vendor/assets/components/angular-i18n/ar-dz.js new file mode 100644 index 000000000..2b7681c63 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-dz.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-dz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-eg.js b/vendor/assets/components/angular-i18n/ar-eg.js new file mode 100644 index 000000000..13d5c1323 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-eg.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-eg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-eh.js b/vendor/assets/components/angular-i18n/ar-eh.js new file mode 100644 index 000000000..d7afda494 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-eh.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-eh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-er.js b/vendor/assets/components/angular-i18n/ar-er.js new file mode 100644 index 000000000..d3f786aff --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-er.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-er'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-il.js b/vendor/assets/components/angular-i18n/ar-il.js new file mode 100644 index 000000000..fc64c1e4a --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-il.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-il'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-iq.js b/vendor/assets/components/angular-i18n/ar-iq.js new file mode 100644 index 000000000..ef12c51c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-iq.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-iq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-jo.js b/vendor/assets/components/angular-i18n/ar-jo.js new file mode 100644 index 000000000..5db8d1e3e --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-jo.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-jo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-km.js b/vendor/assets/components/angular-i18n/ar-km.js new file mode 100644 index 000000000..59c785427 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-km.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-km'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-kw.js b/vendor/assets/components/angular-i18n/ar-kw.js new file mode 100644 index 000000000..8b73cfbe7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-kw.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-kw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-lb.js b/vendor/assets/components/angular-i18n/ar-lb.js new file mode 100644 index 000000000..5ed58d390 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-lb.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-lb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-ly.js b/vendor/assets/components/angular-i18n/ar-ly.js new file mode 100644 index 000000000..9d4a648cf --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-ly.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-ly'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-ma.js b/vendor/assets/components/angular-i18n/ar-ma.js new file mode 100644 index 000000000..aa8ccc73c --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-ma.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-ma'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-mr.js b/vendor/assets/components/angular-i18n/ar-mr.js new file mode 100644 index 000000000..e90227cc0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-mr.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-mr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-om.js b/vendor/assets/components/angular-i18n/ar-om.js new file mode 100644 index 000000000..644732549 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-om.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-om'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-ps.js b/vendor/assets/components/angular-i18n/ar-ps.js new file mode 100644 index 000000000..1765ea0f5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-ps.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-ps'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-qa.js b/vendor/assets/components/angular-i18n/ar-qa.js new file mode 100644 index 000000000..4ea5e956b --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-qa.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-qa'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-sa.js b/vendor/assets/components/angular-i18n/ar-sa.js new file mode 100644 index 000000000..6a9461e85 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-sa.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-sa'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-sd.js b/vendor/assets/components/angular-i18n/ar-sd.js new file mode 100644 index 000000000..057ca9cae --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-sd.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-sd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-so.js b/vendor/assets/components/angular-i18n/ar-so.js new file mode 100644 index 000000000..0125d0a9d --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-so.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-so'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-ss.js b/vendor/assets/components/angular-i18n/ar-ss.js new file mode 100644 index 000000000..fe23d3c6a --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-ss.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-ss'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-sy.js b/vendor/assets/components/angular-i18n/ar-sy.js new file mode 100644 index 000000000..369cebb42 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-sy.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-sy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-td.js b/vendor/assets/components/angular-i18n/ar-td.js new file mode 100644 index 000000000..8da6bbed8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-td.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-td'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-tn.js b/vendor/assets/components/angular-i18n/ar-tn.js new file mode 100644 index 000000000..e92f8a942 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-tn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-tn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar-ye.js b/vendor/assets/components/angular-i18n/ar-ye.js new file mode 100644 index 000000000..db8924272 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar-ye.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar-ye'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ar.js b/vendor/assets/components/angular-i18n/ar.js new file mode 100644 index 000000000..77be65633 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ar.js @@ -0,0 +1,2 @@ +require('./angular-locale_ar'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/as-in.js b/vendor/assets/components/angular-i18n/as-in.js new file mode 100644 index 000000000..354e88a3a --- /dev/null +++ b/vendor/assets/components/angular-i18n/as-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_as-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/as.js b/vendor/assets/components/angular-i18n/as.js new file mode 100644 index 000000000..a0dc6ef7b --- /dev/null +++ b/vendor/assets/components/angular-i18n/as.js @@ -0,0 +1,2 @@ +require('./angular-locale_as'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/asa-tz.js b/vendor/assets/components/angular-i18n/asa-tz.js new file mode 100644 index 000000000..f6eba1695 --- /dev/null +++ b/vendor/assets/components/angular-i18n/asa-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_asa-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/asa.js b/vendor/assets/components/angular-i18n/asa.js new file mode 100644 index 000000000..1de091c72 --- /dev/null +++ b/vendor/assets/components/angular-i18n/asa.js @@ -0,0 +1,2 @@ +require('./angular-locale_asa'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ast-es.js b/vendor/assets/components/angular-i18n/ast-es.js new file mode 100644 index 000000000..32097317c --- /dev/null +++ b/vendor/assets/components/angular-i18n/ast-es.js @@ -0,0 +1,2 @@ +require('./angular-locale_ast-es'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ast.js b/vendor/assets/components/angular-i18n/ast.js new file mode 100644 index 000000000..f50b3f222 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ast.js @@ -0,0 +1,2 @@ +require('./angular-locale_ast'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/az-cyrl-az.js b/vendor/assets/components/angular-i18n/az-cyrl-az.js new file mode 100644 index 000000000..7bc167cc4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/az-cyrl-az.js @@ -0,0 +1,2 @@ +require('./angular-locale_az-cyrl-az'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/az-cyrl.js b/vendor/assets/components/angular-i18n/az-cyrl.js new file mode 100644 index 000000000..a80186cad --- /dev/null +++ b/vendor/assets/components/angular-i18n/az-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_az-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/az-latn-az.js b/vendor/assets/components/angular-i18n/az-latn-az.js new file mode 100644 index 000000000..f16dd48f4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/az-latn-az.js @@ -0,0 +1,2 @@ +require('./angular-locale_az-latn-az'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/az-latn.js b/vendor/assets/components/angular-i18n/az-latn.js new file mode 100644 index 000000000..76d43b232 --- /dev/null +++ b/vendor/assets/components/angular-i18n/az-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_az-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/az.js b/vendor/assets/components/angular-i18n/az.js new file mode 100644 index 000000000..060158e27 --- /dev/null +++ b/vendor/assets/components/angular-i18n/az.js @@ -0,0 +1,2 @@ +require('./angular-locale_az'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bas-cm.js b/vendor/assets/components/angular-i18n/bas-cm.js new file mode 100644 index 000000000..718fda3da --- /dev/null +++ b/vendor/assets/components/angular-i18n/bas-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_bas-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bas.js b/vendor/assets/components/angular-i18n/bas.js new file mode 100644 index 000000000..2e0431d07 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bas.js @@ -0,0 +1,2 @@ +require('./angular-locale_bas'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/be-by.js b/vendor/assets/components/angular-i18n/be-by.js new file mode 100644 index 000000000..b20744dd6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/be-by.js @@ -0,0 +1,2 @@ +require('./angular-locale_be-by'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/be.js b/vendor/assets/components/angular-i18n/be.js new file mode 100644 index 000000000..e3dcd94cd --- /dev/null +++ b/vendor/assets/components/angular-i18n/be.js @@ -0,0 +1,2 @@ +require('./angular-locale_be'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bem-zm.js b/vendor/assets/components/angular-i18n/bem-zm.js new file mode 100644 index 000000000..525185f89 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bem-zm.js @@ -0,0 +1,2 @@ +require('./angular-locale_bem-zm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bem.js b/vendor/assets/components/angular-i18n/bem.js new file mode 100644 index 000000000..ca0eccd41 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bem.js @@ -0,0 +1,2 @@ +require('./angular-locale_bem'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bez-tz.js b/vendor/assets/components/angular-i18n/bez-tz.js new file mode 100644 index 000000000..5871a5ed2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bez-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_bez-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bez.js b/vendor/assets/components/angular-i18n/bez.js new file mode 100644 index 000000000..7fd7301cb --- /dev/null +++ b/vendor/assets/components/angular-i18n/bez.js @@ -0,0 +1,2 @@ +require('./angular-locale_bez'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bg-bg.js b/vendor/assets/components/angular-i18n/bg-bg.js new file mode 100644 index 000000000..650dac67d --- /dev/null +++ b/vendor/assets/components/angular-i18n/bg-bg.js @@ -0,0 +1,2 @@ +require('./angular-locale_bg-bg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bg.js b/vendor/assets/components/angular-i18n/bg.js new file mode 100644 index 000000000..96cbe2c45 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bg.js @@ -0,0 +1,2 @@ +require('./angular-locale_bg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bm-latn-ml.js b/vendor/assets/components/angular-i18n/bm-latn-ml.js new file mode 100644 index 000000000..f63dd2225 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bm-latn-ml.js @@ -0,0 +1,2 @@ +require('./angular-locale_bm-latn-ml'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bm-latn.js b/vendor/assets/components/angular-i18n/bm-latn.js new file mode 100644 index 000000000..cac775489 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bm-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_bm-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bm-ml.js b/vendor/assets/components/angular-i18n/bm-ml.js new file mode 100644 index 000000000..08b368a3f --- /dev/null +++ b/vendor/assets/components/angular-i18n/bm-ml.js @@ -0,0 +1,2 @@ +require('./angular-locale_bm-ml'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bm.js b/vendor/assets/components/angular-i18n/bm.js new file mode 100644 index 000000000..ab00e0525 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bm.js @@ -0,0 +1,2 @@ +require('./angular-locale_bm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bn-bd.js b/vendor/assets/components/angular-i18n/bn-bd.js new file mode 100644 index 000000000..f7af058b2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bn-bd.js @@ -0,0 +1,2 @@ +require('./angular-locale_bn-bd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bn-in.js b/vendor/assets/components/angular-i18n/bn-in.js new file mode 100644 index 000000000..c33513d05 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bn-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_bn-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bn.js b/vendor/assets/components/angular-i18n/bn.js new file mode 100644 index 000000000..b52356a5a --- /dev/null +++ b/vendor/assets/components/angular-i18n/bn.js @@ -0,0 +1,2 @@ +require('./angular-locale_bn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bo-cn.js b/vendor/assets/components/angular-i18n/bo-cn.js new file mode 100644 index 000000000..bab64ddbe --- /dev/null +++ b/vendor/assets/components/angular-i18n/bo-cn.js @@ -0,0 +1,2 @@ +require('./angular-locale_bo-cn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bo-in.js b/vendor/assets/components/angular-i18n/bo-in.js new file mode 100644 index 000000000..d7ed723b5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bo-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_bo-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bo.js b/vendor/assets/components/angular-i18n/bo.js new file mode 100644 index 000000000..4e16d9f2d --- /dev/null +++ b/vendor/assets/components/angular-i18n/bo.js @@ -0,0 +1,2 @@ +require('./angular-locale_bo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bower.json b/vendor/assets/components/angular-i18n/bower.json new file mode 100644 index 000000000..3ec099f14 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bower.json @@ -0,0 +1,10 @@ +{ + "name": "angular-i18n", + "version": "1.3.15", + "ignore": [ + "**/.*", + "node_modules", + "components", + "precommit.sh" + ] +} diff --git a/vendor/assets/components/angular-i18n/br-fr.js b/vendor/assets/components/angular-i18n/br-fr.js new file mode 100644 index 000000000..4b863112c --- /dev/null +++ b/vendor/assets/components/angular-i18n/br-fr.js @@ -0,0 +1,2 @@ +require('./angular-locale_br-fr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/br.js b/vendor/assets/components/angular-i18n/br.js new file mode 100644 index 000000000..cdf4e361c --- /dev/null +++ b/vendor/assets/components/angular-i18n/br.js @@ -0,0 +1,2 @@ +require('./angular-locale_br'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/brx-in.js b/vendor/assets/components/angular-i18n/brx-in.js new file mode 100644 index 000000000..545938594 --- /dev/null +++ b/vendor/assets/components/angular-i18n/brx-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_brx-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/brx.js b/vendor/assets/components/angular-i18n/brx.js new file mode 100644 index 000000000..d28162ad4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/brx.js @@ -0,0 +1,2 @@ +require('./angular-locale_brx'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bs-cyrl-ba.js b/vendor/assets/components/angular-i18n/bs-cyrl-ba.js new file mode 100644 index 000000000..f6c0946f2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bs-cyrl-ba.js @@ -0,0 +1,2 @@ +require('./angular-locale_bs-cyrl-ba'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bs-cyrl.js b/vendor/assets/components/angular-i18n/bs-cyrl.js new file mode 100644 index 000000000..f6c4c552c --- /dev/null +++ b/vendor/assets/components/angular-i18n/bs-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_bs-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bs-latn-ba.js b/vendor/assets/components/angular-i18n/bs-latn-ba.js new file mode 100644 index 000000000..90977c13d --- /dev/null +++ b/vendor/assets/components/angular-i18n/bs-latn-ba.js @@ -0,0 +1,2 @@ +require('./angular-locale_bs-latn-ba'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bs-latn.js b/vendor/assets/components/angular-i18n/bs-latn.js new file mode 100644 index 000000000..edcae616a --- /dev/null +++ b/vendor/assets/components/angular-i18n/bs-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_bs-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/bs.js b/vendor/assets/components/angular-i18n/bs.js new file mode 100644 index 000000000..05eb994e0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/bs.js @@ -0,0 +1,2 @@ +require('./angular-locale_bs'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/byn-er.js b/vendor/assets/components/angular-i18n/byn-er.js new file mode 100644 index 000000000..ece0e4f43 --- /dev/null +++ b/vendor/assets/components/angular-i18n/byn-er.js @@ -0,0 +1,2 @@ +require('./angular-locale_byn-er'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/byn.js b/vendor/assets/components/angular-i18n/byn.js new file mode 100644 index 000000000..c4e3a9b53 --- /dev/null +++ b/vendor/assets/components/angular-i18n/byn.js @@ -0,0 +1,2 @@ +require('./angular-locale_byn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ca-ad.js b/vendor/assets/components/angular-i18n/ca-ad.js new file mode 100644 index 000000000..69a8c4154 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ca-ad.js @@ -0,0 +1,2 @@ +require('./angular-locale_ca-ad'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ca-es-valencia.js b/vendor/assets/components/angular-i18n/ca-es-valencia.js new file mode 100644 index 000000000..114b84263 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ca-es-valencia.js @@ -0,0 +1,2 @@ +require('./angular-locale_ca-es-valencia'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ca-es.js b/vendor/assets/components/angular-i18n/ca-es.js new file mode 100644 index 000000000..dfcd3b0ea --- /dev/null +++ b/vendor/assets/components/angular-i18n/ca-es.js @@ -0,0 +1,2 @@ +require('./angular-locale_ca-es'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ca-fr.js b/vendor/assets/components/angular-i18n/ca-fr.js new file mode 100644 index 000000000..43b0ca774 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ca-fr.js @@ -0,0 +1,2 @@ +require('./angular-locale_ca-fr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ca-it.js b/vendor/assets/components/angular-i18n/ca-it.js new file mode 100644 index 000000000..f8835bdd8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ca-it.js @@ -0,0 +1,2 @@ +require('./angular-locale_ca-it'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ca.js b/vendor/assets/components/angular-i18n/ca.js new file mode 100644 index 000000000..c0eb7572c --- /dev/null +++ b/vendor/assets/components/angular-i18n/ca.js @@ -0,0 +1,2 @@ +require('./angular-locale_ca'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/cgg-ug.js b/vendor/assets/components/angular-i18n/cgg-ug.js new file mode 100644 index 000000000..94734a90e --- /dev/null +++ b/vendor/assets/components/angular-i18n/cgg-ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_cgg-ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/cgg.js b/vendor/assets/components/angular-i18n/cgg.js new file mode 100644 index 000000000..a58481b45 --- /dev/null +++ b/vendor/assets/components/angular-i18n/cgg.js @@ -0,0 +1,2 @@ +require('./angular-locale_cgg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/chr-us.js b/vendor/assets/components/angular-i18n/chr-us.js new file mode 100644 index 000000000..ad4cdda6a --- /dev/null +++ b/vendor/assets/components/angular-i18n/chr-us.js @@ -0,0 +1,2 @@ +require('./angular-locale_chr-us'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/chr.js b/vendor/assets/components/angular-i18n/chr.js new file mode 100644 index 000000000..feb8ea094 --- /dev/null +++ b/vendor/assets/components/angular-i18n/chr.js @@ -0,0 +1,2 @@ +require('./angular-locale_chr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb-arab-iq.js b/vendor/assets/components/angular-i18n/ckb-arab-iq.js new file mode 100644 index 000000000..618718fd8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb-arab-iq.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb-arab-iq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb-arab-ir.js b/vendor/assets/components/angular-i18n/ckb-arab-ir.js new file mode 100644 index 000000000..ba97a2994 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb-arab-ir.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb-arab-ir'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb-arab.js b/vendor/assets/components/angular-i18n/ckb-arab.js new file mode 100644 index 000000000..762a6e611 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb-arab.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb-arab'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb-iq.js b/vendor/assets/components/angular-i18n/ckb-iq.js new file mode 100644 index 000000000..526fa8f1c --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb-iq.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb-iq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb-ir.js b/vendor/assets/components/angular-i18n/ckb-ir.js new file mode 100644 index 000000000..f56e5e8a8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb-ir.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb-ir'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb-latn-iq.js b/vendor/assets/components/angular-i18n/ckb-latn-iq.js new file mode 100644 index 000000000..e6067a5b7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb-latn-iq.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb-latn-iq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb-latn.js b/vendor/assets/components/angular-i18n/ckb-latn.js new file mode 100644 index 000000000..bbe841eee --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ckb.js b/vendor/assets/components/angular-i18n/ckb.js new file mode 100644 index 000000000..e75f0ac51 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ckb.js @@ -0,0 +1,2 @@ +require('./angular-locale_ckb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/cs-cz.js b/vendor/assets/components/angular-i18n/cs-cz.js new file mode 100644 index 000000000..c089a0a12 --- /dev/null +++ b/vendor/assets/components/angular-i18n/cs-cz.js @@ -0,0 +1,2 @@ +require('./angular-locale_cs-cz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/cs.js b/vendor/assets/components/angular-i18n/cs.js new file mode 100644 index 000000000..4305359e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/cs.js @@ -0,0 +1,2 @@ +require('./angular-locale_cs'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/cy-gb.js b/vendor/assets/components/angular-i18n/cy-gb.js new file mode 100644 index 000000000..6420a31f9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/cy-gb.js @@ -0,0 +1,2 @@ +require('./angular-locale_cy-gb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/cy.js b/vendor/assets/components/angular-i18n/cy.js new file mode 100644 index 000000000..1f1f1a952 --- /dev/null +++ b/vendor/assets/components/angular-i18n/cy.js @@ -0,0 +1,2 @@ +require('./angular-locale_cy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/da-dk.js b/vendor/assets/components/angular-i18n/da-dk.js new file mode 100644 index 000000000..4c94dcabe --- /dev/null +++ b/vendor/assets/components/angular-i18n/da-dk.js @@ -0,0 +1,2 @@ +require('./angular-locale_da-dk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/da-gl.js b/vendor/assets/components/angular-i18n/da-gl.js new file mode 100644 index 000000000..62e5e1a15 --- /dev/null +++ b/vendor/assets/components/angular-i18n/da-gl.js @@ -0,0 +1,2 @@ +require('./angular-locale_da-gl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/da.js b/vendor/assets/components/angular-i18n/da.js new file mode 100644 index 000000000..6dddcd149 --- /dev/null +++ b/vendor/assets/components/angular-i18n/da.js @@ -0,0 +1,2 @@ +require('./angular-locale_da'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dav-ke.js b/vendor/assets/components/angular-i18n/dav-ke.js new file mode 100644 index 000000000..981bdb808 --- /dev/null +++ b/vendor/assets/components/angular-i18n/dav-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_dav-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dav.js b/vendor/assets/components/angular-i18n/dav.js new file mode 100644 index 000000000..63e692892 --- /dev/null +++ b/vendor/assets/components/angular-i18n/dav.js @@ -0,0 +1,2 @@ +require('./angular-locale_dav'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/de-at.js b/vendor/assets/components/angular-i18n/de-at.js new file mode 100644 index 000000000..eb85f17b4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/de-at.js @@ -0,0 +1,2 @@ +require('./angular-locale_de-at'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/de-be.js b/vendor/assets/components/angular-i18n/de-be.js new file mode 100644 index 000000000..f72d0910f --- /dev/null +++ b/vendor/assets/components/angular-i18n/de-be.js @@ -0,0 +1,2 @@ +require('./angular-locale_de-be'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/de-ch.js b/vendor/assets/components/angular-i18n/de-ch.js new file mode 100644 index 000000000..92002857b --- /dev/null +++ b/vendor/assets/components/angular-i18n/de-ch.js @@ -0,0 +1,2 @@ +require('./angular-locale_de-ch'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/de-de.js b/vendor/assets/components/angular-i18n/de-de.js new file mode 100644 index 000000000..fa86f946e --- /dev/null +++ b/vendor/assets/components/angular-i18n/de-de.js @@ -0,0 +1,2 @@ +require('./angular-locale_de-de'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/de-li.js b/vendor/assets/components/angular-i18n/de-li.js new file mode 100644 index 000000000..7c7ab9ddb --- /dev/null +++ b/vendor/assets/components/angular-i18n/de-li.js @@ -0,0 +1,2 @@ +require('./angular-locale_de-li'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/de-lu.js b/vendor/assets/components/angular-i18n/de-lu.js new file mode 100644 index 000000000..88bdaa5bc --- /dev/null +++ b/vendor/assets/components/angular-i18n/de-lu.js @@ -0,0 +1,2 @@ +require('./angular-locale_de-lu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/de.js b/vendor/assets/components/angular-i18n/de.js new file mode 100644 index 000000000..5885273e6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/de.js @@ -0,0 +1,2 @@ +require('./angular-locale_de'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dje-ne.js b/vendor/assets/components/angular-i18n/dje-ne.js new file mode 100644 index 000000000..6ccdd2c1d --- /dev/null +++ b/vendor/assets/components/angular-i18n/dje-ne.js @@ -0,0 +1,2 @@ +require('./angular-locale_dje-ne'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dje.js b/vendor/assets/components/angular-i18n/dje.js new file mode 100644 index 000000000..ba2c7136f --- /dev/null +++ b/vendor/assets/components/angular-i18n/dje.js @@ -0,0 +1,2 @@ +require('./angular-locale_dje'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dsb-de.js b/vendor/assets/components/angular-i18n/dsb-de.js new file mode 100644 index 000000000..4d2e9b69c --- /dev/null +++ b/vendor/assets/components/angular-i18n/dsb-de.js @@ -0,0 +1,2 @@ +require('./angular-locale_dsb-de'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dsb.js b/vendor/assets/components/angular-i18n/dsb.js new file mode 100644 index 000000000..bf7030c32 --- /dev/null +++ b/vendor/assets/components/angular-i18n/dsb.js @@ -0,0 +1,2 @@ +require('./angular-locale_dsb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dua-cm.js b/vendor/assets/components/angular-i18n/dua-cm.js new file mode 100644 index 000000000..7ffbdc1be --- /dev/null +++ b/vendor/assets/components/angular-i18n/dua-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_dua-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dua.js b/vendor/assets/components/angular-i18n/dua.js new file mode 100644 index 000000000..2dea5c4e1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/dua.js @@ -0,0 +1,2 @@ +require('./angular-locale_dua'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dyo-sn.js b/vendor/assets/components/angular-i18n/dyo-sn.js new file mode 100644 index 000000000..4b5d86544 --- /dev/null +++ b/vendor/assets/components/angular-i18n/dyo-sn.js @@ -0,0 +1,2 @@ +require('./angular-locale_dyo-sn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dyo.js b/vendor/assets/components/angular-i18n/dyo.js new file mode 100644 index 000000000..eae4e7975 --- /dev/null +++ b/vendor/assets/components/angular-i18n/dyo.js @@ -0,0 +1,2 @@ +require('./angular-locale_dyo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dz-bt.js b/vendor/assets/components/angular-i18n/dz-bt.js new file mode 100644 index 000000000..8708e8d69 --- /dev/null +++ b/vendor/assets/components/angular-i18n/dz-bt.js @@ -0,0 +1,2 @@ +require('./angular-locale_dz-bt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/dz.js b/vendor/assets/components/angular-i18n/dz.js new file mode 100644 index 000000000..027436d1f --- /dev/null +++ b/vendor/assets/components/angular-i18n/dz.js @@ -0,0 +1,2 @@ +require('./angular-locale_dz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ebu-ke.js b/vendor/assets/components/angular-i18n/ebu-ke.js new file mode 100644 index 000000000..9a62ad24d --- /dev/null +++ b/vendor/assets/components/angular-i18n/ebu-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_ebu-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ebu.js b/vendor/assets/components/angular-i18n/ebu.js new file mode 100644 index 000000000..b26a43ee3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ebu.js @@ -0,0 +1,2 @@ +require('./angular-locale_ebu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ee-gh.js b/vendor/assets/components/angular-i18n/ee-gh.js new file mode 100644 index 000000000..d91a5ece3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ee-gh.js @@ -0,0 +1,2 @@ +require('./angular-locale_ee-gh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ee-tg.js b/vendor/assets/components/angular-i18n/ee-tg.js new file mode 100644 index 000000000..c865e8d3d --- /dev/null +++ b/vendor/assets/components/angular-i18n/ee-tg.js @@ -0,0 +1,2 @@ +require('./angular-locale_ee-tg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ee.js b/vendor/assets/components/angular-i18n/ee.js new file mode 100644 index 000000000..a384e3c97 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ee.js @@ -0,0 +1,2 @@ +require('./angular-locale_ee'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/el-cy.js b/vendor/assets/components/angular-i18n/el-cy.js new file mode 100644 index 000000000..5327fe8db --- /dev/null +++ b/vendor/assets/components/angular-i18n/el-cy.js @@ -0,0 +1,2 @@ +require('./angular-locale_el-cy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/el-gr.js b/vendor/assets/components/angular-i18n/el-gr.js new file mode 100644 index 000000000..240a4c371 --- /dev/null +++ b/vendor/assets/components/angular-i18n/el-gr.js @@ -0,0 +1,2 @@ +require('./angular-locale_el-gr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/el.js b/vendor/assets/components/angular-i18n/el.js new file mode 100644 index 000000000..9ae84762d --- /dev/null +++ b/vendor/assets/components/angular-i18n/el.js @@ -0,0 +1,2 @@ +require('./angular-locale_el'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-001.js b/vendor/assets/components/angular-i18n/en-001.js new file mode 100644 index 000000000..fc0278e6b --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-001.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-001'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-150.js b/vendor/assets/components/angular-i18n/en-150.js new file mode 100644 index 000000000..b7f8ce004 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-150.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-150'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ag.js b/vendor/assets/components/angular-i18n/en-ag.js new file mode 100644 index 000000000..3492535e1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ag.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ag'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ai.js b/vendor/assets/components/angular-i18n/en-ai.js new file mode 100644 index 000000000..356ab841f --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ai.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ai'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-as.js b/vendor/assets/components/angular-i18n/en-as.js new file mode 100644 index 000000000..5c0419086 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-as.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-as'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-au.js b/vendor/assets/components/angular-i18n/en-au.js new file mode 100644 index 000000000..5dfed62bd --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-au.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-au'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-bb.js b/vendor/assets/components/angular-i18n/en-bb.js new file mode 100644 index 000000000..db360a074 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-bb.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-bb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-be.js b/vendor/assets/components/angular-i18n/en-be.js new file mode 100644 index 000000000..04ebd60dd --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-be.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-be'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-bm.js b/vendor/assets/components/angular-i18n/en-bm.js new file mode 100644 index 000000000..dd7231ebb --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-bm.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-bm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-bs.js b/vendor/assets/components/angular-i18n/en-bs.js new file mode 100644 index 000000000..0da036b23 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-bs.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-bs'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-bw.js b/vendor/assets/components/angular-i18n/en-bw.js new file mode 100644 index 000000000..bbdde3c92 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-bw.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-bw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-bz.js b/vendor/assets/components/angular-i18n/en-bz.js new file mode 100644 index 000000000..9d06f0b58 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-bz.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-bz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ca.js b/vendor/assets/components/angular-i18n/en-ca.js new file mode 100644 index 000000000..64e325640 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ca.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ca'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-cc.js b/vendor/assets/components/angular-i18n/en-cc.js new file mode 100644 index 000000000..3609e82e0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-cc.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-cc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ck.js b/vendor/assets/components/angular-i18n/en-ck.js new file mode 100644 index 000000000..ad16f6b3a --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ck.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ck'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-cm.js b/vendor/assets/components/angular-i18n/en-cm.js new file mode 100644 index 000000000..fc04b4667 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-cx.js b/vendor/assets/components/angular-i18n/en-cx.js new file mode 100644 index 000000000..e8206cf42 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-cx.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-cx'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-dg.js b/vendor/assets/components/angular-i18n/en-dg.js new file mode 100644 index 000000000..32ecd940e --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-dg.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-dg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-dm.js b/vendor/assets/components/angular-i18n/en-dm.js new file mode 100644 index 000000000..521b42e1d --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-dm.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-dm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-dsrt-us.js b/vendor/assets/components/angular-i18n/en-dsrt-us.js new file mode 100644 index 000000000..a88ebfece --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-dsrt-us.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-dsrt-us'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-dsrt.js b/vendor/assets/components/angular-i18n/en-dsrt.js new file mode 100644 index 000000000..2c40c670b --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-dsrt.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-dsrt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-er.js b/vendor/assets/components/angular-i18n/en-er.js new file mode 100644 index 000000000..b32ccaad0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-er.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-er'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-fj.js b/vendor/assets/components/angular-i18n/en-fj.js new file mode 100644 index 000000000..007b368db --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-fj.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-fj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-fk.js b/vendor/assets/components/angular-i18n/en-fk.js new file mode 100644 index 000000000..e45ad86c6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-fk.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-fk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-fm.js b/vendor/assets/components/angular-i18n/en-fm.js new file mode 100644 index 000000000..d81c72edf --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-fm.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-fm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gb.js b/vendor/assets/components/angular-i18n/en-gb.js new file mode 100644 index 000000000..21903bbf0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gb.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gd.js b/vendor/assets/components/angular-i18n/en-gd.js new file mode 100644 index 000000000..d6c1fc7bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gd.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gg.js b/vendor/assets/components/angular-i18n/en-gg.js new file mode 100644 index 000000000..be70cf7e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gg.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gh.js b/vendor/assets/components/angular-i18n/en-gh.js new file mode 100644 index 000000000..7890607d4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gh.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gi.js b/vendor/assets/components/angular-i18n/en-gi.js new file mode 100644 index 000000000..978e97182 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gi.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gm.js b/vendor/assets/components/angular-i18n/en-gm.js new file mode 100644 index 000000000..434c87b43 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gm.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gu.js b/vendor/assets/components/angular-i18n/en-gu.js new file mode 100644 index 000000000..b1c5d8f95 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gu.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-gy.js b/vendor/assets/components/angular-i18n/en-gy.js new file mode 100644 index 000000000..70fd8f6d6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-gy.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-gy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-hk.js b/vendor/assets/components/angular-i18n/en-hk.js new file mode 100644 index 000000000..32bf0fd29 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-hk.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-hk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ie.js b/vendor/assets/components/angular-i18n/en-ie.js new file mode 100644 index 000000000..b310c5952 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ie.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ie'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-im.js b/vendor/assets/components/angular-i18n/en-im.js new file mode 100644 index 000000000..621b5e867 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-im.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-im'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-in.js b/vendor/assets/components/angular-i18n/en-in.js new file mode 100644 index 000000000..feab87918 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-io.js b/vendor/assets/components/angular-i18n/en-io.js new file mode 100644 index 000000000..1ef8ea4c9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-io.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-io'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-iso.js b/vendor/assets/components/angular-i18n/en-iso.js new file mode 100644 index 000000000..95a0a31cc --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-iso.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-iso'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-je.js b/vendor/assets/components/angular-i18n/en-je.js new file mode 100644 index 000000000..b7a609c28 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-je.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-je'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-jm.js b/vendor/assets/components/angular-i18n/en-jm.js new file mode 100644 index 000000000..bd75850bd --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-jm.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-jm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ke.js b/vendor/assets/components/angular-i18n/en-ke.js new file mode 100644 index 000000000..be8f65d5e --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ki.js b/vendor/assets/components/angular-i18n/en-ki.js new file mode 100644 index 000000000..edc3a8445 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ki.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ki'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-kn.js b/vendor/assets/components/angular-i18n/en-kn.js new file mode 100644 index 000000000..0cbc95b75 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-kn.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-kn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ky.js b/vendor/assets/components/angular-i18n/en-ky.js new file mode 100644 index 000000000..e664cc2e8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ky.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ky'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-lc.js b/vendor/assets/components/angular-i18n/en-lc.js new file mode 100644 index 000000000..a0164314d --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-lc.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-lc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-lr.js b/vendor/assets/components/angular-i18n/en-lr.js new file mode 100644 index 000000000..7af645076 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-lr.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-lr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ls.js b/vendor/assets/components/angular-i18n/en-ls.js new file mode 100644 index 000000000..93854c36d --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ls.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ls'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-mg.js b/vendor/assets/components/angular-i18n/en-mg.js new file mode 100644 index 000000000..b6cdea42c --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-mg.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-mg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-mh.js b/vendor/assets/components/angular-i18n/en-mh.js new file mode 100644 index 000000000..8551c6558 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-mh.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-mh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-mo.js b/vendor/assets/components/angular-i18n/en-mo.js new file mode 100644 index 000000000..c6571e6fa --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-mo.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-mo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-mp.js b/vendor/assets/components/angular-i18n/en-mp.js new file mode 100644 index 000000000..e35a45913 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-mp.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-mp'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ms.js b/vendor/assets/components/angular-i18n/en-ms.js new file mode 100644 index 000000000..0fd758dd8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ms.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ms'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-mt.js b/vendor/assets/components/angular-i18n/en-mt.js new file mode 100644 index 000000000..b6e54364d --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-mt.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-mt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-mu.js b/vendor/assets/components/angular-i18n/en-mu.js new file mode 100644 index 000000000..702c197b6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-mu.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-mu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-mw.js b/vendor/assets/components/angular-i18n/en-mw.js new file mode 100644 index 000000000..5e03b6653 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-mw.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-mw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-my.js b/vendor/assets/components/angular-i18n/en-my.js new file mode 100644 index 000000000..eb6b6ee18 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-my.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-my'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-na.js b/vendor/assets/components/angular-i18n/en-na.js new file mode 100644 index 000000000..ddcf0b4af --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-na.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-na'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-nf.js b/vendor/assets/components/angular-i18n/en-nf.js new file mode 100644 index 000000000..e6b71316a --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-nf.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-nf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ng.js b/vendor/assets/components/angular-i18n/en-ng.js new file mode 100644 index 000000000..fc6ce022f --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ng.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ng'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-nr.js b/vendor/assets/components/angular-i18n/en-nr.js new file mode 100644 index 000000000..1c7f98007 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-nr.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-nr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-nu.js b/vendor/assets/components/angular-i18n/en-nu.js new file mode 100644 index 000000000..7f03a0588 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-nu.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-nu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-nz.js b/vendor/assets/components/angular-i18n/en-nz.js new file mode 100644 index 000000000..dc3f7d493 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-nz.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-nz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-pg.js b/vendor/assets/components/angular-i18n/en-pg.js new file mode 100644 index 000000000..39aa3f9bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-pg.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-pg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ph.js b/vendor/assets/components/angular-i18n/en-ph.js new file mode 100644 index 000000000..0f08b5cd5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ph.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ph'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-pk.js b/vendor/assets/components/angular-i18n/en-pk.js new file mode 100644 index 000000000..65e358a3c --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-pk.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-pk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-pn.js b/vendor/assets/components/angular-i18n/en-pn.js new file mode 100644 index 000000000..177d4358f --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-pn.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-pn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-pr.js b/vendor/assets/components/angular-i18n/en-pr.js new file mode 100644 index 000000000..1796364ac --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-pr.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-pr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-pw.js b/vendor/assets/components/angular-i18n/en-pw.js new file mode 100644 index 000000000..0832fd79c --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-pw.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-pw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-rw.js b/vendor/assets/components/angular-i18n/en-rw.js new file mode 100644 index 000000000..f6a5140a4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-rw.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-rw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sb.js b/vendor/assets/components/angular-i18n/en-sb.js new file mode 100644 index 000000000..5c49430ee --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sb.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sc.js b/vendor/assets/components/angular-i18n/en-sc.js new file mode 100644 index 000000000..27522cb1f --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sc.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sd.js b/vendor/assets/components/angular-i18n/en-sd.js new file mode 100644 index 000000000..4535cf364 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sd.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sg.js b/vendor/assets/components/angular-i18n/en-sg.js new file mode 100644 index 000000000..c5924fb3b --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sg.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sh.js b/vendor/assets/components/angular-i18n/en-sh.js new file mode 100644 index 000000000..ce144649b --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sh.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sl.js b/vendor/assets/components/angular-i18n/en-sl.js new file mode 100644 index 000000000..1f7fd20e8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sl.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ss.js b/vendor/assets/components/angular-i18n/en-ss.js new file mode 100644 index 000000000..c278c7071 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ss.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ss'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sx.js b/vendor/assets/components/angular-i18n/en-sx.js new file mode 100644 index 000000000..51fa04ff2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sx.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sx'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-sz.js b/vendor/assets/components/angular-i18n/en-sz.js new file mode 100644 index 000000000..7610bb0c7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-sz.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-sz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-tc.js b/vendor/assets/components/angular-i18n/en-tc.js new file mode 100644 index 000000000..8a6282f10 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-tc.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-tc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-tk.js b/vendor/assets/components/angular-i18n/en-tk.js new file mode 100644 index 000000000..df586d463 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-tk.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-tk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-to.js b/vendor/assets/components/angular-i18n/en-to.js new file mode 100644 index 000000000..44c23b069 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-to.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-to'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-tt.js b/vendor/assets/components/angular-i18n/en-tt.js new file mode 100644 index 000000000..8c101f79f --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-tt.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-tt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-tv.js b/vendor/assets/components/angular-i18n/en-tv.js new file mode 100644 index 000000000..27e45c949 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-tv.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-tv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-tz.js b/vendor/assets/components/angular-i18n/en-tz.js new file mode 100644 index 000000000..5241620db --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ug.js b/vendor/assets/components/angular-i18n/en-ug.js new file mode 100644 index 000000000..5a96859d1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-um.js b/vendor/assets/components/angular-i18n/en-um.js new file mode 100644 index 000000000..7dcf9b4a3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-um.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-um'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-us.js b/vendor/assets/components/angular-i18n/en-us.js new file mode 100644 index 000000000..9f29d743a --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-us.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-us'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-vc.js b/vendor/assets/components/angular-i18n/en-vc.js new file mode 100644 index 000000000..855549cc8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-vc.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-vc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-vg.js b/vendor/assets/components/angular-i18n/en-vg.js new file mode 100644 index 000000000..f64805b06 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-vg.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-vg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-vi.js b/vendor/assets/components/angular-i18n/en-vi.js new file mode 100644 index 000000000..eeafac7f1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-vi.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-vi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-vu.js b/vendor/assets/components/angular-i18n/en-vu.js new file mode 100644 index 000000000..484d7925d --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-vu.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-vu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-ws.js b/vendor/assets/components/angular-i18n/en-ws.js new file mode 100644 index 000000000..51ebbae3b --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-ws.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-ws'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-za.js b/vendor/assets/components/angular-i18n/en-za.js new file mode 100644 index 000000000..6745ad329 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-zm.js b/vendor/assets/components/angular-i18n/en-zm.js new file mode 100644 index 000000000..5938b535c --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-zm.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-zm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en-zw.js b/vendor/assets/components/angular-i18n/en-zw.js new file mode 100644 index 000000000..2774424a6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en-zw.js @@ -0,0 +1,2 @@ +require('./angular-locale_en-zw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/en.js b/vendor/assets/components/angular-i18n/en.js new file mode 100644 index 000000000..aa39aff13 --- /dev/null +++ b/vendor/assets/components/angular-i18n/en.js @@ -0,0 +1,2 @@ +require('./angular-locale_en'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/eo-001.js b/vendor/assets/components/angular-i18n/eo-001.js new file mode 100644 index 000000000..d187fe929 --- /dev/null +++ b/vendor/assets/components/angular-i18n/eo-001.js @@ -0,0 +1,2 @@ +require('./angular-locale_eo-001'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/eo.js b/vendor/assets/components/angular-i18n/eo.js new file mode 100644 index 000000000..ae6cfe9d0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/eo.js @@ -0,0 +1,2 @@ +require('./angular-locale_eo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-419.js b/vendor/assets/components/angular-i18n/es-419.js new file mode 100644 index 000000000..09db431bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-419.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-419'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-ar.js b/vendor/assets/components/angular-i18n/es-ar.js new file mode 100644 index 000000000..42f294952 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-ar.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-ar'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-bo.js b/vendor/assets/components/angular-i18n/es-bo.js new file mode 100644 index 000000000..2ff80d145 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-bo.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-bo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-cl.js b/vendor/assets/components/angular-i18n/es-cl.js new file mode 100644 index 000000000..c54d3c543 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-cl.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-cl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-co.js b/vendor/assets/components/angular-i18n/es-co.js new file mode 100644 index 000000000..fa18f57ff --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-co.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-co'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-cr.js b/vendor/assets/components/angular-i18n/es-cr.js new file mode 100644 index 000000000..30d2639e4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-cr.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-cr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-cu.js b/vendor/assets/components/angular-i18n/es-cu.js new file mode 100644 index 000000000..9f5461c88 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-cu.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-cu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-do.js b/vendor/assets/components/angular-i18n/es-do.js new file mode 100644 index 000000000..496cfdb98 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-do.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-do'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-ea.js b/vendor/assets/components/angular-i18n/es-ea.js new file mode 100644 index 000000000..bef47d97c --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-ea.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-ea'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-ec.js b/vendor/assets/components/angular-i18n/es-ec.js new file mode 100644 index 000000000..ad19e7bee --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-ec.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-ec'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-es.js b/vendor/assets/components/angular-i18n/es-es.js new file mode 100644 index 000000000..c7ea47dce --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-es.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-es'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-gq.js b/vendor/assets/components/angular-i18n/es-gq.js new file mode 100644 index 000000000..92131a557 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-gq.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-gq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-gt.js b/vendor/assets/components/angular-i18n/es-gt.js new file mode 100644 index 000000000..180d585b9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-gt.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-gt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-hn.js b/vendor/assets/components/angular-i18n/es-hn.js new file mode 100644 index 000000000..ca90265c9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-hn.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-hn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-ic.js b/vendor/assets/components/angular-i18n/es-ic.js new file mode 100644 index 000000000..36979a138 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-ic.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-ic'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-mx.js b/vendor/assets/components/angular-i18n/es-mx.js new file mode 100644 index 000000000..f1399a9ba --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-mx.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-mx'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-ni.js b/vendor/assets/components/angular-i18n/es-ni.js new file mode 100644 index 000000000..46a862b44 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-ni.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-ni'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-pa.js b/vendor/assets/components/angular-i18n/es-pa.js new file mode 100644 index 000000000..c5c71846f --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-pa.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-pa'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-pe.js b/vendor/assets/components/angular-i18n/es-pe.js new file mode 100644 index 000000000..34e10f84e --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-pe.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-pe'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-ph.js b/vendor/assets/components/angular-i18n/es-ph.js new file mode 100644 index 000000000..0911aa314 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-ph.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-ph'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-pr.js b/vendor/assets/components/angular-i18n/es-pr.js new file mode 100644 index 000000000..f3573b471 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-pr.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-pr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-py.js b/vendor/assets/components/angular-i18n/es-py.js new file mode 100644 index 000000000..944743d88 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-py.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-py'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-sv.js b/vendor/assets/components/angular-i18n/es-sv.js new file mode 100644 index 000000000..378e20f58 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-sv.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-sv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-us.js b/vendor/assets/components/angular-i18n/es-us.js new file mode 100644 index 000000000..b4860e74a --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-us.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-us'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-uy.js b/vendor/assets/components/angular-i18n/es-uy.js new file mode 100644 index 000000000..5b23e2361 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-uy.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-uy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es-ve.js b/vendor/assets/components/angular-i18n/es-ve.js new file mode 100644 index 000000000..2cb78f355 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es-ve.js @@ -0,0 +1,2 @@ +require('./angular-locale_es-ve'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/es.js b/vendor/assets/components/angular-i18n/es.js new file mode 100644 index 000000000..dfd5d8212 --- /dev/null +++ b/vendor/assets/components/angular-i18n/es.js @@ -0,0 +1,2 @@ +require('./angular-locale_es'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/et-ee.js b/vendor/assets/components/angular-i18n/et-ee.js new file mode 100644 index 000000000..768c12192 --- /dev/null +++ b/vendor/assets/components/angular-i18n/et-ee.js @@ -0,0 +1,2 @@ +require('./angular-locale_et-ee'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/et.js b/vendor/assets/components/angular-i18n/et.js new file mode 100644 index 000000000..68b548e63 --- /dev/null +++ b/vendor/assets/components/angular-i18n/et.js @@ -0,0 +1,2 @@ +require('./angular-locale_et'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/eu-es.js b/vendor/assets/components/angular-i18n/eu-es.js new file mode 100644 index 000000000..203dc93e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/eu-es.js @@ -0,0 +1,2 @@ +require('./angular-locale_eu-es'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/eu.js b/vendor/assets/components/angular-i18n/eu.js new file mode 100644 index 000000000..1ae1fa216 --- /dev/null +++ b/vendor/assets/components/angular-i18n/eu.js @@ -0,0 +1,2 @@ +require('./angular-locale_eu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ewo-cm.js b/vendor/assets/components/angular-i18n/ewo-cm.js new file mode 100644 index 000000000..676a03f59 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ewo-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_ewo-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ewo.js b/vendor/assets/components/angular-i18n/ewo.js new file mode 100644 index 000000000..e8a1565ad --- /dev/null +++ b/vendor/assets/components/angular-i18n/ewo.js @@ -0,0 +1,2 @@ +require('./angular-locale_ewo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fa-af.js b/vendor/assets/components/angular-i18n/fa-af.js new file mode 100644 index 000000000..df0ac2065 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fa-af.js @@ -0,0 +1,2 @@ +require('./angular-locale_fa-af'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fa-ir.js b/vendor/assets/components/angular-i18n/fa-ir.js new file mode 100644 index 000000000..d2a3cad45 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fa-ir.js @@ -0,0 +1,2 @@ +require('./angular-locale_fa-ir'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fa.js b/vendor/assets/components/angular-i18n/fa.js new file mode 100644 index 000000000..dab2b6866 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fa.js @@ -0,0 +1,2 @@ +require('./angular-locale_fa'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ff-cm.js b/vendor/assets/components/angular-i18n/ff-cm.js new file mode 100644 index 000000000..1a06b01f8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ff-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_ff-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ff-gn.js b/vendor/assets/components/angular-i18n/ff-gn.js new file mode 100644 index 000000000..78025ca98 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ff-gn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ff-gn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ff-mr.js b/vendor/assets/components/angular-i18n/ff-mr.js new file mode 100644 index 000000000..acc2014d4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ff-mr.js @@ -0,0 +1,2 @@ +require('./angular-locale_ff-mr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ff-sn.js b/vendor/assets/components/angular-i18n/ff-sn.js new file mode 100644 index 000000000..6097d0905 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ff-sn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ff-sn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ff.js b/vendor/assets/components/angular-i18n/ff.js new file mode 100644 index 000000000..b157455ad --- /dev/null +++ b/vendor/assets/components/angular-i18n/ff.js @@ -0,0 +1,2 @@ +require('./angular-locale_ff'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fi-fi.js b/vendor/assets/components/angular-i18n/fi-fi.js new file mode 100644 index 000000000..651e9e999 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fi-fi.js @@ -0,0 +1,2 @@ +require('./angular-locale_fi-fi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fi.js b/vendor/assets/components/angular-i18n/fi.js new file mode 100644 index 000000000..be456a54c --- /dev/null +++ b/vendor/assets/components/angular-i18n/fi.js @@ -0,0 +1,2 @@ +require('./angular-locale_fi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fil-ph.js b/vendor/assets/components/angular-i18n/fil-ph.js new file mode 100644 index 000000000..19d7f278a --- /dev/null +++ b/vendor/assets/components/angular-i18n/fil-ph.js @@ -0,0 +1,2 @@ +require('./angular-locale_fil-ph'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fil.js b/vendor/assets/components/angular-i18n/fil.js new file mode 100644 index 000000000..1671999a4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fil.js @@ -0,0 +1,2 @@ +require('./angular-locale_fil'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fo-fo.js b/vendor/assets/components/angular-i18n/fo-fo.js new file mode 100644 index 000000000..5e4e81048 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fo-fo.js @@ -0,0 +1,2 @@ +require('./angular-locale_fo-fo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fo.js b/vendor/assets/components/angular-i18n/fo.js new file mode 100644 index 000000000..d51dae6e4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fo.js @@ -0,0 +1,2 @@ +require('./angular-locale_fo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-be.js b/vendor/assets/components/angular-i18n/fr-be.js new file mode 100644 index 000000000..61e52aa34 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-be.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-be'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-bf.js b/vendor/assets/components/angular-i18n/fr-bf.js new file mode 100644 index 000000000..84b58269b --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-bf.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-bf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-bi.js b/vendor/assets/components/angular-i18n/fr-bi.js new file mode 100644 index 000000000..e99bfb617 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-bi.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-bi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-bj.js b/vendor/assets/components/angular-i18n/fr-bj.js new file mode 100644 index 000000000..e2fa458a1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-bj.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-bj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-bl.js b/vendor/assets/components/angular-i18n/fr-bl.js new file mode 100644 index 000000000..13b1f3794 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-bl.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-bl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ca.js b/vendor/assets/components/angular-i18n/fr-ca.js new file mode 100644 index 000000000..88f4f07cd --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ca.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ca'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-cd.js b/vendor/assets/components/angular-i18n/fr-cd.js new file mode 100644 index 000000000..38fc94b92 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-cd.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-cd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-cf.js b/vendor/assets/components/angular-i18n/fr-cf.js new file mode 100644 index 000000000..b93752cd7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-cf.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-cf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-cg.js b/vendor/assets/components/angular-i18n/fr-cg.js new file mode 100644 index 000000000..66c5b2be8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-cg.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-cg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ch.js b/vendor/assets/components/angular-i18n/fr-ch.js new file mode 100644 index 000000000..463eed93e --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ch.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ch'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ci.js b/vendor/assets/components/angular-i18n/fr-ci.js new file mode 100644 index 000000000..86df8b284 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ci.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ci'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-cm.js b/vendor/assets/components/angular-i18n/fr-cm.js new file mode 100644 index 000000000..b036c139b --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-dj.js b/vendor/assets/components/angular-i18n/fr-dj.js new file mode 100644 index 000000000..f1436ca63 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-dj.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-dj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-dz.js b/vendor/assets/components/angular-i18n/fr-dz.js new file mode 100644 index 000000000..86ea05335 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-dz.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-dz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-fr.js b/vendor/assets/components/angular-i18n/fr-fr.js new file mode 100644 index 000000000..488def37f --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-fr.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-fr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ga.js b/vendor/assets/components/angular-i18n/fr-ga.js new file mode 100644 index 000000000..741e4e96c --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ga.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ga'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-gf.js b/vendor/assets/components/angular-i18n/fr-gf.js new file mode 100644 index 000000000..b76e6cac6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-gf.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-gf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-gn.js b/vendor/assets/components/angular-i18n/fr-gn.js new file mode 100644 index 000000000..cee1d5eb7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-gn.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-gn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-gp.js b/vendor/assets/components/angular-i18n/fr-gp.js new file mode 100644 index 000000000..0cc9cbfdc --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-gp.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-gp'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-gq.js b/vendor/assets/components/angular-i18n/fr-gq.js new file mode 100644 index 000000000..e9523e100 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-gq.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-gq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ht.js b/vendor/assets/components/angular-i18n/fr-ht.js new file mode 100644 index 000000000..f33621e22 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ht.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ht'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-km.js b/vendor/assets/components/angular-i18n/fr-km.js new file mode 100644 index 000000000..5ec027a40 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-km.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-km'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-lu.js b/vendor/assets/components/angular-i18n/fr-lu.js new file mode 100644 index 000000000..b93b88c51 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-lu.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-lu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ma.js b/vendor/assets/components/angular-i18n/fr-ma.js new file mode 100644 index 000000000..649312a17 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ma.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ma'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-mc.js b/vendor/assets/components/angular-i18n/fr-mc.js new file mode 100644 index 000000000..914820823 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-mc.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-mc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-mf.js b/vendor/assets/components/angular-i18n/fr-mf.js new file mode 100644 index 000000000..e0a90b6de --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-mf.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-mf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-mg.js b/vendor/assets/components/angular-i18n/fr-mg.js new file mode 100644 index 000000000..67b2b5211 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-mg.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-mg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ml.js b/vendor/assets/components/angular-i18n/fr-ml.js new file mode 100644 index 000000000..a40abe55b --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ml.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ml'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-mq.js b/vendor/assets/components/angular-i18n/fr-mq.js new file mode 100644 index 000000000..46e5d076a --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-mq.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-mq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-mr.js b/vendor/assets/components/angular-i18n/fr-mr.js new file mode 100644 index 000000000..43ec80613 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-mr.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-mr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-mu.js b/vendor/assets/components/angular-i18n/fr-mu.js new file mode 100644 index 000000000..b392f308f --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-mu.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-mu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-nc.js b/vendor/assets/components/angular-i18n/fr-nc.js new file mode 100644 index 000000000..8377948be --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-nc.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-nc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-ne.js b/vendor/assets/components/angular-i18n/fr-ne.js new file mode 100644 index 000000000..f7224649a --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-ne.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-ne'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-pf.js b/vendor/assets/components/angular-i18n/fr-pf.js new file mode 100644 index 000000000..56409e2c1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-pf.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-pf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-pm.js b/vendor/assets/components/angular-i18n/fr-pm.js new file mode 100644 index 000000000..82aef72bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-pm.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-pm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-re.js b/vendor/assets/components/angular-i18n/fr-re.js new file mode 100644 index 000000000..cecebdc5e --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-re.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-re'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-rw.js b/vendor/assets/components/angular-i18n/fr-rw.js new file mode 100644 index 000000000..84abb4d28 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-rw.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-rw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-sc.js b/vendor/assets/components/angular-i18n/fr-sc.js new file mode 100644 index 000000000..8af5166a2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-sc.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-sc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-sn.js b/vendor/assets/components/angular-i18n/fr-sn.js new file mode 100644 index 000000000..7ba00c4c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-sn.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-sn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-sy.js b/vendor/assets/components/angular-i18n/fr-sy.js new file mode 100644 index 000000000..1dbc22bfd --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-sy.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-sy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-td.js b/vendor/assets/components/angular-i18n/fr-td.js new file mode 100644 index 000000000..babcd6843 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-td.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-td'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-tg.js b/vendor/assets/components/angular-i18n/fr-tg.js new file mode 100644 index 000000000..4ed3629bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-tg.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-tg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-tn.js b/vendor/assets/components/angular-i18n/fr-tn.js new file mode 100644 index 000000000..92fccd9e0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-tn.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-tn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-vu.js b/vendor/assets/components/angular-i18n/fr-vu.js new file mode 100644 index 000000000..cfabad34f --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-vu.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-vu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-wf.js b/vendor/assets/components/angular-i18n/fr-wf.js new file mode 100644 index 000000000..670f9ffb5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-wf.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-wf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr-yt.js b/vendor/assets/components/angular-i18n/fr-yt.js new file mode 100644 index 000000000..e34c9f0e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr-yt.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr-yt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fr.js b/vendor/assets/components/angular-i18n/fr.js new file mode 100644 index 000000000..4d8dff6a6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fr.js @@ -0,0 +1,2 @@ +require('./angular-locale_fr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fur-it.js b/vendor/assets/components/angular-i18n/fur-it.js new file mode 100644 index 000000000..fcec49898 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fur-it.js @@ -0,0 +1,2 @@ +require('./angular-locale_fur-it'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fur.js b/vendor/assets/components/angular-i18n/fur.js new file mode 100644 index 000000000..d9140da85 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fur.js @@ -0,0 +1,2 @@ +require('./angular-locale_fur'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fy-nl.js b/vendor/assets/components/angular-i18n/fy-nl.js new file mode 100644 index 000000000..a39f4d7c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/fy-nl.js @@ -0,0 +1,2 @@ +require('./angular-locale_fy-nl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/fy.js b/vendor/assets/components/angular-i18n/fy.js new file mode 100644 index 000000000..e8d78e08f --- /dev/null +++ b/vendor/assets/components/angular-i18n/fy.js @@ -0,0 +1,2 @@ +require('./angular-locale_fy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ga-ie.js b/vendor/assets/components/angular-i18n/ga-ie.js new file mode 100644 index 000000000..b08ef9eeb --- /dev/null +++ b/vendor/assets/components/angular-i18n/ga-ie.js @@ -0,0 +1,2 @@ +require('./angular-locale_ga-ie'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ga.js b/vendor/assets/components/angular-i18n/ga.js new file mode 100644 index 000000000..86a341177 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ga.js @@ -0,0 +1,2 @@ +require('./angular-locale_ga'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gd-gb.js b/vendor/assets/components/angular-i18n/gd-gb.js new file mode 100644 index 000000000..2ef4b5f68 --- /dev/null +++ b/vendor/assets/components/angular-i18n/gd-gb.js @@ -0,0 +1,2 @@ +require('./angular-locale_gd-gb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gd.js b/vendor/assets/components/angular-i18n/gd.js new file mode 100644 index 000000000..398344602 --- /dev/null +++ b/vendor/assets/components/angular-i18n/gd.js @@ -0,0 +1,2 @@ +require('./angular-locale_gd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gl-es.js b/vendor/assets/components/angular-i18n/gl-es.js new file mode 100644 index 000000000..8263212fb --- /dev/null +++ b/vendor/assets/components/angular-i18n/gl-es.js @@ -0,0 +1,2 @@ +require('./angular-locale_gl-es'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gl.js b/vendor/assets/components/angular-i18n/gl.js new file mode 100644 index 000000000..2ad472c46 --- /dev/null +++ b/vendor/assets/components/angular-i18n/gl.js @@ -0,0 +1,2 @@ +require('./angular-locale_gl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gsw-ch.js b/vendor/assets/components/angular-i18n/gsw-ch.js new file mode 100644 index 000000000..c81da38df --- /dev/null +++ b/vendor/assets/components/angular-i18n/gsw-ch.js @@ -0,0 +1,2 @@ +require('./angular-locale_gsw-ch'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gsw-fr.js b/vendor/assets/components/angular-i18n/gsw-fr.js new file mode 100644 index 000000000..06120e9a8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/gsw-fr.js @@ -0,0 +1,2 @@ +require('./angular-locale_gsw-fr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gsw-li.js b/vendor/assets/components/angular-i18n/gsw-li.js new file mode 100644 index 000000000..5f0239c91 --- /dev/null +++ b/vendor/assets/components/angular-i18n/gsw-li.js @@ -0,0 +1,2 @@ +require('./angular-locale_gsw-li'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gsw.js b/vendor/assets/components/angular-i18n/gsw.js new file mode 100644 index 000000000..18d9c41ec --- /dev/null +++ b/vendor/assets/components/angular-i18n/gsw.js @@ -0,0 +1,2 @@ +require('./angular-locale_gsw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gu-in.js b/vendor/assets/components/angular-i18n/gu-in.js new file mode 100644 index 000000000..44501022c --- /dev/null +++ b/vendor/assets/components/angular-i18n/gu-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_gu-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gu.js b/vendor/assets/components/angular-i18n/gu.js new file mode 100644 index 000000000..73644f907 --- /dev/null +++ b/vendor/assets/components/angular-i18n/gu.js @@ -0,0 +1,2 @@ +require('./angular-locale_gu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/guz-ke.js b/vendor/assets/components/angular-i18n/guz-ke.js new file mode 100644 index 000000000..d19bf87a4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/guz-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_guz-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/guz.js b/vendor/assets/components/angular-i18n/guz.js new file mode 100644 index 000000000..b585bf7d1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/guz.js @@ -0,0 +1,2 @@ +require('./angular-locale_guz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gv-im.js b/vendor/assets/components/angular-i18n/gv-im.js new file mode 100644 index 000000000..bba4ff1bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/gv-im.js @@ -0,0 +1,2 @@ +require('./angular-locale_gv-im'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/gv.js b/vendor/assets/components/angular-i18n/gv.js new file mode 100644 index 000000000..2832acaa7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/gv.js @@ -0,0 +1,2 @@ +require('./angular-locale_gv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ha-latn-gh.js b/vendor/assets/components/angular-i18n/ha-latn-gh.js new file mode 100644 index 000000000..0f263d0c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ha-latn-gh.js @@ -0,0 +1,2 @@ +require('./angular-locale_ha-latn-gh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ha-latn-ne.js b/vendor/assets/components/angular-i18n/ha-latn-ne.js new file mode 100644 index 000000000..87eb8d3c9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ha-latn-ne.js @@ -0,0 +1,2 @@ +require('./angular-locale_ha-latn-ne'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ha-latn-ng.js b/vendor/assets/components/angular-i18n/ha-latn-ng.js new file mode 100644 index 000000000..175fa6087 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ha-latn-ng.js @@ -0,0 +1,2 @@ +require('./angular-locale_ha-latn-ng'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ha-latn.js b/vendor/assets/components/angular-i18n/ha-latn.js new file mode 100644 index 000000000..f0c736975 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ha-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ha-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ha.js b/vendor/assets/components/angular-i18n/ha.js new file mode 100644 index 000000000..fc68ba782 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ha.js @@ -0,0 +1,2 @@ +require('./angular-locale_ha'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/haw-us.js b/vendor/assets/components/angular-i18n/haw-us.js new file mode 100644 index 000000000..d1ce383b5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/haw-us.js @@ -0,0 +1,2 @@ +require('./angular-locale_haw-us'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/haw.js b/vendor/assets/components/angular-i18n/haw.js new file mode 100644 index 000000000..1ff3a2c1d --- /dev/null +++ b/vendor/assets/components/angular-i18n/haw.js @@ -0,0 +1,2 @@ +require('./angular-locale_haw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/he-il.js b/vendor/assets/components/angular-i18n/he-il.js new file mode 100644 index 000000000..5e29dc544 --- /dev/null +++ b/vendor/assets/components/angular-i18n/he-il.js @@ -0,0 +1,2 @@ +require('./angular-locale_he-il'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/he.js b/vendor/assets/components/angular-i18n/he.js new file mode 100644 index 000000000..818cd65c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/he.js @@ -0,0 +1,2 @@ +require('./angular-locale_he'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hi-in.js b/vendor/assets/components/angular-i18n/hi-in.js new file mode 100644 index 000000000..139e715b4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/hi-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_hi-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hi.js b/vendor/assets/components/angular-i18n/hi.js new file mode 100644 index 000000000..d38f5444f --- /dev/null +++ b/vendor/assets/components/angular-i18n/hi.js @@ -0,0 +1,2 @@ +require('./angular-locale_hi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hr-ba.js b/vendor/assets/components/angular-i18n/hr-ba.js new file mode 100644 index 000000000..d1ce0794b --- /dev/null +++ b/vendor/assets/components/angular-i18n/hr-ba.js @@ -0,0 +1,2 @@ +require('./angular-locale_hr-ba'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hr-hr.js b/vendor/assets/components/angular-i18n/hr-hr.js new file mode 100644 index 000000000..4880f8058 --- /dev/null +++ b/vendor/assets/components/angular-i18n/hr-hr.js @@ -0,0 +1,2 @@ +require('./angular-locale_hr-hr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hr.js b/vendor/assets/components/angular-i18n/hr.js new file mode 100644 index 000000000..916af6291 --- /dev/null +++ b/vendor/assets/components/angular-i18n/hr.js @@ -0,0 +1,2 @@ +require('./angular-locale_hr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hsb-de.js b/vendor/assets/components/angular-i18n/hsb-de.js new file mode 100644 index 000000000..d343045ff --- /dev/null +++ b/vendor/assets/components/angular-i18n/hsb-de.js @@ -0,0 +1,2 @@ +require('./angular-locale_hsb-de'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hsb.js b/vendor/assets/components/angular-i18n/hsb.js new file mode 100644 index 000000000..32edfe733 --- /dev/null +++ b/vendor/assets/components/angular-i18n/hsb.js @@ -0,0 +1,2 @@ +require('./angular-locale_hsb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hu-hu.js b/vendor/assets/components/angular-i18n/hu-hu.js new file mode 100644 index 000000000..d67692358 --- /dev/null +++ b/vendor/assets/components/angular-i18n/hu-hu.js @@ -0,0 +1,2 @@ +require('./angular-locale_hu-hu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hu.js b/vendor/assets/components/angular-i18n/hu.js new file mode 100644 index 000000000..8a5e8a0f9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/hu.js @@ -0,0 +1,2 @@ +require('./angular-locale_hu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hy-am.js b/vendor/assets/components/angular-i18n/hy-am.js new file mode 100644 index 000000000..8eba982c1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/hy-am.js @@ -0,0 +1,2 @@ +require('./angular-locale_hy-am'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/hy.js b/vendor/assets/components/angular-i18n/hy.js new file mode 100644 index 000000000..90cf4ebdf --- /dev/null +++ b/vendor/assets/components/angular-i18n/hy.js @@ -0,0 +1,2 @@ +require('./angular-locale_hy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ia-fr.js b/vendor/assets/components/angular-i18n/ia-fr.js new file mode 100644 index 000000000..d20203d3f --- /dev/null +++ b/vendor/assets/components/angular-i18n/ia-fr.js @@ -0,0 +1,2 @@ +require('./angular-locale_ia-fr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ia.js b/vendor/assets/components/angular-i18n/ia.js new file mode 100644 index 000000000..349a9a916 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ia.js @@ -0,0 +1,2 @@ +require('./angular-locale_ia'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/id-id.js b/vendor/assets/components/angular-i18n/id-id.js new file mode 100644 index 000000000..eff88eb02 --- /dev/null +++ b/vendor/assets/components/angular-i18n/id-id.js @@ -0,0 +1,2 @@ +require('./angular-locale_id-id'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/id.js b/vendor/assets/components/angular-i18n/id.js new file mode 100644 index 000000000..8fb5c219d --- /dev/null +++ b/vendor/assets/components/angular-i18n/id.js @@ -0,0 +1,2 @@ +require('./angular-locale_id'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ig-ng.js b/vendor/assets/components/angular-i18n/ig-ng.js new file mode 100644 index 000000000..529c16652 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ig-ng.js @@ -0,0 +1,2 @@ +require('./angular-locale_ig-ng'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ig.js b/vendor/assets/components/angular-i18n/ig.js new file mode 100644 index 000000000..336ed77ba --- /dev/null +++ b/vendor/assets/components/angular-i18n/ig.js @@ -0,0 +1,2 @@ +require('./angular-locale_ig'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ii-cn.js b/vendor/assets/components/angular-i18n/ii-cn.js new file mode 100644 index 000000000..cf0acbc63 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ii-cn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ii-cn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ii.js b/vendor/assets/components/angular-i18n/ii.js new file mode 100644 index 000000000..26c772773 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ii.js @@ -0,0 +1,2 @@ +require('./angular-locale_ii'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/in.js b/vendor/assets/components/angular-i18n/in.js new file mode 100644 index 000000000..31d7a2d7c --- /dev/null +++ b/vendor/assets/components/angular-i18n/in.js @@ -0,0 +1,2 @@ +require('./angular-locale_in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/is-is.js b/vendor/assets/components/angular-i18n/is-is.js new file mode 100644 index 000000000..2b5d0da5e --- /dev/null +++ b/vendor/assets/components/angular-i18n/is-is.js @@ -0,0 +1,2 @@ +require('./angular-locale_is-is'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/is.js b/vendor/assets/components/angular-i18n/is.js new file mode 100644 index 000000000..592064bec --- /dev/null +++ b/vendor/assets/components/angular-i18n/is.js @@ -0,0 +1,2 @@ +require('./angular-locale_is'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/it-ch.js b/vendor/assets/components/angular-i18n/it-ch.js new file mode 100644 index 000000000..91a515d3c --- /dev/null +++ b/vendor/assets/components/angular-i18n/it-ch.js @@ -0,0 +1,2 @@ +require('./angular-locale_it-ch'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/it-it.js b/vendor/assets/components/angular-i18n/it-it.js new file mode 100644 index 000000000..b62e67178 --- /dev/null +++ b/vendor/assets/components/angular-i18n/it-it.js @@ -0,0 +1,2 @@ +require('./angular-locale_it-it'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/it-sm.js b/vendor/assets/components/angular-i18n/it-sm.js new file mode 100644 index 000000000..8610cefe1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/it-sm.js @@ -0,0 +1,2 @@ +require('./angular-locale_it-sm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/it.js b/vendor/assets/components/angular-i18n/it.js new file mode 100644 index 000000000..329676e26 --- /dev/null +++ b/vendor/assets/components/angular-i18n/it.js @@ -0,0 +1,2 @@ +require('./angular-locale_it'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/iw.js b/vendor/assets/components/angular-i18n/iw.js new file mode 100644 index 000000000..05ed103ed --- /dev/null +++ b/vendor/assets/components/angular-i18n/iw.js @@ -0,0 +1,2 @@ +require('./angular-locale_iw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ja-jp.js b/vendor/assets/components/angular-i18n/ja-jp.js new file mode 100644 index 000000000..53ecda330 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ja-jp.js @@ -0,0 +1,2 @@ +require('./angular-locale_ja-jp'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ja.js b/vendor/assets/components/angular-i18n/ja.js new file mode 100644 index 000000000..dc007ef8b --- /dev/null +++ b/vendor/assets/components/angular-i18n/ja.js @@ -0,0 +1,2 @@ +require('./angular-locale_ja'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/jgo-cm.js b/vendor/assets/components/angular-i18n/jgo-cm.js new file mode 100644 index 000000000..1684d5fc4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/jgo-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_jgo-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/jgo.js b/vendor/assets/components/angular-i18n/jgo.js new file mode 100644 index 000000000..c56ff140f --- /dev/null +++ b/vendor/assets/components/angular-i18n/jgo.js @@ -0,0 +1,2 @@ +require('./angular-locale_jgo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/jmc-tz.js b/vendor/assets/components/angular-i18n/jmc-tz.js new file mode 100644 index 000000000..c4567690d --- /dev/null +++ b/vendor/assets/components/angular-i18n/jmc-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_jmc-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/jmc.js b/vendor/assets/components/angular-i18n/jmc.js new file mode 100644 index 000000000..512929236 --- /dev/null +++ b/vendor/assets/components/angular-i18n/jmc.js @@ -0,0 +1,2 @@ +require('./angular-locale_jmc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ka-ge.js b/vendor/assets/components/angular-i18n/ka-ge.js new file mode 100644 index 000000000..6d02e00c5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ka-ge.js @@ -0,0 +1,2 @@ +require('./angular-locale_ka-ge'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ka.js b/vendor/assets/components/angular-i18n/ka.js new file mode 100644 index 000000000..d7aef79e5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ka.js @@ -0,0 +1,2 @@ +require('./angular-locale_ka'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kab-dz.js b/vendor/assets/components/angular-i18n/kab-dz.js new file mode 100644 index 000000000..c947c1445 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kab-dz.js @@ -0,0 +1,2 @@ +require('./angular-locale_kab-dz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kab.js b/vendor/assets/components/angular-i18n/kab.js new file mode 100644 index 000000000..2c4ba9a98 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kab.js @@ -0,0 +1,2 @@ +require('./angular-locale_kab'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kam-ke.js b/vendor/assets/components/angular-i18n/kam-ke.js new file mode 100644 index 000000000..bc376aaec --- /dev/null +++ b/vendor/assets/components/angular-i18n/kam-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_kam-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kam.js b/vendor/assets/components/angular-i18n/kam.js new file mode 100644 index 000000000..c6996fb61 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kam.js @@ -0,0 +1,2 @@ +require('./angular-locale_kam'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kde-tz.js b/vendor/assets/components/angular-i18n/kde-tz.js new file mode 100644 index 000000000..0cd06bc65 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kde-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_kde-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kde.js b/vendor/assets/components/angular-i18n/kde.js new file mode 100644 index 000000000..ad4c451e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kde.js @@ -0,0 +1,2 @@ +require('./angular-locale_kde'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kea-cv.js b/vendor/assets/components/angular-i18n/kea-cv.js new file mode 100644 index 000000000..ded648eb8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kea-cv.js @@ -0,0 +1,2 @@ +require('./angular-locale_kea-cv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kea.js b/vendor/assets/components/angular-i18n/kea.js new file mode 100644 index 000000000..5f56729ae --- /dev/null +++ b/vendor/assets/components/angular-i18n/kea.js @@ -0,0 +1,2 @@ +require('./angular-locale_kea'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/khq-ml.js b/vendor/assets/components/angular-i18n/khq-ml.js new file mode 100644 index 000000000..ed5606bfd --- /dev/null +++ b/vendor/assets/components/angular-i18n/khq-ml.js @@ -0,0 +1,2 @@ +require('./angular-locale_khq-ml'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/khq.js b/vendor/assets/components/angular-i18n/khq.js new file mode 100644 index 000000000..d930c4117 --- /dev/null +++ b/vendor/assets/components/angular-i18n/khq.js @@ -0,0 +1,2 @@ +require('./angular-locale_khq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ki-ke.js b/vendor/assets/components/angular-i18n/ki-ke.js new file mode 100644 index 000000000..029246f39 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ki-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_ki-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ki.js b/vendor/assets/components/angular-i18n/ki.js new file mode 100644 index 000000000..5b4d99f7e --- /dev/null +++ b/vendor/assets/components/angular-i18n/ki.js @@ -0,0 +1,2 @@ +require('./angular-locale_ki'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kk-cyrl-kz.js b/vendor/assets/components/angular-i18n/kk-cyrl-kz.js new file mode 100644 index 000000000..eade090d3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kk-cyrl-kz.js @@ -0,0 +1,2 @@ +require('./angular-locale_kk-cyrl-kz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kk-cyrl.js b/vendor/assets/components/angular-i18n/kk-cyrl.js new file mode 100644 index 000000000..cb54fc12e --- /dev/null +++ b/vendor/assets/components/angular-i18n/kk-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_kk-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kk.js b/vendor/assets/components/angular-i18n/kk.js new file mode 100644 index 000000000..e9b563b3b --- /dev/null +++ b/vendor/assets/components/angular-i18n/kk.js @@ -0,0 +1,2 @@ +require('./angular-locale_kk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kkj-cm.js b/vendor/assets/components/angular-i18n/kkj-cm.js new file mode 100644 index 000000000..c84a25759 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kkj-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_kkj-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kkj.js b/vendor/assets/components/angular-i18n/kkj.js new file mode 100644 index 000000000..c2f2c0607 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kkj.js @@ -0,0 +1,2 @@ +require('./angular-locale_kkj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kl-gl.js b/vendor/assets/components/angular-i18n/kl-gl.js new file mode 100644 index 000000000..e30191286 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kl-gl.js @@ -0,0 +1,2 @@ +require('./angular-locale_kl-gl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kl.js b/vendor/assets/components/angular-i18n/kl.js new file mode 100644 index 000000000..291345c87 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kl.js @@ -0,0 +1,2 @@ +require('./angular-locale_kl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kln-ke.js b/vendor/assets/components/angular-i18n/kln-ke.js new file mode 100644 index 000000000..73e3830c5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kln-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_kln-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kln.js b/vendor/assets/components/angular-i18n/kln.js new file mode 100644 index 000000000..b2061d7b7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kln.js @@ -0,0 +1,2 @@ +require('./angular-locale_kln'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/km-kh.js b/vendor/assets/components/angular-i18n/km-kh.js new file mode 100644 index 000000000..2f7d2fafe --- /dev/null +++ b/vendor/assets/components/angular-i18n/km-kh.js @@ -0,0 +1,2 @@ +require('./angular-locale_km-kh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/km.js b/vendor/assets/components/angular-i18n/km.js new file mode 100644 index 000000000..9edf21685 --- /dev/null +++ b/vendor/assets/components/angular-i18n/km.js @@ -0,0 +1,2 @@ +require('./angular-locale_km'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kn-in.js b/vendor/assets/components/angular-i18n/kn-in.js new file mode 100644 index 000000000..9ef47206c --- /dev/null +++ b/vendor/assets/components/angular-i18n/kn-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_kn-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kn.js b/vendor/assets/components/angular-i18n/kn.js new file mode 100644 index 000000000..ad397948d --- /dev/null +++ b/vendor/assets/components/angular-i18n/kn.js @@ -0,0 +1,2 @@ +require('./angular-locale_kn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ko-kp.js b/vendor/assets/components/angular-i18n/ko-kp.js new file mode 100644 index 000000000..b450807bd --- /dev/null +++ b/vendor/assets/components/angular-i18n/ko-kp.js @@ -0,0 +1,2 @@ +require('./angular-locale_ko-kp'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ko-kr.js b/vendor/assets/components/angular-i18n/ko-kr.js new file mode 100644 index 000000000..1d0be1cc3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ko-kr.js @@ -0,0 +1,2 @@ +require('./angular-locale_ko-kr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ko.js b/vendor/assets/components/angular-i18n/ko.js new file mode 100644 index 000000000..f4432c903 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ko.js @@ -0,0 +1,2 @@ +require('./angular-locale_ko'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kok-in.js b/vendor/assets/components/angular-i18n/kok-in.js new file mode 100644 index 000000000..75e87941e --- /dev/null +++ b/vendor/assets/components/angular-i18n/kok-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_kok-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kok.js b/vendor/assets/components/angular-i18n/kok.js new file mode 100644 index 000000000..b5e66047c --- /dev/null +++ b/vendor/assets/components/angular-i18n/kok.js @@ -0,0 +1,2 @@ +require('./angular-locale_kok'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ks-arab-in.js b/vendor/assets/components/angular-i18n/ks-arab-in.js new file mode 100644 index 000000000..7cd37a119 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ks-arab-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_ks-arab-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ks-arab.js b/vendor/assets/components/angular-i18n/ks-arab.js new file mode 100644 index 000000000..0ead34c0a --- /dev/null +++ b/vendor/assets/components/angular-i18n/ks-arab.js @@ -0,0 +1,2 @@ +require('./angular-locale_ks-arab'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ks.js b/vendor/assets/components/angular-i18n/ks.js new file mode 100644 index 000000000..d4a49a493 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ks.js @@ -0,0 +1,2 @@ +require('./angular-locale_ks'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ksb-tz.js b/vendor/assets/components/angular-i18n/ksb-tz.js new file mode 100644 index 000000000..a6544fade --- /dev/null +++ b/vendor/assets/components/angular-i18n/ksb-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_ksb-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ksb.js b/vendor/assets/components/angular-i18n/ksb.js new file mode 100644 index 000000000..366256640 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ksb.js @@ -0,0 +1,2 @@ +require('./angular-locale_ksb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ksf-cm.js b/vendor/assets/components/angular-i18n/ksf-cm.js new file mode 100644 index 000000000..db16348d1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ksf-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_ksf-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ksf.js b/vendor/assets/components/angular-i18n/ksf.js new file mode 100644 index 000000000..18dac1da9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ksf.js @@ -0,0 +1,2 @@ +require('./angular-locale_ksf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ksh-de.js b/vendor/assets/components/angular-i18n/ksh-de.js new file mode 100644 index 000000000..ae6ed6f27 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ksh-de.js @@ -0,0 +1,2 @@ +require('./angular-locale_ksh-de'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ksh.js b/vendor/assets/components/angular-i18n/ksh.js new file mode 100644 index 000000000..94ab2afca --- /dev/null +++ b/vendor/assets/components/angular-i18n/ksh.js @@ -0,0 +1,2 @@ +require('./angular-locale_ksh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kw-gb.js b/vendor/assets/components/angular-i18n/kw-gb.js new file mode 100644 index 000000000..8a585b16f --- /dev/null +++ b/vendor/assets/components/angular-i18n/kw-gb.js @@ -0,0 +1,2 @@ +require('./angular-locale_kw-gb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/kw.js b/vendor/assets/components/angular-i18n/kw.js new file mode 100644 index 000000000..b66258523 --- /dev/null +++ b/vendor/assets/components/angular-i18n/kw.js @@ -0,0 +1,2 @@ +require('./angular-locale_kw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ky-cyrl-kg.js b/vendor/assets/components/angular-i18n/ky-cyrl-kg.js new file mode 100644 index 000000000..37c16cb85 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ky-cyrl-kg.js @@ -0,0 +1,2 @@ +require('./angular-locale_ky-cyrl-kg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ky-cyrl.js b/vendor/assets/components/angular-i18n/ky-cyrl.js new file mode 100644 index 000000000..e8525a438 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ky-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_ky-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ky.js b/vendor/assets/components/angular-i18n/ky.js new file mode 100644 index 000000000..cd0e0f8df --- /dev/null +++ b/vendor/assets/components/angular-i18n/ky.js @@ -0,0 +1,2 @@ +require('./angular-locale_ky'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lag-tz.js b/vendor/assets/components/angular-i18n/lag-tz.js new file mode 100644 index 000000000..eabc5223c --- /dev/null +++ b/vendor/assets/components/angular-i18n/lag-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_lag-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lag.js b/vendor/assets/components/angular-i18n/lag.js new file mode 100644 index 000000000..1e60e0650 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lag.js @@ -0,0 +1,2 @@ +require('./angular-locale_lag'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lb-lu.js b/vendor/assets/components/angular-i18n/lb-lu.js new file mode 100644 index 000000000..d070b43da --- /dev/null +++ b/vendor/assets/components/angular-i18n/lb-lu.js @@ -0,0 +1,2 @@ +require('./angular-locale_lb-lu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lb.js b/vendor/assets/components/angular-i18n/lb.js new file mode 100644 index 000000000..c2a90f121 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lb.js @@ -0,0 +1,2 @@ +require('./angular-locale_lb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lg-ug.js b/vendor/assets/components/angular-i18n/lg-ug.js new file mode 100644 index 000000000..d9b73e486 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lg-ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_lg-ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lg.js b/vendor/assets/components/angular-i18n/lg.js new file mode 100644 index 000000000..30a9d22ee --- /dev/null +++ b/vendor/assets/components/angular-i18n/lg.js @@ -0,0 +1,2 @@ +require('./angular-locale_lg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lkt-us.js b/vendor/assets/components/angular-i18n/lkt-us.js new file mode 100644 index 000000000..46ab2479b --- /dev/null +++ b/vendor/assets/components/angular-i18n/lkt-us.js @@ -0,0 +1,2 @@ +require('./angular-locale_lkt-us'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lkt.js b/vendor/assets/components/angular-i18n/lkt.js new file mode 100644 index 000000000..267bae2b0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lkt.js @@ -0,0 +1,2 @@ +require('./angular-locale_lkt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ln-ao.js b/vendor/assets/components/angular-i18n/ln-ao.js new file mode 100644 index 000000000..fb47608c0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ln-ao.js @@ -0,0 +1,2 @@ +require('./angular-locale_ln-ao'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ln-cd.js b/vendor/assets/components/angular-i18n/ln-cd.js new file mode 100644 index 000000000..3dce26738 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ln-cd.js @@ -0,0 +1,2 @@ +require('./angular-locale_ln-cd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ln-cf.js b/vendor/assets/components/angular-i18n/ln-cf.js new file mode 100644 index 000000000..b32e2fffb --- /dev/null +++ b/vendor/assets/components/angular-i18n/ln-cf.js @@ -0,0 +1,2 @@ +require('./angular-locale_ln-cf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ln-cg.js b/vendor/assets/components/angular-i18n/ln-cg.js new file mode 100644 index 000000000..a876091f4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ln-cg.js @@ -0,0 +1,2 @@ +require('./angular-locale_ln-cg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ln.js b/vendor/assets/components/angular-i18n/ln.js new file mode 100644 index 000000000..174ea078f --- /dev/null +++ b/vendor/assets/components/angular-i18n/ln.js @@ -0,0 +1,2 @@ +require('./angular-locale_ln'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lo-la.js b/vendor/assets/components/angular-i18n/lo-la.js new file mode 100644 index 000000000..d5de6cd99 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lo-la.js @@ -0,0 +1,2 @@ +require('./angular-locale_lo-la'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lo.js b/vendor/assets/components/angular-i18n/lo.js new file mode 100644 index 000000000..bf5102d77 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lo.js @@ -0,0 +1,2 @@ +require('./angular-locale_lo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lt-lt.js b/vendor/assets/components/angular-i18n/lt-lt.js new file mode 100644 index 000000000..32f9714cc --- /dev/null +++ b/vendor/assets/components/angular-i18n/lt-lt.js @@ -0,0 +1,2 @@ +require('./angular-locale_lt-lt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lt.js b/vendor/assets/components/angular-i18n/lt.js new file mode 100644 index 000000000..b694b5a29 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lt.js @@ -0,0 +1,2 @@ +require('./angular-locale_lt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lu-cd.js b/vendor/assets/components/angular-i18n/lu-cd.js new file mode 100644 index 000000000..b99b7d541 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lu-cd.js @@ -0,0 +1,2 @@ +require('./angular-locale_lu-cd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lu.js b/vendor/assets/components/angular-i18n/lu.js new file mode 100644 index 000000000..3154c93bf --- /dev/null +++ b/vendor/assets/components/angular-i18n/lu.js @@ -0,0 +1,2 @@ +require('./angular-locale_lu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/luo-ke.js b/vendor/assets/components/angular-i18n/luo-ke.js new file mode 100644 index 000000000..5b8a5ee6b --- /dev/null +++ b/vendor/assets/components/angular-i18n/luo-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_luo-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/luo.js b/vendor/assets/components/angular-i18n/luo.js new file mode 100644 index 000000000..2bb5b9019 --- /dev/null +++ b/vendor/assets/components/angular-i18n/luo.js @@ -0,0 +1,2 @@ +require('./angular-locale_luo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/luy-ke.js b/vendor/assets/components/angular-i18n/luy-ke.js new file mode 100644 index 000000000..281ae2fad --- /dev/null +++ b/vendor/assets/components/angular-i18n/luy-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_luy-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/luy.js b/vendor/assets/components/angular-i18n/luy.js new file mode 100644 index 000000000..86e294831 --- /dev/null +++ b/vendor/assets/components/angular-i18n/luy.js @@ -0,0 +1,2 @@ +require('./angular-locale_luy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lv-lv.js b/vendor/assets/components/angular-i18n/lv-lv.js new file mode 100644 index 000000000..e56847b30 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lv-lv.js @@ -0,0 +1,2 @@ +require('./angular-locale_lv-lv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/lv.js b/vendor/assets/components/angular-i18n/lv.js new file mode 100644 index 000000000..6da7cde24 --- /dev/null +++ b/vendor/assets/components/angular-i18n/lv.js @@ -0,0 +1,2 @@ +require('./angular-locale_lv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mas-ke.js b/vendor/assets/components/angular-i18n/mas-ke.js new file mode 100644 index 000000000..cf3807153 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mas-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_mas-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mas-tz.js b/vendor/assets/components/angular-i18n/mas-tz.js new file mode 100644 index 000000000..59bce0d66 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mas-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_mas-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mas.js b/vendor/assets/components/angular-i18n/mas.js new file mode 100644 index 000000000..91f0f6e2a --- /dev/null +++ b/vendor/assets/components/angular-i18n/mas.js @@ -0,0 +1,2 @@ +require('./angular-locale_mas'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mer-ke.js b/vendor/assets/components/angular-i18n/mer-ke.js new file mode 100644 index 000000000..7c4320400 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mer-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_mer-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mer.js b/vendor/assets/components/angular-i18n/mer.js new file mode 100644 index 000000000..37d1d1264 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mer.js @@ -0,0 +1,2 @@ +require('./angular-locale_mer'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mfe-mu.js b/vendor/assets/components/angular-i18n/mfe-mu.js new file mode 100644 index 000000000..4f2aa03ad --- /dev/null +++ b/vendor/assets/components/angular-i18n/mfe-mu.js @@ -0,0 +1,2 @@ +require('./angular-locale_mfe-mu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mfe.js b/vendor/assets/components/angular-i18n/mfe.js new file mode 100644 index 000000000..7c8730535 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mfe.js @@ -0,0 +1,2 @@ +require('./angular-locale_mfe'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mg-mg.js b/vendor/assets/components/angular-i18n/mg-mg.js new file mode 100644 index 000000000..91e6a74d6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mg-mg.js @@ -0,0 +1,2 @@ +require('./angular-locale_mg-mg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mg.js b/vendor/assets/components/angular-i18n/mg.js new file mode 100644 index 000000000..21122c5d6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mg.js @@ -0,0 +1,2 @@ +require('./angular-locale_mg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mgh-mz.js b/vendor/assets/components/angular-i18n/mgh-mz.js new file mode 100644 index 000000000..655ce43ac --- /dev/null +++ b/vendor/assets/components/angular-i18n/mgh-mz.js @@ -0,0 +1,2 @@ +require('./angular-locale_mgh-mz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mgh.js b/vendor/assets/components/angular-i18n/mgh.js new file mode 100644 index 000000000..3c20a8b59 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mgh.js @@ -0,0 +1,2 @@ +require('./angular-locale_mgh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mgo-cm.js b/vendor/assets/components/angular-i18n/mgo-cm.js new file mode 100644 index 000000000..bf25f8732 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mgo-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_mgo-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mgo.js b/vendor/assets/components/angular-i18n/mgo.js new file mode 100644 index 000000000..4a9b725bd --- /dev/null +++ b/vendor/assets/components/angular-i18n/mgo.js @@ -0,0 +1,2 @@ +require('./angular-locale_mgo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mk-mk.js b/vendor/assets/components/angular-i18n/mk-mk.js new file mode 100644 index 000000000..4681752f0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mk-mk.js @@ -0,0 +1,2 @@ +require('./angular-locale_mk-mk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mk.js b/vendor/assets/components/angular-i18n/mk.js new file mode 100644 index 000000000..588f2799f --- /dev/null +++ b/vendor/assets/components/angular-i18n/mk.js @@ -0,0 +1,2 @@ +require('./angular-locale_mk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ml-in.js b/vendor/assets/components/angular-i18n/ml-in.js new file mode 100644 index 000000000..b1390da77 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ml-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_ml-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ml.js b/vendor/assets/components/angular-i18n/ml.js new file mode 100644 index 000000000..a72a56b9a --- /dev/null +++ b/vendor/assets/components/angular-i18n/ml.js @@ -0,0 +1,2 @@ +require('./angular-locale_ml'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mn-cyrl-mn.js b/vendor/assets/components/angular-i18n/mn-cyrl-mn.js new file mode 100644 index 000000000..ae5869719 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mn-cyrl-mn.js @@ -0,0 +1,2 @@ +require('./angular-locale_mn-cyrl-mn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mn-cyrl.js b/vendor/assets/components/angular-i18n/mn-cyrl.js new file mode 100644 index 000000000..a0d369078 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mn-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_mn-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mn.js b/vendor/assets/components/angular-i18n/mn.js new file mode 100644 index 000000000..37704b2fd --- /dev/null +++ b/vendor/assets/components/angular-i18n/mn.js @@ -0,0 +1,2 @@ +require('./angular-locale_mn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mr-in.js b/vendor/assets/components/angular-i18n/mr-in.js new file mode 100644 index 000000000..b2147eb77 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mr-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_mr-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mr.js b/vendor/assets/components/angular-i18n/mr.js new file mode 100644 index 000000000..f80fb086f --- /dev/null +++ b/vendor/assets/components/angular-i18n/mr.js @@ -0,0 +1,2 @@ +require('./angular-locale_mr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ms-bn.js b/vendor/assets/components/angular-i18n/ms-bn.js new file mode 100644 index 000000000..17cbdd28e --- /dev/null +++ b/vendor/assets/components/angular-i18n/ms-bn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ms-bn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ms-latn-bn.js b/vendor/assets/components/angular-i18n/ms-latn-bn.js new file mode 100644 index 000000000..c632b0326 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ms-latn-bn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ms-latn-bn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ms-latn-my.js b/vendor/assets/components/angular-i18n/ms-latn-my.js new file mode 100644 index 000000000..1a0be25ee --- /dev/null +++ b/vendor/assets/components/angular-i18n/ms-latn-my.js @@ -0,0 +1,2 @@ +require('./angular-locale_ms-latn-my'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ms-latn-sg.js b/vendor/assets/components/angular-i18n/ms-latn-sg.js new file mode 100644 index 000000000..3b5e51ec7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ms-latn-sg.js @@ -0,0 +1,2 @@ +require('./angular-locale_ms-latn-sg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ms-latn.js b/vendor/assets/components/angular-i18n/ms-latn.js new file mode 100644 index 000000000..664d794e4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ms-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ms-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ms-my.js b/vendor/assets/components/angular-i18n/ms-my.js new file mode 100644 index 000000000..dec7162c8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ms-my.js @@ -0,0 +1,2 @@ +require('./angular-locale_ms-my'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ms.js b/vendor/assets/components/angular-i18n/ms.js new file mode 100644 index 000000000..9bbf9c6aa --- /dev/null +++ b/vendor/assets/components/angular-i18n/ms.js @@ -0,0 +1,2 @@ +require('./angular-locale_ms'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mt-mt.js b/vendor/assets/components/angular-i18n/mt-mt.js new file mode 100644 index 000000000..fb73a2fa9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mt-mt.js @@ -0,0 +1,2 @@ +require('./angular-locale_mt-mt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mt.js b/vendor/assets/components/angular-i18n/mt.js new file mode 100644 index 000000000..7dab44615 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mt.js @@ -0,0 +1,2 @@ +require('./angular-locale_mt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mua-cm.js b/vendor/assets/components/angular-i18n/mua-cm.js new file mode 100644 index 000000000..3f0cc2dfe --- /dev/null +++ b/vendor/assets/components/angular-i18n/mua-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_mua-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/mua.js b/vendor/assets/components/angular-i18n/mua.js new file mode 100644 index 000000000..b1b92c341 --- /dev/null +++ b/vendor/assets/components/angular-i18n/mua.js @@ -0,0 +1,2 @@ +require('./angular-locale_mua'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/my-mm.js b/vendor/assets/components/angular-i18n/my-mm.js new file mode 100644 index 000000000..e6f88d703 --- /dev/null +++ b/vendor/assets/components/angular-i18n/my-mm.js @@ -0,0 +1,2 @@ +require('./angular-locale_my-mm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/my.js b/vendor/assets/components/angular-i18n/my.js new file mode 100644 index 000000000..61e328f91 --- /dev/null +++ b/vendor/assets/components/angular-i18n/my.js @@ -0,0 +1,2 @@ +require('./angular-locale_my'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/naq-na.js b/vendor/assets/components/angular-i18n/naq-na.js new file mode 100644 index 000000000..1a3532325 --- /dev/null +++ b/vendor/assets/components/angular-i18n/naq-na.js @@ -0,0 +1,2 @@ +require('./angular-locale_naq-na'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/naq.js b/vendor/assets/components/angular-i18n/naq.js new file mode 100644 index 000000000..03d0186bd --- /dev/null +++ b/vendor/assets/components/angular-i18n/naq.js @@ -0,0 +1,2 @@ +require('./angular-locale_naq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nb-no.js b/vendor/assets/components/angular-i18n/nb-no.js new file mode 100644 index 000000000..42c2301f8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nb-no.js @@ -0,0 +1,2 @@ +require('./angular-locale_nb-no'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nb-sj.js b/vendor/assets/components/angular-i18n/nb-sj.js new file mode 100644 index 000000000..ce7e41f20 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nb-sj.js @@ -0,0 +1,2 @@ +require('./angular-locale_nb-sj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nb.js b/vendor/assets/components/angular-i18n/nb.js new file mode 100644 index 000000000..f30e1c9e1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nb.js @@ -0,0 +1,2 @@ +require('./angular-locale_nb'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nd-zw.js b/vendor/assets/components/angular-i18n/nd-zw.js new file mode 100644 index 000000000..bacb25a37 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nd-zw.js @@ -0,0 +1,2 @@ +require('./angular-locale_nd-zw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nd.js b/vendor/assets/components/angular-i18n/nd.js new file mode 100644 index 000000000..93953f87d --- /dev/null +++ b/vendor/assets/components/angular-i18n/nd.js @@ -0,0 +1,2 @@ +require('./angular-locale_nd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ne-in.js b/vendor/assets/components/angular-i18n/ne-in.js new file mode 100644 index 000000000..28814e3eb --- /dev/null +++ b/vendor/assets/components/angular-i18n/ne-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_ne-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ne-np.js b/vendor/assets/components/angular-i18n/ne-np.js new file mode 100644 index 000000000..cd56b7e7a --- /dev/null +++ b/vendor/assets/components/angular-i18n/ne-np.js @@ -0,0 +1,2 @@ +require('./angular-locale_ne-np'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ne.js b/vendor/assets/components/angular-i18n/ne.js new file mode 100644 index 000000000..21875d8dd --- /dev/null +++ b/vendor/assets/components/angular-i18n/ne.js @@ -0,0 +1,2 @@ +require('./angular-locale_ne'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl-aw.js b/vendor/assets/components/angular-i18n/nl-aw.js new file mode 100644 index 000000000..fb9970eee --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl-aw.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl-aw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl-be.js b/vendor/assets/components/angular-i18n/nl-be.js new file mode 100644 index 000000000..ee325cd04 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl-be.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl-be'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl-bq.js b/vendor/assets/components/angular-i18n/nl-bq.js new file mode 100644 index 000000000..56360d915 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl-bq.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl-bq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl-cw.js b/vendor/assets/components/angular-i18n/nl-cw.js new file mode 100644 index 000000000..a45f9ac61 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl-cw.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl-cw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl-nl.js b/vendor/assets/components/angular-i18n/nl-nl.js new file mode 100644 index 000000000..52ccf7e39 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl-nl.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl-nl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl-sr.js b/vendor/assets/components/angular-i18n/nl-sr.js new file mode 100644 index 000000000..f0868ec62 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl-sr.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl-sr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl-sx.js b/vendor/assets/components/angular-i18n/nl-sx.js new file mode 100644 index 000000000..1e5fe8077 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl-sx.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl-sx'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nl.js b/vendor/assets/components/angular-i18n/nl.js new file mode 100644 index 000000000..aa8e9ed48 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nl.js @@ -0,0 +1,2 @@ +require('./angular-locale_nl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nmg-cm.js b/vendor/assets/components/angular-i18n/nmg-cm.js new file mode 100644 index 000000000..e9a02a6c2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nmg-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_nmg-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nmg.js b/vendor/assets/components/angular-i18n/nmg.js new file mode 100644 index 000000000..4d9a74bcd --- /dev/null +++ b/vendor/assets/components/angular-i18n/nmg.js @@ -0,0 +1,2 @@ +require('./angular-locale_nmg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nn-no.js b/vendor/assets/components/angular-i18n/nn-no.js new file mode 100644 index 000000000..ad936b026 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nn-no.js @@ -0,0 +1,2 @@ +require('./angular-locale_nn-no'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nn.js b/vendor/assets/components/angular-i18n/nn.js new file mode 100644 index 000000000..d679bd959 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nn.js @@ -0,0 +1,2 @@ +require('./angular-locale_nn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nnh-cm.js b/vendor/assets/components/angular-i18n/nnh-cm.js new file mode 100644 index 000000000..5edf0f03c --- /dev/null +++ b/vendor/assets/components/angular-i18n/nnh-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_nnh-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nnh.js b/vendor/assets/components/angular-i18n/nnh.js new file mode 100644 index 000000000..aa221ed54 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nnh.js @@ -0,0 +1,2 @@ +require('./angular-locale_nnh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/no-no.js b/vendor/assets/components/angular-i18n/no-no.js new file mode 100644 index 000000000..21b82748a --- /dev/null +++ b/vendor/assets/components/angular-i18n/no-no.js @@ -0,0 +1,2 @@ +require('./angular-locale_no-no'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/no.js b/vendor/assets/components/angular-i18n/no.js new file mode 100644 index 000000000..826a645e5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/no.js @@ -0,0 +1,2 @@ +require('./angular-locale_no'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nr-za.js b/vendor/assets/components/angular-i18n/nr-za.js new file mode 100644 index 000000000..b449a3b99 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nr-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_nr-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nr.js b/vendor/assets/components/angular-i18n/nr.js new file mode 100644 index 000000000..6196e888a --- /dev/null +++ b/vendor/assets/components/angular-i18n/nr.js @@ -0,0 +1,2 @@ +require('./angular-locale_nr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nso-za.js b/vendor/assets/components/angular-i18n/nso-za.js new file mode 100644 index 000000000..fb1a2b471 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nso-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_nso-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nso.js b/vendor/assets/components/angular-i18n/nso.js new file mode 100644 index 000000000..d193da39b --- /dev/null +++ b/vendor/assets/components/angular-i18n/nso.js @@ -0,0 +1,2 @@ +require('./angular-locale_nso'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nus-sd.js b/vendor/assets/components/angular-i18n/nus-sd.js new file mode 100644 index 000000000..fa5737a1c --- /dev/null +++ b/vendor/assets/components/angular-i18n/nus-sd.js @@ -0,0 +1,2 @@ +require('./angular-locale_nus-sd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nus.js b/vendor/assets/components/angular-i18n/nus.js new file mode 100644 index 000000000..e18d2f785 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nus.js @@ -0,0 +1,2 @@ +require('./angular-locale_nus'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nyn-ug.js b/vendor/assets/components/angular-i18n/nyn-ug.js new file mode 100644 index 000000000..ac3cc989e --- /dev/null +++ b/vendor/assets/components/angular-i18n/nyn-ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_nyn-ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/nyn.js b/vendor/assets/components/angular-i18n/nyn.js new file mode 100644 index 000000000..08558fa78 --- /dev/null +++ b/vendor/assets/components/angular-i18n/nyn.js @@ -0,0 +1,2 @@ +require('./angular-locale_nyn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/om-et.js b/vendor/assets/components/angular-i18n/om-et.js new file mode 100644 index 000000000..f3763f0e8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/om-et.js @@ -0,0 +1,2 @@ +require('./angular-locale_om-et'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/om-ke.js b/vendor/assets/components/angular-i18n/om-ke.js new file mode 100644 index 000000000..c88399247 --- /dev/null +++ b/vendor/assets/components/angular-i18n/om-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_om-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/om.js b/vendor/assets/components/angular-i18n/om.js new file mode 100644 index 000000000..a60e4739d --- /dev/null +++ b/vendor/assets/components/angular-i18n/om.js @@ -0,0 +1,2 @@ +require('./angular-locale_om'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/or-in.js b/vendor/assets/components/angular-i18n/or-in.js new file mode 100644 index 000000000..146f53ee9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/or-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_or-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/or.js b/vendor/assets/components/angular-i18n/or.js new file mode 100644 index 000000000..fda1fa96b --- /dev/null +++ b/vendor/assets/components/angular-i18n/or.js @@ -0,0 +1,2 @@ +require('./angular-locale_or'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/os-ge.js b/vendor/assets/components/angular-i18n/os-ge.js new file mode 100644 index 000000000..a48f307ca --- /dev/null +++ b/vendor/assets/components/angular-i18n/os-ge.js @@ -0,0 +1,2 @@ +require('./angular-locale_os-ge'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/os-ru.js b/vendor/assets/components/angular-i18n/os-ru.js new file mode 100644 index 000000000..dccd93695 --- /dev/null +++ b/vendor/assets/components/angular-i18n/os-ru.js @@ -0,0 +1,2 @@ +require('./angular-locale_os-ru'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/os.js b/vendor/assets/components/angular-i18n/os.js new file mode 100644 index 000000000..32d102d05 --- /dev/null +++ b/vendor/assets/components/angular-i18n/os.js @@ -0,0 +1,2 @@ +require('./angular-locale_os'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pa-arab-pk.js b/vendor/assets/components/angular-i18n/pa-arab-pk.js new file mode 100644 index 000000000..7044d5772 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pa-arab-pk.js @@ -0,0 +1,2 @@ +require('./angular-locale_pa-arab-pk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pa-arab.js b/vendor/assets/components/angular-i18n/pa-arab.js new file mode 100644 index 000000000..302f874c6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pa-arab.js @@ -0,0 +1,2 @@ +require('./angular-locale_pa-arab'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pa-guru-in.js b/vendor/assets/components/angular-i18n/pa-guru-in.js new file mode 100644 index 000000000..946d46d5e --- /dev/null +++ b/vendor/assets/components/angular-i18n/pa-guru-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_pa-guru-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pa-guru.js b/vendor/assets/components/angular-i18n/pa-guru.js new file mode 100644 index 000000000..43d862e6b --- /dev/null +++ b/vendor/assets/components/angular-i18n/pa-guru.js @@ -0,0 +1,2 @@ +require('./angular-locale_pa-guru'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pa.js b/vendor/assets/components/angular-i18n/pa.js new file mode 100644 index 000000000..031c1f659 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pa.js @@ -0,0 +1,2 @@ +require('./angular-locale_pa'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/package.json b/vendor/assets/components/angular-i18n/package.json new file mode 100644 index 000000000..e972cd823 --- /dev/null +++ b/vendor/assets/components/angular-i18n/package.json @@ -0,0 +1,26 @@ +{ + "name": "angular-i18n", + "version": "1.3.15", + "description": "AngularJS module for internationalization", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/angular/angular.js.git" + }, + "keywords": [ + "angular", + "framework", + "browser", + "internationalization", + "i18n", + "client-side" + ], + "author": "Angular Core Team ", + "license": "MIT", + "bugs": { + "url": "https://github.com/angular/angular.js/issues" + }, + "homepage": "http://angularjs.org" +} diff --git a/vendor/assets/components/angular-i18n/pl-pl.js b/vendor/assets/components/angular-i18n/pl-pl.js new file mode 100644 index 000000000..dd32b7f92 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pl-pl.js @@ -0,0 +1,2 @@ +require('./angular-locale_pl-pl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pl.js b/vendor/assets/components/angular-i18n/pl.js new file mode 100644 index 000000000..14221b37f --- /dev/null +++ b/vendor/assets/components/angular-i18n/pl.js @@ -0,0 +1,2 @@ +require('./angular-locale_pl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ps-af.js b/vendor/assets/components/angular-i18n/ps-af.js new file mode 100644 index 000000000..77f061a71 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ps-af.js @@ -0,0 +1,2 @@ +require('./angular-locale_ps-af'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ps.js b/vendor/assets/components/angular-i18n/ps.js new file mode 100644 index 000000000..4b93814e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ps.js @@ -0,0 +1,2 @@ +require('./angular-locale_ps'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-ao.js b/vendor/assets/components/angular-i18n/pt-ao.js new file mode 100644 index 000000000..015289eca --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-ao.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-ao'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-br.js b/vendor/assets/components/angular-i18n/pt-br.js new file mode 100644 index 000000000..7cc53b7e7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-br.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-br'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-cv.js b/vendor/assets/components/angular-i18n/pt-cv.js new file mode 100644 index 000000000..db26fe859 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-cv.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-cv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-gw.js b/vendor/assets/components/angular-i18n/pt-gw.js new file mode 100644 index 000000000..8c9368543 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-gw.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-gw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-mo.js b/vendor/assets/components/angular-i18n/pt-mo.js new file mode 100644 index 000000000..f7f91331a --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-mo.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-mo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-mz.js b/vendor/assets/components/angular-i18n/pt-mz.js new file mode 100644 index 000000000..44f518e2d --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-mz.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-mz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-pt.js b/vendor/assets/components/angular-i18n/pt-pt.js new file mode 100644 index 000000000..d3c43c19c --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-pt.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-pt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-st.js b/vendor/assets/components/angular-i18n/pt-st.js new file mode 100644 index 000000000..e64ce8335 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-st.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-st'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt-tl.js b/vendor/assets/components/angular-i18n/pt-tl.js new file mode 100644 index 000000000..992d37160 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt-tl.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt-tl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/pt.js b/vendor/assets/components/angular-i18n/pt.js new file mode 100644 index 000000000..b18a4dc55 --- /dev/null +++ b/vendor/assets/components/angular-i18n/pt.js @@ -0,0 +1,2 @@ +require('./angular-locale_pt'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/qu-bo.js b/vendor/assets/components/angular-i18n/qu-bo.js new file mode 100644 index 000000000..fed6ab490 --- /dev/null +++ b/vendor/assets/components/angular-i18n/qu-bo.js @@ -0,0 +1,2 @@ +require('./angular-locale_qu-bo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/qu-ec.js b/vendor/assets/components/angular-i18n/qu-ec.js new file mode 100644 index 000000000..c9b3a163b --- /dev/null +++ b/vendor/assets/components/angular-i18n/qu-ec.js @@ -0,0 +1,2 @@ +require('./angular-locale_qu-ec'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/qu-pe.js b/vendor/assets/components/angular-i18n/qu-pe.js new file mode 100644 index 000000000..864649402 --- /dev/null +++ b/vendor/assets/components/angular-i18n/qu-pe.js @@ -0,0 +1,2 @@ +require('./angular-locale_qu-pe'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/qu.js b/vendor/assets/components/angular-i18n/qu.js new file mode 100644 index 000000000..ad2a65103 --- /dev/null +++ b/vendor/assets/components/angular-i18n/qu.js @@ -0,0 +1,2 @@ +require('./angular-locale_qu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rm-ch.js b/vendor/assets/components/angular-i18n/rm-ch.js new file mode 100644 index 000000000..387a46051 --- /dev/null +++ b/vendor/assets/components/angular-i18n/rm-ch.js @@ -0,0 +1,2 @@ +require('./angular-locale_rm-ch'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rm.js b/vendor/assets/components/angular-i18n/rm.js new file mode 100644 index 000000000..6b4ae5b86 --- /dev/null +++ b/vendor/assets/components/angular-i18n/rm.js @@ -0,0 +1,2 @@ +require('./angular-locale_rm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rn-bi.js b/vendor/assets/components/angular-i18n/rn-bi.js new file mode 100644 index 000000000..724386198 --- /dev/null +++ b/vendor/assets/components/angular-i18n/rn-bi.js @@ -0,0 +1,2 @@ +require('./angular-locale_rn-bi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rn.js b/vendor/assets/components/angular-i18n/rn.js new file mode 100644 index 000000000..4353801ff --- /dev/null +++ b/vendor/assets/components/angular-i18n/rn.js @@ -0,0 +1,2 @@ +require('./angular-locale_rn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ro-md.js b/vendor/assets/components/angular-i18n/ro-md.js new file mode 100644 index 000000000..602c1f513 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ro-md.js @@ -0,0 +1,2 @@ +require('./angular-locale_ro-md'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ro-ro.js b/vendor/assets/components/angular-i18n/ro-ro.js new file mode 100644 index 000000000..c0a6938fb --- /dev/null +++ b/vendor/assets/components/angular-i18n/ro-ro.js @@ -0,0 +1,2 @@ +require('./angular-locale_ro-ro'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ro.js b/vendor/assets/components/angular-i18n/ro.js new file mode 100644 index 000000000..db9c7452e --- /dev/null +++ b/vendor/assets/components/angular-i18n/ro.js @@ -0,0 +1,2 @@ +require('./angular-locale_ro'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rof-tz.js b/vendor/assets/components/angular-i18n/rof-tz.js new file mode 100644 index 000000000..79b047a37 --- /dev/null +++ b/vendor/assets/components/angular-i18n/rof-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_rof-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rof.js b/vendor/assets/components/angular-i18n/rof.js new file mode 100644 index 000000000..d2529d2bb --- /dev/null +++ b/vendor/assets/components/angular-i18n/rof.js @@ -0,0 +1,2 @@ +require('./angular-locale_rof'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ru-by.js b/vendor/assets/components/angular-i18n/ru-by.js new file mode 100644 index 000000000..dc78992d1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ru-by.js @@ -0,0 +1,2 @@ +require('./angular-locale_ru-by'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ru-kg.js b/vendor/assets/components/angular-i18n/ru-kg.js new file mode 100644 index 000000000..7e2ff275e --- /dev/null +++ b/vendor/assets/components/angular-i18n/ru-kg.js @@ -0,0 +1,2 @@ +require('./angular-locale_ru-kg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ru-kz.js b/vendor/assets/components/angular-i18n/ru-kz.js new file mode 100644 index 000000000..1021a914d --- /dev/null +++ b/vendor/assets/components/angular-i18n/ru-kz.js @@ -0,0 +1,2 @@ +require('./angular-locale_ru-kz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ru-md.js b/vendor/assets/components/angular-i18n/ru-md.js new file mode 100644 index 000000000..2735cabf0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ru-md.js @@ -0,0 +1,2 @@ +require('./angular-locale_ru-md'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ru-ru.js b/vendor/assets/components/angular-i18n/ru-ru.js new file mode 100644 index 000000000..bb3c17055 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ru-ru.js @@ -0,0 +1,2 @@ +require('./angular-locale_ru-ru'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ru-ua.js b/vendor/assets/components/angular-i18n/ru-ua.js new file mode 100644 index 000000000..f5bcda1c5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ru-ua.js @@ -0,0 +1,2 @@ +require('./angular-locale_ru-ua'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ru.js b/vendor/assets/components/angular-i18n/ru.js new file mode 100644 index 000000000..f2f2d0e91 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ru.js @@ -0,0 +1,2 @@ +require('./angular-locale_ru'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rw-rw.js b/vendor/assets/components/angular-i18n/rw-rw.js new file mode 100644 index 000000000..9abb1c601 --- /dev/null +++ b/vendor/assets/components/angular-i18n/rw-rw.js @@ -0,0 +1,2 @@ +require('./angular-locale_rw-rw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rw.js b/vendor/assets/components/angular-i18n/rw.js new file mode 100644 index 000000000..dc6206439 --- /dev/null +++ b/vendor/assets/components/angular-i18n/rw.js @@ -0,0 +1,2 @@ +require('./angular-locale_rw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rwk-tz.js b/vendor/assets/components/angular-i18n/rwk-tz.js new file mode 100644 index 000000000..f51f41c8c --- /dev/null +++ b/vendor/assets/components/angular-i18n/rwk-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_rwk-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/rwk.js b/vendor/assets/components/angular-i18n/rwk.js new file mode 100644 index 000000000..73cc49129 --- /dev/null +++ b/vendor/assets/components/angular-i18n/rwk.js @@ -0,0 +1,2 @@ +require('./angular-locale_rwk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sah-ru.js b/vendor/assets/components/angular-i18n/sah-ru.js new file mode 100644 index 000000000..cbb9edbb1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sah-ru.js @@ -0,0 +1,2 @@ +require('./angular-locale_sah-ru'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sah.js b/vendor/assets/components/angular-i18n/sah.js new file mode 100644 index 000000000..48bd9ee15 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sah.js @@ -0,0 +1,2 @@ +require('./angular-locale_sah'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/saq-ke.js b/vendor/assets/components/angular-i18n/saq-ke.js new file mode 100644 index 000000000..8c2944b58 --- /dev/null +++ b/vendor/assets/components/angular-i18n/saq-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_saq-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/saq.js b/vendor/assets/components/angular-i18n/saq.js new file mode 100644 index 000000000..61494bbaf --- /dev/null +++ b/vendor/assets/components/angular-i18n/saq.js @@ -0,0 +1,2 @@ +require('./angular-locale_saq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sbp-tz.js b/vendor/assets/components/angular-i18n/sbp-tz.js new file mode 100644 index 000000000..7e9f31edb --- /dev/null +++ b/vendor/assets/components/angular-i18n/sbp-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_sbp-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sbp.js b/vendor/assets/components/angular-i18n/sbp.js new file mode 100644 index 000000000..009d036e2 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sbp.js @@ -0,0 +1,2 @@ +require('./angular-locale_sbp'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/se-fi.js b/vendor/assets/components/angular-i18n/se-fi.js new file mode 100644 index 000000000..2972d9142 --- /dev/null +++ b/vendor/assets/components/angular-i18n/se-fi.js @@ -0,0 +1,2 @@ +require('./angular-locale_se-fi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/se-no.js b/vendor/assets/components/angular-i18n/se-no.js new file mode 100644 index 000000000..9e15c6824 --- /dev/null +++ b/vendor/assets/components/angular-i18n/se-no.js @@ -0,0 +1,2 @@ +require('./angular-locale_se-no'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/se-se.js b/vendor/assets/components/angular-i18n/se-se.js new file mode 100644 index 000000000..fa09e52ca --- /dev/null +++ b/vendor/assets/components/angular-i18n/se-se.js @@ -0,0 +1,2 @@ +require('./angular-locale_se-se'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/se.js b/vendor/assets/components/angular-i18n/se.js new file mode 100644 index 000000000..474143c07 --- /dev/null +++ b/vendor/assets/components/angular-i18n/se.js @@ -0,0 +1,2 @@ +require('./angular-locale_se'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/seh-mz.js b/vendor/assets/components/angular-i18n/seh-mz.js new file mode 100644 index 000000000..3c9a92774 --- /dev/null +++ b/vendor/assets/components/angular-i18n/seh-mz.js @@ -0,0 +1,2 @@ +require('./angular-locale_seh-mz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/seh.js b/vendor/assets/components/angular-i18n/seh.js new file mode 100644 index 000000000..e11e59148 --- /dev/null +++ b/vendor/assets/components/angular-i18n/seh.js @@ -0,0 +1,2 @@ +require('./angular-locale_seh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ses-ml.js b/vendor/assets/components/angular-i18n/ses-ml.js new file mode 100644 index 000000000..896ebade1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ses-ml.js @@ -0,0 +1,2 @@ +require('./angular-locale_ses-ml'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ses.js b/vendor/assets/components/angular-i18n/ses.js new file mode 100644 index 000000000..99b88568a --- /dev/null +++ b/vendor/assets/components/angular-i18n/ses.js @@ -0,0 +1,2 @@ +require('./angular-locale_ses'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sg-cf.js b/vendor/assets/components/angular-i18n/sg-cf.js new file mode 100644 index 000000000..0c4013a7a --- /dev/null +++ b/vendor/assets/components/angular-i18n/sg-cf.js @@ -0,0 +1,2 @@ +require('./angular-locale_sg-cf'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sg.js b/vendor/assets/components/angular-i18n/sg.js new file mode 100644 index 000000000..6e3522e21 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sg.js @@ -0,0 +1,2 @@ +require('./angular-locale_sg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/shi-latn-ma.js b/vendor/assets/components/angular-i18n/shi-latn-ma.js new file mode 100644 index 000000000..2b25e893e --- /dev/null +++ b/vendor/assets/components/angular-i18n/shi-latn-ma.js @@ -0,0 +1,2 @@ +require('./angular-locale_shi-latn-ma'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/shi-latn.js b/vendor/assets/components/angular-i18n/shi-latn.js new file mode 100644 index 000000000..9c3173fd8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/shi-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_shi-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/shi-tfng-ma.js b/vendor/assets/components/angular-i18n/shi-tfng-ma.js new file mode 100644 index 000000000..1f90e0f8c --- /dev/null +++ b/vendor/assets/components/angular-i18n/shi-tfng-ma.js @@ -0,0 +1,2 @@ +require('./angular-locale_shi-tfng-ma'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/shi-tfng.js b/vendor/assets/components/angular-i18n/shi-tfng.js new file mode 100644 index 000000000..89f510bc5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/shi-tfng.js @@ -0,0 +1,2 @@ +require('./angular-locale_shi-tfng'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/shi.js b/vendor/assets/components/angular-i18n/shi.js new file mode 100644 index 000000000..dbee69f49 --- /dev/null +++ b/vendor/assets/components/angular-i18n/shi.js @@ -0,0 +1,2 @@ +require('./angular-locale_shi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/si-lk.js b/vendor/assets/components/angular-i18n/si-lk.js new file mode 100644 index 000000000..6324ff224 --- /dev/null +++ b/vendor/assets/components/angular-i18n/si-lk.js @@ -0,0 +1,2 @@ +require('./angular-locale_si-lk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/si.js b/vendor/assets/components/angular-i18n/si.js new file mode 100644 index 000000000..b565fc4f9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/si.js @@ -0,0 +1,2 @@ +require('./angular-locale_si'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sk-sk.js b/vendor/assets/components/angular-i18n/sk-sk.js new file mode 100644 index 000000000..14b2bd7f4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sk-sk.js @@ -0,0 +1,2 @@ +require('./angular-locale_sk-sk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sk.js b/vendor/assets/components/angular-i18n/sk.js new file mode 100644 index 000000000..a8a7abcaa --- /dev/null +++ b/vendor/assets/components/angular-i18n/sk.js @@ -0,0 +1,2 @@ +require('./angular-locale_sk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sl-si.js b/vendor/assets/components/angular-i18n/sl-si.js new file mode 100644 index 000000000..237d5e384 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sl-si.js @@ -0,0 +1,2 @@ +require('./angular-locale_sl-si'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sl.js b/vendor/assets/components/angular-i18n/sl.js new file mode 100644 index 000000000..02dfceb33 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sl.js @@ -0,0 +1,2 @@ +require('./angular-locale_sl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/smn-fi.js b/vendor/assets/components/angular-i18n/smn-fi.js new file mode 100644 index 000000000..f00af6eae --- /dev/null +++ b/vendor/assets/components/angular-i18n/smn-fi.js @@ -0,0 +1,2 @@ +require('./angular-locale_smn-fi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/smn.js b/vendor/assets/components/angular-i18n/smn.js new file mode 100644 index 000000000..7aa8acef3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/smn.js @@ -0,0 +1,2 @@ +require('./angular-locale_smn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sn-zw.js b/vendor/assets/components/angular-i18n/sn-zw.js new file mode 100644 index 000000000..9ab4682f9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sn-zw.js @@ -0,0 +1,2 @@ +require('./angular-locale_sn-zw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sn.js b/vendor/assets/components/angular-i18n/sn.js new file mode 100644 index 000000000..fa0b25706 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sn.js @@ -0,0 +1,2 @@ +require('./angular-locale_sn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/so-dj.js b/vendor/assets/components/angular-i18n/so-dj.js new file mode 100644 index 000000000..9c8bb59bc --- /dev/null +++ b/vendor/assets/components/angular-i18n/so-dj.js @@ -0,0 +1,2 @@ +require('./angular-locale_so-dj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/so-et.js b/vendor/assets/components/angular-i18n/so-et.js new file mode 100644 index 000000000..dd7d2dc70 --- /dev/null +++ b/vendor/assets/components/angular-i18n/so-et.js @@ -0,0 +1,2 @@ +require('./angular-locale_so-et'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/so-ke.js b/vendor/assets/components/angular-i18n/so-ke.js new file mode 100644 index 000000000..7c5075ea9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/so-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_so-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/so-so.js b/vendor/assets/components/angular-i18n/so-so.js new file mode 100644 index 000000000..8cbd9f6a6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/so-so.js @@ -0,0 +1,2 @@ +require('./angular-locale_so-so'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/so.js b/vendor/assets/components/angular-i18n/so.js new file mode 100644 index 000000000..e84936d08 --- /dev/null +++ b/vendor/assets/components/angular-i18n/so.js @@ -0,0 +1,2 @@ +require('./angular-locale_so'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sq-al.js b/vendor/assets/components/angular-i18n/sq-al.js new file mode 100644 index 000000000..0330a2699 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sq-al.js @@ -0,0 +1,2 @@ +require('./angular-locale_sq-al'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sq-mk.js b/vendor/assets/components/angular-i18n/sq-mk.js new file mode 100644 index 000000000..2041dc982 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sq-mk.js @@ -0,0 +1,2 @@ +require('./angular-locale_sq-mk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sq-xk.js b/vendor/assets/components/angular-i18n/sq-xk.js new file mode 100644 index 000000000..380c001dd --- /dev/null +++ b/vendor/assets/components/angular-i18n/sq-xk.js @@ -0,0 +1,2 @@ +require('./angular-locale_sq-xk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sq.js b/vendor/assets/components/angular-i18n/sq.js new file mode 100644 index 000000000..7830d86c3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sq.js @@ -0,0 +1,2 @@ +require('./angular-locale_sq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-cyrl-ba.js b/vendor/assets/components/angular-i18n/sr-cyrl-ba.js new file mode 100644 index 000000000..b7059c9c3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-cyrl-ba.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-cyrl-ba'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-cyrl-me.js b/vendor/assets/components/angular-i18n/sr-cyrl-me.js new file mode 100644 index 000000000..1b7c728ae --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-cyrl-me.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-cyrl-me'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-cyrl-rs.js b/vendor/assets/components/angular-i18n/sr-cyrl-rs.js new file mode 100644 index 000000000..53d912082 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-cyrl-rs.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-cyrl-rs'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-cyrl-xk.js b/vendor/assets/components/angular-i18n/sr-cyrl-xk.js new file mode 100644 index 000000000..78be0bb29 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-cyrl-xk.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-cyrl-xk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-cyrl.js b/vendor/assets/components/angular-i18n/sr-cyrl.js new file mode 100644 index 000000000..786c8f08a --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-latn-ba.js b/vendor/assets/components/angular-i18n/sr-latn-ba.js new file mode 100644 index 000000000..76448f8b6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-latn-ba.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-latn-ba'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-latn-me.js b/vendor/assets/components/angular-i18n/sr-latn-me.js new file mode 100644 index 000000000..033fe483c --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-latn-me.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-latn-me'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-latn-rs.js b/vendor/assets/components/angular-i18n/sr-latn-rs.js new file mode 100644 index 000000000..53ab19149 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-latn-rs.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-latn-rs'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-latn-xk.js b/vendor/assets/components/angular-i18n/sr-latn-xk.js new file mode 100644 index 000000000..6ac226556 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-latn-xk.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-latn-xk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr-latn.js b/vendor/assets/components/angular-i18n/sr-latn.js new file mode 100644 index 000000000..291b47b1d --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sr.js b/vendor/assets/components/angular-i18n/sr.js new file mode 100644 index 000000000..513a4622f --- /dev/null +++ b/vendor/assets/components/angular-i18n/sr.js @@ -0,0 +1,2 @@ +require('./angular-locale_sr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ss-sz.js b/vendor/assets/components/angular-i18n/ss-sz.js new file mode 100644 index 000000000..f5b3a68db --- /dev/null +++ b/vendor/assets/components/angular-i18n/ss-sz.js @@ -0,0 +1,2 @@ +require('./angular-locale_ss-sz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ss-za.js b/vendor/assets/components/angular-i18n/ss-za.js new file mode 100644 index 000000000..f408111be --- /dev/null +++ b/vendor/assets/components/angular-i18n/ss-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_ss-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ss.js b/vendor/assets/components/angular-i18n/ss.js new file mode 100644 index 000000000..44c1aef07 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ss.js @@ -0,0 +1,2 @@ +require('./angular-locale_ss'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ssy-er.js b/vendor/assets/components/angular-i18n/ssy-er.js new file mode 100644 index 000000000..d1a98eff1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ssy-er.js @@ -0,0 +1,2 @@ +require('./angular-locale_ssy-er'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ssy.js b/vendor/assets/components/angular-i18n/ssy.js new file mode 100644 index 000000000..60775230e --- /dev/null +++ b/vendor/assets/components/angular-i18n/ssy.js @@ -0,0 +1,2 @@ +require('./angular-locale_ssy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/st-ls.js b/vendor/assets/components/angular-i18n/st-ls.js new file mode 100644 index 000000000..72943228f --- /dev/null +++ b/vendor/assets/components/angular-i18n/st-ls.js @@ -0,0 +1,2 @@ +require('./angular-locale_st-ls'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/st-za.js b/vendor/assets/components/angular-i18n/st-za.js new file mode 100644 index 000000000..8ea412379 --- /dev/null +++ b/vendor/assets/components/angular-i18n/st-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_st-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/st.js b/vendor/assets/components/angular-i18n/st.js new file mode 100644 index 000000000..2ef141d83 --- /dev/null +++ b/vendor/assets/components/angular-i18n/st.js @@ -0,0 +1,2 @@ +require('./angular-locale_st'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sv-ax.js b/vendor/assets/components/angular-i18n/sv-ax.js new file mode 100644 index 000000000..4c6012149 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sv-ax.js @@ -0,0 +1,2 @@ +require('./angular-locale_sv-ax'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sv-fi.js b/vendor/assets/components/angular-i18n/sv-fi.js new file mode 100644 index 000000000..b96a6d31a --- /dev/null +++ b/vendor/assets/components/angular-i18n/sv-fi.js @@ -0,0 +1,2 @@ +require('./angular-locale_sv-fi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sv-se.js b/vendor/assets/components/angular-i18n/sv-se.js new file mode 100644 index 000000000..d07e3161a --- /dev/null +++ b/vendor/assets/components/angular-i18n/sv-se.js @@ -0,0 +1,2 @@ +require('./angular-locale_sv-se'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sv.js b/vendor/assets/components/angular-i18n/sv.js new file mode 100644 index 000000000..ad99fb522 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sv.js @@ -0,0 +1,2 @@ +require('./angular-locale_sv'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sw-ke.js b/vendor/assets/components/angular-i18n/sw-ke.js new file mode 100644 index 000000000..1b3a27b56 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sw-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_sw-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sw-tz.js b/vendor/assets/components/angular-i18n/sw-tz.js new file mode 100644 index 000000000..51e338890 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sw-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_sw-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sw-ug.js b/vendor/assets/components/angular-i18n/sw-ug.js new file mode 100644 index 000000000..72ba80712 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sw-ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_sw-ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/sw.js b/vendor/assets/components/angular-i18n/sw.js new file mode 100644 index 000000000..7ad47edf3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/sw.js @@ -0,0 +1,2 @@ +require('./angular-locale_sw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/swc-cd.js b/vendor/assets/components/angular-i18n/swc-cd.js new file mode 100644 index 000000000..e9144946d --- /dev/null +++ b/vendor/assets/components/angular-i18n/swc-cd.js @@ -0,0 +1,2 @@ +require('./angular-locale_swc-cd'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/swc.js b/vendor/assets/components/angular-i18n/swc.js new file mode 100644 index 000000000..f1a00ee65 --- /dev/null +++ b/vendor/assets/components/angular-i18n/swc.js @@ -0,0 +1,2 @@ +require('./angular-locale_swc'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ta-in.js b/vendor/assets/components/angular-i18n/ta-in.js new file mode 100644 index 000000000..1377916fd --- /dev/null +++ b/vendor/assets/components/angular-i18n/ta-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_ta-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ta-lk.js b/vendor/assets/components/angular-i18n/ta-lk.js new file mode 100644 index 000000000..d0ca484e3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ta-lk.js @@ -0,0 +1,2 @@ +require('./angular-locale_ta-lk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ta-my.js b/vendor/assets/components/angular-i18n/ta-my.js new file mode 100644 index 000000000..7cc9cfad6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ta-my.js @@ -0,0 +1,2 @@ +require('./angular-locale_ta-my'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ta-sg.js b/vendor/assets/components/angular-i18n/ta-sg.js new file mode 100644 index 000000000..51523b186 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ta-sg.js @@ -0,0 +1,2 @@ +require('./angular-locale_ta-sg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ta.js b/vendor/assets/components/angular-i18n/ta.js new file mode 100644 index 000000000..2f64070ba --- /dev/null +++ b/vendor/assets/components/angular-i18n/ta.js @@ -0,0 +1,2 @@ +require('./angular-locale_ta'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/te-in.js b/vendor/assets/components/angular-i18n/te-in.js new file mode 100644 index 000000000..3393bb1c4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/te-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_te-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/te.js b/vendor/assets/components/angular-i18n/te.js new file mode 100644 index 000000000..d9914c40e --- /dev/null +++ b/vendor/assets/components/angular-i18n/te.js @@ -0,0 +1,2 @@ +require('./angular-locale_te'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/teo-ke.js b/vendor/assets/components/angular-i18n/teo-ke.js new file mode 100644 index 000000000..32cbd9e83 --- /dev/null +++ b/vendor/assets/components/angular-i18n/teo-ke.js @@ -0,0 +1,2 @@ +require('./angular-locale_teo-ke'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/teo-ug.js b/vendor/assets/components/angular-i18n/teo-ug.js new file mode 100644 index 000000000..dfaa1cf48 --- /dev/null +++ b/vendor/assets/components/angular-i18n/teo-ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_teo-ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/teo.js b/vendor/assets/components/angular-i18n/teo.js new file mode 100644 index 000000000..0122ebdf1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/teo.js @@ -0,0 +1,2 @@ +require('./angular-locale_teo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tg-cyrl-tj.js b/vendor/assets/components/angular-i18n/tg-cyrl-tj.js new file mode 100644 index 000000000..2ac69b11a --- /dev/null +++ b/vendor/assets/components/angular-i18n/tg-cyrl-tj.js @@ -0,0 +1,2 @@ +require('./angular-locale_tg-cyrl-tj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tg-cyrl.js b/vendor/assets/components/angular-i18n/tg-cyrl.js new file mode 100644 index 000000000..d3f41abd4 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tg-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_tg-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tg.js b/vendor/assets/components/angular-i18n/tg.js new file mode 100644 index 000000000..ce9d32e09 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tg.js @@ -0,0 +1,2 @@ +require('./angular-locale_tg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/th-th.js b/vendor/assets/components/angular-i18n/th-th.js new file mode 100644 index 000000000..e0b7037af --- /dev/null +++ b/vendor/assets/components/angular-i18n/th-th.js @@ -0,0 +1,2 @@ +require('./angular-locale_th-th'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/th.js b/vendor/assets/components/angular-i18n/th.js new file mode 100644 index 000000000..a272ce5c0 --- /dev/null +++ b/vendor/assets/components/angular-i18n/th.js @@ -0,0 +1,2 @@ +require('./angular-locale_th'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ti-er.js b/vendor/assets/components/angular-i18n/ti-er.js new file mode 100644 index 000000000..03864a23b --- /dev/null +++ b/vendor/assets/components/angular-i18n/ti-er.js @@ -0,0 +1,2 @@ +require('./angular-locale_ti-er'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ti-et.js b/vendor/assets/components/angular-i18n/ti-et.js new file mode 100644 index 000000000..d8d434d21 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ti-et.js @@ -0,0 +1,2 @@ +require('./angular-locale_ti-et'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ti.js b/vendor/assets/components/angular-i18n/ti.js new file mode 100644 index 000000000..468fb3539 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ti.js @@ -0,0 +1,2 @@ +require('./angular-locale_ti'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tig-er.js b/vendor/assets/components/angular-i18n/tig-er.js new file mode 100644 index 000000000..c92258bff --- /dev/null +++ b/vendor/assets/components/angular-i18n/tig-er.js @@ -0,0 +1,2 @@ +require('./angular-locale_tig-er'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tig.js b/vendor/assets/components/angular-i18n/tig.js new file mode 100644 index 000000000..2060b65f8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tig.js @@ -0,0 +1,2 @@ +require('./angular-locale_tig'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tl.js b/vendor/assets/components/angular-i18n/tl.js new file mode 100644 index 000000000..134a21dff --- /dev/null +++ b/vendor/assets/components/angular-i18n/tl.js @@ -0,0 +1,2 @@ +require('./angular-locale_tl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tn-bw.js b/vendor/assets/components/angular-i18n/tn-bw.js new file mode 100644 index 000000000..12a6da805 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tn-bw.js @@ -0,0 +1,2 @@ +require('./angular-locale_tn-bw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tn-za.js b/vendor/assets/components/angular-i18n/tn-za.js new file mode 100644 index 000000000..f3f6bac36 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tn-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_tn-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tn.js b/vendor/assets/components/angular-i18n/tn.js new file mode 100644 index 000000000..adea49e1f --- /dev/null +++ b/vendor/assets/components/angular-i18n/tn.js @@ -0,0 +1,2 @@ +require('./angular-locale_tn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/to-to.js b/vendor/assets/components/angular-i18n/to-to.js new file mode 100644 index 000000000..8340b1ae9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/to-to.js @@ -0,0 +1,2 @@ +require('./angular-locale_to-to'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/to.js b/vendor/assets/components/angular-i18n/to.js new file mode 100644 index 000000000..a09f49be3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/to.js @@ -0,0 +1,2 @@ +require('./angular-locale_to'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tr-cy.js b/vendor/assets/components/angular-i18n/tr-cy.js new file mode 100644 index 000000000..519fdf772 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tr-cy.js @@ -0,0 +1,2 @@ +require('./angular-locale_tr-cy'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tr-tr.js b/vendor/assets/components/angular-i18n/tr-tr.js new file mode 100644 index 000000000..28fce786e --- /dev/null +++ b/vendor/assets/components/angular-i18n/tr-tr.js @@ -0,0 +1,2 @@ +require('./angular-locale_tr-tr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tr.js b/vendor/assets/components/angular-i18n/tr.js new file mode 100644 index 000000000..cb25fe046 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tr.js @@ -0,0 +1,2 @@ +require('./angular-locale_tr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ts-za.js b/vendor/assets/components/angular-i18n/ts-za.js new file mode 100644 index 000000000..1fe491537 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ts-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_ts-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ts.js b/vendor/assets/components/angular-i18n/ts.js new file mode 100644 index 000000000..3110ce8a9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ts.js @@ -0,0 +1,2 @@ +require('./angular-locale_ts'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/twq-ne.js b/vendor/assets/components/angular-i18n/twq-ne.js new file mode 100644 index 000000000..42a533311 --- /dev/null +++ b/vendor/assets/components/angular-i18n/twq-ne.js @@ -0,0 +1,2 @@ +require('./angular-locale_twq-ne'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/twq.js b/vendor/assets/components/angular-i18n/twq.js new file mode 100644 index 000000000..8a3fbbd9a --- /dev/null +++ b/vendor/assets/components/angular-i18n/twq.js @@ -0,0 +1,2 @@ +require('./angular-locale_twq'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tzm-latn-ma.js b/vendor/assets/components/angular-i18n/tzm-latn-ma.js new file mode 100644 index 000000000..e83608eea --- /dev/null +++ b/vendor/assets/components/angular-i18n/tzm-latn-ma.js @@ -0,0 +1,2 @@ +require('./angular-locale_tzm-latn-ma'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tzm-latn.js b/vendor/assets/components/angular-i18n/tzm-latn.js new file mode 100644 index 000000000..9a8cfd7f3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/tzm-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_tzm-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/tzm.js b/vendor/assets/components/angular-i18n/tzm.js new file mode 100644 index 000000000..d336f031b --- /dev/null +++ b/vendor/assets/components/angular-i18n/tzm.js @@ -0,0 +1,2 @@ +require('./angular-locale_tzm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ug-arab-cn.js b/vendor/assets/components/angular-i18n/ug-arab-cn.js new file mode 100644 index 000000000..508de5ce1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ug-arab-cn.js @@ -0,0 +1,2 @@ +require('./angular-locale_ug-arab-cn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ug-arab.js b/vendor/assets/components/angular-i18n/ug-arab.js new file mode 100644 index 000000000..8a728df79 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ug-arab.js @@ -0,0 +1,2 @@ +require('./angular-locale_ug-arab'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ug.js b/vendor/assets/components/angular-i18n/ug.js new file mode 100644 index 000000000..3eb49d6cb --- /dev/null +++ b/vendor/assets/components/angular-i18n/ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uk-ua.js b/vendor/assets/components/angular-i18n/uk-ua.js new file mode 100644 index 000000000..494e329b7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/uk-ua.js @@ -0,0 +1,2 @@ +require('./angular-locale_uk-ua'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uk.js b/vendor/assets/components/angular-i18n/uk.js new file mode 100644 index 000000000..7d51d1213 --- /dev/null +++ b/vendor/assets/components/angular-i18n/uk.js @@ -0,0 +1,2 @@ +require('./angular-locale_uk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ur-in.js b/vendor/assets/components/angular-i18n/ur-in.js new file mode 100644 index 000000000..c183c318c --- /dev/null +++ b/vendor/assets/components/angular-i18n/ur-in.js @@ -0,0 +1,2 @@ +require('./angular-locale_ur-in'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ur-pk.js b/vendor/assets/components/angular-i18n/ur-pk.js new file mode 100644 index 000000000..8a46078a1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ur-pk.js @@ -0,0 +1,2 @@ +require('./angular-locale_ur-pk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ur.js b/vendor/assets/components/angular-i18n/ur.js new file mode 100644 index 000000000..17ca3df99 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ur.js @@ -0,0 +1,2 @@ +require('./angular-locale_ur'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uz-arab-af.js b/vendor/assets/components/angular-i18n/uz-arab-af.js new file mode 100644 index 000000000..6a25e105b --- /dev/null +++ b/vendor/assets/components/angular-i18n/uz-arab-af.js @@ -0,0 +1,2 @@ +require('./angular-locale_uz-arab-af'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uz-arab.js b/vendor/assets/components/angular-i18n/uz-arab.js new file mode 100644 index 000000000..779b0ee64 --- /dev/null +++ b/vendor/assets/components/angular-i18n/uz-arab.js @@ -0,0 +1,2 @@ +require('./angular-locale_uz-arab'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uz-cyrl-uz.js b/vendor/assets/components/angular-i18n/uz-cyrl-uz.js new file mode 100644 index 000000000..c125edb20 --- /dev/null +++ b/vendor/assets/components/angular-i18n/uz-cyrl-uz.js @@ -0,0 +1,2 @@ +require('./angular-locale_uz-cyrl-uz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uz-cyrl.js b/vendor/assets/components/angular-i18n/uz-cyrl.js new file mode 100644 index 000000000..186ed4d50 --- /dev/null +++ b/vendor/assets/components/angular-i18n/uz-cyrl.js @@ -0,0 +1,2 @@ +require('./angular-locale_uz-cyrl'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uz-latn-uz.js b/vendor/assets/components/angular-i18n/uz-latn-uz.js new file mode 100644 index 000000000..608d8f9cc --- /dev/null +++ b/vendor/assets/components/angular-i18n/uz-latn-uz.js @@ -0,0 +1,2 @@ +require('./angular-locale_uz-latn-uz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uz-latn.js b/vendor/assets/components/angular-i18n/uz-latn.js new file mode 100644 index 000000000..99b585584 --- /dev/null +++ b/vendor/assets/components/angular-i18n/uz-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_uz-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/uz.js b/vendor/assets/components/angular-i18n/uz.js new file mode 100644 index 000000000..4220cd814 --- /dev/null +++ b/vendor/assets/components/angular-i18n/uz.js @@ -0,0 +1,2 @@ +require('./angular-locale_uz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vai-latn-lr.js b/vendor/assets/components/angular-i18n/vai-latn-lr.js new file mode 100644 index 000000000..bfcdbc828 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vai-latn-lr.js @@ -0,0 +1,2 @@ +require('./angular-locale_vai-latn-lr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vai-latn.js b/vendor/assets/components/angular-i18n/vai-latn.js new file mode 100644 index 000000000..9e1b1990b --- /dev/null +++ b/vendor/assets/components/angular-i18n/vai-latn.js @@ -0,0 +1,2 @@ +require('./angular-locale_vai-latn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vai-vaii-lr.js b/vendor/assets/components/angular-i18n/vai-vaii-lr.js new file mode 100644 index 000000000..ae5295674 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vai-vaii-lr.js @@ -0,0 +1,2 @@ +require('./angular-locale_vai-vaii-lr'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vai-vaii.js b/vendor/assets/components/angular-i18n/vai-vaii.js new file mode 100644 index 000000000..8c5ebf4fc --- /dev/null +++ b/vendor/assets/components/angular-i18n/vai-vaii.js @@ -0,0 +1,2 @@ +require('./angular-locale_vai-vaii'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vai.js b/vendor/assets/components/angular-i18n/vai.js new file mode 100644 index 000000000..2c7364789 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vai.js @@ -0,0 +1,2 @@ +require('./angular-locale_vai'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ve-za.js b/vendor/assets/components/angular-i18n/ve-za.js new file mode 100644 index 000000000..c41dbde46 --- /dev/null +++ b/vendor/assets/components/angular-i18n/ve-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_ve-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/ve.js b/vendor/assets/components/angular-i18n/ve.js new file mode 100644 index 000000000..9e4743deb --- /dev/null +++ b/vendor/assets/components/angular-i18n/ve.js @@ -0,0 +1,2 @@ +require('./angular-locale_ve'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vi-vn.js b/vendor/assets/components/angular-i18n/vi-vn.js new file mode 100644 index 000000000..5d619e4c5 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vi-vn.js @@ -0,0 +1,2 @@ +require('./angular-locale_vi-vn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vi.js b/vendor/assets/components/angular-i18n/vi.js new file mode 100644 index 000000000..6a4e83741 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vi.js @@ -0,0 +1,2 @@ +require('./angular-locale_vi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vo-001.js b/vendor/assets/components/angular-i18n/vo-001.js new file mode 100644 index 000000000..bc1d2e0e9 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vo-001.js @@ -0,0 +1,2 @@ +require('./angular-locale_vo-001'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vo.js b/vendor/assets/components/angular-i18n/vo.js new file mode 100644 index 000000000..6557ecb99 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vo.js @@ -0,0 +1,2 @@ +require('./angular-locale_vo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vun-tz.js b/vendor/assets/components/angular-i18n/vun-tz.js new file mode 100644 index 000000000..e811871a6 --- /dev/null +++ b/vendor/assets/components/angular-i18n/vun-tz.js @@ -0,0 +1,2 @@ +require('./angular-locale_vun-tz'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/vun.js b/vendor/assets/components/angular-i18n/vun.js new file mode 100644 index 000000000..a6eee2b7e --- /dev/null +++ b/vendor/assets/components/angular-i18n/vun.js @@ -0,0 +1,2 @@ +require('./angular-locale_vun'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/wae-ch.js b/vendor/assets/components/angular-i18n/wae-ch.js new file mode 100644 index 000000000..354671393 --- /dev/null +++ b/vendor/assets/components/angular-i18n/wae-ch.js @@ -0,0 +1,2 @@ +require('./angular-locale_wae-ch'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/wae.js b/vendor/assets/components/angular-i18n/wae.js new file mode 100644 index 000000000..f903bbae3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/wae.js @@ -0,0 +1,2 @@ +require('./angular-locale_wae'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/wal-et.js b/vendor/assets/components/angular-i18n/wal-et.js new file mode 100644 index 000000000..977385063 --- /dev/null +++ b/vendor/assets/components/angular-i18n/wal-et.js @@ -0,0 +1,2 @@ +require('./angular-locale_wal-et'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/wal.js b/vendor/assets/components/angular-i18n/wal.js new file mode 100644 index 000000000..e227e9fd3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/wal.js @@ -0,0 +1,2 @@ +require('./angular-locale_wal'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/xh-za.js b/vendor/assets/components/angular-i18n/xh-za.js new file mode 100644 index 000000000..d10a86316 --- /dev/null +++ b/vendor/assets/components/angular-i18n/xh-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_xh-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/xh.js b/vendor/assets/components/angular-i18n/xh.js new file mode 100644 index 000000000..9815326fc --- /dev/null +++ b/vendor/assets/components/angular-i18n/xh.js @@ -0,0 +1,2 @@ +require('./angular-locale_xh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/xog-ug.js b/vendor/assets/components/angular-i18n/xog-ug.js new file mode 100644 index 000000000..142d59be8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/xog-ug.js @@ -0,0 +1,2 @@ +require('./angular-locale_xog-ug'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/xog.js b/vendor/assets/components/angular-i18n/xog.js new file mode 100644 index 000000000..7a3bb8dd1 --- /dev/null +++ b/vendor/assets/components/angular-i18n/xog.js @@ -0,0 +1,2 @@ +require('./angular-locale_xog'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/yav-cm.js b/vendor/assets/components/angular-i18n/yav-cm.js new file mode 100644 index 000000000..481465d2f --- /dev/null +++ b/vendor/assets/components/angular-i18n/yav-cm.js @@ -0,0 +1,2 @@ +require('./angular-locale_yav-cm'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/yav.js b/vendor/assets/components/angular-i18n/yav.js new file mode 100644 index 000000000..7d98f390c --- /dev/null +++ b/vendor/assets/components/angular-i18n/yav.js @@ -0,0 +1,2 @@ +require('./angular-locale_yav'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/yi-001.js b/vendor/assets/components/angular-i18n/yi-001.js new file mode 100644 index 000000000..1fbce1bdd --- /dev/null +++ b/vendor/assets/components/angular-i18n/yi-001.js @@ -0,0 +1,2 @@ +require('./angular-locale_yi-001'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/yi.js b/vendor/assets/components/angular-i18n/yi.js new file mode 100644 index 000000000..d8ae7f0c3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/yi.js @@ -0,0 +1,2 @@ +require('./angular-locale_yi'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/yo-bj.js b/vendor/assets/components/angular-i18n/yo-bj.js new file mode 100644 index 000000000..d3940e576 --- /dev/null +++ b/vendor/assets/components/angular-i18n/yo-bj.js @@ -0,0 +1,2 @@ +require('./angular-locale_yo-bj'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/yo-ng.js b/vendor/assets/components/angular-i18n/yo-ng.js new file mode 100644 index 000000000..2df33b800 --- /dev/null +++ b/vendor/assets/components/angular-i18n/yo-ng.js @@ -0,0 +1,2 @@ +require('./angular-locale_yo-ng'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/yo.js b/vendor/assets/components/angular-i18n/yo.js new file mode 100644 index 000000000..623a16ade --- /dev/null +++ b/vendor/assets/components/angular-i18n/yo.js @@ -0,0 +1,2 @@ +require('./angular-locale_yo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zgh-ma.js b/vendor/assets/components/angular-i18n/zgh-ma.js new file mode 100644 index 000000000..3761bb410 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zgh-ma.js @@ -0,0 +1,2 @@ +require('./angular-locale_zgh-ma'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zgh.js b/vendor/assets/components/angular-i18n/zgh.js new file mode 100644 index 000000000..86dc6f7b3 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zgh.js @@ -0,0 +1,2 @@ +require('./angular-locale_zgh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-cn.js b/vendor/assets/components/angular-i18n/zh-cn.js new file mode 100644 index 000000000..c6dbf9e10 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-cn.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-cn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hans-cn.js b/vendor/assets/components/angular-i18n/zh-hans-cn.js new file mode 100644 index 000000000..f882c952c --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hans-cn.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hans-cn'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hans-hk.js b/vendor/assets/components/angular-i18n/zh-hans-hk.js new file mode 100644 index 000000000..77317d459 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hans-hk.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hans-hk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hans-mo.js b/vendor/assets/components/angular-i18n/zh-hans-mo.js new file mode 100644 index 000000000..a5cde516e --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hans-mo.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hans-mo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hans-sg.js b/vendor/assets/components/angular-i18n/zh-hans-sg.js new file mode 100644 index 000000000..bb92c22ca --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hans-sg.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hans-sg'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hans.js b/vendor/assets/components/angular-i18n/zh-hans.js new file mode 100644 index 000000000..117ba6e31 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hans.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hans'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hant-hk.js b/vendor/assets/components/angular-i18n/zh-hant-hk.js new file mode 100644 index 000000000..ec774b6be --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hant-hk.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hant-hk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hant-mo.js b/vendor/assets/components/angular-i18n/zh-hant-mo.js new file mode 100644 index 000000000..4d89a14ee --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hant-mo.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hant-mo'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hant-tw.js b/vendor/assets/components/angular-i18n/zh-hant-tw.js new file mode 100644 index 000000000..c11e41573 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hant-tw.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hant-tw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hant.js b/vendor/assets/components/angular-i18n/zh-hant.js new file mode 100644 index 000000000..53542f630 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hant.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hant'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-hk.js b/vendor/assets/components/angular-i18n/zh-hk.js new file mode 100644 index 000000000..b3d5e0c92 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-hk.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-hk'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh-tw.js b/vendor/assets/components/angular-i18n/zh-tw.js new file mode 100644 index 000000000..4f5dd9ff7 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh-tw.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh-tw'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zh.js b/vendor/assets/components/angular-i18n/zh.js new file mode 100644 index 000000000..515ef1d27 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zh.js @@ -0,0 +1,2 @@ +require('./angular-locale_zh'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zu-za.js b/vendor/assets/components/angular-i18n/zu-za.js new file mode 100644 index 000000000..a41747e1c --- /dev/null +++ b/vendor/assets/components/angular-i18n/zu-za.js @@ -0,0 +1,2 @@ +require('./angular-locale_zu-za'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-i18n/zu.js b/vendor/assets/components/angular-i18n/zu.js new file mode 100644 index 000000000..5cdf1b6f8 --- /dev/null +++ b/vendor/assets/components/angular-i18n/zu.js @@ -0,0 +1,2 @@ +require('./angular-locale_zu'); +module.exports = 'ngLocale'; diff --git a/vendor/assets/components/angular-loading-bar/.bower.json b/vendor/assets/components/angular-loading-bar/.bower.json new file mode 100644 index 000000000..ad4277ef0 --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/.bower.json @@ -0,0 +1,39 @@ +{ + "name": "angular-loading-bar", + "version": "0.7.1", + "main": [ + "build/loading-bar.js", + "build/loading-bar.css" + ], + "ignore": [ + "**/.*", + "node_modules", + "components", + "test", + "example" + ], + "dependencies": { + "angular": "^1.2.9" + }, + "devDependencies": { + "angular": "~1.2.23", + "angular-1.3": "angular#1.3", + "angular-mocks": "~1.2.9", + "angular-mocks-1.3": "angular-mocks#1.3", + "angular-animate": "~1.2.9", + "angular-animate-1.3": "angular-animate#1.3" + }, + "resolutions": { + "angular": "~1.2.23" + }, + "homepage": "https://github.com/chieffancypants/angular-loading-bar", + "_release": "0.7.1", + "_resolution": { + "type": "version", + "tag": "0.7.1", + "commit": "786bf74fdf1b55090262449574986b09bd5fb4fd" + }, + "_source": "git://github.com/chieffancypants/angular-loading-bar.git", + "_target": ">=0.4.3", + "_originalSource": "angular-loading-bar" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-loading-bar/CHANGELOG.md b/vendor/assets/components/angular-loading-bar/CHANGELOG.md new file mode 100644 index 000000000..6c739548b --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/CHANGELOG.md @@ -0,0 +1,57 @@ +Changelog +========== + +## 0.7.1 +- Merge correct PR for broken interceptor detection ([#133](https://github.com/chieffancypants/angular-loading-bar/pull/133), [#50](https://github.com/chieffancypants/angular-loading-bar/pull/50)) + +## 0.7.0 +- Changes for animate.enter compatibility for 1.2 and 1.3 ([#170](https://github.com/chieffancypants/angular-loading-bar/pull/170)) +- Detect errors with other interceptors ([#133](https://github.com/chieffancypants/angular-loading-bar/pull/133), [#50](https://github.com/chieffancypants/angular-loading-bar/pull/50)) +- Provide more detail on response/responseError events ([#128](https://github.com/chieffancypants/angular-loading-bar/pull/128)) +- Change angular dependency in bower ([#126](https://github.com/chieffancypants/angular-loading-bar/issues/126)) + +## 0.6.0 +- Customize progress bar template: ([#111](https://github.com/chieffancypants/angular-loading-bar/pull/111)) +- Only append bar to first parent found ([#108](https://github.com/chieffancypants/angular-loading-bar/pull/108)) + +## 0.5.2: +Fixes for Angular 1.3 breaking changes: +- Circular dependencies: ([#98](https://github.com/chieffancypants/angular-loading-bar/issues/98)), ([#101](https://github.com/chieffancypants/angular-loading-bar/pull/101)) +- $animate no longer accepts callbacks: ([#102](https://github.com/chieffancypants/angular-loading-bar/pull/102)) + +## 0.5.1 +- Reworked cache logic to allow cache:true ([#96](https://github.com/chieffancypants/angular-loading-bar/pull/96)) + +## 0.5.0 +- Added spinner template configuration ([#82](https://github.com/chieffancypants/angular-loading-bar/pull/82)) +- $timeout was not canceled properly ([#79](https://github.com/chieffancypants/angular-loading-bar/pull/79)) + +## 0.4.3 +- update z-index to work with other css frameworks ([#69](https://github.com/chieffancypants/angular-loading-bar/pull/69)) +- ignoreLoadingBar not ignored when calculating percentage complete ([#70](https://github.com/chieffancypants/angular-loading-bar/pull/70)) + +## 0.4.2 +- Split loading bar into different modules so they can be included separately ([#46](https://github.com/chieffancypants/angular-loading-bar/issues/46)) + +## 0.4.1 +- Fix for route views defined on body where loading bar is also attached ([#56](https://github.com/chieffancypants/angular-loading-bar/issues/56)) + +## 0.4.0 +- Initial load percentage is now configurable ([#47](https://github.com/chieffancypants/angular-loading-bar/issues/47)) +- Peg graphic reworked so the loadingbar does not require CSS changes when not at the very top of the page ([#42](https://github.com/chieffancypants/angular-loading-bar/issues/42), [#45](https://github.com/chieffancypants/angular-loading-bar/issues/45), [#10](https://github.com/chieffancypants/angular-loading-bar/issues/10)) +- z-index of spinner increased to work with Bootstrap 3 z-indexes ([#53](https://github.com/chieffancypants/angular-loading-bar/issues/53)) + +## 0.3.0 +- Loading bar only appears on XHR requests with high latency ([#27](https://github.com/chieffancypants/angular-loading-bar/issues/27)) + +## 0.2.0 +- Progression bar not calculated correctly for consecutive calls within the 500ms delay ([#29](https://github.com/chieffancypants/angular-loading-bar/issues/29), [#32](https://github.com/chieffancypants/angular-loading-bar/issues/32)) +- Event broadcasts when loading (#31) + +## 0.1.1 +- Alias chieffancypants.loadingbar to angular-loading-bar (#25, #19) + +## 0.1.0 +- Fixed issues with Angular 1.2-rc3+ +- Ability to ignore particular XHR requests (#21) +- Broadcasting of events (#18) diff --git a/vendor/assets/components/angular-loading-bar/Gruntfile.js b/vendor/assets/components/angular-loading-bar/Gruntfile.js new file mode 100644 index 000000000..d41268613 --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/Gruntfile.js @@ -0,0 +1,94 @@ +/*global module:false*/ +module.exports = function(grunt) { + + grunt.initConfig({ + + // Metadata. + pkg: grunt.file.readJSON('package.json'), + banner: '/*! \n * <%= pkg.title || pkg.name %> v<%= pkg.version %>\n' + + ' * <%= pkg.homepage %>\n' + + ' * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + + ' * License: <%= pkg.license %>\n' + + ' */\n', + + // Task configuration. + uglify: { + options: { + banner: '<%= banner %>', + report: 'gzip' + }, + build: { + src: 'src/loading-bar.js', + dest: 'build/loading-bar.min.js' + } + }, + + cssmin: { + options: { + banner: '<%= banner %>', + report: 'gzip' + }, + minify: { + src: 'src/loading-bar.css', + dest: 'build/loading-bar.min.css' + } + }, + + karma: { + unit: { + configFile: 'test/karma-angular-1.2.conf.js', + singleRun: true, + coverageReporter: { + type: 'text', + dir: 'coverage/' + } + }, + unit13: { + configFile: 'test/karma-angular-1.3.conf.js', + singleRun: true, + coverageReporter: { + type: 'text', + dir: 'coverage/' + } + }, + watch: { + configFile: 'test/karma-angular-1.2.conf.js', + singleRun: false, + reporters: ['progress'] // Don't display coverage + } + }, + + jshint: { + jshintrc: '.jshintrc', + gruntfile: { + src: 'Gruntfile.js' + }, + src: { + src: ['src/*.js'] + } + }, + + concat: { + build: { + options: { + banner: '<%= banner %>' + }, + files: { + 'build/loading-bar.css': 'src/loading-bar.css', + 'build/loading-bar.js': 'src/loading-bar.js', + } + } + } + }); + + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-karma'); + + grunt.registerTask('default', ['jshint', 'karma:unit', 'karma:unit13', 'uglify', 'cssmin', 'concat:build']); + grunt.registerTask('test', ['karma:watch']); + grunt.registerTask('build', ['default']); + +}; diff --git a/vendor/assets/components/angular-loading-bar/LICENSE b/vendor/assets/components/angular-loading-bar/LICENSE new file mode 100644 index 000000000..252c23aa1 --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2014 Wes Cruver + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/assets/components/angular-loading-bar/README.md b/vendor/assets/components/angular-loading-bar/README.md new file mode 100644 index 000000000..b439b4b5e --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/README.md @@ -0,0 +1,163 @@ +angular-loading-bar +=================== + +The idea is simple: Add a loading bar / progress bar whenever an XHR request goes out in angular. Multiple requests within the same time period get bundled together such that each response increments the progress bar by the appropriate amount. + +This is mostly cool because you simply include it in your app, and it works. There's no complicated setup, and no need to maintain the state of the loading bar; it's all handled automatically by the interceptor. + +**Requirements:** AngularJS 1.2+ + +**File Size:** 2.4Kb minified, 0.5Kb gzipped + + +## Usage: + +1. include the loading bar as a dependency for your app. If you want animations, include `ngAnimate` as well. *note: ngAnimate is optional* + + ```js + angular.module('myApp', ['angular-loading-bar', 'ngAnimate']) + ``` + +2. include the supplied CSS file (or create your own). +3. That's it -- you're done! + +#### via bower: +``` +$ bower install angular-loading-bar +``` +#### via npm: +``` +$ npm install angular-loading-bar +``` + + +## Why I created this +There are a couple projects similar to this out there, but none were ideal for me. All implementations I've seen require that you maintain state on behalf of the loading bar. In other words, you're setting the value of the loading/progress bar manually from potentially many different locations. This becomes complicated when you have a very large application with several services all making independant XHR requests. It becomes even more complicated if you want these services to be loosly coupled. + +Additionally, Angular was created as a highly testable framework, so it pains me to see Angular modules without tests. That is not the case here as this loading bar ships with 100% code coverage. + + +**Goals for this project:** + +1. Make it automatic +2. Unit tests, 100% coverage +3. Must work well with ngAnimate +4. Must be styled via external CSS (not inline) +5. No jQuery dependencies + + +## Configuration + +#### Turn the spinner on or off: +The insertion of the spinner can be controlled through configuration. It's on by default, but if you'd like to turn it off, simply configure the service: + +```js +angular.module('myApp', ['angular-loading-bar']) + .config(['cfpLoadingBarProvider', function(cfpLoadingBarProvider) { + cfpLoadingBarProvider.includeSpinner = false; + }]) +``` + +#### Turn the loading bar on or off: +Like the spinner configuration above, the loading bar can also be turned off for cases where you only want the spinner: + +```js +angular.module('myApp', ['angular-loading-bar']) + .config(['cfpLoadingBarProvider', function(cfpLoadingBarProvider) { + cfpLoadingBarProvider.includeBar = false; + }]) +``` + +#### Latency Threshold +By default, the loading bar will only display after it has been waiting for a response for over 100ms. This helps keep things feeling snappy, and avoids the annoyingness of showing a loading bar every few seconds on really chatty applications. This threshold is totally configurable: + +```js +angular.module('myApp', ['angular-loading-bar']) + .config(['cfpLoadingBarProvider', function(cfpLoadingBarProvider) { + cfpLoadingBarProvider.latencyThreshold = 500; + }]) +``` + +#### Ignoring particular XHR requests: +The loading bar can also be forced to ignore certain requests, for example, when long-polling or periodically sending debugging information back to the server. + +```js +// ignore particular $http requests: +$http.get('/status', { + ignoreLoadingBar: true +}); + +``` + + +```js +// ignore particular $resource requests: +.factory('Restaurant', function($resource) { + return $resource('/api/restaurant/:id', {id: '@id'}, { + query: { + method: 'GET', + isArray: true, + ignoreLoadingBar: true + } + }); +}); + +``` + + + + +## How it works: +This library is split into two modules, an $http `interceptor`, and a `service`: + +**Interceptor** +The interceptor simply listens for all outgoing XHR requests, and then instructs the loadingBar service to start, stop, and increment accordingly. There is no public API for the interceptor. It can be used stand-alone by including `cfp.loadingBarInterceptor` as a dependency for your module. + +**Service** +The service is responsible for the presentation of the loading bar. It injects the loading bar into the DOM, adjusts the width whenever `set()` is called, and `complete()`s the whole show by removing the loading bar from the DOM. + +## Service API (advanced usage) +Under normal circumstances you won't need to use this. However, if you wish to use the loading bar without the interceptor, you can do that as well. Simply include the loading bar service as a dependency instead of the main `angular-loading-bar` module: + +```js +angular.module('myApp', ['cfp.loadingBar']) +``` + + +```js + +cfpLoadingBar.start(); +// will insert the loading bar into the DOM, and display its progress at 1%. +// It will automatically call `inc()` repeatedly to give the illusion that the page load is progressing. + +cfpLoadingBar.inc(); +// increments the loading bar by a random amount. +// It is important to note that the auto incrementing will begin to slow down as +// the progress increases. This is to prevent the loading bar from appearing +// completed (or almost complete) before the XHR request has responded. + +cfpLoadingBar.set(0.3) // Set the loading bar to 30% +cfpLoadingBar.status() // Returns the loading bar's progress. +// -> 0.3 + +cfpLoadingBar.complete() +// Set the loading bar's progress to 100%, and then remove it from the DOM. + +``` + +## Events +The loading bar broadcasts the following events over $rootScope allowing further customization: + +**`cfpLoadingBar:loading`** triggered upon each XHR request that is not already cached + +**`cfpLoadingBar:loaded`** triggered each time an XHR request recieves a response (either successful or error) + +**`cfpLoadingBar:started`** triggered once upon the first XHR request. Will trigger again if another request goes out after `cfpLoadingBar:completed` has triggered. + +**`cfpLoadingBar:completed`** triggered once when the all XHR requests have returned (either successfully or not) + +## Credits: +Credit goes to [rstacruz](https://github.com/rstacruz) for his excellent [nProgress](https://github.com/rstacruz/nprogress). + +## License: +Licensed under the MIT license diff --git a/vendor/assets/components/angular-loading-bar/bower.json b/vendor/assets/components/angular-loading-bar/bower.json new file mode 100644 index 000000000..974cbb8fc --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/bower.json @@ -0,0 +1,29 @@ +{ + "name": "angular-loading-bar", + "version": "0.7.1", + "main": [ + "build/loading-bar.js", + "build/loading-bar.css" + ], + "ignore": [ + "**/.*", + "node_modules", + "components", + "test", + "example" + ], + "dependencies": { + "angular": "^1.2.9" + }, + "devDependencies": { + "angular": "~1.2.23", + "angular-1.3": "angular#1.3", + "angular-mocks": "~1.2.9", + "angular-mocks-1.3": "angular-mocks#1.3", + "angular-animate": "~1.2.9", + "angular-animate-1.3": "angular-animate#1.3" + }, + "resolutions": { + "angular": "~1.2.23" + } +} diff --git a/vendor/assets/components/angular-loading-bar/build/loading-bar.css b/vendor/assets/components/angular-loading-bar/build/loading-bar.css new file mode 100644 index 000000000..640fb8b0f --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/build/loading-bar.css @@ -0,0 +1,110 @@ +/*! + * angular-loading-bar v0.7.1 + * https://chieffancypants.github.io/angular-loading-bar + * Copyright (c) 2015 Wes Cruver + * License: MIT + */ + +/* Make clicks pass-through */ +#loading-bar, +#loading-bar-spinner { + pointer-events: none; + -webkit-pointer-events: none; + -webkit-transition: 350ms linear all; + -moz-transition: 350ms linear all; + -o-transition: 350ms linear all; + transition: 350ms linear all; +} + +#loading-bar.ng-enter, +#loading-bar.ng-leave.ng-leave-active, +#loading-bar-spinner.ng-enter, +#loading-bar-spinner.ng-leave.ng-leave-active { + opacity: 0; +} + +#loading-bar.ng-enter.ng-enter-active, +#loading-bar.ng-leave, +#loading-bar-spinner.ng-enter.ng-enter-active, +#loading-bar-spinner.ng-leave { + opacity: 1; +} + +#loading-bar .bar { + -webkit-transition: width 350ms; + -moz-transition: width 350ms; + -o-transition: width 350ms; + transition: width 350ms; + + background: #29d; + position: fixed; + z-index: 10002; + top: 0; + left: 0; + width: 100%; + height: 2px; + border-bottom-right-radius: 1px; + border-top-right-radius: 1px; +} + +/* Fancy blur effect */ +#loading-bar .peg { + position: absolute; + width: 70px; + right: 0; + top: 0; + height: 2px; + opacity: .45; + -moz-box-shadow: #29d 1px 0 6px 1px; + -ms-box-shadow: #29d 1px 0 6px 1px; + -webkit-box-shadow: #29d 1px 0 6px 1px; + box-shadow: #29d 1px 0 6px 1px; + -moz-border-radius: 100%; + -webkit-border-radius: 100%; + border-radius: 100%; +} + +#loading-bar-spinner { + display: block; + position: fixed; + z-index: 10002; + top: 10px; + left: 10px; +} + +#loading-bar-spinner .spinner-icon { + width: 14px; + height: 14px; + + border: solid 2px transparent; + border-top-color: #29d; + border-left-color: #29d; + border-radius: 10px; + + -webkit-animation: loading-bar-spinner 400ms linear infinite; + -moz-animation: loading-bar-spinner 400ms linear infinite; + -ms-animation: loading-bar-spinner 400ms linear infinite; + -o-animation: loading-bar-spinner 400ms linear infinite; + animation: loading-bar-spinner 400ms linear infinite; +} + +@-webkit-keyframes loading-bar-spinner { + 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } +} +@-moz-keyframes loading-bar-spinner { + 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } +} +@-o-keyframes loading-bar-spinner { + 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } +} +@-ms-keyframes loading-bar-spinner { + 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } +} +@keyframes loading-bar-spinner { + 0% { transform: rotate(0deg); transform: rotate(0deg); } + 100% { transform: rotate(360deg); transform: rotate(360deg); } +} diff --git a/vendor/assets/components/angular-loading-bar/build/loading-bar.js b/vendor/assets/components/angular-loading-bar/build/loading-bar.js new file mode 100644 index 000000000..7dca593b8 --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/build/loading-bar.js @@ -0,0 +1,324 @@ +/*! + * angular-loading-bar v0.7.1 + * https://chieffancypants.github.io/angular-loading-bar + * Copyright (c) 2015 Wes Cruver + * License: MIT + */ +/* + * angular-loading-bar + * + * intercepts XHR requests and creates a loading bar. + * Based on the excellent nprogress work by rstacruz (more info in readme) + * + * (c) 2013 Wes Cruver + * License: MIT + */ + + +(function() { + +'use strict'; + +// Alias the loading bar for various backwards compatibilities since the project has matured: +angular.module('angular-loading-bar', ['cfp.loadingBarInterceptor']); +angular.module('chieffancypants.loadingBar', ['cfp.loadingBarInterceptor']); + + +/** + * loadingBarInterceptor service + * + * Registers itself as an Angular interceptor and listens for XHR requests. + */ +angular.module('cfp.loadingBarInterceptor', ['cfp.loadingBar']) + .config(['$httpProvider', function ($httpProvider) { + + var interceptor = ['$q', '$cacheFactory', '$timeout', '$rootScope', '$log', 'cfpLoadingBar', function ($q, $cacheFactory, $timeout, $rootScope, $log, cfpLoadingBar) { + + /** + * The total number of requests made + */ + var reqsTotal = 0; + + /** + * The number of requests completed (either successfully or not) + */ + var reqsCompleted = 0; + + /** + * The amount of time spent fetching before showing the loading bar + */ + var latencyThreshold = cfpLoadingBar.latencyThreshold; + + /** + * $timeout handle for latencyThreshold + */ + var startTimeout; + + + /** + * calls cfpLoadingBar.complete() which removes the + * loading bar from the DOM. + */ + function setComplete() { + $timeout.cancel(startTimeout); + cfpLoadingBar.complete(); + reqsCompleted = 0; + reqsTotal = 0; + } + + /** + * Determine if the response has already been cached + * @param {Object} config the config option from the request + * @return {Boolean} retrns true if cached, otherwise false + */ + function isCached(config) { + var cache; + var defaultCache = $cacheFactory.get('$http'); + var defaults = $httpProvider.defaults; + + // Choose the proper cache source. Borrowed from angular: $http service + if ((config.cache || defaults.cache) && config.cache !== false && + (config.method === 'GET' || config.method === 'JSONP')) { + cache = angular.isObject(config.cache) ? config.cache + : angular.isObject(defaults.cache) ? defaults.cache + : defaultCache; + } + + var cached = cache !== undefined ? + cache.get(config.url) !== undefined : false; + + if (config.cached !== undefined && cached !== config.cached) { + return config.cached; + } + config.cached = cached; + return cached; + } + + + return { + 'request': function(config) { + // Check to make sure this request hasn't already been cached and that + // the requester didn't explicitly ask us to ignore this request: + if (!config.ignoreLoadingBar && !isCached(config)) { + $rootScope.$broadcast('cfpLoadingBar:loading', {url: config.url}); + if (reqsTotal === 0) { + startTimeout = $timeout(function() { + cfpLoadingBar.start(); + }, latencyThreshold); + } + reqsTotal++; + cfpLoadingBar.set(reqsCompleted / reqsTotal); + } + return config; + }, + + 'response': function(response) { + if (!response || !response.config) { + $log.error('Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50'); + return response; + } + + if (!response.config.ignoreLoadingBar && !isCached(response.config)) { + reqsCompleted++; + $rootScope.$broadcast('cfpLoadingBar:loaded', {url: response.config.url, result: response}); + if (reqsCompleted >= reqsTotal) { + setComplete(); + } else { + cfpLoadingBar.set(reqsCompleted / reqsTotal); + } + } + return response; + }, + + 'responseError': function(rejection) { + if (!rejection || !rejection.config) { + $log.error('Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50'); + return $q.reject(rejection); + } + + if (!rejection.config.ignoreLoadingBar && !isCached(rejection.config)) { + reqsCompleted++; + $rootScope.$broadcast('cfpLoadingBar:loaded', {url: rejection.config.url, result: rejection}); + if (reqsCompleted >= reqsTotal) { + setComplete(); + } else { + cfpLoadingBar.set(reqsCompleted / reqsTotal); + } + } + return $q.reject(rejection); + } + }; + }]; + + $httpProvider.interceptors.push(interceptor); + }]); + + +/** + * Loading Bar + * + * This service handles adding and removing the actual element in the DOM. + * Generally, best practices for DOM manipulation is to take place in a + * directive, but because the element itself is injected in the DOM only upon + * XHR requests, and it's likely needed on every view, the best option is to + * use a service. + */ +angular.module('cfp.loadingBar', []) + .provider('cfpLoadingBar', function() { + + this.includeSpinner = true; + this.includeBar = true; + this.latencyThreshold = 100; + this.startSize = 0.02; + this.parentSelector = 'body'; + this.spinnerTemplate = '
      '; + this.loadingBarTemplate = '
      '; + + this.$get = ['$injector', '$document', '$timeout', '$rootScope', function ($injector, $document, $timeout, $rootScope) { + var $animate; + var $parentSelector = this.parentSelector, + loadingBarContainer = angular.element(this.loadingBarTemplate), + loadingBar = loadingBarContainer.find('div').eq(0), + spinner = angular.element(this.spinnerTemplate); + + var incTimeout, + completeTimeout, + started = false, + status = 0; + + var includeSpinner = this.includeSpinner; + var includeBar = this.includeBar; + var startSize = this.startSize; + + /** + * Inserts the loading bar element into the dom, and sets it to 2% + */ + function _start() { + if (!$animate) { + $animate = $injector.get('$animate'); + } + + var $parent = $document.find($parentSelector).eq(0); + $timeout.cancel(completeTimeout); + + // do not continually broadcast the started event: + if (started) { + return; + } + + $rootScope.$broadcast('cfpLoadingBar:started'); + started = true; + + if (includeBar) { + $animate.enter(loadingBarContainer, $parent, angular.element($parent[0].lastChild)); + } + + if (includeSpinner) { + $animate.enter(spinner, $parent, angular.element($parent[0].lastChild)); + } + + _set(startSize); + } + + /** + * Set the loading bar's width to a certain percent. + * + * @param n any value between 0 and 1 + */ + function _set(n) { + if (!started) { + return; + } + var pct = (n * 100) + '%'; + loadingBar.css('width', pct); + status = n; + + // increment loadingbar to give the illusion that there is always + // progress but make sure to cancel the previous timeouts so we don't + // have multiple incs running at the same time. + $timeout.cancel(incTimeout); + incTimeout = $timeout(function() { + _inc(); + }, 250); + } + + /** + * Increments the loading bar by a random amount + * but slows down as it progresses + */ + function _inc() { + if (_status() >= 1) { + return; + } + + var rnd = 0; + + // TODO: do this mathmatically instead of through conditions + + var stat = _status(); + if (stat >= 0 && stat < 0.25) { + // Start out between 3 - 6% increments + rnd = (Math.random() * (5 - 3 + 1) + 3) / 100; + } else if (stat >= 0.25 && stat < 0.65) { + // increment between 0 - 3% + rnd = (Math.random() * 3) / 100; + } else if (stat >= 0.65 && stat < 0.9) { + // increment between 0 - 2% + rnd = (Math.random() * 2) / 100; + } else if (stat >= 0.9 && stat < 0.99) { + // finally, increment it .5 % + rnd = 0.005; + } else { + // after 99%, don't increment: + rnd = 0; + } + + var pct = _status() + rnd; + _set(pct); + } + + function _status() { + return status; + } + + function _completeAnimation() { + status = 0; + started = false; + } + + function _complete() { + if (!$animate) { + $animate = $injector.get('$animate'); + } + + $rootScope.$broadcast('cfpLoadingBar:completed'); + _set(1); + + $timeout.cancel(completeTimeout); + + // Attempt to aggregate any start/complete calls within 500ms: + completeTimeout = $timeout(function() { + var promise = $animate.leave(loadingBarContainer, _completeAnimation); + if (promise && promise.then) { + promise.then(_completeAnimation); + } + $animate.leave(spinner); + }, 500); + } + + return { + start : _start, + set : _set, + status : _status, + inc : _inc, + complete : _complete, + includeSpinner : this.includeSpinner, + latencyThreshold : this.latencyThreshold, + parentSelector : this.parentSelector, + startSize : this.startSize + }; + + + }]; // + }); // wtf javascript. srsly +})(); // diff --git a/vendor/assets/components/angular-loading-bar/build/loading-bar.min.css b/vendor/assets/components/angular-loading-bar/build/loading-bar.min.css new file mode 100644 index 000000000..680cdfac5 --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/build/loading-bar.min.css @@ -0,0 +1,8 @@ +/*! + * angular-loading-bar v0.7.1 + * https://chieffancypants.github.io/angular-loading-bar + * Copyright (c) 2015 Wes Cruver + * License: MIT + */ + +#loading-bar,#loading-bar-spinner{pointer-events:none;-webkit-pointer-events:none;-webkit-transition:350ms linear all;-moz-transition:350ms linear all;-o-transition:350ms linear all;transition:350ms linear all}#loading-bar.ng-enter,#loading-bar.ng-leave.ng-leave-active,#loading-bar-spinner.ng-enter,#loading-bar-spinner.ng-leave.ng-leave-active{opacity:0}#loading-bar.ng-enter.ng-enter-active,#loading-bar.ng-leave,#loading-bar-spinner.ng-enter.ng-enter-active,#loading-bar-spinner.ng-leave{opacity:1}#loading-bar .bar{-webkit-transition:width 350ms;-moz-transition:width 350ms;-o-transition:width 350ms;transition:width 350ms;background:#29d;position:fixed;z-index:10002;top:0;left:0;width:100%;height:2px;border-bottom-right-radius:1px;border-top-right-radius:1px}#loading-bar .peg{position:absolute;width:70px;right:0;top:0;height:2px;opacity:.45;-moz-box-shadow:#29d 1px 0 6px 1px;-ms-box-shadow:#29d 1px 0 6px 1px;-webkit-box-shadow:#29d 1px 0 6px 1px;box-shadow:#29d 1px 0 6px 1px;-moz-border-radius:100%;-webkit-border-radius:100%;border-radius:100%}#loading-bar-spinner{display:block;position:fixed;z-index:10002;top:10px;left:10px}#loading-bar-spinner .spinner-icon{width:14px;height:14px;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:10px;-webkit-animation:loading-bar-spinner 400ms linear infinite;-moz-animation:loading-bar-spinner 400ms linear infinite;-ms-animation:loading-bar-spinner 400ms linear infinite;-o-animation:loading-bar-spinner 400ms linear infinite;animation:loading-bar-spinner 400ms linear infinite}@-webkit-keyframes loading-bar-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes loading-bar-spinner{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes loading-bar-spinner{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes loading-bar-spinner{0%{-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-bar-spinner{0%{transform:rotate(0deg);transform:rotate(0deg)}100%{transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/vendor/assets/components/angular-loading-bar/build/loading-bar.min.js b/vendor/assets/components/angular-loading-bar/build/loading-bar.min.js new file mode 100644 index 000000000..1bc615ef7 --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/build/loading-bar.min.js @@ -0,0 +1,7 @@ +/*! + * angular-loading-bar v0.7.1 + * https://chieffancypants.github.io/angular-loading-bar + * Copyright (c) 2015 Wes Cruver + * License: MIT + */ +!function(){"use strict";angular.module("angular-loading-bar",["cfp.loadingBarInterceptor"]),angular.module("chieffancypants.loadingBar",["cfp.loadingBarInterceptor"]),angular.module("cfp.loadingBarInterceptor",["cfp.loadingBar"]).config(["$httpProvider",function(a){var b=["$q","$cacheFactory","$timeout","$rootScope","$log","cfpLoadingBar",function(b,c,d,e,f,g){function h(){d.cancel(j),g.complete(),l=0,k=0}function i(b){var d,e=c.get("$http"),f=a.defaults;!b.cache&&!f.cache||b.cache===!1||"GET"!==b.method&&"JSONP"!==b.method||(d=angular.isObject(b.cache)?b.cache:angular.isObject(f.cache)?f.cache:e);var g=void 0!==d?void 0!==d.get(b.url):!1;return void 0!==b.cached&&g!==b.cached?b.cached:(b.cached=g,g)}var j,k=0,l=0,m=g.latencyThreshold;return{request:function(a){return a.ignoreLoadingBar||i(a)||(e.$broadcast("cfpLoadingBar:loading",{url:a.url}),0===k&&(j=d(function(){g.start()},m)),k++,g.set(l/k)),a},response:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),a):(f.error("Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),a)},responseError:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),b.reject(a)):(f.error("Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),b.reject(a))}}}];a.interceptors.push(b)}]),angular.module("cfp.loadingBar",[]).provider("cfpLoadingBar",function(){this.includeSpinner=!0,this.includeBar=!0,this.latencyThreshold=100,this.startSize=.02,this.parentSelector="body",this.spinnerTemplate='
      ',this.loadingBarTemplate='
      ',this.$get=["$injector","$document","$timeout","$rootScope",function(a,b,c,d){function e(){k||(k=a.get("$animate"));var e=b.find(n).eq(0);c.cancel(m),r||(d.$broadcast("cfpLoadingBar:started"),r=!0,u&&k.enter(o,e,angular.element(e[0].lastChild)),t&&k.enter(q,e,angular.element(e[0].lastChild)),f(v))}function f(a){if(r){var b=100*a+"%";p.css("width",b),s=a,c.cancel(l),l=c(function(){g()},250)}}function g(){if(!(h()>=1)){var a=0,b=h();a=b>=0&&.25>b?(3*Math.random()+3)/100:b>=.25&&.65>b?3*Math.random()/100:b>=.65&&.9>b?2*Math.random()/100:b>=.9&&.99>b?.005:0;var c=h()+a;f(c)}}function h(){return s}function i(){s=0,r=!1}function j(){k||(k=a.get("$animate")),d.$broadcast("cfpLoadingBar:completed"),f(1),c.cancel(m),m=c(function(){var a=k.leave(o,i);a&&a.then&&a.then(i),k.leave(q)},500)}var k,l,m,n=this.parentSelector,o=angular.element(this.loadingBarTemplate),p=o.find("div").eq(0),q=angular.element(this.spinnerTemplate),r=!1,s=0,t=this.includeSpinner,u=this.includeBar,v=this.startSize;return{start:e,set:f,status:h,inc:g,complete:j,includeSpinner:this.includeSpinner,latencyThreshold:this.latencyThreshold,parentSelector:this.parentSelector,startSize:this.startSize}}]})}(); \ No newline at end of file diff --git a/vendor/assets/components/angular-loading-bar/package.json b/vendor/assets/components/angular-loading-bar/package.json new file mode 100644 index 000000000..600d9f98e --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/package.json @@ -0,0 +1,45 @@ +{ + "name": "angular-loading-bar", + "version": "0.7.1", + "description": "An automatic loading bar for AngularJS", + "main": "src/loading-bar.js", + "directories": { + "example": "example", + "test": "test" + }, + "repository": { + "type": "git", + "url": "git://github.com/chieffancypants/angular-loading-bar.git" + }, + "keywords": [ + "angular", + "angularjs", + "loading", + "loadingbar", + "progress", + "progressbar" + ], + "author": "Wes Cruver", + "license": "MIT", + "bugs": { + "url": "https://github.com/chieffancypants/angular-loading-bar/issues" + }, + "homepage": "https://chieffancypants.github.io/angular-loading-bar", + "devDependencies": { + "karma-script-launcher": "~0.1.0", + "karma-chrome-launcher": "~0.1.0", + "karma-firefox-launcher": "~0.1.0", + "karma-html2js-preprocessor": "~0.1.0", + "karma-jasmine": "~0.1.3", + "karma-coffee-preprocessor": "~0.1.0", + "karma-phantomjs-launcher": "~0.1.0", + "karma": "~0.10.2", + "karma-coverage": "~0.1.0", + "grunt": "~0.4.1", + "grunt-contrib-jshint": "~0.6.4", + "grunt-contrib-uglify": "~0.2.4", + "grunt-contrib-cssmin": "~0.6.1", + "grunt-karma": "~0.6.2", + "grunt-contrib-concat": "~0.3.0" + } +} diff --git a/vendor/assets/components/angular-loading-bar/src/loading-bar.css b/vendor/assets/components/angular-loading-bar/src/loading-bar.css new file mode 100644 index 000000000..d8545706c --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/src/loading-bar.css @@ -0,0 +1,104 @@ + +/* Make clicks pass-through */ +#loading-bar, +#loading-bar-spinner { + pointer-events: none; + -webkit-pointer-events: none; + -webkit-transition: 350ms linear all; + -moz-transition: 350ms linear all; + -o-transition: 350ms linear all; + transition: 350ms linear all; +} + +#loading-bar.ng-enter, +#loading-bar.ng-leave.ng-leave-active, +#loading-bar-spinner.ng-enter, +#loading-bar-spinner.ng-leave.ng-leave-active { + opacity: 0; +} + +#loading-bar.ng-enter.ng-enter-active, +#loading-bar.ng-leave, +#loading-bar-spinner.ng-enter.ng-enter-active, +#loading-bar-spinner.ng-leave { + opacity: 1; +} + +#loading-bar .bar { + -webkit-transition: width 350ms; + -moz-transition: width 350ms; + -o-transition: width 350ms; + transition: width 350ms; + + background: #29d; + position: fixed; + z-index: 10002; + top: 0; + left: 0; + width: 100%; + height: 2px; + border-bottom-right-radius: 1px; + border-top-right-radius: 1px; +} + +/* Fancy blur effect */ +#loading-bar .peg { + position: absolute; + width: 70px; + right: 0; + top: 0; + height: 2px; + opacity: .45; + -moz-box-shadow: #29d 1px 0 6px 1px; + -ms-box-shadow: #29d 1px 0 6px 1px; + -webkit-box-shadow: #29d 1px 0 6px 1px; + box-shadow: #29d 1px 0 6px 1px; + -moz-border-radius: 100%; + -webkit-border-radius: 100%; + border-radius: 100%; +} + +#loading-bar-spinner { + display: block; + position: fixed; + z-index: 10002; + top: 10px; + left: 10px; +} + +#loading-bar-spinner .spinner-icon { + width: 14px; + height: 14px; + + border: solid 2px transparent; + border-top-color: #29d; + border-left-color: #29d; + border-radius: 10px; + + -webkit-animation: loading-bar-spinner 400ms linear infinite; + -moz-animation: loading-bar-spinner 400ms linear infinite; + -ms-animation: loading-bar-spinner 400ms linear infinite; + -o-animation: loading-bar-spinner 400ms linear infinite; + animation: loading-bar-spinner 400ms linear infinite; +} + +@-webkit-keyframes loading-bar-spinner { + 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } +} +@-moz-keyframes loading-bar-spinner { + 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } +} +@-o-keyframes loading-bar-spinner { + 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } +} +@-ms-keyframes loading-bar-spinner { + 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } +} +@keyframes loading-bar-spinner { + 0% { transform: rotate(0deg); transform: rotate(0deg); } + 100% { transform: rotate(360deg); transform: rotate(360deg); } +} diff --git a/vendor/assets/components/angular-loading-bar/src/loading-bar.js b/vendor/assets/components/angular-loading-bar/src/loading-bar.js new file mode 100644 index 000000000..607a7ea4a --- /dev/null +++ b/vendor/assets/components/angular-loading-bar/src/loading-bar.js @@ -0,0 +1,318 @@ +/* + * angular-loading-bar + * + * intercepts XHR requests and creates a loading bar. + * Based on the excellent nprogress work by rstacruz (more info in readme) + * + * (c) 2013 Wes Cruver + * License: MIT + */ + + +(function() { + +'use strict'; + +// Alias the loading bar for various backwards compatibilities since the project has matured: +angular.module('angular-loading-bar', ['cfp.loadingBarInterceptor']); +angular.module('chieffancypants.loadingBar', ['cfp.loadingBarInterceptor']); + + +/** + * loadingBarInterceptor service + * + * Registers itself as an Angular interceptor and listens for XHR requests. + */ +angular.module('cfp.loadingBarInterceptor', ['cfp.loadingBar']) + .config(['$httpProvider', function ($httpProvider) { + + var interceptor = ['$q', '$cacheFactory', '$timeout', '$rootScope', '$log', 'cfpLoadingBar', function ($q, $cacheFactory, $timeout, $rootScope, $log, cfpLoadingBar) { + + /** + * The total number of requests made + */ + var reqsTotal = 0; + + /** + * The number of requests completed (either successfully or not) + */ + var reqsCompleted = 0; + + /** + * The amount of time spent fetching before showing the loading bar + */ + var latencyThreshold = cfpLoadingBar.latencyThreshold; + + /** + * $timeout handle for latencyThreshold + */ + var startTimeout; + + + /** + * calls cfpLoadingBar.complete() which removes the + * loading bar from the DOM. + */ + function setComplete() { + $timeout.cancel(startTimeout); + cfpLoadingBar.complete(); + reqsCompleted = 0; + reqsTotal = 0; + } + + /** + * Determine if the response has already been cached + * @param {Object} config the config option from the request + * @return {Boolean} retrns true if cached, otherwise false + */ + function isCached(config) { + var cache; + var defaultCache = $cacheFactory.get('$http'); + var defaults = $httpProvider.defaults; + + // Choose the proper cache source. Borrowed from angular: $http service + if ((config.cache || defaults.cache) && config.cache !== false && + (config.method === 'GET' || config.method === 'JSONP')) { + cache = angular.isObject(config.cache) ? config.cache + : angular.isObject(defaults.cache) ? defaults.cache + : defaultCache; + } + + var cached = cache !== undefined ? + cache.get(config.url) !== undefined : false; + + if (config.cached !== undefined && cached !== config.cached) { + return config.cached; + } + config.cached = cached; + return cached; + } + + + return { + 'request': function(config) { + // Check to make sure this request hasn't already been cached and that + // the requester didn't explicitly ask us to ignore this request: + if (!config.ignoreLoadingBar && !isCached(config)) { + $rootScope.$broadcast('cfpLoadingBar:loading', {url: config.url}); + if (reqsTotal === 0) { + startTimeout = $timeout(function() { + cfpLoadingBar.start(); + }, latencyThreshold); + } + reqsTotal++; + cfpLoadingBar.set(reqsCompleted / reqsTotal); + } + return config; + }, + + 'response': function(response) { + if (!response || !response.config) { + $log.error('Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50'); + return response; + } + + if (!response.config.ignoreLoadingBar && !isCached(response.config)) { + reqsCompleted++; + $rootScope.$broadcast('cfpLoadingBar:loaded', {url: response.config.url, result: response}); + if (reqsCompleted >= reqsTotal) { + setComplete(); + } else { + cfpLoadingBar.set(reqsCompleted / reqsTotal); + } + } + return response; + }, + + 'responseError': function(rejection) { + if (!rejection || !rejection.config) { + $log.error('Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50'); + return $q.reject(rejection); + } + + if (!rejection.config.ignoreLoadingBar && !isCached(rejection.config)) { + reqsCompleted++; + $rootScope.$broadcast('cfpLoadingBar:loaded', {url: rejection.config.url, result: rejection}); + if (reqsCompleted >= reqsTotal) { + setComplete(); + } else { + cfpLoadingBar.set(reqsCompleted / reqsTotal); + } + } + return $q.reject(rejection); + } + }; + }]; + + $httpProvider.interceptors.push(interceptor); + }]); + + +/** + * Loading Bar + * + * This service handles adding and removing the actual element in the DOM. + * Generally, best practices for DOM manipulation is to take place in a + * directive, but because the element itself is injected in the DOM only upon + * XHR requests, and it's likely needed on every view, the best option is to + * use a service. + */ +angular.module('cfp.loadingBar', []) + .provider('cfpLoadingBar', function() { + + this.includeSpinner = true; + this.includeBar = true; + this.latencyThreshold = 100; + this.startSize = 0.02; + this.parentSelector = 'body'; + this.spinnerTemplate = '
      '; + this.loadingBarTemplate = '
      '; + + this.$get = ['$injector', '$document', '$timeout', '$rootScope', function ($injector, $document, $timeout, $rootScope) { + var $animate; + var $parentSelector = this.parentSelector, + loadingBarContainer = angular.element(this.loadingBarTemplate), + loadingBar = loadingBarContainer.find('div').eq(0), + spinner = angular.element(this.spinnerTemplate); + + var incTimeout, + completeTimeout, + started = false, + status = 0; + + var includeSpinner = this.includeSpinner; + var includeBar = this.includeBar; + var startSize = this.startSize; + + /** + * Inserts the loading bar element into the dom, and sets it to 2% + */ + function _start() { + if (!$animate) { + $animate = $injector.get('$animate'); + } + + var $parent = $document.find($parentSelector).eq(0); + $timeout.cancel(completeTimeout); + + // do not continually broadcast the started event: + if (started) { + return; + } + + $rootScope.$broadcast('cfpLoadingBar:started'); + started = true; + + if (includeBar) { + $animate.enter(loadingBarContainer, $parent, angular.element($parent[0].lastChild)); + } + + if (includeSpinner) { + $animate.enter(spinner, $parent, angular.element($parent[0].lastChild)); + } + + _set(startSize); + } + + /** + * Set the loading bar's width to a certain percent. + * + * @param n any value between 0 and 1 + */ + function _set(n) { + if (!started) { + return; + } + var pct = (n * 100) + '%'; + loadingBar.css('width', pct); + status = n; + + // increment loadingbar to give the illusion that there is always + // progress but make sure to cancel the previous timeouts so we don't + // have multiple incs running at the same time. + $timeout.cancel(incTimeout); + incTimeout = $timeout(function() { + _inc(); + }, 250); + } + + /** + * Increments the loading bar by a random amount + * but slows down as it progresses + */ + function _inc() { + if (_status() >= 1) { + return; + } + + var rnd = 0; + + // TODO: do this mathmatically instead of through conditions + + var stat = _status(); + if (stat >= 0 && stat < 0.25) { + // Start out between 3 - 6% increments + rnd = (Math.random() * (5 - 3 + 1) + 3) / 100; + } else if (stat >= 0.25 && stat < 0.65) { + // increment between 0 - 3% + rnd = (Math.random() * 3) / 100; + } else if (stat >= 0.65 && stat < 0.9) { + // increment between 0 - 2% + rnd = (Math.random() * 2) / 100; + } else if (stat >= 0.9 && stat < 0.99) { + // finally, increment it .5 % + rnd = 0.005; + } else { + // after 99%, don't increment: + rnd = 0; + } + + var pct = _status() + rnd; + _set(pct); + } + + function _status() { + return status; + } + + function _completeAnimation() { + status = 0; + started = false; + } + + function _complete() { + if (!$animate) { + $animate = $injector.get('$animate'); + } + + $rootScope.$broadcast('cfpLoadingBar:completed'); + _set(1); + + $timeout.cancel(completeTimeout); + + // Attempt to aggregate any start/complete calls within 500ms: + completeTimeout = $timeout(function() { + var promise = $animate.leave(loadingBarContainer, _completeAnimation); + if (promise && promise.then) { + promise.then(_completeAnimation); + } + $animate.leave(spinner); + }, 500); + } + + return { + start : _start, + set : _set, + status : _status, + inc : _inc, + complete : _complete, + includeSpinner : this.includeSpinner, + latencyThreshold : this.latencyThreshold, + parentSelector : this.parentSelector, + startSize : this.startSize + }; + + + }]; // + }); // wtf javascript. srsly +})(); // diff --git a/vendor/assets/components/angular-moment/.bower.json b/vendor/assets/components/angular-moment/.bower.json new file mode 100644 index 000000000..9713e3a53 --- /dev/null +++ b/vendor/assets/components/angular-moment/.bower.json @@ -0,0 +1,31 @@ +{ + "name": "angular-moment", + "version": "0.10.0", + "description": "Moment.JS directives & filters for AngularJS (timeago alternative)", + "author": "Uri Shaked", + "license": "MIT", + "homepage": "http://github.com/urish/angular-moment", + "main": "./angular-moment.js", + "ignore": [], + "dependencies": { + "angular": ">=1.2.0 <1.5.0", + "moment": ">=2.8.0 <2.11.0" + }, + "devDependencies": { + "angular-mocks": "1.3.x", + "moment-timezone": "0.3.1" + }, + "repository": { + "type": "git", + "url": "git://github.com/urish/angular-moment.git" + }, + "_release": "0.10.0", + "_resolution": { + "type": "version", + "tag": "0.10.0", + "commit": "96d89aab944112e51177e06d4cd82a8b9306e656" + }, + "_source": "git://github.com/urish/angular-moment.git", + "_target": ">=0.7.0", + "_originalSource": "angular-moment" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-moment/.editorconfig b/vendor/assets/components/angular-moment/.editorconfig new file mode 100644 index 000000000..297368244 --- /dev/null +++ b/vendor/assets/components/angular-moment/.editorconfig @@ -0,0 +1,24 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] + +# Change these settings to your own preference +indent_style = tab +indent_size = 4 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[{package.json,bower.json}] +indent_style=space +indent_size=2 + +[*.md] +trim_trailing_whitespace = false diff --git a/vendor/assets/components/angular-moment/.gitignore b/vendor/assets/components/angular-moment/.gitignore new file mode 100644 index 000000000..fccb56b32 --- /dev/null +++ b/vendor/assets/components/angular-moment/.gitignore @@ -0,0 +1,4 @@ +/.idea +/bower_components +/node_modules +/coverage \ No newline at end of file diff --git a/vendor/assets/components/angular-moment/.jshintrc b/vendor/assets/components/angular-moment/.jshintrc new file mode 100644 index 000000000..d430ef2a6 --- /dev/null +++ b/vendor/assets/components/angular-moment/.jshintrc @@ -0,0 +1,26 @@ +{ + "node": true, + "browser": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "maxdepth": 2, + "maxcomplexity": 10, + "globals": { + "angular": false + } +} diff --git a/vendor/assets/components/angular-moment/.npmignore b/vendor/assets/components/angular-moment/.npmignore new file mode 100644 index 000000000..2a9c3935f --- /dev/null +++ b/vendor/assets/components/angular-moment/.npmignore @@ -0,0 +1,4 @@ +.idea +bower_components +node_modules +coverage diff --git a/vendor/assets/components/angular-moment/.travis.yml b/vendor/assets/components/angular-moment/.travis.yml new file mode 100644 index 000000000..c85bdee3c --- /dev/null +++ b/vendor/assets/components/angular-moment/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - "0.10" +before_script: + - npm run bower +after_success: + - cat ./coverage/*/lcov.info | ./node_modules/coveralls/bin/coveralls.js diff --git a/vendor/assets/components/angular-moment/CHANGELOG.md b/vendor/assets/components/angular-moment/CHANGELOG.md new file mode 100644 index 000000000..e55ec3a53 --- /dev/null +++ b/vendor/assets/components/angular-moment/CHANGELOG.md @@ -0,0 +1,128 @@ +# Changelog + +## 0.10.0 - 2015-04-10 +- Breaking change: removed one-time binding for `am-time-ago` in favor of AngularJS 1.3's one time binding ([#122](https://github.com/urish/angular-moment/issues/122)) +- Remove support for AngularJS 1.0.x and 1.1.x. +- Support moment.js v2.10.x +- Support for displaying full dates in `am-time-ago` (see [#75](https://github.com/urish/angular-moment/issues/75)) +- Support Angular Core's style CommonJS standard ([#123](https://github.com/urish/angular-moment/pull/123), contributed by [seanhealy](https://github.com/seanhealy)) +- Added an optional timezone parameter to amDateFormat ([#90](https://github.com/urish/angular-moment/pull/90), contributed by [robertbrooker](https://github.com/robertbrooker)) + +## 0.9.2 - 2015-03-17 +- Critical fix: npm install angular-moment fails ([#121](https://github.com/urish/angular-moment/issues/121)) + +## 0.9.1 - 2015-03-17 +- Add support for locale strings customization ([#102](https://github.com/urish/angular-moment/pull/102), contributed by [vosi](https://github.com/vosi)) +- Add `amDifference` filter ([#120](https://github.com/urish/angular-moment/pull/120), contributed by [ajhodges](https://github.com/ajhodges)) +- Support for changing the timezone via `amMoment.changeTimezone()` ([#92](https://github.com/urish/angular-moment/issues/92)) +- Support for AngularJS 1.4.x +- Remove explicit module name for RequireJS ([#112](https://github.com/urish/angular-moment/pull/112), contributed by [WilliamCarter](https://github.com/WilliamCarter)) + +## 0.9.0 - 2015-01-11 +- Support moment.js v2.9.0. See [here](https://gist.github.com/ichernev/0c9a9b49951111a27ce7) for changelog. +- Removed support for older moment.js versions. Only 2.8.0 and newer versions are now supported. +- Removed deprecated method: `amMoment.changeLanguage()`. Use `amMoment.changeLocale()` instead. +- Removed deprecated event: `amMoment:languageChange`. Listen for `amMoment:localeChange` instead. +- Filters are now stateful by default (fixes [#97](https://github.com/urish/angular-moment/issues/97)). +- The project is now available on [NuGet](https://www.nuget.org/packages/angular-moment/) ([#99](https://github.com/urish/angular-moment/pull/99), contributed by [markvp](https://github.com/markvp)). + +## 0.8.3 - 2014-12-08 +- `amTimeAgo` filter ([#96](https://github.com/urish/angular-moment/pull/96), contributed by [maxklenk](https://github.com/maxklenk)) +- Show formatted time as element title ([#78](https://github.com/urish/angular-moment/pull/78), contributed by [ctesene](https://github.com/ctesene)) +- Support commonjs and browserify ([#95](https://github.com/urish/angular-moment/pull/95), contributed by [Pencroff](https://github.com/Pencroff)) +- SystemJS Loader support ([#85](https://github.com/urish/angular-moment/pull/85), contributed by [capaj](https://github.com/capaj)) + +## 0.8.2 - 2014-09-07 +- `amMoment.changeLanguage()` was deprecated in favor of `amMoment.changeLocale()` (following [a change](http://momentjs.com/docs/#/i18n/changing-locale/) introduced in moment v2.8.1) +- Bugfix: changing the locale emitted a deprecation warning (see [#76](https://github.com/urish/angular-moment/issues/76) for details). + +## 0.8.1 - 2014-09-01 +- Support moment.js v2.8.0. See [here](https://gist.github.com/ichernev/ac3899324a5fa6c8c9b4) for changelog. +- Support moment-timezone v0.2.1. See [here](https://github.com/moment/moment-timezone/blob/develop/changelog.md#021-2014-08-02) for changelog. +- Bugfix: `updateTime()` is called too often for future dates ([#73](https://github.com/urish/angular-moment/issues/73)) + +## 0.8.0 - 2014-07-26 +- Generate source map for the minified version ([#50](https://github.com/urish/angular-moment/issues/50)) +- Add support HTML `
      + */ +angular.module('ui.router', ['ui.router.state']); + +angular.module('ui.router.compat', ['ui.router']); + +/** + * @ngdoc object + * @name ui.router.util.$resolve + * + * @requires $q + * @requires $injector + * + * @description + * Manages resolution of (acyclic) graphs of promises. + */ +$Resolve.$inject = ['$q', '$injector']; +function $Resolve( $q, $injector) { + + var VISIT_IN_PROGRESS = 1, + VISIT_DONE = 2, + NOTHING = {}, + NO_DEPENDENCIES = [], + NO_LOCALS = NOTHING, + NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING }); + + + /** + * @ngdoc function + * @name ui.router.util.$resolve#study + * @methodOf ui.router.util.$resolve + * + * @description + * Studies a set of invocables that are likely to be used multiple times. + *
      +   * $resolve.study(invocables)(locals, parent, self)
      +   * 
      + * is equivalent to + *
      +   * $resolve.resolve(invocables, locals, parent, self)
      +   * 
      + * but the former is more efficient (in fact `resolve` just calls `study` + * internally). + * + * @param {object} invocables Invocable objects + * @return {function} a function to pass in locals, parent and self + */ + this.study = function (invocables) { + if (!isObject(invocables)) throw new Error("'invocables' must be an object"); + var invocableKeys = objectKeys(invocables || {}); + + // Perform a topological sort of invocables to build an ordered plan + var plan = [], cycle = [], visited = {}; + function visit(value, key) { + if (visited[key] === VISIT_DONE) return; + + cycle.push(key); + if (visited[key] === VISIT_IN_PROGRESS) { + cycle.splice(0, indexOf(cycle, key)); + throw new Error("Cyclic dependency: " + cycle.join(" -> ")); + } + visited[key] = VISIT_IN_PROGRESS; + + if (isString(value)) { + plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES); + } else { + var params = $injector.annotate(value); + forEach(params, function (param) { + if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param); + }); + plan.push(key, value, params); + } + + cycle.pop(); + visited[key] = VISIT_DONE; + } + forEach(invocables, visit); + invocables = cycle = visited = null; // plan is all that's required + + function isResolve(value) { + return isObject(value) && value.then && value.$$promises; + } + + return function (locals, parent, self) { + if (isResolve(locals) && self === undefined) { + self = parent; parent = locals; locals = null; + } + if (!locals) locals = NO_LOCALS; + else if (!isObject(locals)) { + throw new Error("'locals' must be an object"); + } + if (!parent) parent = NO_PARENT; + else if (!isResolve(parent)) { + throw new Error("'parent' must be a promise returned by $resolve.resolve()"); + } + + // To complete the overall resolution, we have to wait for the parent + // promise and for the promise for each invokable in our plan. + var resolution = $q.defer(), + result = resolution.promise, + promises = result.$$promises = {}, + values = extend({}, locals), + wait = 1 + plan.length/3, + merged = false; + + function done() { + // Merge parent values we haven't got yet and publish our own $$values + if (!--wait) { + if (!merged) merge(values, parent.$$values); + result.$$values = values; + result.$$promises = result.$$promises || true; // keep for isResolve() + delete result.$$inheritedValues; + resolution.resolve(values); + } + } + + function fail(reason) { + result.$$failure = reason; + resolution.reject(reason); + } + + // Short-circuit if parent has already failed + if (isDefined(parent.$$failure)) { + fail(parent.$$failure); + return result; + } + + if (parent.$$inheritedValues) { + merge(values, omit(parent.$$inheritedValues, invocableKeys)); + } + + // Merge parent values if the parent has already resolved, or merge + // parent promises and wait if the parent resolve is still in progress. + extend(promises, parent.$$promises); + if (parent.$$values) { + merged = merge(values, omit(parent.$$values, invocableKeys)); + result.$$inheritedValues = omit(parent.$$values, invocableKeys); + done(); + } else { + if (parent.$$inheritedValues) { + result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys); + } + parent.then(done, fail); + } + + // Process each invocable in the plan, but ignore any where a local of the same name exists. + for (var i=0, ii=plan.length; i} The template html as a string, or a promise + * for that string. + */ + this.fromUrl = function (url, params) { + if (isFunction(url)) url = url(params); + if (url == null) return null; + else return $http + .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}) + .then(function(response) { return response.data; }); + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromProvider + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template by invoking an injectable provider function. + * + * @param {Function} provider Function to invoke via `$injector.invoke` + * @param {Object} params Parameters for the template. + * @param {Object} locals Locals to pass to `invoke`. Defaults to + * `{ params: params }`. + * @return {string|Promise.} The template html as a string, or a promise + * for that string. + */ + this.fromProvider = function (provider, params, locals) { + return $injector.invoke(provider, null, locals || { params: params }); + }; +} + +angular.module('ui.router.util').service('$templateFactory', $TemplateFactory); + +var $$UMFP; // reference to $UrlMatcherFactoryProvider + +/** + * @ngdoc object + * @name ui.router.util.type:UrlMatcher + * + * @description + * Matches URLs against patterns and extracts named parameters from the path or the search + * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list + * of search parameters. Multiple search parameter names are separated by '&'. Search parameters + * do not influence whether or not a URL is matched, but their values are passed through into + * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}. + * + * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace + * syntax, which optionally allows a regular expression for the parameter to be specified: + * + * * `':'` name - colon placeholder + * * `'*'` name - catch-all placeholder + * * `'{' name '}'` - curly placeholder + * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the + * regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash. + * + * Parameter names may contain only word characters (latin letters, digits, and underscore) and + * must be unique within the pattern (across both path and search parameters). For colon + * placeholders or curly placeholders without an explicit regexp, a path parameter matches any + * number of characters other than '/'. For catch-all placeholders the path parameter matches + * any number of characters. + * + * Examples: + * + * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for + * trailing slashes, and patterns have to match the entire path, not just a prefix. + * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or + * '/user/bob/details'. The second path segment will be captured as the parameter 'id'. + * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax. + * * `'/user/{id:[^/]*}'` - Same as the previous example. + * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id + * parameter consists of 1 to 8 hex digits. + * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the + * path into the parameter 'path'. + * * `'/files/*path'` - ditto. + * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined + * in the built-in `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start + * + * @param {string} pattern The pattern to compile into a matcher. + * @param {Object} config A configuration object hash: + * @param {Object=} parentMatcher Used to concatenate the pattern/config onto + * an existing UrlMatcher + * + * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`. + * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`. + * + * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any + * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns + * non-null) will start with this prefix. + * + * @property {string} source The pattern that was passed into the constructor + * + * @property {string} sourcePath The path portion of the source property + * + * @property {string} sourceSearch The search portion of the source property + * + * @property {string} regex The constructed regex that will be used to match against the url when + * it is time to determine which url will match. + * + * @returns {Object} New `UrlMatcher` object + */ +function UrlMatcher(pattern, config, parentMatcher) { + config = extend({ params: {} }, isObject(config) ? config : {}); + + // Find all placeholders and create a compiled pattern, using either classic or curly syntax: + // '*' name + // ':' name + // '{' name '}' + // '{' name ':' regexp '}' + // The regular expression is somewhat complicated due to the need to allow curly braces + // inside the regular expression. The placeholder regexp breaks down as follows: + // ([:*])([\w\[\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case) + // \{([\w\[\]]+)(?:\:( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case + // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either + // [^{}\\]+ - anything other than curly braces or backslash + // \\. - a backslash escape + // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms + var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + compiled = '^', last = 0, m, + segments = this.segments = [], + parentParams = parentMatcher ? parentMatcher.params : {}, + params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(), + paramNames = []; + + function addParameter(id, type, config, location) { + paramNames.push(id); + if (parentParams[id]) return parentParams[id]; + if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'"); + if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'"); + params[id] = new $$UMFP.Param(id, type, config, location); + return params[id]; + } + + function quoteRegExp(string, pattern, squash) { + var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&"); + if (!pattern) return result; + switch(squash) { + case false: surroundPattern = ['(', ')']; break; + case true: surroundPattern = ['?(', ')?']; break; + default: surroundPattern = ['(' + squash + "|", ')?']; break; + } + return result + surroundPattern[0] + pattern + surroundPattern[1]; + } + + this.source = pattern; + + // Split into static segments separated by path parameter placeholders. + // The number of segments is always 1 more than the number of parameters. + function matchDetails(m, isSearch) { + var id, regexp, segment, type, cfg, arrayMode; + id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null + cfg = config.params[id]; + segment = pattern.substring(last, m.index); + regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null); + type = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp) }); + return { + id: id, regexp: regexp, segment: segment, type: type, cfg: cfg + }; + } + + var p, param, segment; + while ((m = placeholder.exec(pattern))) { + p = matchDetails(m, false); + if (p.segment.indexOf('?') >= 0) break; // we're into the search part + + param = addParameter(p.id, p.type, p.cfg, "path"); + compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash); + segments.push(p.segment); + last = placeholder.lastIndex; + } + segment = pattern.substring(last); + + // Find any search parameter names and remove them from the last segment + var i = segment.indexOf('?'); + + if (i >= 0) { + var search = this.sourceSearch = segment.substring(i); + segment = segment.substring(0, i); + this.sourcePath = pattern.substring(0, last + i); + + if (search.length > 0) { + last = 0; + while ((m = searchPlaceholder.exec(search))) { + p = matchDetails(m, true); + param = addParameter(p.id, p.type, p.cfg, "search"); + last = placeholder.lastIndex; + // check if ?& + } + } + } else { + this.sourcePath = pattern; + this.sourceSearch = ''; + } + + compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$'; + segments.push(segment); + + this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined); + this.prefix = segments[0]; + this.$$paramNames = paramNames; +} + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#concat + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns a new matcher for a pattern constructed by appending the path part and adding the + * search parameters of the specified pattern to this pattern. The current pattern is not + * modified. This can be understood as creating a pattern for URLs that are relative to (or + * suffixes of) the current pattern. + * + * @example + * The following two matchers are equivalent: + *
      + * new UrlMatcher('/user/{id}?q').concat('/details?date');
      + * new UrlMatcher('/user/{id}/details?q&date');
      + * 
      + * + * @param {string} pattern The pattern to append. + * @param {Object} config An object hash of the configuration for the matcher. + * @returns {UrlMatcher} A matcher for the concatenated pattern. + */ +UrlMatcher.prototype.concat = function (pattern, config) { + // Because order of search parameters is irrelevant, we can add our own search + // parameters to the end of the new pattern. Parse the new pattern by itself + // and then join the bits together, but it's much easier to do this on a string level. + var defaultConfig = { + caseInsensitive: $$UMFP.caseInsensitive(), + strict: $$UMFP.strictMode(), + squash: $$UMFP.defaultSquashPolicy() + }; + return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this); +}; + +UrlMatcher.prototype.toString = function () { + return this.source; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#exec + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Tests the specified path against this matcher, and returns an object containing the captured + * parameter values, or null if the path does not match. The returned object contains the values + * of any search parameters that are mentioned in the pattern, but their value may be null if + * they are not present in `searchParams`. This means that search parameters are always treated + * as optional. + * + * @example + *
      + * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {
      + *   x: '1', q: 'hello'
      + * });
      + * // returns { id: 'bob', q: 'hello', r: null }
      + * 
      + * + * @param {string} path The URL path to match, e.g. `$location.path()`. + * @param {Object} searchParams URL search parameters, e.g. `$location.search()`. + * @returns {Object} The captured parameter values. + */ +UrlMatcher.prototype.exec = function (path, searchParams) { + var m = this.regexp.exec(path); + if (!m) return null; + searchParams = searchParams || {}; + + var paramNames = this.parameters(), nTotal = paramNames.length, + nPath = this.segments.length - 1, + values = {}, i, j, cfg, paramName; + + if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'"); + + function decodePathArray(string) { + function reverseString(str) { return str.split("").reverse().join(""); } + function unquoteDashes(str) { return str.replace(/\\-/, "-"); } + + var split = reverseString(string).split(/-(?!\\)/); + var allReversed = map(split, reverseString); + return map(allReversed, unquoteDashes).reverse(); + } + + for (i = 0; i < nPath; i++) { + paramName = paramNames[i]; + var param = this.params[paramName]; + var paramVal = m[i+1]; + // if the param value matches a pre-replace pair, replace the value before decoding. + for (j = 0; j < param.replace; j++) { + if (param.replace[j].from === paramVal) paramVal = param.replace[j].to; + } + if (paramVal && param.array === true) paramVal = decodePathArray(paramVal); + values[paramName] = param.value(paramVal); + } + for (/**/; i < nTotal; i++) { + paramName = paramNames[i]; + values[paramName] = this.params[paramName].value(searchParams[paramName]); + } + + return values; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#parameters + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns the names of all path and search parameters of this pattern in an unspecified order. + * + * @returns {Array.} An array of parameter names. Must be treated as read-only. If the + * pattern has no parameters, an empty array is returned. + */ +UrlMatcher.prototype.parameters = function (param) { + if (!isDefined(param)) return this.$$paramNames; + return this.params[param] || null; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#validate + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Checks an object hash of parameters to validate their correctness according to the parameter + * types of this `UrlMatcher`. + * + * @param {Object} params The object hash of parameters to validate. + * @returns {boolean} Returns `true` if `params` validates, otherwise `false`. + */ +UrlMatcher.prototype.validates = function (params) { + return this.params.$$validates(params); +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#format + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Creates a URL that matches this pattern by substituting the specified values + * for the path and search parameters. Null values for path parameters are + * treated as empty strings. + * + * @example + *
      + * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
      + * // returns '/user/bob?q=yes'
      + * 
      + * + * @param {Object} values the values to substitute for the parameters in this pattern. + * @returns {string} the formatted URL (path and optionally search part). + */ +UrlMatcher.prototype.format = function (values) { + values = values || {}; + var segments = this.segments, params = this.parameters(), paramset = this.params; + if (!this.validates(values)) return null; + + var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0]; + + function encodeDashes(str) { // Replace dashes with encoded "\-" + return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); }); + } + + for (i = 0; i < nTotal; i++) { + var isPathParam = i < nPath; + var name = params[i], param = paramset[name], value = param.value(values[name]); + var isDefaultValue = param.isOptional && param.type.equals(param.value(), value); + var squash = isDefaultValue ? param.squash : false; + var encoded = param.type.encode(value); + + if (isPathParam) { + var nextSegment = segments[i + 1]; + if (squash === false) { + if (encoded != null) { + if (isArray(encoded)) { + result += map(encoded, encodeDashes).join("-"); + } else { + result += encodeURIComponent(encoded); + } + } + result += nextSegment; + } else if (squash === true) { + var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/; + result += nextSegment.match(capture)[1]; + } else if (isString(squash)) { + result += squash + nextSegment; + } + } else { + if (encoded == null || (isDefaultValue && squash !== false)) continue; + if (!isArray(encoded)) encoded = [ encoded ]; + encoded = map(encoded, encodeURIComponent).join('&' + name + '='); + result += (search ? '&' : '?') + (name + '=' + encoded); + search = true; + } + } + + return result; +}; + +/** + * @ngdoc object + * @name ui.router.util.type:Type + * + * @description + * Implements an interface to define custom parameter types that can be decoded from and encoded to + * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`} + * objects when matching or formatting URLs, or comparing or validating parameter values. + * + * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more + * information on registering custom types. + * + * @param {Object} config A configuration object which contains the custom type definition. The object's + * properties will override the default methods and/or pattern in `Type`'s public interface. + * @example + *
      + * {
      + *   decode: function(val) { return parseInt(val, 10); },
      + *   encode: function(val) { return val && val.toString(); },
      + *   equals: function(a, b) { return this.is(a) && a === b; },
      + *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },
      + *   pattern: /\d+/
      + * }
      + * 
      + * + * @property {RegExp} pattern The regular expression pattern used to match values of this type when + * coming from a substring of a URL. + * + * @returns {Object} Returns a new `Type` object. + */ +function Type(config) { + extend(this, config); +} + +/** + * @ngdoc function + * @name ui.router.util.type:Type#is + * @methodOf ui.router.util.type:Type + * + * @description + * Detects whether a value is of a particular type. Accepts a native (decoded) value + * and determines whether it matches the current `Type` object. + * + * @param {*} val The value to check. + * @param {string} key Optional. If the type check is happening in the context of a specific + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the + * parameter in which `val` is stored. Can be used for meta-programming of `Type` objects. + * @returns {Boolean} Returns `true` if the value matches the type, otherwise `false`. + */ +Type.prototype.is = function(val, key) { + return true; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#encode + * @methodOf ui.router.util.type:Type + * + * @description + * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the + * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it + * only needs to be a representation of `val` that has been coerced to a string. + * + * @param {*} val The value to encode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {string} Returns a string representation of `val` that can be encoded in a URL. + */ +Type.prototype.encode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#decode + * @methodOf ui.router.util.type:Type + * + * @description + * Converts a parameter value (from URL string or transition param) to a custom/native value. + * + * @param {string} val The URL parameter value to decode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {*} Returns a custom representation of the URL parameter value. + */ +Type.prototype.decode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#equals + * @methodOf ui.router.util.type:Type + * + * @description + * Determines whether two decoded values are equivalent. + * + * @param {*} a A value to compare against. + * @param {*} b A value to compare against. + * @returns {Boolean} Returns `true` if the values are equivalent/equal, otherwise `false`. + */ +Type.prototype.equals = function(a, b) { + return a == b; +}; + +Type.prototype.$subPattern = function() { + var sub = this.pattern.toString(); + return sub.substr(1, sub.length - 2); +}; + +Type.prototype.pattern = /.*/; + +Type.prototype.toString = function() { return "{Type:" + this.name + "}"; }; + +/* + * Wraps an existing custom Type as an array of Type, depending on 'mode'. + * e.g.: + * - urlmatcher pattern "/path?{queryParam[]:int}" + * - url: "/path?queryParam=1&queryParam=2 + * - $stateParams.queryParam will be [1, 2] + * if `mode` is "auto", then + * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1 + * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2] + */ +Type.prototype.$asArray = function(mode, isSearch) { + if (!mode) return this; + if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only"); + return new ArrayType(this, mode); + + function ArrayType(type, mode) { + function bindTo(type, callbackName) { + return function() { + return type[callbackName].apply(type, arguments); + }; + } + + // Wrap non-array value as array + function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); } + // Unwrap array value for "auto" mode. Return undefined for empty array. + function arrayUnwrap(val) { + switch(val.length) { + case 0: return undefined; + case 1: return mode === "auto" ? val[0] : val; + default: return val; + } + } + function falsey(val) { return !val; } + + // Wraps type (.is/.encode/.decode) functions to operate on each value of an array + function arrayHandler(callback, allTruthyMode) { + return function handleArray(val) { + val = arrayWrap(val); + var result = map(val, callback); + if (allTruthyMode === true) + return filter(result, falsey).length === 0; + return arrayUnwrap(result); + }; + } + + // Wraps type (.equals) functions to operate on each value of an array + function arrayEqualsHandler(callback) { + return function handleArray(val1, val2) { + var left = arrayWrap(val1), right = arrayWrap(val2); + if (left.length !== right.length) return false; + for (var i = 0; i < left.length; i++) { + if (!callback(left[i], right[i])) return false; + } + return true; + }; + } + + this.encode = arrayHandler(bindTo(type, 'encode')); + this.decode = arrayHandler(bindTo(type, 'decode')); + this.is = arrayHandler(bindTo(type, 'is'), true); + this.equals = arrayEqualsHandler(bindTo(type, 'equals')); + this.pattern = type.pattern; + this.$arrayMode = mode; + } +}; + + + +/** + * @ngdoc object + * @name ui.router.util.$urlMatcherFactory + * + * @description + * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory + * is also available to providers under the name `$urlMatcherFactoryProvider`. + */ +function $UrlMatcherFactory() { + $$UMFP = this; + + var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false; + + function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; } + function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; } +// TODO: in 1.0, make string .is() return false if value is undefined by default. +// function regexpMatches(val) { /*jshint validthis:true */ return isDefined(val) && this.pattern.test(val); } + function regexpMatches(val) { /*jshint validthis:true */ return this.pattern.test(val); } + + var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = { + string: { + encode: valToString, + decode: valFromString, + is: regexpMatches, + pattern: /[^/]*/ + }, + int: { + encode: valToString, + decode: function(val) { return parseInt(val, 10); }, + is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; }, + pattern: /\d+/ + }, + bool: { + encode: function(val) { return val ? 1 : 0; }, + decode: function(val) { return parseInt(val, 10) !== 0; }, + is: function(val) { return val === true || val === false; }, + pattern: /0|1/ + }, + date: { + encode: function (val) { + if (!this.is(val)) + return undefined; + return [ val.getFullYear(), + ('0' + (val.getMonth() + 1)).slice(-2), + ('0' + val.getDate()).slice(-2) + ].join("-"); + }, + decode: function (val) { + if (this.is(val)) return val; + var match = this.capture.exec(val); + return match ? new Date(match[1], match[2] - 1, match[3]) : undefined; + }, + is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); }, + equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); }, + pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/, + capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/ + }, + json: { + encode: angular.toJson, + decode: angular.fromJson, + is: angular.isObject, + equals: angular.equals, + pattern: /[^/]*/ + }, + any: { // does not encode/decode + encode: angular.identity, + decode: angular.identity, + is: angular.identity, + equals: angular.equals, + pattern: /.*/ + } + }; + + function getDefaultConfig() { + return { + strict: isStrictMode, + caseInsensitive: isCaseInsensitive + }; + } + + function isInjectable(value) { + return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1]))); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + $UrlMatcherFactory.$$getDefaultValue = function(config) { + if (!isInjectable(config.value)) return config.value; + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + return injector.invoke(config.value); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#caseInsensitive + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URL matching should be case sensitive (the default behavior), or not. + * + * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`; + * @returns {boolean} the current value of caseInsensitive + */ + this.caseInsensitive = function(value) { + if (isDefined(value)) + isCaseInsensitive = value; + return isCaseInsensitive; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#strictMode + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URLs should match trailing slashes, or not (the default behavior). + * + * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`. + * @returns {boolean} the current value of strictMode + */ + this.strictMode = function(value) { + if (isDefined(value)) + isStrictMode = value; + return isStrictMode; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Sets the default behavior when generating or matching URLs with default parameter values. + * + * @param {string} value A string that defines the default parameter URL squashing behavior. + * `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL + * `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the + * parameter is surrounded by slashes, squash (remove) one slash from the URL + * any other string, e.g. "~": When generating an href with a default parameter value, squash (remove) + * the parameter value from the URL and replace it with this string. + */ + this.defaultSquashPolicy = function(value) { + if (!isDefined(value)) return defaultSquashPolicy; + if (value !== true && value !== false && !isString(value)) + throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string"); + defaultSquashPolicy = value; + return value; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#compile + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern. + * + * @param {string} pattern The URL pattern. + * @param {Object} config The config object hash. + * @returns {UrlMatcher} The UrlMatcher. + */ + this.compile = function (pattern, config) { + return new UrlMatcher(pattern, extend(getDefaultConfig(), config)); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#isMatcher + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Returns true if the specified object is a `UrlMatcher`, or false otherwise. + * + * @param {Object} object The object to perform the type check against. + * @returns {Boolean} Returns `true` if the object matches the `UrlMatcher` interface, by + * implementing all the same methods. + */ + this.isMatcher = function (o) { + if (!isObject(o)) return false; + var result = true; + + forEach(UrlMatcher.prototype, function(val, name) { + if (isFunction(val)) { + result = result && (isDefined(o[name]) && isFunction(o[name])); + } + }); + return result; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#type + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to + * generate URLs with typed parameters. + * + * @param {string} name The type name. + * @param {Object|Function} definition The type definition. See + * {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * @param {Object|Function} definitionFn (optional) A function that is injected before the app + * runtime starts. The result of this function is merged into the existing `definition`. + * See {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * + * @returns {Object} Returns `$urlMatcherFactoryProvider`. + * + * @example + * This is a simple example of a custom type that encodes and decodes items from an + * array, using the array index as the URL-encoded value: + * + *
      +   * var list = ['John', 'Paul', 'George', 'Ringo'];
      +   *
      +   * $urlMatcherFactoryProvider.type('listItem', {
      +   *   encode: function(item) {
      +   *     // Represent the list item in the URL using its corresponding index
      +   *     return list.indexOf(item);
      +   *   },
      +   *   decode: function(item) {
      +   *     // Look up the list item by index
      +   *     return list[parseInt(item, 10)];
      +   *   },
      +   *   is: function(item) {
      +   *     // Ensure the item is valid by checking to see that it appears
      +   *     // in the list
      +   *     return list.indexOf(item) > -1;
      +   *   }
      +   * });
      +   *
      +   * $stateProvider.state('list', {
      +   *   url: "/list/{item:listItem}",
      +   *   controller: function($scope, $stateParams) {
      +   *     console.log($stateParams.item);
      +   *   }
      +   * });
      +   *
      +   * // ...
      +   *
      +   * // Changes URL to '/list/3', logs "Ringo" to the console
      +   * $state.go('list', { item: "Ringo" });
      +   * 
      + * + * This is a more complex example of a type that relies on dependency injection to + * interact with services, and uses the parameter name from the URL to infer how to + * handle encoding and decoding parameter values: + * + *
      +   * // Defines a custom type that gets a value from a service,
      +   * // where each service gets different types of values from
      +   * // a backend API:
      +   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {
      +   *
      +   *   // Matches up services to URL parameter names
      +   *   var services = {
      +   *     user: Users,
      +   *     post: Posts
      +   *   };
      +   *
      +   *   return {
      +   *     encode: function(object) {
      +   *       // Represent the object in the URL using its unique ID
      +   *       return object.id;
      +   *     },
      +   *     decode: function(value, key) {
      +   *       // Look up the object by ID, using the parameter
      +   *       // name (key) to call the correct service
      +   *       return services[key].findById(value);
      +   *     },
      +   *     is: function(object, key) {
      +   *       // Check that object is a valid dbObject
      +   *       return angular.isObject(object) && object.id && services[key];
      +   *     }
      +   *     equals: function(a, b) {
      +   *       // Check the equality of decoded objects by comparing
      +   *       // their unique IDs
      +   *       return a.id === b.id;
      +   *     }
      +   *   };
      +   * });
      +   *
      +   * // In a config() block, you can then attach URLs with
      +   * // type-annotated parameters:
      +   * $stateProvider.state('users', {
      +   *   url: "/users",
      +   *   // ...
      +   * }).state('users.item', {
      +   *   url: "/{user:dbObject}",
      +   *   controller: function($scope, $stateParams) {
      +   *     // $stateParams.user will now be an object returned from
      +   *     // the Users service
      +   *   },
      +   *   // ...
      +   * });
      +   * 
      + */ + this.type = function (name, definition, definitionFn) { + if (!isDefined(definition)) return $types[name]; + if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined."); + + $types[name] = new Type(extend({ name: name }, definition)); + if (definitionFn) { + typeQueue.push({ name: name, def: definitionFn }); + if (!enqueue) flushTypeQueue(); + } + return this; + }; + + // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s + function flushTypeQueue() { + while(typeQueue.length) { + var type = typeQueue.shift(); + if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime."); + angular.extend($types[type.name], injector.invoke(type.def)); + } + } + + // Register default types. Store them in the prototype of $types. + forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); }); + $types = inherit($types, {}); + + /* No need to document $get, since it returns this */ + this.$get = ['$injector', function ($injector) { + injector = $injector; + enqueue = false; + flushTypeQueue(); + + forEach(defaultTypes, function(type, name) { + if (!$types[name]) $types[name] = new Type(type); + }); + return this; + }]; + + this.Param = function Param(id, type, config, location) { + var self = this; + config = unwrapShorthand(config); + type = getType(config, type, location); + var arrayMode = getArrayMode(); + type = arrayMode ? type.$asArray(arrayMode, location === "search") : type; + if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined) + config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to "" + var isOptional = config.value !== undefined; + var squash = getSquashPolicy(config, isOptional); + var replace = getReplace(config, arrayMode, isOptional, squash); + + function unwrapShorthand(config) { + var keys = isObject(config) ? objectKeys(config) : []; + var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 && + indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1; + if (isShorthand) config = { value: config }; + config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; }; + return config; + } + + function getType(config, urlType, location) { + if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations."); + if (urlType) return urlType; + if (!config.type) return (location === "config" ? $types.any : $types.string); + return config.type instanceof Type ? config.type : new Type(config.type); + } + + // array config: param name (param[]) overrides default settings. explicit config overrides param name. + function getArrayMode() { + var arrayDefaults = { array: (location === "search" ? "auto" : false) }; + var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {}; + return extend(arrayDefaults, arrayParamNomenclature, config).array; + } + + /** + * returns false, true, or the squash value to indicate the "default parameter url squash policy". + */ + function getSquashPolicy(config, isOptional) { + var squash = config.squash; + if (!isOptional || squash === false) return false; + if (!isDefined(squash) || squash == null) return defaultSquashPolicy; + if (squash === true || isString(squash)) return squash; + throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string"); + } + + function getReplace(config, arrayMode, isOptional, squash) { + var replace, configuredKeys, defaultPolicy = [ + { from: "", to: (isOptional || arrayMode ? undefined : "") }, + { from: null, to: (isOptional || arrayMode ? undefined : "") } + ]; + replace = isArray(config.replace) ? config.replace : []; + if (isString(squash)) + replace.push({ from: squash, to: undefined }); + configuredKeys = map(replace, function(item) { return item.from; } ); + return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + function $$getDefaultValue() { + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + return injector.invoke(config.$$fn); + } + + /** + * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the + * default value, which may be the result of an injectable function. + */ + function $value(value) { + function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; } + function $replace(value) { + var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; }); + return replacement.length ? replacement[0] : value; + } + value = $replace(value); + return isDefined(value) ? self.type.decode(value) : $$getDefaultValue(); + } + + function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; } + + extend(this, { + id: id, + type: type, + location: location, + array: arrayMode, + squash: squash, + replace: replace, + isOptional: isOptional, + value: $value, + dynamic: undefined, + config: config, + toString: toString + }); + }; + + function ParamSet(params) { + extend(this, params || {}); + } + + ParamSet.prototype = { + $$new: function() { + return inherit(this, extend(new ParamSet(), { $$parent: this})); + }, + $$keys: function () { + var keys = [], chain = [], parent = this, + ignore = objectKeys(ParamSet.prototype); + while (parent) { chain.push(parent); parent = parent.$$parent; } + chain.reverse(); + forEach(chain, function(paramset) { + forEach(objectKeys(paramset), function(key) { + if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key); + }); + }); + return keys; + }, + $$values: function(paramValues) { + var values = {}, self = this; + forEach(self.$$keys(), function(key) { + values[key] = self[key].value(paramValues && paramValues[key]); + }); + return values; + }, + $$equals: function(paramValues1, paramValues2) { + var equal = true, self = this; + forEach(self.$$keys(), function(key) { + var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key]; + if (!self[key].type.equals(left, right)) equal = false; + }); + return equal; + }, + $$validates: function $$validate(paramValues) { + var result = true, isOptional, val, param, self = this; + + forEach(this.$$keys(), function(key) { + param = self[key]; + val = paramValues[key]; + isOptional = !val && param.isOptional; + result = result && (isOptional || !!param.type.is(val)); + }); + return result; + }, + $$parent: undefined + }; + + this.ParamSet = ParamSet; +} + +// Register as a provider so it's available to other providers +angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory); +angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]); + +/** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider + * + * @requires ui.router.util.$urlMatcherFactoryProvider + * @requires $locationProvider + * + * @description + * `$urlRouterProvider` has the responsibility of watching `$location`. + * When `$location` changes it runs through a list of rules one by one until a + * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify + * a url in a state configuration. All urls are compiled into a UrlMatcher object. + * + * There are several methods on `$urlRouterProvider` that make it useful to use directly + * in your module config. + */ +$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider']; +function $UrlRouterProvider( $locationProvider, $urlMatcherFactory) { + var rules = [], otherwise = null, interceptDeferred = false, listener; + + // Returns a string that is a prefix of all strings matching the RegExp + function regExpPrefix(re) { + var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source); + return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : ''; + } + + // Interpolates matched values into a String.replace()-style pattern + function interpolate(pattern, match) { + return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) { + return match[what === '$' ? 0 : Number(what)]; + }); + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#rule + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines rules that are used by `$urlRouterProvider` to find matches for + * specific URLs. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *   // Here's an example of how you might allow case insensitive urls
      +   *   $urlRouterProvider.rule(function ($injector, $location) {
      +   *     var path = $location.path(),
      +   *         normalized = path.toLowerCase();
      +   *
      +   *     if (path !== normalized) {
      +   *       return normalized;
      +   *     }
      +   *   });
      +   * });
      +   * 
      + * + * @param {object} rule Handler function that takes `$injector` and `$location` + * services as arguments. You can use them to return a valid path as a string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.rule = function (rule) { + if (!isFunction(rule)) throw new Error("'rule' must be a function"); + rules.push(rule); + return this; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider#otherwise + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines a path that is used when an invalid route is requested. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *   // if the path doesn't match any of the urls you configured
      +   *   // otherwise will take care of routing the user to the
      +   *   // specified url
      +   *   $urlRouterProvider.otherwise('/index');
      +   *
      +   *   // Example of using function rule as param
      +   *   $urlRouterProvider.otherwise(function ($injector, $location) {
      +   *     return '/a/valid/url';
      +   *   });
      +   * });
      +   * 
      + * + * @param {string|object} rule The url path you want to redirect to or a function + * rule that returns the url path. The function version is passed two params: + * `$injector` and `$location` services, and must return a url string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.otherwise = function (rule) { + if (isString(rule)) { + var redirect = rule; + rule = function () { return redirect; }; + } + else if (!isFunction(rule)) throw new Error("'rule' must be a function"); + otherwise = rule; + return this; + }; + + + function handleIfMatch($injector, handler, match) { + if (!match) return false; + var result = $injector.invoke(handler, handler, { $match: match }); + return isDefined(result) ? result : true; + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#when + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Registers a handler for a given url matching. if handle is a string, it is + * treated as a redirect, and is interpolated according to the syntax of match + * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise). + * + * If the handler is a function, it is injectable. It gets invoked if `$location` + * matches. You have the option of inject the match object as `$match`. + * + * The handler can return + * + * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter` + * will continue trying to find another one that matches. + * - **string** which is treated as a redirect and passed to `$location.url()` + * - **void** or any **truthy** value tells `$urlRouter` that the url was handled. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {
      +   *     if ($state.$current.navigable !== state ||
      +   *         !equalForKeys($match, $stateParams) {
      +   *      $state.transitionTo(state, $match, false);
      +   *     }
      +   *   });
      +   * });
      +   * 
      + * + * @param {string|object} what The incoming path that you want to redirect. + * @param {string|object} handler The path you want to redirect your user to. + */ + this.when = function (what, handler) { + var redirect, handlerIsString = isString(handler); + if (isString(what)) what = $urlMatcherFactory.compile(what); + + if (!handlerIsString && !isFunction(handler) && !isArray(handler)) + throw new Error("invalid 'handler' in when()"); + + var strategies = { + matcher: function (what, handler) { + if (handlerIsString) { + redirect = $urlMatcherFactory.compile(handler); + handler = ['$match', function ($match) { return redirect.format($match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path(), $location.search())); + }, { + prefix: isString(what.prefix) ? what.prefix : '' + }); + }, + regex: function (what, handler) { + if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky"); + + if (handlerIsString) { + redirect = handler; + handler = ['$match', function ($match) { return interpolate(redirect, $match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path())); + }, { + prefix: regExpPrefix(what) + }); + } + }; + + var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp }; + + for (var n in check) { + if (check[n]) return this.rule(strategies[n](what, handler)); + } + + throw new Error("invalid 'what' in when()"); + }; + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#deferIntercept + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Disables (or enables) deferring location change interception. + * + * If you wish to customize the behavior of syncing the URL (for example, if you wish to + * defer a transition but maintain the current URL), call this method at configuration time. + * Then, at run time, call `$urlRouter.listen()` after you have configured your own + * `$locationChangeSuccess` event handler. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *
      +   *   // Prevent $urlRouter from automatically intercepting URL changes;
      +   *   // this allows you to configure custom behavior in between
      +   *   // location changes and route synchronization:
      +   *   $urlRouterProvider.deferIntercept();
      +   *
      +   * }).run(function ($rootScope, $urlRouter, UserService) {
      +   *
      +   *   $rootScope.$on('$locationChangeSuccess', function(e) {
      +   *     // UserService is an example service for managing user state
      +   *     if (UserService.isLoggedIn()) return;
      +   *
      +   *     // Prevent $urlRouter's default handler from firing
      +   *     e.preventDefault();
      +   *
      +   *     UserService.handleLogin().then(function() {
      +   *       // Once the user has logged in, sync the current URL
      +   *       // to the router:
      +   *       $urlRouter.sync();
      +   *     });
      +   *   });
      +   *
      +   *   // Configures $urlRouter's listener *after* your custom listener
      +   *   $urlRouter.listen();
      +   * });
      +   * 
      + * + * @param {boolean} defer Indicates whether to defer location change interception. Passing + no parameter is equivalent to `true`. + */ + this.deferIntercept = function (defer) { + if (defer === undefined) defer = true; + interceptDeferred = defer; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouter + * + * @requires $location + * @requires $rootScope + * @requires $injector + * @requires $browser + * + * @description + * + */ + this.$get = $get; + $get.$inject = ['$location', '$rootScope', '$injector', '$browser']; + function $get( $location, $rootScope, $injector, $browser) { + + var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl; + + function appendBasePath(url, isHtml5, absolute) { + if (baseHref === '/') return url; + if (isHtml5) return baseHref.slice(0, -1) + url; + if (absolute) return baseHref.slice(1) + url; + return url; + } + + // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree + function update(evt) { + if (evt && evt.defaultPrevented) return; + var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl; + lastPushedUrl = undefined; + if (ignoreUpdate) return true; + + function check(rule) { + var handled = rule($injector, $location); + + if (!handled) return false; + if (isString(handled)) $location.replace().url(handled); + return true; + } + var n = rules.length, i; + + for (i = 0; i < n; i++) { + if (check(rules[i])) return; + } + // always check otherwise last to allow dynamic updates to the set of rules + if (otherwise) check(otherwise); + } + + function listen() { + listener = listener || $rootScope.$on('$locationChangeSuccess', update); + return listener; + } + + if (!interceptDeferred) listen(); + + return { + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#sync + * @methodOf ui.router.router.$urlRouter + * + * @description + * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`. + * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, + * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed + * with the transition by calling `$urlRouter.sync()`. + * + * @example + *
      +       * angular.module('app', ['ui.router'])
      +       *   .run(function($rootScope, $urlRouter) {
      +       *     $rootScope.$on('$locationChangeSuccess', function(evt) {
      +       *       // Halt state change from even starting
      +       *       evt.preventDefault();
      +       *       // Perform custom logic
      +       *       var meetsRequirement = ...
      +       *       // Continue with the update and state transition if logic allows
      +       *       if (meetsRequirement) $urlRouter.sync();
      +       *     });
      +       * });
      +       * 
      + */ + sync: function() { + update(); + }, + + listen: function() { + return listen(); + }, + + update: function(read) { + if (read) { + location = $location.url(); + return; + } + if ($location.url() === location) return; + + $location.url(location); + $location.replace(); + }, + + push: function(urlMatcher, params, options) { + $location.url(urlMatcher.format(params || {})); + lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined; + if (options && options.replace) $location.replace(); + }, + + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#href + * @methodOf ui.router.router.$urlRouter + * + * @description + * A URL generation method that returns the compiled URL for a given + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters. + * + * @example + *
      +       * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), {
      +       *   person: "bob"
      +       * });
      +       * // $bob == "/about/bob";
      +       * 
      + * + * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate. + * @param {object=} params An object of parameter values to fill the matcher's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher` + */ + href: function(urlMatcher, params, options) { + if (!urlMatcher.validates(params)) return null; + + var isHtml5 = $locationProvider.html5Mode(); + if (angular.isObject(isHtml5)) { + isHtml5 = isHtml5.enabled; + } + + var url = urlMatcher.format(params); + options = options || {}; + + if (!isHtml5 && url !== null) { + url = "#" + $locationProvider.hashPrefix() + url; + } + url = appendBasePath(url, isHtml5, options.absolute); + + if (!options.absolute || !url) { + return url; + } + + var slash = (!isHtml5 && url ? '/' : ''), port = $location.port(); + port = (port === 80 || port === 443 ? '' : ':' + port); + + return [$location.protocol(), '://', $location.host(), port, slash, url].join(''); + } + }; + } +} + +angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider); + +/** + * @ngdoc object + * @name ui.router.state.$stateProvider + * + * @requires ui.router.router.$urlRouterProvider + * @requires ui.router.util.$urlMatcherFactoryProvider + * + * @description + * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely + * on state. + * + * A state corresponds to a "place" in the application in terms of the overall UI and + * navigation. A state describes (via the controller / template / view properties) what + * the UI looks like and does at that place. + * + * States often have things in common, and the primary way of factoring out these + * commonalities in this model is via the state hierarchy, i.e. parent/child states aka + * nested states. + * + * The `$stateProvider` provides interfaces to declare these states for your app. + */ +$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider']; +function $StateProvider( $urlRouterProvider, $urlMatcherFactory) { + + var root, states = {}, $state, queue = {}, abstractKey = 'abstract'; + + // Builds state properties from definition passed to registerState() + var stateBuilder = { + + // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined. + // state.children = []; + // if (parent) parent.children.push(state); + parent: function(state) { + if (isDefined(state.parent) && state.parent) return findState(state.parent); + // regex matches any valid composite state name + // would match "contact.list" but not "contacts" + var compositeName = /^(.+)\.[^.]+$/.exec(state.name); + return compositeName ? findState(compositeName[1]) : root; + }, + + // inherit 'data' from parent and override by own values (if any) + data: function(state) { + if (state.parent && state.parent.data) { + state.data = state.self.data = extend({}, state.parent.data, state.data); + } + return state.data; + }, + + // Build a URLMatcher if necessary, either via a relative or absolute URL + url: function(state) { + var url = state.url, config = { params: state.params || {} }; + + if (isString(url)) { + if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config); + return (state.parent.navigable || root).url.concat(url, config); + } + + if (!url || $urlMatcherFactory.isMatcher(url)) return url; + throw new Error("Invalid url '" + url + "' in state '" + state + "'"); + }, + + // Keep track of the closest ancestor state that has a URL (i.e. is navigable) + navigable: function(state) { + return state.url ? state : (state.parent ? state.parent.navigable : null); + }, + + // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params + ownParams: function(state) { + var params = state.url && state.url.params || new $$UMFP.ParamSet(); + forEach(state.params || {}, function(config, id) { + if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, "config"); + }); + return params; + }, + + // Derive parameters for this state and ensure they're a super-set of parent's parameters + params: function(state) { + return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet(); + }, + + // If there is no explicit multi-view configuration, make one up so we don't have + // to handle both cases in the view directive later. Note that having an explicit + // 'views' property will mean the default unnamed view properties are ignored. This + // is also a good time to resolve view names to absolute names, so everything is a + // straight lookup at link time. + views: function(state) { + var views = {}; + + forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) { + if (name.indexOf('@') < 0) name += '@' + state.parent.name; + views[name] = view; + }); + return views; + }, + + // Keep a full path from the root down to this state as this is needed for state activation. + path: function(state) { + return state.parent ? state.parent.path.concat(state) : []; // exclude root from path + }, + + // Speed up $state.contains() as it's used a lot + includes: function(state) { + var includes = state.parent ? extend({}, state.parent.includes) : {}; + includes[state.name] = true; + return includes; + }, + + $delegates: {} + }; + + function isRelative(stateName) { + return stateName.indexOf(".") === 0 || stateName.indexOf("^") === 0; + } + + function findState(stateOrName, base) { + if (!stateOrName) return undefined; + + var isStr = isString(stateOrName), + name = isStr ? stateOrName : stateOrName.name, + path = isRelative(name); + + if (path) { + if (!base) throw new Error("No reference point given for path '" + name + "'"); + base = findState(base); + + var rel = name.split("."), i = 0, pathLength = rel.length, current = base; + + for (; i < pathLength; i++) { + if (rel[i] === "" && i === 0) { + current = base; + continue; + } + if (rel[i] === "^") { + if (!current.parent) throw new Error("Path '" + name + "' not valid for state '" + base.name + "'"); + current = current.parent; + continue; + } + break; + } + rel = rel.slice(i).join("."); + name = current.name + (current.name && rel ? "." : "") + rel; + } + var state = states[name]; + + if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) { + return state; + } + return undefined; + } + + function queueState(parentName, state) { + if (!queue[parentName]) { + queue[parentName] = []; + } + queue[parentName].push(state); + } + + function flushQueuedChildren(parentName) { + var queued = queue[parentName] || []; + while(queued.length) { + registerState(queued.shift()); + } + } + + function registerState(state) { + // Wrap a new object around the state so we can store our private details easily. + state = inherit(state, { + self: state, + resolve: state.resolve || {}, + toString: function() { return this.name; } + }); + + var name = state.name; + if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name"); + if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined"); + + // Get parent name + var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.')) + : (isString(state.parent)) ? state.parent + : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name + : ''; + + // If parent is not registered yet, add state to queue and register later + if (parentName && !states[parentName]) { + return queueState(parentName, state.self); + } + + for (var key in stateBuilder) { + if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]); + } + states[name] = state; + + // Register the state in the global state list and with $urlRouter if necessary. + if (!state[abstractKey] && state.url) { + $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) { + if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) { + $state.transitionTo(state, $match, { inherit: true, location: false }); + } + }]); + } + + // Register any queued children + flushQueuedChildren(name); + + return state; + } + + // Checks text to see if it looks like a glob. + function isGlob (text) { + return text.indexOf('*') > -1; + } + + // Returns true if glob matches current $state name. + function doesStateMatchGlob (glob) { + var globSegments = glob.split('.'), + segments = $state.$current.name.split('.'); + + //match greedy starts + if (globSegments[0] === '**') { + segments = segments.slice(indexOf(segments, globSegments[1])); + segments.unshift('**'); + } + //match greedy ends + if (globSegments[globSegments.length - 1] === '**') { + segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE); + segments.push('**'); + } + + if (globSegments.length != segments.length) { + return false; + } + + //match single stars + for (var i = 0, l = globSegments.length; i < l; i++) { + if (globSegments[i] === '*') { + segments[i] = '*'; + } + } + + return segments.join('') === globSegments.join(''); + } + + + // Implicit root state that is always active + root = registerState({ + name: '', + url: '^', + views: null, + 'abstract': true + }); + root.navigable = null; + + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#decorator + * @methodOf ui.router.state.$stateProvider + * + * @description + * Allows you to extend (carefully) or override (at your own peril) the + * `stateBuilder` object used internally by `$stateProvider`. This can be used + * to add custom functionality to ui-router, for example inferring templateUrl + * based on the state name. + * + * When passing only a name, it returns the current (original or decorated) builder + * function that matches `name`. + * + * The builder functions that can be decorated are listed below. Though not all + * necessarily have a good use case for decoration, that is up to you to decide. + * + * In addition, users can attach custom decorators, which will generate new + * properties within the state's internal definition. There is currently no clear + * use-case for this beyond accessing internal states (i.e. $state.$current), + * however, expect this to become increasingly relevant as we introduce additional + * meta-programming features. + * + * **Warning**: Decorators should not be interdependent because the order of + * execution of the builder functions in non-deterministic. Builder functions + * should only be dependent on the state definition object and super function. + * + * + * Existing builder functions and current return values: + * + * - **parent** `{object}` - returns the parent state object. + * - **data** `{object}` - returns state data, including any inherited data that is not + * overridden by own values (if any). + * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher} + * or `null`. + * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is + * navigable). + * - **params** `{object}` - returns an array of state params that are ensured to + * be a super-set of parent's params. + * - **views** `{object}` - returns a views object where each key is an absolute view + * name (i.e. "viewName@stateName") and each value is the config object + * (template, controller) for the view. Even when you don't use the views object + * explicitly on a state config, one is still created for you internally. + * So by decorating this builder function you have access to decorating template + * and controller properties. + * - **ownParams** `{object}` - returns an array of params that belong to the state, + * not including any params defined by ancestor states. + * - **path** `{string}` - returns the full path from the root down to this state. + * Needed for state activation. + * - **includes** `{object}` - returns an object that includes every state that + * would pass a `$state.includes()` test. + * + * @example + *
      +   * // Override the internal 'views' builder with a function that takes the state
      +   * // definition, and a reference to the internal function being overridden:
      +   * $stateProvider.decorator('views', function (state, parent) {
      +   *   var result = {},
      +   *       views = parent(state);
      +   *
      +   *   angular.forEach(views, function (config, name) {
      +   *     var autoName = (state.name + '.' + name).replace('.', '/');
      +   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
      +   *     result[name] = config;
      +   *   });
      +   *   return result;
      +   * });
      +   *
      +   * $stateProvider.state('home', {
      +   *   views: {
      +   *     'contact.list': { controller: 'ListController' },
      +   *     'contact.item': { controller: 'ItemController' }
      +   *   }
      +   * });
      +   *
      +   * // ...
      +   *
      +   * $state.go('home');
      +   * // Auto-populates list and item views with /partials/home/contact/list.html,
      +   * // and /partials/home/contact/item.html, respectively.
      +   * 
      + * + * @param {string} name The name of the builder function to decorate. + * @param {object} func A function that is responsible for decorating the original + * builder function. The function receives two parameters: + * + * - `{object}` - state - The state config object. + * - `{object}` - super - The original builder function. + * + * @return {object} $stateProvider - $stateProvider instance + */ + this.decorator = decorator; + function decorator(name, func) { + /*jshint validthis: true */ + if (isString(name) && !isDefined(func)) { + return stateBuilder[name]; + } + if (!isFunction(func) || !isString(name)) { + return this; + } + if (stateBuilder[name] && !stateBuilder.$delegates[name]) { + stateBuilder.$delegates[name] = stateBuilder[name]; + } + stateBuilder[name] = func; + return this; + } + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#state + * @methodOf ui.router.state.$stateProvider + * + * @description + * Registers a state configuration under a given state name. The stateConfig object + * has the following acceptable properties. + * + * @param {string} name A unique state name, e.g. "home", "about", "contacts". + * To create a parent/child state use a dot, e.g. "about.sales", "home.newest". + * @param {object} stateConfig State configuration object. + * @param {string|function=} stateConfig.template + * + * html template as a string or a function that returns + * an html template as a string which should be used by the uiView directives. This property + * takes precedence over templateUrl. + * + * If `template` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
      template:
      +   *   "

      inline template definition

      " + + * "
      "
      + *
      template: function(params) {
      +   *       return "

      generated template

      "; }
      + * + * + * @param {string|function=} stateConfig.templateUrl + * + * + * path or function that returns a path to an html + * template that should be used by uiView. + * + * If `templateUrl` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
      templateUrl: "home.html"
      + *
      templateUrl: function(params) {
      +   *     return myTemplates[params.pageId]; }
      + * + * @param {function=} stateConfig.templateProvider + * + * Provider function that returns HTML content string. + *
       templateProvider:
      +   *       function(MyTemplateService, params) {
      +   *         return MyTemplateService.getTemplate(params.pageId);
      +   *       }
      + * + * @param {string|function=} stateConfig.controller + * + * + * Controller fn that should be associated with newly + * related scope or the name of a registered controller if passed as a string. + * Optionally, the ControllerAs may be declared here. + *
      controller: "MyRegisteredController"
      + *
      controller:
      +   *     "MyRegisteredController as fooCtrl"}
      + *
      controller: function($scope, MyService) {
      +   *     $scope.data = MyService.getData(); }
      + * + * @param {function=} stateConfig.controllerProvider + * + * + * Injectable provider function that returns the actual controller or string. + *
      controllerProvider:
      +   *   function(MyResolveData) {
      +   *     if (MyResolveData.foo)
      +   *       return "FooCtrl"
      +   *     else if (MyResolveData.bar)
      +   *       return "BarCtrl";
      +   *     else return function($scope) {
      +   *       $scope.baz = "Qux";
      +   *     }
      +   *   }
      + * + * @param {string=} stateConfig.controllerAs + * + * + * A controller alias name. If present the controller will be + * published to scope under the controllerAs name. + *
      controllerAs: "myCtrl"
      + * + * @param {object=} stateConfig.resolve + * + * + * An optional map<string, function> of dependencies which + * should be injected into the controller. If any of these dependencies are promises, + * the router will wait for them all to be resolved before the controller is instantiated. + * If all the promises are resolved successfully, the $stateChangeSuccess event is fired + * and the values of the resolved promises are injected into any controllers that reference them. + * If any of the promises are rejected the $stateChangeError event is fired. + * + * The map object is: + * + * - key - {string}: name of dependency to be injected into controller + * - factory - {string|function}: If string then it is alias for service. Otherwise if function, + * it is injected and return value it treated as dependency. If result is a promise, it is + * resolved before its value is injected into controller. + * + *
      resolve: {
      +   *     myResolve1:
      +   *       function($http, $stateParams) {
      +   *         return $http.get("/api/foos/"+stateParams.fooID);
      +   *       }
      +   *     }
      + * + * @param {string=} stateConfig.url + * + * + * A url fragment with optional parameters. When a state is navigated or + * transitioned to, the `$stateParams` service will be populated with any + * parameters that were passed. + * + * examples: + *
      url: "/home"
      +   * url: "/users/:userid"
      +   * url: "/books/{bookid:[a-zA-Z_-]}"
      +   * url: "/books/{categoryid:int}"
      +   * url: "/books/{publishername:string}/{categoryid:int}"
      +   * url: "/messages?before&after"
      +   * url: "/messages?{before:date}&{after:date}"
      + * url: "/messages/:mailboxid?{before:date}&{after:date}" + * + * @param {object=} stateConfig.views + * + * an optional map<string, object> which defined multiple views, or targets views + * manually/explicitly. + * + * Examples: + * + * Targets three named `ui-view`s in the parent state's template + *
      views: {
      +   *     header: {
      +   *       controller: "headerCtrl",
      +   *       templateUrl: "header.html"
      +   *     }, body: {
      +   *       controller: "bodyCtrl",
      +   *       templateUrl: "body.html"
      +   *     }, footer: {
      +   *       controller: "footCtrl",
      +   *       templateUrl: "footer.html"
      +   *     }
      +   *   }
      + * + * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template. + *
      views: {
      +   *     'header@top': {
      +   *       controller: "msgHeaderCtrl",
      +   *       templateUrl: "msgHeader.html"
      +   *     }, 'body': {
      +   *       controller: "messagesCtrl",
      +   *       templateUrl: "messages.html"
      +   *     }
      +   *   }
      + * + * @param {boolean=} [stateConfig.abstract=false] + * + * An abstract state will never be directly activated, + * but can provide inherited properties to its common children states. + *
      abstract: true
      + * + * @param {function=} stateConfig.onEnter + * + * + * Callback function for when a state is entered. Good way + * to trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
      onEnter: function(MyService, $stateParams) {
      +   *     MyService.foo($stateParams.myParam);
      +   * }
      + * + * @param {function=} stateConfig.onExit + * + * + * Callback function for when a state is exited. Good way to + * trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
      onExit: function(MyService, $stateParams) {
      +   *     MyService.cleanup($stateParams.myParam);
      +   * }
      + * + * @param {boolean=} [stateConfig.reloadOnSearch=true] + * + * + * If `false`, will not retrigger the same state + * just because a search/query parameter has changed (via $location.search() or $location.hash()). + * Useful for when you'd like to modify $location.search() without triggering a reload. + *
      reloadOnSearch: false
      + * + * @param {object=} stateConfig.data + * + * + * Arbitrary data object, useful for custom configuration. The parent state's `data` is + * prototypally inherited. In other words, adding a data property to a state adds it to + * the entire subtree via prototypal inheritance. + * + *
      data: {
      +   *     requiredRole: 'foo'
      +   * } 
      + * + * @param {object=} stateConfig.params + * + * + * A map which optionally configures parameters declared in the `url`, or + * defines additional non-url parameters. For each parameter being + * configured, add a configuration object keyed to the name of the parameter. + * + * Each parameter configuration object may contain the following properties: + * + * - ** value ** - {object|function=}: specifies the default value for this + * parameter. This implicitly sets this parameter as optional. + * + * When UI-Router routes to a state and no value is + * specified for this parameter in the URL or transition, the + * default value will be used instead. If `value` is a function, + * it will be injected and invoked, and the return value used. + * + * *Note*: `undefined` is treated as "no default value" while `null` + * is treated as "the default value is `null`". + * + * *Shorthand*: If you only need to configure the default value of the + * parameter, you may use a shorthand syntax. In the **`params`** + * map, instead mapping the param name to a full parameter configuration + * object, simply set map it to the default parameter value, e.g.: + * + *
      // define a parameter's default value
      +   * params: {
      +   *     param1: { value: "defaultValue" }
      +   * }
      +   * // shorthand default values
      +   * params: {
      +   *     param1: "defaultValue",
      +   *     param2: "param2Default"
      +   * }
      + * + * - ** array ** - {boolean=}: *(default: false)* If true, the param value will be + * treated as an array of values. If you specified a Type, the value will be + * treated as an array of the specified Type. Note: query parameter values + * default to a special `"auto"` mode. + * + * For query parameters in `"auto"` mode, if multiple values for a single parameter + * are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values + * are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`). However, if + * only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single + * value (e.g.: `{ foo: '1' }`). + * + *
      params: {
      +   *     param1: { array: true }
      +   * }
      + * + * - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when + * the current parameter value is the same as the default value. If `squash` is not set, it uses the + * configured default squash policy. + * (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`}) + * + * There are three squash settings: + * + * - false: The parameter's default value is not squashed. It is encoded and included in the URL + * - true: The parameter's default value is omitted from the URL. If the parameter is preceeded and followed + * by slashes in the state's `url` declaration, then one of those slashes are omitted. + * This can allow for cleaner looking URLs. + * - `""`: The parameter's default value is replaced with an arbitrary placeholder of your choice. + * + *
      params: {
      +   *     param1: {
      +   *       value: "defaultId",
      +   *       squash: true
      +   * } }
      +   * // squash "defaultValue" to "~"
      +   * params: {
      +   *     param1: {
      +   *       value: "defaultValue",
      +   *       squash: "~"
      +   * } }
      +   * 
      + * + * + * @example + *
      +   * // Some state name examples
      +   *
      +   * // stateName can be a single top-level name (must be unique).
      +   * $stateProvider.state("home", {});
      +   *
      +   * // Or it can be a nested state name. This state is a child of the
      +   * // above "home" state.
      +   * $stateProvider.state("home.newest", {});
      +   *
      +   * // Nest states as deeply as needed.
      +   * $stateProvider.state("home.newest.abc.xyz.inception", {});
      +   *
      +   * // state() returns $stateProvider, so you can chain state declarations.
      +   * $stateProvider
      +   *   .state("home", {})
      +   *   .state("about", {})
      +   *   .state("contacts", {});
      +   * 
      + * + */ + this.state = state; + function state(name, definition) { + /*jshint validthis: true */ + if (isObject(name)) definition = name; + else definition.name = name; + registerState(definition); + return this; + } + + /** + * @ngdoc object + * @name ui.router.state.$state + * + * @requires $rootScope + * @requires $q + * @requires ui.router.state.$view + * @requires $injector + * @requires ui.router.util.$resolve + * @requires ui.router.state.$stateParams + * @requires ui.router.router.$urlRouter + * + * @property {object} params A param object, e.g. {sectionId: section.id)}, that + * you'd like to test against the current active state. + * @property {object} current A reference to the state's config object. However + * you passed it in. Useful for accessing custom data. + * @property {object} transition Currently pending transition. A promise that'll + * resolve or reject. + * + * @description + * `$state` service is responsible for representing states as well as transitioning + * between them. It also provides interfaces to ask for current state or even states + * you're coming from. + */ + this.$get = $get; + $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory']; + function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $urlRouter, $location, $urlMatcherFactory) { + + var TransitionSuperseded = $q.reject(new Error('transition superseded')); + var TransitionPrevented = $q.reject(new Error('transition prevented')); + var TransitionAborted = $q.reject(new Error('transition aborted')); + var TransitionFailed = $q.reject(new Error('transition failed')); + + // Handles the case where a state which is the target of a transition is not found, and the user + // can optionally retry or defer the transition + function handleRedirect(redirect, state, params, options) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateNotFound + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when a requested state **cannot be found** using the provided state name during transition. + * The event is broadcast allowing any handlers a single chance to deal with the error (usually by + * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler, + * you can see its three properties in the example. You can use `event.preventDefault()` to abort the + * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value. + * + * @param {Object} event Event object. + * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties. + * @param {State} fromState Current state object. + * @param {Object} fromParams Current state params. + * + * @example + * + *
      +       * // somewhere, assume lazy.state has not been defined
      +       * $state.go("lazy.state", {a:1, b:2}, {inherit:false});
      +       *
      +       * // somewhere else
      +       * $scope.$on('$stateNotFound',
      +       * function(event, unfoundState, fromState, fromParams){
      +       *     console.log(unfoundState.to); // "lazy.state"
      +       *     console.log(unfoundState.toParams); // {a:1, b:2}
      +       *     console.log(unfoundState.options); // {inherit:false} + default options
      +       * })
      +       * 
      + */ + var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params); + + if (evt.defaultPrevented) { + $urlRouter.update(); + return TransitionAborted; + } + + if (!evt.retry) { + return null; + } + + // Allow the handler to return a promise to defer state lookup retry + if (options.$retry) { + $urlRouter.update(); + return TransitionFailed; + } + var retryTransition = $state.transition = $q.when(evt.retry); + + retryTransition.then(function() { + if (retryTransition !== $state.transition) return TransitionSuperseded; + redirect.options.$retry = true; + return $state.transitionTo(redirect.to, redirect.toParams, redirect.options); + }, function() { + return TransitionAborted; + }); + $urlRouter.update(); + + return retryTransition; + } + + root.locals = { resolve: null, globals: { $stateParams: {} } }; + + $state = { + params: {}, + current: root.self, + $current: root, + transition: null + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#reload + * @methodOf ui.router.state.$state + * + * @description + * A method that force reloads the current state. All resolves are re-resolved, events are not re-fired, + * and controllers reinstantiated (bug with controllers reinstantiating right now, fixing soon). + * + * @example + *
      +     * var app angular.module('app', ['ui.router']);
      +     *
      +     * app.controller('ctrl', function ($scope, $state) {
      +     *   $scope.reload = function(){
      +     *     $state.reload();
      +     *   }
      +     * });
      +     * 
      + * + * `reload()` is just an alias for: + *
      +     * $state.transitionTo($state.current, $stateParams, { 
      +     *   reload: true, inherit: false, notify: true
      +     * });
      +     * 
      + * + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.reload = function reload() { + return $state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: true }); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#go + * @methodOf ui.router.state.$state + * + * @description + * Convenience method for transitioning to a new state. `$state.go` calls + * `$state.transitionTo` internally but automatically sets options to + * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. + * This allows you to easily use an absolute or relative to path and specify + * only the parameters you'd like to update (while letting unspecified parameters + * inherit from the currently active ancestor states). + * + * @example + *
      +     * var app = angular.module('app', ['ui.router']);
      +     *
      +     * app.controller('ctrl', function ($scope, $state) {
      +     *   $scope.changeState = function () {
      +     *     $state.go('contact.detail');
      +     *   };
      +     * });
      +     * 
      + * + * + * @param {string} to Absolute state name or relative state path. Some examples: + * + * - `$state.go('contact.detail')` - will go to the `contact.detail` state + * - `$state.go('^')` - will go to a parent state + * - `$state.go('^.sibling')` - will go to a sibling state + * - `$state.go('.child.grandchild')` - will go to grandchild state + * + * @param {object=} params A map of the parameters that will be sent to the state, + * will populate $stateParams. Any parameters that are not specified will be inherited from currently + * defined parameters. This allows, for example, going to a sibling state that shares parameters + * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e. + * transitioning to a sibling will get you the parameters for all parents, transitioning to a child + * will get you all current parameters, etc. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * + * @returns {promise} A promise representing the state of the new transition. + * + * Possible success values: + * + * - $state.current + * + *
      Possible rejection values: + * + * - 'transition superseded' - when a newer transition has been started after this one + * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener + * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or + * when a `$stateNotFound` `event.retry` promise errors. + * - 'transition failed' - when a state has been unsuccessfully found after 2 tries. + * - *resolve error* - when an error has occurred with a `resolve` + * + */ + $state.go = function go(to, params, options) { + return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options)); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#transitionTo + * @methodOf ui.router.state.$state + * + * @description + * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go} + * uses `transitionTo` internally. `$state.go` is recommended in most situations. + * + * @example + *
      +     * var app = angular.module('app', ['ui.router']);
      +     *
      +     * app.controller('ctrl', function ($scope, $state) {
      +     *   $scope.changeState = function () {
      +     *     $state.transitionTo('contact.detail');
      +     *   };
      +     * });
      +     * 
      + * + * @param {string} to State name. + * @param {object=} toParams A map of the parameters that will be sent to the state, + * will populate $stateParams. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.transitionTo = function transitionTo(to, toParams, options) { + toParams = toParams || {}; + options = extend({ + location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false + }, options || {}); + + var from = $state.$current, fromParams = $state.params, fromPath = from.path; + var evt, toState = findState(to, options.relative); + + if (!isDefined(toState)) { + var redirect = { to: to, toParams: toParams, options: options }; + var redirectResult = handleRedirect(redirect, from.self, fromParams, options); + + if (redirectResult) { + return redirectResult; + } + + // Always retry once if the $stateNotFound was not prevented + // (handles either redirect changed or state lazy-definition) + to = redirect.to; + toParams = redirect.toParams; + options = redirect.options; + toState = findState(to, options.relative); + + if (!isDefined(toState)) { + if (!options.relative) throw new Error("No such state '" + to + "'"); + throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'"); + } + } + if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'"); + if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState); + if (!toState.params.$$validates(toParams)) return TransitionFailed; + + toParams = toState.params.$$values(toParams); + to = toState; + + var toPath = to.path; + + // Starting from the root of the path, keep all levels that haven't changed + var keep = 0, state = toPath[keep], locals = root.locals, toLocals = []; + + if (!options.reload) { + while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) { + locals = toLocals[keep] = state.locals; + keep++; + state = toPath[keep]; + } + } + + // If we're going to the same state and all locals are kept, we've got nothing to do. + // But clear 'transition', as we still want to cancel any other pending transitions. + // TODO: We may not want to bump 'transition' if we're called from a location change + // that we've initiated ourselves, because we might accidentally abort a legitimate + // transition initiated from code? + if (shouldTriggerReload(to, from, locals, options)) { + if (to.self.reloadOnSearch !== false) $urlRouter.update(); + $state.transition = null; + return $q.when($state.current); + } + + // Filter parameters before we pass them to event handlers etc. + toParams = filterByKeys(to.params.$$keys(), toParams || {}); + + // Broadcast start event and cancel the transition if requested + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeStart + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when the state transition **begins**. You can use `event.preventDefault()` + * to prevent the transition from happening and then the transition promise will be + * rejected with a `'transition prevented'` value. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * + * @example + * + *
      +         * $rootScope.$on('$stateChangeStart',
      +         * function(event, toState, toParams, fromState, fromParams){
      +         *     event.preventDefault();
      +         *     // transitionTo() promise will be rejected with
      +         *     // a 'transition prevented' error
      +         * })
      +         * 
      + */ + if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) { + $urlRouter.update(); + return TransitionPrevented; + } + } + + // Resolve locals for the remaining states, but don't update any global state just + // yet -- if anything fails to resolve the current state needs to remain untouched. + // We also set up an inheritance chain for the locals here. This allows the view directive + // to quickly look up the correct definition for each view in the current state. Even + // though we create the locals object itself outside resolveState(), it is initially + // empty and gets filled asynchronously. We need to keep track of the promise for the + // (fully resolved) current locals, and pass this down the chain. + var resolved = $q.when(locals); + + for (var l = keep; l < toPath.length; l++, state = toPath[l]) { + locals = toLocals[l] = inherit(locals); + resolved = resolveState(state, toParams, state === to, resolved, locals, options); + } + + // Once everything is resolved, we are ready to perform the actual transition + // and return a promise for the new state. We also keep track of what the + // current promise is, so that we can detect overlapping transitions and + // keep only the outcome of the last transition. + var transition = $state.transition = resolved.then(function () { + var l, entering, exiting; + + if ($state.transition !== transition) return TransitionSuperseded; + + // Exit 'from' states not kept + for (l = fromPath.length - 1; l >= keep; l--) { + exiting = fromPath[l]; + if (exiting.self.onExit) { + $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals); + } + exiting.locals = null; + } + + // Enter 'to' states not kept + for (l = keep; l < toPath.length; l++) { + entering = toPath[l]; + entering.locals = toLocals[l]; + if (entering.self.onEnter) { + $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals); + } + } + + // Run it again, to catch any transitions in callbacks + if ($state.transition !== transition) return TransitionSuperseded; + + // Update globals in $state + $state.$current = to; + $state.current = to.self; + $state.params = toParams; + copy($state.params, $stateParams); + $state.transition = null; + + if (options.location && to.navigable) { + $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, { + $$avoidResync: true, replace: options.location === 'replace' + }); + } + + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeSuccess + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired once the state transition is **complete**. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + */ + $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams); + } + $urlRouter.update(true); + + return $state.current; + }, function (error) { + if ($state.transition !== transition) return TransitionSuperseded; + + $state.transition = null; + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeError + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when an **error occurs** during transition. It's important to note that if you + * have any errors in your resolve functions (javascript errors, non-existent services, etc) + * they will not throw traditionally. You must listen for this $stateChangeError event to + * catch **ALL** errors. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * @param {Error} error The resolve error object. + */ + evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error); + + if (!evt.defaultPrevented) { + $urlRouter.update(); + } + + return $q.reject(error); + }); + + return transition; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#is + * @methodOf ui.router.state.$state + * + * @description + * Similar to {@link ui.router.state.$state#methods_includes $state.includes}, + * but only checks for the full state name. If params is supplied then it will be + * tested for strict equality against the current active params object, so all params + * must match with none missing and no extras. + * + * @example + *
      +     * $state.$current.name = 'contacts.details.item';
      +     *
      +     * // absolute name
      +     * $state.is('contact.details.item'); // returns true
      +     * $state.is(contactDetailItemStateObject); // returns true
      +     *
      +     * // relative name (. and ^), typically from a template
      +     * // E.g. from the 'contacts.details' template
      +     * 
      Item
      + *
      + * + * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like + * to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object} - If `stateOrName` is a relative state name and `options.relative` is set, .is will + * test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it is the state. + */ + $state.is = function is(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) { return undefined; } + if ($state.$current !== state) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams) : true; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#includes + * @methodOf ui.router.state.$state + * + * @description + * A method to determine if the current active state is equal to or is the child of the + * state stateName. If any params are passed then they will be tested for a match as well. + * Not all the parameters need to be passed, just the ones you'd like to test for equality. + * + * @example + * Partial and relative names + *
      +     * $state.$current.name = 'contacts.details.item';
      +     *
      +     * // Using partial names
      +     * $state.includes("contacts"); // returns true
      +     * $state.includes("contacts.details"); // returns true
      +     * $state.includes("contacts.details.item"); // returns true
      +     * $state.includes("contacts.list"); // returns false
      +     * $state.includes("about"); // returns false
      +     *
      +     * // Using relative names (. and ^), typically from a template
      +     * // E.g. from the 'contacts.details' template
      +     * 
      Item
      + *
      + * + * Basic globbing patterns + *
      +     * $state.$current.name = 'contacts.details.item.url';
      +     *
      +     * $state.includes("*.details.*.*"); // returns true
      +     * $state.includes("*.details.**"); // returns true
      +     * $state.includes("**.item.**"); // returns true
      +     * $state.includes("*.details.item.url"); // returns true
      +     * $state.includes("*.details.*.url"); // returns true
      +     * $state.includes("*.details.*"); // returns false
      +     * $state.includes("item.**"); // returns false
      +     * 
      + * + * @param {string} stateOrName A partial name, relative name, or glob pattern + * to be searched for within the current state name. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, + * that you'd like to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object=} - If `stateOrName` is a relative state reference and `options.relative` is set, + * .includes will test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it does include the state + */ + $state.includes = function includes(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + if (isString(stateOrName) && isGlob(stateOrName)) { + if (!doesStateMatchGlob(stateOrName)) { + return false; + } + stateOrName = $state.$current.name; + } + + var state = findState(stateOrName, options.relative); + if (!isDefined(state)) { return undefined; } + if (!isDefined($state.$current.includes[state.name])) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true; + }; + + + /** + * @ngdoc function + * @name ui.router.state.$state#href + * @methodOf ui.router.state.$state + * + * @description + * A url generation method that returns the compiled url for the given state populated with the given params. + * + * @example + *
      +     * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob");
      +     * 
      + * + * @param {string|object} stateOrName The state name or state object you'd like to generate a url from. + * @param {object=} params An object of parameter values to fill the state's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the + * first parameter, then the constructed href url will be built from the first navigable ancestor (aka + * ancestor with a valid url). + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} compiled state url + */ + $state.href = function href(stateOrName, params, options) { + options = extend({ + lossy: true, + inherit: true, + absolute: false, + relative: $state.$current + }, options || {}); + + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) return null; + if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state); + + var nav = (state && options.lossy) ? state.navigable : state; + + if (!nav || nav.url === undefined || nav.url === null) { + return null; + } + return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys(), params || {}), { + absolute: options.absolute + }); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#get + * @methodOf ui.router.state.$state + * + * @description + * Returns the state configuration object for any specific state or all states. + * + * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for + * the requested state. If not provided, returns an array of ALL state configs. + * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context. + * @returns {Object|Array} State configuration object or array of all objects. + */ + $state.get = function (stateOrName, context) { + if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; }); + var state = findState(stateOrName, context || $state.$current); + return (state && state.self) ? state.self : null; + }; + + function resolveState(state, params, paramsAreFiltered, inherited, dst, options) { + // Make a restricted $stateParams with only the parameters that apply to this state if + // necessary. In addition to being available to the controller and onEnter/onExit callbacks, + // we also need $stateParams to be available for any $injector calls we make during the + // dependency resolution process. + var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params); + var locals = { $stateParams: $stateParams }; + + // Resolve 'global' dependencies for the state, i.e. those not specific to a view. + // We're also including $stateParams in this; that way the parameters are restricted + // to the set that should be visible to the state, and are independent of when we update + // the global $state and $stateParams values. + dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state); + var promises = [dst.resolve.then(function (globals) { + dst.globals = globals; + })]; + if (inherited) promises.push(inherited); + + // Resolve template and dependencies for all views. + forEach(state.views, function (view, name) { + var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {}); + injectables.$template = [ function () { + return $view.load(name, { view: view, locals: locals, params: $stateParams, notify: options.notify }) || ''; + }]; + + promises.push($resolve.resolve(injectables, locals, dst.resolve, state).then(function (result) { + // References to the controller (only instantiated at link time) + if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) { + var injectLocals = angular.extend({}, injectables, locals); + result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals); + } else { + result.$$controller = view.controller; + } + // Provide access to the state itself for internal use + result.$$state = state; + result.$$controllerAs = view.controllerAs; + dst[name] = result; + })); + }); + + // Wait for all the promises and then return the activation object + return $q.all(promises).then(function (values) { + return dst; + }); + } + + return $state; + } + + function shouldTriggerReload(to, from, locals, options) { + if (to === from && ((locals === from.locals && !options.reload) || (to.self.reloadOnSearch === false))) { + return true; + } + } +} + +angular.module('ui.router.state') + .value('$stateParams', {}) + .provider('$state', $StateProvider); + + +$ViewProvider.$inject = []; +function $ViewProvider() { + + this.$get = $get; + /** + * @ngdoc object + * @name ui.router.state.$view + * + * @requires ui.router.util.$templateFactory + * @requires $rootScope + * + * @description + * + */ + $get.$inject = ['$rootScope', '$templateFactory']; + function $get( $rootScope, $templateFactory) { + return { + // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) + /** + * @ngdoc function + * @name ui.router.state.$view#load + * @methodOf ui.router.state.$view + * + * @description + * + * @param {string} name name + * @param {object} options option object. + */ + load: function load(name, options) { + var result, defaults = { + template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} + }; + options = extend(defaults, options); + + if (options.view) { + result = $templateFactory.fromConfig(options.view, options.params, options.locals); + } + if (result && options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$viewContentLoading + * @eventOf ui.router.state.$view + * @eventType broadcast on root scope + * @description + * + * Fired once the view **begins loading**, *before* the DOM is rendered. + * + * @param {Object} event Event object. + * @param {Object} viewConfig The view config properties (template, controller, etc). + * + * @example + * + *
      +         * $scope.$on('$viewContentLoading',
      +         * function(event, viewConfig){
      +         *     // Access to all the view config properties.
      +         *     // and one special property 'targetView'
      +         *     // viewConfig.targetView
      +         * });
      +         * 
      + */ + $rootScope.$broadcast('$viewContentLoading', options); + } + return result; + } + }; + } +} + +angular.module('ui.router.state').provider('$view', $ViewProvider); + +/** + * @ngdoc object + * @name ui.router.state.$uiViewScrollProvider + * + * @description + * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. + */ +function $ViewScrollProvider() { + + var useAnchorScroll = false; + + /** + * @ngdoc function + * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll + * @methodOf ui.router.state.$uiViewScrollProvider + * + * @description + * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for + * scrolling based on the url anchor. + */ + this.useAnchorScroll = function () { + useAnchorScroll = true; + }; + + /** + * @ngdoc object + * @name ui.router.state.$uiViewScroll + * + * @requires $anchorScroll + * @requires $timeout + * + * @description + * When called with a jqLite element, it scrolls the element into view (after a + * `$timeout` so the DOM has time to refresh). + * + * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, + * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. + */ + this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { + if (useAnchorScroll) { + return $anchorScroll; + } + + return function ($element) { + $timeout(function () { + $element[0].scrollIntoView(); + }, 0, false); + }; + }]; +} + +angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-view + * + * @requires ui.router.state.$state + * @requires $compile + * @requires $controller + * @requires $injector + * @requires ui.router.state.$uiViewScroll + * @requires $document + * + * @restrict ECA + * + * @description + * The ui-view directive tells $state where to place your templates. + * + * @param {string=} name A view name. The name should be unique amongst the other views in the + * same state. You can have views of the same name that live in different states. + * + * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window + * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll + * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you + * scroll ui-view elements into view when they are populated during a state activation. + * + * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) + * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.* + * + * @param {string=} onload Expression to evaluate whenever the view updates. + * + * @example + * A view can be unnamed or named. + *
      + * 
      + * 
      + * + * + *
      + *
      + * + * You can only have one unnamed view within any template (or root html). If you are only using a + * single view and it is unnamed then you can populate it like so: + *
      + * 
      + * $stateProvider.state("home", { + * template: "

      HELLO!

      " + * }) + *
      + * + * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`} + * config property, by name, in this case an empty name: + *
      + * $stateProvider.state("home", {
      + *   views: {
      + *     "": {
      + *       template: "

      HELLO!

      " + * } + * } + * }) + *
      + * + * But typically you'll only use the views property if you name your view or have more than one view + * in the same template. There's not really a compelling reason to name a view if its the only one, + * but you could if you wanted, like so: + *
      + * 
      + *
      + *
      + * $stateProvider.state("home", {
      + *   views: {
      + *     "main": {
      + *       template: "

      HELLO!

      " + * } + * } + * }) + *
      + * + * Really though, you'll use views to set up multiple views: + *
      + * 
      + *
      + *
      + *
      + * + *
      + * $stateProvider.state("home", {
      + *   views: {
      + *     "": {
      + *       template: "

      HELLO!

      " + * }, + * "chart": { + * template: "" + * }, + * "data": { + * template: "" + * } + * } + * }) + *
      + * + * Examples for `autoscroll`: + * + *
      + * 
      + * 
      + *
      + * 
      + * 
      + * 
      + * 
      + * 
      + */ +$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate']; +function $ViewDirective( $state, $injector, $uiViewScroll, $interpolate) { + + function getService() { + return ($injector.has) ? function(service) { + return $injector.has(service) ? $injector.get(service) : null; + } : function(service) { + try { + return $injector.get(service); + } catch (e) { + return null; + } + }; + } + + var service = getService(), + $animator = service('$animator'), + $animate = service('$animate'); + + // Returns a set of DOM manipulation functions based on which Angular version + // it should use + function getRenderer(attrs, scope) { + var statics = function() { + return { + enter: function (element, target, cb) { target.after(element); cb(); }, + leave: function (element, cb) { element.remove(); cb(); } + }; + }; + + if ($animate) { + return { + enter: function(element, target, cb) { + var promise = $animate.enter(element, null, target, cb); + if (promise && promise.then) promise.then(cb); + }, + leave: function(element, cb) { + var promise = $animate.leave(element, cb); + if (promise && promise.then) promise.then(cb); + } + }; + } + + if ($animator) { + var animate = $animator && $animator(scope, attrs); + + return { + enter: function(element, target, cb) {animate.enter(element, null, target); cb(); }, + leave: function(element, cb) { animate.leave(element); cb(); } + }; + } + + return statics(); + } + + var directive = { + restrict: 'ECA', + terminal: true, + priority: 400, + transclude: 'element', + compile: function (tElement, tAttrs, $transclude) { + return function (scope, $element, attrs) { + var previousEl, currentEl, currentScope, latestLocals, + onloadExp = attrs.onload || '', + autoScrollExp = attrs.autoscroll, + renderer = getRenderer(attrs, scope); + + scope.$on('$stateChangeSuccess', function() { + updateView(false); + }); + scope.$on('$viewContentLoading', function() { + updateView(false); + }); + + updateView(true); + + function cleanupLastView() { + if (previousEl) { + previousEl.remove(); + previousEl = null; + } + + if (currentScope) { + currentScope.$destroy(); + currentScope = null; + } + + if (currentEl) { + renderer.leave(currentEl, function() { + previousEl = null; + }); + + previousEl = currentEl; + currentEl = null; + } + } + + function updateView(firstTime) { + var newScope, + name = getUiViewName(scope, attrs, $element, $interpolate), + previousLocals = name && $state.$current && $state.$current.locals[name]; + + if (!firstTime && previousLocals === latestLocals) return; // nothing to do + newScope = scope.$new(); + latestLocals = $state.$current.locals[name]; + + var clone = $transclude(newScope, function(clone) { + renderer.enter(clone, $element, function onUiViewEnter() { + if(currentScope) { + currentScope.$emit('$viewContentAnimationEnded'); + } + + if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) { + $uiViewScroll(clone); + } + }); + cleanupLastView(); + }); + + currentEl = clone; + currentScope = newScope; + /** + * @ngdoc event + * @name ui.router.state.directive:ui-view#$viewContentLoaded + * @eventOf ui.router.state.directive:ui-view + * @eventType emits on ui-view directive scope + * @description * + * Fired once the view is **loaded**, *after* the DOM is rendered. + * + * @param {Object} event Event object. + */ + currentScope.$emit('$viewContentLoaded'); + currentScope.$eval(onloadExp); + } + }; + } + }; + + return directive; +} + +$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate']; +function $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) { + return { + restrict: 'ECA', + priority: -400, + compile: function (tElement) { + var initial = tElement.html(); + return function (scope, $element, attrs) { + var current = $state.$current, + name = getUiViewName(scope, attrs, $element, $interpolate), + locals = current && current.locals[name]; + + if (! locals) { + return; + } + + $element.data('$uiView', { name: name, state: locals.$$state }); + $element.html(locals.$template ? locals.$template : initial); + + var link = $compile($element.contents()); + + if (locals.$$controller) { + locals.$scope = scope; + var controller = $controller(locals.$$controller, locals); + if (locals.$$controllerAs) { + scope[locals.$$controllerAs] = controller; + } + $element.data('$ngControllerController', controller); + $element.children().data('$ngControllerController', controller); + } + + link(scope); + }; + } + }; +} + +/** + * Shared ui-view code for both directives: + * Given scope, element, and its attributes, return the view's name + */ +function getUiViewName(scope, attrs, element, $interpolate) { + var name = $interpolate(attrs.uiView || attrs.name || '')(scope); + var inherited = element.inheritedData('$uiView'); + return name.indexOf('@') >= 0 ? name : (name + '@' + (inherited ? inherited.state.name : '')); +} + +angular.module('ui.router.state').directive('uiView', $ViewDirective); +angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill); + +function parseStateRef(ref, current) { + var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed; + if (preparsed) ref = current + '(' + preparsed[1] + ')'; + parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); + if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'"); + return { state: parsed[1], paramExpr: parsed[3] || null }; +} + +function stateContext(el) { + var stateData = el.parent().inheritedData('$uiView'); + + if (stateData && stateData.state && stateData.state.name) { + return stateData.state; + } +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref + * + * @requires ui.router.state.$state + * @requires $timeout + * + * @restrict A + * + * @description + * A directive that binds a link (`` tag) to a state. If the state has an associated + * URL, the directive will automatically generate & update the `href` attribute via + * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking + * the link will trigger a state transition with optional parameters. + * + * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be + * handled natively by the browser. + * + * You can also use relative state paths within ui-sref, just like the relative + * paths passed to `$state.go()`. You just need to be aware that the path is relative + * to the state that the link lives in, in other words the state that loaded the + * template containing the link. + * + * You can specify options to pass to {@link ui.router.state.$state#go $state.go()} + * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`, + * and `reload`. + * + * @example + * Here's an example of how you'd use ui-sref and how it would compile. If you have the + * following template: + *
      + * Home | About | Next page
      + * 
      + * 
      + * 
      + * + * Then the compiled html would be (assuming Html5Mode is off and current state is contacts): + *
      + * Home | About | Next page
      + * 
      + * 
        + *
      • + * Joe + *
      • + *
      • + * Alice + *
      • + *
      • + * Bob + *
      • + *
      + * + * Home + *
      + * + * @param {string} ui-sref 'stateName' can be any valid absolute or relative state + * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()} + */ +$StateRefDirective.$inject = ['$state', '$timeout']; +function $StateRefDirective($state, $timeout) { + var allowedOptions = ['location', 'inherit', 'reload']; + + return { + restrict: 'A', + require: ['?^uiSrefActive', '?^uiSrefActiveEq'], + link: function(scope, element, attrs, uiSrefActive) { + var ref = parseStateRef(attrs.uiSref, $state.current.name); + var params = null, url = null, base = stateContext(element) || $state.$current; + var newHref = null, isAnchor = element.prop("tagName") === "A"; + var isForm = element[0].nodeName === "FORM"; + var attr = isForm ? "action" : "href", nav = true; + + var options = { relative: base, inherit: true }; + var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {}; + + angular.forEach(allowedOptions, function(option) { + if (option in optionsOverride) { + options[option] = optionsOverride[option]; + } + }); + + var update = function(newVal) { + if (newVal) params = angular.copy(newVal); + if (!nav) return; + + newHref = $state.href(ref.state, params, options); + + var activeDirective = uiSrefActive[1] || uiSrefActive[0]; + if (activeDirective) { + activeDirective.$$setStateInfo(ref.state, params); + } + if (newHref === null) { + nav = false; + return false; + } + attrs.$set(attr, newHref); + }; + + if (ref.paramExpr) { + scope.$watch(ref.paramExpr, function(newVal, oldVal) { + if (newVal !== params) update(newVal); + }, true); + params = angular.copy(scope.$eval(ref.paramExpr)); + } + update(); + + if (isForm) return; + + element.bind("click", function(e) { + var button = e.which || e.button; + if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) { + // HACK: This is to allow ng-clicks to be processed before the transition is initiated: + var transition = $timeout(function() { + $state.go(ref.state, params, options); + }); + e.preventDefault(); + + // if the state has no URL, ignore one preventDefault from the directive. + var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0; + e.preventDefault = function() { + if (ignorePreventDefaultCount-- <= 0) + $timeout.cancel(transition); + }; + } + }); + } + }; +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * A directive working alongside ui-sref to add classes to an element when the + * related ui-sref directive's state is active, and removing them when it is inactive. + * The primary use-case is to simplify the special appearance of navigation menus + * relying on `ui-sref`, by having the "active" state's menu button appear different, + * distinguishing it from the inactive menu items. + * + * ui-sref-active can live on the same element as ui-sref or on a parent element. The first + * ui-sref-active found at the same level or above the ui-sref will be used. + * + * Will activate when the ui-sref's target state or any child state is active. If you + * need to activate only when the ui-sref target state is active and *not* any of + * it's children, then you will use + * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq} + * + * @example + * Given the following template: + *
      + * 
      + * 
      + * + * + * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins", + * the resulting HTML will appear as (note the 'active' class): + *
      + * 
      + * 
      + * + * The class name is interpolated **once** during the directives link time (any further changes to the + * interpolated value are ignored). + * + * Multiple classes may be specified in a space-separated format: + *
      + * 
        + *
      • + * link + *
      • + *
      + *
      + */ + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active-eq + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate + * when the exact target state used in the `ui-sref` is active; no child states. + * + */ +$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate']; +function $StateRefActiveDirective($state, $stateParams, $interpolate) { + return { + restrict: "A", + controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) { + var state, params, activeClass; + + // There probably isn't much point in $observing this + // uiSrefActive and uiSrefActiveEq share the same directive object with some + // slight difference in logic routing + activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope); + + // Allow uiSref to communicate with uiSrefActive[Equals] + this.$$setStateInfo = function (newState, newParams) { + state = $state.get(newState, stateContext($element)); + params = newParams; + update(); + }; + + $scope.$on('$stateChangeSuccess', update); + + // Update route state + function update() { + if (isMatch()) { + $element.addClass(activeClass); + } else { + $element.removeClass(activeClass); + } + } + + function isMatch() { + if (typeof $attrs.uiSrefActiveEq !== 'undefined') { + return state && $state.is(state.name, params); + } else { + return state && $state.includes(state.name, params); + } + } + }] + }; +} + +angular.module('ui.router.state') + .directive('uiSref', $StateRefDirective) + .directive('uiSrefActive', $StateRefActiveDirective) + .directive('uiSrefActiveEq', $StateRefActiveDirective); + +/** + * @ngdoc filter + * @name ui.router.state.filter:isState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. + */ +$IsStateFilter.$inject = ['$state']; +function $IsStateFilter($state) { + var isFilter = function (state) { + return $state.is(state); + }; + isFilter.$stateful = true; + return isFilter; +} + +/** + * @ngdoc filter + * @name ui.router.state.filter:includedByState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. + */ +$IncludedByStateFilter.$inject = ['$state']; +function $IncludedByStateFilter($state) { + var includesFilter = function (state) { + return $state.includes(state); + }; + includesFilter.$stateful = true; + return includesFilter; +} + +angular.module('ui.router.state') + .filter('isState', $IsStateFilter) + .filter('includedByState', $IncludedByStateFilter); +})(window, window.angular); \ No newline at end of file diff --git a/vendor/assets/components/angular-ui-router/release/angular-ui-router.min.js b/vendor/assets/components/angular-ui-router/release/angular-ui-router.min.js new file mode 100644 index 000000000..be06fb5b0 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/release/angular-ui-router.min.js @@ -0,0 +1,7 @@ +/** + * State-based routing for AngularJS + * @version v0.2.13 + * @link http://angular-ui.github.com/ + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return M(new(M(function(){},{prototype:a})),b)}function e(a){return L(arguments,function(b){b!==a&&L(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var c=[];return b.forEach(a,function(a,b){c.push(b)}),c}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return M({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e "));if(s[c]=d,I(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);L(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return J(a)&&a.then&&a.$$promises}if(!J(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return L(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!G(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;L(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!J(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=m;var n=a.defer(),r=n.promise,s=r.$$promises={},t=M({},d),u=1+q.length/3,v=!1;if(G(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,l(f.$$inheritedValues,p)),M(s,f.$$promises),f.$$values?(v=e(t,l(f.$$values,p)),r.$$inheritedValues=l(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=l(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function p(a,b,c){this.fromConfig=function(a,b,c){return G(a.template)?this.fromString(a.template,b):G(a.templateUrl)?this.fromUrl(a.templateUrl,b):G(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return H(a)?a(b):a},this.fromUrl=function(c,d){return H(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function q(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new O.Param(b,c,d,e),p[b]}function g(a,b,c){var d=["",""],e=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return e;switch(c){case!1:d=["(",")"];break;case!0:d=["?(",")?"];break;default:d=["("+c+"|",")?"]}return e+d[0]+b+d[1]}function h(c,e){var f,g,h,i,j;return f=c[2]||c[3],j=b.params[f],h=a.substring(m,c.index),g=e?c[4]:c[4]||("*"==c[1]?".*":null),i=O.type(g||"string")||d(O.type("string"),{pattern:new RegExp(g)}),{id:f,regexp:g,segment:h,type:i,cfg:j}}b=M({params:{}},J(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new O.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function r(a){M(this,a)}function s(){function a(a){return null!=a?a.toString().replace(/\//g,"%2F"):a}function e(a){return null!=a?a.toString().replace(/%2F/g,"/"):a}function f(a){return this.pattern.test(a)}function i(){return{strict:t,caseInsensitive:p}}function j(a){return H(a)||K(a)&&H(a[a.length-1])}function k(){for(;x.length;){var a=x.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(v[a.name],o.invoke(a.def))}}function l(a){M(this,a||{})}O=this;var o,p=!1,t=!0,u=!1,v={},w=!0,x=[],y={string:{encode:a,decode:e,is:f,pattern:/[^/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return G(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^/]*/},any:{encode:b.identity,decode:b.identity,is:b.identity,equals:b.equals,pattern:/.*/}};s.$$getDefaultValue=function(a){if(!j(a.value))return a.value;if(!o)throw new Error("Injectable functions cannot be called at configuration time");return o.invoke(a.value)},this.caseInsensitive=function(a){return G(a)&&(p=a),p},this.strictMode=function(a){return G(a)&&(t=a),t},this.defaultSquashPolicy=function(a){if(!G(a))return u;if(a!==!0&&a!==!1&&!I(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return u=a,a},this.compile=function(a,b){return new q(a,M(i(),b))},this.isMatcher=function(a){if(!J(a))return!1;var b=!0;return L(q.prototype,function(c,d){H(c)&&(b=b&&G(a[d])&&H(a[d]))}),b},this.type=function(a,b,c){if(!G(b))return v[a];if(v.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return v[a]=new r(M({name:a},b)),c&&(x.push({name:a,def:c}),w||k()),this},L(y,function(a,b){v[b]=new r(M({name:b},a))}),v=d(v,{}),this.$get=["$injector",function(a){return o=a,w=!1,k(),L(y,function(a,b){v[b]||(v[b]=new r(a))}),this}],this.Param=function(a,b,d,e){function f(a){var b=J(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=j(a.value)?a.value:function(){return a.value},a}function i(b,c,d){if(b.type&&c)throw new Error("Param '"+a+"' has two type configurations.");return c?c:b.type?b.type instanceof r?b.type:new r(b.type):"config"===d?v.any:v.string}function k(){var b={array:"search"===e?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return M(b,c,d).array}function l(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!G(c)||null==c)return u;if(c===!0||I(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function p(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=K(a.replace)?a.replace:[],I(e)&&f.push({from:e,to:c}),g=n(f,function(a){return a.from}),m(i,function(a){return-1===h(g,a.from)}).concat(f)}function q(){if(!o)throw new Error("Injectable functions cannot be called at configuration time");return o.invoke(d.$$fn)}function s(a){function b(a){return function(b){return b.from===a}}function c(a){var c=n(m(w.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),G(a)?w.type.decode(a):q()}function t(){return"{Param:"+a+" "+b+" squash: '"+z+"' optional: "+y+"}"}var w=this;d=f(d),b=i(d,b,e);var x=k();b=x?b.$asArray(x,"search"===e):b,"string"!==b.name||x||"path"!==e||d.value!==c||(d.value="");var y=d.value!==c,z=l(d,y),A=p(d,x,y,z);M(this,{id:a,type:b,location:e,array:x,squash:z,replace:A,isOptional:y,value:s,dynamic:c,config:d,toString:t})},l.prototype={$$new:function(){return d(this,M(new l,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(l.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),L(b,function(b){L(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return L(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return L(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var b,c,d,e=!0,f=this;return L(this.$$keys(),function(g){d=f[g],c=a[g],b=!c&&d.isOptional,e=e&&(b||!!d.type.is(c))}),e},$$parent:c},this.ParamSet=l}function t(a,d){function e(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function f(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function g(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return G(d)?d:!0}function h(d,e,f,g){function h(a,b,c){return"/"===p?a:b?p.slice(0,-1)+a:c?p.slice(1)+a:a}function m(a){function b(a){var b=a(f,d);return b?(I(b)&&d.replace().url(b),!0):!1}if(!a||!a.defaultPrevented){var e=o&&d.url()===o;if(o=c,e)return!0;var g,h=j.length;for(g=0;h>g;g++)if(b(j[g]))return;k&&b(k)}}function n(){return i=i||e.$on("$locationChangeSuccess",m)}var o,p=g.baseHref(),q=d.url();return l||n(),{sync:function(){m()},listen:function(){return n()},update:function(a){return a?void(q=d.url()):void(d.url()!==q&&(d.url(q),d.replace()))},push:function(a,b,e){d.url(a.format(b||{})),o=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled);var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),i=h(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!H(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(I(a)){var b=a;a=function(){return b}}else if(!H(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=I(b);if(I(a)&&(a=d.compile(a)),!h&&!H(b)&&!K(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),M(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:I(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),M(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser"]}function u(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function l(a,b){if(!a)return c;var d=I(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=l(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var m=y[e];return!m||!d&&(d||m!==a&&m.self!==a)?c:m}function m(a,b){z[a]||(z[a]=[]),z[a].push(b)}function o(a){for(var b=z[a]||[];b.length;)p(b.shift())}function p(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!I(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(y.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):I(b.parent)?b.parent:J(b.parent)&&I(b.parent.name)?b.parent.name:"";if(e&&!y[e])return m(e,b.self);for(var f in B)H(B[f])&&(b[f]=B[f](b,B.$delegates[f]));return y[c]=b,!b[A]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){x.$current.navigable==b&&j(a,c)||x.transitionTo(b,a,{inherit:!0,location:!1})}]),o(c),b}function q(a){return a.indexOf("*")>-1}function r(a){var b=a.split("."),c=x.$current.name.split(".");if("**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length)return!1;for(var d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return c.join("")===b.join("")}function s(a,b){return I(a)&&!G(b)?B[a]:H(b)&&I(a)?(B[a]&&!B.$delegates[a]&&(B.$delegates[a]=B[a]),B[a]=b,this):this}function t(a,b){return J(a)?b=a:b.name=a,p(b),this}function u(a,e,f,h,m,o,p){function s(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),B;if(!g.retry)return null;if(f.$retry)return p.update(),C;var h=x.transition=e.when(g.retry);return h.then(function(){return h!==x.transition?u:(b.options.$retry=!0,x.transitionTo(b.to,b.toParams,b.options))},function(){return B}),p.update(),h}function t(a,c,d,g,i,j){var l=d?c:k(a.params.$$keys(),c),n={$stateParams:l};i.resolve=m.resolve(a.resolve,n,i.resolve,a);var o=[i.resolve.then(function(a){i.globals=a})];return g&&o.push(g),L(a.views,function(c,d){var e=c.resolve&&c.resolve!==a.resolve?c.resolve:{};e.$template=[function(){return f.load(d,{view:c,locals:n,params:l,notify:j.notify})||""}],o.push(m.resolve(e,n,i.resolve,a).then(function(f){if(H(c.controllerProvider)||K(c.controllerProvider)){var g=b.extend({},e,n);f.$$controller=h.invoke(c.controllerProvider,null,g)}else f.$$controller=c.controller;f.$$state=a,f.$$controllerAs=c.controllerAs,i[d]=f}))}),e.all(o).then(function(){return i})}var u=e.reject(new Error("transition superseded")),z=e.reject(new Error("transition prevented")),B=e.reject(new Error("transition aborted")),C=e.reject(new Error("transition failed"));return w.locals={resolve:null,globals:{$stateParams:{}}},x={params:{},current:w.self,$current:w,transition:null},x.reload=function(){return x.transitionTo(x.current,o,{reload:!0,inherit:!1,notify:!0})},x.go=function(a,b,c){return x.transitionTo(a,b,M({inherit:!0,relative:x.$current},c))},x.transitionTo=function(b,c,f){c=c||{},f=M({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=x.$current,m=x.params,n=j.path,q=l(b,f.relative);if(!G(q)){var r={to:b,toParams:c,options:f},y=s(r,j.self,m,f);if(y)return y;if(b=r.to,c=r.toParams,f=r.options,q=l(b,f.relative),!G(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[A])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(o,c||{},x.$current,q)),!q.params.$$validates(c))return C;c=q.params.$$values(c),b=q;var B=b.path,D=0,E=B[D],F=w.locals,H=[];if(!f.reload)for(;E&&E===n[D]&&E.ownParams.$$equals(c,m);)F=H[D]=E.locals,D++,E=B[D];if(v(b,j,F,f))return b.self.reloadOnSearch!==!1&&p.update(),x.transition=null,e.when(x.current);if(c=k(b.params.$$keys(),c||{}),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,m).defaultPrevented)return p.update(),z;for(var I=e.when(F),J=D;J=D;d--)g=n[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d=0?e:e+"@"+(f?f.state.name:"")}function A(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function B(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function C(a,c){var d=["location","inherit","reload"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(e,f,g,h){var i=A(g.uiSref,a.current.name),j=null,k=B(f)||a.$current,l=null,m="A"===f.prop("tagName"),n="FORM"===f[0].nodeName,o=n?"action":"href",p=!0,q={relative:k,inherit:!0},r=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in r&&(q[a]=r[a])});var s=function(c){if(c&&(j=b.copy(c)),p){l=a.href(i.state,j,q);var d=h[1]||h[0];return d&&d.$$setStateInfo(i.state,j),null===l?(p=!1,!1):void g.$set(o,l)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a){a!==j&&s(a)},!0),j=b.copy(e.$eval(i.paramExpr))),s(),n||f.bind("click",function(b){var d=b.which||b.button;if(!(d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target"))){var e=c(function(){a.go(i.state,j,q)});b.preventDefault();var g=m&&!l?1:0;b.preventDefault=function(){g--<=0&&c.cancel(e)}}})}}}function D(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(b,d,e){function f(){g()?d.addClass(j):d.removeClass(j)}function g(){return"undefined"!=typeof e.uiSrefActiveEq?h&&a.is(h.name,i):h&&a.includes(h.name,i)}var h,i,j;j=c(e.uiSrefActiveEq||e.uiSrefActive||"",!1)(b),this.$$setStateInfo=function(b,c){h=a.get(b,B(d)),i=c,f()},b.$on("$stateChangeSuccess",f)}]}}function E(a){var b=function(b){return a.is(b)};return b.$stateful=!0,b}function F(a){var b=function(b){return a.includes(b)};return b.$stateful=!0,b}var G=b.isDefined,H=b.isFunction,I=b.isString,J=b.isObject,K=b.isArray,L=b.forEach,M=b.extend,N=b.copy;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),o.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",o),p.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",p);var O;q.prototype.concat=function(a,b){var c={caseInsensitive:O.caseInsensitive(),strict:O.strictMode(),squash:O.defaultSquashPolicy()};return new q(this.sourcePath+a+this.sourceSearch,M(c,b),this)},q.prototype.toString=function(){return this.source},q.prototype.exec=function(a,b){function c(a){function b(a){return a.split("").reverse().join("")}function c(a){return a.replace(/\\-/,"-")}var d=b(a).split(/-(?!\\)/),e=n(d,b);return n(e,c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");for(e=0;j>e;e++){g=h[e];var l=this.params[g],m=d[e+1];for(f=0;fe;e++)g=h[e],k[g]=this.params[g].value(b[g]);return k},q.prototype.parameters=function(a){return G(a)?this.params[a]||null:this.$$paramNames},q.prototype.validates=function(a){return this.params.$$validates(a)},q.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;i>f;f++){var k=h>f,l=d[f],m=e[l],o=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),o),q=p?m.squash:!1,r=m.type.encode(o);if(k){var s=c[f+1];if(q===!1)null!=r&&(j+=K(r)?n(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var t=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(t)[1]}else I(q)&&(j+=q+s)}else{if(null==r||p&&q!==!1)continue;K(r)||(r=[r]),r=n(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},r.prototype.is=function(){return!0},r.prototype.encode=function(a){return a},r.prototype.decode=function(a){return a},r.prototype.equals=function(a,b){return a==b},r.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},r.prototype.pattern=/.*/,r.prototype.toString=function(){return"{Type:"+this.name+"}"},r.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return K(a)?a:G(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){c=e(c);var d=n(c,a);return b===!0?0===m(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g>> 0, from = Number(arguments[2]) || 0; + from = (from < 0) ? Math.ceil(from) : Math.floor(from); + + if (from < 0) from += len; + + for (; from < len; from++) { + if (from in array && array[from] === value) return from; + } + return -1; +} + +/** + * Merges a set of parameters with all parameters inherited between the common parents of the + * current state and a given destination state. + * + * @param {Object} currentParams The value of the current state parameters ($stateParams). + * @param {Object} newParams The set of parameters which will be composited with inherited params. + * @param {Object} $current Internal definition of object representing the current state. + * @param {Object} $to Internal definition of object representing state to transition to. + */ +function inheritParams(currentParams, newParams, $current, $to) { + var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = []; + + for (var i in parents) { + if (!parents[i].params) continue; + parentParams = objectKeys(parents[i].params); + if (!parentParams.length) continue; + + for (var j in parentParams) { + if (indexOf(inheritList, parentParams[j]) >= 0) continue; + inheritList.push(parentParams[j]); + inherited[parentParams[j]] = currentParams[parentParams[j]]; + } + } + return extend({}, inherited, newParams); +} + +/** + * Performs a non-strict comparison of the subset of two objects, defined by a list of keys. + * + * @param {Object} a The first object. + * @param {Object} b The second object. + * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified, + * it defaults to the list of keys in `a`. + * @return {Boolean} Returns `true` if the keys match, otherwise `false`. + */ +function equalForKeys(a, b, keys) { + if (!keys) { + keys = []; + for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility + } + + for (var i=0; i + * + * + * + * + * + * + * + * + * + * + * + * + */ +angular.module('ui.router', ['ui.router.state']); + +angular.module('ui.router.compat', ['ui.router']); diff --git a/vendor/assets/components/angular-ui-router/src/resolve.js b/vendor/assets/components/angular-ui-router/src/resolve.js new file mode 100644 index 000000000..f1c179009 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/resolve.js @@ -0,0 +1,252 @@ +/** + * @ngdoc object + * @name ui.router.util.$resolve + * + * @requires $q + * @requires $injector + * + * @description + * Manages resolution of (acyclic) graphs of promises. + */ +$Resolve.$inject = ['$q', '$injector']; +function $Resolve( $q, $injector) { + + var VISIT_IN_PROGRESS = 1, + VISIT_DONE = 2, + NOTHING = {}, + NO_DEPENDENCIES = [], + NO_LOCALS = NOTHING, + NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING }); + + + /** + * @ngdoc function + * @name ui.router.util.$resolve#study + * @methodOf ui.router.util.$resolve + * + * @description + * Studies a set of invocables that are likely to be used multiple times. + *
      +   * $resolve.study(invocables)(locals, parent, self)
      +   * 
      + * is equivalent to + *
      +   * $resolve.resolve(invocables, locals, parent, self)
      +   * 
      + * but the former is more efficient (in fact `resolve` just calls `study` + * internally). + * + * @param {object} invocables Invocable objects + * @return {function} a function to pass in locals, parent and self + */ + this.study = function (invocables) { + if (!isObject(invocables)) throw new Error("'invocables' must be an object"); + var invocableKeys = objectKeys(invocables || {}); + + // Perform a topological sort of invocables to build an ordered plan + var plan = [], cycle = [], visited = {}; + function visit(value, key) { + if (visited[key] === VISIT_DONE) return; + + cycle.push(key); + if (visited[key] === VISIT_IN_PROGRESS) { + cycle.splice(0, indexOf(cycle, key)); + throw new Error("Cyclic dependency: " + cycle.join(" -> ")); + } + visited[key] = VISIT_IN_PROGRESS; + + if (isString(value)) { + plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES); + } else { + var params = $injector.annotate(value); + forEach(params, function (param) { + if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param); + }); + plan.push(key, value, params); + } + + cycle.pop(); + visited[key] = VISIT_DONE; + } + forEach(invocables, visit); + invocables = cycle = visited = null; // plan is all that's required + + function isResolve(value) { + return isObject(value) && value.then && value.$$promises; + } + + return function (locals, parent, self) { + if (isResolve(locals) && self === undefined) { + self = parent; parent = locals; locals = null; + } + if (!locals) locals = NO_LOCALS; + else if (!isObject(locals)) { + throw new Error("'locals' must be an object"); + } + if (!parent) parent = NO_PARENT; + else if (!isResolve(parent)) { + throw new Error("'parent' must be a promise returned by $resolve.resolve()"); + } + + // To complete the overall resolution, we have to wait for the parent + // promise and for the promise for each invokable in our plan. + var resolution = $q.defer(), + result = resolution.promise, + promises = result.$$promises = {}, + values = extend({}, locals), + wait = 1 + plan.length/3, + merged = false; + + function done() { + // Merge parent values we haven't got yet and publish our own $$values + if (!--wait) { + if (!merged) merge(values, parent.$$values); + result.$$values = values; + result.$$promises = result.$$promises || true; // keep for isResolve() + delete result.$$inheritedValues; + resolution.resolve(values); + } + } + + function fail(reason) { + result.$$failure = reason; + resolution.reject(reason); + } + + // Short-circuit if parent has already failed + if (isDefined(parent.$$failure)) { + fail(parent.$$failure); + return result; + } + + if (parent.$$inheritedValues) { + merge(values, omit(parent.$$inheritedValues, invocableKeys)); + } + + // Merge parent values if the parent has already resolved, or merge + // parent promises and wait if the parent resolve is still in progress. + extend(promises, parent.$$promises); + if (parent.$$values) { + merged = merge(values, omit(parent.$$values, invocableKeys)); + result.$$inheritedValues = omit(parent.$$values, invocableKeys); + done(); + } else { + if (parent.$$inheritedValues) { + result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys); + } + parent.then(done, fail); + } + + // Process each invocable in the plan, but ignore any where a local of the same name exists. + for (var i=0, ii=plan.length; i= 0) throw new Error("State must have a valid name"); + if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined"); + + // Get parent name + var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.')) + : (isString(state.parent)) ? state.parent + : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name + : ''; + + // If parent is not registered yet, add state to queue and register later + if (parentName && !states[parentName]) { + return queueState(parentName, state.self); + } + + for (var key in stateBuilder) { + if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]); + } + states[name] = state; + + // Register the state in the global state list and with $urlRouter if necessary. + if (!state[abstractKey] && state.url) { + $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) { + if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) { + $state.transitionTo(state, $match, { inherit: true, location: false }); + } + }]); + } + + // Register any queued children + flushQueuedChildren(name); + + return state; + } + + // Checks text to see if it looks like a glob. + function isGlob (text) { + return text.indexOf('*') > -1; + } + + // Returns true if glob matches current $state name. + function doesStateMatchGlob (glob) { + var globSegments = glob.split('.'), + segments = $state.$current.name.split('.'); + + //match greedy starts + if (globSegments[0] === '**') { + segments = segments.slice(indexOf(segments, globSegments[1])); + segments.unshift('**'); + } + //match greedy ends + if (globSegments[globSegments.length - 1] === '**') { + segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE); + segments.push('**'); + } + + if (globSegments.length != segments.length) { + return false; + } + + //match single stars + for (var i = 0, l = globSegments.length; i < l; i++) { + if (globSegments[i] === '*') { + segments[i] = '*'; + } + } + + return segments.join('') === globSegments.join(''); + } + + + // Implicit root state that is always active + root = registerState({ + name: '', + url: '^', + views: null, + 'abstract': true + }); + root.navigable = null; + + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#decorator + * @methodOf ui.router.state.$stateProvider + * + * @description + * Allows you to extend (carefully) or override (at your own peril) the + * `stateBuilder` object used internally by `$stateProvider`. This can be used + * to add custom functionality to ui-router, for example inferring templateUrl + * based on the state name. + * + * When passing only a name, it returns the current (original or decorated) builder + * function that matches `name`. + * + * The builder functions that can be decorated are listed below. Though not all + * necessarily have a good use case for decoration, that is up to you to decide. + * + * In addition, users can attach custom decorators, which will generate new + * properties within the state's internal definition. There is currently no clear + * use-case for this beyond accessing internal states (i.e. $state.$current), + * however, expect this to become increasingly relevant as we introduce additional + * meta-programming features. + * + * **Warning**: Decorators should not be interdependent because the order of + * execution of the builder functions in non-deterministic. Builder functions + * should only be dependent on the state definition object and super function. + * + * + * Existing builder functions and current return values: + * + * - **parent** `{object}` - returns the parent state object. + * - **data** `{object}` - returns state data, including any inherited data that is not + * overridden by own values (if any). + * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher} + * or `null`. + * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is + * navigable). + * - **params** `{object}` - returns an array of state params that are ensured to + * be a super-set of parent's params. + * - **views** `{object}` - returns a views object where each key is an absolute view + * name (i.e. "viewName@stateName") and each value is the config object + * (template, controller) for the view. Even when you don't use the views object + * explicitly on a state config, one is still created for you internally. + * So by decorating this builder function you have access to decorating template + * and controller properties. + * - **ownParams** `{object}` - returns an array of params that belong to the state, + * not including any params defined by ancestor states. + * - **path** `{string}` - returns the full path from the root down to this state. + * Needed for state activation. + * - **includes** `{object}` - returns an object that includes every state that + * would pass a `$state.includes()` test. + * + * @example + *
      +   * // Override the internal 'views' builder with a function that takes the state
      +   * // definition, and a reference to the internal function being overridden:
      +   * $stateProvider.decorator('views', function (state, parent) {
      +   *   var result = {},
      +   *       views = parent(state);
      +   *
      +   *   angular.forEach(views, function (config, name) {
      +   *     var autoName = (state.name + '.' + name).replace('.', '/');
      +   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
      +   *     result[name] = config;
      +   *   });
      +   *   return result;
      +   * });
      +   *
      +   * $stateProvider.state('home', {
      +   *   views: {
      +   *     'contact.list': { controller: 'ListController' },
      +   *     'contact.item': { controller: 'ItemController' }
      +   *   }
      +   * });
      +   *
      +   * // ...
      +   *
      +   * $state.go('home');
      +   * // Auto-populates list and item views with /partials/home/contact/list.html,
      +   * // and /partials/home/contact/item.html, respectively.
      +   * 
      + * + * @param {string} name The name of the builder function to decorate. + * @param {object} func A function that is responsible for decorating the original + * builder function. The function receives two parameters: + * + * - `{object}` - state - The state config object. + * - `{object}` - super - The original builder function. + * + * @return {object} $stateProvider - $stateProvider instance + */ + this.decorator = decorator; + function decorator(name, func) { + /*jshint validthis: true */ + if (isString(name) && !isDefined(func)) { + return stateBuilder[name]; + } + if (!isFunction(func) || !isString(name)) { + return this; + } + if (stateBuilder[name] && !stateBuilder.$delegates[name]) { + stateBuilder.$delegates[name] = stateBuilder[name]; + } + stateBuilder[name] = func; + return this; + } + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#state + * @methodOf ui.router.state.$stateProvider + * + * @description + * Registers a state configuration under a given state name. The stateConfig object + * has the following acceptable properties. + * + * @param {string} name A unique state name, e.g. "home", "about", "contacts". + * To create a parent/child state use a dot, e.g. "about.sales", "home.newest". + * @param {object} stateConfig State configuration object. + * @param {string|function=} stateConfig.template + * + * html template as a string or a function that returns + * an html template as a string which should be used by the uiView directives. This property + * takes precedence over templateUrl. + * + * If `template` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
      template:
      +   *   "

      inline template definition

      " + + * "
      "
      + *
      template: function(params) {
      +   *       return "

      generated template

      "; }
      + * + * + * @param {string|function=} stateConfig.templateUrl + * + * + * path or function that returns a path to an html + * template that should be used by uiView. + * + * If `templateUrl` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
      templateUrl: "home.html"
      + *
      templateUrl: function(params) {
      +   *     return myTemplates[params.pageId]; }
      + * + * @param {function=} stateConfig.templateProvider + * + * Provider function that returns HTML content string. + *
       templateProvider:
      +   *       function(MyTemplateService, params) {
      +   *         return MyTemplateService.getTemplate(params.pageId);
      +   *       }
      + * + * @param {string|function=} stateConfig.controller + * + * + * Controller fn that should be associated with newly + * related scope or the name of a registered controller if passed as a string. + * Optionally, the ControllerAs may be declared here. + *
      controller: "MyRegisteredController"
      + *
      controller:
      +   *     "MyRegisteredController as fooCtrl"}
      + *
      controller: function($scope, MyService) {
      +   *     $scope.data = MyService.getData(); }
      + * + * @param {function=} stateConfig.controllerProvider + * + * + * Injectable provider function that returns the actual controller or string. + *
      controllerProvider:
      +   *   function(MyResolveData) {
      +   *     if (MyResolveData.foo)
      +   *       return "FooCtrl"
      +   *     else if (MyResolveData.bar)
      +   *       return "BarCtrl";
      +   *     else return function($scope) {
      +   *       $scope.baz = "Qux";
      +   *     }
      +   *   }
      + * + * @param {string=} stateConfig.controllerAs + * + * + * A controller alias name. If present the controller will be + * published to scope under the controllerAs name. + *
      controllerAs: "myCtrl"
      + * + * @param {object=} stateConfig.resolve + * + * + * An optional map<string, function> of dependencies which + * should be injected into the controller. If any of these dependencies are promises, + * the router will wait for them all to be resolved before the controller is instantiated. + * If all the promises are resolved successfully, the $stateChangeSuccess event is fired + * and the values of the resolved promises are injected into any controllers that reference them. + * If any of the promises are rejected the $stateChangeError event is fired. + * + * The map object is: + * + * - key - {string}: name of dependency to be injected into controller + * - factory - {string|function}: If string then it is alias for service. Otherwise if function, + * it is injected and return value it treated as dependency. If result is a promise, it is + * resolved before its value is injected into controller. + * + *
      resolve: {
      +   *     myResolve1:
      +   *       function($http, $stateParams) {
      +   *         return $http.get("/api/foos/"+stateParams.fooID);
      +   *       }
      +   *     }
      + * + * @param {string=} stateConfig.url + * + * + * A url fragment with optional parameters. When a state is navigated or + * transitioned to, the `$stateParams` service will be populated with any + * parameters that were passed. + * + * examples: + *
      url: "/home"
      +   * url: "/users/:userid"
      +   * url: "/books/{bookid:[a-zA-Z_-]}"
      +   * url: "/books/{categoryid:int}"
      +   * url: "/books/{publishername:string}/{categoryid:int}"
      +   * url: "/messages?before&after"
      +   * url: "/messages?{before:date}&{after:date}"
      + * url: "/messages/:mailboxid?{before:date}&{after:date}" + * + * @param {object=} stateConfig.views + * + * an optional map<string, object> which defined multiple views, or targets views + * manually/explicitly. + * + * Examples: + * + * Targets three named `ui-view`s in the parent state's template + *
      views: {
      +   *     header: {
      +   *       controller: "headerCtrl",
      +   *       templateUrl: "header.html"
      +   *     }, body: {
      +   *       controller: "bodyCtrl",
      +   *       templateUrl: "body.html"
      +   *     }, footer: {
      +   *       controller: "footCtrl",
      +   *       templateUrl: "footer.html"
      +   *     }
      +   *   }
      + * + * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template. + *
      views: {
      +   *     'header@top': {
      +   *       controller: "msgHeaderCtrl",
      +   *       templateUrl: "msgHeader.html"
      +   *     }, 'body': {
      +   *       controller: "messagesCtrl",
      +   *       templateUrl: "messages.html"
      +   *     }
      +   *   }
      + * + * @param {boolean=} [stateConfig.abstract=false] + * + * An abstract state will never be directly activated, + * but can provide inherited properties to its common children states. + *
      abstract: true
      + * + * @param {function=} stateConfig.onEnter + * + * + * Callback function for when a state is entered. Good way + * to trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
      onEnter: function(MyService, $stateParams) {
      +   *     MyService.foo($stateParams.myParam);
      +   * }
      + * + * @param {function=} stateConfig.onExit + * + * + * Callback function for when a state is exited. Good way to + * trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
      onExit: function(MyService, $stateParams) {
      +   *     MyService.cleanup($stateParams.myParam);
      +   * }
      + * + * @param {boolean=} [stateConfig.reloadOnSearch=true] + * + * + * If `false`, will not retrigger the same state + * just because a search/query parameter has changed (via $location.search() or $location.hash()). + * Useful for when you'd like to modify $location.search() without triggering a reload. + *
      reloadOnSearch: false
      + * + * @param {object=} stateConfig.data + * + * + * Arbitrary data object, useful for custom configuration. The parent state's `data` is + * prototypally inherited. In other words, adding a data property to a state adds it to + * the entire subtree via prototypal inheritance. + * + *
      data: {
      +   *     requiredRole: 'foo'
      +   * } 
      + * + * @param {object=} stateConfig.params + * + * + * A map which optionally configures parameters declared in the `url`, or + * defines additional non-url parameters. For each parameter being + * configured, add a configuration object keyed to the name of the parameter. + * + * Each parameter configuration object may contain the following properties: + * + * - ** value ** - {object|function=}: specifies the default value for this + * parameter. This implicitly sets this parameter as optional. + * + * When UI-Router routes to a state and no value is + * specified for this parameter in the URL or transition, the + * default value will be used instead. If `value` is a function, + * it will be injected and invoked, and the return value used. + * + * *Note*: `undefined` is treated as "no default value" while `null` + * is treated as "the default value is `null`". + * + * *Shorthand*: If you only need to configure the default value of the + * parameter, you may use a shorthand syntax. In the **`params`** + * map, instead mapping the param name to a full parameter configuration + * object, simply set map it to the default parameter value, e.g.: + * + *
      // define a parameter's default value
      +   * params: {
      +   *     param1: { value: "defaultValue" }
      +   * }
      +   * // shorthand default values
      +   * params: {
      +   *     param1: "defaultValue",
      +   *     param2: "param2Default"
      +   * }
      + * + * - ** array ** - {boolean=}: *(default: false)* If true, the param value will be + * treated as an array of values. If you specified a Type, the value will be + * treated as an array of the specified Type. Note: query parameter values + * default to a special `"auto"` mode. + * + * For query parameters in `"auto"` mode, if multiple values for a single parameter + * are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values + * are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`). However, if + * only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single + * value (e.g.: `{ foo: '1' }`). + * + *
      params: {
      +   *     param1: { array: true }
      +   * }
      + * + * - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when + * the current parameter value is the same as the default value. If `squash` is not set, it uses the + * configured default squash policy. + * (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`}) + * + * There are three squash settings: + * + * - false: The parameter's default value is not squashed. It is encoded and included in the URL + * - true: The parameter's default value is omitted from the URL. If the parameter is preceeded and followed + * by slashes in the state's `url` declaration, then one of those slashes are omitted. + * This can allow for cleaner looking URLs. + * - `""`: The parameter's default value is replaced with an arbitrary placeholder of your choice. + * + *
      params: {
      +   *     param1: {
      +   *       value: "defaultId",
      +   *       squash: true
      +   * } }
      +   * // squash "defaultValue" to "~"
      +   * params: {
      +   *     param1: {
      +   *       value: "defaultValue",
      +   *       squash: "~"
      +   * } }
      +   * 
      + * + * + * @example + *
      +   * // Some state name examples
      +   *
      +   * // stateName can be a single top-level name (must be unique).
      +   * $stateProvider.state("home", {});
      +   *
      +   * // Or it can be a nested state name. This state is a child of the
      +   * // above "home" state.
      +   * $stateProvider.state("home.newest", {});
      +   *
      +   * // Nest states as deeply as needed.
      +   * $stateProvider.state("home.newest.abc.xyz.inception", {});
      +   *
      +   * // state() returns $stateProvider, so you can chain state declarations.
      +   * $stateProvider
      +   *   .state("home", {})
      +   *   .state("about", {})
      +   *   .state("contacts", {});
      +   * 
      + * + */ + this.state = state; + function state(name, definition) { + /*jshint validthis: true */ + if (isObject(name)) definition = name; + else definition.name = name; + registerState(definition); + return this; + } + + /** + * @ngdoc object + * @name ui.router.state.$state + * + * @requires $rootScope + * @requires $q + * @requires ui.router.state.$view + * @requires $injector + * @requires ui.router.util.$resolve + * @requires ui.router.state.$stateParams + * @requires ui.router.router.$urlRouter + * + * @property {object} params A param object, e.g. {sectionId: section.id)}, that + * you'd like to test against the current active state. + * @property {object} current A reference to the state's config object. However + * you passed it in. Useful for accessing custom data. + * @property {object} transition Currently pending transition. A promise that'll + * resolve or reject. + * + * @description + * `$state` service is responsible for representing states as well as transitioning + * between them. It also provides interfaces to ask for current state or even states + * you're coming from. + */ + this.$get = $get; + $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory']; + function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $urlRouter, $location, $urlMatcherFactory) { + + var TransitionSuperseded = $q.reject(new Error('transition superseded')); + var TransitionPrevented = $q.reject(new Error('transition prevented')); + var TransitionAborted = $q.reject(new Error('transition aborted')); + var TransitionFailed = $q.reject(new Error('transition failed')); + + // Handles the case where a state which is the target of a transition is not found, and the user + // can optionally retry or defer the transition + function handleRedirect(redirect, state, params, options) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateNotFound + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when a requested state **cannot be found** using the provided state name during transition. + * The event is broadcast allowing any handlers a single chance to deal with the error (usually by + * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler, + * you can see its three properties in the example. You can use `event.preventDefault()` to abort the + * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value. + * + * @param {Object} event Event object. + * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties. + * @param {State} fromState Current state object. + * @param {Object} fromParams Current state params. + * + * @example + * + *
      +       * // somewhere, assume lazy.state has not been defined
      +       * $state.go("lazy.state", {a:1, b:2}, {inherit:false});
      +       *
      +       * // somewhere else
      +       * $scope.$on('$stateNotFound',
      +       * function(event, unfoundState, fromState, fromParams){
      +       *     console.log(unfoundState.to); // "lazy.state"
      +       *     console.log(unfoundState.toParams); // {a:1, b:2}
      +       *     console.log(unfoundState.options); // {inherit:false} + default options
      +       * })
      +       * 
      + */ + var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params); + + if (evt.defaultPrevented) { + $urlRouter.update(); + return TransitionAborted; + } + + if (!evt.retry) { + return null; + } + + // Allow the handler to return a promise to defer state lookup retry + if (options.$retry) { + $urlRouter.update(); + return TransitionFailed; + } + var retryTransition = $state.transition = $q.when(evt.retry); + + retryTransition.then(function() { + if (retryTransition !== $state.transition) return TransitionSuperseded; + redirect.options.$retry = true; + return $state.transitionTo(redirect.to, redirect.toParams, redirect.options); + }, function() { + return TransitionAborted; + }); + $urlRouter.update(); + + return retryTransition; + } + + root.locals = { resolve: null, globals: { $stateParams: {} } }; + + $state = { + params: {}, + current: root.self, + $current: root, + transition: null + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#reload + * @methodOf ui.router.state.$state + * + * @description + * A method that force reloads the current state. All resolves are re-resolved, events are not re-fired, + * and controllers reinstantiated (bug with controllers reinstantiating right now, fixing soon). + * + * @example + *
      +     * var app angular.module('app', ['ui.router']);
      +     *
      +     * app.controller('ctrl', function ($scope, $state) {
      +     *   $scope.reload = function(){
      +     *     $state.reload();
      +     *   }
      +     * });
      +     * 
      + * + * `reload()` is just an alias for: + *
      +     * $state.transitionTo($state.current, $stateParams, { 
      +     *   reload: true, inherit: false, notify: true
      +     * });
      +     * 
      + * + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.reload = function reload() { + return $state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: true }); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#go + * @methodOf ui.router.state.$state + * + * @description + * Convenience method for transitioning to a new state. `$state.go` calls + * `$state.transitionTo` internally but automatically sets options to + * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. + * This allows you to easily use an absolute or relative to path and specify + * only the parameters you'd like to update (while letting unspecified parameters + * inherit from the currently active ancestor states). + * + * @example + *
      +     * var app = angular.module('app', ['ui.router']);
      +     *
      +     * app.controller('ctrl', function ($scope, $state) {
      +     *   $scope.changeState = function () {
      +     *     $state.go('contact.detail');
      +     *   };
      +     * });
      +     * 
      + * + * + * @param {string} to Absolute state name or relative state path. Some examples: + * + * - `$state.go('contact.detail')` - will go to the `contact.detail` state + * - `$state.go('^')` - will go to a parent state + * - `$state.go('^.sibling')` - will go to a sibling state + * - `$state.go('.child.grandchild')` - will go to grandchild state + * + * @param {object=} params A map of the parameters that will be sent to the state, + * will populate $stateParams. Any parameters that are not specified will be inherited from currently + * defined parameters. This allows, for example, going to a sibling state that shares parameters + * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e. + * transitioning to a sibling will get you the parameters for all parents, transitioning to a child + * will get you all current parameters, etc. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * + * @returns {promise} A promise representing the state of the new transition. + * + * Possible success values: + * + * - $state.current + * + *
      Possible rejection values: + * + * - 'transition superseded' - when a newer transition has been started after this one + * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener + * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or + * when a `$stateNotFound` `event.retry` promise errors. + * - 'transition failed' - when a state has been unsuccessfully found after 2 tries. + * - *resolve error* - when an error has occurred with a `resolve` + * + */ + $state.go = function go(to, params, options) { + return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options)); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#transitionTo + * @methodOf ui.router.state.$state + * + * @description + * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go} + * uses `transitionTo` internally. `$state.go` is recommended in most situations. + * + * @example + *
      +     * var app = angular.module('app', ['ui.router']);
      +     *
      +     * app.controller('ctrl', function ($scope, $state) {
      +     *   $scope.changeState = function () {
      +     *     $state.transitionTo('contact.detail');
      +     *   };
      +     * });
      +     * 
      + * + * @param {string} to State name. + * @param {object=} toParams A map of the parameters that will be sent to the state, + * will populate $stateParams. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.transitionTo = function transitionTo(to, toParams, options) { + toParams = toParams || {}; + options = extend({ + location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false + }, options || {}); + + var from = $state.$current, fromParams = $state.params, fromPath = from.path; + var evt, toState = findState(to, options.relative); + + if (!isDefined(toState)) { + var redirect = { to: to, toParams: toParams, options: options }; + var redirectResult = handleRedirect(redirect, from.self, fromParams, options); + + if (redirectResult) { + return redirectResult; + } + + // Always retry once if the $stateNotFound was not prevented + // (handles either redirect changed or state lazy-definition) + to = redirect.to; + toParams = redirect.toParams; + options = redirect.options; + toState = findState(to, options.relative); + + if (!isDefined(toState)) { + if (!options.relative) throw new Error("No such state '" + to + "'"); + throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'"); + } + } + if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'"); + if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState); + if (!toState.params.$$validates(toParams)) return TransitionFailed; + + toParams = toState.params.$$values(toParams); + to = toState; + + var toPath = to.path; + + // Starting from the root of the path, keep all levels that haven't changed + var keep = 0, state = toPath[keep], locals = root.locals, toLocals = []; + + if (!options.reload) { + while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) { + locals = toLocals[keep] = state.locals; + keep++; + state = toPath[keep]; + } + } + + // If we're going to the same state and all locals are kept, we've got nothing to do. + // But clear 'transition', as we still want to cancel any other pending transitions. + // TODO: We may not want to bump 'transition' if we're called from a location change + // that we've initiated ourselves, because we might accidentally abort a legitimate + // transition initiated from code? + if (shouldTriggerReload(to, from, locals, options)) { + if (to.self.reloadOnSearch !== false) $urlRouter.update(); + $state.transition = null; + return $q.when($state.current); + } + + // Filter parameters before we pass them to event handlers etc. + toParams = filterByKeys(to.params.$$keys(), toParams || {}); + + // Broadcast start event and cancel the transition if requested + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeStart + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when the state transition **begins**. You can use `event.preventDefault()` + * to prevent the transition from happening and then the transition promise will be + * rejected with a `'transition prevented'` value. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * + * @example + * + *
      +         * $rootScope.$on('$stateChangeStart',
      +         * function(event, toState, toParams, fromState, fromParams){
      +         *     event.preventDefault();
      +         *     // transitionTo() promise will be rejected with
      +         *     // a 'transition prevented' error
      +         * })
      +         * 
      + */ + if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) { + $urlRouter.update(); + return TransitionPrevented; + } + } + + // Resolve locals for the remaining states, but don't update any global state just + // yet -- if anything fails to resolve the current state needs to remain untouched. + // We also set up an inheritance chain for the locals here. This allows the view directive + // to quickly look up the correct definition for each view in the current state. Even + // though we create the locals object itself outside resolveState(), it is initially + // empty and gets filled asynchronously. We need to keep track of the promise for the + // (fully resolved) current locals, and pass this down the chain. + var resolved = $q.when(locals); + + for (var l = keep; l < toPath.length; l++, state = toPath[l]) { + locals = toLocals[l] = inherit(locals); + resolved = resolveState(state, toParams, state === to, resolved, locals, options); + } + + // Once everything is resolved, we are ready to perform the actual transition + // and return a promise for the new state. We also keep track of what the + // current promise is, so that we can detect overlapping transitions and + // keep only the outcome of the last transition. + var transition = $state.transition = resolved.then(function () { + var l, entering, exiting; + + if ($state.transition !== transition) return TransitionSuperseded; + + // Exit 'from' states not kept + for (l = fromPath.length - 1; l >= keep; l--) { + exiting = fromPath[l]; + if (exiting.self.onExit) { + $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals); + } + exiting.locals = null; + } + + // Enter 'to' states not kept + for (l = keep; l < toPath.length; l++) { + entering = toPath[l]; + entering.locals = toLocals[l]; + if (entering.self.onEnter) { + $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals); + } + } + + // Run it again, to catch any transitions in callbacks + if ($state.transition !== transition) return TransitionSuperseded; + + // Update globals in $state + $state.$current = to; + $state.current = to.self; + $state.params = toParams; + copy($state.params, $stateParams); + $state.transition = null; + + if (options.location && to.navigable) { + $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, { + $$avoidResync: true, replace: options.location === 'replace' + }); + } + + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeSuccess + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired once the state transition is **complete**. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + */ + $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams); + } + $urlRouter.update(true); + + return $state.current; + }, function (error) { + if ($state.transition !== transition) return TransitionSuperseded; + + $state.transition = null; + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeError + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when an **error occurs** during transition. It's important to note that if you + * have any errors in your resolve functions (javascript errors, non-existent services, etc) + * they will not throw traditionally. You must listen for this $stateChangeError event to + * catch **ALL** errors. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * @param {Error} error The resolve error object. + */ + evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error); + + if (!evt.defaultPrevented) { + $urlRouter.update(); + } + + return $q.reject(error); + }); + + return transition; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#is + * @methodOf ui.router.state.$state + * + * @description + * Similar to {@link ui.router.state.$state#methods_includes $state.includes}, + * but only checks for the full state name. If params is supplied then it will be + * tested for strict equality against the current active params object, so all params + * must match with none missing and no extras. + * + * @example + *
      +     * $state.$current.name = 'contacts.details.item';
      +     *
      +     * // absolute name
      +     * $state.is('contact.details.item'); // returns true
      +     * $state.is(contactDetailItemStateObject); // returns true
      +     *
      +     * // relative name (. and ^), typically from a template
      +     * // E.g. from the 'contacts.details' template
      +     * 
      Item
      + *
      + * + * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like + * to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object} - If `stateOrName` is a relative state name and `options.relative` is set, .is will + * test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it is the state. + */ + $state.is = function is(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) { return undefined; } + if ($state.$current !== state) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams) : true; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#includes + * @methodOf ui.router.state.$state + * + * @description + * A method to determine if the current active state is equal to or is the child of the + * state stateName. If any params are passed then they will be tested for a match as well. + * Not all the parameters need to be passed, just the ones you'd like to test for equality. + * + * @example + * Partial and relative names + *
      +     * $state.$current.name = 'contacts.details.item';
      +     *
      +     * // Using partial names
      +     * $state.includes("contacts"); // returns true
      +     * $state.includes("contacts.details"); // returns true
      +     * $state.includes("contacts.details.item"); // returns true
      +     * $state.includes("contacts.list"); // returns false
      +     * $state.includes("about"); // returns false
      +     *
      +     * // Using relative names (. and ^), typically from a template
      +     * // E.g. from the 'contacts.details' template
      +     * 
      Item
      + *
      + * + * Basic globbing patterns + *
      +     * $state.$current.name = 'contacts.details.item.url';
      +     *
      +     * $state.includes("*.details.*.*"); // returns true
      +     * $state.includes("*.details.**"); // returns true
      +     * $state.includes("**.item.**"); // returns true
      +     * $state.includes("*.details.item.url"); // returns true
      +     * $state.includes("*.details.*.url"); // returns true
      +     * $state.includes("*.details.*"); // returns false
      +     * $state.includes("item.**"); // returns false
      +     * 
      + * + * @param {string} stateOrName A partial name, relative name, or glob pattern + * to be searched for within the current state name. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, + * that you'd like to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object=} - If `stateOrName` is a relative state reference and `options.relative` is set, + * .includes will test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it does include the state + */ + $state.includes = function includes(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + if (isString(stateOrName) && isGlob(stateOrName)) { + if (!doesStateMatchGlob(stateOrName)) { + return false; + } + stateOrName = $state.$current.name; + } + + var state = findState(stateOrName, options.relative); + if (!isDefined(state)) { return undefined; } + if (!isDefined($state.$current.includes[state.name])) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true; + }; + + + /** + * @ngdoc function + * @name ui.router.state.$state#href + * @methodOf ui.router.state.$state + * + * @description + * A url generation method that returns the compiled url for the given state populated with the given params. + * + * @example + *
      +     * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob");
      +     * 
      + * + * @param {string|object} stateOrName The state name or state object you'd like to generate a url from. + * @param {object=} params An object of parameter values to fill the state's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the + * first parameter, then the constructed href url will be built from the first navigable ancestor (aka + * ancestor with a valid url). + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} compiled state url + */ + $state.href = function href(stateOrName, params, options) { + options = extend({ + lossy: true, + inherit: true, + absolute: false, + relative: $state.$current + }, options || {}); + + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) return null; + if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state); + + var nav = (state && options.lossy) ? state.navigable : state; + + if (!nav || nav.url === undefined || nav.url === null) { + return null; + } + return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys(), params || {}), { + absolute: options.absolute + }); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#get + * @methodOf ui.router.state.$state + * + * @description + * Returns the state configuration object for any specific state or all states. + * + * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for + * the requested state. If not provided, returns an array of ALL state configs. + * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context. + * @returns {Object|Array} State configuration object or array of all objects. + */ + $state.get = function (stateOrName, context) { + if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; }); + var state = findState(stateOrName, context || $state.$current); + return (state && state.self) ? state.self : null; + }; + + function resolveState(state, params, paramsAreFiltered, inherited, dst, options) { + // Make a restricted $stateParams with only the parameters that apply to this state if + // necessary. In addition to being available to the controller and onEnter/onExit callbacks, + // we also need $stateParams to be available for any $injector calls we make during the + // dependency resolution process. + var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params); + var locals = { $stateParams: $stateParams }; + + // Resolve 'global' dependencies for the state, i.e. those not specific to a view. + // We're also including $stateParams in this; that way the parameters are restricted + // to the set that should be visible to the state, and are independent of when we update + // the global $state and $stateParams values. + dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state); + var promises = [dst.resolve.then(function (globals) { + dst.globals = globals; + })]; + if (inherited) promises.push(inherited); + + // Resolve template and dependencies for all views. + forEach(state.views, function (view, name) { + var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {}); + injectables.$template = [ function () { + return $view.load(name, { view: view, locals: locals, params: $stateParams, notify: options.notify }) || ''; + }]; + + promises.push($resolve.resolve(injectables, locals, dst.resolve, state).then(function (result) { + // References to the controller (only instantiated at link time) + if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) { + var injectLocals = angular.extend({}, injectables, locals); + result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals); + } else { + result.$$controller = view.controller; + } + // Provide access to the state itself for internal use + result.$$state = state; + result.$$controllerAs = view.controllerAs; + dst[name] = result; + })); + }); + + // Wait for all the promises and then return the activation object + return $q.all(promises).then(function (values) { + return dst; + }); + } + + return $state; + } + + function shouldTriggerReload(to, from, locals, options) { + if (to === from && ((locals === from.locals && !options.reload) || (to.self.reloadOnSearch === false))) { + return true; + } + } +} + +angular.module('ui.router.state') + .value('$stateParams', {}) + .provider('$state', $StateProvider); diff --git a/vendor/assets/components/angular-ui-router/src/stateDirectives.js b/vendor/assets/components/angular-ui-router/src/stateDirectives.js new file mode 100644 index 000000000..4d9d527dd --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/stateDirectives.js @@ -0,0 +1,268 @@ +function parseStateRef(ref, current) { + var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed; + if (preparsed) ref = current + '(' + preparsed[1] + ')'; + parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); + if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'"); + return { state: parsed[1], paramExpr: parsed[3] || null }; +} + +function stateContext(el) { + var stateData = el.parent().inheritedData('$uiView'); + + if (stateData && stateData.state && stateData.state.name) { + return stateData.state; + } +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref + * + * @requires ui.router.state.$state + * @requires $timeout + * + * @restrict A + * + * @description + * A directive that binds a link (`` tag) to a state. If the state has an associated + * URL, the directive will automatically generate & update the `href` attribute via + * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking + * the link will trigger a state transition with optional parameters. + * + * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be + * handled natively by the browser. + * + * You can also use relative state paths within ui-sref, just like the relative + * paths passed to `$state.go()`. You just need to be aware that the path is relative + * to the state that the link lives in, in other words the state that loaded the + * template containing the link. + * + * You can specify options to pass to {@link ui.router.state.$state#go $state.go()} + * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`, + * and `reload`. + * + * @example + * Here's an example of how you'd use ui-sref and how it would compile. If you have the + * following template: + *
      + * Home | About | Next page
      + * 
      + * 
      + * 
      + * + * Then the compiled html would be (assuming Html5Mode is off and current state is contacts): + *
      + * Home | About | Next page
      + * 
      + * 
        + *
      • + * Joe + *
      • + *
      • + * Alice + *
      • + *
      • + * Bob + *
      • + *
      + * + * Home + *
      + * + * @param {string} ui-sref 'stateName' can be any valid absolute or relative state + * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()} + */ +$StateRefDirective.$inject = ['$state', '$timeout']; +function $StateRefDirective($state, $timeout) { + var allowedOptions = ['location', 'inherit', 'reload']; + + return { + restrict: 'A', + require: ['?^uiSrefActive', '?^uiSrefActiveEq'], + link: function(scope, element, attrs, uiSrefActive) { + var ref = parseStateRef(attrs.uiSref, $state.current.name); + var params = null, url = null, base = stateContext(element) || $state.$current; + var newHref = null, isAnchor = element.prop("tagName") === "A"; + var isForm = element[0].nodeName === "FORM"; + var attr = isForm ? "action" : "href", nav = true; + + var options = { relative: base, inherit: true }; + var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {}; + + angular.forEach(allowedOptions, function(option) { + if (option in optionsOverride) { + options[option] = optionsOverride[option]; + } + }); + + var update = function(newVal) { + if (newVal) params = angular.copy(newVal); + if (!nav) return; + + newHref = $state.href(ref.state, params, options); + + var activeDirective = uiSrefActive[1] || uiSrefActive[0]; + if (activeDirective) { + activeDirective.$$setStateInfo(ref.state, params); + } + if (newHref === null) { + nav = false; + return false; + } + attrs.$set(attr, newHref); + }; + + if (ref.paramExpr) { + scope.$watch(ref.paramExpr, function(newVal, oldVal) { + if (newVal !== params) update(newVal); + }, true); + params = angular.copy(scope.$eval(ref.paramExpr)); + } + update(); + + if (isForm) return; + + element.bind("click", function(e) { + var button = e.which || e.button; + if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) { + // HACK: This is to allow ng-clicks to be processed before the transition is initiated: + var transition = $timeout(function() { + $state.go(ref.state, params, options); + }); + e.preventDefault(); + + // if the state has no URL, ignore one preventDefault from the directive. + var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0; + e.preventDefault = function() { + if (ignorePreventDefaultCount-- <= 0) + $timeout.cancel(transition); + }; + } + }); + } + }; +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * A directive working alongside ui-sref to add classes to an element when the + * related ui-sref directive's state is active, and removing them when it is inactive. + * The primary use-case is to simplify the special appearance of navigation menus + * relying on `ui-sref`, by having the "active" state's menu button appear different, + * distinguishing it from the inactive menu items. + * + * ui-sref-active can live on the same element as ui-sref or on a parent element. The first + * ui-sref-active found at the same level or above the ui-sref will be used. + * + * Will activate when the ui-sref's target state or any child state is active. If you + * need to activate only when the ui-sref target state is active and *not* any of + * it's children, then you will use + * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq} + * + * @example + * Given the following template: + *
      + * 
      + * 
      + * + * + * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins", + * the resulting HTML will appear as (note the 'active' class): + *
      + * 
      + * 
      + * + * The class name is interpolated **once** during the directives link time (any further changes to the + * interpolated value are ignored). + * + * Multiple classes may be specified in a space-separated format: + *
      + * 
        + *
      • + * link + *
      • + *
      + *
      + */ + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active-eq + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate + * when the exact target state used in the `ui-sref` is active; no child states. + * + */ +$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate']; +function $StateRefActiveDirective($state, $stateParams, $interpolate) { + return { + restrict: "A", + controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) { + var state, params, activeClass; + + // There probably isn't much point in $observing this + // uiSrefActive and uiSrefActiveEq share the same directive object with some + // slight difference in logic routing + activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope); + + // Allow uiSref to communicate with uiSrefActive[Equals] + this.$$setStateInfo = function (newState, newParams) { + state = $state.get(newState, stateContext($element)); + params = newParams; + update(); + }; + + $scope.$on('$stateChangeSuccess', update); + + // Update route state + function update() { + if (isMatch()) { + $element.addClass(activeClass); + } else { + $element.removeClass(activeClass); + } + } + + function isMatch() { + if (typeof $attrs.uiSrefActiveEq !== 'undefined') { + return state && $state.is(state.name, params); + } else { + return state && $state.includes(state.name, params); + } + } + }] + }; +} + +angular.module('ui.router.state') + .directive('uiSref', $StateRefDirective) + .directive('uiSrefActive', $StateRefActiveDirective) + .directive('uiSrefActiveEq', $StateRefActiveDirective); diff --git a/vendor/assets/components/angular-ui-router/src/stateFilters.js b/vendor/assets/components/angular-ui-router/src/stateFilters.js new file mode 100644 index 000000000..e0a117580 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/stateFilters.js @@ -0,0 +1,39 @@ +/** + * @ngdoc filter + * @name ui.router.state.filter:isState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. + */ +$IsStateFilter.$inject = ['$state']; +function $IsStateFilter($state) { + var isFilter = function (state) { + return $state.is(state); + }; + isFilter.$stateful = true; + return isFilter; +} + +/** + * @ngdoc filter + * @name ui.router.state.filter:includedByState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. + */ +$IncludedByStateFilter.$inject = ['$state']; +function $IncludedByStateFilter($state) { + var includesFilter = function (state) { + return $state.includes(state); + }; + includesFilter.$stateful = true; + return includesFilter; +} + +angular.module('ui.router.state') + .filter('isState', $IsStateFilter) + .filter('includedByState', $IncludedByStateFilter); diff --git a/vendor/assets/components/angular-ui-router/src/templateFactory.js b/vendor/assets/components/angular-ui-router/src/templateFactory.js new file mode 100644 index 000000000..ca491a987 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/templateFactory.js @@ -0,0 +1,110 @@ +/** + * @ngdoc object + * @name ui.router.util.$templateFactory + * + * @requires $http + * @requires $templateCache + * @requires $injector + * + * @description + * Service. Manages loading of templates. + */ +$TemplateFactory.$inject = ['$http', '$templateCache', '$injector']; +function $TemplateFactory( $http, $templateCache, $injector) { + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromConfig + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template from a configuration object. + * + * @param {object} config Configuration object for which to load a template. + * The following properties are search in the specified order, and the first one + * that is defined is used to create the template: + * + * @param {string|object} config.template html string template or function to + * load via {@link ui.router.util.$templateFactory#fromString fromString}. + * @param {string|object} config.templateUrl url to load or a function returning + * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}. + * @param {Function} config.templateProvider function to invoke via + * {@link ui.router.util.$templateFactory#fromProvider fromProvider}. + * @param {object} params Parameters to pass to the template function. + * @param {object} locals Locals to pass to `invoke` if the template is loaded + * via a `templateProvider`. Defaults to `{ params: params }`. + * + * @return {string|object} The template html as a string, or a promise for + * that string,or `null` if no template is configured. + */ + this.fromConfig = function (config, params, locals) { + return ( + isDefined(config.template) ? this.fromString(config.template, params) : + isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) : + isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) : + null + ); + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromString + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template from a string or a function returning a string. + * + * @param {string|object} template html template as a string or function that + * returns an html template as a string. + * @param {object} params Parameters to pass to the template function. + * + * @return {string|object} The template html as a string, or a promise for that + * string. + */ + this.fromString = function (template, params) { + return isFunction(template) ? template(params) : template; + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromUrl + * @methodOf ui.router.util.$templateFactory + * + * @description + * Loads a template from the a URL via `$http` and `$templateCache`. + * + * @param {string|Function} url url of the template to load, or a function + * that returns a url. + * @param {Object} params Parameters to pass to the url function. + * @return {string|Promise.} The template html as a string, or a promise + * for that string. + */ + this.fromUrl = function (url, params) { + if (isFunction(url)) url = url(params); + if (url == null) return null; + else return $http + .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}) + .then(function(response) { return response.data; }); + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromProvider + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template by invoking an injectable provider function. + * + * @param {Function} provider Function to invoke via `$injector.invoke` + * @param {Object} params Parameters for the template. + * @param {Object} locals Locals to pass to `invoke`. Defaults to + * `{ params: params }`. + * @return {string|Promise.} The template html as a string, or a promise + * for that string. + */ + this.fromProvider = function (provider, params, locals) { + return $injector.invoke(provider, null, locals || { params: params }); + }; +} + +angular.module('ui.router.util').service('$templateFactory', $TemplateFactory); diff --git a/vendor/assets/components/angular-ui-router/src/urlMatcherFactory.js b/vendor/assets/components/angular-ui-router/src/urlMatcherFactory.js new file mode 100644 index 000000000..a16e728c5 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/urlMatcherFactory.js @@ -0,0 +1,1036 @@ +var $$UMFP; // reference to $UrlMatcherFactoryProvider + +/** + * @ngdoc object + * @name ui.router.util.type:UrlMatcher + * + * @description + * Matches URLs against patterns and extracts named parameters from the path or the search + * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list + * of search parameters. Multiple search parameter names are separated by '&'. Search parameters + * do not influence whether or not a URL is matched, but their values are passed through into + * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}. + * + * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace + * syntax, which optionally allows a regular expression for the parameter to be specified: + * + * * `':'` name - colon placeholder + * * `'*'` name - catch-all placeholder + * * `'{' name '}'` - curly placeholder + * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the + * regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash. + * + * Parameter names may contain only word characters (latin letters, digits, and underscore) and + * must be unique within the pattern (across both path and search parameters). For colon + * placeholders or curly placeholders without an explicit regexp, a path parameter matches any + * number of characters other than '/'. For catch-all placeholders the path parameter matches + * any number of characters. + * + * Examples: + * + * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for + * trailing slashes, and patterns have to match the entire path, not just a prefix. + * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or + * '/user/bob/details'. The second path segment will be captured as the parameter 'id'. + * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax. + * * `'/user/{id:[^/]*}'` - Same as the previous example. + * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id + * parameter consists of 1 to 8 hex digits. + * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the + * path into the parameter 'path'. + * * `'/files/*path'` - ditto. + * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined + * in the built-in `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start + * + * @param {string} pattern The pattern to compile into a matcher. + * @param {Object} config A configuration object hash: + * @param {Object=} parentMatcher Used to concatenate the pattern/config onto + * an existing UrlMatcher + * + * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`. + * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`. + * + * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any + * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns + * non-null) will start with this prefix. + * + * @property {string} source The pattern that was passed into the constructor + * + * @property {string} sourcePath The path portion of the source property + * + * @property {string} sourceSearch The search portion of the source property + * + * @property {string} regex The constructed regex that will be used to match against the url when + * it is time to determine which url will match. + * + * @returns {Object} New `UrlMatcher` object + */ +function UrlMatcher(pattern, config, parentMatcher) { + config = extend({ params: {} }, isObject(config) ? config : {}); + + // Find all placeholders and create a compiled pattern, using either classic or curly syntax: + // '*' name + // ':' name + // '{' name '}' + // '{' name ':' regexp '}' + // The regular expression is somewhat complicated due to the need to allow curly braces + // inside the regular expression. The placeholder regexp breaks down as follows: + // ([:*])([\w\[\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case) + // \{([\w\[\]]+)(?:\:( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case + // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either + // [^{}\\]+ - anything other than curly braces or backslash + // \\. - a backslash escape + // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms + var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + compiled = '^', last = 0, m, + segments = this.segments = [], + parentParams = parentMatcher ? parentMatcher.params : {}, + params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(), + paramNames = []; + + function addParameter(id, type, config, location) { + paramNames.push(id); + if (parentParams[id]) return parentParams[id]; + if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'"); + if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'"); + params[id] = new $$UMFP.Param(id, type, config, location); + return params[id]; + } + + function quoteRegExp(string, pattern, squash) { + var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&"); + if (!pattern) return result; + switch(squash) { + case false: surroundPattern = ['(', ')']; break; + case true: surroundPattern = ['?(', ')?']; break; + default: surroundPattern = ['(' + squash + "|", ')?']; break; + } + return result + surroundPattern[0] + pattern + surroundPattern[1]; + } + + this.source = pattern; + + // Split into static segments separated by path parameter placeholders. + // The number of segments is always 1 more than the number of parameters. + function matchDetails(m, isSearch) { + var id, regexp, segment, type, cfg, arrayMode; + id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null + cfg = config.params[id]; + segment = pattern.substring(last, m.index); + regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null); + type = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp) }); + return { + id: id, regexp: regexp, segment: segment, type: type, cfg: cfg + }; + } + + var p, param, segment; + while ((m = placeholder.exec(pattern))) { + p = matchDetails(m, false); + if (p.segment.indexOf('?') >= 0) break; // we're into the search part + + param = addParameter(p.id, p.type, p.cfg, "path"); + compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash); + segments.push(p.segment); + last = placeholder.lastIndex; + } + segment = pattern.substring(last); + + // Find any search parameter names and remove them from the last segment + var i = segment.indexOf('?'); + + if (i >= 0) { + var search = this.sourceSearch = segment.substring(i); + segment = segment.substring(0, i); + this.sourcePath = pattern.substring(0, last + i); + + if (search.length > 0) { + last = 0; + while ((m = searchPlaceholder.exec(search))) { + p = matchDetails(m, true); + param = addParameter(p.id, p.type, p.cfg, "search"); + last = placeholder.lastIndex; + // check if ?& + } + } + } else { + this.sourcePath = pattern; + this.sourceSearch = ''; + } + + compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$'; + segments.push(segment); + + this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined); + this.prefix = segments[0]; + this.$$paramNames = paramNames; +} + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#concat + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns a new matcher for a pattern constructed by appending the path part and adding the + * search parameters of the specified pattern to this pattern. The current pattern is not + * modified. This can be understood as creating a pattern for URLs that are relative to (or + * suffixes of) the current pattern. + * + * @example + * The following two matchers are equivalent: + *
      + * new UrlMatcher('/user/{id}?q').concat('/details?date');
      + * new UrlMatcher('/user/{id}/details?q&date');
      + * 
      + * + * @param {string} pattern The pattern to append. + * @param {Object} config An object hash of the configuration for the matcher. + * @returns {UrlMatcher} A matcher for the concatenated pattern. + */ +UrlMatcher.prototype.concat = function (pattern, config) { + // Because order of search parameters is irrelevant, we can add our own search + // parameters to the end of the new pattern. Parse the new pattern by itself + // and then join the bits together, but it's much easier to do this on a string level. + var defaultConfig = { + caseInsensitive: $$UMFP.caseInsensitive(), + strict: $$UMFP.strictMode(), + squash: $$UMFP.defaultSquashPolicy() + }; + return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this); +}; + +UrlMatcher.prototype.toString = function () { + return this.source; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#exec + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Tests the specified path against this matcher, and returns an object containing the captured + * parameter values, or null if the path does not match. The returned object contains the values + * of any search parameters that are mentioned in the pattern, but their value may be null if + * they are not present in `searchParams`. This means that search parameters are always treated + * as optional. + * + * @example + *
      + * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {
      + *   x: '1', q: 'hello'
      + * });
      + * // returns { id: 'bob', q: 'hello', r: null }
      + * 
      + * + * @param {string} path The URL path to match, e.g. `$location.path()`. + * @param {Object} searchParams URL search parameters, e.g. `$location.search()`. + * @returns {Object} The captured parameter values. + */ +UrlMatcher.prototype.exec = function (path, searchParams) { + var m = this.regexp.exec(path); + if (!m) return null; + searchParams = searchParams || {}; + + var paramNames = this.parameters(), nTotal = paramNames.length, + nPath = this.segments.length - 1, + values = {}, i, j, cfg, paramName; + + if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'"); + + function decodePathArray(string) { + function reverseString(str) { return str.split("").reverse().join(""); } + function unquoteDashes(str) { return str.replace(/\\-/, "-"); } + + var split = reverseString(string).split(/-(?!\\)/); + var allReversed = map(split, reverseString); + return map(allReversed, unquoteDashes).reverse(); + } + + for (i = 0; i < nPath; i++) { + paramName = paramNames[i]; + var param = this.params[paramName]; + var paramVal = m[i+1]; + // if the param value matches a pre-replace pair, replace the value before decoding. + for (j = 0; j < param.replace; j++) { + if (param.replace[j].from === paramVal) paramVal = param.replace[j].to; + } + if (paramVal && param.array === true) paramVal = decodePathArray(paramVal); + values[paramName] = param.value(paramVal); + } + for (/**/; i < nTotal; i++) { + paramName = paramNames[i]; + values[paramName] = this.params[paramName].value(searchParams[paramName]); + } + + return values; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#parameters + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns the names of all path and search parameters of this pattern in an unspecified order. + * + * @returns {Array.} An array of parameter names. Must be treated as read-only. If the + * pattern has no parameters, an empty array is returned. + */ +UrlMatcher.prototype.parameters = function (param) { + if (!isDefined(param)) return this.$$paramNames; + return this.params[param] || null; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#validate + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Checks an object hash of parameters to validate their correctness according to the parameter + * types of this `UrlMatcher`. + * + * @param {Object} params The object hash of parameters to validate. + * @returns {boolean} Returns `true` if `params` validates, otherwise `false`. + */ +UrlMatcher.prototype.validates = function (params) { + return this.params.$$validates(params); +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#format + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Creates a URL that matches this pattern by substituting the specified values + * for the path and search parameters. Null values for path parameters are + * treated as empty strings. + * + * @example + *
      + * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
      + * // returns '/user/bob?q=yes'
      + * 
      + * + * @param {Object} values the values to substitute for the parameters in this pattern. + * @returns {string} the formatted URL (path and optionally search part). + */ +UrlMatcher.prototype.format = function (values) { + values = values || {}; + var segments = this.segments, params = this.parameters(), paramset = this.params; + if (!this.validates(values)) return null; + + var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0]; + + function encodeDashes(str) { // Replace dashes with encoded "\-" + return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); }); + } + + for (i = 0; i < nTotal; i++) { + var isPathParam = i < nPath; + var name = params[i], param = paramset[name], value = param.value(values[name]); + var isDefaultValue = param.isOptional && param.type.equals(param.value(), value); + var squash = isDefaultValue ? param.squash : false; + var encoded = param.type.encode(value); + + if (isPathParam) { + var nextSegment = segments[i + 1]; + if (squash === false) { + if (encoded != null) { + if (isArray(encoded)) { + result += map(encoded, encodeDashes).join("-"); + } else { + result += encodeURIComponent(encoded); + } + } + result += nextSegment; + } else if (squash === true) { + var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/; + result += nextSegment.match(capture)[1]; + } else if (isString(squash)) { + result += squash + nextSegment; + } + } else { + if (encoded == null || (isDefaultValue && squash !== false)) continue; + if (!isArray(encoded)) encoded = [ encoded ]; + encoded = map(encoded, encodeURIComponent).join('&' + name + '='); + result += (search ? '&' : '?') + (name + '=' + encoded); + search = true; + } + } + + return result; +}; + +/** + * @ngdoc object + * @name ui.router.util.type:Type + * + * @description + * Implements an interface to define custom parameter types that can be decoded from and encoded to + * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`} + * objects when matching or formatting URLs, or comparing or validating parameter values. + * + * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more + * information on registering custom types. + * + * @param {Object} config A configuration object which contains the custom type definition. The object's + * properties will override the default methods and/or pattern in `Type`'s public interface. + * @example + *
      + * {
      + *   decode: function(val) { return parseInt(val, 10); },
      + *   encode: function(val) { return val && val.toString(); },
      + *   equals: function(a, b) { return this.is(a) && a === b; },
      + *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },
      + *   pattern: /\d+/
      + * }
      + * 
      + * + * @property {RegExp} pattern The regular expression pattern used to match values of this type when + * coming from a substring of a URL. + * + * @returns {Object} Returns a new `Type` object. + */ +function Type(config) { + extend(this, config); +} + +/** + * @ngdoc function + * @name ui.router.util.type:Type#is + * @methodOf ui.router.util.type:Type + * + * @description + * Detects whether a value is of a particular type. Accepts a native (decoded) value + * and determines whether it matches the current `Type` object. + * + * @param {*} val The value to check. + * @param {string} key Optional. If the type check is happening in the context of a specific + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the + * parameter in which `val` is stored. Can be used for meta-programming of `Type` objects. + * @returns {Boolean} Returns `true` if the value matches the type, otherwise `false`. + */ +Type.prototype.is = function(val, key) { + return true; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#encode + * @methodOf ui.router.util.type:Type + * + * @description + * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the + * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it + * only needs to be a representation of `val` that has been coerced to a string. + * + * @param {*} val The value to encode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {string} Returns a string representation of `val` that can be encoded in a URL. + */ +Type.prototype.encode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#decode + * @methodOf ui.router.util.type:Type + * + * @description + * Converts a parameter value (from URL string or transition param) to a custom/native value. + * + * @param {string} val The URL parameter value to decode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {*} Returns a custom representation of the URL parameter value. + */ +Type.prototype.decode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#equals + * @methodOf ui.router.util.type:Type + * + * @description + * Determines whether two decoded values are equivalent. + * + * @param {*} a A value to compare against. + * @param {*} b A value to compare against. + * @returns {Boolean} Returns `true` if the values are equivalent/equal, otherwise `false`. + */ +Type.prototype.equals = function(a, b) { + return a == b; +}; + +Type.prototype.$subPattern = function() { + var sub = this.pattern.toString(); + return sub.substr(1, sub.length - 2); +}; + +Type.prototype.pattern = /.*/; + +Type.prototype.toString = function() { return "{Type:" + this.name + "}"; }; + +/* + * Wraps an existing custom Type as an array of Type, depending on 'mode'. + * e.g.: + * - urlmatcher pattern "/path?{queryParam[]:int}" + * - url: "/path?queryParam=1&queryParam=2 + * - $stateParams.queryParam will be [1, 2] + * if `mode` is "auto", then + * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1 + * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2] + */ +Type.prototype.$asArray = function(mode, isSearch) { + if (!mode) return this; + if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only"); + return new ArrayType(this, mode); + + function ArrayType(type, mode) { + function bindTo(type, callbackName) { + return function() { + return type[callbackName].apply(type, arguments); + }; + } + + // Wrap non-array value as array + function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); } + // Unwrap array value for "auto" mode. Return undefined for empty array. + function arrayUnwrap(val) { + switch(val.length) { + case 0: return undefined; + case 1: return mode === "auto" ? val[0] : val; + default: return val; + } + } + function falsey(val) { return !val; } + + // Wraps type (.is/.encode/.decode) functions to operate on each value of an array + function arrayHandler(callback, allTruthyMode) { + return function handleArray(val) { + val = arrayWrap(val); + var result = map(val, callback); + if (allTruthyMode === true) + return filter(result, falsey).length === 0; + return arrayUnwrap(result); + }; + } + + // Wraps type (.equals) functions to operate on each value of an array + function arrayEqualsHandler(callback) { + return function handleArray(val1, val2) { + var left = arrayWrap(val1), right = arrayWrap(val2); + if (left.length !== right.length) return false; + for (var i = 0; i < left.length; i++) { + if (!callback(left[i], right[i])) return false; + } + return true; + }; + } + + this.encode = arrayHandler(bindTo(type, 'encode')); + this.decode = arrayHandler(bindTo(type, 'decode')); + this.is = arrayHandler(bindTo(type, 'is'), true); + this.equals = arrayEqualsHandler(bindTo(type, 'equals')); + this.pattern = type.pattern; + this.$arrayMode = mode; + } +}; + + + +/** + * @ngdoc object + * @name ui.router.util.$urlMatcherFactory + * + * @description + * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory + * is also available to providers under the name `$urlMatcherFactoryProvider`. + */ +function $UrlMatcherFactory() { + $$UMFP = this; + + var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false; + + function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; } + function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; } +// TODO: in 1.0, make string .is() return false if value is undefined by default. +// function regexpMatches(val) { /*jshint validthis:true */ return isDefined(val) && this.pattern.test(val); } + function regexpMatches(val) { /*jshint validthis:true */ return this.pattern.test(val); } + + var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = { + string: { + encode: valToString, + decode: valFromString, + is: regexpMatches, + pattern: /[^/]*/ + }, + int: { + encode: valToString, + decode: function(val) { return parseInt(val, 10); }, + is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; }, + pattern: /\d+/ + }, + bool: { + encode: function(val) { return val ? 1 : 0; }, + decode: function(val) { return parseInt(val, 10) !== 0; }, + is: function(val) { return val === true || val === false; }, + pattern: /0|1/ + }, + date: { + encode: function (val) { + if (!this.is(val)) + return undefined; + return [ val.getFullYear(), + ('0' + (val.getMonth() + 1)).slice(-2), + ('0' + val.getDate()).slice(-2) + ].join("-"); + }, + decode: function (val) { + if (this.is(val)) return val; + var match = this.capture.exec(val); + return match ? new Date(match[1], match[2] - 1, match[3]) : undefined; + }, + is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); }, + equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); }, + pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/, + capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/ + }, + json: { + encode: angular.toJson, + decode: angular.fromJson, + is: angular.isObject, + equals: angular.equals, + pattern: /[^/]*/ + }, + any: { // does not encode/decode + encode: angular.identity, + decode: angular.identity, + is: angular.identity, + equals: angular.equals, + pattern: /.*/ + } + }; + + function getDefaultConfig() { + return { + strict: isStrictMode, + caseInsensitive: isCaseInsensitive + }; + } + + function isInjectable(value) { + return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1]))); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + $UrlMatcherFactory.$$getDefaultValue = function(config) { + if (!isInjectable(config.value)) return config.value; + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + return injector.invoke(config.value); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#caseInsensitive + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URL matching should be case sensitive (the default behavior), or not. + * + * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`; + * @returns {boolean} the current value of caseInsensitive + */ + this.caseInsensitive = function(value) { + if (isDefined(value)) + isCaseInsensitive = value; + return isCaseInsensitive; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#strictMode + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URLs should match trailing slashes, or not (the default behavior). + * + * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`. + * @returns {boolean} the current value of strictMode + */ + this.strictMode = function(value) { + if (isDefined(value)) + isStrictMode = value; + return isStrictMode; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Sets the default behavior when generating or matching URLs with default parameter values. + * + * @param {string} value A string that defines the default parameter URL squashing behavior. + * `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL + * `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the + * parameter is surrounded by slashes, squash (remove) one slash from the URL + * any other string, e.g. "~": When generating an href with a default parameter value, squash (remove) + * the parameter value from the URL and replace it with this string. + */ + this.defaultSquashPolicy = function(value) { + if (!isDefined(value)) return defaultSquashPolicy; + if (value !== true && value !== false && !isString(value)) + throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string"); + defaultSquashPolicy = value; + return value; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#compile + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern. + * + * @param {string} pattern The URL pattern. + * @param {Object} config The config object hash. + * @returns {UrlMatcher} The UrlMatcher. + */ + this.compile = function (pattern, config) { + return new UrlMatcher(pattern, extend(getDefaultConfig(), config)); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#isMatcher + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Returns true if the specified object is a `UrlMatcher`, or false otherwise. + * + * @param {Object} object The object to perform the type check against. + * @returns {Boolean} Returns `true` if the object matches the `UrlMatcher` interface, by + * implementing all the same methods. + */ + this.isMatcher = function (o) { + if (!isObject(o)) return false; + var result = true; + + forEach(UrlMatcher.prototype, function(val, name) { + if (isFunction(val)) { + result = result && (isDefined(o[name]) && isFunction(o[name])); + } + }); + return result; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#type + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to + * generate URLs with typed parameters. + * + * @param {string} name The type name. + * @param {Object|Function} definition The type definition. See + * {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * @param {Object|Function} definitionFn (optional) A function that is injected before the app + * runtime starts. The result of this function is merged into the existing `definition`. + * See {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * + * @returns {Object} Returns `$urlMatcherFactoryProvider`. + * + * @example + * This is a simple example of a custom type that encodes and decodes items from an + * array, using the array index as the URL-encoded value: + * + *
      +   * var list = ['John', 'Paul', 'George', 'Ringo'];
      +   *
      +   * $urlMatcherFactoryProvider.type('listItem', {
      +   *   encode: function(item) {
      +   *     // Represent the list item in the URL using its corresponding index
      +   *     return list.indexOf(item);
      +   *   },
      +   *   decode: function(item) {
      +   *     // Look up the list item by index
      +   *     return list[parseInt(item, 10)];
      +   *   },
      +   *   is: function(item) {
      +   *     // Ensure the item is valid by checking to see that it appears
      +   *     // in the list
      +   *     return list.indexOf(item) > -1;
      +   *   }
      +   * });
      +   *
      +   * $stateProvider.state('list', {
      +   *   url: "/list/{item:listItem}",
      +   *   controller: function($scope, $stateParams) {
      +   *     console.log($stateParams.item);
      +   *   }
      +   * });
      +   *
      +   * // ...
      +   *
      +   * // Changes URL to '/list/3', logs "Ringo" to the console
      +   * $state.go('list', { item: "Ringo" });
      +   * 
      + * + * This is a more complex example of a type that relies on dependency injection to + * interact with services, and uses the parameter name from the URL to infer how to + * handle encoding and decoding parameter values: + * + *
      +   * // Defines a custom type that gets a value from a service,
      +   * // where each service gets different types of values from
      +   * // a backend API:
      +   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {
      +   *
      +   *   // Matches up services to URL parameter names
      +   *   var services = {
      +   *     user: Users,
      +   *     post: Posts
      +   *   };
      +   *
      +   *   return {
      +   *     encode: function(object) {
      +   *       // Represent the object in the URL using its unique ID
      +   *       return object.id;
      +   *     },
      +   *     decode: function(value, key) {
      +   *       // Look up the object by ID, using the parameter
      +   *       // name (key) to call the correct service
      +   *       return services[key].findById(value);
      +   *     },
      +   *     is: function(object, key) {
      +   *       // Check that object is a valid dbObject
      +   *       return angular.isObject(object) && object.id && services[key];
      +   *     }
      +   *     equals: function(a, b) {
      +   *       // Check the equality of decoded objects by comparing
      +   *       // their unique IDs
      +   *       return a.id === b.id;
      +   *     }
      +   *   };
      +   * });
      +   *
      +   * // In a config() block, you can then attach URLs with
      +   * // type-annotated parameters:
      +   * $stateProvider.state('users', {
      +   *   url: "/users",
      +   *   // ...
      +   * }).state('users.item', {
      +   *   url: "/{user:dbObject}",
      +   *   controller: function($scope, $stateParams) {
      +   *     // $stateParams.user will now be an object returned from
      +   *     // the Users service
      +   *   },
      +   *   // ...
      +   * });
      +   * 
      + */ + this.type = function (name, definition, definitionFn) { + if (!isDefined(definition)) return $types[name]; + if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined."); + + $types[name] = new Type(extend({ name: name }, definition)); + if (definitionFn) { + typeQueue.push({ name: name, def: definitionFn }); + if (!enqueue) flushTypeQueue(); + } + return this; + }; + + // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s + function flushTypeQueue() { + while(typeQueue.length) { + var type = typeQueue.shift(); + if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime."); + angular.extend($types[type.name], injector.invoke(type.def)); + } + } + + // Register default types. Store them in the prototype of $types. + forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); }); + $types = inherit($types, {}); + + /* No need to document $get, since it returns this */ + this.$get = ['$injector', function ($injector) { + injector = $injector; + enqueue = false; + flushTypeQueue(); + + forEach(defaultTypes, function(type, name) { + if (!$types[name]) $types[name] = new Type(type); + }); + return this; + }]; + + this.Param = function Param(id, type, config, location) { + var self = this; + config = unwrapShorthand(config); + type = getType(config, type, location); + var arrayMode = getArrayMode(); + type = arrayMode ? type.$asArray(arrayMode, location === "search") : type; + if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined) + config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to "" + var isOptional = config.value !== undefined; + var squash = getSquashPolicy(config, isOptional); + var replace = getReplace(config, arrayMode, isOptional, squash); + + function unwrapShorthand(config) { + var keys = isObject(config) ? objectKeys(config) : []; + var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 && + indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1; + if (isShorthand) config = { value: config }; + config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; }; + return config; + } + + function getType(config, urlType, location) { + if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations."); + if (urlType) return urlType; + if (!config.type) return (location === "config" ? $types.any : $types.string); + return config.type instanceof Type ? config.type : new Type(config.type); + } + + // array config: param name (param[]) overrides default settings. explicit config overrides param name. + function getArrayMode() { + var arrayDefaults = { array: (location === "search" ? "auto" : false) }; + var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {}; + return extend(arrayDefaults, arrayParamNomenclature, config).array; + } + + /** + * returns false, true, or the squash value to indicate the "default parameter url squash policy". + */ + function getSquashPolicy(config, isOptional) { + var squash = config.squash; + if (!isOptional || squash === false) return false; + if (!isDefined(squash) || squash == null) return defaultSquashPolicy; + if (squash === true || isString(squash)) return squash; + throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string"); + } + + function getReplace(config, arrayMode, isOptional, squash) { + var replace, configuredKeys, defaultPolicy = [ + { from: "", to: (isOptional || arrayMode ? undefined : "") }, + { from: null, to: (isOptional || arrayMode ? undefined : "") } + ]; + replace = isArray(config.replace) ? config.replace : []; + if (isString(squash)) + replace.push({ from: squash, to: undefined }); + configuredKeys = map(replace, function(item) { return item.from; } ); + return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + function $$getDefaultValue() { + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + return injector.invoke(config.$$fn); + } + + /** + * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the + * default value, which may be the result of an injectable function. + */ + function $value(value) { + function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; } + function $replace(value) { + var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; }); + return replacement.length ? replacement[0] : value; + } + value = $replace(value); + return isDefined(value) ? self.type.decode(value) : $$getDefaultValue(); + } + + function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; } + + extend(this, { + id: id, + type: type, + location: location, + array: arrayMode, + squash: squash, + replace: replace, + isOptional: isOptional, + value: $value, + dynamic: undefined, + config: config, + toString: toString + }); + }; + + function ParamSet(params) { + extend(this, params || {}); + } + + ParamSet.prototype = { + $$new: function() { + return inherit(this, extend(new ParamSet(), { $$parent: this})); + }, + $$keys: function () { + var keys = [], chain = [], parent = this, + ignore = objectKeys(ParamSet.prototype); + while (parent) { chain.push(parent); parent = parent.$$parent; } + chain.reverse(); + forEach(chain, function(paramset) { + forEach(objectKeys(paramset), function(key) { + if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key); + }); + }); + return keys; + }, + $$values: function(paramValues) { + var values = {}, self = this; + forEach(self.$$keys(), function(key) { + values[key] = self[key].value(paramValues && paramValues[key]); + }); + return values; + }, + $$equals: function(paramValues1, paramValues2) { + var equal = true, self = this; + forEach(self.$$keys(), function(key) { + var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key]; + if (!self[key].type.equals(left, right)) equal = false; + }); + return equal; + }, + $$validates: function $$validate(paramValues) { + var result = true, isOptional, val, param, self = this; + + forEach(this.$$keys(), function(key) { + param = self[key]; + val = paramValues[key]; + isOptional = !val && param.isOptional; + result = result && (isOptional || !!param.type.is(val)); + }); + return result; + }, + $$parent: undefined + }; + + this.ParamSet = ParamSet; +} + +// Register as a provider so it's available to other providers +angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory); +angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]); diff --git a/vendor/assets/components/angular-ui-router/src/urlRouter.js b/vendor/assets/components/angular-ui-router/src/urlRouter.js new file mode 100644 index 000000000..2b2293762 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/urlRouter.js @@ -0,0 +1,413 @@ +/** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider + * + * @requires ui.router.util.$urlMatcherFactoryProvider + * @requires $locationProvider + * + * @description + * `$urlRouterProvider` has the responsibility of watching `$location`. + * When `$location` changes it runs through a list of rules one by one until a + * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify + * a url in a state configuration. All urls are compiled into a UrlMatcher object. + * + * There are several methods on `$urlRouterProvider` that make it useful to use directly + * in your module config. + */ +$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider']; +function $UrlRouterProvider( $locationProvider, $urlMatcherFactory) { + var rules = [], otherwise = null, interceptDeferred = false, listener; + + // Returns a string that is a prefix of all strings matching the RegExp + function regExpPrefix(re) { + var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source); + return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : ''; + } + + // Interpolates matched values into a String.replace()-style pattern + function interpolate(pattern, match) { + return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) { + return match[what === '$' ? 0 : Number(what)]; + }); + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#rule + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines rules that are used by `$urlRouterProvider` to find matches for + * specific URLs. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *   // Here's an example of how you might allow case insensitive urls
      +   *   $urlRouterProvider.rule(function ($injector, $location) {
      +   *     var path = $location.path(),
      +   *         normalized = path.toLowerCase();
      +   *
      +   *     if (path !== normalized) {
      +   *       return normalized;
      +   *     }
      +   *   });
      +   * });
      +   * 
      + * + * @param {object} rule Handler function that takes `$injector` and `$location` + * services as arguments. You can use them to return a valid path as a string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.rule = function (rule) { + if (!isFunction(rule)) throw new Error("'rule' must be a function"); + rules.push(rule); + return this; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider#otherwise + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines a path that is used when an invalid route is requested. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *   // if the path doesn't match any of the urls you configured
      +   *   // otherwise will take care of routing the user to the
      +   *   // specified url
      +   *   $urlRouterProvider.otherwise('/index');
      +   *
      +   *   // Example of using function rule as param
      +   *   $urlRouterProvider.otherwise(function ($injector, $location) {
      +   *     return '/a/valid/url';
      +   *   });
      +   * });
      +   * 
      + * + * @param {string|object} rule The url path you want to redirect to or a function + * rule that returns the url path. The function version is passed two params: + * `$injector` and `$location` services, and must return a url string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.otherwise = function (rule) { + if (isString(rule)) { + var redirect = rule; + rule = function () { return redirect; }; + } + else if (!isFunction(rule)) throw new Error("'rule' must be a function"); + otherwise = rule; + return this; + }; + + + function handleIfMatch($injector, handler, match) { + if (!match) return false; + var result = $injector.invoke(handler, handler, { $match: match }); + return isDefined(result) ? result : true; + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#when + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Registers a handler for a given url matching. if handle is a string, it is + * treated as a redirect, and is interpolated according to the syntax of match + * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise). + * + * If the handler is a function, it is injectable. It gets invoked if `$location` + * matches. You have the option of inject the match object as `$match`. + * + * The handler can return + * + * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter` + * will continue trying to find another one that matches. + * - **string** which is treated as a redirect and passed to `$location.url()` + * - **void** or any **truthy** value tells `$urlRouter` that the url was handled. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {
      +   *     if ($state.$current.navigable !== state ||
      +   *         !equalForKeys($match, $stateParams) {
      +   *      $state.transitionTo(state, $match, false);
      +   *     }
      +   *   });
      +   * });
      +   * 
      + * + * @param {string|object} what The incoming path that you want to redirect. + * @param {string|object} handler The path you want to redirect your user to. + */ + this.when = function (what, handler) { + var redirect, handlerIsString = isString(handler); + if (isString(what)) what = $urlMatcherFactory.compile(what); + + if (!handlerIsString && !isFunction(handler) && !isArray(handler)) + throw new Error("invalid 'handler' in when()"); + + var strategies = { + matcher: function (what, handler) { + if (handlerIsString) { + redirect = $urlMatcherFactory.compile(handler); + handler = ['$match', function ($match) { return redirect.format($match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path(), $location.search())); + }, { + prefix: isString(what.prefix) ? what.prefix : '' + }); + }, + regex: function (what, handler) { + if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky"); + + if (handlerIsString) { + redirect = handler; + handler = ['$match', function ($match) { return interpolate(redirect, $match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path())); + }, { + prefix: regExpPrefix(what) + }); + } + }; + + var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp }; + + for (var n in check) { + if (check[n]) return this.rule(strategies[n](what, handler)); + } + + throw new Error("invalid 'what' in when()"); + }; + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#deferIntercept + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Disables (or enables) deferring location change interception. + * + * If you wish to customize the behavior of syncing the URL (for example, if you wish to + * defer a transition but maintain the current URL), call this method at configuration time. + * Then, at run time, call `$urlRouter.listen()` after you have configured your own + * `$locationChangeSuccess` event handler. + * + * @example + *
      +   * var app = angular.module('app', ['ui.router.router']);
      +   *
      +   * app.config(function ($urlRouterProvider) {
      +   *
      +   *   // Prevent $urlRouter from automatically intercepting URL changes;
      +   *   // this allows you to configure custom behavior in between
      +   *   // location changes and route synchronization:
      +   *   $urlRouterProvider.deferIntercept();
      +   *
      +   * }).run(function ($rootScope, $urlRouter, UserService) {
      +   *
      +   *   $rootScope.$on('$locationChangeSuccess', function(e) {
      +   *     // UserService is an example service for managing user state
      +   *     if (UserService.isLoggedIn()) return;
      +   *
      +   *     // Prevent $urlRouter's default handler from firing
      +   *     e.preventDefault();
      +   *
      +   *     UserService.handleLogin().then(function() {
      +   *       // Once the user has logged in, sync the current URL
      +   *       // to the router:
      +   *       $urlRouter.sync();
      +   *     });
      +   *   });
      +   *
      +   *   // Configures $urlRouter's listener *after* your custom listener
      +   *   $urlRouter.listen();
      +   * });
      +   * 
      + * + * @param {boolean} defer Indicates whether to defer location change interception. Passing + no parameter is equivalent to `true`. + */ + this.deferIntercept = function (defer) { + if (defer === undefined) defer = true; + interceptDeferred = defer; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouter + * + * @requires $location + * @requires $rootScope + * @requires $injector + * @requires $browser + * + * @description + * + */ + this.$get = $get; + $get.$inject = ['$location', '$rootScope', '$injector', '$browser']; + function $get( $location, $rootScope, $injector, $browser) { + + var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl; + + function appendBasePath(url, isHtml5, absolute) { + if (baseHref === '/') return url; + if (isHtml5) return baseHref.slice(0, -1) + url; + if (absolute) return baseHref.slice(1) + url; + return url; + } + + // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree + function update(evt) { + if (evt && evt.defaultPrevented) return; + var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl; + lastPushedUrl = undefined; + if (ignoreUpdate) return true; + + function check(rule) { + var handled = rule($injector, $location); + + if (!handled) return false; + if (isString(handled)) $location.replace().url(handled); + return true; + } + var n = rules.length, i; + + for (i = 0; i < n; i++) { + if (check(rules[i])) return; + } + // always check otherwise last to allow dynamic updates to the set of rules + if (otherwise) check(otherwise); + } + + function listen() { + listener = listener || $rootScope.$on('$locationChangeSuccess', update); + return listener; + } + + if (!interceptDeferred) listen(); + + return { + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#sync + * @methodOf ui.router.router.$urlRouter + * + * @description + * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`. + * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, + * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed + * with the transition by calling `$urlRouter.sync()`. + * + * @example + *
      +       * angular.module('app', ['ui.router'])
      +       *   .run(function($rootScope, $urlRouter) {
      +       *     $rootScope.$on('$locationChangeSuccess', function(evt) {
      +       *       // Halt state change from even starting
      +       *       evt.preventDefault();
      +       *       // Perform custom logic
      +       *       var meetsRequirement = ...
      +       *       // Continue with the update and state transition if logic allows
      +       *       if (meetsRequirement) $urlRouter.sync();
      +       *     });
      +       * });
      +       * 
      + */ + sync: function() { + update(); + }, + + listen: function() { + return listen(); + }, + + update: function(read) { + if (read) { + location = $location.url(); + return; + } + if ($location.url() === location) return; + + $location.url(location); + $location.replace(); + }, + + push: function(urlMatcher, params, options) { + $location.url(urlMatcher.format(params || {})); + lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined; + if (options && options.replace) $location.replace(); + }, + + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#href + * @methodOf ui.router.router.$urlRouter + * + * @description + * A URL generation method that returns the compiled URL for a given + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters. + * + * @example + *
      +       * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), {
      +       *   person: "bob"
      +       * });
      +       * // $bob == "/about/bob";
      +       * 
      + * + * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate. + * @param {object=} params An object of parameter values to fill the matcher's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher` + */ + href: function(urlMatcher, params, options) { + if (!urlMatcher.validates(params)) return null; + + var isHtml5 = $locationProvider.html5Mode(); + if (angular.isObject(isHtml5)) { + isHtml5 = isHtml5.enabled; + } + + var url = urlMatcher.format(params); + options = options || {}; + + if (!isHtml5 && url !== null) { + url = "#" + $locationProvider.hashPrefix() + url; + } + url = appendBasePath(url, isHtml5, options.absolute); + + if (!options.absolute || !url) { + return url; + } + + var slash = (!isHtml5 && url ? '/' : ''), port = $location.port(); + port = (port === 80 || port === 443 ? '' : ':' + port); + + return [$location.protocol(), '://', $location.host(), port, slash, url].join(''); + } + }; + } +} + +angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider); diff --git a/vendor/assets/components/angular-ui-router/src/view.js b/vendor/assets/components/angular-ui-router/src/view.js new file mode 100644 index 000000000..f19a3c569 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/view.js @@ -0,0 +1,71 @@ + +$ViewProvider.$inject = []; +function $ViewProvider() { + + this.$get = $get; + /** + * @ngdoc object + * @name ui.router.state.$view + * + * @requires ui.router.util.$templateFactory + * @requires $rootScope + * + * @description + * + */ + $get.$inject = ['$rootScope', '$templateFactory']; + function $get( $rootScope, $templateFactory) { + return { + // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) + /** + * @ngdoc function + * @name ui.router.state.$view#load + * @methodOf ui.router.state.$view + * + * @description + * + * @param {string} name name + * @param {object} options option object. + */ + load: function load(name, options) { + var result, defaults = { + template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} + }; + options = extend(defaults, options); + + if (options.view) { + result = $templateFactory.fromConfig(options.view, options.params, options.locals); + } + if (result && options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$viewContentLoading + * @eventOf ui.router.state.$view + * @eventType broadcast on root scope + * @description + * + * Fired once the view **begins loading**, *before* the DOM is rendered. + * + * @param {Object} event Event object. + * @param {Object} viewConfig The view config properties (template, controller, etc). + * + * @example + * + *
      +         * $scope.$on('$viewContentLoading',
      +         * function(event, viewConfig){
      +         *     // Access to all the view config properties.
      +         *     // and one special property 'targetView'
      +         *     // viewConfig.targetView
      +         * });
      +         * 
      + */ + $rootScope.$broadcast('$viewContentLoading', options); + } + return result; + } + }; + } +} + +angular.module('ui.router.state').provider('$view', $ViewProvider); diff --git a/vendor/assets/components/angular-ui-router/src/viewDirective.js b/vendor/assets/components/angular-ui-router/src/viewDirective.js new file mode 100644 index 000000000..d3cf100a2 --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/viewDirective.js @@ -0,0 +1,302 @@ +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-view + * + * @requires ui.router.state.$state + * @requires $compile + * @requires $controller + * @requires $injector + * @requires ui.router.state.$uiViewScroll + * @requires $document + * + * @restrict ECA + * + * @description + * The ui-view directive tells $state where to place your templates. + * + * @param {string=} name A view name. The name should be unique amongst the other views in the + * same state. You can have views of the same name that live in different states. + * + * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window + * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll + * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you + * scroll ui-view elements into view when they are populated during a state activation. + * + * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) + * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.* + * + * @param {string=} onload Expression to evaluate whenever the view updates. + * + * @example + * A view can be unnamed or named. + *
      + * 
      + * 
      + * + * + *
      + *
      + * + * You can only have one unnamed view within any template (or root html). If you are only using a + * single view and it is unnamed then you can populate it like so: + *
      + * 
      + * $stateProvider.state("home", { + * template: "

      HELLO!

      " + * }) + *
      + * + * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`} + * config property, by name, in this case an empty name: + *
      + * $stateProvider.state("home", {
      + *   views: {
      + *     "": {
      + *       template: "

      HELLO!

      " + * } + * } + * }) + *
      + * + * But typically you'll only use the views property if you name your view or have more than one view + * in the same template. There's not really a compelling reason to name a view if its the only one, + * but you could if you wanted, like so: + *
      + * 
      + *
      + *
      + * $stateProvider.state("home", {
      + *   views: {
      + *     "main": {
      + *       template: "

      HELLO!

      " + * } + * } + * }) + *
      + * + * Really though, you'll use views to set up multiple views: + *
      + * 
      + *
      + *
      + *
      + * + *
      + * $stateProvider.state("home", {
      + *   views: {
      + *     "": {
      + *       template: "

      HELLO!

      " + * }, + * "chart": { + * template: "" + * }, + * "data": { + * template: "" + * } + * } + * }) + *
      + * + * Examples for `autoscroll`: + * + *
      + * 
      + * 
      + *
      + * 
      + * 
      + * 
      + * 
      + * 
      + */ +$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate']; +function $ViewDirective( $state, $injector, $uiViewScroll, $interpolate) { + + function getService() { + return ($injector.has) ? function(service) { + return $injector.has(service) ? $injector.get(service) : null; + } : function(service) { + try { + return $injector.get(service); + } catch (e) { + return null; + } + }; + } + + var service = getService(), + $animator = service('$animator'), + $animate = service('$animate'); + + // Returns a set of DOM manipulation functions based on which Angular version + // it should use + function getRenderer(attrs, scope) { + var statics = function() { + return { + enter: function (element, target, cb) { target.after(element); cb(); }, + leave: function (element, cb) { element.remove(); cb(); } + }; + }; + + if ($animate) { + return { + enter: function(element, target, cb) { + var promise = $animate.enter(element, null, target, cb); + if (promise && promise.then) promise.then(cb); + }, + leave: function(element, cb) { + var promise = $animate.leave(element, cb); + if (promise && promise.then) promise.then(cb); + } + }; + } + + if ($animator) { + var animate = $animator && $animator(scope, attrs); + + return { + enter: function(element, target, cb) {animate.enter(element, null, target); cb(); }, + leave: function(element, cb) { animate.leave(element); cb(); } + }; + } + + return statics(); + } + + var directive = { + restrict: 'ECA', + terminal: true, + priority: 400, + transclude: 'element', + compile: function (tElement, tAttrs, $transclude) { + return function (scope, $element, attrs) { + var previousEl, currentEl, currentScope, latestLocals, + onloadExp = attrs.onload || '', + autoScrollExp = attrs.autoscroll, + renderer = getRenderer(attrs, scope); + + scope.$on('$stateChangeSuccess', function() { + updateView(false); + }); + scope.$on('$viewContentLoading', function() { + updateView(false); + }); + + updateView(true); + + function cleanupLastView() { + if (previousEl) { + previousEl.remove(); + previousEl = null; + } + + if (currentScope) { + currentScope.$destroy(); + currentScope = null; + } + + if (currentEl) { + renderer.leave(currentEl, function() { + previousEl = null; + }); + + previousEl = currentEl; + currentEl = null; + } + } + + function updateView(firstTime) { + var newScope, + name = getUiViewName(scope, attrs, $element, $interpolate), + previousLocals = name && $state.$current && $state.$current.locals[name]; + + if (!firstTime && previousLocals === latestLocals) return; // nothing to do + newScope = scope.$new(); + latestLocals = $state.$current.locals[name]; + + var clone = $transclude(newScope, function(clone) { + renderer.enter(clone, $element, function onUiViewEnter() { + if(currentScope) { + currentScope.$emit('$viewContentAnimationEnded'); + } + + if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) { + $uiViewScroll(clone); + } + }); + cleanupLastView(); + }); + + currentEl = clone; + currentScope = newScope; + /** + * @ngdoc event + * @name ui.router.state.directive:ui-view#$viewContentLoaded + * @eventOf ui.router.state.directive:ui-view + * @eventType emits on ui-view directive scope + * @description * + * Fired once the view is **loaded**, *after* the DOM is rendered. + * + * @param {Object} event Event object. + */ + currentScope.$emit('$viewContentLoaded'); + currentScope.$eval(onloadExp); + } + }; + } + }; + + return directive; +} + +$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate']; +function $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) { + return { + restrict: 'ECA', + priority: -400, + compile: function (tElement) { + var initial = tElement.html(); + return function (scope, $element, attrs) { + var current = $state.$current, + name = getUiViewName(scope, attrs, $element, $interpolate), + locals = current && current.locals[name]; + + if (! locals) { + return; + } + + $element.data('$uiView', { name: name, state: locals.$$state }); + $element.html(locals.$template ? locals.$template : initial); + + var link = $compile($element.contents()); + + if (locals.$$controller) { + locals.$scope = scope; + var controller = $controller(locals.$$controller, locals); + if (locals.$$controllerAs) { + scope[locals.$$controllerAs] = controller; + } + $element.data('$ngControllerController', controller); + $element.children().data('$ngControllerController', controller); + } + + link(scope); + }; + } + }; +} + +/** + * Shared ui-view code for both directives: + * Given scope, element, and its attributes, return the view's name + */ +function getUiViewName(scope, attrs, element, $interpolate) { + var name = $interpolate(attrs.uiView || attrs.name || '')(scope); + var inherited = element.inheritedData('$uiView'); + return name.indexOf('@') >= 0 ? name : (name + '@' + (inherited ? inherited.state.name : '')); +} + +angular.module('ui.router.state').directive('uiView', $ViewDirective); +angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill); diff --git a/vendor/assets/components/angular-ui-router/src/viewScroll.js b/vendor/assets/components/angular-ui-router/src/viewScroll.js new file mode 100644 index 000000000..dfe0a030d --- /dev/null +++ b/vendor/assets/components/angular-ui-router/src/viewScroll.js @@ -0,0 +1,52 @@ +/** + * @ngdoc object + * @name ui.router.state.$uiViewScrollProvider + * + * @description + * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. + */ +function $ViewScrollProvider() { + + var useAnchorScroll = false; + + /** + * @ngdoc function + * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll + * @methodOf ui.router.state.$uiViewScrollProvider + * + * @description + * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for + * scrolling based on the url anchor. + */ + this.useAnchorScroll = function () { + useAnchorScroll = true; + }; + + /** + * @ngdoc object + * @name ui.router.state.$uiViewScroll + * + * @requires $anchorScroll + * @requires $timeout + * + * @description + * When called with a jqLite element, it scrolls the element into view (after a + * `$timeout` so the DOM has time to refresh). + * + * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, + * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. + */ + this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { + if (useAnchorScroll) { + return $anchorScroll; + } + + return function ($element) { + $timeout(function () { + $element[0].scrollIntoView(); + }, 0, false); + }; + }]; +} + +angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); diff --git a/vendor/assets/components/angular-ui-select2/.bower.json b/vendor/assets/components/angular-ui-select2/.bower.json new file mode 100644 index 000000000..570a2967d --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/.bower.json @@ -0,0 +1,29 @@ +{ + "author": "AngularUI", + "name": "angular-ui-select2", + "version": "0.0.5", + "homepage": "http://angular-ui.github.com", + "keywords": [ + "angular", + "angularui", + "select2" + ], + "main": "./src/select2.js", + "dependencies": { + "angular": ">=1.2.0", + "select2": "~3.4", + "jquery": ">=1.6.4" + }, + "devDependencies": { + "angular-mocks": ">=1.0.2" + }, + "_release": "0.0.5", + "_resolution": { + "type": "version", + "tag": "v0.0.5", + "commit": "680bf4abb3dba0835f0d5002fe111e3396ae617e" + }, + "_source": "git://github.com/angular-ui/ui-select2.git", + "_target": ">=0.0.5", + "_originalSource": "angular-ui-select2" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-ui-select2/.bowerrc b/vendor/assets/components/angular-ui-select2/.bowerrc new file mode 100644 index 000000000..deceb62e1 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "bower_components" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-ui-select2/.gitignore b/vendor/assets/components/angular-ui-select2/.gitignore new file mode 100644 index 000000000..a088b6f05 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/.gitignore @@ -0,0 +1,2 @@ +node_modules +bower_components diff --git a/vendor/assets/components/angular-ui-select2/.jshintrc b/vendor/assets/components/angular-ui-select2/.jshintrc new file mode 100644 index 000000000..1b83bfb44 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/.jshintrc @@ -0,0 +1,11 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": true, + "newcap": true, + "noarg": true, + "sub": true, + "boss": true, + "eqnull": true +} diff --git a/vendor/assets/components/angular-ui-select2/.travis.yml b/vendor/assets/components/angular-ui-select2/.travis.yml new file mode 100644 index 000000000..7865159e2 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/.travis.yml @@ -0,0 +1,13 @@ + language: node_js + node_js: + - "0.8" + - "0.10" + + before_install: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + - npm install -g karma bower grunt-cli + - bower install + - npm install + + script: "grunt" diff --git a/vendor/assets/components/angular-ui-select2/CONTRIBUTING.md b/vendor/assets/components/angular-ui-select2/CONTRIBUTING.md new file mode 100644 index 000000000..cb66f02b0 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/CONTRIBUTING.md @@ -0,0 +1,8 @@ +CONTRIBUTING +============ + +* Open a [Pull Request (PR)](https://github.com/angular-ui/ui-select2/pull/new/master) +* Make sure your PR is on a **new branch** you created off of the latest version of master +* Do **not** open a PR from your master branch +* Open a PR to start a discussion even if the code isn't finished (easier to collect feedback this way) +* Make sure all previous tests pass and add new tests for added behaviors diff --git a/vendor/assets/components/angular-ui-select2/Gruntfile.js b/vendor/assets/components/angular-ui-select2/Gruntfile.js new file mode 100644 index 000000000..ea8dc33c6 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/Gruntfile.js @@ -0,0 +1,56 @@ +module.exports = function (grunt) { + 'use strict'; + + var initConfig; + + // Loading external tasks + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-karma'); + + // Project configuration. + initConfig = { + bower: 'bower_components', + pkg: grunt.file.readJSON('package.json'), + watch: { + test: { + // Lint & run unit tests in Karma + // Just running `$ grunt watch` will only lint your code; to run tests + // on watch, use `$ grunt watch:karma` to start a Karma server first + files: ['src/select2.js', 'test/select2Spec.js'], + tasks: ['jshint', 'karma:unit:run'] + } + }, + karma: { + options: { + configFile: 'test/karma.conf.js', + browsers: ['Firefox', 'PhantomJS'] + }, + unit: { + singleRun: true + }, + watch: { + autoWatch: true + }, + server: { + background: true + } + }, + jshint: { + all:[ + 'gruntFile.js', + 'src/**/*.js', + 'test/**/*Spec.js' + ], + options: { + jshintrc: '.jshintrc' + } + }, + }; + + // Register tasks + grunt.registerTask('default', ['jshint', 'karma:unit']); + grunt.registerTask('watch', ['jshint', 'karma:watch']); + + grunt.initConfig(initConfig); +}; diff --git a/vendor/assets/components/angular-ui-select2/LICENSE b/vendor/assets/components/angular-ui-select2/LICENSE new file mode 100644 index 000000000..dfc5e0ca1 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/assets/components/angular-ui-select2/README.md b/vendor/assets/components/angular-ui-select2/README.md new file mode 100644 index 000000000..feb362608 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/README.md @@ -0,0 +1,165 @@ +ui-select2 [![Build Status](https://travis-ci.org/angular-ui/ui-select2.png)](https://travis-ci.org/angular-ui/ui-select2) +========== +This directive allows you to enhance your select elements with behaviour from the [select2](http://ivaynberg.github.io/select2/) library. + +# Requirements + +- [AngularJS](http://angularjs.org/) +- [JQuery](http://jquery.com/) +- [Select2](http://ivaynberg.github.io/select2/) + +## Setup + +1. Install **Karma**, **Grunt** and **Bower** + `$ npm install -g karma grunt-cli bower` +2. Install development dependencies + `$ npm install` +3. Install components + `$ bower install` +4. ??? +5. Profit! + +## Testing + +We use [Grunt](http://gruntjs.com/) to check for JavaScript syntax errors and execute all unit tests. To run Grunt, simply execute: + +`$ grunt` + +This will lint and test the code, then exit. To have Grunt stay open and automatically lint and test your files whenever you make a code change, use: + +`$ grunt karma:server watch` + +This will start a Karma server in the background and run unit tests in Firefox and PhantomJS whenever the source code or spec file is saved. + +# Usage + +We use [bower](https://github.com/bower/bower) for dependency management. Install AngularUI Select2 into your project by running the command + +`$ bower install angular-ui-select2` + +If you use a `bower.json` file in your project, you can have Bower save ui-select2 as a dependency by passing the `--save` or `--save-dev` flag with the above command. + +This will copy the ui-select2 files into your `bower_components` folder, along with its dependencies. Load the script files in your application: +```html + + + + + +``` + +(Note that `jquery` must be loaded before `angular` so that it doesn't use `jqLite` internally) + + +Add the select2 module as a dependency to your application module: + +```javascript +var myAppModule = angular.module('MyApp', ['ui.select2']); +``` + +Apply the directive to your form elements: + +```html + +``` + +## Options + +All the select2 options can be passed through the directive. You can read more about the supported list of options and what they do on the [Select2 Documentation Page](http://ivaynberg.github.com/select2/) + +```javascript +myAppModule.controller('MyController', function($scope) { + $scope.select2Options = { + allowClear:true + }; +}); +``` + +```html + +``` + +Some time it may make sense to specify the options in the template file. + +```html + +``` + +## Working with ng-model + +The ui-select2 directive plays nicely with ng-model and validation directives such as ng-required. + +If you add the ng-model directive to same the element as ui-select2 then the picked option is automatically synchronized with the model value. + +## Working with dynamic options +`ui-select2` is incompatible with ` + + + +``` + +## Working with placeholder text +In order to properly support the Select2 placeholder, create an empty ` + + + + +``` + +## ng-required directive + +If you apply the required directive to element then the form element is invalid until an option is selected. + +Note: Remember that the ng-required directive must be explicitly set, i.e. to "true". This is especially true on divs: + +```html + +``` + +## Using simple tagging mode + +When AngularJS View-Model tags are stored as a list of strings, setting +the ui-select2 specific option `simple_tags` will allow to keep the model +as a list of strings, and not convert it into a list of Select2 tag objects. + +```html + +``` + +```javascript +myAppModule.controller('MyController', function($scope) { + $scope.list_of_string = ['tag1', 'tag2'] + $scope.select2Options = { + 'multiple': true, + 'simple_tags': true, + 'tags': ['tag1', 'tag2', 'tag3', 'tag4'] // Can be empty list. + }; +}); +``` diff --git a/vendor/assets/components/angular-ui-select2/bower.json b/vendor/assets/components/angular-ui-select2/bower.json new file mode 100644 index 000000000..2cf5041e1 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/bower.json @@ -0,0 +1,20 @@ +{ + "author": "AngularUI", + "name": "angular-ui-select2", + "version": "0.0.5", + "homepage": "http://angular-ui.github.com", + "keywords": [ + "angular", + "angularui", + "select2" + ], + "main": "./src/select2.js", + "dependencies": { + "angular": ">=1.2.0", + "select2": "~3.4", + "jquery": ">=1.6.4" + }, + "devDependencies": { + "angular-mocks": ">=1.0.2" + } +} diff --git a/vendor/assets/components/angular-ui-select2/docs/index.html b/vendor/assets/components/angular-ui-select2/docs/index.html new file mode 100644 index 000000000..ff373e782 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/docs/index.html @@ -0,0 +1,47 @@ +
      + +
      +
      +

      Demo

      +
      +

      Value is: {{select2}} (choose second)

      + +
      + +
      +

      Value is: {{select2multiple}} (choose second)

      + +
      +
      +
      +

      Options

      +

      You can pass an object to Select2 as the expression: ui-select2="{allowClear:true}" that will be passed directly to $.fn.select2(). You can read more about the supported list of options and what they do on the Select2 Documentation Page. AngularUI will leverage properties passed to Select2 for any complex behavior, there are no parameters necessary for that are specific to AngularUI.

      +
      +
      +

      ui-select2 is incompatible with <select ng-options>. For the best results use <option ng-repeat> instead

      +

      In order to properly support the Select2 placeholder, create an empty <option> tag at the top of the <select> and either set a data-placeholder on the select element or pass a placeholder option to Select2.

      + +

      How?

      +
      +<p>Value is: {{select2}} <a ng-click="select2='two'">(choose second)</a></p>
      +<select ui-select2 ng-model="select2">
      +<option value="">Pick a number</option>
      +<option value="one">First</option>
      +<option value="two">Second</option>
      +<option value="three">Third</option>
      +</select>
      +
      +

      Or try playing around with this sandbox demo to see how AJAX works

      +
      \ No newline at end of file diff --git a/vendor/assets/components/angular-ui-select2/docs/styles.css b/vendor/assets/components/angular-ui-select2/docs/styles.css new file mode 100644 index 000000000..08611a479 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/docs/styles.css @@ -0,0 +1,4 @@ + +#directives-select2 select { + width: 200px; +} \ No newline at end of file diff --git a/vendor/assets/components/angular-ui-select2/package.json b/vendor/assets/components/angular-ui-select2/package.json new file mode 100644 index 000000000..fc0ccd6c8 --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/package.json @@ -0,0 +1,28 @@ +{ + "author": "https://github.com/angular-ui/ui-select2/graphs/contributors", + "name": "angular-ui-select2", + "keywords": [ + "angular", + "angularui", + "select2" + ], + "description": "AngularUI - The companion suite for AngularJS", + "version": "0.0.5", + "homepage": "http://angular-ui.github.com", + "repository": { + "type": "git", + "url": "git://github.com/angular-ui/ui-select2.git" + }, + "engines": { + "node": ">= 0.8.4" + }, + "dependencies": {}, + "devDependencies": { + "async": "0.1.x", + "grunt": "~0.4.1", + "grunt-contrib-jshint": "~0.6.4", + "grunt-contrib-watch": "~0.5.3", + "grunt-karma": "~0.6.2", + "karma": "~0.10.2" + } +} diff --git a/vendor/assets/components/angular-ui-select2/src/select2.js b/vendor/assets/components/angular-ui-select2/src/select2.js new file mode 100644 index 000000000..f81731c2e --- /dev/null +++ b/vendor/assets/components/angular-ui-select2/src/select2.js @@ -0,0 +1,212 @@ +/** + * Enhanced Select2 Dropmenus + * + * @AJAX Mode - When in this mode, your value will be an object (or array of objects) of the data used by Select2 + * This change is so that you do not have to do an additional query yourself on top of Select2's own query + * @params [options] {object} The configuration options passed to $.fn.select2(). Refer to the documentation + */ +angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelect2', ['uiSelect2Config', '$timeout', function (uiSelect2Config, $timeout) { + var options = {}; + if (uiSelect2Config) { + angular.extend(options, uiSelect2Config); + } + return { + require: 'ngModel', + priority: 1, + compile: function (tElm, tAttrs) { + var watch, + repeatOption, + repeatAttr, + isSelect = tElm.is('select'), + isMultiple = angular.isDefined(tAttrs.multiple); + + // Enable watching of the options dataset if in use + if (tElm.is('select')) { + repeatOption = tElm.find('option[ng-repeat], option[data-ng-repeat]'); + + if (repeatOption.length) { + repeatAttr = repeatOption.attr('ng-repeat') || repeatOption.attr('data-ng-repeat'); + watch = jQuery.trim(repeatAttr.split('|')[0]).split(' ').pop(); + } + } + + return function (scope, elm, attrs, controller) { + // instance-specific options + var opts = angular.extend({}, options, scope.$eval(attrs.uiSelect2)); + + /* + Convert from Select2 view-model to Angular view-model. + */ + var convertToAngularModel = function(select2_data) { + var model; + if (opts.simple_tags) { + model = []; + angular.forEach(select2_data, function(value, index) { + model.push(value.id); + }); + } else { + model = select2_data; + } + return model; + }; + + /* + Convert from Angular view-model to Select2 view-model. + */ + var convertToSelect2Model = function(angular_data) { + var model = []; + if (!angular_data) { + return model; + } + + if (opts.simple_tags) { + model = []; + angular.forEach( + angular_data, + function(value, index) { + model.push({'id': value, 'text': value}); + }); + } else { + model = angular_data; + } + return model; + }; + + if (isSelect) { + // Use element', function () { + describe('compiling this directive', function () { + it('should throw an error if we have no model defined', function () { + expect(function(){ + compile(''); + }).toThrow(); + }); + it('should create proper DOM structure', function () { + var element = compile(''); + expect(element.siblings().is('div.select2-container')).toBe(true); + }); + it('should not modify the model if there is no initial value', function(){ + //TODO + }); + }); + describe('when model is changed programmatically', function(){ + describe('for single select', function(){ + it('should set select2 to the value', function(){ + scope.foo = 'First'; + var element = compile(''); + expect(element.select2('val')).toBe('First'); + scope.$apply('foo = "Second"'); + expect(element.select2('val')).toBe('Second'); + }); + it('should handle falsey values', function(){ + scope.foo = 'First'; + var element = compile(''); + expect(element.select2('val')).toBe('First'); + scope.$apply('foo = false'); + expect(element.select2('val')).toBe(null); + scope.$apply('foo = "Second"'); + scope.$apply('foo = null'); + expect(element.select2('val')).toBe(null); + scope.$apply('foo = "Second"'); + scope.$apply('foo = undefined'); + expect(element.select2('val')).toBe(null); + }); + }); + describe('for multiple select', function(){ + it('should set select2 to multiple value', function(){ + scope.foo = ['First']; + var element = compile(''); + expect(element.select2('val')).toEqual(['First']); + scope.$apply('foo = ["Second"]'); + expect(element.select2('val')).toEqual(['Second']); + scope.$apply('foo = ["Second","Third"]'); + expect(element.select2('val')).toEqual(['Second','Third']); + }); + it('should handle falsey values', function(){ + scope.foo = ['First']; + var element = compile(''); + expect(element.val()).toEqual(['First']); + scope.$apply('foo = ["Second"]'); + scope.$apply('foo = false'); + expect(element.select2('val')).toEqual([]); + scope.$apply('foo = ["Second"]'); + scope.$apply('foo = null'); + expect(element.select2('val')).toEqual([]); + scope.$apply('foo = ["Second"]'); + scope.$apply('foo = undefined'); + expect(element.select2('val')).toEqual([]); + }); + }); + }); + it('should observe the disabled attribute', function () { + var element = compile(''); + expect(element.siblings().hasClass('select2-container-disabled')).toBe(false); + scope.$apply('disabled = true'); + expect(element.siblings().hasClass('select2-container-disabled')).toBe(true); + scope.$apply('disabled = false'); + expect(element.siblings().hasClass('select2-container-disabled')).toBe(false); + }); + it('should observe the multiple attribute', function () { + var element = $compile('')(scope); + + expect(element.siblings().hasClass('select2-container-multi')).toBe(false); + scope.$apply('multiple = true'); + expect(element.siblings().hasClass('select2-container-multi')).toBe(true); + scope.$apply('multiple = false'); + expect(element.siblings().hasClass('select2-container-multi')).toBe(false); + }); + it('should observe an option with ng-repeat for changes', function(){ + scope.items = ['first', 'second', 'third']; + scope.foo = 'fourth'; + var element = compile(''); + expect(element.select2('val')).toBe(null); + scope.$apply('foo="fourth";items=["fourth"]'); + $timeout.flush(); + expect(element.select2('val')).toBe('fourth'); + }); + }); + describe('with an element', function () { + describe('compiling this directive', function () { + it('should throw an error if we have no model defined', function () { + expect(function() { + compile(''); + }).toThrow(); + }); + it('should create proper DOM structure', function () { + var element = compile(''); + expect(element.siblings().is('div.select2-container')).toBe(true); + }); + it('should not modify the model if there is no initial value', function(){ + //TODO + }); + }); + describe('when model is changed programmatically', function(){ + describe('for single-select', function(){ + it('should call select2(data, ...) for objects', function(){ + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo={ id: 1, text: "first" }'); + expect(element.select2).toHaveBeenCalledWith('data', { id: 1, text: "first" }); + }); + it('should call select2(val, ...) for strings', function(){ + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo="first"'); + expect(element.select2).toHaveBeenCalledWith('val', 'first'); + }); + }); + describe('for multi-select', function(){ + it('should call select2(data, ...) for arrays', function(){ + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); + expect(element.select2).toHaveBeenCalledWith('data', [{ id: 1, text: "first" },{ id: 2, text: "second" }]); + }); + it('should call select2(data, []) for falsey values', function(){ + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo=[]'); + expect(element.select2).toHaveBeenCalledWith('data', []); + }); + xit('should call select2(val, ...) for strings', function(){ + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo="first,second"'); + expect(element.select2).toHaveBeenCalledWith('val', 'first,second'); + }); + }); + }); + describe('consumers of ngModel should correctly use $viewValue', function() { + it('should use any formatters if present (select - single select)', function(){ + scope.foo = 'First'; + var element = compile(''); + expect(element.select2('val')).toBe('First - I\'ve been formatted'); + scope.$apply('foo = "Second"'); + expect(element.select2('val')).toBe('Second - I\'ve been formatted'); + }); + + // isMultiple && falsey + it('should use any formatters if present (input multi select - falsey value)', function() { + // need special function to hit this case + // old code checked modelValue... can't just pass undefined to model value because view value will be the same + scope.transformers.fromModel = function(modelValue) { + if (modelValue === "magic") { + return undefined; + } + + return modelValue; + }; + + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo="magic"'); + expect(element.select2).toHaveBeenCalledWith('data', []); + }); + // isMultiple && isArray + it('should use any formatters if present (input multi select)', function() { + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); + expect(element.select2).toHaveBeenCalledWith('data', [{ id: 1, text: "first - I've been formatted" },{ id: 2, text: "second - I've been formatted" }]); + }); + // isMultiple... + xit('should use any formatters if present (input multi select - non array)', function() { + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo={ id: 1, text: "first" }'); + expect(element.select2).toHaveBeenCalledWith('val', { id: 1, text: "first - I've been formatted" }); + }); + + // !isMultiple + it('should use any formatters if present (input - single select - object)', function() { + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo={ id: 1, text: "first" }'); + expect(element.select2).toHaveBeenCalledWith('data', { id: 1, text: "first - I've been formatted" }); + }); + it('should use any formatters if present (input - single select - non object)', function() { + var element = compile(''); + spyOn($.fn, 'select2'); + scope.$apply('foo="first"'); + expect(element.select2).toHaveBeenCalledWith('val', "first - I've been formatted"); + }); + + it('should not set the default value using scope.$eval', function() { + // testing directive instantiation - change order of test + spyOn($.fn, 'select2'); + spyOn($.fn, 'val'); + scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); + + var element = compile(''); + expect(element.val).not.toHaveBeenCalledWith([{ id: 1, text: "first" },{ id: 2, text: "second" }]); + }); + it('should expect a default value to be set with a call to the render method', function() { + // this should monitor the events after init, when the timeout callback executes + var opts = angular.copy(scope.options); + opts.multiple = true; + + scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); + + spyOn($.fn, 'select2'); + var element = compile(''); + + // select 2 init + expect(element.select2).toHaveBeenCalledWith(opts); + + // callback setting + expect(element.select2).toHaveBeenCalledWith('data', [{ id: 1, text: "first - I've been formatted" },{ id: 2, text: "second - I've been formatted" }]); + + // retieve data + expect(element.select2).toHaveBeenCalledWith('data'); + }); + + }); + it('should set the model when the user selects an item', function(){ + var element = compile(''); + // TODO: programmactically select an option + // expect(scope.foo).toBe(/* selected val */) ; + }); + + it('updated the view when model changes with complex object', function(){ + scope.foo = [{'id': '0', 'text': '0'}]; + scope.options['multiple'] = true; + var element = compile(''); + scope.$digest(); + + scope.foo.push({'id': '1', 'text': '1'}); + scope.$digest(); + + expect(element.select2('data')).toEqual( + [{'id': '0', 'text': '0'}, {'id': '1', 'text': '1'}]); + }); + + + describe('simple_tags', function() { + + beforeEach(function() { + scope.options['multiple'] = true; + scope.options['simple_tags'] = true; + scope.options['tags'] = []; + }); + + it('Initialize the select2 view based on list of strings.', function() { + scope.foo = ['tag1', 'tag2']; + + var element = compile(''); + scope.$digest(); + + expect(element.select2('data')).toEqual([ + {'id': 'tag1', 'text': 'tag1'}, + {'id': 'tag2', 'text': 'tag2'} + ]); + }); + + it( + 'When list is empty select2 view model is also initialized as empty', + function() { + scope.foo = []; + + var element = compile(''); + scope.$digest(); + + expect(element.select2('data')).toEqual([]); + }); + + it( + 'Updating the model with a string will update the select2 view model.', + function() { + scope.foo = []; + var element = compile(''); + scope.$digest(); + + scope.foo.push('tag1'); + scope.$digest(); + + expect(element.select2('data')).toEqual([ + {'id': 'tag1', 'text': 'tag1'} + ]); + }); + + it( + 'Updating the select2 model will update AngularJS model with a string.', + function() { + scope.foo = []; + var element = compile(''); + scope.$digest(); + + element.select2('data', [ + {'id':'tag1', 'text': 'tag1'}, + {'id':'tag2', 'text': 'tag2'} + ]); + element.trigger('change'); + + expect(scope.foo).toEqual(['tag1', 'tag2']); + }); + + }); + + }); +}); \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/.bower.json b/vendor/assets/components/angular-unsavedChanges/.bower.json new file mode 100644 index 000000000..1e03c42ba --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/.bower.json @@ -0,0 +1,44 @@ +{ + "name": "angular-unsavedChanges", + "version": "0.2.3-alpha.3", + "homepage": "https://github.com/facultymatt/angular-unsavedChanges", + "authors": [ + "Matt Miller " + ], + "description": "AngularJS directive to warn user of unsaved changes when navigating away from a form.", + "main": "dist/unsavedChanges.js", + "keywords": [ + "form", + "angularjs", + "unsaved", + "changes", + "warning", + "dirty", + "reload" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "devDependencies": { + "angular": "~1.3.x", + "angular-route": "~1.3.x", + "angular-mocks": "~1.3.x", + "angular-scenario": "~1.3.x", + "jquery": "~2.0.3", + "angular-translate": "^2.0.1" + }, + "_release": "0.2.3-alpha.3", + "_resolution": { + "type": "version", + "tag": "v0.2.3-alpha.3", + "commit": "f831050a08686545fb26c9e516bad5d7abba32eb" + }, + "_source": "git://github.com/facultymatt/angular-unsavedChanges.git", + "_target": "~0.2.0", + "_originalSource": "angular-unsavedChanges" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/Gruntfile.js b/vendor/assets/components/angular-unsavedChanges/Gruntfile.js new file mode 100644 index 000000000..8a7f3d1e2 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/Gruntfile.js @@ -0,0 +1,139 @@ +// @todo configure grunt default stuff to run on every save so we know that +// dist is always up to date and jsLinted + +module.exports = function(grunt) { + + require('load-grunt-tasks')(grunt, { + scope: ['dependencies', 'devDependencies'] + }); + + grunt.initConfig({ + // end 2 end testing with protractor + protractor: { + options: { + keepAlive: false, + configFile: './protractor.conf.js' + }, + singlerun: {}, + travis: { + configFile: './protractor_travis.conf.js' + }, + auto: { + keepAlive: true, + options: { + args: { + seleniumPort: 4444 + } + } + } + }, + connect: { + server: { + options: { + port: 9001, + open: 'http://localhost:9001/demo', + keepalive: true + } + }, + // our protractor server + testserver: { + options: { + port: 9999 + } + }, + travisServer: { + options: { + port: 9999 + } + }, + }, + // watch tasks + // Watch specified files for changes and execute tasks on change + watch: { + livereload: { + options: { + livereload: true + }, + files: [ + 'src/*.js', + 'demo/*.js' + ], + tasks: ['jshint'] + }, + }, + karma: { + plugins: [ + 'karma-osx-reporter' + ], + unit: { + configFile: 'karma-unit.conf.js', + autoWatch: false, + singleRun: true + }, + unitAuto: { + configFile: 'karma-unit.conf.js', + autoWatch: true, + singleRun: false + } + }, + 'min': { + 'dist': { + 'src': ['dist/unsavedChanges.js'], + 'dest': 'dist/unsavedChanges.min.js' + } + }, + jshint: { + all: ['src/*.js'] + }, + strip: { + main: { + src: 'src/unsavedChanges.js', + dest: 'dist/unsavedChanges.js' + } + } + + }); + + grunt.registerTask('test', [ + 'test:unit' + ]); + + grunt.registerTask('server', [ + 'connect:server' + ]); + + grunt.registerTask('test:unit', [ + 'karma:unit' + ]); + + grunt.registerTask('autotest', [ + 'autotest:unit' + ]); + + grunt.registerTask('autotest:unit', [ + 'karma:unitAuto' + ]); + + grunt.registerTask('default', [ + 'jshint', + 'strip:main', + 'min' + ]); + + grunt.registerTask('autotest:e2e', [ + 'connect:testserver', // - starts the app so the test runner can visit the app + 'shell:selenium', // - starts selenium server in watch mode + 'watch:protractor' // - watches scripts and e2e specs, and starts tests on file change + ]); + + grunt.registerTask('test:e2e', [ + 'connect:testserver', // - run concurrent tests + 'protractor:singlerun' // - single run protractor + ]); + + grunt.registerTask('test:travis', [ + 'connect:travisServer', // - run concurrent tests + 'karma:unit' // - single run karma unit + ]); + +}; \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/bower.json b/vendor/assets/components/angular-unsavedChanges/bower.json new file mode 100644 index 000000000..09607ea52 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/bower.json @@ -0,0 +1,35 @@ +{ + "name": "angular-unsavedChanges", + "version": "0.2.5", + "homepage": "https://github.com/facultymatt/angular-unsavedChanges", + "authors": [ + "Matt Miller " + ], + "description": "AngularJS directive to warn user of unsaved changes when navigating away from a form.", + "main": "dist/unsavedChanges.js", + "keywords": [ + "form", + "angularjs", + "unsaved", + "changes", + "warning", + "dirty", + "reload" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "devDependencies": { + "angular": "~1.3.x", + "angular-route": "~1.3.x", + "angular-mocks": "~1.3.x", + "angular-scenario": "~1.3.x", + "jquery": "~2.0.3", + "angular-translate": "^2.0.1" + } +} diff --git a/vendor/assets/components/angular-unsavedChanges/changelog.md b/vendor/assets/components/angular-unsavedChanges/changelog.md new file mode 100644 index 000000000..05470d231 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/changelog.md @@ -0,0 +1,87 @@ +# Changelog + +Versioning follows [http://semver.org/](http://semver.org/), ie: MAJOR.MINOR.PATCH. Major version 0 is initial development. Minor versions may be backwards incompatible. + +### 0.2.3-alpha.2 + +__angular-unsavedChanges will remain in alpha until the e2e tests pass, as per https://github.com/facultymatt/angular-unsavedChanges/issues/25__ + + +- Fixed support for angular translate > 2.0.0 [#14](https://github.com/facultymatt/angular-unsavedChanges/pull/14), thanks to @dmytroyarmak +- Fixed issue where removeFunctions were not being cleared properly [#21](https://github.com/facultymatt/angular-unsavedChanges/pull/21), thanks to @dmytroyarmak +- fix unit tests for jasmine 2.0 +- add test for isolate scope on form element +- require form on element or parent, fixes #22 +- use $window instead of window +- update to angular 1.3, closes #23 + + + +### 0.2.3-alpha.1 + +- Removed form and model dependencies and code from `resettable` directive. We weren't using the get form functionality anyhow. +- Moved form reset events out of the resettable directive to prevent them from being called multiple times unnecessarily. +- Fixed bug where resettable functions were piling up and not properly being removed when scope was destroyed. +- Module now consistently broadcasts `resetResettables` from $rootScope when user resets form or dismisses alert dialog. (previously this was sometimes called twice) + + +### 0.2.2-alpha.1 + +Added `$rootScope.$emit('resetResettables')` to form directive on reset. This allows hooking into reset without using resettable directive. + +### 0.2.1-alpha.1 + +Form not emits `$rootScope.$emit('resetResettables')` when reset. This allows developers to do fancy things like reset validation or message user on form reset. Previously `resetResettables` was only called when use dismissed changes with alert dialog. + +### 0.2.0-alpha.1 + +This is an alpha release because the tests are not complete and there might be issues with scopes on directives. + +**Breaking Changes** + +- Removed lazy-model integration in favor of `resettable` directive. Adding to inputs will cause their model values to be reset. Unlike the lazy-model directive the model value settings is not deferred until form submit. This avoids conflicts with validation. + +### 0.1.1 + +**Features** + +- routeEvent can be an array with multiple events to listen for. If user sets to string will convert to array. Defaults to `['$locationChangeStart' ,'$stateChangeStart']` which supports ui router by default. + + +### 0.1.0 + +**Features** + +- Add `lazy-model` directive, and change `clear` buttons to `type="reset"` which allows for resetting the model to original values. Furthermore values are only persisted to model if user submits valid form. +- Only set pristine when clearing changes if form is valid. (https://github.com/facultymatt/angular-unsavedChanges/commit/26cd981397f3e1e637280e3778aa80708821dab4). The lazy-model form reset hook handles resetting the value. +- Directive now removes onbeforeunload and route change listeners if no registered forms exist on the page. (https://github.com/facultymatt/angular-unsavedChanges/commit/58cad5401656bb806183d0a42c8b81bf1fbeeac6) + +**Breaking Changes** + +- Change getters and setters to user NJO (native javascript objects). This means that insated of setting `provider.setUseTranslateService(true)` you can natively set `provider.useTranslateService = true`. This may seem like semantics but if follows one of angulars core principals. + +### 0.0.3 + +**Tests** + +- Add full set of unit and e2e tests + +**Features** + +- Add config option for custom messages +- Add support for uiRouter state change event via. config +- Add support for Angular Translate +- Add custom logging method for development + +**Chores** + +- Add module to bower. + +**Breaking Changes** + +- Changed name from `mm.unsavedChanges` to `unsavedChanges` + + +### 0.0.2 and below + +Offical changelog was not maintained for these versions. diff --git a/vendor/assets/components/angular-unsavedChanges/demo/app.js b/vendor/assets/components/angular-unsavedChanges/demo/app.js new file mode 100644 index 000000000..5286c4cff --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/demo/app.js @@ -0,0 +1,29 @@ +angular + .module('app', ['unsavedChanges', 'ngRoute']) + .config(['$routeProvider', 'unsavedWarningsConfigProvider', + function($routeProvider, unsavedWarningsConfigProvider) { + + $routeProvider + .when('/page1', { + templateUrl: 'page1.html' + }) + .when('/page2', { + templateUrl: 'page2.html' + }) + .otherwise({ + redirectTo: '/page1' + }); + + unsavedWarningsConfigProvider.useTranslateService = false; + } + ]) + .controller('demoCtrl', function($scope) { + $scope.user = { + name: '', + email: '' + }; + $scope.demoFormSubmit = function() { + $scope.message = 'Form Saved'; + $scope.user = {}; + }; + }); diff --git a/vendor/assets/components/angular-unsavedChanges/demo/index.html b/vendor/assets/components/angular-unsavedChanges/demo/index.html new file mode 100644 index 000000000..be4e6df6b --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/demo/index.html @@ -0,0 +1,20 @@ + + + + + + Angular Unsaved Changes + + + + + + + + + + Page 1 + Page 2 +
      + + \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/demo/page1.html b/vendor/assets/components/angular-unsavedChanges/demo/page1.html new file mode 100644 index 000000000..672785689 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/demo/page1.html @@ -0,0 +1,17 @@ +

      Page 1

      +
      +
      + + + + +
      + +
      +    {{user | json}}
      +    
      + +

      Is Form Dirty?: {{demoForm.$dirty}}

      +

      Message: {{message}}

      +
      + diff --git a/vendor/assets/components/angular-unsavedChanges/demo/page2.html b/vendor/assets/components/angular-unsavedChanges/demo/page2.html new file mode 100644 index 000000000..61cac189a --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/demo/page2.html @@ -0,0 +1,33 @@ +
      +

      Page 2

      +
      +
      + Form 1 + + + +
      +

      Is Form 1 Dirty?: {{demoForm1.$dirty}}

      +

      Message: {{message}}

      +
      +
      +
      + Form 2 + + +
      +

      Is Form 2 Dirty?: {{demoForm2.$dirty}}

      +

      Message: {{message}}

      +
      +
      +
      + Form 3 + + + +
      +

      Is Form 3 Dirty?: {{demoForm3.$dirty}}

      +

      Message: {{message}}

      +
      + +
      \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/dist/unsavedChanges.js b/vendor/assets/components/angular-unsavedChanges/dist/unsavedChanges.js new file mode 100644 index 000000000..f5d47c014 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/dist/unsavedChanges.js @@ -0,0 +1,348 @@ +'use strict'; +/*jshint globalstrict: true*/ +/*jshint undef:false */ + +angular.module('unsavedChanges', ['resettable']) + +.provider('unsavedWarningsConfig', function() { + + var _this = this; + + // defaults + var logEnabled = false; + var useTranslateService = true; + var routeEvent = ['$locationChangeStart', '$stateChangeStart']; + var navigateMessage = 'You will lose unsaved changes if you leave this page'; + var reloadMessage = 'You will lose unsaved changes if you reload this page'; + + Object.defineProperty(_this, 'navigateMessage', { + get: function() { + return navigateMessage; + }, + set: function(value) { + navigateMessage = value; + } + }); + + Object.defineProperty(_this, 'reloadMessage', { + get: function() { + return reloadMessage; + }, + set: function(value) { + reloadMessage = value; + } + }); + + Object.defineProperty(_this, 'useTranslateService', { + get: function() { + return useTranslateService; + }, + set: function(value) { + useTranslateService = !! (value); + } + }); + + Object.defineProperty(_this, 'routeEvent', { + get: function() { + return routeEvent; + }, + set: function(value) { + if (typeof value === 'string') value = [value]; + routeEvent = value; + } + }); + Object.defineProperty(_this, 'logEnabled', { + get: function() { + return logEnabled; + }, + set: function(value) { + logEnabled = !! (value); + } + }); + + this.$get = ['$injector', + function($injector) { + + function translateIfAble(message) { + if ($injector.has('$translate') && useTranslateService) { + return $injector.get('$translate').instant(message); + } else { + return false; + } + } + + var publicInterface = { + // log function that accepts any number of arguments + // @see http://stackoverflow.com/a/7942355/1738217 + log: function() { + if (console.log && logEnabled && arguments.length) { + var newarr = [].slice.call(arguments); + if (typeof console.log === 'object') { + log.apply.call(console.log, console, newarr); + } else { + console.log.apply(console, newarr); + } + } + } + }; + + Object.defineProperty(publicInterface, 'useTranslateService', { + get: function() { + return useTranslateService; + } + }); + + Object.defineProperty(publicInterface, 'reloadMessage', { + get: function() { + return translateIfAble(reloadMessage) || reloadMessage; + } + }); + + Object.defineProperty(publicInterface, 'navigateMessage', { + get: function() { + return translateIfAble(navigateMessage) || navigateMessage; + } + }); + + Object.defineProperty(publicInterface, 'routeEvent', { + get: function() { + return routeEvent; + } + }); + + Object.defineProperty(publicInterface, 'logEnabled', { + get: function() { + return logEnabled; + } + }); + + return publicInterface; + } + ]; +}) + +.service('unsavedWarningSharedService', ['$rootScope', 'unsavedWarningsConfig', '$injector', '$window', + function($rootScope, unsavedWarningsConfig, $injector, $window) { + + // Controller scopped variables + var _this = this; + var allForms = []; + var areAllFormsClean = true; + var removeFunctions = []; + + // @note only exposed for testing purposes. + this.allForms = function() { + return allForms; + }; + + // Check all registered forms + // if any one is dirty function will return true + + function allFormsClean() { + areAllFormsClean = true; + angular.forEach(allForms, function(item, idx) { + unsavedWarningsConfig.log('Form : ' + item.$name + ' dirty : ' + item.$dirty); + if (item.$dirty) { + areAllFormsClean = false; + } + }); + return areAllFormsClean; // no dirty forms were found + } + + // adds form controller to registered forms array + // this array will be checked when user navigates away from page + this.init = function(form) { + if (allForms.length === 0) setup(); + unsavedWarningsConfig.log("Registering form", form); + allForms.push(form); + }; + + this.removeForm = function(form) { + var idx = allForms.indexOf(form); + + // this form is not present array + // @todo needs test coverage + if (idx === -1) return; + + allForms.splice(idx, 1); + unsavedWarningsConfig.log("Removing form from watch list", form); + + if (allForms.length === 0) tearDown(); + }; + + function tearDown() { + unsavedWarningsConfig.log('No more forms, tearing down'); + angular.forEach(removeFunctions, function(fn) { + fn(); + }); + removeFunctions = []; + $window.onbeforeunload = null; + } + + // Function called when user tries to close the window + this.confirmExit = function() { + if (!allFormsClean()) return unsavedWarningsConfig.reloadMessage; + $rootScope.$broadcast('resetResettables'); + tearDown(); + }; + + // bind to window close + // @todo investigate new method for listening as discovered in previous tests + + function setup() { + unsavedWarningsConfig.log('Setting up'); + + $window.onbeforeunload = _this.confirmExit; + + var eventsToWatchFor = unsavedWarningsConfig.routeEvent; + + angular.forEach(eventsToWatchFor, function(aEvent) { + //calling this function later will unbind this, acting as $off() + var removeFn = $rootScope.$on(aEvent, function(event, next, current) { + unsavedWarningsConfig.log("user is moving with " + aEvent); + // @todo this could be written a lot cleaner! + if (!allFormsClean()) { + unsavedWarningsConfig.log("a form is dirty"); + if (!confirm(unsavedWarningsConfig.navigateMessage)) { + unsavedWarningsConfig.log("user wants to cancel leaving"); + event.preventDefault(); // user clicks cancel, wants to stay on page + } else { + unsavedWarningsConfig.log("user doesn't care about loosing stuff"); + $rootScope.$broadcast('resetResettables'); + } + } else { + unsavedWarningsConfig.log("all forms are clean"); + } + + }); + removeFunctions.push(removeFn); + }); + } + } +]) + +.directive('unsavedWarningClear', ['unsavedWarningSharedService', + function(unsavedWarningSharedService) { + return { + scope: {}, + require: '^form', + priority: 10, + link: function(scope, element, attrs, formCtrl) { + element.bind('click', function(event) { + formCtrl.$setPristine(); + }); + + } + }; + } +]) + +.directive('unsavedWarningForm', ['unsavedWarningSharedService', '$rootScope', + function(unsavedWarningSharedService, $rootScope) { + return { + scope: {}, + require: '^form', + link: function(scope, formElement, attrs, formCtrl) { + + // @todo refactor, temp fix for issue #22 + // where user might use form on element inside a form + // we shouldnt need isolate scope on this, but it causes the tests to fail + // traverse up parent elements to find the form. + // we need a form element since we bind to form events: submit, reset + var count = 0; + while(formElement[0].tagName !== 'FORM' && count < 3) { + count++; + formElement = formElement.parent(); + } + if(count >= 3) { + throw('unsavedWarningForm must be inside a form element'); + } + + // register this form + unsavedWarningSharedService.init(formCtrl); + + // bind to form submit, this makes the typical submit button work + // in addition to the ability to bind to a seperate button which clears warning + formElement.bind('submit', function(event) { + if (formCtrl.$valid) { + formCtrl.$setPristine(); + } + }); + + // bind to form submit + // developers can hook into resetResettables to do + // do things like reset validation, present messages, etc. + formElement.bind('reset', function(event) { + event.preventDefault(); + + // trigger resettables within this form or element + var resettables = angular.element(formElement[0].querySelector('[resettable]')); + if(resettables.length) { + scope.$apply(resettables.triggerHandler('resetResettables')); + } + + // sets for back to valid and pristine states + formCtrl.$setPristine(); + }); + + // @todo check destroy on clear button too? + scope.$on('$destroy', function() { + unsavedWarningSharedService.removeForm(formCtrl); + }); + } + }; + } +]); + + +/** + * -------------------------------------------- + * resettable models adapted from vitalets lazy model + * @see https://github.com/vitalets/lazy-model/ + * + * The main difference is that we DO set the model value + * as the user changes the inputs. However we provide a hook + * to reset the model to original value. This we can then + * broadcast on from reset which triggers resettable to revert + * to original value. + * -------------------------------------------- + * + * @note we don't create a seperate scope so the model value + * is still available onChange within the controller scope. + * This fixes https://github.com/facultymatt/angular-unsavedChanges/issues/19 + * + */ +angular.module('resettable', []) + +.directive('resettable', ['$parse', '$compile', '$rootScope', + function($parse, $compile, $rootScope) { + + return { + restrict: 'A', + link: function postLink(scope, elem, attr, ngModelCtrl) { + + var setter, getter, originalValue; + + // save getters and setters and store the original value. + attr.$observe('ngModel', function(newValue) { + getter = $parse(attr.ngModel); + setter = getter.assign; + originalValue = getter(scope); + }); + + // reset our form to original value + var resetFn = function() { + setter(scope, originalValue); + }; + + elem.on('resetResettables', resetFn); + + // @note this doesn't work if called using + // $rootScope.on() and $rootScope.$emit() pattern + var removeListenerFn = scope.$on('resetResettables', resetFn); + scope.$on('$destroy', removeListenerFn); + + } + }; + } +]); diff --git a/vendor/assets/components/angular-unsavedChanges/dist/unsavedChanges.min.js b/vendor/assets/components/angular-unsavedChanges/dist/unsavedChanges.min.js new file mode 100644 index 000000000..ef6a71537 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/dist/unsavedChanges.min.js @@ -0,0 +1 @@ +"use strict";angular.module("unsavedChanges",["resettable"]).provider("unsavedWarningsConfig",function(){var f=this;var e=false;var b=true;var d=["$locationChangeStart","$stateChangeStart"];var c="You will lose unsaved changes if you leave this page";var a="You will lose unsaved changes if you reload this page";Object.defineProperty(f,"navigateMessage",{get:function(){return c},set:function(g){c=g}});Object.defineProperty(f,"reloadMessage",{get:function(){return a},set:function(g){a=g}});Object.defineProperty(f,"useTranslateService",{get:function(){return b},set:function(g){b=!!(g)}});Object.defineProperty(f,"routeEvent",{get:function(){return d},set:function(g){if(typeof g==="string"){g=[g]}d=g}});Object.defineProperty(f,"logEnabled",{get:function(){return e},set:function(g){e=!!(g)}});this.$get=["$injector",function(h){function i(j){if(h.has("$translate")&&b){return h.get("$translate").instant(j)}else{return false}}var g={log:function(){if(console.log&&e&&arguments.length){var j=[].slice.call(arguments);if(typeof console.log==="object"){log.apply.call(console.log,console,j)}else{console.log.apply(console,j)}}}};Object.defineProperty(g,"useTranslateService",{get:function(){return b}});Object.defineProperty(g,"reloadMessage",{get:function(){return i(a)||a}});Object.defineProperty(g,"navigateMessage",{get:function(){return i(c)||c}});Object.defineProperty(g,"routeEvent",{get:function(){return d}});Object.defineProperty(g,"logEnabled",{get:function(){return e}});return g}]}).service("unsavedWarningSharedService",["$rootScope","unsavedWarningsConfig","$injector","$window",function(j,c,k,d){var i=this;var a=[];var g=true;var e=[];this.allForms=function(){return a};function h(){g=true;angular.forEach(a,function(m,l){c.log("Form : "+m.$name+" dirty : "+m.$dirty);if(m.$dirty){g=false}});return g}this.init=function(l){if(a.length===0){f()}c.log("Registering form",l);a.push(l)};this.removeForm=function(m){var l=a.indexOf(m);if(l===-1){return}a.splice(l,1);c.log("Removing form from watch list",m);if(a.length===0){b()}};function b(){c.log("No more forms, tearing down");angular.forEach(e,function(l){l()});e=[];d.onbeforeunload=null}this.confirmExit=function(){if(!h()){return c.reloadMessage}j.$broadcast("resetResettables");b()};function f(){c.log("Setting up");d.onbeforeunload=i.confirmExit;var l=c.routeEvent;angular.forEach(l,function(m){var n=j.$on(m,function(p,o,q){c.log("user is moving with "+m);if(!h()){c.log("a form is dirty");if(!confirm(c.navigateMessage)){c.log("user wants to cancel leaving");p.preventDefault()}else{c.log("user doesn't care about loosing stuff");j.$broadcast("resetResettables")}}else{c.log("all forms are clean")}});e.push(n)})}}]).directive("unsavedWarningClear",["unsavedWarningSharedService",function(a){return{scope:{},require:"^form",priority:10,link:function(d,c,b,e){c.bind("click",function(f){e.$setPristine()})}}}]).directive("unsavedWarningForm",["unsavedWarningSharedService","$rootScope",function(b,a){return{scope:{},require:"^form",link:function(e,d,c,g){var f=0;while(d[0].tagName!=="FORM"&&f<3){f++;d=d.parent()}if(f>=3){throw ("unsavedWarningForm must be inside a form element")}b.init(g);d.bind("submit",function(h){if(g.$valid){g.$setPristine()}});d.bind("reset",function(h){h.preventDefault();var i=angular.element(d[0].querySelector("[resettable]"));if(i.length){e.$apply(i.triggerHandler("resetResettables"))}g.$setPristine()});e.$on("$destroy",function(){b.removeForm(g)})}}}]);angular.module("resettable",[]).directive("resettable",["$parse","$compile","$rootScope",function(d,c,b){return{restrict:"A",link:function a(m,g,j,e){var h,k,l;j.$observe("ngModel",function(n){k=d(j.ngModel);h=k.assign;l=k(m)});var i=function(){h(m,l)};g.on("resetResettables",i);var f=m.$on("resetResettables",i);m.$on("$destroy",f)}}}]); \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/karma-unit.conf.js b/vendor/assets/components/angular-unsavedChanges/karma-unit.conf.js new file mode 100644 index 000000000..ed7ef41a7 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/karma-unit.conf.js @@ -0,0 +1,75 @@ +// Karma configuration +// http://karma-runner.github.io/0.10/config/configuration-file.html + +module.exports = function(config) { + config.set({ + // base path, that will be used to resolve files and exclude + basePath: '', + + // testing framework to use (jasmine/mocha/qunit/...) + frameworks: ['jasmine'], + + files: [ + // ------------------------------ + // DEPENDENCIES + // ------------------------------ + 'demo/bower_components/jquery/jquery.js', + 'demo/bower_components/angular/angular.js', + 'demo/bower_components/angular-mocks/angular-mocks.js', + 'demo/bower_components/angular-route/angular-route.js', + 'demo/bower_components/angular-translate/angular-translate.js', + //'demo/bower_components/angular-scenario/angular-scenario.js', + //'node_modules/karma-ng-scenario/lib/adapter.js', + 'src/unsavedChanges.js', + 'test/unit/**/*.spec.js' + ], + // preprocessors: { + // 'app/scripts/components/*/views/*.html': ['ng-html2js'] + // }, + + ngHtml2JsPreprocessor: { + // strip this from the file path + stripPrefix: 'app/', + + // make templates accessible in tests + moduleName: 'templates' + }, + + // list of files / patterns to exclude + exclude: [], + + // web server port + port: 8080, + + // level of logging + // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG + logLevel: config.LOG_INFO, + + // enable / disable watching file and executing tests whenever any file changes + // @note our grunt tasks can over ride these settings. They are just default here. + // we do this with out auto_test grunt task. + autoWatch: false, + + // Start these browsers, currently available: + // @note you must have the browser on the computer doing the testing + // - Chrome + // - ChromeCanary + // - Firefox + // - Opera + // - Safari (only Mac) + // - PhantomJS + // - IE (only Windows) + browsers: ['PhantomJS'], + + // Continuous Integration mode + // if true, it capture browsers, run tests and exit + singleRun: true, + + // reporters? + reporters: ['progress', 'osx'], + + // provide green / red for apss / fail. + colors: true + + }); +}; \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/package.json b/vendor/assets/components/angular-unsavedChanges/package.json new file mode 100644 index 000000000..a569280ca --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/package.json @@ -0,0 +1,63 @@ +{ + "name": "angular-unsavedChanges", + "version": "0.2.5", + "description": "AngularJS directive to warn user of unsaved changes when navigating away from a form.", + "main": "Gruntfile.js", + "devDependencies": { + "grunt-strip": "~0.2.1", + "express": "latest", + "bower": "~1.2.6", + "grunt": "~0.4.1", + "grunt-shell": "~0.4.0", + "grunt-open": "~0.2.2", + "grunt-contrib-copy": "~0.4.1", + "grunt-contrib-concat": "~0.3.0", + "grunt-contrib-uglify": "~0.2.0", + "grunt-contrib-jshint": "~0.6.0", + "grunt-contrib-cssmin": "~0.6.0", + "grunt-contrib-connect": "~0.5.0", + "grunt-contrib-clean": "~0.5.0", + "grunt-contrib-watch": "~0.5.3", + "grunt-usemin": "~0.1.11", + "grunt-rev": "~0.1.0", + "grunt-concurrent": "~0.3.0", + "load-grunt-tasks": "~0.2.0", + "time-grunt": "~0.1.0", + "grunt-karma": "latest", + "karma-script-launcher": "latest", + "karma-chrome-launcher": "latest", + "karma-firefox-launcher": "latest", + "karma-html2js-preprocessor": "latest", + "karma-jasmine": "latest", + "karma-requirejs": "latest", + "karma-coverage": "latest", + "karma-osx-reporter": "latest", + "karma-phantomjs-launcher": "latest", + "karma": "latest", + "protractor": "latest", + "grunt-protractor-runner": "latest", + "grunt-jsbeautifier": "~0.2.3", + "grunt-replace": "~0.5.1", + "grunt-contrib-jshint": "~0.6.3", + "grunt-yui-compressor": "~0.3.0" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/facultymatt/angular-unsavedChanges.git" + }, + "keywords": [ + "form", + "angularjs" + ], + "authors": [ + "Matt Miller " + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/facultymatt/angular-unsavedChanges/issues" + }, + "homepage": "https://github.com/facultymatt/angular-unsavedChanges" +} diff --git a/vendor/assets/components/angular-unsavedChanges/protractor.conf.js b/vendor/assets/components/angular-unsavedChanges/protractor.conf.js new file mode 100644 index 000000000..99997b8e0 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/protractor.conf.js @@ -0,0 +1,70 @@ +// A reference configuration file. +exports.config = { + // ----- How to setup Selenium ----- + // + // There are three ways to specify how to use Selenium. Specify one of the + // following: + // + // 1. seleniumServerJar - to start Selenium Standalone locally. + // 2. seleniumAddress - to connect to a Selenium server which is already + // running. + // 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs. + + // The location of the selenium standalone server .jar file. + //seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar', + + seleniumAddress: 'http://127.0.0.1:4444/wd/hub', + // The port to start the selenium server on, or null if the server should + // find its own unused port. + seleniumPort: null, + // Chromedriver location is used to help the selenium standalone server + // find chromedriver. This will be passed to the selenium jar as + // the system property webdriver.chrome.driver. If null, selenium will + // attempt to find chromedriver using PATH. + //chromeDriver: './selenium/chromedriver', + // Additional command line options to pass to selenium. For example, + // if you need to change the browser timeout, use + // seleniumArgs: ['-browserTimeout=60'], + seleniumArgs: [], + + // ----- What tests to run ----- + // + // Spec patterns are relative to the location of this config. + specs: [ + 'test/e2e/*.js' + ], + + // ----- Capabilities to be passed to the webdriver instance ---- + // + // For a full list of available capabilities, see + // https://code.google.com/p/selenium/wiki/DesiredCapabilities + // and + // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js + capabilities: { + 'browserName': 'chrome', + //'version': '7', + //'platform': 'XP' + }, + + // A base URL for your application under test. Calls to protractor.get() + // with relative paths will be prepended with this. + baseUrl: 'http://localhost:9999', + + // Selector for the element housing the angular app - this defaults to + // body, but is necessary if ng-app is on a descendant of + rootElement: 'body', + + // ----- Options to be passed to minijasminenode ----- + jasmineNodeOpts: { + // onComplete will be called just before the driver quits. + onComplete: null, + // If true, display spec names. + isVerbose: false, + // If true, print colors to the terminal. + showColors: true, + // If true, include stack traces in failures. + includeStackTrace: true, + // Default time to wait in ms before a test fails. + defaultTimeoutInterval: 1000000 + } +}; \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/protractor_travis.conf.js b/vendor/assets/components/angular-unsavedChanges/protractor_travis.conf.js new file mode 100644 index 000000000..126014408 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/protractor_travis.conf.js @@ -0,0 +1,75 @@ +// A reference configuration file. +exports.config = { + // ----- How to setup Selenium ----- + // + // There are three ways to specify how to use Selenium. Specify one of the + // following: + // + // 1. seleniumServerJar - to start Selenium Standalone locally. + // 2. seleniumAddress - to connect to a Selenium server which is already + // running. + // 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs. + + seleniumAddress: 'http://facultymatt:b280b942-1965-446d-90bf-e069b5cd2cf9@localhost:4445/wd/hub', + // The port to start the selenium server on, or null if the server should + // find its own unused port. + seleniumPort: null, + // Chromedriver location is used to help the selenium standalone server + // find chromedriver. This will be passed to the selenium jar as + // the system property webdriver.chrome.driver. If null, selenium will + // attempt to find chromedriver using PATH. + //chromeDriver: './selenium/chromedriver', + // Additional command line options to pass to selenium. For example, + // if you need to change the browser timeout, use + // seleniumArgs: ['-browserTimeout=60'], + seleniumArgs: [], + + // If sauceUser and sauceKey are specified, seleniumServerJar will be ignored. + // The tests will be run remotely using SauceLabs. + sauceUser: 'facultymatt', + sauceKey: 'b280b942-1965-446d-90bf-e069b5cd2cf9', + + // ----- What tests to run ----- + // + // Spec patterns are relative to the location of this config. + specs: [ + 'e2e/*.js' + ], + + // ----- Capabilities to be passed to the webdriver instance ---- + // + // For a full list of available capabilities, see + // https://code.google.com/p/selenium/wiki/DesiredCapabilities + // and + // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js + capabilities: { + 'username': 'facultymatt', + 'accessKey': 'b280b942-1965-446d-90bf-e069b5cd2cf9', + 'browserName': 'chrome', + 'tunnelIdentifier': process.env.TRAVIS_JOB_NUMBER + //'version': '7', + //'platform': 'XP' + }, + + // A base URL for your application under test. Calls to protractor.get() + // with relative paths will be prepended with this. + baseUrl: 'http://localhost:9999', + + // Selector for the element housing the angular app - this defaults to + // body, but is necessary if ng-app is on a descendant of + rootElement: 'body', + + // ----- Options to be passed to minijasminenode ----- + jasmineNodeOpts: { + // onComplete will be called just before the driver quits. + onComplete: null, + // If true, display spec names. + isVerbose: false, + // If true, print colors to the terminal. + showColors: true, + // If true, include stack traces in failures. + includeStackTrace: true, + // Default time to wait in ms before a test fails. + defaultTimeoutInterval: 1000000 + } +}; \ No newline at end of file diff --git a/vendor/assets/components/angular-unsavedChanges/readme.md b/vendor/assets/components/angular-unsavedChanges/readme.md new file mode 100644 index 000000000..dbbe2ebb8 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/readme.md @@ -0,0 +1,175 @@ +# An AngularJS directive for forms that alerts user of unsaved changes. + +_Dev Note: This module is still in development. However it's used in many of my production projects so it can be considered stable and battle tested._ + +This directive will alert users when they navigate away from a page where a form has unsaved changes. It will be triggered in all situations where form data would be lost: + +- when user clicks a link +- when user navigates with forward / back button +- when user swipes (iOS) +- when user refreshes the page + +In addition this module: + +- Works with multiple forms on the same page +- Provides a button to disregard unsaved changes +- Works with Angular Translate module +- Has configurable reload and navigate messages +- Works with uiRouter by default by listeneing for `$locationChangeStart` and `$stateChangeStart` +- Can be configured to listen for any event + +## How it Works + +The directive binds to `locationChangeStart` and `window.onbeforeunload`. When these events happen all registered froms are checked if they are dirty. The module defers to the forms `$dirty` property as a single source of truth. If dirty, the user is alerted. Disregarding changes resets the form and sets pristine. + +## Basic Usage + +- Install from bower using `$ bower install angular-unsavedChanges --save`. +- Include the JS, for example ``. +- Include in your app, for example: `angular.module('app', ['unsavedChanges', 'anotherDirective'])` +- Add attribute to your form, `unsaved-warning-form` +- That's it! + + +## API + +### Directives +The module provides three directives for use. + +#### unsaved-warning-form +Add to forms you want to register with directive. The module will only listen when forms are registered. + +``` +
      +
      +``` + +Optionally, you can add to an element within a form: + +``` +
      +
      +
      +
      +``` + +When used in this way, it must be no more then 3 levels nested within parent form. + + +#### unsaved-warning-clear +Add to button or link that will disregard changes, preventing the messaging when user tries to navigate. Note that button type should be `reset`. + +``` +
      + + + +
      +``` + +#### resettable +Add to inputs that use `ng-model` to reset model values when user dismisses changes or clicks the `unsaved-warning-clear` button. + +``` + +``` + +Note that if you have multiple forms on the page, only the model values inside the form which was reset will be effected. + +On page change or reload, all model values will be effected. + + +### Provider Configuration +A number of options can be configured. The module uses the `Object.defineProperty` pattern. This avoids the need for custom getters and setters and allows us to treat configuration as pure JS objects. + +#### useTranslateService +Defaults to `true`. Will use translate service if available. It's safe to leave this set to `true`, even when not using the translate service, because the module still checks that the service exists. + +``` +unsavedWarningsConfigProvider.useTranslateService = true; +``` + +#### logEnabled +Defaults to `false`. Uses the services internal logging method for debugging. + +``` +unsavedWarningsConfigProvider.logEnabled = true; +``` + +#### routeEvent +Defaults to `['$locationChangeStart' ,'$stateChangeStart']` which supports ui router by default. + +``` +unsavedWarningsConfigProvider.routeEvent = '$stateChangeStart'; +``` + +#### navigateMessage +Set custom message displayed when user navigates. If using translate this will be the key to translate. +``` +unsavedWarningsConfigProvider.navigateMessage = "Custom Navigate Message"; +``` + +#### reloadMessage +Set custom message displayed when user refreshes the page. If using translate this will be the key to translate. +``` +unsavedWarningsConfigProvider.reloadMessage = "Custom Reload Message"; +``` + + +## Gotchas / Known Bugs + +*** Known issue: sometimes the form is removed from expected scope. Ie: in your controller `$scope.formName` no longer works. You might need to access `$scope.$$childTail.formName`. This will be fixed in furture versions. + + +## Demo / Dev + +To try the demo run `npm install` && `bower install` && `grunt connect`. The browser should open [http://127.0.0.1:9001/demo](http://127.0.0.1:9001/demo). + + +## Test + +Note you need to manually change the paths in `index.html` and `karam-unit.conf` to point to the `dist` version for final testing. Make sure to run `$ grunt` first. + +__End 2 End Testing__ +Because of the alert / event driven nature of this module it made the most sense to rely on e2e tests. (also its hard to interact with alerts via unit tests). + +To run the e2e tests do the following: + +- Install Protractor as per directions here: [https://github.com/angular/protractor](https://github.com/angular/protractor) +- Start selenium server: `webdriver-manager start` (or use other selenium methods as per Protractor documentation.) +- Run `$ grunt test:e2e` + + +__Unit Tests__ + +- Run `$ grunt test:unit` OR `$ grunt test` + + +## Build + +Run `$ grunt` to lint and minify the code. Also strips console logs. + + +## License + +The MIT License (MIT) + +Copyright (c) 2013-2014 Matt Miller + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/assets/components/angular-unsavedChanges/src/unsavedChanges.js b/vendor/assets/components/angular-unsavedChanges/src/unsavedChanges.js new file mode 100644 index 000000000..f5d47c014 --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/src/unsavedChanges.js @@ -0,0 +1,348 @@ +'use strict'; +/*jshint globalstrict: true*/ +/*jshint undef:false */ + +angular.module('unsavedChanges', ['resettable']) + +.provider('unsavedWarningsConfig', function() { + + var _this = this; + + // defaults + var logEnabled = false; + var useTranslateService = true; + var routeEvent = ['$locationChangeStart', '$stateChangeStart']; + var navigateMessage = 'You will lose unsaved changes if you leave this page'; + var reloadMessage = 'You will lose unsaved changes if you reload this page'; + + Object.defineProperty(_this, 'navigateMessage', { + get: function() { + return navigateMessage; + }, + set: function(value) { + navigateMessage = value; + } + }); + + Object.defineProperty(_this, 'reloadMessage', { + get: function() { + return reloadMessage; + }, + set: function(value) { + reloadMessage = value; + } + }); + + Object.defineProperty(_this, 'useTranslateService', { + get: function() { + return useTranslateService; + }, + set: function(value) { + useTranslateService = !! (value); + } + }); + + Object.defineProperty(_this, 'routeEvent', { + get: function() { + return routeEvent; + }, + set: function(value) { + if (typeof value === 'string') value = [value]; + routeEvent = value; + } + }); + Object.defineProperty(_this, 'logEnabled', { + get: function() { + return logEnabled; + }, + set: function(value) { + logEnabled = !! (value); + } + }); + + this.$get = ['$injector', + function($injector) { + + function translateIfAble(message) { + if ($injector.has('$translate') && useTranslateService) { + return $injector.get('$translate').instant(message); + } else { + return false; + } + } + + var publicInterface = { + // log function that accepts any number of arguments + // @see http://stackoverflow.com/a/7942355/1738217 + log: function() { + if (console.log && logEnabled && arguments.length) { + var newarr = [].slice.call(arguments); + if (typeof console.log === 'object') { + log.apply.call(console.log, console, newarr); + } else { + console.log.apply(console, newarr); + } + } + } + }; + + Object.defineProperty(publicInterface, 'useTranslateService', { + get: function() { + return useTranslateService; + } + }); + + Object.defineProperty(publicInterface, 'reloadMessage', { + get: function() { + return translateIfAble(reloadMessage) || reloadMessage; + } + }); + + Object.defineProperty(publicInterface, 'navigateMessage', { + get: function() { + return translateIfAble(navigateMessage) || navigateMessage; + } + }); + + Object.defineProperty(publicInterface, 'routeEvent', { + get: function() { + return routeEvent; + } + }); + + Object.defineProperty(publicInterface, 'logEnabled', { + get: function() { + return logEnabled; + } + }); + + return publicInterface; + } + ]; +}) + +.service('unsavedWarningSharedService', ['$rootScope', 'unsavedWarningsConfig', '$injector', '$window', + function($rootScope, unsavedWarningsConfig, $injector, $window) { + + // Controller scopped variables + var _this = this; + var allForms = []; + var areAllFormsClean = true; + var removeFunctions = []; + + // @note only exposed for testing purposes. + this.allForms = function() { + return allForms; + }; + + // Check all registered forms + // if any one is dirty function will return true + + function allFormsClean() { + areAllFormsClean = true; + angular.forEach(allForms, function(item, idx) { + unsavedWarningsConfig.log('Form : ' + item.$name + ' dirty : ' + item.$dirty); + if (item.$dirty) { + areAllFormsClean = false; + } + }); + return areAllFormsClean; // no dirty forms were found + } + + // adds form controller to registered forms array + // this array will be checked when user navigates away from page + this.init = function(form) { + if (allForms.length === 0) setup(); + unsavedWarningsConfig.log("Registering form", form); + allForms.push(form); + }; + + this.removeForm = function(form) { + var idx = allForms.indexOf(form); + + // this form is not present array + // @todo needs test coverage + if (idx === -1) return; + + allForms.splice(idx, 1); + unsavedWarningsConfig.log("Removing form from watch list", form); + + if (allForms.length === 0) tearDown(); + }; + + function tearDown() { + unsavedWarningsConfig.log('No more forms, tearing down'); + angular.forEach(removeFunctions, function(fn) { + fn(); + }); + removeFunctions = []; + $window.onbeforeunload = null; + } + + // Function called when user tries to close the window + this.confirmExit = function() { + if (!allFormsClean()) return unsavedWarningsConfig.reloadMessage; + $rootScope.$broadcast('resetResettables'); + tearDown(); + }; + + // bind to window close + // @todo investigate new method for listening as discovered in previous tests + + function setup() { + unsavedWarningsConfig.log('Setting up'); + + $window.onbeforeunload = _this.confirmExit; + + var eventsToWatchFor = unsavedWarningsConfig.routeEvent; + + angular.forEach(eventsToWatchFor, function(aEvent) { + //calling this function later will unbind this, acting as $off() + var removeFn = $rootScope.$on(aEvent, function(event, next, current) { + unsavedWarningsConfig.log("user is moving with " + aEvent); + // @todo this could be written a lot cleaner! + if (!allFormsClean()) { + unsavedWarningsConfig.log("a form is dirty"); + if (!confirm(unsavedWarningsConfig.navigateMessage)) { + unsavedWarningsConfig.log("user wants to cancel leaving"); + event.preventDefault(); // user clicks cancel, wants to stay on page + } else { + unsavedWarningsConfig.log("user doesn't care about loosing stuff"); + $rootScope.$broadcast('resetResettables'); + } + } else { + unsavedWarningsConfig.log("all forms are clean"); + } + + }); + removeFunctions.push(removeFn); + }); + } + } +]) + +.directive('unsavedWarningClear', ['unsavedWarningSharedService', + function(unsavedWarningSharedService) { + return { + scope: {}, + require: '^form', + priority: 10, + link: function(scope, element, attrs, formCtrl) { + element.bind('click', function(event) { + formCtrl.$setPristine(); + }); + + } + }; + } +]) + +.directive('unsavedWarningForm', ['unsavedWarningSharedService', '$rootScope', + function(unsavedWarningSharedService, $rootScope) { + return { + scope: {}, + require: '^form', + link: function(scope, formElement, attrs, formCtrl) { + + // @todo refactor, temp fix for issue #22 + // where user might use form on element inside a form + // we shouldnt need isolate scope on this, but it causes the tests to fail + // traverse up parent elements to find the form. + // we need a form element since we bind to form events: submit, reset + var count = 0; + while(formElement[0].tagName !== 'FORM' && count < 3) { + count++; + formElement = formElement.parent(); + } + if(count >= 3) { + throw('unsavedWarningForm must be inside a form element'); + } + + // register this form + unsavedWarningSharedService.init(formCtrl); + + // bind to form submit, this makes the typical submit button work + // in addition to the ability to bind to a seperate button which clears warning + formElement.bind('submit', function(event) { + if (formCtrl.$valid) { + formCtrl.$setPristine(); + } + }); + + // bind to form submit + // developers can hook into resetResettables to do + // do things like reset validation, present messages, etc. + formElement.bind('reset', function(event) { + event.preventDefault(); + + // trigger resettables within this form or element + var resettables = angular.element(formElement[0].querySelector('[resettable]')); + if(resettables.length) { + scope.$apply(resettables.triggerHandler('resetResettables')); + } + + // sets for back to valid and pristine states + formCtrl.$setPristine(); + }); + + // @todo check destroy on clear button too? + scope.$on('$destroy', function() { + unsavedWarningSharedService.removeForm(formCtrl); + }); + } + }; + } +]); + + +/** + * -------------------------------------------- + * resettable models adapted from vitalets lazy model + * @see https://github.com/vitalets/lazy-model/ + * + * The main difference is that we DO set the model value + * as the user changes the inputs. However we provide a hook + * to reset the model to original value. This we can then + * broadcast on from reset which triggers resettable to revert + * to original value. + * -------------------------------------------- + * + * @note we don't create a seperate scope so the model value + * is still available onChange within the controller scope. + * This fixes https://github.com/facultymatt/angular-unsavedChanges/issues/19 + * + */ +angular.module('resettable', []) + +.directive('resettable', ['$parse', '$compile', '$rootScope', + function($parse, $compile, $rootScope) { + + return { + restrict: 'A', + link: function postLink(scope, elem, attr, ngModelCtrl) { + + var setter, getter, originalValue; + + // save getters and setters and store the original value. + attr.$observe('ngModel', function(newValue) { + getter = $parse(attr.ngModel); + setter = getter.assign; + originalValue = getter(scope); + }); + + // reset our form to original value + var resetFn = function() { + setter(scope, originalValue); + }; + + elem.on('resetResettables', resetFn); + + // @note this doesn't work if called using + // $rootScope.on() and $rootScope.$emit() pattern + var removeListenerFn = scope.$on('resetResettables', resetFn); + scope.$on('$destroy', removeListenerFn); + + } + }; + } +]); diff --git a/vendor/assets/components/angular-unsavedChanges/travis_test.sh b/vendor/assets/components/angular-unsavedChanges/travis_test.sh new file mode 100755 index 000000000..c4aa6469f --- /dev/null +++ b/vendor/assets/components/angular-unsavedChanges/travis_test.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +grunt test:travis \ No newline at end of file diff --git a/vendor/assets/components/angular-xeditable/.bower.json b/vendor/assets/components/angular-xeditable/.bower.json new file mode 100644 index 000000000..a76ecae7b --- /dev/null +++ b/vendor/assets/components/angular-xeditable/.bower.json @@ -0,0 +1,41 @@ +{ + "name": "angular-xeditable", + "version": "0.1.9", + "description": "Edit in place for AngularJS", + "author": "https://github.com/vitalets", + "license": "MIT", + "homepage": "http://vitalets.github.io/angular-xeditable", + "main": [ + "dist/css/xeditable.css", + "dist/js/xeditable.js" + ], + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "playground", + "test", + "libs", + "docs", + "zip", + "src", + "starter", + "Gruntfile.js", + "index.html", + "jsdoc.conf.json", + "package.json" + ], + "dependencies": { + "angular": "~1.x" + }, + "devDependencies": {}, + "_release": "0.1.9", + "_resolution": { + "type": "version", + "tag": "0.1.9", + "commit": "0b26f8859f602925ef45c156855bfd4206b86239" + }, + "_source": "git://github.com/vitalets/angular-xeditable.git", + "_target": ">=0.1.8", + "_originalSource": "angular-xeditable" +} \ No newline at end of file diff --git a/vendor/assets/components/angular-xeditable/CHANGELOG.txt b/vendor/assets/components/angular-xeditable/CHANGELOG.txt new file mode 100644 index 000000000..8850101c6 --- /dev/null +++ b/vendor/assets/components/angular-xeditable/CHANGELOG.txt @@ -0,0 +1,95 @@ +Angular-xeditable changelog +============================= + +Version 0.1.9 Mar 22, 2015 +---------------------------- +[enh #258] Support for bootstrap-ui datepicker (Painyjames) +[enh #251] added setTimeout() to call $hide on another stack (enapupe) +[enh #235] Made possible disabled of x-editable using global option of directive at... (hammat) +[bug #225] fix #225 'Feature: choose event to activate edit mode' (wetternest) +[enh #224] Added support for ng-disabled to radiolist (OneMuppet) +[bug #219] Support file inputs as a directive (bdgamble) +[bug #216] Fix IE8 accidental onblur. (arcadeJHS) +[bug #215] Fix checkbox form alignment (mdarveau) +[enh #212] Make e-form more flexible, when there isn't parent form element (pr0da) +[bug #207] docs(reference): fix properties and methods examples (AdirAmsalem) +[bug #130] Fix for issue #130 - Updating form view value. (joseaquino) +[bug #176] Fix bug #176 : Blur should not be triggered when it happens on edited form inputs (julienboulay) +[bug #162] Fix blur="submit" does not work on IE8 +[bug #158] Fix scope memory leak (maynier) +[enh #131] Implemented combodate (jjlpinto) +[enh #113] add input:password to directives (DLoT) +[bug #112] Fixed angular.copy issue (roymiloh) +[enh #102] Add the ability to choose external icon sets. Support font awesome (bholzer) +[bug #97] `e-value` fix (mp-jgoetzinger) +[enh #91] Applying 'form-control to bsdate in bs3 (paulmand3l) + +Version 0.1.81 Feb 20, 2014 +---------------------------- +[enh] allow clicking on elements with manual trigger with e-clickable + +Version 0.1.8 Jan 10, 2014 +---------------------------- +[enh] added checklist directive (vitalets) +[enh #35] added radiolist directive (vitalets) +[bug #62] validate error not works with angular symbol changed (vitalets) +[enh #53] apply bs3 style to html5 inputs (Aminix, vitalets) +[enh #43] add `activate` prop to editableOptions to set activations method: focus|select (vitalets) +[enh] add `blur` attribute of editable form (vitalets) + + +Version 0.1.7 Oct 26, 2013 +---------------------------- +[enh] add `shown` attribute of editable form (vitalets) +[bug #38] select multiple with label-only ng-options (vitalets) +[bug #37] setWaiting function overrides ng-disabled and ng-enabled (vitalets) + + +Version 0.1.6 Oct 19, 2013 +---------------------------- +[enh] add HTML5 inputs (vitalets) +[bug] ignore right button mouse click (vitalets) +[enh #26] introduce `oncancel` and `onhide` hooks (vitalets) +[bug #29] include jquery before angular breaks single forms (vitalets) +[enh] show control if added to already visible form (vitalets) +[bug] second immediate call of $show dulicates controls (vitalets) + + +Version 0.1.5 Oct 14, 2013 +---------------------------- +[enh #25] support `ng-dirty | ng-pristine` and other angular form classes (vitalets) +[enh #23] add `blur` attribute (vitalets) +[enh] add typeahead control (vitalets) +[bug #20] support `data-e-*` and `x-e-*` attributes for transfer (vitalets) +[enh #12] timepicker (vitalets) +[enh #17] support promise as model value (vitalets) +[enh] docs: add starter template (vitalets) + + +Version 0.1.4 Sep 26, 2013 +---------------------------- +[enh #10] attach `editable-empty` class if value is empty (vitalets) +[enh #11] add `buttons="no"` attribute to hide buttons (vitalets) +[enh #7] add datepicker via angular-ui bootstrap date (vitalets) + + +Version 0.1.3 Sep 19, 2013 +---------------------------- +[bug #9] hotfix for minified js file (vitalets) + + +Version 0.1.2 Sep 19, 2013 +---------------------------- +[bug] hotfix to keep buttons on the same line via `editable-input` class (vitalets) + + +Version 0.1.1 Sep 19, 2013 +---------------------------- +[bug #4] fix arrayRemove (vitalets) +[bug #1] add support of angular >= 1.0.8 (vitalets) +[enh] improve docs (vitalets) + + +Version 0.1.0 Sep 5, 2013 +---------------------------- +Initial release. \ No newline at end of file diff --git a/vendor/assets/components/angular-xeditable/bower.json b/vendor/assets/components/angular-xeditable/bower.json new file mode 100644 index 000000000..e1db722aa --- /dev/null +++ b/vendor/assets/components/angular-xeditable/bower.json @@ -0,0 +1,33 @@ +{ + "name": "angular-xeditable", + "version": "0.1.9", + "description": "Edit in place for AngularJS", + "author": "https://github.com/vitalets", + "license": "MIT", + "homepage": "http://vitalets.github.io/angular-xeditable", + "main": [ + "dist/css/xeditable.css", + "dist/js/xeditable.js" + ], + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "playground", + "test", + "libs", + "docs", + "zip", + "src", + "starter", + "Gruntfile.js", + "index.html", + "jsdoc.conf.json", + "package.json" + ], + "dependencies": { + "angular": "~1.x" + }, + "devDependencies": { + } +} \ No newline at end of file diff --git a/vendor/assets/components/angular-xeditable/dist/css/xeditable.css b/vendor/assets/components/angular-xeditable/dist/css/xeditable.css new file mode 100644 index 000000000..6e9b19f70 --- /dev/null +++ b/vendor/assets/components/angular-xeditable/dist/css/xeditable.css @@ -0,0 +1,7 @@ +/*! +angular-xeditable - 0.1.9 +Edit-in-place for angular.js +Build date: 2015-03-26 +*/ + +.editable-wrap{display:inline-block;white-space:nowrap;margin:0}.editable-wrap .editable-controls,.editable-wrap .editable-error{margin-bottom:0}.editable-wrap .editable-controls>input,.editable-wrap .editable-controls>select,.editable-wrap .editable-controls>textarea{margin-bottom:0}.editable-wrap .editable-input{display:inline-block}.editable-buttons{display:inline-block;vertical-align:top}.editable-buttons button{margin-left:5px}.editable-input.editable-has-buttons{width:auto}.editable-bstime .editable-input input[type=text]{width:46px}.editable-bstime .well-small{margin-bottom:0;padding:10px}.editable-range output{display:inline-block;min-width:30px;vertical-align:top;text-align:center}.editable-color input[type=color]{width:50px}.editable-checkbox label span,.editable-checklist label span,.editable-radiolist label span{margin-left:7px;margin-right:10px}.editable-hide{display:none!important}.editable-click,a.editable-click{text-decoration:none;color:#428bca;border-bottom:dashed 1px #428bca}.editable-click:hover,a.editable-click:hover{text-decoration:none;color:#2a6496;border-bottom-color:#2a6496}.editable-empty,.editable-empty:hover,.editable-empty:focus,a.editable-empty,a.editable-empty:hover,a.editable-empty:focus{font-style:italic;color:#D14;text-decoration:none} \ No newline at end of file diff --git a/vendor/assets/components/angular-xeditable/dist/js/xeditable.js b/vendor/assets/components/angular-xeditable/dist/js/xeditable.js new file mode 100644 index 000000000..cde698bea --- /dev/null +++ b/vendor/assets/components/angular-xeditable/dist/js/xeditable.js @@ -0,0 +1,2227 @@ +/*! +angular-xeditable - 0.1.9 +Edit-in-place for angular.js +Build date: 2015-03-26 +*/ +/** + * Angular-xeditable module + * + */ +angular.module('xeditable', []) + + +/** + * Default options. + * + * @namespace editable-options + */ +//todo: maybe better have editableDefaults, not options... +.value('editableOptions', { + /** + * Theme. Possible values `bs3`, `bs2`, `default`. + * + * @var {string} theme + * @memberOf editable-options + */ + theme: 'default', + /** + * Icon Set. Possible values `font-awesome`, `default`. + * + * @var {string} icon set + * @memberOf editable-options + */ + icon_set: 'default', + /** + * Whether to show buttons for single editalbe element. + * Possible values `right` (default), `no`. + * + * @var {string} buttons + * @memberOf editable-options + */ + buttons: 'right', + /** + * Default value for `blur` attribute of single editable element. + * Can be `cancel|submit|ignore`. + * + * @var {string} blurElem + * @memberOf editable-options + */ + blurElem: 'cancel', + /** + * Default value for `blur` attribute of editable form. + * Can be `cancel|submit|ignore`. + * + * @var {string} blurForm + * @memberOf editable-options + */ + blurForm: 'ignore', + /** + * How input elements get activated. Possible values: `focus|select|none`. + * + * @var {string} activate + * @memberOf editable-options + */ + activate: 'focus', + /** + * Whether to disable x-editable. Can be overloaded on each element. + * + * @var {boolean} isDisabled + * @memberOf editable-options + */ + isDisabled: false, + + /** + * Event, on which the edit mode gets activated. + * Can be any event. + * + * @var {string} activationEvent + * @memberOf editable-options + */ + activationEvent: 'click' + +}); + +/* +Angular-ui bootstrap datepicker +http://angular-ui.github.io/bootstrap/#/datepicker +*/ +angular.module('xeditable').directive('editableBsdate', ['editableDirectiveFactory', + function(editableDirectiveFactory) { + return editableDirectiveFactory({ + directiveName: 'editableBsdate', + inputTpl: '
      ', + render: function() { + /** This basically renders a datepicker as in the example shown in + ** http://angular-ui.github.io/bootstrap/#/datepicker + ** The attributes are all the same as in the bootstrap-ui datepicker with e- as prefix + **/ + this.parent.render.call(this); + + var inputDatePicker = angular.element(''); + var buttonDatePicker = angular.element(''); + var buttonWrapper = angular.element(''); + + inputDatePicker.attr('datepicker-popup', this.attrs.eDatepickerPopupXEditable || 'yyyy/MM/dd' ); + inputDatePicker.attr('is-open', this.attrs.eIsOpen); + inputDatePicker.attr('date-disabled', this.attrs.eDateDisabled); + inputDatePicker.attr('datepicker-popup', this.attrs.eDatepickerPopup); + inputDatePicker.attr('datepicker-mode', this.attrs.eDatepickerMode || 'day'); + inputDatePicker.attr('min-date', this.attrs.eMinDate); + inputDatePicker.attr('max-date', this.attrs.eMaxDate); + inputDatePicker.attr('show-weeks', this.attrs.eShowWeeks || true); + inputDatePicker.attr('starting-day', this.attrs.eStartingDay || 0); + inputDatePicker.attr('init-date', this.attrs.eInitDate || new Date()); + inputDatePicker.attr('min-mode', this.attrs.eMinMode || 'day'); + inputDatePicker.attr('max-mode', this.attrs.eMaxMode || 'year'); + inputDatePicker.attr('format-day', this.attrs.eFormatDay || 'dd'); + inputDatePicker.attr('format-month', this.attrs.eFormatMonth || 'MMMM'); + inputDatePicker.attr('format-year', this.attrs.eFormatYear || 'yyyy'); + inputDatePicker.attr('format-day-header', this.attrs.eFormatDayHeader || 'EEE'); + inputDatePicker.attr('format-day-title', this.attrs.eFormatDayTitle || 'MMMM yyyy'); + inputDatePicker.attr('format-month-title', this.attrs.eFormatMonthTitle || 'yyyy'); + inputDatePicker.attr('year-range', this.attrs.eYearRange || 20); + inputDatePicker.attr('show-button-bar', this.attrs.eShowButtonBar || true); + inputDatePicker.attr('current-text', this.attrs.eCurrentText || 'Today'); + inputDatePicker.attr('clear-text', this.attrs.eClearText || 'Clear'); + inputDatePicker.attr('close-text', this.attrs.eCloseText || 'Done'); + inputDatePicker.attr('close-on-date-selection', this.attrs.eCloseOnDateSelection || true); + inputDatePicker.attr('date-picker-append-to-body', this.attrs.eDatePickerAppendToBody || false); + inputDatePicker.attr('date-disabled', this.attrs.eDateDisabled); + + buttonDatePicker.attr('ng-click',this.attrs.eNgClick); + + buttonWrapper.append(buttonDatePicker); + this.inputEl.prepend(inputDatePicker); + this.inputEl.append(buttonWrapper); + + this.inputEl.removeAttr('class'); + this.inputEl.attr('class','input-group'); + + } + }); +}]); +/* +Angular-ui bootstrap editable timepicker +http://angular-ui.github.io/bootstrap/#/timepicker +*/ +angular.module('xeditable').directive('editableBstime', ['editableDirectiveFactory', + function(editableDirectiveFactory) { + return editableDirectiveFactory({ + directiveName: 'editableBstime', + inputTpl: '', + render: function() { + this.parent.render.call(this); + + // timepicker can't update model when ng-model set directly to it + // see: https://github.com/angular-ui/bootstrap/issues/1141 + // so we wrap it into DIV + var div = angular.element('
      '); + + // move ng-model to wrapping div + div.attr('ng-model', this.inputEl.attr('ng-model')); + this.inputEl.removeAttr('ng-model'); + + // move ng-change to wrapping div + if(this.attrs.eNgChange) { + div.attr('ng-change', this.inputEl.attr('ng-change')); + this.inputEl.removeAttr('ng-change'); + } + + // wrap + this.inputEl.wrap(div); + } + }); +}]); +//checkbox +angular.module('xeditable').directive('editableCheckbox', ['editableDirectiveFactory', + function(editableDirectiveFactory) { + return editableDirectiveFactory({ + directiveName: 'editableCheckbox', + inputTpl: '', + render: function() { + this.parent.render.call(this); + if(this.attrs.eTitle) { + this.inputEl.wrap(''); + this.inputEl.parent().append(this.attrs.eTitle); + } + }, + autosubmit: function() { + var self = this; + self.inputEl.bind('change', function() { + setTimeout(function() { + self.scope.$apply(function() { + self.scope.$form.$submit(); + }); + }, 500); + }); + } + }); +}]); + +// checklist +angular.module('xeditable').directive('editableChecklist', [ + 'editableDirectiveFactory', + 'editableNgOptionsParser', + function(editableDirectiveFactory, editableNgOptionsParser) { + return editableDirectiveFactory({ + directiveName: 'editableChecklist', + inputTpl: '', + useCopy: true, + render: function() { + this.parent.render.call(this); + var parsed = editableNgOptionsParser(this.attrs.eNgOptions); + var html = ''; + + this.inputEl.removeAttr('ng-model'); + this.inputEl.removeAttr('ng-options'); + this.inputEl.html(html); + } + }); +}]); + +angular.module('xeditable').directive('editableCombodate', ['editableDirectiveFactory', 'editableCombodate', + function(editableDirectiveFactory, editableCombodate) { + return editableDirectiveFactory({ + directiveName: 'editableCombodate', + inputTpl: '', + render: function() { + this.parent.render.call(this); + var combodate = editableCombodate.getInstance(this.inputEl, {value: new Date(this.scope.$data)}); + + var self = this; + combodate.$widget.find('select').bind('change', function(e) { + self.scope.$data = (new Date(combodate.getValue())).toISOString(); + }); + } + }); + } +]); +/* +Input types: text|email|tel|number|url|search|color|date|datetime|time|month|week +*/ + +(function() { + + var types = 'text|password|email|tel|number|url|search|color|date|datetime|time|month|week|file'.split('|'); + + //todo: datalist + + // generate directives + angular.forEach(types, function(type) { + var directiveName = 'editable'+type.charAt(0).toUpperCase() + type.slice(1); + angular.module('xeditable').directive(directiveName, ['editableDirectiveFactory', + function(editableDirectiveFactory) { + return editableDirectiveFactory({ + directiveName: directiveName, + inputTpl: '' + }); + }]); + }); + + //`range` is bit specific + angular.module('xeditable').directive('editableRange', ['editableDirectiveFactory', + function(editableDirectiveFactory) { + return editableDirectiveFactory({ + directiveName: 'editableRange', + inputTpl: '', + render: function() { + this.parent.render.call(this); + this.inputEl.after('{{$data}}'); + } + }); + }]); + +}()); + + +// radiolist +angular.module('xeditable').directive('editableRadiolist', [ + 'editableDirectiveFactory', + 'editableNgOptionsParser', + function(editableDirectiveFactory, editableNgOptionsParser) { + return editableDirectiveFactory({ + directiveName: 'editableRadiolist', + inputTpl: '', + render: function() { + this.parent.render.call(this); + var parsed = editableNgOptionsParser(this.attrs.eNgOptions); + var html = ''; + + this.inputEl.removeAttr('ng-model'); + this.inputEl.removeAttr('ng-options'); + this.inputEl.html(html); + }, + autosubmit: function() { + var self = this; + self.inputEl.bind('change', function() { + setTimeout(function() { + self.scope.$apply(function() { + self.scope.$form.$submit(); + }); + }, 500); + }); + } + }); +}]); + +//select +angular.module('xeditable').directive('editableSelect', ['editableDirectiveFactory', + function(editableDirectiveFactory) { + return editableDirectiveFactory({ + directiveName: 'editableSelect', + inputTpl: '', + autosubmit: function() { + var self = this; + self.inputEl.bind('change', function() { + self.scope.$apply(function() { + self.scope.$form.$submit(); + }); + }); + } + }); +}]); +//textarea +angular.module('xeditable').directive('editableTextarea', ['editableDirectiveFactory', + function(editableDirectiveFactory) { + return editableDirectiveFactory({ + directiveName: 'editableTextarea', + inputTpl: '', + addListeners: function() { + var self = this; + self.parent.addListeners.call(self); + // submit textarea by ctrl+enter even with buttons + if (self.single && self.buttons !== 'no') { + self.autosubmit(); + } + }, + autosubmit: function() { + var self = this; + self.inputEl.bind('keydown', function(e) { + if ((e.ctrlKey || e.metaKey) && (e.keyCode === 13)) { + self.scope.$apply(function() { + self.scope.$form.$submit(); + }); + } + }); + } + }); +}]); + +/** + * EditableController class. + * Attached to element with `editable-xxx` directive. + * + * @namespace editable-element + */ +/* +TODO: this file should be refactored to work more clear without closures! +*/ +angular.module('xeditable').factory('editableController', + ['$q', 'editableUtils', + function($q, editableUtils) { + + //EditableController function + EditableController.$inject = ['$scope', '$attrs', '$element', '$parse', 'editableThemes', 'editableIcons', 'editableOptions', '$rootScope', '$compile', '$q']; + function EditableController($scope, $attrs, $element, $parse, editableThemes, editableIcons, editableOptions, $rootScope, $compile, $q) { + var valueGetter; + + //if control is disabled - it does not participate in waiting process + var inWaiting; + + var self = this; + + self.scope = $scope; + self.elem = $element; + self.attrs = $attrs; + self.inputEl = null; + self.editorEl = null; + self.single = true; + self.error = ''; + self.theme = editableThemes[editableOptions.theme] || editableThemes['default']; + self.parent = {}; + + //will be undefined if icon_set is default and theme is default + self.icon_set = editableOptions.icon_set === 'default' ? editableIcons.default[editableOptions.theme] : editableIcons.external[editableOptions.icon_set]; + + //to be overwritten by directive + self.inputTpl = ''; + self.directiveName = ''; + + // with majority of controls copy is not needed, but.. + // copy MUST NOT be used for `select-multiple` with objects as items + // copy MUST be used for `checklist` + self.useCopy = false; + + //runtime (defaults) + self.single = null; + + /** + * Attributes defined with `e-*` prefix automatically transfered from original element to + * control. + * For example, if you set ` + * then input will appear as ``. + * See [demo](#text-customize). + * + * @var {any|attribute} e-* + * @memberOf editable-element + */ + + /** + * Whether to show ok/cancel buttons. Values: `right|no`. + * If set to `no` control automatically submitted when value changed. + * If control is part of form buttons will never be shown. + * + * @var {string|attribute} buttons + * @memberOf editable-element + */ + self.buttons = 'right'; + /** + * Action when control losses focus. Values: `cancel|submit|ignore`. + * Has sense only for single editable element. + * Otherwise, if control is part of form - you should set `blur` of form, not of individual element. + * + * @var {string|attribute} blur + * @memberOf editable-element + */ + // no real `blur` property as it is transfered to editable form + + //init + self.init = function(single) { + self.single = single; + + self.name = $attrs.eName || $attrs[self.directiveName]; + /* + if(!$attrs[directiveName] && !$attrs.eNgModel && ($attrs.eValue === undefined)) { + throw 'You should provide value for `'+directiveName+'` or `e-value` in editable element!'; + } + */ + if($attrs[self.directiveName]) { + valueGetter = $parse($attrs[self.directiveName]); + } else { + throw 'You should provide value for `'+self.directiveName+'` in editable element!'; + } + + // settings for single and non-single + if (!self.single) { + // hide buttons for non-single + self.buttons = 'no'; + } else { + self.buttons = self.attrs.buttons || editableOptions.buttons; + } + + //if name defined --> watch changes and update $data in form + if($attrs.eName) { + self.scope.$watch('$data', function(newVal){ + self.scope.$form.$data[$attrs.eName] = newVal; + }); + } + + /** + * Called when control is shown. + * See [demo](#select-remote). + * + * @var {method|attribute} onshow + * @memberOf editable-element + */ + if($attrs.onshow) { + self.onshow = function() { + return self.catchError($parse($attrs.onshow)($scope)); + }; + } + + /** + * Called when control is hidden after both save or cancel. + * + * @var {method|attribute} onhide + * @memberOf editable-element + */ + if($attrs.onhide) { + self.onhide = function() { + return $parse($attrs.onhide)($scope); + }; + } + + /** + * Called when control is cancelled. + * + * @var {method|attribute} oncancel + * @memberOf editable-element + */ + if($attrs.oncancel) { + self.oncancel = function() { + return $parse($attrs.oncancel)($scope); + }; + } + + /** + * Called during submit before value is saved to model. + * See [demo](#onbeforesave). + * + * @var {method|attribute} onbeforesave + * @memberOf editable-element + */ + if ($attrs.onbeforesave) { + self.onbeforesave = function() { + return self.catchError($parse($attrs.onbeforesave)($scope)); + }; + } + + /** + * Called during submit after value is saved to model. + * See [demo](#onaftersave). + * + * @var {method|attribute} onaftersave + * @memberOf editable-element + */ + if ($attrs.onaftersave) { + self.onaftersave = function() { + return self.catchError($parse($attrs.onaftersave)($scope)); + }; + } + + // watch change of model to update editable element + // now only add/remove `editable-empty` class. + // Initially this method called with newVal = undefined, oldVal = undefined + // so no need initially call handleEmpty() explicitly + $scope.$parent.$watch($attrs[self.directiveName], function(newVal, oldVal) { + self.setLocalValue(); + self.handleEmpty(); + }); + }; + + self.render = function() { + var theme = self.theme; + + //build input + self.inputEl = angular.element(self.inputTpl); + + //build controls + self.controlsEl = angular.element(theme.controlsTpl); + self.controlsEl.append(self.inputEl); + + //build buttons + if(self.buttons !== 'no') { + self.buttonsEl = angular.element(theme.buttonsTpl); + self.submitEl = angular.element(theme.submitTpl); + self.cancelEl = angular.element(theme.cancelTpl); + if(self.icon_set) { + self.submitEl.find('span').addClass(self.icon_set.ok); + self.cancelEl.find('span').addClass(self.icon_set.cancel); + } + self.buttonsEl.append(self.submitEl).append(self.cancelEl); + self.controlsEl.append(self.buttonsEl); + + self.inputEl.addClass('editable-has-buttons'); + } + + //build error + self.errorEl = angular.element(theme.errorTpl); + self.controlsEl.append(self.errorEl); + + //build editor + self.editorEl = angular.element(self.single ? theme.formTpl : theme.noformTpl); + self.editorEl.append(self.controlsEl); + + // transfer `e-*|data-e-*|x-e-*` attributes + for(var k in $attrs.$attr) { + if(k.length <= 1) { + continue; + } + var transferAttr = false; + var nextLetter = k.substring(1, 2); + + // if starts with `e` + uppercase letter + if(k.substring(0, 1) === 'e' && nextLetter === nextLetter.toUpperCase()) { + transferAttr = k.substring(1); // cut `e` + } else { + continue; + } + + // exclude `form` and `ng-submit`, + if(transferAttr === 'Form' || transferAttr === 'NgSubmit') { + continue; + } + + // convert back to lowercase style + transferAttr = transferAttr.substring(0, 1).toLowerCase() + editableUtils.camelToDash(transferAttr.substring(1)); + + // workaround for attributes without value (e.g. `multiple = "multiple"`) + // except for 'e-value' + var attrValue = (transferAttr !== 'value' && $attrs[k] === '') ? transferAttr : $attrs[k]; + + // set attributes to input + self.inputEl.attr(transferAttr, attrValue); + } + + self.inputEl.addClass('editable-input'); + self.inputEl.attr('ng-model', '$data'); + + // add directiveName class to editor, e.g. `editable-text` + self.editorEl.addClass(editableUtils.camelToDash(self.directiveName)); + + if(self.single) { + self.editorEl.attr('editable-form', '$form'); + // transfer `blur` to form + self.editorEl.attr('blur', self.attrs.blur || (self.buttons === 'no' ? 'cancel' : editableOptions.blurElem)); + } + + //apply `postrender` method of theme + if(angular.isFunction(theme.postrender)) { + theme.postrender.call(self); + } + + }; + + // with majority of controls copy is not needed, but.. + // copy MUST NOT be used for `select-multiple` with objects as items + // copy MUST be used for `checklist` + self.setLocalValue = function() { + self.scope.$data = self.useCopy ? + angular.copy(valueGetter($scope.$parent)) : + valueGetter($scope.$parent); + }; + + //show + self.show = function() { + // set value of scope.$data + self.setLocalValue(); + + /* + Originally render() was inside init() method, but some directives polluting editorEl, + so it is broken on second openning. + Cloning is not a solution as jqLite can not clone with event handler's. + */ + self.render(); + + // insert into DOM + $element.after(self.editorEl); + + // compile (needed to attach ng-* events from markup) + $compile(self.editorEl)($scope); + + // attach listeners (`escape`, autosubmit, etc) + self.addListeners(); + + // hide element + $element.addClass('editable-hide'); + + // onshow + return self.onshow(); + }; + + //hide + self.hide = function() { + + self.editorEl.remove(); + $element.removeClass('editable-hide'); + + // onhide + return self.onhide(); + }; + + // cancel + self.cancel = function() { + // oncancel + self.oncancel(); + // don't call hide() here as it called in form's code + }; + + /* + Called after show to attach listeners + */ + self.addListeners = function() { + // bind keyup for `escape` + self.inputEl.bind('keyup', function(e) { + if(!self.single) { + return; + } + + // todo: move this to editable-form! + switch(e.keyCode) { + // hide on `escape` press + case 27: + self.scope.$apply(function() { + self.scope.$form.$cancel(); + }); + break; + } + }); + + // autosubmit when `no buttons` + if (self.single && self.buttons === 'no') { + self.autosubmit(); + } + + // click - mark element as clicked to exclude in document click handler + self.editorEl.bind('click', function(e) { + // ignore right/middle button click + if (e.which && e.which !== 1) { + return; + } + + if (self.scope.$form.$visible) { + self.scope.$form._clicked = true; + } + }); + }; + + // setWaiting + self.setWaiting = function(value) { + if (value) { + // participate in waiting only if not disabled + inWaiting = !self.inputEl.attr('disabled') && + !self.inputEl.attr('ng-disabled') && + !self.inputEl.attr('ng-enabled'); + if (inWaiting) { + self.inputEl.attr('disabled', 'disabled'); + if(self.buttonsEl) { + self.buttonsEl.find('button').attr('disabled', 'disabled'); + } + } + } else { + if (inWaiting) { + self.inputEl.removeAttr('disabled'); + if (self.buttonsEl) { + self.buttonsEl.find('button').removeAttr('disabled'); + } + } + } + }; + + self.activate = function(start, end) { + setTimeout(function() { + var el = self.inputEl[0]; + if (editableOptions.activate === 'focus' && el.focus) { + if(start){ + end = end || start; + el.onfocus = function(){ + var that = this; + setTimeout(function(){ + that.setSelectionRange(start,end); + }); + }; + } + el.focus(); + } + if (editableOptions.activate === 'select' && el.select) { + el.select(); + } + }, 0); + }; + + self.setError = function(msg) { + if(!angular.isObject(msg)) { + $scope.$error = msg; + self.error = msg; + } + }; + + /* + Checks that result is string or promise returned string and shows it as error message + Applied to onshow, onbeforesave, onaftersave + */ + self.catchError = function(result, noPromise) { + if (angular.isObject(result) && noPromise !== true) { + $q.when(result).then( + //success and fail handlers are equal + angular.bind(this, function(r) { + this.catchError(r, true); + }), + angular.bind(this, function(r) { + this.catchError(r, true); + }) + ); + //check $http error + } else if (noPromise && angular.isObject(result) && result.status && + (result.status !== 200) && result.data && angular.isString(result.data)) { + this.setError(result.data); + //set result to string: to let form know that there was error + result = result.data; + } else if (angular.isString(result)) { + this.setError(result); + } + return result; + }; + + self.save = function() { + valueGetter.assign($scope.$parent, + self.useCopy ? angular.copy(self.scope.$data) : self.scope.$data); + + // no need to call handleEmpty here as we are watching change of model value + // self.handleEmpty(); + }; + + /* + attach/detach `editable-empty` class to element + */ + self.handleEmpty = function() { + var val = valueGetter($scope.$parent); + var isEmpty = val === null || val === undefined || val === "" || (angular.isArray(val) && val.length === 0); + $element.toggleClass('editable-empty', isEmpty); + }; + + /* + Called when `buttons = "no"` to submit automatically + */ + self.autosubmit = angular.noop; + + self.onshow = angular.noop; + self.onhide = angular.noop; + self.oncancel = angular.noop; + self.onbeforesave = angular.noop; + self.onaftersave = angular.noop; + } + + return EditableController; +}]); + +/* +editableFactory is used to generate editable directives (see `/directives` folder) +Inside it does several things: +- detect form for editable element. Form may be one of three types: + 1. autogenerated form (for single editable elements) + 2. wrapper form (element wrapped by
      tag) + 3. linked form (element has `e-form` attribute pointing to existing form) + +- attach editableController to element + +Depends on: editableController, editableFormFactory +*/ +angular.module('xeditable').factory('editableDirectiveFactory', +['$parse', '$compile', 'editableThemes', '$rootScope', '$document', 'editableController', 'editableFormController', 'editableOptions', +function($parse, $compile, editableThemes, $rootScope, $document, editableController, editableFormController, editableOptions) { + + //directive object + return function(overwrites) { + return { + restrict: 'A', + scope: true, + require: [overwrites.directiveName, '?^form'], + controller: editableController, + link: function(scope, elem, attrs, ctrl) { + // editable controller + var eCtrl = ctrl[0]; + + // form controller + var eFormCtrl; + + // this variable indicates is element is bound to some existing form, + // or it's single element who's form will be generated automatically + // By default consider single element without any linked form.ß + var hasForm = false; + + // element wrapped by form + if(ctrl[1]) { + eFormCtrl = ctrl[1]; + hasForm = true; + } else if(attrs.eForm) { // element not wrapped by , but we hane `e-form` attr + var getter = $parse(attrs.eForm)(scope); + if(getter) { // form exists in scope (above), e.g. editable column + eFormCtrl = getter; + hasForm = true; + } else { // form exists below or not exist at all: check document.forms + for(var i=0; i<$document[0].forms.length;i++){ + if($document[0].forms[i].name === attrs.eForm) { + // form is below and not processed yet + eFormCtrl = null; + hasForm = true; + break; + } + } + } + } + + /* + if(hasForm && !attrs.eName) { + throw 'You should provide `e-name` for editable element inside form!'; + } + */ + + //check for `editable-form` attr in form + /* + if(eFormCtrl && ) { + throw 'You should provide `e-name` for editable element inside form!'; + } + */ + + // store original props to `parent` before merge + angular.forEach(overwrites, function(v, k) { + if(eCtrl[k] !== undefined) { + eCtrl.parent[k] = eCtrl[k]; + } + }); + + // merge overwrites to base editable controller + angular.extend(eCtrl, overwrites); + + // x-editable can be disabled using editableOption or edit-disabled attribute + var disabled = angular.isDefined(attrs.editDisabled) ? + scope.$eval(attrs.editDisabled) : + editableOptions.isDisabled; + + if (disabled) { + return; + } + + // init editable ctrl + eCtrl.init(!hasForm); + + // publich editable controller as `$editable` to be referenced in html + scope.$editable = eCtrl; + + // add `editable` class to element + elem.addClass('editable'); + + // hasForm + if(hasForm) { + if(eFormCtrl) { + scope.$form = eFormCtrl; + if(!scope.$form.$addEditable) { + throw 'Form with editable elements should have `editable-form` attribute.'; + } + scope.$form.$addEditable(eCtrl); + } else { + // future form (below): add editable controller to buffer and add to form later + $rootScope.$$editableBuffer = $rootScope.$$editableBuffer || {}; + $rootScope.$$editableBuffer[attrs.eForm] = $rootScope.$$editableBuffer[attrs.eForm] || []; + $rootScope.$$editableBuffer[attrs.eForm].push(eCtrl); + scope.$form = null; //will be re-assigned later + } + // !hasForm + } else { + // create editableform controller + scope.$form = editableFormController(); + // add self to editable controller + scope.$form.$addEditable(eCtrl); + + // if `e-form` provided, publish local $form in scope + if(attrs.eForm) { + scope.$parent[attrs.eForm] = scope.$form; + } + + // bind click - if no external form defined + if(!attrs.eForm || attrs.eClickable) { + elem.addClass('editable-click'); + elem.bind(editableOptions.activationEvent, function(e) { + e.preventDefault(); + e.editable = eCtrl; + scope.$apply(function(){ + scope.$form.$show(); + }); + }); + } + } + + } + }; + }; +}]); + +/* +Returns editableForm controller +*/ +angular.module('xeditable').factory('editableFormController', + ['$parse', '$document', '$rootScope', 'editablePromiseCollection', 'editableUtils', + function($parse, $document, $rootScope, editablePromiseCollection, editableUtils) { + + // array of opened editable forms + var shown = []; + + //Check if the child element correspond or is a descendant of the parent element + var isSelfOrDescendant = function (parent, child) { + if (child == parent) { + return true; + } + + var node = child.parentNode; + while (node !== null) { + if (node == parent) { + return true; + } + node = node.parentNode; + } + return false; + }; + + //Check if it is a real blur : if the click event appear on a shown editable elem, this is not a blur. + var isBlur = function(shown, event) { + var isBlur = true; + + var editables = shown.$editables; + angular.forEach(editables, function(v){ + var element = v.editorEl[0]; + if (isSelfOrDescendant(element, event.target)) + isBlur = false; + + }); + return isBlur; + }; + + // bind click to body: cancel|submit|ignore forms + $document.bind('click', function(e) { + // ignore right/middle button click + if ((e.which && e.which !== 1) || e.isDefaultPrevented()) { + return; + } + + var toCancel = []; + var toSubmit = []; + for (var i=0; i containing editable controls. + * It add some usefull methods to form variable exposed to scope by `name="myform"` attribute. + * + * @namespace editable-form + */ +angular.module('xeditable').directive('editableForm', + ['$rootScope', '$parse', 'editableFormController', 'editableOptions', + function($rootScope, $parse, editableFormController, editableOptions) { + return { + restrict: 'A', + require: ['form'], + //require: ['form', 'editableForm'], + //controller: EditableFormController, + compile: function() { + return { + pre: function(scope, elem, attrs, ctrl) { + var form = ctrl[0]; + var eForm; + + //if `editableForm` has value - publish smartly under this value + //this is required only for single editor form that is created and removed + if(attrs.editableForm) { + if(scope[attrs.editableForm] && scope[attrs.editableForm].$show) { + eForm = scope[attrs.editableForm]; + angular.extend(form, eForm); + } else { + eForm = editableFormController(); + scope[attrs.editableForm] = eForm; + angular.extend(eForm, form); + } + } else { //just merge to form and publish if form has name + eForm = editableFormController(); + angular.extend(form, eForm); + } + + //read editables from buffer (that appeared before FORM tag) + var buf = $rootScope.$$editableBuffer; + var name = form.$name; + if(name && buf && buf[name]) { + angular.forEach(buf[name], function(editable) { + eForm.$addEditable(editable); + }); + delete buf[name]; + } + }, + post: function(scope, elem, attrs, ctrl) { + var eForm; + + if(attrs.editableForm && scope[attrs.editableForm] && scope[attrs.editableForm].$show) { + eForm = scope[attrs.editableForm]; + } else { + eForm = ctrl[0]; + } + + /** + * Called when form is shown. + * + * @var {method|attribute} onshow + * @memberOf editable-form + */ + if(attrs.onshow) { + eForm.$onshow = angular.bind(eForm, $parse(attrs.onshow), scope); + } + + /** + * Called when form hides after both save or cancel. + * + * @var {method|attribute} onhide + * @memberOf editable-form + */ + if(attrs.onhide) { + eForm.$onhide = angular.bind(eForm, $parse(attrs.onhide), scope); + } + + /** + * Called when form is cancelled. + * + * @var {method|attribute} oncancel + * @memberOf editable-form + */ + if(attrs.oncancel) { + eForm.$oncancel = angular.bind(eForm, $parse(attrs.oncancel), scope); + } + + /** + * Whether form initially rendered in shown state. + * + * @var {bool|attribute} shown + * @memberOf editable-form + */ + if(attrs.shown && $parse(attrs.shown)(scope)) { + eForm.$show(); + } + + /** + * Action when form losses focus. Values: `cancel|submit|ignore`. + * Default is `ignore`. + * + * @var {string|attribute} blur + * @memberOf editable-form + */ + eForm._blur = attrs.blur || editableOptions.blurForm; + + // onbeforesave, onaftersave + if(!attrs.ngSubmit && !attrs.submit) { + /** + * Called after all children `onbeforesave` callbacks but before saving form values + * to model. + * If at least one children callback returns `non-string` - it will not not be called. + * See [editable-form demo](#editable-form) for details. + * + * @var {method|attribute} onbeforesave + * @memberOf editable-form + * + */ + if(attrs.onbeforesave) { + eForm.$onbeforesave = function() { + return $parse(attrs.onbeforesave)(scope, {$data: eForm.$data}); + }; + } + + /** + * Called when form values are saved to model. + * See [editable-form demo](#editable-form) for details. + * + * @var {method|attribute} onaftersave + * @memberOf editable-form + * + */ + if(attrs.onaftersave) { + eForm.$onaftersave = function() { + return $parse(attrs.onaftersave)(scope, {$data: eForm.$data}); + }; + } + + elem.bind('submit', function(event) { + event.preventDefault(); + scope.$apply(function() { + eForm.$submit(); + }); + }); + } + + + // click - mark form as clicked to exclude in document click handler + elem.bind('click', function(e) { + // ignore right/middle button click + if (e.which && e.which !== 1) { + return; + } + + if (eForm.$visible) { + eForm._clicked = true; + } + }); + + } + }; + } + }; +}]); +/** + * editablePromiseCollection + * + * Collect results of function calls. Shows waiting if there are promises. + * Finally, applies callbacks if: + * - onTrue(): all results are true and all promises resolved to true + * - onFalse(): at least one result is false or promise resolved to false + * - onString(): at least one result is string or promise rejected or promise resolved to string + */ + +angular.module('xeditable').factory('editablePromiseCollection', ['$q', function($q) { + + function promiseCollection() { + return { + promises: [], + hasFalse: false, + hasString: false, + when: function(result, noPromise) { + if (result === false) { + this.hasFalse = true; + } else if (!noPromise && angular.isObject(result)) { + this.promises.push($q.when(result)); + } else if (angular.isString(result)){ + this.hasString = true; + } else { //result === true || result === undefined || result === null + return; + } + }, + //callbacks: onTrue, onFalse, onString + then: function(callbacks) { + callbacks = callbacks || {}; + var onTrue = callbacks.onTrue || angular.noop; + var onFalse = callbacks.onFalse || angular.noop; + var onString = callbacks.onString || angular.noop; + var onWait = callbacks.onWait || angular.noop; + + var self = this; + + if (this.promises.length) { + onWait(true); + $q.all(this.promises).then( + //all resolved + function(results) { + onWait(false); + //check all results via same `when` method (without checking promises) + angular.forEach(results, function(result) { + self.when(result, true); + }); + applyCallback(); + }, + //some rejected + function(error) { + onWait(false); + onString(); + } + ); + } else { + applyCallback(); + } + + function applyCallback() { + if (!self.hasString && !self.hasFalse) { + onTrue(); + } else if (!self.hasString && self.hasFalse) { + onFalse(); + } else { + onString(); + } + } + + } + }; + } + + return promiseCollection; + +}]); + +/** + * editableUtils + */ + angular.module('xeditable').factory('editableUtils', [function() { + return { + indexOf: function (array, obj) { + if (array.indexOf) return array.indexOf(obj); + + for ( var i = 0; i < array.length; i++) { + if (obj === array[i]) return i; + } + return -1; + }, + + arrayRemove: function (array, value) { + var index = this.indexOf(array, value); + if (index >= 0) { + array.splice(index, 1); + } + return value; + }, + + // copy from https://github.com/angular/angular.js/blob/master/src/Angular.js + camelToDash: function(str) { + var SNAKE_CASE_REGEXP = /[A-Z]/g; + return str.replace(SNAKE_CASE_REGEXP, function(letter, pos) { + return (pos ? '-' : '') + letter.toLowerCase(); + }); + }, + + dashToCamel: function(str) { + var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; + var MOZ_HACK_REGEXP = /^moz([A-Z])/; + return str. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); + } + }; +}]); + +/** + * editableNgOptionsParser + * + * see: https://github.com/angular/angular.js/blob/master/src/ng/directive/select.js#L131 + */ + angular.module('xeditable').factory('editableNgOptionsParser', [function() { + //0000111110000000000022220000000000000000000000333300000000000000444444444444444000000000555555555555555000000066666666666666600000000000000007777000000000000000000088888 + var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/; + + function parser(optionsExp) { + var match; + + if (! (match = optionsExp.match(NG_OPTIONS_REGEXP))) { + throw 'ng-options parse error'; + } + + var + displayFn = match[2] || match[1], + valueName = match[4] || match[6], + keyName = match[5], + groupByFn = match[3] || '', + valueFn = match[2] ? match[1] : valueName, + valuesFn = match[7], + track = match[8], + trackFn = track ? match[8] : null; + + var ngRepeat; + if (keyName === undefined) { // array + ngRepeat = valueName + ' in ' + valuesFn; + if (track !== undefined) { + ngRepeat += ' track by '+trackFn; + } + } else { // object + ngRepeat = '('+keyName+', '+valueName+') in '+valuesFn; + } + + // group not supported yet + return { + ngRepeat: ngRepeat, + locals: { + valueName: valueName, + keyName: keyName, + valueFn: valueFn, + displayFn: displayFn + } + }; + } + + return parser; +}]); + +/** + * editableCombodate + * + * angular version of https://github.com/vitalets/combodate + */ +angular.module('xeditable').factory('editableCombodate', [function() { + function Combodate(element, options) { + this.$element = angular.element(element); + + if(this.$element[0].nodeName != 'INPUT') { + throw 'Combodate should be applied to INPUT element'; + } + + this.defaults = { + //in this format value stored in original input + format: 'YYYY-MM-DD HH:mm', + //in this format items in dropdowns are displayed + template: 'D / MMM / YYYY H : mm', + //initial value, can be `new Date()` + value: null, + minYear: 1970, + maxYear: 2015, + yearDescending: true, + minuteStep: 5, + secondStep: 1, + firstItem: 'empty', //'name', 'empty', 'none' + errorClass: null, + customClass: '', + roundTime: true, // whether to round minutes and seconds if step > 1 + smartDays: true // whether days in combo depend on selected month: 31, 30, 28 + }; + + this.options = angular.extend({}, this.defaults, options); + this.init(); + } + + Combodate.prototype = { + constructor: Combodate, + init: function () { + this.map = { + //key regexp moment.method + day: ['D', 'date'], + month: ['M', 'month'], + year: ['Y', 'year'], + hour: ['[Hh]', 'hours'], + minute: ['m', 'minutes'], + second: ['s', 'seconds'], + ampm: ['[Aa]', ''] + }; + + this.$widget = angular.element('').html(this.getTemplate()); + + this.initCombos(); + + if (this.options.smartDays) { + var combo = this; + this.$widget.find('select').bind('change', function(e) { + // update days count if month or year changes + if (angular.element(e.target).hasClass('month') || angular.element(e.target).hasClass('year')) { + combo.fillCombo('day'); + } + }); + } + + this.$widget.find('select').css('width', 'auto'); + + // hide original input and insert widget + this.$element.css('display', 'none').after(this.$widget); + + // set initial value + this.setValue(this.$element.val() || this.options.value); + }, + + /* + Replace tokens in template with '); + }); + + return tpl; + }, + + /* + Initialize combos that presents in template + */ + initCombos: function() { + for (var k in this.map) { + var c = this.$widget[0].querySelectorAll('.'+k); + // set properties like this.$day, this.$month etc. + this['$'+k] = c.length ? angular.element(c) : null; + // fill with items + this.fillCombo(k); + } + }, + + /* + Fill combo with items + */ + fillCombo: function(k) { + var $combo = this['$'+k]; + if (!$combo) { + return; + } + + // define method name to fill items, e.g `fillDays` + var f = 'fill' + k.charAt(0).toUpperCase() + k.slice(1); + var items = this[f](); + var value = $combo.val(); + + $combo.html(''); + for(var i=0; i'+items[i][1]+''); + } + + $combo.val(value); + }, + + /* + Initialize items of combos. Handles `firstItem` option + */ + fillCommon: function(key) { + var values = [], relTime; + + if(this.options.firstItem === 'name') { + //need both to support moment ver < 2 and >= 2 + relTime = moment.relativeTime || moment.langData()._relativeTime; + var header = typeof relTime[key] === 'function' ? relTime[key](1, true, key, false) : relTime[key]; + //take last entry (see momentjs lang files structure) + header = header.split(' ').reverse()[0]; + values.push(['', header]); + } else if(this.options.firstItem === 'empty') { + values.push(['', '']); + } + return values; + }, + + + /* + fill day + */ + fillDay: function() { + var items = this.fillCommon('d'), name, i, + twoDigit = this.options.template.indexOf('DD') !== -1, + daysCount = 31; + + // detect days count (depends on month and year) + // originally https://github.com/vitalets/combodate/pull/7 + if (this.options.smartDays && this.$month && this.$year) { + var month = parseInt(this.$month.val(), 10); + var year = parseInt(this.$year.val(), 10); + + if (!isNaN(month) && !isNaN(year)) { + daysCount = moment([year, month]).daysInMonth(); + } + } + + for (i = 1; i <= daysCount; i++) { + name = twoDigit ? this.leadZero(i) : i; + items.push([i, name]); + } + return items; + }, + + /* + fill month + */ + fillMonth: function() { + var items = this.fillCommon('M'), name, i, + longNames = this.options.template.indexOf('MMMM') !== -1, + shortNames = this.options.template.indexOf('MMM') !== -1, + twoDigit = this.options.template.indexOf('MM') !== -1; + + for(i=0; i<=11; i++) { + if(longNames) { + //see https://github.com/timrwood/momentjs.com/pull/36 + name = moment().date(1).month(i).format('MMMM'); + } else if(shortNames) { + name = moment().date(1).month(i).format('MMM'); + } else if(twoDigit) { + name = this.leadZero(i+1); + } else { + name = i+1; + } + items.push([i, name]); + } + return items; + }, + + /* + fill year + */ + fillYear: function() { + var items = [], name, i, + longNames = this.options.template.indexOf('YYYY') !== -1; + + for(i=this.options.maxYear; i>=this.options.minYear; i--) { + name = longNames ? i : (i+'').substring(2); + items[this.options.yearDescending ? 'push' : 'unshift']([i, name]); + } + + items = this.fillCommon('y').concat(items); + + return items; + }, + + /* + fill hour + */ + fillHour: function() { + var items = this.fillCommon('h'), name, i, + h12 = this.options.template.indexOf('h') !== -1, + h24 = this.options.template.indexOf('H') !== -1, + twoDigit = this.options.template.toLowerCase().indexOf('hh') !== -1, + min = h12 ? 1 : 0, + max = h12 ? 12 : 23; + + for(i=min; i<=max; i++) { + name = twoDigit ? this.leadZero(i) : i; + items.push([i, name]); + } + return items; + }, + + /* + fill minute + */ + fillMinute: function() { + var items = this.fillCommon('m'), name, i, + twoDigit = this.options.template.indexOf('mm') !== -1; + + for(i=0; i<=59; i+= this.options.minuteStep) { + name = twoDigit ? this.leadZero(i) : i; + items.push([i, name]); + } + return items; + }, + + /* + fill second + */ + fillSecond: function() { + var items = this.fillCommon('s'), name, i, + twoDigit = this.options.template.indexOf('ss') !== -1; + + for(i=0; i<=59; i+= this.options.secondStep) { + name = twoDigit ? this.leadZero(i) : i; + items.push([i, name]); + } + return items; + }, + + /* + fill ampm + */ + fillAmpm: function() { + var ampmL = this.options.template.indexOf('a') !== -1, + ampmU = this.options.template.indexOf('A') !== -1, + items = [ + ['am', ampmL ? 'am' : 'AM'], + ['pm', ampmL ? 'pm' : 'PM'] + ]; + return items; + }, + + /* + Returns current date value from combos. + If format not specified - `options.format` used. + If format = `null` - Moment object returned. + */ + getValue: function(format) { + var dt, values = {}, + that = this, + notSelected = false; + + //getting selected values + angular.forEach(this.map, function(v, k) { + if(k === 'ampm') { + return; + } + var def = k === 'day' ? 1 : 0; + + values[k] = that['$'+k] ? parseInt(that['$'+k].val(), 10) : def; + + if(isNaN(values[k])) { + notSelected = true; + return false; + } + }); + + //if at least one visible combo not selected - return empty string + if(notSelected) { + return ''; + } + + //convert hours 12h --> 24h + if(this.$ampm) { + //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day) + if(values.hour === 12) { + values.hour = this.$ampm.val() === 'am' ? 0 : 12; + } else { + values.hour = this.$ampm.val() === 'am' ? values.hour : values.hour+12; + } + } + + dt = moment([values.year, values.month, values.day, values.hour, values.minute, values.second]); + + //highlight invalid date + this.highlight(dt); + + format = format === undefined ? this.options.format : format; + if(format === null) { + return dt.isValid() ? dt : null; + } else { + return dt.isValid() ? dt.format(format) : ''; + } + }, + + setValue: function(value) { + if(!value) { + return; + } + + // parse in strict mode (third param `true`) + var dt = typeof value === 'string' ? moment(value, this.options.format, true) : moment(value), + that = this, + values = {}; + + //function to find nearest value in select options + function getNearest($select, value) { + var delta = {}; + angular.forEach($select.children('option'), function(opt, i){ + var optValue = angular.element(opt).attr('value'); + + if(optValue === '') return; + var distance = Math.abs(optValue - value); + if(typeof delta.distance === 'undefined' || distance < delta.distance) { + delta = {value: optValue, distance: distance}; + } + }); + return delta.value; + } + + if(dt.isValid()) { + //read values from date object + angular.forEach(this.map, function(v, k) { + if(k === 'ampm') { + return; + } + values[k] = dt[v[1]](); + }); + + if(this.$ampm) { + //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day) + if(values.hour >= 12) { + values.ampm = 'pm'; + if(values.hour > 12) { + values.hour -= 12; + } + } else { + values.ampm = 'am'; + if(values.hour === 0) { + values.hour = 12; + } + } + } + + angular.forEach(values, function(v, k) { + //call val() for each existing combo, e.g. this.$hour.val() + if(that['$'+k]) { + + if(k === 'minute' && that.options.minuteStep > 1 && that.options.roundTime) { + v = getNearest(that['$'+k], v); + } + + if(k === 'second' && that.options.secondStep > 1 && that.options.roundTime) { + v = getNearest(that['$'+k], v); + } + + that['$'+k].val(v); + } + }); + + // update days count + if (this.options.smartDays) { + this.fillCombo('day'); + } + + this.$element.val(dt.format(this.options.format)).triggerHandler('change'); + } + }, + + /* + highlight combos if date is invalid + */ + highlight: function(dt) { + if(!dt.isValid()) { + if(this.options.errorClass) { + this.$widget.addClass(this.options.errorClass); + } else { + //store original border color + if(!this.borderColor) { + this.borderColor = this.$widget.find('select').css('border-color'); + } + this.$widget.find('select').css('border-color', 'red'); + } + } else { + if(this.options.errorClass) { + this.$widget.removeClass(this.options.errorClass); + } else { + this.$widget.find('select').css('border-color', this.borderColor); + } + } + }, + + leadZero: function(v) { + return v <= 9 ? '0' + v : v; + }, + + destroy: function() { + this.$widget.remove(); + this.$element.removeData('combodate').show(); + } + + }; + + return { + getInstance: function(element, options) { + return new Combodate(element, options); + } + }; +}]); + +/* +Editable icons: +- default +- font-awesome + +*/ +angular.module('xeditable').factory('editableIcons', function() { + + var icons = { + //Icon-set to use, defaults to bootstrap icons + default: { + 'bs2': { + ok: 'icon-ok icon-white', + cancel: 'icon-remove' + }, + 'bs3': { + ok: 'glyphicon glyphicon-ok', + cancel: 'glyphicon glyphicon-remove' + } + }, + external: { + 'font-awesome': { + ok: 'fa fa-check', + cancel: 'fa fa-times' + } + } + }; + + return icons; +}); + +/* +Editable themes: +- default +- bootstrap 2 +- bootstrap 3 + +Note: in postrender() `this` is instance of editableController +*/ +angular.module('xeditable').factory('editableThemes', function() { + var themes = { + //default + 'default': { + formTpl: '', + noformTpl: '', + controlsTpl: '', + inputTpl: '', + errorTpl: '
      ', + buttonsTpl: '', + submitTpl: '', + cancelTpl: '' + }, + + //bs2 + 'bs2': { + formTpl: '
      ', + noformTpl: '', + controlsTpl: '
      ', + inputTpl: '', + errorTpl: '
      ', + buttonsTpl: '', + submitTpl: '', + cancelTpl: '' + + }, + + //bs3 + 'bs3': { + formTpl: '
      ', + noformTpl: '', + controlsTpl: '
      ', + inputTpl: '', + errorTpl: '
      ', + buttonsTpl: '', + submitTpl: '', + cancelTpl: '', + + //bs3 specific prop to change buttons class: btn-sm, btn-lg + buttonsClass: '', + //bs3 specific prop to change standard inputs class: input-sm, input-lg + inputClass: '', + postrender: function() { + //apply `form-control` class to std inputs + switch(this.directiveName) { + case 'editableText': + case 'editableSelect': + case 'editableTextarea': + case 'editableEmail': + case 'editableTel': + case 'editableNumber': + case 'editableUrl': + case 'editableSearch': + case 'editableDate': + case 'editableDatetime': + case 'editableBsdate': + case 'editableTime': + case 'editableMonth': + case 'editableWeek': + this.inputEl.addClass('form-control'); + if(this.theme.inputClass) { + // don`t apply `input-sm` and `input-lg` to select multiple + // should be fixed in bs itself! + if(this.inputEl.attr('multiple') && + (this.theme.inputClass === 'input-sm' || this.theme.inputClass === 'input-lg')) { + break; + } + this.inputEl.addClass(this.theme.inputClass); + } + break; + case 'editableCheckbox': + this.editorEl.addClass('checkbox'); + } + + //apply buttonsClass (bs3 specific!) + if(this.buttonsEl && this.theme.buttonsClass) { + this.buttonsEl.find('button').addClass(this.theme.buttonsClass); + } + } + } + }; + + return themes; +}); diff --git a/vendor/assets/components/angular-xeditable/dist/js/xeditable.min.js b/vendor/assets/components/angular-xeditable/dist/js/xeditable.min.js new file mode 100644 index 000000000..8080f15b8 --- /dev/null +++ b/vendor/assets/components/angular-xeditable/dist/js/xeditable.min.js @@ -0,0 +1,6 @@ +/*! +angular-xeditable - 0.1.9 +Edit-in-place for angular.js +Build date: 2015-03-26 +*/ +angular.module("xeditable",[]).value("editableOptions",{theme:"default",icon_set:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus",isDisabled:!1,activationEvent:"click"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(a){return a({directiveName:"editableBsdate",inputTpl:"
      ",render:function(){this.parent.render.call(this);var a=angular.element(''),b=angular.element(''),c=angular.element('');a.attr("datepicker-popup",this.attrs.eDatepickerPopupXEditable||"yyyy/MM/dd"),a.attr("is-open",this.attrs.eIsOpen),a.attr("date-disabled",this.attrs.eDateDisabled),a.attr("datepicker-popup",this.attrs.eDatepickerPopup),a.attr("datepicker-mode",this.attrs.eDatepickerMode||"day"),a.attr("min-date",this.attrs.eMinDate),a.attr("max-date",this.attrs.eMaxDate),a.attr("show-weeks",this.attrs.eShowWeeks||!0),a.attr("starting-day",this.attrs.eStartingDay||0),a.attr("init-date",this.attrs.eInitDate||new Date),a.attr("min-mode",this.attrs.eMinMode||"day"),a.attr("max-mode",this.attrs.eMaxMode||"year"),a.attr("format-day",this.attrs.eFormatDay||"dd"),a.attr("format-month",this.attrs.eFormatMonth||"MMMM"),a.attr("format-year",this.attrs.eFormatYear||"yyyy"),a.attr("format-day-header",this.attrs.eFormatDayHeader||"EEE"),a.attr("format-day-title",this.attrs.eFormatDayTitle||"MMMM yyyy"),a.attr("format-month-title",this.attrs.eFormatMonthTitle||"yyyy"),a.attr("year-range",this.attrs.eYearRange||20),a.attr("show-button-bar",this.attrs.eShowButtonBar||!0),a.attr("current-text",this.attrs.eCurrentText||"Today"),a.attr("clear-text",this.attrs.eClearText||"Clear"),a.attr("close-text",this.attrs.eCloseText||"Done"),a.attr("close-on-date-selection",this.attrs.eCloseOnDateSelection||!0),a.attr("date-picker-append-to-body",this.attrs.eDatePickerAppendToBody||!1),a.attr("date-disabled",this.attrs.eDateDisabled),b.attr("ng-click",this.attrs.eNgClick),c.append(b),this.inputEl.prepend(a),this.inputEl.append(c),this.inputEl.removeAttr("class"),this.inputEl.attr("class","input-group")}})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(a){return a({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var a=angular.element('
      ');a.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(a.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(a)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(a){return a({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.parent().append(this.attrs.eTitle))},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(c)}})}]),angular.module("xeditable").directive("editableCombodate",["editableDirectiveFactory","editableCombodate",function(a,b){return a({directiveName:"editableCombodate",inputTpl:'',render:function(){this.parent.render.call(this);var a=b.getInstance(this.inputEl,{value:new Date(this.scope.$data)}),c=this;a.$widget.find("select").bind("change",function(){c.scope.$data=new Date(a.getValue()).toISOString()})}})}]),function(){var a="text|password|email|tel|number|url|search|color|date|datetime|time|month|week|file".split("|");angular.forEach(a,function(a){var b="editable"+a.charAt(0).toUpperCase()+a.slice(1);angular.module("xeditable").directive(b,["editableDirectiveFactory",function(c){return c({directiveName:b,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(a){return a({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(c)},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(a){return a({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var a=this;a.inputEl.bind("change",function(){a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(a){return a({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var a=this;a.parent.addListeners.call(a),a.single&&"no"!==a.buttons&&a.autosubmit()},autosubmit:function(){var a=this;a.inputEl.bind("keydown",function(b){(b.ctrlKey||b.metaKey)&&13===b.keyCode&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(a,b){function c(a,c,d,e,f,g,h,i,j,k){var l,m,n=this;n.scope=a,n.elem=d,n.attrs=c,n.inputEl=null,n.editorEl=null,n.single=!0,n.error="",n.theme=f[h.theme]||f["default"],n.parent={},n.icon_set="default"===h.icon_set?g["default"][h.theme]:g.external[h.icon_set],n.inputTpl="",n.directiveName="",n.useCopy=!1,n.single=null,n.buttons="right",n.init=function(b){if(n.single=b,n.name=c.eName||c[n.directiveName],!c[n.directiveName])throw"You should provide value for `"+n.directiveName+"` in editable element!";l=e(c[n.directiveName]),n.buttons=n.single?n.attrs.buttons||h.buttons:"no",c.eName&&n.scope.$watch("$data",function(a){n.scope.$form.$data[c.eName]=a}),c.onshow&&(n.onshow=function(){return n.catchError(e(c.onshow)(a))}),c.onhide&&(n.onhide=function(){return e(c.onhide)(a)}),c.oncancel&&(n.oncancel=function(){return e(c.oncancel)(a)}),c.onbeforesave&&(n.onbeforesave=function(){return n.catchError(e(c.onbeforesave)(a))}),c.onaftersave&&(n.onaftersave=function(){return n.catchError(e(c.onaftersave)(a))}),a.$parent.$watch(c[n.directiveName],function(){n.setLocalValue(),n.handleEmpty()})},n.render=function(){var a=n.theme;n.inputEl=angular.element(n.inputTpl),n.controlsEl=angular.element(a.controlsTpl),n.controlsEl.append(n.inputEl),"no"!==n.buttons&&(n.buttonsEl=angular.element(a.buttonsTpl),n.submitEl=angular.element(a.submitTpl),n.cancelEl=angular.element(a.cancelTpl),n.icon_set&&(n.submitEl.find("span").addClass(n.icon_set.ok),n.cancelEl.find("span").addClass(n.icon_set.cancel)),n.buttonsEl.append(n.submitEl).append(n.cancelEl),n.controlsEl.append(n.buttonsEl),n.inputEl.addClass("editable-has-buttons")),n.errorEl=angular.element(a.errorTpl),n.controlsEl.append(n.errorEl),n.editorEl=angular.element(n.single?a.formTpl:a.noformTpl),n.editorEl.append(n.controlsEl);for(var d in c.$attr)if(!(d.length<=1)){var e=!1,f=d.substring(1,2);if("e"===d.substring(0,1)&&f===f.toUpperCase()&&(e=d.substring(1),"Form"!==e&&"NgSubmit"!==e)){e=e.substring(0,1).toLowerCase()+b.camelToDash(e.substring(1));var g="value"!==e&&""===c[d]?e:c[d];n.inputEl.attr(e,g)}}n.inputEl.addClass("editable-input"),n.inputEl.attr("ng-model","$data"),n.editorEl.addClass(b.camelToDash(n.directiveName)),n.single&&(n.editorEl.attr("editable-form","$form"),n.editorEl.attr("blur",n.attrs.blur||("no"===n.buttons?"cancel":h.blurElem))),angular.isFunction(a.postrender)&&a.postrender.call(n)},n.setLocalValue=function(){n.scope.$data=n.useCopy?angular.copy(l(a.$parent)):l(a.$parent)},n.show=function(){return n.setLocalValue(),n.render(),d.after(n.editorEl),j(n.editorEl)(a),n.addListeners(),d.addClass("editable-hide"),n.onshow()},n.hide=function(){return n.editorEl.remove(),d.removeClass("editable-hide"),n.onhide()},n.cancel=function(){n.oncancel()},n.addListeners=function(){n.inputEl.bind("keyup",function(a){if(n.single)switch(a.keyCode){case 27:n.scope.$apply(function(){n.scope.$form.$cancel()})}}),n.single&&"no"===n.buttons&&n.autosubmit(),n.editorEl.bind("click",function(a){a.which&&1!==a.which||n.scope.$form.$visible&&(n.scope.$form._clicked=!0)})},n.setWaiting=function(a){a?(m=!n.inputEl.attr("disabled")&&!n.inputEl.attr("ng-disabled")&&!n.inputEl.attr("ng-enabled"),m&&(n.inputEl.attr("disabled","disabled"),n.buttonsEl&&n.buttonsEl.find("button").attr("disabled","disabled"))):m&&(n.inputEl.removeAttr("disabled"),n.buttonsEl&&n.buttonsEl.find("button").removeAttr("disabled"))},n.activate=function(a,b){setTimeout(function(){var c=n.inputEl[0];"focus"===h.activate&&c.focus&&(a&&(b=b||a,c.onfocus=function(){var c=this;setTimeout(function(){c.setSelectionRange(a,b)})}),c.focus()),"select"===h.activate&&c.select&&c.select()},0)},n.setError=function(b){angular.isObject(b)||(a.$error=b,n.error=b)},n.catchError=function(a,b){return angular.isObject(a)&&b!==!0?k.when(a).then(angular.bind(this,function(a){this.catchError(a,!0)}),angular.bind(this,function(a){this.catchError(a,!0)})):b&&angular.isObject(a)&&a.status&&200!==a.status&&a.data&&angular.isString(a.data)?(this.setError(a.data),a=a.data):angular.isString(a)&&this.setError(a),a},n.save=function(){l.assign(a.$parent,n.useCopy?angular.copy(n.scope.$data):n.scope.$data)},n.handleEmpty=function(){var b=l(a.$parent),c=null===b||void 0===b||""===b||angular.isArray(b)&&0===b.length;d.toggleClass("editable-empty",c)},n.autosubmit=angular.noop,n.onshow=angular.noop,n.onhide=angular.noop,n.oncancel=angular.noop,n.onbeforesave=angular.noop,n.onaftersave=angular.noop}return c.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableIcons","editableOptions","$rootScope","$compile","$q"],c}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController","editableOptions",function(a,b,c,d,e,f,g,h){return function(b){return{restrict:"A",scope:!0,require:[b.directiveName,"?^form"],controller:f,link:function(c,f,i,j){var k,l=j[0],m=!1;if(j[1])k=j[1],m=!0;else if(i.eForm){var n=a(i.eForm)(c);if(n)k=n,m=!0;else for(var o=0;o=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function a(a){var c;if(!(c=a.match(b)))throw"ng-options parse error";var d,e=c[2]||c[1],f=c[4]||c[6],g=c[5],h=(c[3]||"",c[2]?c[1]:f),i=c[7],j=c[8],k=j?c[8]:null;return void 0===g?(d=f+" in "+i,void 0!==j&&(d+=" track by "+k)):d="("+g+", "+f+") in "+i,{ngRepeat:d,locals:{valueName:f,keyName:g,valueFn:h,displayFn:e}}}var b=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return a}]),angular.module("xeditable").factory("editableCombodate",[function(){function a(a,b){if(this.$element=angular.element(a),"INPUT"!=this.$element[0].nodeName)throw"Combodate should be applied to INPUT element";this.defaults={format:"YYYY-MM-DD HH:mm",template:"D / MMM / YYYY H : mm",value:null,minYear:1970,maxYear:2015,yearDescending:!0,minuteStep:5,secondStep:1,firstItem:"empty",errorClass:null,customClass:"",roundTime:!0,smartDays:!0},this.options=angular.extend({},this.defaults,b),this.init()}return a.prototype={constructor:a,init:function(){if(this.map={day:["D","date"],month:["M","month"],year:["Y","year"],hour:["[Hh]","hours"],minute:["m","minutes"],second:["s","seconds"],ampm:["[Aa]",""]},this.$widget=angular.element('').html(this.getTemplate()),this.initCombos(),this.options.smartDays){var a=this;this.$widget.find("select").bind("change",function(b){(angular.element(b.target).hasClass("month")||angular.element(b.target).hasClass("year"))&&a.fillCombo("day")})}this.$widget.find("select").css("width","auto"),this.$element.css("display","none").after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var a=this.options.template,b=this.options.customClass;return angular.forEach(this.map,function(b){b=b[0];var c=new RegExp(b+"+"),d=b.length>1?b.substring(1,2):b;a=a.replace(c,"{"+d+"}")}),a=a.replace(/ /g," "),angular.forEach(this.map,function(c,d){c=c[0];var e=c.length>1?c.substring(1,2):c;a=a.replace("{"+e+"}",'')}),a},initCombos:function(){for(var a in this.map){var b=this.$widget[0].querySelectorAll("."+a);this["$"+a]=b.length?angular.element(b):null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.html("");for(var f=0;f'+d[f][1]+"");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(a){var b,c={},d=this,e=!1;return angular.forEach(this.map,function(a,b){if("ampm"!==b){var f="day"===b?1:0;return c[b]=d["$"+b]?parseInt(d["$"+b].val(),10):f,isNaN(c[b])?(e=!0,!1):void 0}}),e?"":(this.$ampm&&(c.hour=12===c.hour?"am"===this.$ampm.val()?0:12:"am"===this.$ampm.val()?c.hour:c.hour+12),b=moment([c.year,c.month,c.day,c.hour,c.minute,c.second]),this.highlight(b),a=void 0===a?this.options.format:a,null===a?b.isValid()?b:null:b.isValid()?b.format(a):"")},setValue:function(a){function b(a,b){var c={};return angular.forEach(a.children("option"),function(a){var d=angular.element(a).attr("value");if(""!==d){var e=Math.abs(d-b);("undefined"==typeof c.distance||e=12?(e.ampm="pm",e.hour>12&&(e.hour-=12)):(e.ampm="am",0===e.hour&&(e.hour=12))),angular.forEach(e,function(a,c){d["$"+c]&&("minute"===c&&d.options.minuteStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),"second"===c&&d.options.secondStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),d["$"+c].val(a))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(c.format(this.options.format)).triggerHandler("change"))}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},{getInstance:function(b,c){return new a(b,c)}}}]),angular.module("xeditable").factory("editableIcons",function(){var a={"default":{bs2:{ok:"icon-ok icon-white",cancel:"icon-remove"},bs3:{ok:"glyphicon glyphicon-ok",cancel:"glyphicon glyphicon-remove"}},external:{"font-awesome":{ok:"fa fa-check",cancel:"fa fa-times"}}};return a}),angular.module("xeditable").factory("editableThemes",function(){var a={"default":{formTpl:'
      ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
      ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
      ',noformTpl:'',controlsTpl:'
      ',inputTpl:"",errorTpl:'
      ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
      ',noformTpl:'',controlsTpl:'
      ',inputTpl:"",errorTpl:'
      ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("checkbox")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}};return a}); \ No newline at end of file diff --git a/vendor/assets/components/angular-xeditable/npm-debug.log b/vendor/assets/components/angular-xeditable/npm-debug.log new file mode 100644 index 000000000..6e3530010 --- /dev/null +++ b/vendor/assets/components/angular-xeditable/npm-debug.log @@ -0,0 +1,28 @@ +0 info it worked if it ends with ok +1 verbose cli [ 'C:\\Program Files\\nodejs\\\\node.exe', +1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js', +1 verbose cli 'install' ] +2 info using npm@1.4.28 +3 info using node@v0.10.33 +4 verbose node symlink C:\Program Files\nodejs\\node.exe +5 error install Couldn't read dependencies +6 error Error: Invalid version: "0.1.8.1" +6 error at Object.module.exports.fixVersionField (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-json\node_modules\normalize-package-data\lib\fixer.js:183:13) +6 error at C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-json\node_modules\normalize-package-data\lib\normalize.js:30:38 +6 error at Array.forEach (native) +6 error at normalize (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-json\node_modules\normalize-package-data\lib\normalize.js:29:15) +6 error at final (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-json\read-json.js:342:33) +6 error at then (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-json\read-json.js:126:33) +6 error at C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-json\read-json.js:331:40 +6 error at evalmachine.:271:14 +6 error at C:\Program Files\nodejs\node_modules\npm\node_modules\graceful-fs\graceful-fs.js:102:5 +6 error at Object.oncomplete (evalmachine.:107:15) +7 error If you need help, you may report this *entire* log, +7 error including the npm and node versions, at: +7 error +8 error System Windows_NT 6.2.9200 +9 error command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" +10 error cwd C:\Users\Victor\Documents\GitHub\angular-xeditable +11 error node -v v0.10.33 +12 error npm -v 1.4.28 +13 verbose exit [ 1, true ] diff --git a/vendor/assets/components/angular-xeditable/readme.md b/vendor/assets/components/angular-xeditable/readme.md new file mode 100644 index 000000000..a7c8e679f --- /dev/null +++ b/vendor/assets/components/angular-xeditable/readme.md @@ -0,0 +1,46 @@ +# Angular-xeditable +Edit in place for AngularJS + +## Overview +**Angular-xeditable** is a bundle of [AngularJS](http://angularjs.org) directives that allows you to create +*editable* elements in your projects. +Such technique is also known as *click-to-edit* or *edit-in-place*. +It is based on ideas of [x-editable](http://vitalets.github.io/x-editable) but was written from scratch +to use power of angular and support complex forms / editable grids. + +## Demo and docs +**http://vitalets.github.io/angular-xeditable** + +## Installation +#### Bower +```` +bower install angular-xeditable +```` +#### Manual +Download latest version from [project homepage](http://vitalets.github.io/angular-xeditable). +#### Insert dependency +```` +var app = angular.module("app", ["xeditable"]); +```` + +## Dependencies +Basically it does not depend on any libraries except [AngularJS](http://angularjs.org) itself. +For themes you may need to include [Twitter Bootstrap](http://getbootstrap.com) CSS. +For some extra controls (e.g. datepicker) you may need to include [angular-ui bootstrap](http://angular-ui.github.io/bootstrap/). + + +## jsFiddle / Plunker +Please use these live templates when creating issues: +http://jsfiddle.net/NfPcH/3 +http://plnkr.co/edit/BjWwXIlYyyLvRnVwO8m8?p=preview + +## Roadmap + +* select2 +* [checklist](https://github.com/vitalets/checklist-model) +* [combodate](https://github.com/vitalets/combodate) +* popup mode (waiting https://github.com/angular-ui/bootstrap/pull/1391) +* internally move to [lazy-model](https://github.com/vitalets/lazy-model) + +## License +MIT diff --git a/vendor/assets/components/angular/.bower.json b/vendor/assets/components/angular/.bower.json new file mode 100644 index 000000000..0b97749ec --- /dev/null +++ b/vendor/assets/components/angular/.bower.json @@ -0,0 +1,17 @@ +{ + "name": "angular", + "version": "1.2.28", + "main": "./angular.js", + "ignore": [], + "dependencies": {}, + "homepage": "https://github.com/angular/bower-angular", + "_release": "1.2.28", + "_resolution": { + "type": "version", + "tag": "v1.2.28", + "commit": "d1369fe05d3a7d85961a2223292b67ee82b9f80a" + }, + "_source": "git://github.com/angular/bower-angular.git", + "_target": ">=1.2.0", + "_originalSource": "angular" +} \ No newline at end of file diff --git a/vendor/assets/components/angular/README.md b/vendor/assets/components/angular/README.md new file mode 100644 index 000000000..897fb7f01 --- /dev/null +++ b/vendor/assets/components/angular/README.md @@ -0,0 +1,67 @@ +# packaged angular + +This repo is for distribution on `npm` and `bower`. The source for this module is in the +[main AngularJS repo](https://github.com/angular/angular.js). +Please file issues and pull requests against that repo. + +## Install + +You can install this package either with `npm` or with `bower`. + +### npm + +```shell +npm install angular +``` + +Then add a ` +``` + +Note that this package is not in CommonJS format, so doing `require('angular')` will return `undefined`. +If you're using [Browserify](https://github.com/substack/node-browserify), you can use +[exposify](https://github.com/thlorenz/exposify) to have `require('angular')` return the `angular` +global. + +### bower + +```shell +bower install angular +``` + +Then add a ` +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/). + +## License + +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/assets/components/angular/angular-csp.css b/vendor/assets/components/angular/angular-csp.css new file mode 100644 index 000000000..3abb3a0e6 --- /dev/null +++ b/vendor/assets/components/angular/angular-csp.css @@ -0,0 +1,24 @@ +/* Include this file in your html if you are using the CSP mode. */ + +@charset "UTF-8"; + +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], +.ng-cloak, .x-ng-cloak, +.ng-hide { + display: none !important; +} + +ng\:form { + display: block; +} + +.ng-animate-block-transitions { + transition:0s all!important; + -webkit-transition:0s all!important; +} + +/* show the element during a show/hide animation when the + * animation is ongoing, but the .ng-hide class is active */ +.ng-hide-add-active, .ng-hide-remove { + display: block!important; +} diff --git a/vendor/assets/components/angular/angular.js b/vendor/assets/components/angular/angular.js new file mode 100644 index 000000000..ccf3b4baf --- /dev/null +++ b/vendor/assets/components/angular/angular.js @@ -0,0 +1,22154 @@ +/** + * @license AngularJS v1.2.28 + * (c) 2010-2014 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, document, undefined) {'use strict'; + +/** + * @description + * + * This object provides a utility for producing rich Error messages within + * Angular. It can be called as follows: + * + * var exampleMinErr = minErr('example'); + * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); + * + * The above creates an instance of minErr in the example namespace. The + * resulting error will have a namespaced error code of example.one. The + * resulting error will replace {0} with the value of foo, and {1} with the + * value of bar. The object is not restricted in the number of arguments it can + * take. + * + * If fewer arguments are specified than necessary for interpolation, the extra + * interpolation markers will be preserved in the final string. + * + * Since data will be parsed statically during a build step, some restrictions + * are applied with respect to how minErr instances are created and called. + * Instances should have names of the form namespaceMinErr for a minErr created + * using minErr('namespace') . Error codes, namespaces and template strings + * should all be static strings, not variables or general expressions. + * + * @param {string} module The namespace to use for the new minErr instance. + * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance + */ + +function minErr(module) { + return function () { + var code = arguments[0], + prefix = '[' + (module ? module + ':' : '') + code + '] ', + template = arguments[1], + templateArgs = arguments, + stringify = function (obj) { + if (typeof obj === 'function') { + return obj.toString().replace(/ \{[\s\S]*$/, ''); + } else if (typeof obj === 'undefined') { + return 'undefined'; + } else if (typeof obj !== 'string') { + return JSON.stringify(obj); + } + return obj; + }, + message, i; + + message = prefix + template.replace(/\{\d+\}/g, function (match) { + var index = +match.slice(1, -1), arg; + + if (index + 2 < templateArgs.length) { + arg = templateArgs[index + 2]; + if (typeof arg === 'function') { + return arg.toString().replace(/ ?\{[\s\S]*$/, ''); + } else if (typeof arg === 'undefined') { + return 'undefined'; + } else if (typeof arg !== 'string') { + return toJson(arg); + } + return arg; + } + return match; + }); + + message = message + '\nhttp://errors.angularjs.org/1.2.28/' + + (module ? module + '/' : '') + code; + for (i = 2; i < arguments.length; i++) { + message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + + encodeURIComponent(stringify(arguments[i])); + } + + return new Error(message); + }; +} + +/* We need to tell jshint what variables are being exported */ +/* global angular: true, + msie: true, + jqLite: true, + jQuery: true, + slice: true, + push: true, + toString: true, + ngMinErr: true, + angularModule: true, + nodeName_: true, + uid: true, + VALIDITY_STATE_PROPERTY: true, + + lowercase: true, + uppercase: true, + manualLowercase: true, + manualUppercase: true, + nodeName_: true, + isArrayLike: true, + forEach: true, + sortedKeys: true, + forEachSorted: true, + reverseParams: true, + nextUid: true, + setHashKey: true, + extend: true, + int: true, + inherit: true, + noop: true, + identity: true, + valueFn: true, + isUndefined: true, + isDefined: true, + isObject: true, + isString: true, + isNumber: true, + isDate: true, + isArray: true, + isFunction: true, + isRegExp: true, + isWindow: true, + isScope: true, + isFile: true, + isBlob: true, + isBoolean: true, + isPromiseLike: true, + trim: true, + isElement: true, + makeMap: true, + map: true, + size: true, + includes: true, + indexOf: true, + arrayRemove: true, + isLeafNode: true, + copy: true, + shallowCopy: true, + equals: true, + csp: true, + concat: true, + sliceArgs: true, + bind: true, + toJsonReplacer: true, + toJson: true, + fromJson: true, + toBoolean: true, + startingTag: true, + tryDecodeURIComponent: true, + parseKeyValue: true, + toKeyValue: true, + encodeUriSegment: true, + encodeUriQuery: true, + angularInit: true, + bootstrap: true, + snake_case: true, + bindJQuery: true, + assertArg: true, + assertArgFn: true, + assertNotHasOwnProperty: true, + getter: true, + getBlockElements: true, + hasOwnProperty: true, +*/ + +//////////////////////////////////// + +/** + * @ngdoc module + * @name ng + * @module ng + * @description + * + * # ng (core module) + * The ng module is loaded by default when an AngularJS application is started. The module itself + * contains the essential components for an AngularJS application to function. The table below + * lists a high level breakdown of each of the services/factories, filters, directives and testing + * components available within this core module. + * + *
      + */ + +// The name of a form control's ValidityState property. +// This is used so that it's possible for internal tests to create mock ValidityStates. +var VALIDITY_STATE_PROPERTY = 'validity'; + +/** + * @ngdoc function + * @name angular.lowercase + * @module ng + * @kind function + * + * @description Converts the specified string to lowercase. + * @param {string} string String to be converted to lowercase. + * @returns {string} Lowercased string. + */ +var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;}; +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * @ngdoc function + * @name angular.uppercase + * @module ng + * @kind function + * + * @description Converts the specified string to uppercase. + * @param {string} string String to be converted to uppercase. + * @returns {string} Uppercased string. + */ +var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;}; + + +var manualLowercase = function(s) { + /* jshint bitwise: false */ + return isString(s) + ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);}) + : s; +}; +var manualUppercase = function(s) { + /* jshint bitwise: false */ + return isString(s) + ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);}) + : s; +}; + + +// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish +// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods +// with correct but slower alternatives. +if ('i' !== 'I'.toLowerCase()) { + lowercase = manualLowercase; + uppercase = manualUppercase; +} + + +var + msie, // holds major version number for IE, or NaN if UA is not IE. + jqLite, // delay binding since jQuery could be loaded after us. + jQuery, // delay binding + slice = [].slice, + push = [].push, + toString = Object.prototype.toString, + ngMinErr = minErr('ng'), + + /** @name angular */ + angular = window.angular || (window.angular = {}), + angularModule, + nodeName_, + uid = ['0', '0', '0']; + +/** + * IE 11 changed the format of the UserAgent string. + * See http://msdn.microsoft.com/en-us/library/ms537503.aspx + */ +msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); +if (isNaN(msie)) { + msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); +} + + +/** + * @private + * @param {*} obj + * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, + * String ...) + */ +function isArrayLike(obj) { + if (obj == null || isWindow(obj)) { + return false; + } + + var length = obj.length; + + if (obj.nodeType === 1 && length) { + return true; + } + + return isString(obj) || isArray(obj) || length === 0 || + typeof length === 'number' && length > 0 && (length - 1) in obj; +} + +/** + * @ngdoc function + * @name angular.forEach + * @module ng + * @kind function + * + * @description + * Invokes the `iterator` function once for each item in `obj` collection, which can be either an + * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value` + * is the value of an object property or an array element and `key` is the object property key or + * array element index. Specifying a `context` for the function is optional. + * + * It is worth noting that `.forEach` does not iterate over inherited properties because it filters + * using the `hasOwnProperty` method. + * + ```js + var values = {name: 'misko', gender: 'male'}; + var log = []; + angular.forEach(values, function(value, key) { + this.push(key + ': ' + value); + }, log); + expect(log).toEqual(['name: misko', 'gender: male']); + ``` + * + * @param {Object|Array} obj Object to iterate over. + * @param {Function} iterator Iterator function. + * @param {Object=} context Object to become context (`this`) for the iterator function. + * @returns {Object|Array} Reference to `obj`. + */ +function forEach(obj, iterator, context) { + var key; + if (obj) { + if (isFunction(obj)) { + for (key in obj) { + // Need to check if hasOwnProperty exists, + // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function + if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) { + iterator.call(context, obj[key], key); + } + } + } else if (isArray(obj) || isArrayLike(obj)) { + for (key = 0; key < obj.length; key++) { + iterator.call(context, obj[key], key); + } + } else if (obj.forEach && obj.forEach !== forEach) { + obj.forEach(iterator, context); + } else { + for (key in obj) { + if (obj.hasOwnProperty(key)) { + iterator.call(context, obj[key], key); + } + } + } + } + return obj; +} + +function sortedKeys(obj) { + var keys = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + keys.push(key); + } + } + return keys.sort(); +} + +function forEachSorted(obj, iterator, context) { + var keys = sortedKeys(obj); + for ( var i = 0; i < keys.length; i++) { + iterator.call(context, obj[keys[i]], keys[i]); + } + return keys; +} + + +/** + * when using forEach the params are value, key, but it is often useful to have key, value. + * @param {function(string, *)} iteratorFn + * @returns {function(*, string)} + */ +function reverseParams(iteratorFn) { + return function(value, key) { iteratorFn(key, value); }; +} + +/** + * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric + * characters such as '012ABC'. The reason why we are not using simply a number counter is that + * the number string gets longer over time, and it can also overflow, where as the nextId + * will grow much slower, it is a string, and it will never overflow. + * + * @returns {string} an unique alpha-numeric string + */ +function nextUid() { + var index = uid.length; + var digit; + + while(index) { + index--; + digit = uid[index].charCodeAt(0); + if (digit == 57 /*'9'*/) { + uid[index] = 'A'; + return uid.join(''); + } + if (digit == 90 /*'Z'*/) { + uid[index] = '0'; + } else { + uid[index] = String.fromCharCode(digit + 1); + return uid.join(''); + } + } + uid.unshift('0'); + return uid.join(''); +} + + +/** + * Set or clear the hashkey for an object. + * @param obj object + * @param h the hashkey (!truthy to delete the hashkey) + */ +function setHashKey(obj, h) { + if (h) { + obj.$$hashKey = h; + } + else { + delete obj.$$hashKey; + } +} + +/** + * @ngdoc function + * @name angular.extend + * @module ng + * @kind function + * + * @description + * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s) + * to `dst`. You can specify multiple `src` objects. + * + * @param {Object} dst Destination object. + * @param {...Object} src Source object(s). + * @returns {Object} Reference to `dst`. + */ +function extend(dst) { + var h = dst.$$hashKey; + forEach(arguments, function(obj) { + if (obj !== dst) { + forEach(obj, function(value, key) { + dst[key] = value; + }); + } + }); + + setHashKey(dst,h); + return dst; +} + +function int(str) { + return parseInt(str, 10); +} + + +function inherit(parent, extra) { + return extend(new (extend(function() {}, {prototype:parent}))(), extra); +} + +/** + * @ngdoc function + * @name angular.noop + * @module ng + * @kind function + * + * @description + * A function that performs no operations. This function can be useful when writing code in the + * functional style. + ```js + function foo(callback) { + var result = calculateResult(); + (callback || angular.noop)(result); + } + ``` + */ +function noop() {} +noop.$inject = []; + + +/** + * @ngdoc function + * @name angular.identity + * @module ng + * @kind function + * + * @description + * A function that returns its first argument. This function is useful when writing code in the + * functional style. + * + ```js + function transformer(transformationFn, value) { + return (transformationFn || angular.identity)(value); + }; + ``` + */ +function identity($) {return $;} +identity.$inject = []; + + +function valueFn(value) {return function() {return value;};} + +/** + * @ngdoc function + * @name angular.isUndefined + * @module ng + * @kind function + * + * @description + * Determines if a reference is undefined. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is undefined. + */ +function isUndefined(value){return typeof value === 'undefined';} + + +/** + * @ngdoc function + * @name angular.isDefined + * @module ng + * @kind function + * + * @description + * Determines if a reference is defined. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is defined. + */ +function isDefined(value){return typeof value !== 'undefined';} + + +/** + * @ngdoc function + * @name angular.isObject + * @module ng + * @kind function + * + * @description + * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not + * considered to be objects. Note that JavaScript arrays are objects. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is an `Object` but not `null`. + */ +function isObject(value){return value != null && typeof value === 'object';} + + +/** + * @ngdoc function + * @name angular.isString + * @module ng + * @kind function + * + * @description + * Determines if a reference is a `String`. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a `String`. + */ +function isString(value){return typeof value === 'string';} + + +/** + * @ngdoc function + * @name angular.isNumber + * @module ng + * @kind function + * + * @description + * Determines if a reference is a `Number`. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a `Number`. + */ +function isNumber(value){return typeof value === 'number';} + + +/** + * @ngdoc function + * @name angular.isDate + * @module ng + * @kind function + * + * @description + * Determines if a value is a date. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a `Date`. + */ +function isDate(value) { + return toString.call(value) === '[object Date]'; +} + + +/** + * @ngdoc function + * @name angular.isArray + * @module ng + * @kind function + * + * @description + * Determines if a reference is an `Array`. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is an `Array`. + */ +var isArray = (function() { + if (!isFunction(Array.isArray)) { + return function(value) { + return toString.call(value) === '[object Array]'; + }; + } + return Array.isArray; +})(); + +/** + * @ngdoc function + * @name angular.isFunction + * @module ng + * @kind function + * + * @description + * Determines if a reference is a `Function`. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a `Function`. + */ +function isFunction(value){return typeof value === 'function';} + + +/** + * Determines if a value is a regular expression object. + * + * @private + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a `RegExp`. + */ +function isRegExp(value) { + return toString.call(value) === '[object RegExp]'; +} + + +/** + * Checks if `obj` is a window object. + * + * @private + * @param {*} obj Object to check + * @returns {boolean} True if `obj` is a window obj. + */ +function isWindow(obj) { + return obj && obj.document && obj.location && obj.alert && obj.setInterval; +} + + +function isScope(obj) { + return obj && obj.$evalAsync && obj.$watch; +} + + +function isFile(obj) { + return toString.call(obj) === '[object File]'; +} + + +function isBlob(obj) { + return toString.call(obj) === '[object Blob]'; +} + + +function isBoolean(value) { + return typeof value === 'boolean'; +} + + +function isPromiseLike(obj) { + return obj && isFunction(obj.then); +} + + +var trim = (function() { + // native trim is way faster: http://jsperf.com/angular-trim-test + // but IE doesn't have it... :-( + // TODO: we should move this into IE/ES5 polyfill + if (!String.prototype.trim) { + return function(value) { + return isString(value) ? value.replace(/^\s\s*/, '').replace(/\s\s*$/, '') : value; + }; + } + return function(value) { + return isString(value) ? value.trim() : value; + }; +})(); + + +/** + * @ngdoc function + * @name angular.isElement + * @module ng + * @kind function + * + * @description + * Determines if a reference is a DOM element (or wrapped jQuery element). + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element). + */ +function isElement(node) { + return !!(node && + (node.nodeName // we are a direct element + || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API +} + +/** + * @param str 'key1,key2,...' + * @returns {object} in the form of {key1:true, key2:true, ...} + */ +function makeMap(str) { + var obj = {}, items = str.split(","), i; + for ( i = 0; i < items.length; i++ ) + obj[ items[i] ] = true; + return obj; +} + + +if (msie < 9) { + nodeName_ = function(element) { + element = element.nodeName ? element : element[0]; + return (element.scopeName && element.scopeName != 'HTML') + ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName; + }; +} else { + nodeName_ = function(element) { + return element.nodeName ? element.nodeName : element[0].nodeName; + }; +} + + +function map(obj, iterator, context) { + var results = []; + forEach(obj, function(value, index, list) { + results.push(iterator.call(context, value, index, list)); + }); + return results; +} + + +/** + * @description + * Determines the number of elements in an array, the number of properties an object has, or + * the length of a string. + * + * Note: This function is used to augment the Object type in Angular expressions. See + * {@link angular.Object} for more information about Angular arrays. + * + * @param {Object|Array|string} obj Object, array, or string to inspect. + * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object + * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array. + */ +function size(obj, ownPropsOnly) { + var count = 0, key; + + if (isArray(obj) || isString(obj)) { + return obj.length; + } else if (isObject(obj)) { + for (key in obj) + if (!ownPropsOnly || obj.hasOwnProperty(key)) + count++; + } + + return count; +} + + +function includes(array, obj) { + return indexOf(array, obj) != -1; +} + +function indexOf(array, obj) { + if (array.indexOf) return array.indexOf(obj); + + for (var i = 0; i < array.length; i++) { + if (obj === array[i]) return i; + } + return -1; +} + +function arrayRemove(array, value) { + var index = indexOf(array, value); + if (index >=0) + array.splice(index, 1); + return value; +} + +function isLeafNode (node) { + if (node) { + switch (node.nodeName) { + case "OPTION": + case "PRE": + case "TITLE": + return true; + } + } + return false; +} + +/** + * @ngdoc function + * @name angular.copy + * @module ng + * @kind function + * + * @description + * Creates a deep copy of `source`, which should be an object or an array. + * + * * If no destination is supplied, a copy of the object or array is created. + * * If a destination is provided, all of its elements (for array) or properties (for objects) + * are deleted and then all elements/properties from the source are copied to it. + * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. + * * If `source` is identical to 'destination' an exception will be thrown. + * + * @param {*} source The source that will be used to make a copy. + * Can be any type, including primitives, `null`, and `undefined`. + * @param {(Object|Array)=} destination Destination into which the source is copied. If + * provided, must be of the same type as `source`. + * @returns {*} The copy or updated `destination`, if `destination` was specified. + * + * @example + + +
      +
      + Name:
      + E-mail:
      + Gender: male + female
      + + +
      +
      form = {{user | json}}
      +
      master = {{master | json}}
      +
      + + +
      +
      + */ +function copy(source, destination, stackSource, stackDest) { + if (isWindow(source) || isScope(source)) { + throw ngMinErr('cpws', + "Can't copy! Making copies of Window or Scope instances is not supported."); + } + + if (!destination) { + destination = source; + if (source) { + if (isArray(source)) { + destination = copy(source, [], stackSource, stackDest); + } else if (isDate(source)) { + destination = new Date(source.getTime()); + } else if (isRegExp(source)) { + destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]); + destination.lastIndex = source.lastIndex; + } else if (isObject(source)) { + destination = copy(source, {}, stackSource, stackDest); + } + } + } else { + if (source === destination) throw ngMinErr('cpi', + "Can't copy! Source and destination are identical."); + + stackSource = stackSource || []; + stackDest = stackDest || []; + + if (isObject(source)) { + var index = indexOf(stackSource, source); + if (index !== -1) return stackDest[index]; + + stackSource.push(source); + stackDest.push(destination); + } + + var result; + if (isArray(source)) { + destination.length = 0; + for ( var i = 0; i < source.length; i++) { + result = copy(source[i], null, stackSource, stackDest); + if (isObject(source[i])) { + stackSource.push(source[i]); + stackDest.push(result); + } + destination.push(result); + } + } else { + var h = destination.$$hashKey; + if (isArray(destination)) { + destination.length = 0; + } else { + forEach(destination, function(value, key) { + delete destination[key]; + }); + } + for ( var key in source) { + result = copy(source[key], null, stackSource, stackDest); + if (isObject(source[key])) { + stackSource.push(source[key]); + stackDest.push(result); + } + destination[key] = result; + } + setHashKey(destination,h); + } + + } + return destination; +} + +/** + * Creates a shallow copy of an object, an array or a primitive + */ +function shallowCopy(src, dst) { + if (isArray(src)) { + dst = dst || []; + + for ( var i = 0; i < src.length; i++) { + dst[i] = src[i]; + } + } else if (isObject(src)) { + dst = dst || {}; + + for (var key in src) { + if (hasOwnProperty.call(src, key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { + dst[key] = src[key]; + } + } + } + + return dst || src; +} + + +/** + * @ngdoc function + * @name angular.equals + * @module ng + * @kind function + * + * @description + * Determines if two objects or two values are equivalent. Supports value types, regular + * expressions, arrays and objects. + * + * Two objects or values are considered equivalent if at least one of the following is true: + * + * * Both objects or values pass `===` comparison. + * * Both objects or values are of the same type and all of their properties are equal by + * comparing them with `angular.equals`. + * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) + * * Both values represent the same regular expression (In JavaScript, + * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual + * representation matches). + * + * During a property comparison, properties of `function` type and properties with names + * that begin with `$` are ignored. + * + * Scope and DOMWindow objects are being compared only by identify (`===`). + * + * @param {*} o1 Object or value to compare. + * @param {*} o2 Object or value to compare. + * @returns {boolean} True if arguments are equal. + */ +function equals(o1, o2) { + if (o1 === o2) return true; + if (o1 === null || o2 === null) return false; + if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN + var t1 = typeof o1, t2 = typeof o2, length, key, keySet; + if (t1 == t2) { + if (t1 == 'object') { + if (isArray(o1)) { + if (!isArray(o2)) return false; + if ((length = o1.length) == o2.length) { + for(key=0; key 2 ? sliceArgs(arguments, 2) : []; + if (isFunction(fn) && !(fn instanceof RegExp)) { + return curryArgs.length + ? function() { + return arguments.length + ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0))) + : fn.apply(self, curryArgs); + } + : function() { + return arguments.length + ? fn.apply(self, arguments) + : fn.call(self); + }; + } else { + // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) + return fn; + } +} + + +function toJsonReplacer(key, value) { + var val = value; + + if (typeof key === 'string' && key.charAt(0) === '$') { + val = undefined; + } else if (isWindow(value)) { + val = '$WINDOW'; + } else if (value && document === value) { + val = '$DOCUMENT'; + } else if (isScope(value)) { + val = '$SCOPE'; + } + + return val; +} + + +/** + * @ngdoc function + * @name angular.toJson + * @module ng + * @kind function + * + * @description + * Serializes input into a JSON-formatted string. Properties with leading $ characters will be + * stripped since angular uses this notation internally. + * + * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. + * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace. + * @returns {string|undefined} JSON-ified string representing `obj`. + */ +function toJson(obj, pretty) { + if (typeof obj === 'undefined') return undefined; + return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null); +} + + +/** + * @ngdoc function + * @name angular.fromJson + * @module ng + * @kind function + * + * @description + * Deserializes a JSON string. + * + * @param {string} json JSON string to deserialize. + * @returns {Object|Array|string|number} Deserialized thingy. + */ +function fromJson(json) { + return isString(json) + ? JSON.parse(json) + : json; +} + + +function toBoolean(value) { + if (typeof value === 'function') { + value = true; + } else if (value && value.length !== 0) { + var v = lowercase("" + value); + value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]'); + } else { + value = false; + } + return value; +} + +/** + * @returns {string} Returns the string representation of the element. + */ +function startingTag(element) { + element = jqLite(element).clone(); + try { + // turns out IE does not let you set .html() on elements which + // are not allowed to have children. So we just ignore it. + element.empty(); + } catch(e) {} + // As Per DOM Standards + var TEXT_NODE = 3; + var elemHtml = jqLite('
      ').append(element).html(); + try { + return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) : + elemHtml. + match(/^(<[^>]+>)/)[1]. + replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); }); + } catch(e) { + return lowercase(elemHtml); + } + +} + + +///////////////////////////////////////////////// + +/** + * Tries to decode the URI component without throwing an exception. + * + * @private + * @param str value potential URI component to check. + * @returns {boolean} True if `value` can be decoded + * with the decodeURIComponent function. + */ +function tryDecodeURIComponent(value) { + try { + return decodeURIComponent(value); + } catch(e) { + // Ignore any invalid uri component + } +} + + +/** + * Parses an escaped url query string into key-value pairs. + * @returns {Object.} + */ +function parseKeyValue(/**string*/keyValue) { + var obj = {}, key_value, key; + forEach((keyValue || "").split('&'), function(keyValue) { + if ( keyValue ) { + key_value = keyValue.replace(/\+/g,'%20').split('='); + key = tryDecodeURIComponent(key_value[0]); + if ( isDefined(key) ) { + var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; + if (!hasOwnProperty.call(obj, key)) { + obj[key] = val; + } else if(isArray(obj[key])) { + obj[key].push(val); + } else { + obj[key] = [obj[key],val]; + } + } + } + }); + return obj; +} + +function toKeyValue(obj) { + var parts = []; + forEach(obj, function(value, key) { + if (isArray(value)) { + forEach(value, function(arrayValue) { + parts.push(encodeUriQuery(key, true) + + (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); + }); + } else { + parts.push(encodeUriQuery(key, true) + + (value === true ? '' : '=' + encodeUriQuery(value, true))); + } + }); + return parts.length ? parts.join('&') : ''; +} + + +/** + * We need our custom method because encodeURIComponent is too aggressive and doesn't follow + * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path + * segments: + * segment = *pchar + * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" + * pct-encoded = "%" HEXDIG HEXDIG + * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" + * / "*" / "+" / "," / ";" / "=" + */ +function encodeUriSegment(val) { + return encodeUriQuery(val, true). + replace(/%26/gi, '&'). + replace(/%3D/gi, '='). + replace(/%2B/gi, '+'); +} + + +/** + * This method is intended for encoding *key* or *value* parts of query component. We need a custom + * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be + * encoded per http://tools.ietf.org/html/rfc3986: + * query = *( pchar / "/" / "?" ) + * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" + * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + * pct-encoded = "%" HEXDIG HEXDIG + * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" + * / "*" / "+" / "," / ";" / "=" + */ +function encodeUriQuery(val, pctEncodeSpaces) { + return encodeURIComponent(val). + replace(/%40/gi, '@'). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); +} + + +/** + * @ngdoc directive + * @name ngApp + * @module ng + * + * @element ANY + * @param {angular.Module} ngApp an optional application + * {@link angular.module module} name to load. + * + * @description + * + * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive + * designates the **root element** of the application and is typically placed near the root element + * of the page - e.g. on the `` or `` tags. + * + * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` + * found in the document will be used to define the root element to auto-bootstrap as an + * application. To run multiple applications in an HTML document you must manually bootstrap them using + * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other. + * + * You can specify an **AngularJS module** to be used as the root module for the application. This + * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and + * should contain the application code needed or have dependencies on other modules that will + * contain the code. See {@link angular.module} for more information. + * + * In the example below if the `ngApp` directive were not placed on the `html` element then the + * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` + * would not be resolved to `3`. + * + * `ngApp` is the easiest, and most common, way to bootstrap an application. + * + + +
      + I can add: {{a}} + {{b}} = {{ a+b }} +
      +
      + + angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { + $scope.a = 1; + $scope.b = 2; + }); + +
      + * + */ +function angularInit(element, bootstrap) { + var elements = [element], + appElement, + module, + names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'], + NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/; + + function append(element) { + element && elements.push(element); + } + + forEach(names, function(name) { + names[name] = true; + append(document.getElementById(name)); + name = name.replace(':', '\\:'); + if (element.querySelectorAll) { + forEach(element.querySelectorAll('.' + name), append); + forEach(element.querySelectorAll('.' + name + '\\:'), append); + forEach(element.querySelectorAll('[' + name + ']'), append); + } + }); + + forEach(elements, function(element) { + if (!appElement) { + var className = ' ' + element.className + ' '; + var match = NG_APP_CLASS_REGEXP.exec(className); + if (match) { + appElement = element; + module = (match[2] || '').replace(/\s+/g, ','); + } else { + forEach(element.attributes, function(attr) { + if (!appElement && names[attr.name]) { + appElement = element; + module = attr.value; + } + }); + } + } + }); + if (appElement) { + bootstrap(appElement, module ? [module] : []); + } +} + +/** + * @ngdoc function + * @name angular.bootstrap + * @module ng + * @description + * Use this function to manually start up angular application. + * + * See: {@link guide/bootstrap Bootstrap} + * + * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually. + * They must use {@link ng.directive:ngApp ngApp}. + * + * Angular will detect if it has been loaded into the browser more than once and only allow the + * first loaded script to be bootstrapped and will report a warning to the browser console for + * each of the subsequent scripts. This prevents strange results in applications, where otherwise + * multiple instances of Angular try to work on the DOM. + * + * + * + * + *
      + * + * + * + * + * + * + * + *
      {{heading}}
      {{fill}}
      + *
      + *
      + * + * var app = angular.module('multi-bootstrap', []) + * + * .controller('BrokenTable', function($scope) { + * $scope.headings = ['One', 'Two', 'Three']; + * $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]]; + * }); + * + * + * it('should only insert one table cell for each item in $scope.fillings', function() { + * expect(element.all(by.css('td')).count()) + * .toBe(9); + * }); + * + *
      + * + * @param {DOMElement} element DOM element which is the root of angular application. + * @param {Array=} modules an array of modules to load into the application. + * Each item in the array should be the name of a predefined module or a (DI annotated) + * function that will be invoked by the injector as a run block. + * See: {@link angular.module modules} + * @returns {auto.$injector} Returns the newly created injector for this app. + */ +function bootstrap(element, modules) { + var doBootstrap = function() { + element = jqLite(element); + + if (element.injector()) { + var tag = (element[0] === document) ? 'document' : startingTag(element); + //Encode angle brackets to prevent input from being sanitized to empty string #8683 + throw ngMinErr( + 'btstrpd', + "App Already Bootstrapped with this Element '{0}'", + tag.replace(//,'>')); + } + + modules = modules || []; + modules.unshift(['$provide', function($provide) { + $provide.value('$rootElement', element); + }]); + modules.unshift('ng'); + var injector = createInjector(modules); + injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', + function(scope, element, compile, injector, animate) { + scope.$apply(function() { + element.data('$injector', injector); + compile(element)(scope); + }); + }] + ); + return injector; + }; + + var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; + + if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { + return doBootstrap(); + } + + window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); + angular.resumeBootstrap = function(extraModules) { + forEach(extraModules, function(module) { + modules.push(module); + }); + doBootstrap(); + }; +} + +var SNAKE_CASE_REGEXP = /[A-Z]/g; +function snake_case(name, separator) { + separator = separator || '_'; + return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { + return (pos ? separator : '') + letter.toLowerCase(); + }); +} + +function bindJQuery() { + // bind to jQuery if present; + jQuery = window.jQuery; + // Use jQuery if it exists with proper functionality, otherwise default to us. + // Angular 1.2+ requires jQuery 1.7.1+ for on()/off() support. + if (jQuery && jQuery.fn.on) { + jqLite = jQuery; + extend(jQuery.fn, { + scope: JQLitePrototype.scope, + isolateScope: JQLitePrototype.isolateScope, + controller: JQLitePrototype.controller, + injector: JQLitePrototype.injector, + inheritedData: JQLitePrototype.inheritedData + }); + // Method signature: + // jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) + jqLitePatchJQueryRemove('remove', true, true, false); + jqLitePatchJQueryRemove('empty', false, false, false); + jqLitePatchJQueryRemove('html', false, false, true); + } else { + jqLite = JQLite; + } + angular.element = jqLite; +} + +/** + * throw error if the argument is falsy. + */ +function assertArg(arg, name, reason) { + if (!arg) { + throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); + } + return arg; +} + +function assertArgFn(arg, name, acceptArrayAnnotation) { + if (acceptArrayAnnotation && isArray(arg)) { + arg = arg[arg.length - 1]; + } + + assertArg(isFunction(arg), name, 'not a function, got ' + + (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg)); + return arg; +} + +/** + * throw error if the name given is hasOwnProperty + * @param {String} name the name to test + * @param {String} context the context in which the name is used, such as module or directive + */ +function assertNotHasOwnProperty(name, context) { + if (name === 'hasOwnProperty') { + throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context); + } +} + +/** + * Return the value accessible from the object by path. Any undefined traversals are ignored + * @param {Object} obj starting object + * @param {String} path path to traverse + * @param {boolean} [bindFnToScope=true] + * @returns {Object} value as accessible by path + */ +//TODO(misko): this function needs to be removed +function getter(obj, path, bindFnToScope) { + if (!path) return obj; + var keys = path.split('.'); + var key; + var lastInstance = obj; + var len = keys.length; + + for (var i = 0; i < len; i++) { + key = keys[i]; + if (obj) { + obj = (lastInstance = obj)[key]; + } + } + if (!bindFnToScope && isFunction(obj)) { + return bind(lastInstance, obj); + } + return obj; +} + +/** + * Return the DOM siblings between the first and last node in the given array. + * @param {Array} array like object + * @returns {DOMElement} object containing the elements + */ +function getBlockElements(nodes) { + var startNode = nodes[0], + endNode = nodes[nodes.length - 1]; + if (startNode === endNode) { + return jqLite(startNode); + } + + var element = startNode; + var elements = [element]; + + do { + element = element.nextSibling; + if (!element) break; + elements.push(element); + } while (element !== endNode); + + return jqLite(elements); +} + +/** + * @ngdoc type + * @name angular.Module + * @module ng + * @description + * + * Interface for configuring angular {@link angular.module modules}. + */ + +function setupModuleLoader(window) { + + var $injectorMinErr = minErr('$injector'); + var ngMinErr = minErr('ng'); + + function ensure(obj, name, factory) { + return obj[name] || (obj[name] = factory()); + } + + var angular = ensure(window, 'angular', Object); + + // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap + angular.$$minErr = angular.$$minErr || minErr; + + return ensure(angular, 'module', function() { + /** @type {Object.} */ + var modules = {}; + + /** + * @ngdoc function + * @name angular.module + * @module ng + * @description + * + * The `angular.module` is a global place for creating, registering and retrieving Angular + * modules. + * All modules (angular core or 3rd party) that should be available to an application must be + * registered using this mechanism. + * + * When passed two or more arguments, a new module is created. If passed only one argument, an + * existing module (the name passed as the first argument to `module`) is retrieved. + * + * + * # Module + * + * A module is a collection of services, directives, controllers, filters, and configuration information. + * `angular.module` is used to configure the {@link auto.$injector $injector}. + * + * ```js + * // Create a new module + * var myModule = angular.module('myModule', []); + * + * // register a new service + * myModule.value('appName', 'MyCoolApp'); + * + * // configure existing services inside initialization blocks. + * myModule.config(['$locationProvider', function($locationProvider) { + * // Configure existing providers + * $locationProvider.hashPrefix('!'); + * }]); + * ``` + * + * Then you can create an injector and load your modules like this: + * + * ```js + * var injector = angular.injector(['ng', 'myModule']) + * ``` + * + * However it's more likely that you'll just use + * {@link ng.directive:ngApp ngApp} or + * {@link angular.bootstrap} to simplify this process for you. + * + * @param {!string} name The name of the module to create or retrieve. + * @param {!Array.=} requires If specified then new module is being created. If + * unspecified then the module is being retrieved for further configuration. + * @param {Function=} configFn Optional configuration function for the module. Same as + * {@link angular.Module#config Module#config()}. + * @returns {module} new module with the {@link angular.Module} api. + */ + return function module(name, requires, configFn) { + var assertNotHasOwnProperty = function(name, context) { + if (name === 'hasOwnProperty') { + throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); + } + }; + + assertNotHasOwnProperty(name, 'module'); + if (requires && modules.hasOwnProperty(name)) { + modules[name] = null; + } + return ensure(modules, name, function() { + if (!requires) { + throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + + "the module name or forgot to load it. If registering a module ensure that you " + + "specify the dependencies as the second argument.", name); + } + + /** @type {!Array.>} */ + var invokeQueue = []; + + /** @type {!Array.} */ + var runBlocks = []; + + var config = invokeLater('$injector', 'invoke'); + + /** @type {angular.Module} */ + var moduleInstance = { + // Private state + _invokeQueue: invokeQueue, + _runBlocks: runBlocks, + + /** + * @ngdoc property + * @name angular.Module#requires + * @module ng + * + * @description + * Holds the list of modules which the injector will load before the current module is + * loaded. + */ + requires: requires, + + /** + * @ngdoc property + * @name angular.Module#name + * @module ng + * + * @description + * Name of the module. + */ + name: name, + + + /** + * @ngdoc method + * @name angular.Module#provider + * @module ng + * @param {string} name service name + * @param {Function} providerType Construction function for creating new instance of the + * service. + * @description + * See {@link auto.$provide#provider $provide.provider()}. + */ + provider: invokeLater('$provide', 'provider'), + + /** + * @ngdoc method + * @name angular.Module#factory + * @module ng + * @param {string} name service name + * @param {Function} providerFunction Function for creating new instance of the service. + * @description + * See {@link auto.$provide#factory $provide.factory()}. + */ + factory: invokeLater('$provide', 'factory'), + + /** + * @ngdoc method + * @name angular.Module#service + * @module ng + * @param {string} name service name + * @param {Function} constructor A constructor function that will be instantiated. + * @description + * See {@link auto.$provide#service $provide.service()}. + */ + service: invokeLater('$provide', 'service'), + + /** + * @ngdoc method + * @name angular.Module#value + * @module ng + * @param {string} name service name + * @param {*} object Service instance object. + * @description + * See {@link auto.$provide#value $provide.value()}. + */ + value: invokeLater('$provide', 'value'), + + /** + * @ngdoc method + * @name angular.Module#constant + * @module ng + * @param {string} name constant name + * @param {*} object Constant value. + * @description + * Because the constant are fixed, they get applied before other provide methods. + * See {@link auto.$provide#constant $provide.constant()}. + */ + constant: invokeLater('$provide', 'constant', 'unshift'), + + /** + * @ngdoc method + * @name angular.Module#animation + * @module ng + * @param {string} name animation name + * @param {Function} animationFactory Factory function for creating new instance of an + * animation. + * @description + * + * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. + * + * + * Defines an animation hook that can be later used with + * {@link ngAnimate.$animate $animate} service and directives that use this service. + * + * ```js + * module.animation('.animation-name', function($inject1, $inject2) { + * return { + * eventName : function(element, done) { + * //code to run the animation + * //once complete, then run done() + * return function cancellationFunction(element) { + * //code to cancel the animation + * } + * } + * } + * }) + * ``` + * + * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and + * {@link ngAnimate ngAnimate module} for more information. + */ + animation: invokeLater('$animateProvider', 'register'), + + /** + * @ngdoc method + * @name angular.Module#filter + * @module ng + * @param {string} name Filter name. + * @param {Function} filterFactory Factory function for creating new instance of filter. + * @description + * See {@link ng.$filterProvider#register $filterProvider.register()}. + */ + filter: invokeLater('$filterProvider', 'register'), + + /** + * @ngdoc method + * @name angular.Module#controller + * @module ng + * @param {string|Object} name Controller name, or an object map of controllers where the + * keys are the names and the values are the constructors. + * @param {Function} constructor Controller constructor function. + * @description + * See {@link ng.$controllerProvider#register $controllerProvider.register()}. + */ + controller: invokeLater('$controllerProvider', 'register'), + + /** + * @ngdoc method + * @name angular.Module#directive + * @module ng + * @param {string|Object} name Directive name, or an object map of directives where the + * keys are the names and the values are the factories. + * @param {Function} directiveFactory Factory function for creating new instance of + * directives. + * @description + * See {@link ng.$compileProvider#directive $compileProvider.directive()}. + */ + directive: invokeLater('$compileProvider', 'directive'), + + /** + * @ngdoc method + * @name angular.Module#config + * @module ng + * @param {Function} configFn Execute this function on module load. Useful for service + * configuration. + * @description + * Use this method to register work which needs to be performed on module loading. + * For more about how to configure services, see + * {@link providers#providers_provider-recipe Provider Recipe}. + */ + config: config, + + /** + * @ngdoc method + * @name angular.Module#run + * @module ng + * @param {Function} initializationFn Execute this function after injector creation. + * Useful for application initialization. + * @description + * Use this method to register work which should be performed when the injector is done + * loading all modules. + */ + run: function(block) { + runBlocks.push(block); + return this; + } + }; + + if (configFn) { + config(configFn); + } + + return moduleInstance; + + /** + * @param {string} provider + * @param {string} method + * @param {String=} insertMethod + * @returns {angular.Module} + */ + function invokeLater(provider, method, insertMethod) { + return function() { + invokeQueue[insertMethod || 'push']([provider, method, arguments]); + return moduleInstance; + }; + } + }); + }; + }); + +} + +/* global angularModule: true, + version: true, + + $LocaleProvider, + $CompileProvider, + + htmlAnchorDirective, + inputDirective, + inputDirective, + formDirective, + scriptDirective, + selectDirective, + styleDirective, + optionDirective, + ngBindDirective, + ngBindHtmlDirective, + ngBindTemplateDirective, + ngClassDirective, + ngClassEvenDirective, + ngClassOddDirective, + ngCspDirective, + ngCloakDirective, + ngControllerDirective, + ngFormDirective, + ngHideDirective, + ngIfDirective, + ngIncludeDirective, + ngIncludeFillContentDirective, + ngInitDirective, + ngNonBindableDirective, + ngPluralizeDirective, + ngRepeatDirective, + ngShowDirective, + ngStyleDirective, + ngSwitchDirective, + ngSwitchWhenDirective, + ngSwitchDefaultDirective, + ngOptionsDirective, + ngTranscludeDirective, + ngModelDirective, + ngListDirective, + ngChangeDirective, + requiredDirective, + requiredDirective, + ngValueDirective, + ngAttributeAliasDirectives, + ngEventDirectives, + + $AnchorScrollProvider, + $AnimateProvider, + $BrowserProvider, + $CacheFactoryProvider, + $ControllerProvider, + $DocumentProvider, + $ExceptionHandlerProvider, + $FilterProvider, + $InterpolateProvider, + $IntervalProvider, + $HttpProvider, + $HttpBackendProvider, + $LocationProvider, + $LogProvider, + $ParseProvider, + $RootScopeProvider, + $QProvider, + $$SanitizeUriProvider, + $SceProvider, + $SceDelegateProvider, + $SnifferProvider, + $TemplateCacheProvider, + $TimeoutProvider, + $$RAFProvider, + $$AsyncCallbackProvider, + $WindowProvider +*/ + + +/** + * @ngdoc object + * @name angular.version + * @module ng + * @description + * An object that contains information about the current AngularJS version. This object has the + * following properties: + * + * - `full` – `{string}` – Full version string, such as "0.9.18". + * - `major` – `{number}` – Major version number, such as "0". + * - `minor` – `{number}` – Minor version number, such as "9". + * - `dot` – `{number}` – Dot version number, such as "18". + * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". + */ +var version = { + full: '1.2.28', // all of these placeholder strings will be replaced by grunt's + major: 1, // package task + minor: 2, + dot: 28, + codeName: 'finnish-disembarkation' +}; + + +function publishExternalAPI(angular){ + extend(angular, { + 'bootstrap': bootstrap, + 'copy': copy, + 'extend': extend, + 'equals': equals, + 'element': jqLite, + 'forEach': forEach, + 'injector': createInjector, + 'noop': noop, + 'bind': bind, + 'toJson': toJson, + 'fromJson': fromJson, + 'identity': identity, + 'isUndefined': isUndefined, + 'isDefined': isDefined, + 'isString': isString, + 'isFunction': isFunction, + 'isObject': isObject, + 'isNumber': isNumber, + 'isElement': isElement, + 'isArray': isArray, + 'version': version, + 'isDate': isDate, + 'lowercase': lowercase, + 'uppercase': uppercase, + 'callbacks': {counter: 0}, + '$$minErr': minErr, + '$$csp': csp + }); + + angularModule = setupModuleLoader(window); + try { + angularModule('ngLocale'); + } catch (e) { + angularModule('ngLocale', []).provider('$locale', $LocaleProvider); + } + + angularModule('ng', ['ngLocale'], ['$provide', + function ngModule($provide) { + // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. + $provide.provider({ + $$sanitizeUri: $$SanitizeUriProvider + }); + $provide.provider('$compile', $CompileProvider). + directive({ + a: htmlAnchorDirective, + input: inputDirective, + textarea: inputDirective, + form: formDirective, + script: scriptDirective, + select: selectDirective, + style: styleDirective, + option: optionDirective, + ngBind: ngBindDirective, + ngBindHtml: ngBindHtmlDirective, + ngBindTemplate: ngBindTemplateDirective, + ngClass: ngClassDirective, + ngClassEven: ngClassEvenDirective, + ngClassOdd: ngClassOddDirective, + ngCloak: ngCloakDirective, + ngController: ngControllerDirective, + ngForm: ngFormDirective, + ngHide: ngHideDirective, + ngIf: ngIfDirective, + ngInclude: ngIncludeDirective, + ngInit: ngInitDirective, + ngNonBindable: ngNonBindableDirective, + ngPluralize: ngPluralizeDirective, + ngRepeat: ngRepeatDirective, + ngShow: ngShowDirective, + ngStyle: ngStyleDirective, + ngSwitch: ngSwitchDirective, + ngSwitchWhen: ngSwitchWhenDirective, + ngSwitchDefault: ngSwitchDefaultDirective, + ngOptions: ngOptionsDirective, + ngTransclude: ngTranscludeDirective, + ngModel: ngModelDirective, + ngList: ngListDirective, + ngChange: ngChangeDirective, + required: requiredDirective, + ngRequired: requiredDirective, + ngValue: ngValueDirective + }). + directive({ + ngInclude: ngIncludeFillContentDirective + }). + directive(ngAttributeAliasDirectives). + directive(ngEventDirectives); + $provide.provider({ + $anchorScroll: $AnchorScrollProvider, + $animate: $AnimateProvider, + $browser: $BrowserProvider, + $cacheFactory: $CacheFactoryProvider, + $controller: $ControllerProvider, + $document: $DocumentProvider, + $exceptionHandler: $ExceptionHandlerProvider, + $filter: $FilterProvider, + $interpolate: $InterpolateProvider, + $interval: $IntervalProvider, + $http: $HttpProvider, + $httpBackend: $HttpBackendProvider, + $location: $LocationProvider, + $log: $LogProvider, + $parse: $ParseProvider, + $rootScope: $RootScopeProvider, + $q: $QProvider, + $sce: $SceProvider, + $sceDelegate: $SceDelegateProvider, + $sniffer: $SnifferProvider, + $templateCache: $TemplateCacheProvider, + $timeout: $TimeoutProvider, + $window: $WindowProvider, + $$rAF: $$RAFProvider, + $$asyncCallback : $$AsyncCallbackProvider + }); + } + ]); +} + +/* global JQLitePrototype: true, + addEventListenerFn: true, + removeEventListenerFn: true, + BOOLEAN_ATTR: true +*/ + +////////////////////////////////// +//JQLite +////////////////////////////////// + +/** + * @ngdoc function + * @name angular.element + * @module ng + * @kind function + * + * @description + * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. + * + * If jQuery is available, `angular.element` is an alias for the + * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` + * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite." + * + *
      jqLite is a tiny, API-compatible subset of jQuery that allows + * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most + * commonly needed functionality with the goal of having a very small footprint.
      + * + * To use jQuery, simply load it before `DOMContentLoaded` event fired. + * + *
      **Note:** all element references in Angular are always wrapped with jQuery or + * jqLite; they are never raw DOM references.
      + * + * ## Angular's jqLite + * jqLite provides only the following jQuery methods: + * + * - [`addClass()`](http://api.jquery.com/addClass/) + * - [`after()`](http://api.jquery.com/after/) + * - [`append()`](http://api.jquery.com/append/) + * - [`attr()`](http://api.jquery.com/attr/) + * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData + * - [`children()`](http://api.jquery.com/children/) - Does not support selectors + * - [`clone()`](http://api.jquery.com/clone/) + * - [`contents()`](http://api.jquery.com/contents/) + * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyles()` + * - [`data()`](http://api.jquery.com/data/) + * - [`empty()`](http://api.jquery.com/empty/) + * - [`eq()`](http://api.jquery.com/eq/) + * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name + * - [`hasClass()`](http://api.jquery.com/hasClass/) + * - [`html()`](http://api.jquery.com/html/) + * - [`next()`](http://api.jquery.com/next/) - Does not support selectors + * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData + * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors + * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors + * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors + * - [`prepend()`](http://api.jquery.com/prepend/) + * - [`prop()`](http://api.jquery.com/prop/) + * - [`ready()`](http://api.jquery.com/ready/) + * - [`remove()`](http://api.jquery.com/remove/) + * - [`removeAttr()`](http://api.jquery.com/removeAttr/) + * - [`removeClass()`](http://api.jquery.com/removeClass/) + * - [`removeData()`](http://api.jquery.com/removeData/) + * - [`replaceWith()`](http://api.jquery.com/replaceWith/) + * - [`text()`](http://api.jquery.com/text/) + * - [`toggleClass()`](http://api.jquery.com/toggleClass/) + * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. + * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces + * - [`val()`](http://api.jquery.com/val/) + * - [`wrap()`](http://api.jquery.com/wrap/) + * + * ## jQuery/jqLite Extras + * Angular also provides the following additional methods and events to both jQuery and jqLite: + * + * ### Events + * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event + * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM + * element before it is removed. + * + * ### Methods + * - `controller(name)` - retrieves the controller of the current element or its parent. By default + * retrieves controller associated with the `ngController` directive. If `name` is provided as + * camelCase directive name, then the controller for this directive will be retrieved (e.g. + * `'ngModel'`). + * - `injector()` - retrieves the injector of the current element or its parent. + * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current + * element or its parent. + * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the + * current element. This getter should be used only on elements that contain a directive which starts a new isolate + * scope. Calling `scope()` on this element always returns the original non-isolate scope. + * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top + * parent element is reached. + * + * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. + * @returns {Object} jQuery object. + */ + +JQLite.expando = 'ng339'; + +var jqCache = JQLite.cache = {}, + jqId = 1, + addEventListenerFn = (window.document.addEventListener + ? function(element, type, fn) {element.addEventListener(type, fn, false);} + : function(element, type, fn) {element.attachEvent('on' + type, fn);}), + removeEventListenerFn = (window.document.removeEventListener + ? function(element, type, fn) {element.removeEventListener(type, fn, false); } + : function(element, type, fn) {element.detachEvent('on' + type, fn); }); + +/* + * !!! This is an undocumented "private" function !!! + */ +var jqData = JQLite._data = function(node) { + //jQuery always returns an object on cache miss + return this.cache[node[this.expando]] || {}; +}; + +function jqNextId() { return ++jqId; } + + +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; +var MOZ_HACK_REGEXP = /^moz([A-Z])/; +var jqLiteMinErr = minErr('jqLite'); + +/** + * Converts snake_case to camelCase. + * Also there is special case for Moz prefix starting with upper case letter. + * @param name Name to normalize + */ +function camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + +///////////////////////////////////////////// +// jQuery mutation patch +// +// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a +// $destroy event on all DOM nodes being removed. +// +///////////////////////////////////////////// + +function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { + var originalJqFn = jQuery.fn[name]; + originalJqFn = originalJqFn.$original || originalJqFn; + removePatch.$original = originalJqFn; + jQuery.fn[name] = removePatch; + + function removePatch(param) { + // jshint -W040 + var list = filterElems && param ? [this.filter(param)] : [this], + fireEvent = dispatchThis, + set, setIndex, setLength, + element, childIndex, childLength, children; + + if (!getterIfNoArguments || param != null) { + while(list.length) { + set = list.shift(); + for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { + element = jqLite(set[setIndex]); + if (fireEvent) { + element.triggerHandler('$destroy'); + } else { + fireEvent = !fireEvent; + } + for(childIndex = 0, childLength = (children = element.children()).length; + childIndex < childLength; + childIndex++) { + list.push(jQuery(children[childIndex])); + } + } + } + } + return originalJqFn.apply(this, arguments); + } +} + +var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; +var HTML_REGEXP = /<|&#?\w+;/; +var TAG_NAME_REGEXP = /<([\w:]+)/; +var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; + +var wrapMap = { + 'option': [1, ''], + + 'thead': [1, '', '
      '], + 'col': [2, '', '
      '], + 'tr': [2, '', '
      '], + 'td': [3, '', '
      '], + '_default': [0, "", ""] +}; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function jqLiteIsTextNode(html) { + return !HTML_REGEXP.test(html); +} + +function jqLiteBuildFragment(html, context) { + var elem, tmp, tag, wrap, + fragment = context.createDocumentFragment(), + nodes = [], i, j, jj; + + if (jqLiteIsTextNode(html)) { + // Convert non-html into a text node + nodes.push(context.createTextNode(html)); + } else { + tmp = fragment.appendChild(context.createElement('div')); + // Convert html into DOM nodes + tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); + wrap = wrapMap[tag] || wrapMap._default; + tmp.innerHTML = '
       
      ' + + wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1>") + wrap[2]; + tmp.removeChild(tmp.firstChild); + + // Descend through wrappers to the right content + i = wrap[0]; + while (i--) { + tmp = tmp.lastChild; + } + + for (j=0, jj=tmp.childNodes.length; j -1); +} + +function jqLiteRemoveClass(element, cssClasses) { + if (cssClasses && element.setAttribute) { + forEach(cssClasses.split(' '), function(cssClass) { + element.setAttribute('class', trim( + (" " + (element.getAttribute('class') || '') + " ") + .replace(/[\n\t]/g, " ") + .replace(" " + trim(cssClass) + " ", " ")) + ); + }); + } +} + +function jqLiteAddClass(element, cssClasses) { + if (cssClasses && element.setAttribute) { + var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') + .replace(/[\n\t]/g, " "); + + forEach(cssClasses.split(' '), function(cssClass) { + cssClass = trim(cssClass); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + }); + + element.setAttribute('class', trim(existingClasses)); + } +} + +function jqLiteAddNodes(root, elements) { + if (elements) { + elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements)) + ? elements + : [ elements ]; + for(var i=0; i < elements.length; i++) { + root.push(elements[i]); + } + } +} + +function jqLiteController(element, name) { + return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller'); +} + +function jqLiteInheritedData(element, name, value) { + // if element is the document object work with the html element instead + // this makes $(document).scope() possible + if(element.nodeType == 9) { + element = element.documentElement; + } + var names = isArray(name) ? name : [name]; + + while (element) { + for (var i = 0, ii = names.length; i < ii; i++) { + if ((value = jqLite.data(element, names[i])) !== undefined) return value; + } + + // If dealing with a document fragment node with a host element, and no parent, use the host + // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM + // to lookup parent controllers. + element = element.parentNode || (element.nodeType === 11 && element.host); + } +} + +function jqLiteEmpty(element) { + for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { + jqLiteDealoc(childNodes[i]); + } + while (element.firstChild) { + element.removeChild(element.firstChild); + } +} + +////////////////////////////////////////// +// Functions which are declared directly. +////////////////////////////////////////// +var JQLitePrototype = JQLite.prototype = { + ready: function(fn) { + var fired = false; + + function trigger() { + if (fired) return; + fired = true; + fn(); + } + + // check if document already is loaded + if (document.readyState === 'complete'){ + setTimeout(trigger); + } else { + this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 + // we can not use jqLite since we are not done loading and jQuery could be loaded later. + // jshint -W064 + JQLite(window).on('load', trigger); // fallback to window.onload for others + // jshint +W064 + } + }, + toString: function() { + var value = []; + forEach(this, function(e){ value.push('' + e);}); + return '[' + value.join(', ') + ']'; + }, + + eq: function(index) { + return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); + }, + + length: 0, + push: push, + sort: [].sort, + splice: [].splice +}; + +////////////////////////////////////////// +// Functions iterating getter/setters. +// these functions return self on setter and +// value on get. +////////////////////////////////////////// +var BOOLEAN_ATTR = {}; +forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { + BOOLEAN_ATTR[lowercase(value)] = value; +}); +var BOOLEAN_ELEMENTS = {}; +forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { + BOOLEAN_ELEMENTS[uppercase(value)] = true; +}); + +function getBooleanAttrName(element, name) { + // check dom last since we will most likely fail on name + var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; + + // booleanAttr is here twice to minimize DOM access + return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; +} + +forEach({ + data: jqLiteData, + removeData: jqLiteRemoveData +}, function(fn, name) { + JQLite[name] = fn; +}); + +forEach({ + data: jqLiteData, + inheritedData: jqLiteInheritedData, + + scope: function(element) { + // Can't use jqLiteData here directly so we stay compatible with jQuery! + return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); + }, + + isolateScope: function(element) { + // Can't use jqLiteData here directly so we stay compatible with jQuery! + return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate'); + }, + + controller: jqLiteController, + + injector: function(element) { + return jqLiteInheritedData(element, '$injector'); + }, + + removeAttr: function(element,name) { + element.removeAttribute(name); + }, + + hasClass: jqLiteHasClass, + + css: function(element, name, value) { + name = camelCase(name); + + if (isDefined(value)) { + element.style[name] = value; + } else { + var val; + + if (msie <= 8) { + // this is some IE specific weirdness that jQuery 1.6.4 does not sure why + val = element.currentStyle && element.currentStyle[name]; + if (val === '') val = 'auto'; + } + + val = val || element.style[name]; + + if (msie <= 8) { + // jquery weirdness :-/ + val = (val === '') ? undefined : val; + } + + return val; + } + }, + + attr: function(element, name, value){ + var lowercasedName = lowercase(name); + if (BOOLEAN_ATTR[lowercasedName]) { + if (isDefined(value)) { + if (!!value) { + element[name] = true; + element.setAttribute(name, lowercasedName); + } else { + element[name] = false; + element.removeAttribute(lowercasedName); + } + } else { + return (element[name] || + (element.attributes.getNamedItem(name)|| noop).specified) + ? lowercasedName + : undefined; + } + } else if (isDefined(value)) { + element.setAttribute(name, value); + } else if (element.getAttribute) { + // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code + // some elements (e.g. Document) don't have get attribute, so return undefined + var ret = element.getAttribute(name, 2); + // normalize non-existing attributes to undefined (as jQuery) + return ret === null ? undefined : ret; + } + }, + + prop: function(element, name, value) { + if (isDefined(value)) { + element[name] = value; + } else { + return element[name]; + } + }, + + text: (function() { + var NODE_TYPE_TEXT_PROPERTY = []; + if (msie < 9) { + NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/ + NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/ + } else { + NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/ + NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/ + } + getText.$dv = ''; + return getText; + + function getText(element, value) { + var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType]; + if (isUndefined(value)) { + return textProp ? element[textProp] : ''; + } + element[textProp] = value; + } + })(), + + val: function(element, value) { + if (isUndefined(value)) { + if (nodeName_(element) === 'SELECT' && element.multiple) { + var result = []; + forEach(element.options, function (option) { + if (option.selected) { + result.push(option.value || option.text); + } + }); + return result.length === 0 ? null : result; + } + return element.value; + } + element.value = value; + }, + + html: function(element, value) { + if (isUndefined(value)) { + return element.innerHTML; + } + for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { + jqLiteDealoc(childNodes[i]); + } + element.innerHTML = value; + }, + + empty: jqLiteEmpty +}, function(fn, name){ + /** + * Properties: writes return selection, reads return first value + */ + JQLite.prototype[name] = function(arg1, arg2) { + var i, key; + var nodeCount = this.length; + + // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it + // in a way that survives minification. + // jqLiteEmpty takes no arguments but is a setter. + if (fn !== jqLiteEmpty && + (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { + if (isObject(arg1)) { + + // we are a write, but the object properties are the key/values + for (i = 0; i < nodeCount; i++) { + if (fn === jqLiteData) { + // data() takes the whole object in jQuery + fn(this[i], arg1); + } else { + for (key in arg1) { + fn(this[i], key, arg1[key]); + } + } + } + // return self for chaining + return this; + } else { + // we are a read, so read the first child. + // TODO: do we still need this? + var value = fn.$dv; + // Only if we have $dv do we iterate over all, otherwise it is just the first element. + var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount; + for (var j = 0; j < jj; j++) { + var nodeValue = fn(this[j], arg1, arg2); + value = value ? value + nodeValue : nodeValue; + } + return value; + } + } else { + // we are a write, so apply to all children + for (i = 0; i < nodeCount; i++) { + fn(this[i], arg1, arg2); + } + // return self for chaining + return this; + } + }; +}); + +function createEventHandler(element, events) { + var eventHandler = function (event, type) { + if (!event.preventDefault) { + event.preventDefault = function() { + event.returnValue = false; //ie + }; + } + + if (!event.stopPropagation) { + event.stopPropagation = function() { + event.cancelBubble = true; //ie + }; + } + + if (!event.target) { + event.target = event.srcElement || document; + } + + if (isUndefined(event.defaultPrevented)) { + var prevent = event.preventDefault; + event.preventDefault = function() { + event.defaultPrevented = true; + prevent.call(event); + }; + event.defaultPrevented = false; + } + + event.isDefaultPrevented = function() { + return event.defaultPrevented || event.returnValue === false; + }; + + // Copy event handlers in case event handlers array is modified during execution. + var eventHandlersCopy = shallowCopy(events[type || event.type] || []); + + forEach(eventHandlersCopy, function(fn) { + fn.call(element, event); + }); + + // Remove monkey-patched methods (IE), + // as they would cause memory leaks in IE8. + if (msie <= 8) { + // IE7/8 does not allow to delete property on native object + event.preventDefault = null; + event.stopPropagation = null; + event.isDefaultPrevented = null; + } else { + // It shouldn't affect normal browsers (native methods are defined on prototype). + delete event.preventDefault; + delete event.stopPropagation; + delete event.isDefaultPrevented; + } + }; + eventHandler.elem = element; + return eventHandler; +} + +////////////////////////////////////////// +// Functions iterating traversal. +// These functions chain results into a single +// selector. +////////////////////////////////////////// +forEach({ + removeData: jqLiteRemoveData, + + dealoc: jqLiteDealoc, + + on: function onFn(element, type, fn, unsupported){ + if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); + + var events = jqLiteExpandoStore(element, 'events'), + handle = jqLiteExpandoStore(element, 'handle'); + + if (!events) jqLiteExpandoStore(element, 'events', events = {}); + if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events)); + + forEach(type.split(' '), function(type){ + var eventFns = events[type]; + + if (!eventFns) { + if (type == 'mouseenter' || type == 'mouseleave') { + var contains = document.body.contains || document.body.compareDocumentPosition ? + function( a, b ) { + // jshint bitwise: false + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + events[type] = []; + + // Refer to jQuery's implementation of mouseenter & mouseleave + // Read about mouseenter and mouseleave: + // http://www.quirksmode.org/js/events_mouse.html#link8 + var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"}; + + onFn(element, eventmap[type], function(event) { + var target = this, related = event.relatedTarget; + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !contains(target, related)) ){ + handle(event, type); + } + }); + + } else { + addEventListenerFn(element, type, handle); + events[type] = []; + } + eventFns = events[type]; + } + eventFns.push(fn); + }); + }, + + off: jqLiteOff, + + one: function(element, type, fn) { + element = jqLite(element); + + //add the listener twice so that when it is called + //you can remove the original function and still be + //able to call element.off(ev, fn) normally + element.on(type, function onFn() { + element.off(type, fn); + element.off(type, onFn); + }); + element.on(type, fn); + }, + + replaceWith: function(element, replaceNode) { + var index, parent = element.parentNode; + jqLiteDealoc(element); + forEach(new JQLite(replaceNode), function(node){ + if (index) { + parent.insertBefore(node, index.nextSibling); + } else { + parent.replaceChild(node, element); + } + index = node; + }); + }, + + children: function(element) { + var children = []; + forEach(element.childNodes, function(element){ + if (element.nodeType === 1) + children.push(element); + }); + return children; + }, + + contents: function(element) { + return element.contentDocument || element.childNodes || []; + }, + + append: function(element, node) { + forEach(new JQLite(node), function(child){ + if (element.nodeType === 1 || element.nodeType === 11) { + element.appendChild(child); + } + }); + }, + + prepend: function(element, node) { + if (element.nodeType === 1) { + var index = element.firstChild; + forEach(new JQLite(node), function(child){ + element.insertBefore(child, index); + }); + } + }, + + wrap: function(element, wrapNode) { + wrapNode = jqLite(wrapNode)[0]; + var parent = element.parentNode; + if (parent) { + parent.replaceChild(wrapNode, element); + } + wrapNode.appendChild(element); + }, + + remove: function(element) { + jqLiteDealoc(element); + var parent = element.parentNode; + if (parent) parent.removeChild(element); + }, + + after: function(element, newElement) { + var index = element, parent = element.parentNode; + forEach(new JQLite(newElement), function(node){ + parent.insertBefore(node, index.nextSibling); + index = node; + }); + }, + + addClass: jqLiteAddClass, + removeClass: jqLiteRemoveClass, + + toggleClass: function(element, selector, condition) { + if (selector) { + forEach(selector.split(' '), function(className){ + var classCondition = condition; + if (isUndefined(classCondition)) { + classCondition = !jqLiteHasClass(element, className); + } + (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); + }); + } + }, + + parent: function(element) { + var parent = element.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + + next: function(element) { + if (element.nextElementSibling) { + return element.nextElementSibling; + } + + // IE8 doesn't have nextElementSibling + var elm = element.nextSibling; + while (elm != null && elm.nodeType !== 1) { + elm = elm.nextSibling; + } + return elm; + }, + + find: function(element, selector) { + if (element.getElementsByTagName) { + return element.getElementsByTagName(selector); + } else { + return []; + } + }, + + clone: jqLiteClone, + + triggerHandler: function(element, event, extraParameters) { + + var dummyEvent, eventFnsCopy, handlerArgs; + var eventName = event.type || event; + var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName]; + + if (eventFns) { + + // Create a dummy event to pass to the handlers + dummyEvent = { + preventDefault: function() { this.defaultPrevented = true; }, + isDefaultPrevented: function() { return this.defaultPrevented === true; }, + stopPropagation: noop, + type: eventName, + target: element + }; + + // If a custom event was provided then extend our dummy event with it + if (event.type) { + dummyEvent = extend(dummyEvent, event); + } + + // Copy event handlers in case event handlers array is modified during execution. + eventFnsCopy = shallowCopy(eventFns); + handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent]; + + forEach(eventFnsCopy, function(fn) { + fn.apply(element, handlerArgs); + }); + + } + } +}, function(fn, name){ + /** + * chaining functions + */ + JQLite.prototype[name] = function(arg1, arg2, arg3) { + var value; + for(var i=0; i < this.length; i++) { + if (isUndefined(value)) { + value = fn(this[i], arg1, arg2, arg3); + if (isDefined(value)) { + // any function which returns a value needs to be wrapped + value = jqLite(value); + } + } else { + jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); + } + } + return isDefined(value) ? value : this; + }; + + // bind legacy bind/unbind to on/off + JQLite.prototype.bind = JQLite.prototype.on; + JQLite.prototype.unbind = JQLite.prototype.off; +}); + +/** + * Computes a hash of an 'obj'. + * Hash of a: + * string is string + * number is number as string + * object is either result of calling $$hashKey function on the object or uniquely generated id, + * that is also assigned to the $$hashKey property of the object. + * + * @param obj + * @returns {string} hash string such that the same input will have the same hash string. + * The resulting string key is in 'type:hashKey' format. + */ +function hashKey(obj, nextUidFn) { + var objType = typeof obj, + key; + + if (objType == 'function' || (objType == 'object' && obj !== null)) { + if (typeof (key = obj.$$hashKey) == 'function') { + // must invoke on object to keep the right this + key = obj.$$hashKey(); + } else if (key === undefined) { + key = obj.$$hashKey = (nextUidFn || nextUid)(); + } + } else { + key = obj; + } + + return objType + ':' + key; +} + +/** + * HashMap which can use objects as keys + */ +function HashMap(array, isolatedUid) { + if (isolatedUid) { + var uid = 0; + this.nextUid = function() { + return ++uid; + }; + } + forEach(array, this.put, this); +} +HashMap.prototype = { + /** + * Store key value pair + * @param key key to store can be any type + * @param value value to store can be any type + */ + put: function(key, value) { + this[hashKey(key, this.nextUid)] = value; + }, + + /** + * @param key + * @returns {Object} the value for the key + */ + get: function(key) { + return this[hashKey(key, this.nextUid)]; + }, + + /** + * Remove the key/value pair + * @param key + */ + remove: function(key) { + var value = this[key = hashKey(key, this.nextUid)]; + delete this[key]; + return value; + } +}; + +/** + * @ngdoc function + * @module ng + * @name angular.injector + * @kind function + * + * @description + * Creates an injector object that can be used for retrieving services as well as for + * dependency injection (see {@link guide/di dependency injection}). + * + + * @param {Array.} modules A list of module functions or their aliases. See + * {@link angular.module}. The `ng` module must be explicitly added. + * @returns {injector} Injector object. See {@link auto.$injector $injector}. + * + * @example + * Typical usage + * ```js + * // create an injector + * var $injector = angular.injector(['ng']); + * + * // use the injector to kick off your application + * // use the type inference to auto inject arguments, or use implicit injection + * $injector.invoke(function($rootScope, $compile, $document){ + * $compile($document)($rootScope); + * $rootScope.$digest(); + * }); + * ``` + * + * Sometimes you want to get access to the injector of a currently running Angular app + * from outside Angular. Perhaps, you want to inject and compile some markup after the + * application has been bootstrapped. You can do this using the extra `injector()` added + * to JQuery/jqLite elements. See {@link angular.element}. + * + * *This is fairly rare but could be the case if a third party library is injecting the + * markup.* + * + * In the following example a new block of HTML containing a `ng-controller` + * directive is added to the end of the document body by JQuery. We then compile and link + * it into the current AngularJS scope. + * + * ```js + * var $div = $('
      {{content.label}}
      '); + * $(document.body).append($div); + * + * angular.element(document).injector().invoke(function($compile) { + * var scope = angular.element($div).scope(); + * $compile($div)(scope); + * }); + * ``` + */ + + +/** + * @ngdoc module + * @name auto + * @description + * + * Implicit module which gets automatically added to each {@link auto.$injector $injector}. + */ + +var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; +var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; +var $injectorMinErr = minErr('$injector'); +function annotate(fn) { + var $inject, + fnText, + argDecl, + last; + + if (typeof fn === 'function') { + if (!($inject = fn.$inject)) { + $inject = []; + if (fn.length) { + fnText = fn.toString().replace(STRIP_COMMENTS, ''); + argDecl = fnText.match(FN_ARGS); + forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){ + arg.replace(FN_ARG, function(all, underscore, name){ + $inject.push(name); + }); + }); + } + fn.$inject = $inject; + } + } else if (isArray(fn)) { + last = fn.length - 1; + assertArgFn(fn[last], 'fn'); + $inject = fn.slice(0, last); + } else { + assertArgFn(fn, 'fn', true); + } + return $inject; +} + +/////////////////////////////////////// + +/** + * @ngdoc service + * @name $injector + * + * @description + * + * `$injector` is used to retrieve object instances as defined by + * {@link auto.$provide provider}, instantiate types, invoke methods, + * and load modules. + * + * The following always holds true: + * + * ```js + * var $injector = angular.injector(); + * expect($injector.get('$injector')).toBe($injector); + * expect($injector.invoke(function($injector){ + * return $injector; + * })).toBe($injector); + * ``` + * + * # Injection Function Annotation + * + * JavaScript does not have annotations, and annotations are needed for dependency injection. The + * following are all valid ways of annotating function with injection arguments and are equivalent. + * + * ```js + * // inferred (only works if code not minified/obfuscated) + * $injector.invoke(function(serviceA){}); + * + * // annotated + * function explicit(serviceA) {}; + * explicit.$inject = ['serviceA']; + * $injector.invoke(explicit); + * + * // inline + * $injector.invoke(['serviceA', function(serviceA){}]); + * ``` + * + * ## Inference + * + * In JavaScript calling `toString()` on a function returns the function definition. The definition + * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with + * minification, and obfuscation tools since these tools change the argument names. + * + * ## `$inject` Annotation + * By adding an `$inject` property onto a function the injection parameters can be specified. + * + * ## Inline + * As an array of injection names, where the last item in the array is the function to call. + */ + +/** + * @ngdoc method + * @name $injector#get + * + * @description + * Return an instance of the service. + * + * @param {string} name The name of the instance to retrieve. + * @return {*} The instance. + */ + +/** + * @ngdoc method + * @name $injector#invoke + * + * @description + * Invoke the method and supply the method arguments from the `$injector`. + * + * @param {!Function} fn The function to invoke. Function parameters are injected according to the + * {@link guide/di $inject Annotation} rules. + * @param {Object=} self The `this` for the invoked method. + * @param {Object=} locals Optional object. If preset then any argument names are read from this + * object first, before the `$injector` is consulted. + * @returns {*} the value returned by the invoked `fn` function. + */ + +/** + * @ngdoc method + * @name $injector#has + * + * @description + * Allows the user to query if the particular service exists. + * + * @param {string} name Name of the service to query. + * @returns {boolean} `true` if injector has given service. + */ + +/** + * @ngdoc method + * @name $injector#instantiate + * @description + * Create a new instance of JS type. The method takes a constructor function, invokes the new + * operator, and supplies all of the arguments to the constructor function as specified by the + * constructor annotation. + * + * @param {Function} Type Annotated constructor function. + * @param {Object=} locals Optional object. If preset then any argument names are read from this + * object first, before the `$injector` is consulted. + * @returns {Object} new instance of `Type`. + */ + +/** + * @ngdoc method + * @name $injector#annotate + * + * @description + * Returns an array of service names which the function is requesting for injection. This API is + * used by the injector to determine which services need to be injected into the function when the + * function is invoked. There are three ways in which the function can be annotated with the needed + * dependencies. + * + * # Argument names + * + * The simplest form is to extract the dependencies from the arguments of the function. This is done + * by converting the function into a string using `toString()` method and extracting the argument + * names. + * ```js + * // Given + * function MyController($scope, $route) { + * // ... + * } + * + * // Then + * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); + * ``` + * + * This method does not work with code minification / obfuscation. For this reason the following + * annotation strategies are supported. + * + * # The `$inject` property + * + * If a function has an `$inject` property and its value is an array of strings, then the strings + * represent names of services to be injected into the function. + * ```js + * // Given + * var MyController = function(obfuscatedScope, obfuscatedRoute) { + * // ... + * } + * // Define function dependencies + * MyController['$inject'] = ['$scope', '$route']; + * + * // Then + * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); + * ``` + * + * # The array notation + * + * It is often desirable to inline Injected functions and that's when setting the `$inject` property + * is very inconvenient. In these situations using the array notation to specify the dependencies in + * a way that survives minification is a better choice: + * + * ```js + * // We wish to write this (not minification / obfuscation safe) + * injector.invoke(function($compile, $rootScope) { + * // ... + * }); + * + * // We are forced to write break inlining + * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { + * // ... + * }; + * tmpFn.$inject = ['$compile', '$rootScope']; + * injector.invoke(tmpFn); + * + * // To better support inline function the inline annotation is supported + * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { + * // ... + * }]); + * + * // Therefore + * expect(injector.annotate( + * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) + * ).toEqual(['$compile', '$rootScope']); + * ``` + * + * @param {Function|Array.} fn Function for which dependent service names need to + * be retrieved as described above. + * + * @returns {Array.} The names of the services which the function requires. + */ + + + + +/** + * @ngdoc service + * @name $provide + * + * @description + * + * The {@link auto.$provide $provide} service has a number of methods for registering components + * with the {@link auto.$injector $injector}. Many of these functions are also exposed on + * {@link angular.Module}. + * + * An Angular **service** is a singleton object created by a **service factory**. These **service + * factories** are functions which, in turn, are created by a **service provider**. + * The **service providers** are constructor functions. When instantiated they must contain a + * property called `$get`, which holds the **service factory** function. + * + * When you request a service, the {@link auto.$injector $injector} is responsible for finding the + * correct **service provider**, instantiating it and then calling its `$get` **service factory** + * function to get the instance of the **service**. + * + * Often services have no configuration options and there is no need to add methods to the service + * provider. The provider will be no more than a constructor function with a `$get` property. For + * these cases the {@link auto.$provide $provide} service has additional helper methods to register + * services without specifying a provider. + * + * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the + * {@link auto.$injector $injector} + * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by + * providers and services. + * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by + * services, not providers. + * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`, + * that will be wrapped in a **service provider** object, whose `$get` property will contain the + * given factory function. + * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class` + * that will be wrapped in a **service provider** object, whose `$get` property will instantiate + * a new object using the given constructor function. + * + * See the individual methods for more information and examples. + */ + +/** + * @ngdoc method + * @name $provide#provider + * @description + * + * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions + * are constructor functions, whose instances are responsible for "providing" a factory for a + * service. + * + * Service provider names start with the name of the service they provide followed by `Provider`. + * For example, the {@link ng.$log $log} service has a provider called + * {@link ng.$logProvider $logProvider}. + * + * Service provider objects can have additional methods which allow configuration of the provider + * and its service. Importantly, you can configure what kind of service is created by the `$get` + * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a + * method {@link ng.$logProvider#debugEnabled debugEnabled} + * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the + * console or not. + * + * @param {string} name The name of the instance. NOTE: the provider will be available under `name + + 'Provider'` key. + * @param {(Object|function())} provider If the provider is: + * + * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using + * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. + * - `Constructor`: a new instance of the provider will be created using + * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. + * + * @returns {Object} registered provider instance + + * @example + * + * The following example shows how to create a simple event tracking service and register it using + * {@link auto.$provide#provider $provide.provider()}. + * + * ```js + * // Define the eventTracker provider + * function EventTrackerProvider() { + * var trackingUrl = '/track'; + * + * // A provider method for configuring where the tracked events should been saved + * this.setTrackingUrl = function(url) { + * trackingUrl = url; + * }; + * + * // The service factory function + * this.$get = ['$http', function($http) { + * var trackedEvents = {}; + * return { + * // Call this to track an event + * event: function(event) { + * var count = trackedEvents[event] || 0; + * count += 1; + * trackedEvents[event] = count; + * return count; + * }, + * // Call this to save the tracked events to the trackingUrl + * save: function() { + * $http.post(trackingUrl, trackedEvents); + * } + * }; + * }]; + * } + * + * describe('eventTracker', function() { + * var postSpy; + * + * beforeEach(module(function($provide) { + * // Register the eventTracker provider + * $provide.provider('eventTracker', EventTrackerProvider); + * })); + * + * beforeEach(module(function(eventTrackerProvider) { + * // Configure eventTracker provider + * eventTrackerProvider.setTrackingUrl('/custom-track'); + * })); + * + * it('tracks events', inject(function(eventTracker) { + * expect(eventTracker.event('login')).toEqual(1); + * expect(eventTracker.event('login')).toEqual(2); + * })); + * + * it('saves to the tracking url', inject(function(eventTracker, $http) { + * postSpy = spyOn($http, 'post'); + * eventTracker.event('login'); + * eventTracker.save(); + * expect(postSpy).toHaveBeenCalled(); + * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); + * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); + * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); + * })); + * }); + * ``` + */ + +/** + * @ngdoc method + * @name $provide#factory + * @description + * + * Register a **service factory**, which will be called to return the service instance. + * This is short for registering a service where its provider consists of only a `$get` property, + * which is the given service factory function. + * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to + * configure your service in a provider. + * + * @param {string} name The name of the instance. + * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand + * for `$provide.provider(name, {$get: $getFn})`. + * @returns {Object} registered provider instance + * + * @example + * Here is an example of registering a service + * ```js + * $provide.factory('ping', ['$http', function($http) { + * return function ping() { + * return $http.send('/ping'); + * }; + * }]); + * ``` + * You would then inject and use this service like this: + * ```js + * someModule.controller('Ctrl', ['ping', function(ping) { + * ping(); + * }]); + * ``` + */ + + +/** + * @ngdoc method + * @name $provide#service + * @description + * + * Register a **service constructor**, which will be invoked with `new` to create the service + * instance. + * This is short for registering a service where its provider's `$get` property is the service + * constructor function that will be used to instantiate the service instance. + * + * You should use {@link auto.$provide#service $provide.service(class)} if you define your service + * as a type/class. + * + * @param {string} name The name of the instance. + * @param {Function} constructor A class (constructor function) that will be instantiated. + * @returns {Object} registered provider instance + * + * @example + * Here is an example of registering a service using + * {@link auto.$provide#service $provide.service(class)}. + * ```js + * var Ping = function($http) { + * this.$http = $http; + * }; + * + * Ping.$inject = ['$http']; + * + * Ping.prototype.send = function() { + * return this.$http.get('/ping'); + * }; + * $provide.service('ping', Ping); + * ``` + * You would then inject and use this service like this: + * ```js + * someModule.controller('Ctrl', ['ping', function(ping) { + * ping.send(); + * }]); + * ``` + */ + + +/** + * @ngdoc method + * @name $provide#value + * @description + * + * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a + * number, an array, an object or a function. This is short for registering a service where its + * provider's `$get` property is a factory function that takes no arguments and returns the **value + * service**. + * + * Value services are similar to constant services, except that they cannot be injected into a + * module configuration function (see {@link angular.Module#config}) but they can be overridden by + * an Angular + * {@link auto.$provide#decorator decorator}. + * + * @param {string} name The name of the instance. + * @param {*} value The value. + * @returns {Object} registered provider instance + * + * @example + * Here are some examples of creating value services. + * ```js + * $provide.value('ADMIN_USER', 'admin'); + * + * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); + * + * $provide.value('halfOf', function(value) { + * return value / 2; + * }); + * ``` + */ + + +/** + * @ngdoc method + * @name $provide#constant + * @description + * + * Register a **constant service**, such as a string, a number, an array, an object or a function, + * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be + * injected into a module configuration function (see {@link angular.Module#config}) and it cannot + * be overridden by an Angular {@link auto.$provide#decorator decorator}. + * + * @param {string} name The name of the constant. + * @param {*} value The constant value. + * @returns {Object} registered instance + * + * @example + * Here a some examples of creating constants: + * ```js + * $provide.constant('SHARD_HEIGHT', 306); + * + * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); + * + * $provide.constant('double', function(value) { + * return value * 2; + * }); + * ``` + */ + + +/** + * @ngdoc method + * @name $provide#decorator + * @description + * + * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator + * intercepts the creation of a service, allowing it to override or modify the behaviour of the + * service. The object returned by the decorator may be the original service, or a new service + * object which replaces or wraps and delegates to the original service. + * + * @param {string} name The name of the service to decorate. + * @param {function()} decorator This function will be invoked when the service needs to be + * instantiated and should return the decorated service instance. The function is called using + * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. + * Local injection arguments: + * + * * `$delegate` - The original service instance, which can be monkey patched, configured, + * decorated or delegated to. + * + * @example + * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting + * calls to {@link ng.$log#error $log.warn()}. + * ```js + * $provide.decorator('$log', ['$delegate', function($delegate) { + * $delegate.warn = $delegate.error; + * return $delegate; + * }]); + * ``` + */ + + +function createInjector(modulesToLoad) { + var INSTANTIATING = {}, + providerSuffix = 'Provider', + path = [], + loadedModules = new HashMap([], true), + providerCache = { + $provide: { + provider: supportObject(provider), + factory: supportObject(factory), + service: supportObject(service), + value: supportObject(value), + constant: supportObject(constant), + decorator: decorator + } + }, + providerInjector = (providerCache.$injector = + createInternalInjector(providerCache, function() { + throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); + })), + instanceCache = {}, + instanceInjector = (instanceCache.$injector = + createInternalInjector(instanceCache, function(servicename) { + var provider = providerInjector.get(servicename + providerSuffix); + return instanceInjector.invoke(provider.$get, provider); + })); + + + forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); + + return instanceInjector; + + //////////////////////////////////// + // $provider + //////////////////////////////////// + + function supportObject(delegate) { + return function(key, value) { + if (isObject(key)) { + forEach(key, reverseParams(delegate)); + } else { + return delegate(key, value); + } + }; + } + + function provider(name, provider_) { + assertNotHasOwnProperty(name, 'service'); + if (isFunction(provider_) || isArray(provider_)) { + provider_ = providerInjector.instantiate(provider_); + } + if (!provider_.$get) { + throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); + } + return providerCache[name + providerSuffix] = provider_; + } + + function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } + + function service(name, constructor) { + return factory(name, ['$injector', function($injector) { + return $injector.instantiate(constructor); + }]); + } + + function value(name, val) { return factory(name, valueFn(val)); } + + function constant(name, value) { + assertNotHasOwnProperty(name, 'constant'); + providerCache[name] = value; + instanceCache[name] = value; + } + + function decorator(serviceName, decorFn) { + var origProvider = providerInjector.get(serviceName + providerSuffix), + orig$get = origProvider.$get; + + origProvider.$get = function() { + var origInstance = instanceInjector.invoke(orig$get, origProvider); + return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); + }; + } + + //////////////////////////////////// + // Module Loading + //////////////////////////////////// + function loadModules(modulesToLoad){ + var runBlocks = [], moduleFn, invokeQueue, i, ii; + forEach(modulesToLoad, function(module) { + if (loadedModules.get(module)) return; + loadedModules.put(module, true); + + try { + if (isString(module)) { + moduleFn = angularModule(module); + runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); + + for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { + var invokeArgs = invokeQueue[i], + provider = providerInjector.get(invokeArgs[0]); + + provider[invokeArgs[1]].apply(provider, invokeArgs[2]); + } + } else if (isFunction(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else if (isArray(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else { + assertArgFn(module, 'module'); + } + } catch (e) { + if (isArray(module)) { + module = module[module.length - 1]; + } + if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { + // Safari & FF's stack traces don't contain error.message content + // unlike those of Chrome and IE + // So if stack doesn't contain message, we create a new string that contains both. + // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. + /* jshint -W022 */ + e = e.message + '\n' + e.stack; + } + throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", + module, e.stack || e.message || e); + } + }); + return runBlocks; + } + + //////////////////////////////////// + // internal Injector + //////////////////////////////////// + + function createInternalInjector(cache, factory) { + + function getService(serviceName) { + if (cache.hasOwnProperty(serviceName)) { + if (cache[serviceName] === INSTANTIATING) { + throw $injectorMinErr('cdep', 'Circular dependency found: {0}', + serviceName + ' <- ' + path.join(' <- ')); + } + return cache[serviceName]; + } else { + try { + path.unshift(serviceName); + cache[serviceName] = INSTANTIATING; + return cache[serviceName] = factory(serviceName); + } catch (err) { + if (cache[serviceName] === INSTANTIATING) { + delete cache[serviceName]; + } + throw err; + } finally { + path.shift(); + } + } + } + + function invoke(fn, self, locals){ + var args = [], + $inject = annotate(fn), + length, i, + key; + + for(i = 0, length = $inject.length; i < length; i++) { + key = $inject[i]; + if (typeof key !== 'string') { + throw $injectorMinErr('itkn', + 'Incorrect injection token! Expected service name as string, got {0}', key); + } + args.push( + locals && locals.hasOwnProperty(key) + ? locals[key] + : getService(key) + ); + } + if (isArray(fn)) { + fn = fn[length]; + } + + // http://jsperf.com/angularjs-invoke-apply-vs-switch + // #5388 + return fn.apply(self, args); + } + + function instantiate(Type, locals) { + var Constructor = function() {}, + instance, returnedValue; + + // Check if Type is annotated and use just the given function at n-1 as parameter + // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); + Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype; + instance = new Constructor(); + returnedValue = invoke(Type, instance, locals); + + return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance; + } + + return { + invoke: invoke, + instantiate: instantiate, + get: getService, + annotate: annotate, + has: function(name) { + return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); + } + }; + } +} + +/** + * @ngdoc service + * @name $anchorScroll + * @kind function + * @requires $window + * @requires $location + * @requires $rootScope + * + * @description + * When called, it checks current value of `$location.hash()` and scrolls to the related element, + * according to rules specified in + * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). + * + * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor. + * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`. + * + * @example + + +
      + Go to bottom + You're at the bottom! +
      +
      + + function ScrollCtrl($scope, $location, $anchorScroll) { + $scope.gotoBottom = function (){ + // set the location.hash to the id of + // the element you wish to scroll to. + $location.hash('bottom'); + + // call $anchorScroll() + $anchorScroll(); + }; + } + + + #scrollArea { + height: 350px; + overflow: auto; + } + + #bottom { + display: block; + margin-top: 2000px; + } + +
      + */ +function $AnchorScrollProvider() { + + var autoScrollingEnabled = true; + + /** + * @ngdoc method + * @name $anchorScrollProvider#disableAutoScrolling + * + * @description + * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to + * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.
      + * Use this method to disable automatic scrolling. + * + * If automatic scrolling is disabled, one must explicitly call + * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the + * current hash. + */ + this.disableAutoScrolling = function() { + autoScrollingEnabled = false; + }; + + this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { + var document = $window.document; + + // helper function to get first anchor from a NodeList + // can't use filter.filter, as it accepts only instances of Array + // and IE can't convert NodeList to an array using [].slice + // TODO(vojta): use filter if we change it to accept lists as well + function getFirstAnchor(list) { + var result = null; + forEach(list, function(element) { + if (!result && lowercase(element.nodeName) === 'a') result = element; + }); + return result; + } + + function scroll() { + var hash = $location.hash(), elm; + + // empty hash, scroll to the top of the page + if (!hash) $window.scrollTo(0, 0); + + // element with given id + else if ((elm = document.getElementById(hash))) elm.scrollIntoView(); + + // first anchor with given name :-D + else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView(); + + // no element and hash == 'top', scroll to the top of the page + else if (hash === 'top') $window.scrollTo(0, 0); + } + + // does not scroll when user clicks on anchor link that is currently on + // (no url change, no $location.hash() change), browser native does scroll + if (autoScrollingEnabled) { + $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, + function autoScrollWatchAction() { + $rootScope.$evalAsync(scroll); + }); + } + + return scroll; + }]; +} + +var $animateMinErr = minErr('$animate'); + +/** + * @ngdoc provider + * @name $animateProvider + * + * @description + * Default implementation of $animate that doesn't perform any animations, instead just + * synchronously performs DOM + * updates and calls done() callbacks. + * + * In order to enable animations the ngAnimate module has to be loaded. + * + * To see the functional implementation check out src/ngAnimate/animate.js + */ +var $AnimateProvider = ['$provide', function($provide) { + + + this.$$selectors = {}; + + + /** + * @ngdoc method + * @name $animateProvider#register + * + * @description + * Registers a new injectable animation factory function. The factory function produces the + * animation object which contains callback functions for each event that is expected to be + * animated. + * + * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` + * must be called once the element animation is complete. If a function is returned then the + * animation service will use this function to cancel the animation whenever a cancel event is + * triggered. + * + * + * ```js + * return { + * eventFn : function(element, done) { + * //code to run the animation + * //once complete, then run done() + * return function cancellationFunction() { + * //code to cancel the animation + * } + * } + * } + * ``` + * + * @param {string} name The name of the animation. + * @param {Function} factory The factory function that will be executed to return the animation + * object. + */ + this.register = function(name, factory) { + var key = name + '-animation'; + if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', + "Expecting class selector starting with '.' got '{0}'.", name); + this.$$selectors[name.substr(1)] = key; + $provide.factory(key, factory); + }; + + /** + * @ngdoc method + * @name $animateProvider#classNameFilter + * + * @description + * Sets and/or returns the CSS class regular expression that is checked when performing + * an animation. Upon bootstrap the classNameFilter value is not set at all and will + * therefore enable $animate to attempt to perform an animation on any element. + * When setting the classNameFilter value, animations will only be performed on elements + * that successfully match the filter expression. This in turn can boost performance + * for low-powered devices as well as applications containing a lot of structural operations. + * @param {RegExp=} expression The className expression which will be checked against all animations + * @return {RegExp} The current CSS className expression value. If null then there is no expression value + */ + this.classNameFilter = function(expression) { + if(arguments.length === 1) { + this.$$classNameFilter = (expression instanceof RegExp) ? expression : null; + } + return this.$$classNameFilter; + }; + + this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) { + + function async(fn) { + fn && $$asyncCallback(fn); + } + + /** + * + * @ngdoc service + * @name $animate + * @description The $animate service provides rudimentary DOM manipulation functions to + * insert, remove and move elements within the DOM, as well as adding and removing classes. + * This service is the core service used by the ngAnimate $animator service which provides + * high-level animation hooks for CSS and JavaScript. + * + * $animate is available in the AngularJS core, however, the ngAnimate module must be included + * to enable full out animation support. Otherwise, $animate will only perform simple DOM + * manipulation operations. + * + * To learn more about enabling animation support, click here to visit the {@link ngAnimate + * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service + * page}. + */ + return { + + /** + * + * @ngdoc method + * @name $animate#enter + * @kind function + * @description Inserts the element into the DOM either after the `after` element or within + * the `parent` element. Once complete, the done() callback will be fired (if provided). + * @param {DOMElement} element the element which will be inserted into the DOM + * @param {DOMElement} parent the parent element which will append the element as + * a child (if the after element is not present) + * @param {DOMElement} after the sibling element which will append the element + * after itself + * @param {Function=} done callback function that will be called after the element has been + * inserted into the DOM + */ + enter : function(element, parent, after, done) { + if (after) { + after.after(element); + } else { + if (!parent || !parent[0]) { + parent = after.parent(); + } + parent.append(element); + } + async(done); + }, + + /** + * + * @ngdoc method + * @name $animate#leave + * @kind function + * @description Removes the element from the DOM. Once complete, the done() callback will be + * fired (if provided). + * @param {DOMElement} element the element which will be removed from the DOM + * @param {Function=} done callback function that will be called after the element has been + * removed from the DOM + */ + leave : function(element, done) { + element.remove(); + async(done); + }, + + /** + * + * @ngdoc method + * @name $animate#move + * @kind function + * @description Moves the position of the provided element within the DOM to be placed + * either after the `after` element or inside of the `parent` element. Once complete, the + * done() callback will be fired (if provided). + * + * @param {DOMElement} element the element which will be moved around within the + * DOM + * @param {DOMElement} parent the parent element where the element will be + * inserted into (if the after element is not present) + * @param {DOMElement} after the sibling element where the element will be + * positioned next to + * @param {Function=} done the callback function (if provided) that will be fired after the + * element has been moved to its new position + */ + move : function(element, parent, after, done) { + // Do not remove element before insert. Removing will cause data associated with the + // element to be dropped. Insert will implicitly do the remove. + this.enter(element, parent, after, done); + }, + + /** + * + * @ngdoc method + * @name $animate#addClass + * @kind function + * @description Adds the provided className CSS class value to the provided element. Once + * complete, the done() callback will be fired (if provided). + * @param {DOMElement} element the element which will have the className value + * added to it + * @param {string} className the CSS class which will be added to the element + * @param {Function=} done the callback function (if provided) that will be fired after the + * className value has been added to the element + */ + addClass : function(element, className, done) { + className = isString(className) ? + className : + isArray(className) ? className.join(' ') : ''; + forEach(element, function (element) { + jqLiteAddClass(element, className); + }); + async(done); + }, + + /** + * + * @ngdoc method + * @name $animate#removeClass + * @kind function + * @description Removes the provided className CSS class value from the provided element. + * Once complete, the done() callback will be fired (if provided). + * @param {DOMElement} element the element which will have the className value + * removed from it + * @param {string} className the CSS class which will be removed from the element + * @param {Function=} done the callback function (if provided) that will be fired after the + * className value has been removed from the element + */ + removeClass : function(element, className, done) { + className = isString(className) ? + className : + isArray(className) ? className.join(' ') : ''; + forEach(element, function (element) { + jqLiteRemoveClass(element, className); + }); + async(done); + }, + + /** + * + * @ngdoc method + * @name $animate#setClass + * @kind function + * @description Adds and/or removes the given CSS classes to and from the element. + * Once complete, the done() callback will be fired (if provided). + * @param {DOMElement} element the element which will have its CSS classes changed + * removed from it + * @param {string} add the CSS classes which will be added to the element + * @param {string} remove the CSS class which will be removed from the element + * @param {Function=} done the callback function (if provided) that will be fired after the + * CSS classes have been set on the element + */ + setClass : function(element, add, remove, done) { + forEach(element, function (element) { + jqLiteAddClass(element, add); + jqLiteRemoveClass(element, remove); + }); + async(done); + }, + + enabled : noop + }; + }]; +}]; + +function $$AsyncCallbackProvider(){ + this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { + return $$rAF.supported + ? function(fn) { return $$rAF(fn); } + : function(fn) { + return $timeout(fn, 0, false); + }; + }]; +} + +/* global stripHash: true */ + +/** + * ! This is a private undocumented service ! + * + * @name $browser + * @requires $log + * @description + * This object has two goals: + * + * - hide all the global state in the browser caused by the window object + * - abstract away all the browser specific features and inconsistencies + * + * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` + * service, which can be used for convenient testing of the application without the interaction with + * the real browser apis. + */ +/** + * @param {object} window The global window object. + * @param {object} document jQuery wrapped document. + * @param {function()} XHR XMLHttpRequest constructor. + * @param {object} $log console.log or an object with the same interface. + * @param {object} $sniffer $sniffer service + */ +function Browser(window, document, $log, $sniffer) { + var self = this, + rawDocument = document[0], + location = window.location, + history = window.history, + setTimeout = window.setTimeout, + clearTimeout = window.clearTimeout, + pendingDeferIds = {}; + + self.isMock = false; + + var outstandingRequestCount = 0; + var outstandingRequestCallbacks = []; + + // TODO(vojta): remove this temporary api + self.$$completeOutstandingRequest = completeOutstandingRequest; + self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; + + /** + * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` + * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. + */ + function completeOutstandingRequest(fn) { + try { + fn.apply(null, sliceArgs(arguments, 1)); + } finally { + outstandingRequestCount--; + if (outstandingRequestCount === 0) { + while(outstandingRequestCallbacks.length) { + try { + outstandingRequestCallbacks.pop()(); + } catch (e) { + $log.error(e); + } + } + } + } + } + + /** + * @private + * Note: this method is used only by scenario runner + * TODO(vojta): prefix this method with $$ ? + * @param {function()} callback Function that will be called when no outstanding request + */ + self.notifyWhenNoOutstandingRequests = function(callback) { + // force browser to execute all pollFns - this is needed so that cookies and other pollers fire + // at some deterministic time in respect to the test runner's actions. Leaving things up to the + // regular poller would result in flaky tests. + forEach(pollFns, function(pollFn){ pollFn(); }); + + if (outstandingRequestCount === 0) { + callback(); + } else { + outstandingRequestCallbacks.push(callback); + } + }; + + ////////////////////////////////////////////////////////////// + // Poll Watcher API + ////////////////////////////////////////////////////////////// + var pollFns = [], + pollTimeout; + + /** + * @name $browser#addPollFn + * + * @param {function()} fn Poll function to add + * + * @description + * Adds a function to the list of functions that poller periodically executes, + * and starts polling if not started yet. + * + * @returns {function()} the added function + */ + self.addPollFn = function(fn) { + if (isUndefined(pollTimeout)) startPoller(100, setTimeout); + pollFns.push(fn); + return fn; + }; + + /** + * @param {number} interval How often should browser call poll functions (ms) + * @param {function()} setTimeout Reference to a real or fake `setTimeout` function. + * + * @description + * Configures the poller to run in the specified intervals, using the specified + * setTimeout fn and kicks it off. + */ + function startPoller(interval, setTimeout) { + (function check() { + forEach(pollFns, function(pollFn){ pollFn(); }); + pollTimeout = setTimeout(check, interval); + })(); + } + + ////////////////////////////////////////////////////////////// + // URL API + ////////////////////////////////////////////////////////////// + + var lastBrowserUrl = location.href, + baseElement = document.find('base'), + reloadLocation = null; + + /** + * @name $browser#url + * + * @description + * GETTER: + * Without any argument, this method just returns current value of location.href. + * + * SETTER: + * With at least one argument, this method sets url to new value. + * If html5 history api supported, pushState/replaceState is used, otherwise + * location.href/location.replace is used. + * Returns its own instance to allow chaining + * + * NOTE: this api is intended for use only by the $location service. Please use the + * {@link ng.$location $location service} to change url. + * + * @param {string} url New url (when used as setter) + * @param {boolean=} replace Should new url replace current history record ? + */ + self.url = function(url, replace) { + // Android Browser BFCache causes location, history reference to become stale. + if (location !== window.location) location = window.location; + if (history !== window.history) history = window.history; + + // setter + if (url) { + if (lastBrowserUrl == url) return; + var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url); + lastBrowserUrl = url; + // Don't use history API if only the hash changed + // due to a bug in IE10/IE11 which leads + // to not firing a `hashchange` nor `popstate` event + // in some cases (see #9143). + if (!sameBase && $sniffer.history) { + if (replace) history.replaceState(null, '', url); + else { + history.pushState(null, '', url); + // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462 + baseElement.attr('href', baseElement.attr('href')); + } + } else { + if (!sameBase) { + reloadLocation = url; + } + if (replace) { + location.replace(url); + } else { + location.href = url; + } + } + return self; + // getter + } else { + // - reloadLocation is needed as browsers don't allow to read out + // the new location.href if a reload happened. + // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 + return reloadLocation || location.href.replace(/%27/g,"'"); + } + }; + + var urlChangeListeners = [], + urlChangeInit = false; + + function fireUrlChange() { + if (lastBrowserUrl == self.url()) return; + + lastBrowserUrl = self.url(); + forEach(urlChangeListeners, function(listener) { + listener(self.url()); + }); + } + + /** + * @name $browser#onUrlChange + * + * @description + * Register callback function that will be called, when url changes. + * + * It's only called when the url is changed from outside of angular: + * - user types different url into address bar + * - user clicks on history (forward/back) button + * - user clicks on a link + * + * It's not called when url is changed by $browser.url() method + * + * The listener gets called with new url as parameter. + * + * NOTE: this api is intended for use only by the $location service. Please use the + * {@link ng.$location $location service} to monitor url changes in angular apps. + * + * @param {function(string)} listener Listener function to be called when url changes. + * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. + */ + self.onUrlChange = function(callback) { + // TODO(vojta): refactor to use node's syntax for events + if (!urlChangeInit) { + // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera) + // don't fire popstate when user change the address bar and don't fire hashchange when url + // changed by push/replaceState + + // html5 history api - popstate event + if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange); + // hashchange event + if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange); + // polling + else self.addPollFn(fireUrlChange); + + urlChangeInit = true; + } + + urlChangeListeners.push(callback); + return callback; + }; + + /** + * Checks whether the url has changed outside of Angular. + * Needs to be exported to be able to check for changes that have been done in sync, + * as hashchange/popstate events fire in async. + */ + self.$$checkUrlChange = fireUrlChange; + + ////////////////////////////////////////////////////////////// + // Misc API + ////////////////////////////////////////////////////////////// + + /** + * @name $browser#baseHref + * + * @description + * Returns current + * (always relative - without domain) + * + * @returns {string} The current base href + */ + self.baseHref = function() { + var href = baseElement.attr('href'); + return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : ''; + }; + + ////////////////////////////////////////////////////////////// + // Cookies API + ////////////////////////////////////////////////////////////// + var lastCookies = {}; + var lastCookieString = ''; + var cookiePath = self.baseHref(); + + /** + * @name $browser#cookies + * + * @param {string=} name Cookie name + * @param {string=} value Cookie value + * + * @description + * The cookies method provides a 'private' low level access to browser cookies. + * It is not meant to be used directly, use the $cookie service instead. + * + * The return values vary depending on the arguments that the method was called with as follows: + * + * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify + * it + * - cookies(name, value) -> set name to value, if value is undefined delete the cookie + * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that + * way) + * + * @returns {Object} Hash of all cookies (if called without any parameter) + */ + self.cookies = function(name, value) { + /* global escape: false, unescape: false */ + var cookieLength, cookieArray, cookie, i, index; + + if (name) { + if (value === undefined) { + rawDocument.cookie = escape(name) + "=;path=" + cookiePath + + ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; + } else { + if (isString(value)) { + cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) + + ';path=' + cookiePath).length + 1; + + // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: + // - 300 cookies + // - 20 cookies per unique domain + // - 4096 bytes per cookie + if (cookieLength > 4096) { + $log.warn("Cookie '"+ name + + "' possibly not set or overflowed because it was too large ("+ + cookieLength + " > 4096 bytes)!"); + } + } + } + } else { + if (rawDocument.cookie !== lastCookieString) { + lastCookieString = rawDocument.cookie; + cookieArray = lastCookieString.split("; "); + lastCookies = {}; + + for (i = 0; i < cookieArray.length; i++) { + cookie = cookieArray[i]; + index = cookie.indexOf('='); + if (index > 0) { //ignore nameless cookies + name = unescape(cookie.substring(0, index)); + // the first value that is seen for a cookie is the most + // specific one. values for the same cookie name that + // follow are for less specific paths. + if (lastCookies[name] === undefined) { + lastCookies[name] = unescape(cookie.substring(index + 1)); + } + } + } + } + return lastCookies; + } + }; + + + /** + * @name $browser#defer + * @param {function()} fn A function, who's execution should be deferred. + * @param {number=} [delay=0] of milliseconds to defer the function execution. + * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. + * + * @description + * Executes a fn asynchronously via `setTimeout(fn, delay)`. + * + * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using + * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed + * via `$browser.defer.flush()`. + * + */ + self.defer = function(fn, delay) { + var timeoutId; + outstandingRequestCount++; + timeoutId = setTimeout(function() { + delete pendingDeferIds[timeoutId]; + completeOutstandingRequest(fn); + }, delay || 0); + pendingDeferIds[timeoutId] = true; + return timeoutId; + }; + + + /** + * @name $browser#defer.cancel + * + * @description + * Cancels a deferred task identified with `deferId`. + * + * @param {*} deferId Token returned by the `$browser.defer` function. + * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully + * canceled. + */ + self.defer.cancel = function(deferId) { + if (pendingDeferIds[deferId]) { + delete pendingDeferIds[deferId]; + clearTimeout(deferId); + completeOutstandingRequest(noop); + return true; + } + return false; + }; + +} + +function $BrowserProvider(){ + this.$get = ['$window', '$log', '$sniffer', '$document', + function( $window, $log, $sniffer, $document){ + return new Browser($window, $document, $log, $sniffer); + }]; +} + +/** + * @ngdoc service + * @name $cacheFactory + * + * @description + * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to + * them. + * + * ```js + * + * var cache = $cacheFactory('cacheId'); + * expect($cacheFactory.get('cacheId')).toBe(cache); + * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); + * + * cache.put("key", "value"); + * cache.put("another key", "another value"); + * + * // We've specified no options on creation + * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); + * + * ``` + * + * + * @param {string} cacheId Name or id of the newly created cache. + * @param {object=} options Options object that specifies the cache behavior. Properties: + * + * - `{number=}` `capacity` — turns the cache into LRU cache. + * + * @returns {object} Newly created cache object with the following set of methods: + * + * - `{object}` `info()` — Returns id, size, and options of cache. + * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns + * it. + * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. + * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. + * - `{void}` `removeAll()` — Removes all cached values. + * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. + * + * @example + + +
      + + + + +

      Cached Values

      +
      + + : + +
      + +

      Cache Info

      +
      + + : + +
      +
      +
      + + angular.module('cacheExampleApp', []). + controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { + $scope.keys = []; + $scope.cache = $cacheFactory('cacheId'); + $scope.put = function(key, value) { + if ($scope.cache.get(key) === undefined) { + $scope.keys.push(key); + } + $scope.cache.put(key, value === undefined ? null : value); + }; + }]); + + + p { + margin: 10px 0 3px; + } + +
      + */ +function $CacheFactoryProvider() { + + this.$get = function() { + var caches = {}; + + function cacheFactory(cacheId, options) { + if (cacheId in caches) { + throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); + } + + var size = 0, + stats = extend({}, options, {id: cacheId}), + data = {}, + capacity = (options && options.capacity) || Number.MAX_VALUE, + lruHash = {}, + freshEnd = null, + staleEnd = null; + + /** + * @ngdoc type + * @name $cacheFactory.Cache + * + * @description + * A cache object used to store and retrieve data, primarily used by + * {@link $http $http} and the {@link ng.directive:script script} directive to cache + * templates and other data. + * + * ```js + * angular.module('superCache') + * .factory('superCache', ['$cacheFactory', function($cacheFactory) { + * return $cacheFactory('super-cache'); + * }]); + * ``` + * + * Example test: + * + * ```js + * it('should behave like a cache', inject(function(superCache) { + * superCache.put('key', 'value'); + * superCache.put('another key', 'another value'); + * + * expect(superCache.info()).toEqual({ + * id: 'super-cache', + * size: 2 + * }); + * + * superCache.remove('another key'); + * expect(superCache.get('another key')).toBeUndefined(); + * + * superCache.removeAll(); + * expect(superCache.info()).toEqual({ + * id: 'super-cache', + * size: 0 + * }); + * })); + * ``` + */ + return caches[cacheId] = { + + /** + * @ngdoc method + * @name $cacheFactory.Cache#put + * @kind function + * + * @description + * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be + * retrieved later, and incrementing the size of the cache if the key was not already + * present in the cache. If behaving like an LRU cache, it will also remove stale + * entries from the set. + * + * It will not insert undefined values into the cache. + * + * @param {string} key the key under which the cached data is stored. + * @param {*} value the value to store alongside the key. If it is undefined, the key + * will not be stored. + * @returns {*} the value stored. + */ + put: function(key, value) { + if (capacity < Number.MAX_VALUE) { + var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); + + refresh(lruEntry); + } + + if (isUndefined(value)) return; + if (!(key in data)) size++; + data[key] = value; + + if (size > capacity) { + this.remove(staleEnd.key); + } + + return value; + }, + + /** + * @ngdoc method + * @name $cacheFactory.Cache#get + * @kind function + * + * @description + * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. + * + * @param {string} key the key of the data to be retrieved + * @returns {*} the value stored. + */ + get: function(key) { + if (capacity < Number.MAX_VALUE) { + var lruEntry = lruHash[key]; + + if (!lruEntry) return; + + refresh(lruEntry); + } + + return data[key]; + }, + + + /** + * @ngdoc method + * @name $cacheFactory.Cache#remove + * @kind function + * + * @description + * Removes an entry from the {@link $cacheFactory.Cache Cache} object. + * + * @param {string} key the key of the entry to be removed + */ + remove: function(key) { + if (capacity < Number.MAX_VALUE) { + var lruEntry = lruHash[key]; + + if (!lruEntry) return; + + if (lruEntry == freshEnd) freshEnd = lruEntry.p; + if (lruEntry == staleEnd) staleEnd = lruEntry.n; + link(lruEntry.n,lruEntry.p); + + delete lruHash[key]; + } + + delete data[key]; + size--; + }, + + + /** + * @ngdoc method + * @name $cacheFactory.Cache#removeAll + * @kind function + * + * @description + * Clears the cache object of any entries. + */ + removeAll: function() { + data = {}; + size = 0; + lruHash = {}; + freshEnd = staleEnd = null; + }, + + + /** + * @ngdoc method + * @name $cacheFactory.Cache#destroy + * @kind function + * + * @description + * Destroys the {@link $cacheFactory.Cache Cache} object entirely, + * removing it from the {@link $cacheFactory $cacheFactory} set. + */ + destroy: function() { + data = null; + stats = null; + lruHash = null; + delete caches[cacheId]; + }, + + + /** + * @ngdoc method + * @name $cacheFactory.Cache#info + * @kind function + * + * @description + * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. + * + * @returns {object} an object with the following properties: + *
        + *
      • **id**: the id of the cache instance
      • + *
      • **size**: the number of entries kept in the cache instance
      • + *
      • **...**: any additional properties from the options object when creating the + * cache.
      • + *
      + */ + info: function() { + return extend({}, stats, {size: size}); + } + }; + + + /** + * makes the `entry` the freshEnd of the LRU linked list + */ + function refresh(entry) { + if (entry != freshEnd) { + if (!staleEnd) { + staleEnd = entry; + } else if (staleEnd == entry) { + staleEnd = entry.n; + } + + link(entry.n, entry.p); + link(entry, freshEnd); + freshEnd = entry; + freshEnd.n = null; + } + } + + + /** + * bidirectionally links two entries of the LRU linked list + */ + function link(nextEntry, prevEntry) { + if (nextEntry != prevEntry) { + if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify + if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify + } + } + } + + + /** + * @ngdoc method + * @name $cacheFactory#info + * + * @description + * Get information about all the caches that have been created + * + * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` + */ + cacheFactory.info = function() { + var info = {}; + forEach(caches, function(cache, cacheId) { + info[cacheId] = cache.info(); + }); + return info; + }; + + + /** + * @ngdoc method + * @name $cacheFactory#get + * + * @description + * Get access to a cache object by the `cacheId` used when it was created. + * + * @param {string} cacheId Name or id of a cache to access. + * @returns {object} Cache object identified by the cacheId or undefined if no such cache. + */ + cacheFactory.get = function(cacheId) { + return caches[cacheId]; + }; + + + return cacheFactory; + }; +} + +/** + * @ngdoc service + * @name $templateCache + * + * @description + * The first time a template is used, it is loaded in the template cache for quick retrieval. You + * can load templates directly into the cache in a `script` tag, or by consuming the + * `$templateCache` service directly. + * + * Adding via the `script` tag: + * + * ```html + * + * ``` + * + * **Note:** the `script` tag containing the template does not need to be included in the `head` of + * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE, + * element with ng-app attribute), otherwise the template will be ignored. + * + * Adding via the $templateCache service: + * + * ```js + * var myApp = angular.module('myApp', []); + * myApp.run(function($templateCache) { + * $templateCache.put('templateId.html', 'This is the content of the template'); + * }); + * ``` + * + * To retrieve the template later, simply use it in your HTML: + * ```html + *
      + * ``` + * + * or get it via Javascript: + * ```js + * $templateCache.get('templateId.html') + * ``` + * + * See {@link ng.$cacheFactory $cacheFactory}. + * + */ +function $TemplateCacheProvider() { + this.$get = ['$cacheFactory', function($cacheFactory) { + return $cacheFactory('templates'); + }]; +} + +/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! + * + * DOM-related variables: + * + * - "node" - DOM Node + * - "element" - DOM Element or Node + * - "$node" or "$element" - jqLite-wrapped node or element + * + * + * Compiler related stuff: + * + * - "linkFn" - linking fn of a single directive + * - "nodeLinkFn" - function that aggregates all linking fns for a particular node + * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node + * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) + */ + + +/** + * @ngdoc service + * @name $compile + * @kind function + * + * @description + * Compiles an HTML string or DOM into a template and produces a template function, which + * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. + * + * The compilation is a process of walking the DOM tree and matching DOM elements to + * {@link ng.$compileProvider#directive directives}. + * + *
      + * **Note:** This document is an in-depth reference of all directive options. + * For a gentle introduction to directives with examples of common use cases, + * see the {@link guide/directive directive guide}. + *
      + * + * ## Comprehensive Directive API + * + * There are many different options for a directive. + * + * The difference resides in the return value of the factory function. + * You can either return a "Directive Definition Object" (see below) that defines the directive properties, + * or just the `postLink` function (all other properties will have the default values). + * + *
      + * **Best Practice:** It's recommended to use the "directive definition object" form. + *
      + * + * Here's an example directive declared with a Directive Definition Object: + * + * ```js + * var myModule = angular.module(...); + * + * myModule.directive('directiveName', function factory(injectables) { + * var directiveDefinitionObject = { + * priority: 0, + * template: '
      ', // or // function(tElement, tAttrs) { ... }, + * // or + * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, + * transclude: false, + * restrict: 'A', + * scope: false, + * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, + * controllerAs: 'stringAlias', + * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], + * compile: function compile(tElement, tAttrs, transclude) { + * return { + * pre: function preLink(scope, iElement, iAttrs, controller) { ... }, + * post: function postLink(scope, iElement, iAttrs, controller) { ... } + * } + * // or + * // return function postLink( ... ) { ... } + * }, + * // or + * // link: { + * // pre: function preLink(scope, iElement, iAttrs, controller) { ... }, + * // post: function postLink(scope, iElement, iAttrs, controller) { ... } + * // } + * // or + * // link: function postLink( ... ) { ... } + * }; + * return directiveDefinitionObject; + * }); + * ``` + * + *
      + * **Note:** Any unspecified options will use the default value. You can see the default values below. + *
      + * + * Therefore the above can be simplified as: + * + * ```js + * var myModule = angular.module(...); + * + * myModule.directive('directiveName', function factory(injectables) { + * var directiveDefinitionObject = { + * link: function postLink(scope, iElement, iAttrs) { ... } + * }; + * return directiveDefinitionObject; + * // or + * // return function postLink(scope, iElement, iAttrs) { ... } + * }); + * ``` + * + * + * + * ### Directive Definition Object + * + * The directive definition object provides instructions to the {@link ng.$compile + * compiler}. The attributes are: + * + * #### `priority` + * When there are multiple directives defined on a single DOM element, sometimes it + * is necessary to specify the order in which the directives are applied. The `priority` is used + * to sort the directives before their `compile` functions get called. Priority is defined as a + * number. Directives with greater numerical `priority` are compiled first. Pre-link functions + * are also run in priority order, but post-link functions are run in reverse order. The order + * of directives with the same priority is undefined. The default priority is `0`. + * + * #### `terminal` + * If set to true then the current `priority` will be the last set of directives + * which will execute (any directives at the current priority will still execute + * as the order of execution on same `priority` is undefined). + * + * #### `scope` + * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the + * same element request a new scope, only one new scope is created. The new scope rule does not + * apply for the root of the template since the root of the template always gets a new scope. + * + * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from + * normal scope in that it does not prototypically inherit from the parent scope. This is useful + * when creating reusable components, which should not accidentally read or modify data in the + * parent scope. + * + * The 'isolate' scope takes an object hash which defines a set of local scope properties + * derived from the parent scope. These local properties are useful for aliasing values for + * templates. Locals definition is a hash of local scope property to its source: + * + * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is + * always a string since DOM attributes are strings. If no `attr` name is specified then the + * attribute name is assumed to be the same as the local name. + * Given `` and widget definition + * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect + * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the + * `localName` property on the widget scope. The `name` is read from the parent scope (not + * component scope). + * + * * `=` or `=attr` - set up bi-directional binding between a local scope property and the + * parent scope property of name defined via the value of the `attr` attribute. If no `attr` + * name is specified then the attribute name is assumed to be the same as the local name. + * Given `` and widget definition of + * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the + * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected + * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent + * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You + * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. + * + * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. + * If no `attr` name is specified then the attribute name is assumed to be the same as the + * local name. Given `` and widget definition of + * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to + * a function wrapper for the `count = count + value` expression. Often it's desirable to + * pass data from the isolated scope via an expression to the parent scope, this can be + * done by passing a map of local variable names and values into the expression wrapper fn. + * For example, if the expression is `increment(amount)` then we can specify the amount value + * by calling the `localFn` as `localFn({amount: 22})`. + * + * + * + * #### `controller` + * Controller constructor function. The controller is instantiated before the + * pre-linking phase and it is shared with other directives (see + * `require` attribute). This allows the directives to communicate with each other and augment + * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: + * + * * `$scope` - Current scope associated with the element + * * `$element` - Current element + * * `$attrs` - Current attributes object for the element + * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope. + * The scope can be overridden by an optional first argument. + * `function([scope], cloneLinkingFn)`. + * + * + * #### `require` + * Require another directive and inject its controller as the fourth argument to the linking function. The + * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the + * injected argument will be an array in corresponding order. If no such directive can be + * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with: + * + * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. + * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. + * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found. + * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass + * `null` to the `link` fn if not found. + * + * + * #### `controllerAs` + * Controller alias at the directive scope. An alias for the controller so it + * can be referenced at the directive template. The directive needs to define a scope for this + * configuration to be used. Useful in the case when directive is used as component. + * + * + * #### `restrict` + * String of subset of `EACM` which restricts the directive to a specific directive + * declaration style. If omitted, the default (attributes only) is used. + * + * * `E` - Element name: `` + * * `A` - Attribute (default): `
      ` + * * `C` - Class: `
      ` + * * `M` - Comment: `` + * + * + * #### `template` + * HTML markup that may: + * * Replace the contents of the directive's element (default). + * * Replace the directive's element itself (if `replace` is true - DEPRECATED). + * * Wrap the contents of the directive's element (if `transclude` is true). + * + * Value may be: + * + * * A string. For example `
      {{delete_str}}
      `. + * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile` + * function api below) and returns a string value. + * + * + * #### `templateUrl` + * Same as `template` but the template is loaded from the specified URL. Because + * the template loading is asynchronous the compilation/linking is suspended until the template + * is loaded. + * + * You can specify `templateUrl` as a string representing the URL or as a function which takes two + * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns + * a string value representing the url. In either case, the template URL is passed through {@link + * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. + * + * + * #### `replace` ([*DEPRECATED*!], will be removed in next major release) + * specify what the template should replace. Defaults to `false`. + * + * * `true` - the template will replace the directive's element. + * * `false` - the template will replace the contents of the directive's element. + * + * The replacement process migrates all of the attributes / classes from the old element to the new + * one. See the {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive + * Directives Guide} for an example. + * + * #### `transclude` + * compile the content of the element and make it available to the directive. + * Typically used with {@link ng.directive:ngTransclude + * ngTransclude}. The advantage of transclusion is that the linking function receives a + * transclusion function which is pre-bound to the correct scope. In a typical setup the widget + * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate` + * scope. This makes it possible for the widget to have private state, and the transclusion to + * be bound to the parent (pre-`isolate`) scope. + * + * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the + * directive's element or the entire element: + * + * * `true` - transclude the content (i.e. the child nodes) of the directive's element. + * * `'element'` - transclude the whole of the directive's element including any directives on this + * element that defined at a lower priority than this directive. When used, the `template` + * property is ignored. + * + *
      + * **Note:** When testing an element transclude directive you must not place the directive at the root of the + * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives + * Testing Transclusion Directives}. + *
      + * + * #### `compile` + * + * ```js + * function compile(tElement, tAttrs, transclude) { ... } + * ``` + * + * The compile function deals with transforming the template DOM. Since most directives do not do + * template transformation, it is not used often. The compile function takes the following arguments: + * + * * `tElement` - template element - The element where the directive has been declared. It is + * safe to do template transformation on the element and child elements only. + * + * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared + * between all directive compile functions. + * + * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` + * + *
      + * **Note:** The template instance and the link instance may be different objects if the template has + * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that + * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration + * should be done in a linking function rather than in a compile function. + *
      + + *
      + * **Note:** The compile function cannot handle directives that recursively use themselves in their + * own templates or compile functions. Compiling these directives results in an infinite loop and a + * stack overflow errors. + * + * This can be avoided by manually using $compile in the postLink function to imperatively compile + * a directive's template instead of relying on automatic template compilation via `template` or + * `templateUrl` declaration or manual compilation inside the compile function. + *
      + * + *
      + * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it + * e.g. does not know about the right outer scope. Please use the transclude function that is passed + * to the link function instead. + *
      + + * A compile function can have a return value which can be either a function or an object. + * + * * returning a (post-link) function - is equivalent to registering the linking function via the + * `link` property of the config object when the compile function is empty. + * + * * returning an object with function(s) registered via `pre` and `post` properties - allows you to + * control when a linking function should be called during the linking phase. See info about + * pre-linking and post-linking functions below. + * + * + * #### `link` + * This property is used only if the `compile` property is not defined. + * + * ```js + * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } + * ``` + * + * The link function is responsible for registering DOM listeners as well as updating the DOM. It is + * executed after the template has been cloned. This is where most of the directive logic will be + * put. + * + * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the + * directive for registering {@link ng.$rootScope.Scope#$watch watches}. + * + * * `iElement` - instance element - The element where the directive is to be used. It is safe to + * manipulate the children of the element only in `postLink` function since the children have + * already been linked. + * + * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared + * between all directive linking functions. + * + * * `controller` - a controller instance - A controller instance if at least one directive on the + * element defines a controller. The controller is shared among all the directives, which allows + * the directives to use the controllers as a communication channel. + * + * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. + * The scope can be overridden by an optional first argument. This is the same as the `$transclude` + * parameter of directive controllers. + * `function([scope], cloneLinkingFn)`. + * + * + * #### Pre-linking function + * + * Executed before the child elements are linked. Not safe to do DOM transformation since the + * compiler linking function will fail to locate the correct elements for linking. + * + * #### Post-linking function + * + * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function. + * + * + * ### Attributes + * + * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the + * `link()` or `compile()` functions. It has a variety of uses. + * + * accessing *Normalized attribute names:* + * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'. + * the attributes object allows for normalized access to + * the attributes. + * + * * *Directive inter-communication:* All directives share the same instance of the attributes + * object which allows the directives to use the attributes object as inter directive + * communication. + * + * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object + * allowing other directives to read the interpolated value. + * + * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes + * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also + * the only way to easily get the actual value because during the linking phase the interpolation + * hasn't been evaluated yet and so the value is at this time set to `undefined`. + * + * ```js + * function linkingFn(scope, elm, attrs, ctrl) { + * // get the attribute value + * console.log(attrs.ngModel); + * + * // change the attribute + * attrs.$set('ngModel', 'new value'); + * + * // observe changes to interpolated attribute + * attrs.$observe('ngModel', function(value) { + * console.log('ngModel has changed value to ' + value); + * }); + * } + * ``` + * + * ## Example + * + *
      + * **Note**: Typically directives are registered with `module.directive`. The example below is + * to illustrate how `$compile` works. + *
      + * + + + +
      +
      +
      +
      +
      +
      + + it('should auto compile', function() { + var textarea = $('textarea'); + var output = $('div[compile]'); + // The initial state reads 'Hello Angular'. + expect(output.getText()).toBe('Hello Angular'); + textarea.clear(); + textarea.sendKeys('{{name}}!'); + expect(output.getText()).toBe('Angular!'); + }); + +
      + + * + * + * @param {string|DOMElement} element Element or HTML string to compile into a template function. + * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives. + * @param {number} maxPriority only apply directives lower than given priority (Only effects the + * root element(s), not their children) + * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template + * (a DOM element/tree) to a scope. Where: + * + * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. + * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the + * `template` and call the `cloneAttachFn` function allowing the caller to attach the + * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is + * called as:
      `cloneAttachFn(clonedElement, scope)` where: + * + * * `clonedElement` - is a clone of the original `element` passed into the compiler. + * * `scope` - is the current scope with which the linking function is working with. + * + * Calling the linking function returns the element of the template. It is either the original + * element passed in, or the clone of the element if the `cloneAttachFn` is provided. + * + * After linking the view is not updated until after a call to $digest which typically is done by + * Angular automatically. + * + * If you need access to the bound view, there are two ways to do it: + * + * - If you are not asking the linking function to clone the template, create the DOM element(s) + * before you send them to the compiler and keep this reference around. + * ```js + * var element = $compile('

      {{total}}

      ')(scope); + * ``` + * + * - if on the other hand, you need the element to be cloned, the view reference from the original + * example would not point to the clone, but rather to the original template that was cloned. In + * this case, you can access the clone via the cloneAttachFn: + * ```js + * var templateElement = angular.element('

      {{total}}

      '), + * scope = ....; + * + * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { + * //attach the clone to DOM document at the right place + * }); + * + * //now we have reference to the cloned DOM via `clonedElement` + * ``` + * + * + * For information on how the compiler works, see the + * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. + */ + +var $compileMinErr = minErr('$compile'); + +/** + * @ngdoc provider + * @name $compileProvider + * @kind function + * + * @description + */ +$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; +function $CompileProvider($provide, $$sanitizeUriProvider) { + var hasDirectives = {}, + Suffix = 'Directive', + COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/, + CLASS_DIRECTIVE_REGEXP = /(([\d\w_\-]+)(?:\:([^;]+))?;?)/; + + // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes + // The assumption is that future DOM event attribute names will begin with + // 'on' and be composed of only English letters. + var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; + + /** + * @ngdoc method + * @name $compileProvider#directive + * @kind function + * + * @description + * Register a new directive with the compiler. + * + * @param {string|Object} name Name of the directive in camel-case (i.e. ngBind which + * will match as ng-bind), or an object map of directives where the keys are the + * names and the values are the factories. + * @param {Function|Array} directiveFactory An injectable directive factory function. See + * {@link guide/directive} for more info. + * @returns {ng.$compileProvider} Self for chaining. + */ + this.directive = function registerDirective(name, directiveFactory) { + assertNotHasOwnProperty(name, 'directive'); + if (isString(name)) { + assertArg(directiveFactory, 'directiveFactory'); + if (!hasDirectives.hasOwnProperty(name)) { + hasDirectives[name] = []; + $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', + function($injector, $exceptionHandler) { + var directives = []; + forEach(hasDirectives[name], function(directiveFactory, index) { + try { + var directive = $injector.invoke(directiveFactory); + if (isFunction(directive)) { + directive = { compile: valueFn(directive) }; + } else if (!directive.compile && directive.link) { + directive.compile = valueFn(directive.link); + } + directive.priority = directive.priority || 0; + directive.index = index; + directive.name = directive.name || name; + directive.require = directive.require || (directive.controller && directive.name); + directive.restrict = directive.restrict || 'A'; + directives.push(directive); + } catch (e) { + $exceptionHandler(e); + } + }); + return directives; + }]); + } + hasDirectives[name].push(directiveFactory); + } else { + forEach(name, reverseParams(registerDirective)); + } + return this; + }; + + + /** + * @ngdoc method + * @name $compileProvider#aHrefSanitizationWhitelist + * @kind function + * + * @description + * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * urls during a[href] sanitization. + * + * The sanitization is a security measure aimed at prevent XSS attacks via html links. + * + * Any url about to be assigned to a[href] via data-binding is first normalized and turned into + * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` + * regular expression. If a match is found, the original url is written into the dom. Otherwise, + * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. + * + * @param {RegExp=} regexp New regexp to whitelist urls with. + * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for + * chaining otherwise. + */ + this.aHrefSanitizationWhitelist = function(regexp) { + if (isDefined(regexp)) { + $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); + return this; + } else { + return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); + } + }; + + + /** + * @ngdoc method + * @name $compileProvider#imgSrcSanitizationWhitelist + * @kind function + * + * @description + * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * urls during img[src] sanitization. + * + * The sanitization is a security measure aimed at prevent XSS attacks via html links. + * + * Any url about to be assigned to img[src] via data-binding is first normalized and turned into + * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` + * regular expression. If a match is found, the original url is written into the dom. Otherwise, + * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. + * + * @param {RegExp=} regexp New regexp to whitelist urls with. + * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for + * chaining otherwise. + */ + this.imgSrcSanitizationWhitelist = function(regexp) { + if (isDefined(regexp)) { + $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); + return this; + } else { + return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); + } + }; + + this.$get = [ + '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', + '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri', + function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, + $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) { + + var Attributes = function(element, attr) { + this.$$element = element; + this.$attr = attr || {}; + }; + + Attributes.prototype = { + /** + * @ngdoc method + * @name $compile.directive.Attributes#$normalize + * @kind function + * + * @description + * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or + * `data-`) to its normalized, camelCase form. + * + * Also there is special case for Moz prefix starting with upper case letter. + * + * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives} + * + * @param {string} name Name to normalize + */ + $normalize: directiveNormalize, + + + /** + * @ngdoc method + * @name $compile.directive.Attributes#$addClass + * @kind function + * + * @description + * Adds the CSS class value specified by the classVal parameter to the element. If animations + * are enabled then an animation will be triggered for the class addition. + * + * @param {string} classVal The className value that will be added to the element + */ + $addClass : function(classVal) { + if(classVal && classVal.length > 0) { + $animate.addClass(this.$$element, classVal); + } + }, + + /** + * @ngdoc method + * @name $compile.directive.Attributes#$removeClass + * @kind function + * + * @description + * Removes the CSS class value specified by the classVal parameter from the element. If + * animations are enabled then an animation will be triggered for the class removal. + * + * @param {string} classVal The className value that will be removed from the element + */ + $removeClass : function(classVal) { + if(classVal && classVal.length > 0) { + $animate.removeClass(this.$$element, classVal); + } + }, + + /** + * @ngdoc method + * @name $compile.directive.Attributes#$updateClass + * @kind function + * + * @description + * Adds and removes the appropriate CSS class values to the element based on the difference + * between the new and old CSS class values (specified as newClasses and oldClasses). + * + * @param {string} newClasses The current CSS className value + * @param {string} oldClasses The former CSS className value + */ + $updateClass : function(newClasses, oldClasses) { + var toAdd = tokenDifference(newClasses, oldClasses); + var toRemove = tokenDifference(oldClasses, newClasses); + + if(toAdd.length === 0) { + $animate.removeClass(this.$$element, toRemove); + } else if(toRemove.length === 0) { + $animate.addClass(this.$$element, toAdd); + } else { + $animate.setClass(this.$$element, toAdd, toRemove); + } + }, + + /** + * Set a normalized attribute on the element in a way such that all directives + * can share the attribute. This function properly handles boolean attributes. + * @param {string} key Normalized key. (ie ngAttribute) + * @param {string|boolean} value The value to set. If `null` attribute will be deleted. + * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. + * Defaults to true. + * @param {string=} attrName Optional none normalized name. Defaults to key. + */ + $set: function(key, value, writeAttr, attrName) { + // TODO: decide whether or not to throw an error if "class" + //is set through this function since it may cause $updateClass to + //become unstable. + + var booleanKey = getBooleanAttrName(this.$$element[0], key), + normalizedVal, + nodeName; + + if (booleanKey) { + this.$$element.prop(key, value); + attrName = booleanKey; + } + + this[key] = value; + + // translate normalized key to actual key + if (attrName) { + this.$attr[key] = attrName; + } else { + attrName = this.$attr[key]; + if (!attrName) { + this.$attr[key] = attrName = snake_case(key, '-'); + } + } + + nodeName = nodeName_(this.$$element); + + // sanitize a[href] and img[src] values + if ((nodeName === 'A' && key === 'href') || + (nodeName === 'IMG' && key === 'src')) { + this[key] = value = $$sanitizeUri(value, key === 'src'); + } + + if (writeAttr !== false) { + if (value === null || value === undefined) { + this.$$element.removeAttr(attrName); + } else { + this.$$element.attr(attrName, value); + } + } + + // fire observers + var $$observers = this.$$observers; + $$observers && forEach($$observers[key], function(fn) { + try { + fn(value); + } catch (e) { + $exceptionHandler(e); + } + }); + }, + + + /** + * @ngdoc method + * @name $compile.directive.Attributes#$observe + * @kind function + * + * @description + * Observes an interpolated attribute. + * + * The observer function will be invoked once during the next `$digest` following + * compilation. The observer is then invoked whenever the interpolated value + * changes. + * + * @param {string} key Normalized key. (ie ngAttribute) . + * @param {function(interpolatedValue)} fn Function that will be called whenever + the interpolated value of the attribute changes. + * See the {@link guide/directive#Attributes Directives} guide for more info. + * @returns {function()} the `fn` parameter. + */ + $observe: function(key, fn) { + var attrs = this, + $$observers = (attrs.$$observers || (attrs.$$observers = {})), + listeners = ($$observers[key] || ($$observers[key] = [])); + + listeners.push(fn); + $rootScope.$evalAsync(function() { + if (!listeners.$$inter) { + // no one registered attribute interpolation function, so lets call it manually + fn(attrs[key]); + } + }); + return fn; + } + }; + + var startSymbol = $interpolate.startSymbol(), + endSymbol = $interpolate.endSymbol(), + denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') + ? identity + : function denormalizeTemplate(template) { + return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); + }, + NG_ATTR_BINDING = /^ngAttr[A-Z]/; + + + return compile; + + //================================ + + function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, + previousCompileContext) { + if (!($compileNodes instanceof jqLite)) { + // jquery always rewraps, whereas we need to preserve the original selector so that we can + // modify it. + $compileNodes = jqLite($compileNodes); + } + // We can not compile top level text elements since text nodes can be merged and we will + // not be able to attach scope data to them, so we will wrap them in + forEach($compileNodes, function(node, index){ + if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { + $compileNodes[index] = node = jqLite(node).wrap('').parent()[0]; + } + }); + var compositeLinkFn = + compileNodes($compileNodes, transcludeFn, $compileNodes, + maxPriority, ignoreDirective, previousCompileContext); + safeAddClass($compileNodes, 'ng-scope'); + return function publicLinkFn(scope, cloneConnectFn, transcludeControllers, parentBoundTranscludeFn){ + assertArg(scope, 'scope'); + // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart + // and sometimes changes the structure of the DOM. + var $linkNode = cloneConnectFn + ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!! + : $compileNodes; + + forEach(transcludeControllers, function(instance, name) { + $linkNode.data('$' + name + 'Controller', instance); + }); + + // Attach scope only to non-text nodes. + for(var i = 0, ii = $linkNode.length; i + addDirective(directives, + directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); + + // iterate over the attributes + for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes, + j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { + var attrStartName = false; + var attrEndName = false; + + attr = nAttrs[j]; + if (!msie || msie >= 8 || attr.specified) { + name = attr.name; + value = trim(attr.value); + + // support ngAttr attribute binding + ngAttrName = directiveNormalize(name); + if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) { + name = snake_case(ngAttrName.substr(6), '-'); + } + + var directiveNName = ngAttrName.replace(/(Start|End)$/, ''); + if (ngAttrName === directiveNName + 'Start') { + attrStartName = name; + attrEndName = name.substr(0, name.length - 5) + 'end'; + name = name.substr(0, name.length - 6); + } + + nName = directiveNormalize(name.toLowerCase()); + attrsMap[nName] = name; + if (isNgAttr || !attrs.hasOwnProperty(nName)) { + attrs[nName] = value; + if (getBooleanAttrName(node, nName)) { + attrs[nName] = true; // presence means true + } + } + addAttrInterpolateDirective(node, directives, value, nName); + addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, + attrEndName); + } + } + + // use class as directive + className = node.className; + if (isString(className) && className !== '') { + while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { + nName = directiveNormalize(match[2]); + if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { + attrs[nName] = trim(match[3]); + } + className = className.substr(match.index + match[0].length); + } + } + break; + case 3: /* Text Node */ + addTextInterpolateDirective(directives, node.nodeValue); + break; + case 8: /* Comment */ + try { + match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); + if (match) { + nName = directiveNormalize(match[1]); + if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { + attrs[nName] = trim(match[2]); + } + } + } catch (e) { + // turns out that under some circumstances IE9 throws errors when one attempts to read + // comment's node value. + // Just ignore it and continue. (Can't seem to reproduce in test case.) + } + break; + } + + directives.sort(byPriority); + return directives; + } + + /** + * Given a node with an directive-start it collects all of the siblings until it finds + * directive-end. + * @param node + * @param attrStart + * @param attrEnd + * @returns {*} + */ + function groupScan(node, attrStart, attrEnd) { + var nodes = []; + var depth = 0; + if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { + var startNode = node; + do { + if (!node) { + throw $compileMinErr('uterdir', + "Unterminated attribute, found '{0}' but no matching '{1}' found.", + attrStart, attrEnd); + } + if (node.nodeType == 1 /** Element **/) { + if (node.hasAttribute(attrStart)) depth++; + if (node.hasAttribute(attrEnd)) depth--; + } + nodes.push(node); + node = node.nextSibling; + } while (depth > 0); + } else { + nodes.push(node); + } + + return jqLite(nodes); + } + + /** + * Wrapper for linking function which converts normal linking function into a grouped + * linking function. + * @param linkFn + * @param attrStart + * @param attrEnd + * @returns {Function} + */ + function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { + return function(scope, element, attrs, controllers, transcludeFn) { + element = groupScan(element[0], attrStart, attrEnd); + return linkFn(scope, element, attrs, controllers, transcludeFn); + }; + } + + /** + * Once the directives have been collected, their compile functions are executed. This method + * is responsible for inlining directive templates as well as terminating the application + * of the directives if the terminal directive has been reached. + * + * @param {Array} directives Array of collected directives to execute their compile function. + * this needs to be pre-sorted by priority order. + * @param {Node} compileNode The raw DOM node to apply the compile functions to + * @param {Object} templateAttrs The shared attribute function + * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the + * scope argument is auto-generated to the new + * child of the transcluded parent scope. + * @param {JQLite} jqCollection If we are working on the root of the compile tree then this + * argument has the root jqLite array so that we can replace nodes + * on it. + * @param {Object=} originalReplaceDirective An optional directive that will be ignored when + * compiling the transclusion. + * @param {Array.} preLinkFns + * @param {Array.} postLinkFns + * @param {Object} previousCompileContext Context used for previous compilation of the current + * node + * @returns {Function} linkFn + */ + function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, + jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, + previousCompileContext) { + previousCompileContext = previousCompileContext || {}; + + var terminalPriority = -Number.MAX_VALUE, + newScopeDirective, + controllerDirectives = previousCompileContext.controllerDirectives, + newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, + templateDirective = previousCompileContext.templateDirective, + nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, + hasTranscludeDirective = false, + hasTemplate = false, + hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, + $compileNode = templateAttrs.$$element = jqLite(compileNode), + directive, + directiveName, + $template, + replaceDirective = originalReplaceDirective, + childTranscludeFn = transcludeFn, + linkFn, + directiveValue; + + // executes all directives on the current element + for(var i = 0, ii = directives.length; i < ii; i++) { + directive = directives[i]; + var attrStart = directive.$$start; + var attrEnd = directive.$$end; + + // collect multiblock sections + if (attrStart) { + $compileNode = groupScan(compileNode, attrStart, attrEnd); + } + $template = undefined; + + if (terminalPriority > directive.priority) { + break; // prevent further processing of directives + } + + if (directiveValue = directive.scope) { + newScopeDirective = newScopeDirective || directive; + + // skip the check for directives with async templates, we'll check the derived sync + // directive when the template arrives + if (!directive.templateUrl) { + assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, + $compileNode); + if (isObject(directiveValue)) { + newIsolateScopeDirective = directive; + } + } + } + + directiveName = directive.name; + + if (!directive.templateUrl && directive.controller) { + directiveValue = directive.controller; + controllerDirectives = controllerDirectives || {}; + assertNoDuplicate("'" + directiveName + "' controller", + controllerDirectives[directiveName], directive, $compileNode); + controllerDirectives[directiveName] = directive; + } + + if (directiveValue = directive.transclude) { + hasTranscludeDirective = true; + + // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. + // This option should only be used by directives that know how to safely handle element transclusion, + // where the transcluded nodes are added or replaced after linking. + if (!directive.$$tlb) { + assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); + nonTlbTranscludeDirective = directive; + } + + if (directiveValue == 'element') { + hasElementTranscludeDirective = true; + terminalPriority = directive.priority; + $template = $compileNode; + $compileNode = templateAttrs.$$element = + jqLite(document.createComment(' ' + directiveName + ': ' + + templateAttrs[directiveName] + ' ')); + compileNode = $compileNode[0]; + replaceWith(jqCollection, sliceArgs($template), compileNode); + + childTranscludeFn = compile($template, transcludeFn, terminalPriority, + replaceDirective && replaceDirective.name, { + // Don't pass in: + // - controllerDirectives - otherwise we'll create duplicates controllers + // - newIsolateScopeDirective or templateDirective - combining templates with + // element transclusion doesn't make sense. + // + // We need only nonTlbTranscludeDirective so that we prevent putting transclusion + // on the same element more than once. + nonTlbTranscludeDirective: nonTlbTranscludeDirective + }); + } else { + $template = jqLite(jqLiteClone(compileNode)).contents(); + $compileNode.empty(); // clear contents + childTranscludeFn = compile($template, transcludeFn); + } + } + + if (directive.template) { + hasTemplate = true; + assertNoDuplicate('template', templateDirective, directive, $compileNode); + templateDirective = directive; + + directiveValue = (isFunction(directive.template)) + ? directive.template($compileNode, templateAttrs) + : directive.template; + + directiveValue = denormalizeTemplate(directiveValue); + + if (directive.replace) { + replaceDirective = directive; + if (jqLiteIsTextNode(directiveValue)) { + $template = []; + } else { + $template = jqLite(trim(directiveValue)); + } + compileNode = $template[0]; + + if ($template.length != 1 || compileNode.nodeType !== 1) { + throw $compileMinErr('tplrt', + "Template for directive '{0}' must have exactly one root element. {1}", + directiveName, ''); + } + + replaceWith(jqCollection, $compileNode, compileNode); + + var newTemplateAttrs = {$attr: {}}; + + // combine directives from the original node and from the template: + // - take the array of directives for this element + // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) + // - collect directives from the template and sort them by priority + // - combine directives as: processed + template + unprocessed + var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); + var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); + + if (newIsolateScopeDirective) { + markDirectivesAsIsolate(templateDirectives); + } + directives = directives.concat(templateDirectives).concat(unprocessedDirectives); + mergeTemplateAttributes(templateAttrs, newTemplateAttrs); + + ii = directives.length; + } else { + $compileNode.html(directiveValue); + } + } + + if (directive.templateUrl) { + hasTemplate = true; + assertNoDuplicate('template', templateDirective, directive, $compileNode); + templateDirective = directive; + + if (directive.replace) { + replaceDirective = directive; + } + + nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, + templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, { + controllerDirectives: controllerDirectives, + newIsolateScopeDirective: newIsolateScopeDirective, + templateDirective: templateDirective, + nonTlbTranscludeDirective: nonTlbTranscludeDirective + }); + ii = directives.length; + } else if (directive.compile) { + try { + linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); + if (isFunction(linkFn)) { + addLinkFns(null, linkFn, attrStart, attrEnd); + } else if (linkFn) { + addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); + } + } catch (e) { + $exceptionHandler(e, startingTag($compileNode)); + } + } + + if (directive.terminal) { + nodeLinkFn.terminal = true; + terminalPriority = Math.max(terminalPriority, directive.priority); + } + + } + + nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; + nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective; + nodeLinkFn.templateOnThisElement = hasTemplate; + nodeLinkFn.transclude = childTranscludeFn; + + previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; + + // might be normal or delayed nodeLinkFn depending on if templateUrl is present + return nodeLinkFn; + + //////////////////// + + function addLinkFns(pre, post, attrStart, attrEnd) { + if (pre) { + if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); + pre.require = directive.require; + pre.directiveName = directiveName; + if (newIsolateScopeDirective === directive || directive.$$isolateScope) { + pre = cloneAndAnnotateFn(pre, {isolateScope: true}); + } + preLinkFns.push(pre); + } + if (post) { + if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); + post.require = directive.require; + post.directiveName = directiveName; + if (newIsolateScopeDirective === directive || directive.$$isolateScope) { + post = cloneAndAnnotateFn(post, {isolateScope: true}); + } + postLinkFns.push(post); + } + } + + + function getControllers(directiveName, require, $element, elementControllers) { + var value, retrievalMethod = 'data', optional = false; + if (isString(require)) { + while((value = require.charAt(0)) == '^' || value == '?') { + require = require.substr(1); + if (value == '^') { + retrievalMethod = 'inheritedData'; + } + optional = optional || value == '?'; + } + value = null; + + if (elementControllers && retrievalMethod === 'data') { + value = elementControllers[require]; + } + value = value || $element[retrievalMethod]('$' + require + 'Controller'); + + if (!value && !optional) { + throw $compileMinErr('ctreq', + "Controller '{0}', required by directive '{1}', can't be found!", + require, directiveName); + } + return value; + } else if (isArray(require)) { + value = []; + forEach(require, function(require) { + value.push(getControllers(directiveName, require, $element, elementControllers)); + }); + } + return value; + } + + + function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { + var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn; + + attrs = (compileNode === linkNode) + ? templateAttrs + : shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr)); + $element = attrs.$$element; + + if (newIsolateScopeDirective) { + var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/; + + isolateScope = scope.$new(true); + + if (templateDirective && (templateDirective === newIsolateScopeDirective || + templateDirective === newIsolateScopeDirective.$$originalDirective)) { + $element.data('$isolateScope', isolateScope); + } else { + $element.data('$isolateScopeNoTemplate', isolateScope); + } + + + + safeAddClass($element, 'ng-isolate-scope'); + + forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { + var match = definition.match(LOCAL_REGEXP) || [], + attrName = match[3] || scopeName, + optional = (match[2] == '?'), + mode = match[1], // @, =, or & + lastValue, + parentGet, parentSet, compare; + + isolateScope.$$isolateBindings[scopeName] = mode + attrName; + + switch (mode) { + + case '@': + attrs.$observe(attrName, function(value) { + isolateScope[scopeName] = value; + }); + attrs.$$observers[attrName].$$scope = scope; + if( attrs[attrName] ) { + // If the attribute has been provided then we trigger an interpolation to ensure + // the value is there for use in the link fn + isolateScope[scopeName] = $interpolate(attrs[attrName])(scope); + } + break; + + case '=': + if (optional && !attrs[attrName]) { + return; + } + parentGet = $parse(attrs[attrName]); + if (parentGet.literal) { + compare = equals; + } else { + compare = function(a,b) { return a === b || (a !== a && b !== b); }; + } + parentSet = parentGet.assign || function() { + // reset the change, or we will throw this exception on every $digest + lastValue = isolateScope[scopeName] = parentGet(scope); + throw $compileMinErr('nonassign', + "Expression '{0}' used with directive '{1}' is non-assignable!", + attrs[attrName], newIsolateScopeDirective.name); + }; + lastValue = isolateScope[scopeName] = parentGet(scope); + isolateScope.$watch(function parentValueWatch() { + var parentValue = parentGet(scope); + if (!compare(parentValue, isolateScope[scopeName])) { + // we are out of sync and need to copy + if (!compare(parentValue, lastValue)) { + // parent changed and it has precedence + isolateScope[scopeName] = parentValue; + } else { + // if the parent can be assigned then do so + parentSet(scope, parentValue = isolateScope[scopeName]); + } + } + return lastValue = parentValue; + }, null, parentGet.literal); + break; + + case '&': + parentGet = $parse(attrs[attrName]); + isolateScope[scopeName] = function(locals) { + return parentGet(scope, locals); + }; + break; + + default: + throw $compileMinErr('iscp', + "Invalid isolate scope definition for directive '{0}'." + + " Definition: {... {1}: '{2}' ...}", + newIsolateScopeDirective.name, scopeName, definition); + } + }); + } + transcludeFn = boundTranscludeFn && controllersBoundTransclude; + if (controllerDirectives) { + forEach(controllerDirectives, function(directive) { + var locals = { + $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, + $element: $element, + $attrs: attrs, + $transclude: transcludeFn + }, controllerInstance; + + controller = directive.controller; + if (controller == '@') { + controller = attrs[directive.name]; + } + + controllerInstance = $controller(controller, locals); + // For directives with element transclusion the element is a comment, + // but jQuery .data doesn't support attaching data to comment nodes as it's hard to + // clean up (http://bugs.jquery.com/ticket/8335). + // Instead, we save the controllers for the element in a local hash and attach to .data + // later, once we have the actual element. + elementControllers[directive.name] = controllerInstance; + if (!hasElementTranscludeDirective) { + $element.data('$' + directive.name + 'Controller', controllerInstance); + } + + if (directive.controllerAs) { + locals.$scope[directive.controllerAs] = controllerInstance; + } + }); + } + + // PRELINKING + for(i = 0, ii = preLinkFns.length; i < ii; i++) { + try { + linkFn = preLinkFns[i]; + linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, + linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), transcludeFn); + } catch (e) { + $exceptionHandler(e, startingTag($element)); + } + } + + // RECURSION + // We only pass the isolate scope, if the isolate directive has a template, + // otherwise the child elements do not belong to the isolate directive. + var scopeToChild = scope; + if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { + scopeToChild = isolateScope; + } + childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); + + // POSTLINKING + for(i = postLinkFns.length - 1; i >= 0; i--) { + try { + linkFn = postLinkFns[i]; + linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, + linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), transcludeFn); + } catch (e) { + $exceptionHandler(e, startingTag($element)); + } + } + + // This is the function that is injected as `$transclude`. + function controllersBoundTransclude(scope, cloneAttachFn) { + var transcludeControllers; + + // no scope passed + if (arguments.length < 2) { + cloneAttachFn = scope; + scope = undefined; + } + + if (hasElementTranscludeDirective) { + transcludeControllers = elementControllers; + } + + return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers); + } + } + } + + function markDirectivesAsIsolate(directives) { + // mark all directives as needing isolate scope. + for (var j = 0, jj = directives.length; j < jj; j++) { + directives[j] = inherit(directives[j], {$$isolateScope: true}); + } + } + + /** + * looks up the directive and decorates it with exception handling and proper parameters. We + * call this the boundDirective. + * + * @param {string} name name of the directive to look up. + * @param {string} location The directive must be found in specific format. + * String containing any of theses characters: + * + * * `E`: element name + * * `A': attribute + * * `C`: class + * * `M`: comment + * @returns {boolean} true if directive was added. + */ + function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, + endAttrName) { + if (name === ignoreDirective) return null; + var match = null; + if (hasDirectives.hasOwnProperty(name)) { + for(var directive, directives = $injector.get(name + Suffix), + i = 0, ii = directives.length; i directive.priority) && + directive.restrict.indexOf(location) != -1) { + if (startAttrName) { + directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); + } + tDirectives.push(directive); + match = directive; + } + } catch(e) { $exceptionHandler(e); } + } + } + return match; + } + + + /** + * When the element is replaced with HTML template then the new attributes + * on the template need to be merged with the existing attributes in the DOM. + * The desired effect is to have both of the attributes present. + * + * @param {object} dst destination attributes (original DOM) + * @param {object} src source attributes (from the directive template) + */ + function mergeTemplateAttributes(dst, src) { + var srcAttr = src.$attr, + dstAttr = dst.$attr, + $element = dst.$$element; + + // reapply the old attributes to the new element + forEach(dst, function(value, key) { + if (key.charAt(0) != '$') { + if (src[key] && src[key] !== value) { + value += (key === 'style' ? ';' : ' ') + src[key]; + } + dst.$set(key, value, true, srcAttr[key]); + } + }); + + // copy the new attributes on the old attrs object + forEach(src, function(value, key) { + if (key == 'class') { + safeAddClass($element, value); + dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; + } else if (key == 'style') { + $element.attr('style', $element.attr('style') + ';' + value); + dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value; + // `dst` will never contain hasOwnProperty as DOM parser won't let it. + // You will get an "InvalidCharacterError: DOM Exception 5" error if you + // have an attribute like "has-own-property" or "data-has-own-property", etc. + } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { + dst[key] = value; + dstAttr[key] = srcAttr[key]; + } + }); + } + + + function compileTemplateUrl(directives, $compileNode, tAttrs, + $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { + var linkQueue = [], + afterTemplateNodeLinkFn, + afterTemplateChildLinkFn, + beforeTemplateCompileNode = $compileNode[0], + origAsyncDirective = directives.shift(), + // The fact that we have to copy and patch the directive seems wrong! + derivedSyncDirective = extend({}, origAsyncDirective, { + templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective + }), + templateUrl = (isFunction(origAsyncDirective.templateUrl)) + ? origAsyncDirective.templateUrl($compileNode, tAttrs) + : origAsyncDirective.templateUrl; + + $compileNode.empty(); + + $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). + success(function(content) { + var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; + + content = denormalizeTemplate(content); + + if (origAsyncDirective.replace) { + if (jqLiteIsTextNode(content)) { + $template = []; + } else { + $template = jqLite(trim(content)); + } + compileNode = $template[0]; + + if ($template.length != 1 || compileNode.nodeType !== 1) { + throw $compileMinErr('tplrt', + "Template for directive '{0}' must have exactly one root element. {1}", + origAsyncDirective.name, templateUrl); + } + + tempTemplateAttrs = {$attr: {}}; + replaceWith($rootElement, $compileNode, compileNode); + var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); + + if (isObject(origAsyncDirective.scope)) { + markDirectivesAsIsolate(templateDirectives); + } + directives = templateDirectives.concat(directives); + mergeTemplateAttributes(tAttrs, tempTemplateAttrs); + } else { + compileNode = beforeTemplateCompileNode; + $compileNode.html(content); + } + + directives.unshift(derivedSyncDirective); + + afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, + childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, + previousCompileContext); + forEach($rootElement, function(node, i) { + if (node == compileNode) { + $rootElement[i] = $compileNode[0]; + } + }); + afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); + + while(linkQueue.length) { + var scope = linkQueue.shift(), + beforeTemplateLinkNode = linkQueue.shift(), + linkRootElement = linkQueue.shift(), + boundTranscludeFn = linkQueue.shift(), + linkNode = $compileNode[0]; + + if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { + var oldClasses = beforeTemplateLinkNode.className; + + if (!(previousCompileContext.hasElementTranscludeDirective && + origAsyncDirective.replace)) { + // it was cloned therefore we have to clone as well. + linkNode = jqLiteClone(compileNode); + } + + replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); + + // Copy in CSS classes from original node + safeAddClass(jqLite(linkNode), oldClasses); + } + if (afterTemplateNodeLinkFn.transcludeOnThisElement) { + childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); + } else { + childBoundTranscludeFn = boundTranscludeFn; + } + afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, + childBoundTranscludeFn); + } + linkQueue = null; + }). + error(function(response, code, headers, config) { + throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url); + }); + + return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { + var childBoundTranscludeFn = boundTranscludeFn; + if (linkQueue) { + linkQueue.push(scope); + linkQueue.push(node); + linkQueue.push(rootElement); + linkQueue.push(childBoundTranscludeFn); + } else { + if (afterTemplateNodeLinkFn.transcludeOnThisElement) { + childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); + } + afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn); + } + }; + } + + + /** + * Sorting function for bound directives. + */ + function byPriority(a, b) { + var diff = b.priority - a.priority; + if (diff !== 0) return diff; + if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; + return a.index - b.index; + } + + + function assertNoDuplicate(what, previousDirective, directive, element) { + if (previousDirective) { + throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', + previousDirective.name, directive.name, what, startingTag(element)); + } + } + + + function addTextInterpolateDirective(directives, text) { + var interpolateFn = $interpolate(text, true); + if (interpolateFn) { + directives.push({ + priority: 0, + compile: function textInterpolateCompileFn(templateNode) { + // when transcluding a template that has bindings in the root + // then we don't have a parent and should do this in the linkFn + var parent = templateNode.parent(), hasCompileParent = parent.length; + if (hasCompileParent) safeAddClass(templateNode.parent(), 'ng-binding'); + + return function textInterpolateLinkFn(scope, node) { + var parent = node.parent(), + bindings = parent.data('$binding') || []; + bindings.push(interpolateFn); + parent.data('$binding', bindings); + if (!hasCompileParent) safeAddClass(parent, 'ng-binding'); + scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { + node[0].nodeValue = value; + }); + }; + } + }); + } + } + + + function getTrustedContext(node, attrNormalizedName) { + if (attrNormalizedName == "srcdoc") { + return $sce.HTML; + } + var tag = nodeName_(node); + // maction[xlink:href] can source SVG. It's not limited to . + if (attrNormalizedName == "xlinkHref" || + (tag == "FORM" && attrNormalizedName == "action") || + (tag != "IMG" && (attrNormalizedName == "src" || + attrNormalizedName == "ngSrc"))) { + return $sce.RESOURCE_URL; + } + } + + + function addAttrInterpolateDirective(node, directives, value, name) { + var interpolateFn = $interpolate(value, true); + + // no interpolation found -> ignore + if (!interpolateFn) return; + + + if (name === "multiple" && nodeName_(node) === "SELECT") { + throw $compileMinErr("selmulti", + "Binding to the 'multiple' attribute is not supported. Element: {0}", + startingTag(node)); + } + + directives.push({ + priority: 100, + compile: function() { + return { + pre: function attrInterpolatePreLinkFn(scope, element, attr) { + var $$observers = (attr.$$observers || (attr.$$observers = {})); + + if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { + throw $compileMinErr('nodomevents', + "Interpolations for HTML DOM event attributes are disallowed. Please use the " + + "ng- versions (such as ng-click instead of onclick) instead."); + } + + // we need to interpolate again, in case the attribute value has been updated + // (e.g. by another directive's compile function) + interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name)); + + // if attribute was updated so that there is no interpolation going on we don't want to + // register any observers + if (!interpolateFn) return; + + // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the + // actual attr value + attr[name] = interpolateFn(scope); + ($$observers[name] || ($$observers[name] = [])).$$inter = true; + (attr.$$observers && attr.$$observers[name].$$scope || scope). + $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { + //special case for class attribute addition + removal + //so that class changes can tap into the animation + //hooks provided by the $animate service. Be sure to + //skip animations when the first digest occurs (when + //both the new and the old values are the same) since + //the CSS classes are the non-interpolated values + if(name === 'class' && newValue != oldValue) { + attr.$updateClass(newValue, oldValue); + } else { + attr.$set(name, newValue); + } + }); + } + }; + } + }); + } + + + /** + * This is a special jqLite.replaceWith, which can replace items which + * have no parents, provided that the containing jqLite collection is provided. + * + * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes + * in the root of the tree. + * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep + * the shell, but replace its DOM node reference. + * @param {Node} newNode The new DOM node. + */ + function replaceWith($rootElement, elementsToRemove, newNode) { + var firstElementToRemove = elementsToRemove[0], + removeCount = elementsToRemove.length, + parent = firstElementToRemove.parentNode, + i, ii; + + if ($rootElement) { + for(i = 0, ii = $rootElement.length; i < ii; i++) { + if ($rootElement[i] == firstElementToRemove) { + $rootElement[i++] = newNode; + for (var j = i, j2 = j + removeCount - 1, + jj = $rootElement.length; + j < jj; j++, j2++) { + if (j2 < jj) { + $rootElement[j] = $rootElement[j2]; + } else { + delete $rootElement[j]; + } + } + $rootElement.length -= removeCount - 1; + break; + } + } + } + + if (parent) { + parent.replaceChild(newNode, firstElementToRemove); + } + var fragment = document.createDocumentFragment(); + fragment.appendChild(firstElementToRemove); + newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]; + for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { + var element = elementsToRemove[k]; + jqLite(element).remove(); // must do this way to clean up expando + fragment.appendChild(element); + delete elementsToRemove[k]; + } + + elementsToRemove[0] = newNode; + elementsToRemove.length = 1; + } + + + function cloneAndAnnotateFn(fn, annotation) { + return extend(function() { return fn.apply(null, arguments); }, fn, annotation); + } + }]; +} + +var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; +/** + * Converts all accepted directives format into proper directive name. + * @param name Name to normalize + */ +function directiveNormalize(name) { + return camelCase(name.replace(PREFIX_REGEXP, '')); +} + +/** + * @ngdoc type + * @name $compile.directive.Attributes + * + * @description + * A shared object between directive compile / linking functions which contains normalized DOM + * element attributes. The values reflect current binding state `{{ }}`. The normalization is + * needed since all of these are treated as equivalent in Angular: + * + * ``` + * + * ``` + */ + +/** + * @ngdoc property + * @name $compile.directive.Attributes#$attr + * + * @description + * A map of DOM element attribute names to the normalized name. This is + * needed to do reverse lookup from normalized name back to actual name. + */ + + +/** + * @ngdoc method + * @name $compile.directive.Attributes#$set + * @kind function + * + * @description + * Set DOM element attribute value. + * + * + * @param {string} name Normalized element attribute name of the property to modify. The name is + * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} + * property to the original name. + * @param {string} value Value to set the attribute to. The value can be an interpolated string. + */ + + + +/** + * Closure compiler type information + */ + +function nodesetLinkingFn( + /* angular.Scope */ scope, + /* NodeList */ nodeList, + /* Element */ rootElement, + /* function(Function) */ boundTranscludeFn +){} + +function directiveLinkingFn( + /* nodesetLinkingFn */ nodesetLinkingFn, + /* angular.Scope */ scope, + /* Node */ node, + /* Element */ rootElement, + /* function(Function) */ boundTranscludeFn +){} + +function tokenDifference(str1, str2) { + var values = '', + tokens1 = str1.split(/\s+/), + tokens2 = str2.split(/\s+/); + + outer: + for(var i = 0; i < tokens1.length; i++) { + var token = tokens1[i]; + for(var j = 0; j < tokens2.length; j++) { + if(token == tokens2[j]) continue outer; + } + values += (values.length > 0 ? ' ' : '') + token; + } + return values; +} + +/** + * @ngdoc provider + * @name $controllerProvider + * @description + * The {@link ng.$controller $controller service} is used by Angular to create new + * controllers. + * + * This provider allows controller registration via the + * {@link ng.$controllerProvider#register register} method. + */ +function $ControllerProvider() { + var controllers = {}, + CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; + + + /** + * @ngdoc method + * @name $controllerProvider#register + * @param {string|Object} name Controller name, or an object map of controllers where the keys are + * the names and the values are the constructors. + * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI + * annotations in the array notation). + */ + this.register = function(name, constructor) { + assertNotHasOwnProperty(name, 'controller'); + if (isObject(name)) { + extend(controllers, name); + } else { + controllers[name] = constructor; + } + }; + + + this.$get = ['$injector', '$window', function($injector, $window) { + + /** + * @ngdoc service + * @name $controller + * @requires $injector + * + * @param {Function|string} constructor If called with a function then it's considered to be the + * controller constructor function. Otherwise it's considered to be a string which is used + * to retrieve the controller constructor using the following steps: + * + * * check if a controller with given name is registered via `$controllerProvider` + * * check if evaluating the string on the current scope returns a constructor + * * check `window[constructor]` on the global `window` object + * + * @param {Object} locals Injection locals for Controller. + * @return {Object} Instance of given controller. + * + * @description + * `$controller` service is responsible for instantiating controllers. + * + * It's just a simple call to {@link auto.$injector $injector}, but extracted into + * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). + */ + return function(expression, locals) { + var instance, match, constructor, identifier; + + if(isString(expression)) { + match = expression.match(CNTRL_REG), + constructor = match[1], + identifier = match[3]; + expression = controllers.hasOwnProperty(constructor) + ? controllers[constructor] + : getter(locals.$scope, constructor, true) || getter($window, constructor, true); + + assertArgFn(expression, constructor, true); + } + + instance = $injector.instantiate(expression, locals); + + if (identifier) { + if (!(locals && typeof locals.$scope === 'object')) { + throw minErr('$controller')('noscp', + "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", + constructor || expression.name, identifier); + } + + locals.$scope[identifier] = instance; + } + + return instance; + }; + }]; +} + +/** + * @ngdoc service + * @name $document + * @requires $window + * + * @description + * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. + * + * @example + + +
      +

      $document title:

      +

      window.document title:

      +
      +
      + + angular.module('documentExample', []) + .controller('ExampleController', ['$scope', '$document', function($scope, $document) { + $scope.title = $document[0].title; + $scope.windowTitle = angular.element(window.document)[0].title; + }]); + +
      + */ +function $DocumentProvider(){ + this.$get = ['$window', function(window){ + return jqLite(window.document); + }]; +} + +/** + * @ngdoc service + * @name $exceptionHandler + * @requires ng.$log + * + * @description + * Any uncaught exception in angular expressions is delegated to this service. + * The default implementation simply delegates to `$log.error` which logs it into + * the browser console. + * + * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by + * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. + * + * ## Example: + * + * ```js + * angular.module('exceptionOverride', []).factory('$exceptionHandler', function () { + * return function (exception, cause) { + * exception.message += ' (caused by "' + cause + '")'; + * throw exception; + * }; + * }); + * ``` + * + * This example will override the normal action of `$exceptionHandler`, to make angular + * exceptions fail hard when they happen, instead of just logging to the console. + * + * @param {Error} exception Exception associated with the error. + * @param {string=} cause optional information about the context in which + * the error was thrown. + * + */ +function $ExceptionHandlerProvider() { + this.$get = ['$log', function($log) { + return function(exception, cause) { + $log.error.apply($log, arguments); + }; + }]; +} + +/** + * Parse headers into key value object + * + * @param {string} headers Raw headers as a string + * @returns {Object} Parsed headers as key value object + */ +function parseHeaders(headers) { + var parsed = {}, key, val, i; + + if (!headers) return parsed; + + forEach(headers.split('\n'), function(line) { + i = line.indexOf(':'); + key = lowercase(trim(line.substr(0, i))); + val = trim(line.substr(i + 1)); + + if (key) { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +} + + +/** + * Returns a function that provides access to parsed headers. + * + * Headers are lazy parsed when first requested. + * @see parseHeaders + * + * @param {(string|Object)} headers Headers to provide access to. + * @returns {function(string=)} Returns a getter function which if called with: + * + * - if called with single an argument returns a single header value or null + * - if called with no arguments returns an object containing all headers. + */ +function headersGetter(headers) { + var headersObj = isObject(headers) ? headers : undefined; + + return function(name) { + if (!headersObj) headersObj = parseHeaders(headers); + + if (name) { + return headersObj[lowercase(name)] || null; + } + + return headersObj; + }; +} + + +/** + * Chain all given functions + * + * This function is used for both request and response transforming + * + * @param {*} data Data to transform. + * @param {function(string=)} headers Http headers getter fn. + * @param {(Function|Array.)} fns Function or an array of functions. + * @returns {*} Transformed data. + */ +function transformData(data, headers, fns) { + if (isFunction(fns)) + return fns(data, headers); + + forEach(fns, function(fn) { + data = fn(data, headers); + }); + + return data; +} + + +function isSuccess(status) { + return 200 <= status && status < 300; +} + + +/** + * @ngdoc provider + * @name $httpProvider + * @description + * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service. + * */ +function $HttpProvider() { + var JSON_START = /^\s*(\[|\{[^\{])/, + JSON_END = /[\}\]]\s*$/, + PROTECTION_PREFIX = /^\)\]\}',?\n/, + CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; + + /** + * @ngdoc property + * @name $httpProvider#defaults + * @description + * + * Object containing default values for all {@link ng.$http $http} requests. + * + * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token. + * Defaults value is `'XSRF-TOKEN'`. + * + * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the + * XSRF token. Defaults value is `'X-XSRF-TOKEN'`. + * + * - **`defaults.headers`** - {Object} - Default headers for all $http requests. + * Refer to {@link ng.$http#setting-http-headers $http} for documentation on + * setting default headers. + * - **`defaults.headers.common`** + * - **`defaults.headers.post`** + * - **`defaults.headers.put`** + * - **`defaults.headers.patch`** + **/ + var defaults = this.defaults = { + // transform incoming response data + transformResponse: [function(data) { + if (isString(data)) { + // strip json vulnerability protection prefix + data = data.replace(PROTECTION_PREFIX, ''); + if (JSON_START.test(data) && JSON_END.test(data)) + data = fromJson(data); + } + return data; + }], + + // transform outgoing request data + transformRequest: [function(d) { + return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d; + }], + + // default headers + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + }, + post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), + put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), + patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) + }, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN' + }; + + /** + * @ngdoc property + * @name $httpProvider#interceptors + * @description + * + * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http} + * pre-processing of request or postprocessing of responses. + * + * These service factories are ordered by request, i.e. they are applied in the same order as the + * array, on request, but reverse order, on response. + * + * {@link ng.$http#interceptors Interceptors detailed info} + **/ + var interceptorFactories = this.interceptors = []; + + /** + * For historical reasons, response interceptors are ordered by the order in which + * they are applied to the response. (This is the opposite of interceptorFactories) + */ + var responseInterceptorFactories = this.responseInterceptors = []; + + this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', + function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { + + var defaultCache = $cacheFactory('$http'); + + /** + * Interceptors stored in reverse order. Inner interceptors before outer interceptors. + * The reversal is needed so that we can build up the interception chain around the + * server request. + */ + var reversedInterceptors = []; + + forEach(interceptorFactories, function(interceptorFactory) { + reversedInterceptors.unshift(isString(interceptorFactory) + ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); + }); + + forEach(responseInterceptorFactories, function(interceptorFactory, index) { + var responseFn = isString(interceptorFactory) + ? $injector.get(interceptorFactory) + : $injector.invoke(interceptorFactory); + + /** + * Response interceptors go before "around" interceptors (no real reason, just + * had to pick one.) But they are already reversed, so we can't use unshift, hence + * the splice. + */ + reversedInterceptors.splice(index, 0, { + response: function(response) { + return responseFn($q.when(response)); + }, + responseError: function(response) { + return responseFn($q.reject(response)); + } + }); + }); + + + /** + * @ngdoc service + * @kind function + * @name $http + * @requires ng.$httpBackend + * @requires $cacheFactory + * @requires $rootScope + * @requires $q + * @requires $injector + * + * @description + * The `$http` service is a core Angular service that facilitates communication with the remote + * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) + * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). + * + * For unit testing applications that use `$http` service, see + * {@link ngMock.$httpBackend $httpBackend mock}. + * + * For a higher level of abstraction, please check out the {@link ngResource.$resource + * $resource} service. + * + * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by + * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage + * it is important to familiarize yourself with these APIs and the guarantees they provide. + * + * + * # General usage + * The `$http` service is a function which takes a single argument — a configuration object — + * that is used to generate an HTTP request and returns a {@link ng.$q promise} + * with two $http specific methods: `success` and `error`. + * + * ```js + * $http({method: 'GET', url: '/someUrl'}). + * success(function(data, status, headers, config) { + * // this callback will be called asynchronously + * // when the response is available + * }). + * error(function(data, status, headers, config) { + * // called asynchronously if an error occurs + * // or server returns response with an error status. + * }); + * ``` + * + * Since the returned value of calling the $http function is a `promise`, you can also use + * the `then` method to register callbacks, and these callbacks will receive a single argument – + * an object representing the response. See the API signature and type info below for more + * details. + * + * A response status code between 200 and 299 is considered a success status and + * will result in the success callback being called. Note that if the response is a redirect, + * XMLHttpRequest will transparently follow it, meaning that the error callback will not be + * called for such responses. + * + * # Writing Unit Tests that use $http + * When unit testing (using {@link ngMock ngMock}), it is necessary to call + * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending + * request using trained responses. + * + * ``` + * $httpBackend.expectGET(...); + * $http.get(...); + * $httpBackend.flush(); + * ``` + * + * # Shortcut methods + * + * Shortcut methods are also available. All shortcut methods require passing in the URL, and + * request data must be passed in for POST/PUT requests. + * + * ```js + * $http.get('/someUrl').success(successCallback); + * $http.post('/someUrl', data).success(successCallback); + * ``` + * + * Complete list of shortcut methods: + * + * - {@link ng.$http#get $http.get} + * - {@link ng.$http#head $http.head} + * - {@link ng.$http#post $http.post} + * - {@link ng.$http#put $http.put} + * - {@link ng.$http#delete $http.delete} + * - {@link ng.$http#jsonp $http.jsonp} + * - {@link ng.$http#patch $http.patch} + * + * + * # Setting HTTP Headers + * + * The $http service will automatically add certain HTTP headers to all requests. These defaults + * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration + * object, which currently contains this default configuration: + * + * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): + * - `Accept: application/json, text/plain, * / *` + * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) + * - `Content-Type: application/json` + * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) + * - `Content-Type: application/json` + * + * To add or overwrite these defaults, simply add or remove a property from these configuration + * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object + * with the lowercased HTTP method name as the key, e.g. + * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. + * + * The defaults can also be set at runtime via the `$http.defaults` object in the same + * fashion. For example: + * + * ``` + * module.run(function($http) { + * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' + * }); + * ``` + * + * In addition, you can supply a `headers` property in the config object passed when + * calling `$http(config)`, which overrides the defaults without changing them globally. + * + * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis, + * Use the `headers` property, setting the desired header to `undefined`. For example: + * + * ```js + * var req = { + * method: 'POST', + * url: 'http://example.com', + * headers: { + * 'Content-Type': undefined + * }, + * data: { test: 'test' }, + * } + * + * $http(req).success(function(){...}).error(function(){...}); + * ``` + * + * # Transforming Requests and Responses + * + * Both requests and responses can be transformed using transform functions. By default, Angular + * applies these transformations: + * + * Request transformations: + * + * - If the `data` property of the request configuration object contains an object, serialize it + * into JSON format. + * + * Response transformations: + * + * - If XSRF prefix is detected, strip it (see Security Considerations section below). + * - If JSON response is detected, deserialize it using a JSON parser. + * + * To globally augment or override the default transforms, modify the + * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse` + * properties. These properties are by default an array of transform functions, which allows you + * to `push` or `unshift` a new transformation function into the transformation chain. You can + * also decide to completely override any default transformations by assigning your + * transformation functions to these properties directly without the array wrapper. These defaults + * are again available on the $http factory at run-time, which may be useful if you have run-time + * services you wish to be involved in your transformations. + * + * Similarly, to locally override the request/response transforms, augment the + * `transformRequest` and/or `transformResponse` properties of the configuration object passed + * into `$http`. + * + * + * # Caching + * + * To enable caching, set the request configuration `cache` property to `true` (to use default + * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}). + * When the cache is enabled, `$http` stores the response from the server in the specified + * cache. The next time the same request is made, the response is served from the cache without + * sending a request to the server. + * + * Note that even if the response is served from cache, delivery of the data is asynchronous in + * the same way that real requests are. + * + * If there are multiple GET requests for the same URL that should be cached using the same + * cache, but the cache is not populated yet, only one request to the server will be made and + * the remaining requests will be fulfilled using the response from the first request. + * + * You can change the default cache to a new object (built with + * {@link ng.$cacheFactory `$cacheFactory`}) by updating the + * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set + * their `cache` property to `true` will now use this cache object. + * + * If you set the default cache to `false` then only requests that specify their own custom + * cache object will be cached. + * + * # Interceptors + * + * Before you start creating interceptors, be sure to understand the + * {@link ng.$q $q and deferred/promise APIs}. + * + * For purposes of global error handling, authentication, or any kind of synchronous or + * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be + * able to intercept requests before they are handed to the server and + * responses before they are handed over to the application code that + * initiated these requests. The interceptors leverage the {@link ng.$q + * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. + * + * The interceptors are service factories that are registered with the `$httpProvider` by + * adding them to the `$httpProvider.interceptors` array. The factory is called and + * injected with dependencies (if specified) and returns the interceptor. + * + * There are two kinds of interceptors (and two kinds of rejection interceptors): + * + * * `request`: interceptors get called with a http `config` object. The function is free to + * modify the `config` object or create a new one. The function needs to return the `config` + * object directly, or a promise containing the `config` or a new `config` object. + * * `requestError`: interceptor gets called when a previous interceptor threw an error or + * resolved with a rejection. + * * `response`: interceptors get called with http `response` object. The function is free to + * modify the `response` object or create a new one. The function needs to return the `response` + * object directly, or as a promise containing the `response` or a new `response` object. + * * `responseError`: interceptor gets called when a previous interceptor threw an error or + * resolved with a rejection. + * + * + * ```js + * // register the interceptor as a service + * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { + * return { + * // optional method + * 'request': function(config) { + * // do something on success + * return config; + * }, + * + * // optional method + * 'requestError': function(rejection) { + * // do something on error + * if (canRecover(rejection)) { + * return responseOrNewPromise + * } + * return $q.reject(rejection); + * }, + * + * + * + * // optional method + * 'response': function(response) { + * // do something on success + * return response; + * }, + * + * // optional method + * 'responseError': function(rejection) { + * // do something on error + * if (canRecover(rejection)) { + * return responseOrNewPromise + * } + * return $q.reject(rejection); + * } + * }; + * }); + * + * $httpProvider.interceptors.push('myHttpInterceptor'); + * + * + * // alternatively, register the interceptor via an anonymous factory + * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { + * return { + * 'request': function(config) { + * // same as above + * }, + * + * 'response': function(response) { + * // same as above + * } + * }; + * }); + * ``` + * + * # Response interceptors (DEPRECATED) + * + * Before you start creating interceptors, be sure to understand the + * {@link ng.$q $q and deferred/promise APIs}. + * + * For purposes of global error handling, authentication or any kind of synchronous or + * asynchronous preprocessing of received responses, it is desirable to be able to intercept + * responses for http requests before they are handed over to the application code that + * initiated these requests. The response interceptors leverage the {@link ng.$q + * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. + * + * The interceptors are service factories that are registered with the $httpProvider by + * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and + * injected with dependencies (if specified) and returns the interceptor — a function that + * takes a {@link ng.$q promise} and returns the original or a new promise. + * + * ```js + * // register the interceptor as a service + * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { + * return function(promise) { + * return promise.then(function(response) { + * // do something on success + * return response; + * }, function(response) { + * // do something on error + * if (canRecover(response)) { + * return responseOrNewPromise + * } + * return $q.reject(response); + * }); + * } + * }); + * + * $httpProvider.responseInterceptors.push('myHttpInterceptor'); + * + * + * // register the interceptor via an anonymous factory + * $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) { + * return function(promise) { + * // same as above + * } + * }); + * ``` + * + * + * # Security Considerations + * + * When designing web applications, consider security threats from: + * + * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) + * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) + * + * Both server and the client must cooperate in order to eliminate these threats. Angular comes + * pre-configured with strategies that address these issues, but for this to work backend server + * cooperation is required. + * + * ## JSON Vulnerability Protection + * + * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) + * allows third party website to turn your JSON resource URL into + * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To + * counter this your server can prefix all JSON requests with following string `")]}',\n"`. + * Angular will automatically strip the prefix before processing it as JSON. + * + * For example if your server needs to return: + * ```js + * ['one','two'] + * ``` + * + * which is vulnerable to attack, your server can return: + * ```js + * )]}', + * ['one','two'] + * ``` + * + * Angular will strip the prefix, before processing the JSON. + * + * + * ## Cross Site Request Forgery (XSRF) Protection + * + * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which + * an unauthorized site can gain your user's private data. Angular provides a mechanism + * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie + * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only + * JavaScript that runs on your domain could read the cookie, your server can be assured that + * the XHR came from JavaScript running on your domain. The header will not be set for + * cross-domain requests. + * + * To take advantage of this, your server needs to set a token in a JavaScript readable session + * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the + * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure + * that only JavaScript running on your domain could have sent the request. The token must be + * unique for each user and must be verifiable by the server (to prevent the JavaScript from + * making up its own tokens). We recommend that the token is a digest of your site's + * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) + * for added security. + * + * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName + * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, + * or the per-request config object. + * + * + * @param {object} config Object describing the request to be made and how it should be + * processed. The object has following properties: + * + * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) + * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. + * - **params** – `{Object.}` – Map of strings or objects which will be turned + * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be + * JSONified. + * - **data** – `{string|Object}` – Data to be sent as the request message data. + * - **headers** – `{Object}` – Map of strings or functions which return strings representing + * HTTP headers to send to the server. If the return value of a function is null, the + * header will not be sent. + * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. + * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. + * - **transformRequest** – + * `{function(data, headersGetter)|Array.}` – + * transform function or an array of such functions. The transform function takes the http + * request body and headers and returns its transformed (typically serialized) version. + * - **transformResponse** – + * `{function(data, headersGetter)|Array.}` – + * transform function or an array of such functions. The transform function takes the http + * response body and headers and returns its transformed (typically deserialized) version. + * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the + * GET request, otherwise if a cache instance built with + * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for + * caching. + * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} + * that should abort the request when resolved. + * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the + * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials) + * for more information. + * - **responseType** - `{string}` - see + * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). + * + * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the + * standard `then` method and two http specific methods: `success` and `error`. The `then` + * method takes two arguments a success and an error callback which will be called with a + * response object. The `success` and `error` methods take a single argument - a function that + * will be called when the request succeeds or fails respectively. The arguments passed into + * these functions are destructured representation of the response object passed into the + * `then` method. The response object has these properties: + * + * - **data** – `{string|Object}` – The response body transformed with the transform + * functions. + * - **status** – `{number}` – HTTP status code of the response. + * - **headers** – `{function([headerName])}` – Header getter function. + * - **config** – `{Object}` – The configuration object that was used to generate the request. + * - **statusText** – `{string}` – HTTP status text of the response. + * + * @property {Array.} pendingRequests Array of config objects for currently pending + * requests. This is primarily meant to be used for debugging purposes. + * + * + * @example + + +
      + + +
      + + + +
      http status code: {{status}}
      +
      http response data: {{data}}
      +
      +
      + + angular.module('httpExample', []) + .controller('FetchController', ['$scope', '$http', '$templateCache', + function($scope, $http, $templateCache) { + $scope.method = 'GET'; + $scope.url = 'http-hello.html'; + + $scope.fetch = function() { + $scope.code = null; + $scope.response = null; + + $http({method: $scope.method, url: $scope.url, cache: $templateCache}). + success(function(data, status) { + $scope.status = status; + $scope.data = data; + }). + error(function(data, status) { + $scope.data = data || "Request failed"; + $scope.status = status; + }); + }; + + $scope.updateModel = function(method, url) { + $scope.method = method; + $scope.url = url; + }; + }]); + + + Hello, $http! + + + var status = element(by.binding('status')); + var data = element(by.binding('data')); + var fetchBtn = element(by.id('fetchbtn')); + var sampleGetBtn = element(by.id('samplegetbtn')); + var sampleJsonpBtn = element(by.id('samplejsonpbtn')); + var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); + + it('should make an xhr GET request', function() { + sampleGetBtn.click(); + fetchBtn.click(); + expect(status.getText()).toMatch('200'); + expect(data.getText()).toMatch(/Hello, \$http!/); + }); + +// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185 +// it('should make a JSONP request to angularjs.org', function() { +// sampleJsonpBtn.click(); +// fetchBtn.click(); +// expect(status.getText()).toMatch('200'); +// expect(data.getText()).toMatch(/Super Hero!/); +// }); + + it('should make JSONP request to invalid URL and invoke the error handler', + function() { + invalidJsonpBtn.click(); + fetchBtn.click(); + expect(status.getText()).toMatch('0'); + expect(data.getText()).toMatch('Request failed'); + }); + +
      + */ + function $http(requestConfig) { + var config = { + method: 'get', + transformRequest: defaults.transformRequest, + transformResponse: defaults.transformResponse + }; + var headers = mergeHeaders(requestConfig); + + extend(config, requestConfig); + config.headers = headers; + config.method = uppercase(config.method); + + var serverRequest = function(config) { + headers = config.headers; + var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); + + // strip content-type if data is undefined + if (isUndefined(reqData)) { + forEach(headers, function(value, header) { + if (lowercase(header) === 'content-type') { + delete headers[header]; + } + }); + } + + if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { + config.withCredentials = defaults.withCredentials; + } + + // send request + return sendReq(config, reqData, headers).then(transformResponse, transformResponse); + }; + + var chain = [serverRequest, undefined]; + var promise = $q.when(config); + + // apply interceptors + forEach(reversedInterceptors, function(interceptor) { + if (interceptor.request || interceptor.requestError) { + chain.unshift(interceptor.request, interceptor.requestError); + } + if (interceptor.response || interceptor.responseError) { + chain.push(interceptor.response, interceptor.responseError); + } + }); + + while(chain.length) { + var thenFn = chain.shift(); + var rejectFn = chain.shift(); + + promise = promise.then(thenFn, rejectFn); + } + + promise.success = function(fn) { + promise.then(function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; + + promise.error = function(fn) { + promise.then(null, function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; + + return promise; + + function transformResponse(response) { + // make a copy since the response must be cacheable + var resp = extend({}, response, { + data: transformData(response.data, response.headers, config.transformResponse) + }); + return (isSuccess(response.status)) + ? resp + : $q.reject(resp); + } + + function mergeHeaders(config) { + var defHeaders = defaults.headers, + reqHeaders = extend({}, config.headers), + defHeaderName, lowercaseDefHeaderName, reqHeaderName; + + defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); + + // using for-in instead of forEach to avoid unecessary iteration after header has been found + defaultHeadersIteration: + for (defHeaderName in defHeaders) { + lowercaseDefHeaderName = lowercase(defHeaderName); + + for (reqHeaderName in reqHeaders) { + if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { + continue defaultHeadersIteration; + } + } + + reqHeaders[defHeaderName] = defHeaders[defHeaderName]; + } + + // execute if header value is a function for merged headers + execHeaders(reqHeaders); + return reqHeaders; + + function execHeaders(headers) { + var headerContent; + + forEach(headers, function(headerFn, header) { + if (isFunction(headerFn)) { + headerContent = headerFn(); + if (headerContent != null) { + headers[header] = headerContent; + } else { + delete headers[header]; + } + } + }); + } + } + } + + $http.pendingRequests = []; + + /** + * @ngdoc method + * @name $http#get + * + * @description + * Shortcut method to perform `GET` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name $http#delete + * + * @description + * Shortcut method to perform `DELETE` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name $http#head + * + * @description + * Shortcut method to perform `HEAD` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name $http#jsonp + * + * @description + * Shortcut method to perform `JSONP` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request. + * The name of the callback should be the string `JSON_CALLBACK`. + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + createShortMethods('get', 'delete', 'head', 'jsonp'); + + /** + * @ngdoc method + * @name $http#post + * + * @description + * Shortcut method to perform `POST` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {*} data Request content + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name $http#put + * + * @description + * Shortcut method to perform `PUT` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {*} data Request content + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name $http#patch + * + * @description + * Shortcut method to perform `PATCH` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {*} data Request content + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + createShortMethodsWithData('post', 'put', 'patch'); + + /** + * @ngdoc property + * @name $http#defaults + * + * @description + * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of + * default headers, withCredentials as well as request and response transformations. + * + * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. + */ + $http.defaults = defaults; + + + return $http; + + + function createShortMethods(names) { + forEach(arguments, function(name) { + $http[name] = function(url, config) { + return $http(extend(config || {}, { + method: name, + url: url + })); + }; + }); + } + + + function createShortMethodsWithData(name) { + forEach(arguments, function(name) { + $http[name] = function(url, data, config) { + return $http(extend(config || {}, { + method: name, + url: url, + data: data + })); + }; + }); + } + + + /** + * Makes the request. + * + * !!! ACCESSES CLOSURE VARS: + * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests + */ + function sendReq(config, reqData, reqHeaders) { + var deferred = $q.defer(), + promise = deferred.promise, + cache, + cachedResp, + url = buildUrl(config.url, config.params); + + $http.pendingRequests.push(config); + promise.then(removePendingReq, removePendingReq); + + + if ((config.cache || defaults.cache) && config.cache !== false && + (config.method === 'GET' || config.method === 'JSONP')) { + cache = isObject(config.cache) ? config.cache + : isObject(defaults.cache) ? defaults.cache + : defaultCache; + } + + if (cache) { + cachedResp = cache.get(url); + if (isDefined(cachedResp)) { + if (isPromiseLike(cachedResp)) { + // cached request has already been sent, but there is no response yet + cachedResp.then(removePendingReq, removePendingReq); + return cachedResp; + } else { + // serving from cache + if (isArray(cachedResp)) { + resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]); + } else { + resolvePromise(cachedResp, 200, {}, 'OK'); + } + } + } else { + // put the promise for the non-transformed response into cache as a placeholder + cache.put(url, promise); + } + } + + + // if we won't have the response in cache, set the xsrf headers and + // send the request to the backend + if (isUndefined(cachedResp)) { + var xsrfValue = urlIsSameOrigin(config.url) + ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] + : undefined; + if (xsrfValue) { + reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; + } + + $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, + config.withCredentials, config.responseType); + } + + return promise; + + + /** + * Callback registered to $httpBackend(): + * - caches the response if desired + * - resolves the raw $http promise + * - calls $apply + */ + function done(status, response, headersString, statusText) { + if (cache) { + if (isSuccess(status)) { + cache.put(url, [status, response, parseHeaders(headersString), statusText]); + } else { + // remove promise from the cache + cache.remove(url); + } + } + + resolvePromise(response, status, headersString, statusText); + if (!$rootScope.$$phase) $rootScope.$apply(); + } + + + /** + * Resolves the raw $http promise. + */ + function resolvePromise(response, status, headers, statusText) { + // normalize internal statuses to 0 + status = Math.max(status, 0); + + (isSuccess(status) ? deferred.resolve : deferred.reject)({ + data: response, + status: status, + headers: headersGetter(headers), + config: config, + statusText : statusText + }); + } + + + function removePendingReq() { + var idx = indexOf($http.pendingRequests, config); + if (idx !== -1) $http.pendingRequests.splice(idx, 1); + } + } + + + function buildUrl(url, params) { + if (!params) return url; + var parts = []; + forEachSorted(params, function(value, key) { + if (value === null || isUndefined(value)) return; + if (!isArray(value)) value = [value]; + + forEach(value, function(v) { + if (isObject(v)) { + if (isDate(v)){ + v = v.toISOString(); + } else { + v = toJson(v); + } + } + parts.push(encodeUriQuery(key) + '=' + + encodeUriQuery(v)); + }); + }); + if(parts.length > 0) { + url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); + } + return url; + } + }]; +} + +function createXhr(method) { + //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest + //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest + //if it is available + if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) || + !window.XMLHttpRequest)) { + return new window.ActiveXObject("Microsoft.XMLHTTP"); + } else if (window.XMLHttpRequest) { + return new window.XMLHttpRequest(); + } + + throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); +} + +/** + * @ngdoc service + * @name $httpBackend + * @requires $window + * @requires $document + * + * @description + * HTTP backend used by the {@link ng.$http service} that delegates to + * XMLHttpRequest object or JSONP and deals with browser incompatibilities. + * + * You should never need to use this service directly, instead use the higher-level abstractions: + * {@link ng.$http $http} or {@link ngResource.$resource $resource}. + * + * During testing this implementation is swapped with {@link ngMock.$httpBackend mock + * $httpBackend} which can be trained with responses. + */ +function $HttpBackendProvider() { + this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { + return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); + }]; +} + +function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { + var ABORTED = -1; + + // TODO(vojta): fix the signature + return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { + var status; + $browser.$$incOutstandingRequestCount(); + url = url || $browser.url(); + + if (lowercase(method) == 'jsonp') { + var callbackId = '_' + (callbacks.counter++).toString(36); + callbacks[callbackId] = function(data) { + callbacks[callbackId].data = data; + callbacks[callbackId].called = true; + }; + + var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), + callbackId, function(status, text) { + completeRequest(callback, status, callbacks[callbackId].data, "", text); + callbacks[callbackId] = noop; + }); + } else { + + var xhr = createXhr(method); + + xhr.open(method, url, true); + forEach(headers, function(value, key) { + if (isDefined(value)) { + xhr.setRequestHeader(key, value); + } + }); + + // In IE6 and 7, this might be called synchronously when xhr.send below is called and the + // response is in the cache. the promise api will ensure that to the app code the api is + // always async + xhr.onreadystatechange = function() { + // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by + // xhrs that are resolved while the app is in the background (see #5426). + // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before + // continuing + // + // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and + // Safari respectively. + if (xhr && xhr.readyState == 4) { + var responseHeaders = null, + response = null, + statusText = ''; + + if(status !== ABORTED) { + responseHeaders = xhr.getAllResponseHeaders(); + + // responseText is the old-school way of retrieving response (supported by IE8 & 9) + // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) + response = ('response' in xhr) ? xhr.response : xhr.responseText; + } + + // Accessing statusText on an aborted xhr object will + // throw an 'c00c023f error' in IE9 and lower, don't touch it. + if (!(status === ABORTED && msie < 10)) { + statusText = xhr.statusText; + } + + completeRequest(callback, + status || xhr.status, + response, + responseHeaders, + statusText); + } + }; + + if (withCredentials) { + xhr.withCredentials = true; + } + + if (responseType) { + try { + xhr.responseType = responseType; + } catch (e) { + // WebKit added support for the json responseType value on 09/03/2013 + // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are + // known to throw when setting the value "json" as the response type. Other older + // browsers implementing the responseType + // + // The json response type can be ignored if not supported, because JSON payloads are + // parsed on the client-side regardless. + if (responseType !== 'json') { + throw e; + } + } + } + + xhr.send(post || null); + } + + if (timeout > 0) { + var timeoutId = $browserDefer(timeoutRequest, timeout); + } else if (isPromiseLike(timeout)) { + timeout.then(timeoutRequest); + } + + + function timeoutRequest() { + status = ABORTED; + jsonpDone && jsonpDone(); + xhr && xhr.abort(); + } + + function completeRequest(callback, status, response, headersString, statusText) { + // cancel timeout and subsequent timeout promise resolution + timeoutId && $browserDefer.cancel(timeoutId); + jsonpDone = xhr = null; + + // fix status code when it is 0 (0 status is undocumented). + // Occurs when accessing file resources or on Android 4.1 stock browser + // while retrieving files from application cache. + if (status === 0) { + status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; + } + + // normalize IE bug (http://bugs.jquery.com/ticket/1450) + status = status === 1223 ? 204 : status; + statusText = statusText || ''; + + callback(status, response, headersString, statusText); + $browser.$$completeOutstandingRequest(noop); + } + }; + + function jsonpReq(url, callbackId, done) { + // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: + // - fetches local scripts via XHR and evals them + // - adds and immediately removes script elements from the document + var script = rawDocument.createElement('script'), callback = null; + script.type = "text/javascript"; + script.src = url; + script.async = true; + + callback = function(event) { + removeEventListenerFn(script, "load", callback); + removeEventListenerFn(script, "error", callback); + rawDocument.body.removeChild(script); + script = null; + var status = -1; + var text = "unknown"; + + if (event) { + if (event.type === "load" && !callbacks[callbackId].called) { + event = { type: "error" }; + } + text = event.type; + status = event.type === "error" ? 404 : 200; + } + + if (done) { + done(status, text); + } + }; + + addEventListenerFn(script, "load", callback); + addEventListenerFn(script, "error", callback); + + if (msie <= 8) { + script.onreadystatechange = function() { + if (isString(script.readyState) && /loaded|complete/.test(script.readyState)) { + script.onreadystatechange = null; + callback({ + type: 'load' + }); + } + }; + } + + rawDocument.body.appendChild(script); + return callback; + } +} + +var $interpolateMinErr = minErr('$interpolate'); + +/** + * @ngdoc provider + * @name $interpolateProvider + * @kind function + * + * @description + * + * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. + * + * @example + + + +
      + //demo.label// +
      +
      + + it('should interpolate binding with custom symbols', function() { + expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); + }); + +
      + */ +function $InterpolateProvider() { + var startSymbol = '{{'; + var endSymbol = '}}'; + + /** + * @ngdoc method + * @name $interpolateProvider#startSymbol + * @description + * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. + * + * @param {string=} value new value to set the starting symbol to. + * @returns {string|self} Returns the symbol when used as getter and self if used as setter. + */ + this.startSymbol = function(value){ + if (value) { + startSymbol = value; + return this; + } else { + return startSymbol; + } + }; + + /** + * @ngdoc method + * @name $interpolateProvider#endSymbol + * @description + * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. + * + * @param {string=} value new value to set the ending symbol to. + * @returns {string|self} Returns the symbol when used as getter and self if used as setter. + */ + this.endSymbol = function(value){ + if (value) { + endSymbol = value; + return this; + } else { + return endSymbol; + } + }; + + + this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { + var startSymbolLength = startSymbol.length, + endSymbolLength = endSymbol.length; + + /** + * @ngdoc service + * @name $interpolate + * @kind function + * + * @requires $parse + * @requires $sce + * + * @description + * + * Compiles a string with markup into an interpolation function. This service is used by the + * HTML {@link ng.$compile $compile} service for data binding. See + * {@link ng.$interpolateProvider $interpolateProvider} for configuring the + * interpolation markup. + * + * + * ```js + * var $interpolate = ...; // injected + * var exp = $interpolate('Hello {{name | uppercase}}!'); + * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); + * ``` + * + * + * @param {string} text The text with markup to interpolate. + * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have + * embedded expression in order to return an interpolation function. Strings with no + * embedded expression will return null for the interpolation function. + * @param {string=} trustedContext when provided, the returned function passes the interpolated + * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, + * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that + * provides Strict Contextual Escaping for details. + * @returns {function(context)} an interpolation function which is used to compute the + * interpolated string. The function has these parameters: + * + * * `context`: an object against which any expressions embedded in the strings are evaluated + * against. + * + */ + function $interpolate(text, mustHaveExpression, trustedContext) { + var startIndex, + endIndex, + index = 0, + parts = [], + length = text.length, + hasInterpolation = false, + fn, + exp, + concat = []; + + while(index < length) { + if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && + ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { + (index != startIndex) && parts.push(text.substring(index, startIndex)); + parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); + fn.exp = exp; + index = endIndex + endSymbolLength; + hasInterpolation = true; + } else { + // we did not find anything, so we have to add the remainder to the parts array + (index != length) && parts.push(text.substring(index)); + index = length; + } + } + + if (!(length = parts.length)) { + // we added, nothing, must have been an empty string. + parts.push(''); + length = 1; + } + + // Concatenating expressions makes it hard to reason about whether some combination of + // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a + // single expression be used for iframe[src], object[src], etc., we ensure that the value + // that's used is assigned or constructed by some JS code somewhere that is more testable or + // make it obvious that you bound the value to some user controlled value. This helps reduce + // the load when auditing for XSS issues. + if (trustedContext && parts.length > 1) { + throw $interpolateMinErr('noconcat', + "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + + "interpolations that concatenate multiple expressions when a trusted value is " + + "required. See http://docs.angularjs.org/api/ng.$sce", text); + } + + if (!mustHaveExpression || hasInterpolation) { + concat.length = length; + fn = function(context) { + try { + for(var i = 0, ii = length, part; i + * **Note**: Intervals created by this service must be explicitly destroyed when you are finished + * with them. In particular they are not automatically destroyed when a controller's scope or a + * directive's element are destroyed. + * You should take this into consideration and make sure to always cancel the interval at the + * appropriate moment. See the example below for more details on how and when to do this. + * + * + * @param {function()} fn A function that should be called repeatedly. + * @param {number} delay Number of milliseconds between each function call. + * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat + * indefinitely. + * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise + * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. + * @returns {promise} A promise which will be notified on each iteration. + * + * @example + * + * + * + * + *
      + *
      + * Date format:
      + * Current time is: + *
      + * Blood 1 : {{blood_1}} + * Blood 2 : {{blood_2}} + * + * + * + *
      + *
      + * + *
      + *
      + */ + function interval(fn, delay, count, invokeApply) { + var setInterval = $window.setInterval, + clearInterval = $window.clearInterval, + deferred = $q.defer(), + promise = deferred.promise, + iteration = 0, + skipApply = (isDefined(invokeApply) && !invokeApply); + + count = isDefined(count) ? count : 0; + + promise.then(null, null, fn); + + promise.$$intervalId = setInterval(function tick() { + deferred.notify(iteration++); + + if (count > 0 && iteration >= count) { + deferred.resolve(iteration); + clearInterval(promise.$$intervalId); + delete intervals[promise.$$intervalId]; + } + + if (!skipApply) $rootScope.$apply(); + + }, delay); + + intervals[promise.$$intervalId] = deferred; + + return promise; + } + + + /** + * @ngdoc method + * @name $interval#cancel + * + * @description + * Cancels a task associated with the `promise`. + * + * @param {promise} promise returned by the `$interval` function. + * @returns {boolean} Returns `true` if the task was successfully canceled. + */ + interval.cancel = function(promise) { + if (promise && promise.$$intervalId in intervals) { + intervals[promise.$$intervalId].reject('canceled'); + $window.clearInterval(promise.$$intervalId); + delete intervals[promise.$$intervalId]; + return true; + } + return false; + }; + + return interval; + }]; +} + +/** + * @ngdoc service + * @name $locale + * + * @description + * $locale service provides localization rules for various Angular components. As of right now the + * only public api is: + * + * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) + */ +function $LocaleProvider(){ + this.$get = function() { + return { + id: 'en-us', + + NUMBER_FORMATS: { + DECIMAL_SEP: '.', + GROUP_SEP: ',', + PATTERNS: [ + { // Decimal Pattern + minInt: 1, + minFrac: 0, + maxFrac: 3, + posPre: '', + posSuf: '', + negPre: '-', + negSuf: '', + gSize: 3, + lgSize: 3 + },{ //Currency Pattern + minInt: 1, + minFrac: 2, + maxFrac: 2, + posPre: '\u00A4', + posSuf: '', + negPre: '(\u00A4', + negSuf: ')', + gSize: 3, + lgSize: 3 + } + ], + CURRENCY_SYM: '$' + }, + + DATETIME_FORMATS: { + MONTH: + 'January,February,March,April,May,June,July,August,September,October,November,December' + .split(','), + SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), + DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), + SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), + AMPMS: ['AM','PM'], + medium: 'MMM d, y h:mm:ss a', + short: 'M/d/yy h:mm a', + fullDate: 'EEEE, MMMM d, y', + longDate: 'MMMM d, y', + mediumDate: 'MMM d, y', + shortDate: 'M/d/yy', + mediumTime: 'h:mm:ss a', + shortTime: 'h:mm a' + }, + + pluralCat: function(num) { + if (num === 1) { + return 'one'; + } + return 'other'; + } + }; + }; +} + +var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, + DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; +var $locationMinErr = minErr('$location'); + + +/** + * Encode path using encodeUriSegment, ignoring forward slashes + * + * @param {string} path Path to encode + * @returns {string} + */ +function encodePath(path) { + var segments = path.split('/'), + i = segments.length; + + while (i--) { + segments[i] = encodeUriSegment(segments[i]); + } + + return segments.join('/'); +} + +function parseAbsoluteUrl(absoluteUrl, locationObj, appBase) { + var parsedUrl = urlResolve(absoluteUrl, appBase); + + locationObj.$$protocol = parsedUrl.protocol; + locationObj.$$host = parsedUrl.hostname; + locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; +} + + +function parseAppUrl(relativeUrl, locationObj, appBase) { + var prefixed = (relativeUrl.charAt(0) !== '/'); + if (prefixed) { + relativeUrl = '/' + relativeUrl; + } + var match = urlResolve(relativeUrl, appBase); + locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ? + match.pathname.substring(1) : match.pathname); + locationObj.$$search = parseKeyValue(match.search); + locationObj.$$hash = decodeURIComponent(match.hash); + + // make sure path starts with '/'; + if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') { + locationObj.$$path = '/' + locationObj.$$path; + } +} + + +/** + * + * @param {string} begin + * @param {string} whole + * @returns {string} returns text from whole after begin or undefined if it does not begin with + * expected string. + */ +function beginsWith(begin, whole) { + if (whole.indexOf(begin) === 0) { + return whole.substr(begin.length); + } +} + + +function stripHash(url) { + var index = url.indexOf('#'); + return index == -1 ? url : url.substr(0, index); +} + + +function stripFile(url) { + return url.substr(0, stripHash(url).lastIndexOf('/') + 1); +} + +/* return the server only (scheme://host:port) */ +function serverBase(url) { + return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); +} + + +/** + * LocationHtml5Url represents an url + * This object is exposed as $location service when HTML5 mode is enabled and supported + * + * @constructor + * @param {string} appBase application base URL + * @param {string} basePrefix url path prefix + */ +function LocationHtml5Url(appBase, basePrefix) { + this.$$html5 = true; + basePrefix = basePrefix || ''; + var appBaseNoFile = stripFile(appBase); + parseAbsoluteUrl(appBase, this, appBase); + + + /** + * Parse given html5 (regular) url string into properties + * @param {string} newAbsoluteUrl HTML5 url + * @private + */ + this.$$parse = function(url) { + var pathUrl = beginsWith(appBaseNoFile, url); + if (!isString(pathUrl)) { + throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, + appBaseNoFile); + } + + parseAppUrl(pathUrl, this, appBase); + + if (!this.$$path) { + this.$$path = '/'; + } + + this.$$compose(); + }; + + /** + * Compose url and update `absUrl` property + * @private + */ + this.$$compose = function() { + var search = toKeyValue(this.$$search), + hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; + + this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; + this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' + }; + + this.$$parseLinkUrl = function(url, relHref) { + var appUrl, prevAppUrl; + var rewrittenUrl; + + if ( (appUrl = beginsWith(appBase, url)) !== undefined ) { + prevAppUrl = appUrl; + if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) { + rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl); + } else { + rewrittenUrl = appBase + prevAppUrl; + } + } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) { + rewrittenUrl = appBaseNoFile + appUrl; + } else if (appBaseNoFile == url + '/') { + rewrittenUrl = appBaseNoFile; + } + if (rewrittenUrl) { + this.$$parse(rewrittenUrl); + } + return !!rewrittenUrl; + }; +} + + +/** + * LocationHashbangUrl represents url + * This object is exposed as $location service when developer doesn't opt into html5 mode. + * It also serves as the base class for html5 mode fallback on legacy browsers. + * + * @constructor + * @param {string} appBase application base URL + * @param {string} hashPrefix hashbang prefix + */ +function LocationHashbangUrl(appBase, hashPrefix) { + var appBaseNoFile = stripFile(appBase); + + parseAbsoluteUrl(appBase, this, appBase); + + + /** + * Parse given hashbang url into properties + * @param {string} url Hashbang url + * @private + */ + this.$$parse = function(url) { + var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); + var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' + ? beginsWith(hashPrefix, withoutBaseUrl) + : (this.$$html5) + ? withoutBaseUrl + : ''; + + if (!isString(withoutHashUrl)) { + throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url, + hashPrefix); + } + parseAppUrl(withoutHashUrl, this, appBase); + + this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); + + this.$$compose(); + + /* + * In Windows, on an anchor node on documents loaded from + * the filesystem, the browser will return a pathname + * prefixed with the drive name ('/C:/path') when a + * pathname without a drive is set: + * * a.setAttribute('href', '/foo') + * * a.pathname === '/C:/foo' //true + * + * Inside of Angular, we're always using pathnames that + * do not include drive names for routing. + */ + function removeWindowsDriveName (path, url, base) { + /* + Matches paths for file protocol on windows, + such as /C:/foo/bar, and captures only /foo/bar. + */ + var windowsFilePathExp = /^\/[A-Z]:(\/.*)/; + + var firstPathSegmentMatch; + + //Get the relative path from the input URL. + if (url.indexOf(base) === 0) { + url = url.replace(base, ''); + } + + // The input URL intentionally contains a first path segment that ends with a colon. + if (windowsFilePathExp.exec(url)) { + return path; + } + + firstPathSegmentMatch = windowsFilePathExp.exec(path); + return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; + } + }; + + /** + * Compose hashbang url and update `absUrl` property + * @private + */ + this.$$compose = function() { + var search = toKeyValue(this.$$search), + hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; + + this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; + this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); + }; + + this.$$parseLinkUrl = function(url, relHref) { + if(stripHash(appBase) == stripHash(url)) { + this.$$parse(url); + return true; + } + return false; + }; +} + + +/** + * LocationHashbangUrl represents url + * This object is exposed as $location service when html5 history api is enabled but the browser + * does not support it. + * + * @constructor + * @param {string} appBase application base URL + * @param {string} hashPrefix hashbang prefix + */ +function LocationHashbangInHtml5Url(appBase, hashPrefix) { + this.$$html5 = true; + LocationHashbangUrl.apply(this, arguments); + + var appBaseNoFile = stripFile(appBase); + + this.$$parseLinkUrl = function(url, relHref) { + var rewrittenUrl; + var appUrl; + + if ( appBase == stripHash(url) ) { + rewrittenUrl = url; + } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) { + rewrittenUrl = appBase + hashPrefix + appUrl; + } else if ( appBaseNoFile === url + '/') { + rewrittenUrl = appBaseNoFile; + } + if (rewrittenUrl) { + this.$$parse(rewrittenUrl); + } + return !!rewrittenUrl; + }; + + this.$$compose = function() { + var search = toKeyValue(this.$$search), + hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; + + this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; + // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#' + this.$$absUrl = appBase + hashPrefix + this.$$url; + }; + +} + + +LocationHashbangInHtml5Url.prototype = + LocationHashbangUrl.prototype = + LocationHtml5Url.prototype = { + + /** + * Are we in html5 mode? + * @private + */ + $$html5: false, + + /** + * Has any change been replacing ? + * @private + */ + $$replace: false, + + /** + * @ngdoc method + * @name $location#absUrl + * + * @description + * This method is getter only. + * + * Return full url representation with all segments encoded according to rules specified in + * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). + * + * @return {string} full url + */ + absUrl: locationGetter('$$absUrl'), + + /** + * @ngdoc method + * @name $location#url + * + * @description + * This method is getter / setter. + * + * Return url (e.g. `/path?a=b#hash`) when called without any parameter. + * + * Change path, search and hash, when called with parameter and return `$location`. + * + * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) + * @return {string} url + */ + url: function(url) { + if (isUndefined(url)) + return this.$$url; + + var match = PATH_MATCH.exec(url); + if (match[1]) this.path(decodeURIComponent(match[1])); + if (match[2] || match[1]) this.search(match[3] || ''); + this.hash(match[5] || ''); + + return this; + }, + + /** + * @ngdoc method + * @name $location#protocol + * + * @description + * This method is getter only. + * + * Return protocol of current url. + * + * @return {string} protocol of current url + */ + protocol: locationGetter('$$protocol'), + + /** + * @ngdoc method + * @name $location#host + * + * @description + * This method is getter only. + * + * Return host of current url. + * + * @return {string} host of current url. + */ + host: locationGetter('$$host'), + + /** + * @ngdoc method + * @name $location#port + * + * @description + * This method is getter only. + * + * Return port of current url. + * + * @return {Number} port + */ + port: locationGetter('$$port'), + + /** + * @ngdoc method + * @name $location#path + * + * @description + * This method is getter / setter. + * + * Return path of current url when called without any parameter. + * + * Change path when called with parameter and return `$location`. + * + * Note: Path should always begin with forward slash (/), this method will add the forward slash + * if it is missing. + * + * @param {(string|number)=} path New path + * @return {string} path + */ + path: locationGetterSetter('$$path', function(path) { + path = path !== null ? path.toString() : ''; + return path.charAt(0) == '/' ? path : '/' + path; + }), + + /** + * @ngdoc method + * @name $location#search + * + * @description + * This method is getter / setter. + * + * Return search part (as object) of current url when called without any parameter. + * + * Change search part when called with parameter and return `$location`. + * + * + * ```js + * // given url http://example.com/#/some/path?foo=bar&baz=xoxo + * var searchObject = $location.search(); + * // => {foo: 'bar', baz: 'xoxo'} + * + * + * // set foo to 'yipee' + * $location.search('foo', 'yipee'); + * // => $location + * ``` + * + * @param {string|Object.|Object.>} search New search params - string or + * hash object. + * + * When called with a single argument the method acts as a setter, setting the `search` component + * of `$location` to the specified value. + * + * If the argument is a hash object containing an array of values, these values will be encoded + * as duplicate search parameters in the url. + * + * @param {(string|Number|Array|boolean)=} paramValue If `search` is a string or number, then `paramValue` + * will override only a single search property. + * + * If `paramValue` is an array, it will override the property of the `search` component of + * `$location` specified via the first argument. + * + * If `paramValue` is `null`, the property specified via the first argument will be deleted. + * + * If `paramValue` is `true`, the property specified via the first argument will be added with no + * value nor trailing equal sign. + * + * @return {Object} If called with no arguments returns the parsed `search` object. If called with + * one or more arguments returns `$location` object itself. + */ + search: function(search, paramValue) { + switch (arguments.length) { + case 0: + return this.$$search; + case 1: + if (isString(search) || isNumber(search)) { + search = search.toString(); + this.$$search = parseKeyValue(search); + } else if (isObject(search)) { + // remove object undefined or null properties + forEach(search, function(value, key) { + if (value == null) delete search[key]; + }); + + this.$$search = search; + } else { + throw $locationMinErr('isrcharg', + 'The first argument of the `$location#search()` call must be a string or an object.'); + } + break; + default: + if (isUndefined(paramValue) || paramValue === null) { + delete this.$$search[search]; + } else { + this.$$search[search] = paramValue; + } + } + + this.$$compose(); + return this; + }, + + /** + * @ngdoc method + * @name $location#hash + * + * @description + * This method is getter / setter. + * + * Return hash fragment when called without any parameter. + * + * Change hash fragment when called with parameter and return `$location`. + * + * @param {(string|number)=} hash New hash fragment + * @return {string} hash + */ + hash: locationGetterSetter('$$hash', function(hash) { + return hash !== null ? hash.toString() : ''; + }), + + /** + * @ngdoc method + * @name $location#replace + * + * @description + * If called, all changes to $location during current `$digest` will be replacing current history + * record, instead of adding new one. + */ + replace: function() { + this.$$replace = true; + return this; + } +}; + +function locationGetter(property) { + return function() { + return this[property]; + }; +} + + +function locationGetterSetter(property, preprocess) { + return function(value) { + if (isUndefined(value)) + return this[property]; + + this[property] = preprocess(value); + this.$$compose(); + + return this; + }; +} + + +/** + * @ngdoc service + * @name $location + * + * @requires $rootElement + * + * @description + * The $location service parses the URL in the browser address bar (based on the + * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL + * available to your application. Changes to the URL in the address bar are reflected into + * $location service and changes to $location are reflected into the browser address bar. + * + * **The $location service:** + * + * - Exposes the current URL in the browser address bar, so you can + * - Watch and observe the URL. + * - Change the URL. + * - Synchronizes the URL with the browser when the user + * - Changes the address bar. + * - Clicks the back or forward button (or clicks a History link). + * - Clicks on a link. + * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). + * + * For more information see {@link guide/$location Developer Guide: Using $location} + */ + +/** + * @ngdoc provider + * @name $locationProvider + * @description + * Use the `$locationProvider` to configure how the application deep linking paths are stored. + */ +function $LocationProvider(){ + var hashPrefix = '', + html5Mode = false; + + /** + * @ngdoc method + * @name $locationProvider#hashPrefix + * @description + * @param {string=} prefix Prefix for hash part (containing path and search) + * @returns {*} current value if used as getter or itself (chaining) if used as setter + */ + this.hashPrefix = function(prefix) { + if (isDefined(prefix)) { + hashPrefix = prefix; + return this; + } else { + return hashPrefix; + } + }; + + /** + * @ngdoc method + * @name $locationProvider#html5Mode + * @description + * @param {boolean=} mode Use HTML5 strategy if available. + * @returns {*} current value if used as getter or itself (chaining) if used as setter + */ + this.html5Mode = function(mode) { + if (isDefined(mode)) { + html5Mode = mode; + return this; + } else { + return html5Mode; + } + }; + + /** + * @ngdoc event + * @name $location#$locationChangeStart + * @eventType broadcast on root scope + * @description + * Broadcasted before a URL will change. This change can be prevented by calling + * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more + * details about event object. Upon successful change + * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired. + * + * @param {Object} angularEvent Synthetic event object. + * @param {string} newUrl New URL + * @param {string=} oldUrl URL that was before it was changed. + */ + + /** + * @ngdoc event + * @name $location#$locationChangeSuccess + * @eventType broadcast on root scope + * @description + * Broadcasted after a URL was changed. + * + * @param {Object} angularEvent Synthetic event object. + * @param {string} newUrl New URL + * @param {string=} oldUrl URL that was before it was changed. + */ + + this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', + function( $rootScope, $browser, $sniffer, $rootElement) { + var $location, + LocationMode, + baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' + initialUrl = $browser.url(), + appBase; + + if (html5Mode) { + appBase = serverBase(initialUrl) + (baseHref || '/'); + LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; + } else { + appBase = stripHash(initialUrl); + LocationMode = LocationHashbangUrl; + } + $location = new LocationMode(appBase, '#' + hashPrefix); + $location.$$parseLinkUrl(initialUrl, initialUrl); + + var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i; + + $rootElement.on('click', function(event) { + // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) + // currently we open nice url link and redirect then + + if (event.ctrlKey || event.metaKey || event.which == 2) return; + + var elm = jqLite(event.target); + + // traverse the DOM up to find first A tag + while (lowercase(elm[0].nodeName) !== 'a') { + // ignore rewriting if no A tag (reached root element, or no parent - removed from document) + if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; + } + + var absHref = elm.prop('href'); + // get the actual href attribute - see + // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx + var relHref = elm.attr('href') || elm.attr('xlink:href'); + + if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { + // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during + // an animation. + absHref = urlResolve(absHref.animVal).href; + } + + // Ignore when url is started with javascript: or mailto: + if (IGNORE_URI_REGEXP.test(absHref)) return; + + if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) { + if ($location.$$parseLinkUrl(absHref, relHref)) { + // We do a preventDefault for all urls that are part of the angular application, + // in html5mode and also without, so that we are able to abort navigation without + // getting double entries in the location history. + event.preventDefault(); + // update location manually + if ($location.absUrl() != $browser.url()) { + $rootScope.$apply(); + // hack to work around FF6 bug 684208 when scenario runner clicks on links + window.angular['ff-684208-preventDefault'] = true; + } + } + } + }); + + + // rewrite hashbang url <> html5 url + if ($location.absUrl() != initialUrl) { + $browser.url($location.absUrl(), true); + } + + // update $location when $browser url changes + $browser.onUrlChange(function(newUrl) { + if ($location.absUrl() != newUrl) { + $rootScope.$evalAsync(function() { + var oldUrl = $location.absUrl(); + + $location.$$parse(newUrl); + if ($rootScope.$broadcast('$locationChangeStart', newUrl, + oldUrl).defaultPrevented) { + $location.$$parse(oldUrl); + $browser.url(oldUrl); + } else { + afterLocationChange(oldUrl); + } + }); + if (!$rootScope.$$phase) $rootScope.$digest(); + } + }); + + // update browser + var changeCounter = 0; + $rootScope.$watch(function $locationWatch() { + var oldUrl = $browser.url(); + var currentReplace = $location.$$replace; + + if (!changeCounter || oldUrl != $location.absUrl()) { + changeCounter++; + $rootScope.$evalAsync(function() { + if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl). + defaultPrevented) { + $location.$$parse(oldUrl); + } else { + $browser.url($location.absUrl(), currentReplace); + afterLocationChange(oldUrl); + } + }); + } + $location.$$replace = false; + + return changeCounter; + }); + + return $location; + + function afterLocationChange(oldUrl) { + $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl); + } +}]; +} + +/** + * @ngdoc service + * @name $log + * @requires $window + * + * @description + * Simple service for logging. Default implementation safely writes the message + * into the browser's console (if present). + * + * The main purpose of this service is to simplify debugging and troubleshooting. + * + * The default is to log `debug` messages. You can use + * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. + * + * @example + + + angular.module('logExample', []) + .controller('LogController', ['$scope', '$log', function($scope, $log) { + $scope.$log = $log; + $scope.message = 'Hello World!'; + }]); + + +
      +

      Reload this page with open console, enter text and hit the log button...

      + Message: + + + + + +
      +
      +
      + */ + +/** + * @ngdoc provider + * @name $logProvider + * @description + * Use the `$logProvider` to configure how the application logs messages + */ +function $LogProvider(){ + var debug = true, + self = this; + + /** + * @ngdoc method + * @name $logProvider#debugEnabled + * @description + * @param {boolean=} flag enable or disable debug level messages + * @returns {*} current value if used as getter or itself (chaining) if used as setter + */ + this.debugEnabled = function(flag) { + if (isDefined(flag)) { + debug = flag; + return this; + } else { + return debug; + } + }; + + this.$get = ['$window', function($window){ + return { + /** + * @ngdoc method + * @name $log#log + * + * @description + * Write a log message + */ + log: consoleLog('log'), + + /** + * @ngdoc method + * @name $log#info + * + * @description + * Write an information message + */ + info: consoleLog('info'), + + /** + * @ngdoc method + * @name $log#warn + * + * @description + * Write a warning message + */ + warn: consoleLog('warn'), + + /** + * @ngdoc method + * @name $log#error + * + * @description + * Write an error message + */ + error: consoleLog('error'), + + /** + * @ngdoc method + * @name $log#debug + * + * @description + * Write a debug message + */ + debug: (function () { + var fn = consoleLog('debug'); + + return function() { + if (debug) { + fn.apply(self, arguments); + } + }; + }()) + }; + + function formatError(arg) { + if (arg instanceof Error) { + if (arg.stack) { + arg = (arg.message && arg.stack.indexOf(arg.message) === -1) + ? 'Error: ' + arg.message + '\n' + arg.stack + : arg.stack; + } else if (arg.sourceURL) { + arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; + } + } + return arg; + } + + function consoleLog(type) { + var console = $window.console || {}, + logFn = console[type] || console.log || noop, + hasApply = false; + + // Note: reading logFn.apply throws an error in IE11 in IE8 document mode. + // The reason behind this is that console.log has type "object" in IE8... + try { + hasApply = !!logFn.apply; + } catch (e) {} + + if (hasApply) { + return function() { + var args = []; + forEach(arguments, function(arg) { + args.push(formatError(arg)); + }); + return logFn.apply(console, args); + }; + } + + // we are IE which either doesn't have window.console => this is noop and we do nothing, + // or we are IE where console.log doesn't have apply so we log at least first 2 args + return function(arg1, arg2) { + logFn(arg1, arg2 == null ? '' : arg2); + }; + } + }]; +} + +var $parseMinErr = minErr('$parse'); +var promiseWarningCache = {}; +var promiseWarning; + +// Sandboxing Angular Expressions +// ------------------------------ +// Angular expressions are generally considered safe because these expressions only have direct +// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by +// obtaining a reference to native JS functions such as the Function constructor. +// +// As an example, consider the following Angular expression: +// +// {}.toString.constructor('alert("evil JS code")') +// +// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits +// against the expression language, but not to prevent exploits that were enabled by exposing +// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good +// practice and therefore we are not even trying to protect against interaction with an object +// explicitly exposed in this way. +// +// In general, it is not possible to access a Window object from an angular expression unless a +// window or some DOM object that has a reference to window is published onto a Scope. +// Similarly we prevent invocations of function known to be dangerous, as well as assignments to +// native objects. +// +// See https://docs.angularjs.org/guide/security + + +function ensureSafeMemberName(name, fullExpression) { + if (name === "__defineGetter__" || name === "__defineSetter__" + || name === "__lookupGetter__" || name === "__lookupSetter__" + || name === "__proto__") { + throw $parseMinErr('isecfld', + 'Attempting to access a disallowed field in Angular expressions! ' + +'Expression: {0}', fullExpression); + } + return name; +} + +function ensureSafeObject(obj, fullExpression) { + // nifty check if obj is Function that is fast and works across iframes and other contexts + if (obj) { + if (obj.constructor === obj) { + throw $parseMinErr('isecfn', + 'Referencing Function in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } else if (// isWindow(obj) + obj.document && obj.location && obj.alert && obj.setInterval) { + throw $parseMinErr('isecwindow', + 'Referencing the Window in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } else if (// isElement(obj) + obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) { + throw $parseMinErr('isecdom', + 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } else if (// block Object so that we can't get hold of dangerous Object.* methods + obj === Object) { + throw $parseMinErr('isecobj', + 'Referencing Object in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } + } + return obj; +} + +var CALL = Function.prototype.call; +var APPLY = Function.prototype.apply; +var BIND = Function.prototype.bind; + +function ensureSafeFunction(obj, fullExpression) { + if (obj) { + if (obj.constructor === obj) { + throw $parseMinErr('isecfn', + 'Referencing Function in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } else if (obj === CALL || obj === APPLY || (BIND && obj === BIND)) { + throw $parseMinErr('isecff', + 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } + } +} + +var OPERATORS = { + /* jshint bitwise : false */ + 'null':function(){return null;}, + 'true':function(){return true;}, + 'false':function(){return false;}, + undefined:noop, + '+':function(self, locals, a,b){ + a=a(self, locals); b=b(self, locals); + if (isDefined(a)) { + if (isDefined(b)) { + return a + b; + } + return a; + } + return isDefined(b)?b:undefined;}, + '-':function(self, locals, a,b){ + a=a(self, locals); b=b(self, locals); + return (isDefined(a)?a:0)-(isDefined(b)?b:0); + }, + '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);}, + '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);}, + '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);}, + '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);}, + '=':noop, + '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);}, + '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);}, + '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);}, + '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);}, + '<':function(self, locals, a,b){return a(self, locals)':function(self, locals, a,b){return a(self, locals)>b(self, locals);}, + '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);}, + '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);}, + '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);}, + '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);}, + '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);}, +// '|':function(self, locals, a,b){return a|b;}, + '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));}, + '!':function(self, locals, a){return !a(self, locals);} +}; +/* jshint bitwise: true */ +var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; + + +///////////////////////////////////////// + + +/** + * @constructor + */ +var Lexer = function (options) { + this.options = options; +}; + +Lexer.prototype = { + constructor: Lexer, + + lex: function (text) { + this.text = text; + + this.index = 0; + this.ch = undefined; + this.lastCh = ':'; // can start regexp + + this.tokens = []; + + while (this.index < this.text.length) { + this.ch = this.text.charAt(this.index); + if (this.is('"\'')) { + this.readString(this.ch); + } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) { + this.readNumber(); + } else if (this.isIdent(this.ch)) { + this.readIdent(); + } else if (this.is('(){}[].,;:?')) { + this.tokens.push({ + index: this.index, + text: this.ch + }); + this.index++; + } else if (this.isWhitespace(this.ch)) { + this.index++; + continue; + } else { + var ch2 = this.ch + this.peek(); + var ch3 = ch2 + this.peek(2); + var fn = OPERATORS[this.ch]; + var fn2 = OPERATORS[ch2]; + var fn3 = OPERATORS[ch3]; + if (fn3) { + this.tokens.push({index: this.index, text: ch3, fn: fn3}); + this.index += 3; + } else if (fn2) { + this.tokens.push({index: this.index, text: ch2, fn: fn2}); + this.index += 2; + } else if (fn) { + this.tokens.push({ + index: this.index, + text: this.ch, + fn: fn + }); + this.index += 1; + } else { + this.throwError('Unexpected next character ', this.index, this.index + 1); + } + } + this.lastCh = this.ch; + } + return this.tokens; + }, + + is: function(chars) { + return chars.indexOf(this.ch) !== -1; + }, + + was: function(chars) { + return chars.indexOf(this.lastCh) !== -1; + }, + + peek: function(i) { + var num = i || 1; + return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; + }, + + isNumber: function(ch) { + return ('0' <= ch && ch <= '9'); + }, + + isWhitespace: function(ch) { + // IE treats non-breaking space as \u00A0 + return (ch === ' ' || ch === '\r' || ch === '\t' || + ch === '\n' || ch === '\v' || ch === '\u00A0'); + }, + + isIdent: function(ch) { + return ('a' <= ch && ch <= 'z' || + 'A' <= ch && ch <= 'Z' || + '_' === ch || ch === '$'); + }, + + isExpOperator: function(ch) { + return (ch === '-' || ch === '+' || this.isNumber(ch)); + }, + + throwError: function(error, start, end) { + end = end || this.index; + var colStr = (isDefined(start) + ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' + : ' ' + end); + throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', + error, colStr, this.text); + }, + + readNumber: function() { + var number = ''; + var start = this.index; + while (this.index < this.text.length) { + var ch = lowercase(this.text.charAt(this.index)); + if (ch == '.' || this.isNumber(ch)) { + number += ch; + } else { + var peekCh = this.peek(); + if (ch == 'e' && this.isExpOperator(peekCh)) { + number += ch; + } else if (this.isExpOperator(ch) && + peekCh && this.isNumber(peekCh) && + number.charAt(number.length - 1) == 'e') { + number += ch; + } else if (this.isExpOperator(ch) && + (!peekCh || !this.isNumber(peekCh)) && + number.charAt(number.length - 1) == 'e') { + this.throwError('Invalid exponent'); + } else { + break; + } + } + this.index++; + } + number = 1 * number; + this.tokens.push({ + index: start, + text: number, + literal: true, + constant: true, + fn: function() { return number; } + }); + }, + + readIdent: function() { + var parser = this; + + var ident = ''; + var start = this.index; + + var lastDot, peekIndex, methodName, ch; + + while (this.index < this.text.length) { + ch = this.text.charAt(this.index); + if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) { + if (ch === '.') lastDot = this.index; + ident += ch; + } else { + break; + } + this.index++; + } + + //check if this is not a method invocation and if it is back out to last dot + if (lastDot) { + peekIndex = this.index; + while (peekIndex < this.text.length) { + ch = this.text.charAt(peekIndex); + if (ch === '(') { + methodName = ident.substr(lastDot - start + 1); + ident = ident.substr(0, lastDot - start); + this.index = peekIndex; + break; + } + if (this.isWhitespace(ch)) { + peekIndex++; + } else { + break; + } + } + } + + + var token = { + index: start, + text: ident + }; + + // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn + if (OPERATORS.hasOwnProperty(ident)) { + token.fn = OPERATORS[ident]; + token.literal = true; + token.constant = true; + } else { + var getter = getterFn(ident, this.options, this.text); + token.fn = extend(function(self, locals) { + return (getter(self, locals)); + }, { + assign: function(self, value) { + return setter(self, ident, value, parser.text, parser.options); + } + }); + } + + this.tokens.push(token); + + if (methodName) { + this.tokens.push({ + index:lastDot, + text: '.' + }); + this.tokens.push({ + index: lastDot + 1, + text: methodName + }); + } + }, + + readString: function(quote) { + var start = this.index; + this.index++; + var string = ''; + var rawString = quote; + var escape = false; + while (this.index < this.text.length) { + var ch = this.text.charAt(this.index); + rawString += ch; + if (escape) { + if (ch === 'u') { + var hex = this.text.substring(this.index + 1, this.index + 5); + if (!hex.match(/[\da-f]{4}/i)) + this.throwError('Invalid unicode escape [\\u' + hex + ']'); + this.index += 4; + string += String.fromCharCode(parseInt(hex, 16)); + } else { + var rep = ESCAPE[ch]; + string = string + (rep || ch); + } + escape = false; + } else if (ch === '\\') { + escape = true; + } else if (ch === quote) { + this.index++; + this.tokens.push({ + index: start, + text: rawString, + string: string, + literal: true, + constant: true, + fn: function() { return string; } + }); + return; + } else { + string += ch; + } + this.index++; + } + this.throwError('Unterminated quote', start); + } +}; + + +/** + * @constructor + */ +var Parser = function (lexer, $filter, options) { + this.lexer = lexer; + this.$filter = $filter; + this.options = options; +}; + +Parser.ZERO = extend(function () { + return 0; +}, { + constant: true +}); + +Parser.prototype = { + constructor: Parser, + + parse: function (text) { + this.text = text; + + this.tokens = this.lexer.lex(text); + + var value = this.statements(); + + if (this.tokens.length !== 0) { + this.throwError('is an unexpected token', this.tokens[0]); + } + + value.literal = !!value.literal; + value.constant = !!value.constant; + + return value; + }, + + primary: function () { + var primary; + if (this.expect('(')) { + primary = this.filterChain(); + this.consume(')'); + } else if (this.expect('[')) { + primary = this.arrayDeclaration(); + } else if (this.expect('{')) { + primary = this.object(); + } else { + var token = this.expect(); + primary = token.fn; + if (!primary) { + this.throwError('not a primary expression', token); + } + primary.literal = !!token.literal; + primary.constant = !!token.constant; + } + + var next, context; + while ((next = this.expect('(', '[', '.'))) { + if (next.text === '(') { + primary = this.functionCall(primary, context); + context = null; + } else if (next.text === '[') { + context = primary; + primary = this.objectIndex(primary); + } else if (next.text === '.') { + context = primary; + primary = this.fieldAccess(primary); + } else { + this.throwError('IMPOSSIBLE'); + } + } + return primary; + }, + + throwError: function(msg, token) { + throw $parseMinErr('syntax', + 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', + token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); + }, + + peekToken: function() { + if (this.tokens.length === 0) + throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); + return this.tokens[0]; + }, + + peek: function(e1, e2, e3, e4) { + if (this.tokens.length > 0) { + var token = this.tokens[0]; + var t = token.text; + if (t === e1 || t === e2 || t === e3 || t === e4 || + (!e1 && !e2 && !e3 && !e4)) { + return token; + } + } + return false; + }, + + expect: function(e1, e2, e3, e4){ + var token = this.peek(e1, e2, e3, e4); + if (token) { + this.tokens.shift(); + return token; + } + return false; + }, + + consume: function(e1){ + if (!this.expect(e1)) { + this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); + } + }, + + unaryFn: function(fn, right) { + return extend(function(self, locals) { + return fn(self, locals, right); + }, { + constant:right.constant + }); + }, + + ternaryFn: function(left, middle, right){ + return extend(function(self, locals){ + return left(self, locals) ? middle(self, locals) : right(self, locals); + }, { + constant: left.constant && middle.constant && right.constant + }); + }, + + binaryFn: function(left, fn, right) { + return extend(function(self, locals) { + return fn(self, locals, left, right); + }, { + constant:left.constant && right.constant + }); + }, + + statements: function() { + var statements = []; + while (true) { + if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) + statements.push(this.filterChain()); + if (!this.expect(';')) { + // optimize for the common case where there is only one statement. + // TODO(size): maybe we should not support multiple statements? + return (statements.length === 1) + ? statements[0] + : function(self, locals) { + var value; + for (var i = 0; i < statements.length; i++) { + var statement = statements[i]; + if (statement) { + value = statement(self, locals); + } + } + return value; + }; + } + } + }, + + filterChain: function() { + var left = this.expression(); + var token; + while (true) { + if ((token = this.expect('|'))) { + left = this.binaryFn(left, token.fn, this.filter()); + } else { + return left; + } + } + }, + + filter: function() { + var token = this.expect(); + var fn = this.$filter(token.text); + var argsFn = []; + while (true) { + if ((token = this.expect(':'))) { + argsFn.push(this.expression()); + } else { + var fnInvoke = function(self, locals, input) { + var args = [input]; + for (var i = 0; i < argsFn.length; i++) { + args.push(argsFn[i](self, locals)); + } + return fn.apply(self, args); + }; + return function() { + return fnInvoke; + }; + } + } + }, + + expression: function() { + return this.assignment(); + }, + + assignment: function() { + var left = this.ternary(); + var right; + var token; + if ((token = this.expect('='))) { + if (!left.assign) { + this.throwError('implies assignment but [' + + this.text.substring(0, token.index) + '] can not be assigned to', token); + } + right = this.ternary(); + return function(scope, locals) { + return left.assign(scope, right(scope, locals), locals); + }; + } + return left; + }, + + ternary: function() { + var left = this.logicalOR(); + var middle; + var token; + if ((token = this.expect('?'))) { + middle = this.assignment(); + if ((token = this.expect(':'))) { + return this.ternaryFn(left, middle, this.assignment()); + } else { + this.throwError('expected :', token); + } + } else { + return left; + } + }, + + logicalOR: function() { + var left = this.logicalAND(); + var token; + while (true) { + if ((token = this.expect('||'))) { + left = this.binaryFn(left, token.fn, this.logicalAND()); + } else { + return left; + } + } + }, + + logicalAND: function() { + var left = this.equality(); + var token; + if ((token = this.expect('&&'))) { + left = this.binaryFn(left, token.fn, this.logicalAND()); + } + return left; + }, + + equality: function() { + var left = this.relational(); + var token; + if ((token = this.expect('==','!=','===','!=='))) { + left = this.binaryFn(left, token.fn, this.equality()); + } + return left; + }, + + relational: function() { + var left = this.additive(); + var token; + if ((token = this.expect('<', '>', '<=', '>='))) { + left = this.binaryFn(left, token.fn, this.relational()); + } + return left; + }, + + additive: function() { + var left = this.multiplicative(); + var token; + while ((token = this.expect('+','-'))) { + left = this.binaryFn(left, token.fn, this.multiplicative()); + } + return left; + }, + + multiplicative: function() { + var left = this.unary(); + var token; + while ((token = this.expect('*','/','%'))) { + left = this.binaryFn(left, token.fn, this.unary()); + } + return left; + }, + + unary: function() { + var token; + if (this.expect('+')) { + return this.primary(); + } else if ((token = this.expect('-'))) { + return this.binaryFn(Parser.ZERO, token.fn, this.unary()); + } else if ((token = this.expect('!'))) { + return this.unaryFn(token.fn, this.unary()); + } else { + return this.primary(); + } + }, + + fieldAccess: function(object) { + var parser = this; + var field = this.expect().text; + var getter = getterFn(field, this.options, this.text); + + return extend(function(scope, locals, self) { + return getter(self || object(scope, locals)); + }, { + assign: function(scope, value, locals) { + var o = object(scope, locals); + if (!o) object.assign(scope, o = {}); + return setter(o, field, value, parser.text, parser.options); + } + }); + }, + + objectIndex: function(obj) { + var parser = this; + + var indexFn = this.expression(); + this.consume(']'); + + return extend(function(self, locals) { + var o = obj(self, locals), + i = indexFn(self, locals), + v, p; + + ensureSafeMemberName(i, parser.text); + if (!o) return undefined; + v = ensureSafeObject(o[i], parser.text); + if (v && v.then && parser.options.unwrapPromises) { + p = v; + if (!('$$v' in v)) { + p.$$v = undefined; + p.then(function(val) { p.$$v = val; }); + } + v = v.$$v; + } + return v; + }, { + assign: function(self, value, locals) { + var key = ensureSafeMemberName(indexFn(self, locals), parser.text); + // prevent overwriting of Function.constructor which would break ensureSafeObject check + var o = ensureSafeObject(obj(self, locals), parser.text); + if (!o) obj.assign(self, o = {}); + return o[key] = value; + } + }); + }, + + functionCall: function(fn, contextGetter) { + var argsFn = []; + if (this.peekToken().text !== ')') { + do { + argsFn.push(this.expression()); + } while (this.expect(',')); + } + this.consume(')'); + + var parser = this; + + return function(scope, locals) { + var args = []; + var context = contextGetter ? contextGetter(scope, locals) : scope; + + for (var i = 0; i < argsFn.length; i++) { + args.push(ensureSafeObject(argsFn[i](scope, locals), parser.text)); + } + var fnPtr = fn(scope, locals, context) || noop; + + ensureSafeObject(context, parser.text); + ensureSafeFunction(fnPtr, parser.text); + + // IE doesn't have apply for some native functions + var v = fnPtr.apply + ? fnPtr.apply(context, args) + : fnPtr(args[0], args[1], args[2], args[3], args[4]); + + return ensureSafeObject(v, parser.text); + }; + }, + + // This is used with json array declaration + arrayDeclaration: function () { + var elementFns = []; + var allConstant = true; + if (this.peekToken().text !== ']') { + do { + if (this.peek(']')) { + // Support trailing commas per ES5.1. + break; + } + var elementFn = this.expression(); + elementFns.push(elementFn); + if (!elementFn.constant) { + allConstant = false; + } + } while (this.expect(',')); + } + this.consume(']'); + + return extend(function(self, locals) { + var array = []; + for (var i = 0; i < elementFns.length; i++) { + array.push(elementFns[i](self, locals)); + } + return array; + }, { + literal: true, + constant: allConstant + }); + }, + + object: function () { + var keyValues = []; + var allConstant = true; + if (this.peekToken().text !== '}') { + do { + if (this.peek('}')) { + // Support trailing commas per ES5.1. + break; + } + var token = this.expect(), + key = token.string || token.text; + this.consume(':'); + var value = this.expression(); + keyValues.push({key: key, value: value}); + if (!value.constant) { + allConstant = false; + } + } while (this.expect(',')); + } + this.consume('}'); + + return extend(function(self, locals) { + var object = {}; + for (var i = 0; i < keyValues.length; i++) { + var keyValue = keyValues[i]; + object[keyValue.key] = keyValue.value(self, locals); + } + return object; + }, { + literal: true, + constant: allConstant + }); + } +}; + + +////////////////////////////////////////////////// +// Parser helper functions +////////////////////////////////////////////////// + +function setter(obj, path, setValue, fullExp, options) { + ensureSafeObject(obj, fullExp); + + //needed? + options = options || {}; + + var element = path.split('.'), key; + for (var i = 0; element.length > 1; i++) { + key = ensureSafeMemberName(element.shift(), fullExp); + var propertyObj = ensureSafeObject(obj[key], fullExp); + if (!propertyObj) { + propertyObj = {}; + obj[key] = propertyObj; + } + obj = propertyObj; + if (obj.then && options.unwrapPromises) { + promiseWarning(fullExp); + if (!("$$v" in obj)) { + (function(promise) { + promise.then(function(val) { promise.$$v = val; }); } + )(obj); + } + if (obj.$$v === undefined) { + obj.$$v = {}; + } + obj = obj.$$v; + } + } + key = ensureSafeMemberName(element.shift(), fullExp); + ensureSafeObject(obj[key], fullExp); + obj[key] = setValue; + return setValue; +} + +var getterFnCacheDefault = {}; +var getterFnCacheExpensive = {}; + +function isPossiblyDangerousMemberName(name) { + return name == 'constructor'; +} + +/** + * Implementation of the "Black Hole" variant from: + * - http://jsperf.com/angularjs-parse-getter/4 + * - http://jsperf.com/path-evaluation-simplified/7 + */ +function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) { + ensureSafeMemberName(key0, fullExp); + ensureSafeMemberName(key1, fullExp); + ensureSafeMemberName(key2, fullExp); + ensureSafeMemberName(key3, fullExp); + ensureSafeMemberName(key4, fullExp); + var eso = function(o) { + return ensureSafeObject(o, fullExp); + }; + var expensiveChecks = options.expensiveChecks; + var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity; + var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity; + var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity; + var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity; + var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity; + + return !options.unwrapPromises + ? function cspSafeGetter(scope, locals) { + var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; + + if (pathVal == null) return pathVal; + pathVal = eso0(pathVal[key0]); + + if (!key1) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso1(pathVal[key1]); + + if (!key2) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso2(pathVal[key2]); + + if (!key3) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso3(pathVal[key3]); + + if (!key4) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso4(pathVal[key4]); + + return pathVal; + } + : function cspSafePromiseEnabledGetter(scope, locals) { + var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, + promise; + + if (pathVal == null) return pathVal; + + pathVal = eso0(pathVal[key0]); + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = eso0(val); }); + } + pathVal = eso0(pathVal.$$v); + } + + if (!key1) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso1(pathVal[key1]); + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = eso1(val); }); + } + pathVal = eso1(pathVal.$$v); + } + + if (!key2) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso2(pathVal[key2]); + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = eso2(val); }); + } + pathVal = eso2(pathVal.$$v); + } + + if (!key3) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso3(pathVal[key3]); + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = eso3(val); }); + } + pathVal = eso3(pathVal.$$v); + } + + if (!key4) return pathVal; + if (pathVal == null) return undefined; + pathVal = eso4(pathVal[key4]); + if (pathVal && pathVal.then) { + promiseWarning(fullExp); + if (!("$$v" in pathVal)) { + promise = pathVal; + promise.$$v = undefined; + promise.then(function(val) { promise.$$v = eso4(val); }); + } + pathVal = eso4(pathVal.$$v); + } + return pathVal; + }; +} + +function getterFnWithExtraArgs(fn, fullExpression) { + return function(s, l) { + return fn(s, l, promiseWarning, ensureSafeObject, fullExpression); + }; +} + +function getterFn(path, options, fullExp) { + var expensiveChecks = options.expensiveChecks; + var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault); + // Check whether the cache has this getter already. + // We can use hasOwnProperty directly on the cache because we ensure, + // see below, that the cache never stores a path called 'hasOwnProperty' + if (getterFnCache.hasOwnProperty(path)) { + return getterFnCache[path]; + } + + var pathKeys = path.split('.'), + pathKeysLength = pathKeys.length, + fn; + + // http://jsperf.com/angularjs-parse-getter/6 + if (options.csp) { + if (pathKeysLength < 6) { + fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, + options); + } else { + fn = function(scope, locals) { + var i = 0, val; + do { + val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], + pathKeys[i++], fullExp, options)(scope, locals); + + locals = undefined; // clear after first iteration + scope = val; + } while (i < pathKeysLength); + return val; + }; + } + } else { + var code = 'var p;\n'; + if (expensiveChecks) { + code += 's = eso(s, fe);\nl = eso(l, fe);\n'; + } + var needsEnsureSafeObject = expensiveChecks; + forEach(pathKeys, function(key, index) { + ensureSafeMemberName(key, fullExp); + var lookupJs = (index + // we simply dereference 's' on any .dot notation + ? 's' + // but if we are first then we check locals first, and if so read it first + : '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '["' + key + '"]'; + var wrapWithEso = expensiveChecks || isPossiblyDangerousMemberName(key); + if (wrapWithEso) { + lookupJs = 'eso(' + lookupJs + ', fe)'; + needsEnsureSafeObject = true; + } + code += 'if(s == null) return undefined;\n' + + 's=' + lookupJs + ';\n'; + if (options.unwrapPromises) { + code += 'if (s && s.then) {\n' + + ' pw("' + fullExp.replace(/(["\r\n])/g, '\\$1') + '");\n' + + ' if (!("$$v" in s)) {\n' + + ' p=s;\n' + + ' p.$$v = undefined;\n' + + ' p.then(function(v) {p.$$v=' + (wrapWithEso ? 'eso(v)' : 'v') + ';});\n' + + '}\n' + + ' s=' + (wrapWithEso ? 'eso(s.$$v)' : 's.$$v') + '\n' + + '}\n'; + + } + }); + code += 'return s;'; + + /* jshint -W054 */ + // s=scope, l=locals, pw=promiseWarning, eso=ensureSafeObject, fe=fullExpression + var evaledFnGetter = new Function('s', 'l', 'pw', 'eso', 'fe', code); + /* jshint +W054 */ + evaledFnGetter.toString = valueFn(code); + if (needsEnsureSafeObject || options.unwrapPromises) { + evaledFnGetter = getterFnWithExtraArgs(evaledFnGetter, fullExp); + } + fn = evaledFnGetter; + } + + // Only cache the value if it's not going to mess up the cache object + // This is more performant that using Object.prototype.hasOwnProperty.call + if (path !== 'hasOwnProperty') { + getterFnCache[path] = fn; + } + return fn; +} + +/////////////////////////////////// + +/** + * @ngdoc service + * @name $parse + * @kind function + * + * @description + * + * Converts Angular {@link guide/expression expression} into a function. + * + * ```js + * var getter = $parse('user.name'); + * var setter = getter.assign; + * var context = {user:{name:'angular'}}; + * var locals = {user:{name:'local'}}; + * + * expect(getter(context)).toEqual('angular'); + * setter(context, 'newValue'); + * expect(context.user.name).toEqual('newValue'); + * expect(getter(context, locals)).toEqual('local'); + * ``` + * + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + * + * The returned function also has the following properties: + * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript + * literal. + * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript + * constant literals. + * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be + * set to a function to change its value on the given context. + * + */ + + +/** + * @ngdoc provider + * @name $parseProvider + * @kind function + * + * @description + * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} + * service. + */ +function $ParseProvider() { + var cacheDefault = {}; + var cacheExpensive = {}; + + var $parseOptions = { + csp: false, + unwrapPromises: false, + logPromiseWarnings: true, + expensiveChecks: false + }; + + + /** + * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. + * + * @ngdoc method + * @name $parseProvider#unwrapPromises + * @description + * + * **This feature is deprecated, see deprecation notes below for more info** + * + * If set to true (default is false), $parse will unwrap promises automatically when a promise is + * found at any part of the expression. In other words, if set to true, the expression will always + * result in a non-promise value. + * + * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled, + * the fulfillment value is used in place of the promise while evaluating the expression. + * + * **Deprecation notice** + * + * This is a feature that didn't prove to be wildly useful or popular, primarily because of the + * dichotomy between data access in templates (accessed as raw values) and controller code + * (accessed as promises). + * + * In most code we ended up resolving promises manually in controllers anyway and thus unifying + * the model access there. + * + * Other downsides of automatic promise unwrapping: + * + * - when building components it's often desirable to receive the raw promises + * - adds complexity and slows down expression evaluation + * - makes expression code pre-generation unattractive due to the amount of code that needs to be + * generated + * - makes IDE auto-completion and tool support hard + * + * **Warning Logs** + * + * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a + * promise (to reduce the noise, each expression is logged only once). To disable this logging use + * `$parseProvider.logPromiseWarnings(false)` api. + * + * + * @param {boolean=} value New value. + * @returns {boolean|self} Returns the current setting when used as getter and self if used as + * setter. + */ + this.unwrapPromises = function(value) { + if (isDefined(value)) { + $parseOptions.unwrapPromises = !!value; + return this; + } else { + return $parseOptions.unwrapPromises; + } + }; + + + /** + * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. + * + * @ngdoc method + * @name $parseProvider#logPromiseWarnings + * @description + * + * Controls whether Angular should log a warning on any encounter of a promise in an expression. + * + * The default is set to `true`. + * + * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well. + * + * @param {boolean=} value New value. + * @returns {boolean|self} Returns the current setting when used as getter and self if used as + * setter. + */ + this.logPromiseWarnings = function(value) { + if (isDefined(value)) { + $parseOptions.logPromiseWarnings = value; + return this; + } else { + return $parseOptions.logPromiseWarnings; + } + }; + + + this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) { + $parseOptions.csp = $sniffer.csp; + var $parseOptionsExpensive = { + csp: $parseOptions.csp, + unwrapPromises: $parseOptions.unwrapPromises, + logPromiseWarnings: $parseOptions.logPromiseWarnings, + expensiveChecks: true + }; + + promiseWarning = function promiseWarningFn(fullExp) { + if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return; + promiseWarningCache[fullExp] = true; + $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' + + 'Automatic unwrapping of promises in Angular expressions is deprecated.'); + }; + + return function(exp, expensiveChecks) { + var parsedExpression; + + switch (typeof exp) { + case 'string': + + var cache = (expensiveChecks ? cacheExpensive : cacheDefault); + if (cache.hasOwnProperty(exp)) { + return cache[exp]; + } + + var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions; + var lexer = new Lexer(parseOptions); + var parser = new Parser(lexer, $filter, parseOptions); + parsedExpression = parser.parse(exp); + + if (exp !== 'hasOwnProperty') { + // Only cache the value if it's not going to mess up the cache object + // This is more performant that using Object.prototype.hasOwnProperty.call + cache[exp] = parsedExpression; + } + + return parsedExpression; + + case 'function': + return exp; + + default: + return noop; + } + }; + }]; +} + +/** + * @ngdoc service + * @name $q + * @requires $rootScope + * + * @description + * A service that helps you run functions asynchronously, and use their return values (or exceptions) + * when they are done processing. + * + * This is an implementation of promises/deferred objects inspired by + * [Kris Kowal's Q](https://github.com/kriskowal/q). + * + * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an + * interface for interacting with an object that represents the result of an action that is + * performed asynchronously, and may or may not be finished at any given point in time. + * + * From the perspective of dealing with error handling, deferred and promise APIs are to + * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. + * + * ```js + * // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet` + * // are available in the current lexical scope (they could have been injected or passed in). + * + * function asyncGreet(name) { + * var deferred = $q.defer(); + * + * setTimeout(function() { + * deferred.notify('About to greet ' + name + '.'); + * + * if (okToGreet(name)) { + * deferred.resolve('Hello, ' + name + '!'); + * } else { + * deferred.reject('Greeting ' + name + ' is not allowed.'); + * } + * }, 1000); + * + * return deferred.promise; + * } + * + * var promise = asyncGreet('Robin Hood'); + * promise.then(function(greeting) { + * alert('Success: ' + greeting); + * }, function(reason) { + * alert('Failed: ' + reason); + * }, function(update) { + * alert('Got notification: ' + update); + * }); + * ``` + * + * At first it might not be obvious why this extra complexity is worth the trouble. The payoff + * comes in the way of guarantees that promise and deferred APIs make, see + * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. + * + * Additionally the promise api allows for composition that is very hard to do with the + * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. + * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the + * section on serial or parallel joining of promises. + * + * + * # The Deferred API + * + * A new instance of deferred is constructed by calling `$q.defer()`. + * + * The purpose of the deferred object is to expose the associated Promise instance as well as APIs + * that can be used for signaling the successful or unsuccessful completion, as well as the status + * of the task. + * + * **Methods** + * + * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection + * constructed via `$q.reject`, the promise will be rejected instead. + * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to + * resolving it with a rejection constructed via `$q.reject`. + * - `notify(value)` - provides updates on the status of the promise's execution. This may be called + * multiple times before the promise is either resolved or rejected. + * + * **Properties** + * + * - promise – `{Promise}` – promise object associated with this deferred. + * + * + * # The Promise API + * + * A new promise instance is created when a deferred instance is created and can be retrieved by + * calling `deferred.promise`. + * + * The purpose of the promise object is to allow for interested parties to get access to the result + * of the deferred task when it completes. + * + * **Methods** + * + * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or + * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously + * as soon as the result is available. The callbacks are called with a single argument: the result + * or rejection reason. Additionally, the notify callback may be called zero or more times to + * provide a progress indication, before the promise is resolved or rejected. + * + * This method *returns a new promise* which is resolved or rejected via the return value of the + * `successCallback`, `errorCallback`. It also notifies via the return value of the + * `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback + * method. + * + * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` + * + * Because `catch` is a reserved word in JavaScript and reserved keywords are not supported as + * property names by ES3, you'll need to invoke the method like `promise['catch'](callback)` or + * `promise.then(null, errorCallback)` to make your code IE8 and Android 2.x compatible. + * + * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise, + * but to do so without modifying the final value. This is useful to release resources or do some + * clean-up that needs to be done whether the promise was rejected or resolved. See the [full + * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for + * more information. + * + * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as + * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to + * make your code IE8 and Android 2.x compatible. + * + * # Chaining promises + * + * Because calling the `then` method of a promise returns a new derived promise, it is easily + * possible to create a chain of promises: + * + * ```js + * promiseB = promiseA.then(function(result) { + * return result + 1; + * }); + * + * // promiseB will be resolved immediately after promiseA is resolved and its value + * // will be the result of promiseA incremented by 1 + * ``` + * + * It is possible to create chains of any length and since a promise can be resolved with another + * promise (which will defer its resolution further), it is possible to pause/defer resolution of + * the promises at any point in the chain. This makes it possible to implement powerful APIs like + * $http's response interceptors. + * + * + * # Differences between Kris Kowal's Q and $q + * + * There are two main differences: + * + * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation + * mechanism in angular, which means faster propagation of resolution or rejection into your + * models and avoiding unnecessary browser repaints, which would result in flickering UI. + * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains + * all the important functionality needed for common async tasks. + * + * # Testing + * + * ```js + * it('should simulate promise', inject(function($q, $rootScope) { + * var deferred = $q.defer(); + * var promise = deferred.promise; + * var resolvedValue; + * + * promise.then(function(value) { resolvedValue = value; }); + * expect(resolvedValue).toBeUndefined(); + * + * // Simulate resolving of promise + * deferred.resolve(123); + * // Note that the 'then' function does not get called synchronously. + * // This is because we want the promise API to always be async, whether or not + * // it got called synchronously or asynchronously. + * expect(resolvedValue).toBeUndefined(); + * + * // Propagate promise resolution to 'then' functions using $apply(). + * $rootScope.$apply(); + * expect(resolvedValue).toEqual(123); + * })); + * ``` + */ +function $QProvider() { + + this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { + return qFactory(function(callback) { + $rootScope.$evalAsync(callback); + }, $exceptionHandler); + }]; +} + + +/** + * Constructs a promise manager. + * + * @param {function(Function)} nextTick Function for executing functions in the next turn. + * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for + * debugging purposes. + * @returns {object} Promise manager. + */ +function qFactory(nextTick, exceptionHandler) { + + /** + * @ngdoc method + * @name $q#defer + * @kind function + * + * @description + * Creates a `Deferred` object which represents a task which will finish in the future. + * + * @returns {Deferred} Returns a new instance of deferred. + */ + var defer = function() { + var pending = [], + value, deferred; + + deferred = { + + resolve: function(val) { + if (pending) { + var callbacks = pending; + pending = undefined; + value = ref(val); + + if (callbacks.length) { + nextTick(function() { + var callback; + for (var i = 0, ii = callbacks.length; i < ii; i++) { + callback = callbacks[i]; + value.then(callback[0], callback[1], callback[2]); + } + }); + } + } + }, + + + reject: function(reason) { + deferred.resolve(createInternalRejectedPromise(reason)); + }, + + + notify: function(progress) { + if (pending) { + var callbacks = pending; + + if (pending.length) { + nextTick(function() { + var callback; + for (var i = 0, ii = callbacks.length; i < ii; i++) { + callback = callbacks[i]; + callback[2](progress); + } + }); + } + } + }, + + + promise: { + then: function(callback, errback, progressback) { + var result = defer(); + + var wrappedCallback = function(value) { + try { + result.resolve((isFunction(callback) ? callback : defaultCallback)(value)); + } catch(e) { + result.reject(e); + exceptionHandler(e); + } + }; + + var wrappedErrback = function(reason) { + try { + result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); + } catch(e) { + result.reject(e); + exceptionHandler(e); + } + }; + + var wrappedProgressback = function(progress) { + try { + result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress)); + } catch(e) { + exceptionHandler(e); + } + }; + + if (pending) { + pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]); + } else { + value.then(wrappedCallback, wrappedErrback, wrappedProgressback); + } + + return result.promise; + }, + + "catch": function(callback) { + return this.then(null, callback); + }, + + "finally": function(callback) { + + function makePromise(value, resolved) { + var result = defer(); + if (resolved) { + result.resolve(value); + } else { + result.reject(value); + } + return result.promise; + } + + function handleCallback(value, isResolved) { + var callbackOutput = null; + try { + callbackOutput = (callback ||defaultCallback)(); + } catch(e) { + return makePromise(e, false); + } + if (isPromiseLike(callbackOutput)) { + return callbackOutput.then(function() { + return makePromise(value, isResolved); + }, function(error) { + return makePromise(error, false); + }); + } else { + return makePromise(value, isResolved); + } + } + + return this.then(function(value) { + return handleCallback(value, true); + }, function(error) { + return handleCallback(error, false); + }); + } + } + }; + + return deferred; + }; + + + var ref = function(value) { + if (isPromiseLike(value)) return value; + return { + then: function(callback) { + var result = defer(); + nextTick(function() { + result.resolve(callback(value)); + }); + return result.promise; + } + }; + }; + + + /** + * @ngdoc method + * @name $q#reject + * @kind function + * + * @description + * Creates a promise that is resolved as rejected with the specified `reason`. This api should be + * used to forward rejection in a chain of promises. If you are dealing with the last promise in + * a promise chain, you don't need to worry about it. + * + * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of + * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via + * a promise error callback and you want to forward the error to the promise derived from the + * current promise, you have to "rethrow" the error by returning a rejection constructed via + * `reject`. + * + * ```js + * promiseB = promiseA.then(function(result) { + * // success: do something and resolve promiseB + * // with the old or a new result + * return result; + * }, function(reason) { + * // error: handle the error if possible and + * // resolve promiseB with newPromiseOrValue, + * // otherwise forward the rejection to promiseB + * if (canHandle(reason)) { + * // handle the error and recover + * return newPromiseOrValue; + * } + * return $q.reject(reason); + * }); + * ``` + * + * @param {*} reason Constant, message, exception or an object representing the rejection reason. + * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. + */ + var reject = function(reason) { + var result = defer(); + result.reject(reason); + return result.promise; + }; + + var createInternalRejectedPromise = function(reason) { + return { + then: function(callback, errback) { + var result = defer(); + nextTick(function() { + try { + result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); + } catch(e) { + result.reject(e); + exceptionHandler(e); + } + }); + return result.promise; + } + }; + }; + + + /** + * @ngdoc method + * @name $q#when + * @kind function + * + * @description + * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. + * This is useful when you are dealing with an object that might or might not be a promise, or if + * the promise comes from a source that can't be trusted. + * + * @param {*} value Value or a promise + * @returns {Promise} Returns a promise of the passed value or promise + */ + var when = function(value, callback, errback, progressback) { + var result = defer(), + done; + + var wrappedCallback = function(value) { + try { + return (isFunction(callback) ? callback : defaultCallback)(value); + } catch (e) { + exceptionHandler(e); + return reject(e); + } + }; + + var wrappedErrback = function(reason) { + try { + return (isFunction(errback) ? errback : defaultErrback)(reason); + } catch (e) { + exceptionHandler(e); + return reject(e); + } + }; + + var wrappedProgressback = function(progress) { + try { + return (isFunction(progressback) ? progressback : defaultCallback)(progress); + } catch (e) { + exceptionHandler(e); + } + }; + + nextTick(function() { + ref(value).then(function(value) { + if (done) return; + done = true; + result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback)); + }, function(reason) { + if (done) return; + done = true; + result.resolve(wrappedErrback(reason)); + }, function(progress) { + if (done) return; + result.notify(wrappedProgressback(progress)); + }); + }); + + return result.promise; + }; + + + function defaultCallback(value) { + return value; + } + + + function defaultErrback(reason) { + return reject(reason); + } + + + /** + * @ngdoc method + * @name $q#all + * @kind function + * + * @description + * Combines multiple promises into a single promise that is resolved when all of the input + * promises are resolved. + * + * @param {Array.|Object.} promises An array or hash of promises. + * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, + * each value corresponding to the promise at the same index/key in the `promises` array/hash. + * If any of the promises is resolved with a rejection, this resulting promise will be rejected + * with the same rejection value. + */ + function all(promises) { + var deferred = defer(), + counter = 0, + results = isArray(promises) ? [] : {}; + + forEach(promises, function(promise, key) { + counter++; + ref(promise).then(function(value) { + if (results.hasOwnProperty(key)) return; + results[key] = value; + if (!(--counter)) deferred.resolve(results); + }, function(reason) { + if (results.hasOwnProperty(key)) return; + deferred.reject(reason); + }); + }); + + if (counter === 0) { + deferred.resolve(results); + } + + return deferred.promise; + } + + return { + defer: defer, + reject: reject, + when: when, + all: all + }; +} + +function $$RAFProvider(){ //rAF + this.$get = ['$window', '$timeout', function($window, $timeout) { + var requestAnimationFrame = $window.requestAnimationFrame || + $window.webkitRequestAnimationFrame || + $window.mozRequestAnimationFrame; + + var cancelAnimationFrame = $window.cancelAnimationFrame || + $window.webkitCancelAnimationFrame || + $window.mozCancelAnimationFrame || + $window.webkitCancelRequestAnimationFrame; + + var rafSupported = !!requestAnimationFrame; + var raf = rafSupported + ? function(fn) { + var id = requestAnimationFrame(fn); + return function() { + cancelAnimationFrame(id); + }; + } + : function(fn) { + var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 + return function() { + $timeout.cancel(timer); + }; + }; + + raf.supported = rafSupported; + + return raf; + }]; +} + +/** + * DESIGN NOTES + * + * The design decisions behind the scope are heavily favored for speed and memory consumption. + * + * The typical use of scope is to watch the expressions, which most of the time return the same + * value as last time so we optimize the operation. + * + * Closures construction is expensive in terms of speed as well as memory: + * - No closures, instead use prototypical inheritance for API + * - Internal state needs to be stored on scope directly, which means that private state is + * exposed as $$____ properties + * + * Loop operations are optimized by using while(count--) { ... } + * - this means that in order to keep the same order of execution as addition we have to add + * items to the array at the beginning (unshift) instead of at the end (push) + * + * Child scopes are created and removed often + * - Using an array would be slow since inserts in middle are expensive so we use linked list + * + * There are few watches then a lot of observers. This is why you don't want the observer to be + * implemented in the same way as watch. Watch requires return of initialization function which + * are expensive to construct. + */ + + +/** + * @ngdoc provider + * @name $rootScopeProvider + * @description + * + * Provider for the $rootScope service. + */ + +/** + * @ngdoc method + * @name $rootScopeProvider#digestTtl + * @description + * + * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and + * assuming that the model is unstable. + * + * The current default is 10 iterations. + * + * In complex applications it's possible that the dependencies between `$watch`s will result in + * several digest iterations. However if an application needs more than the default 10 digest + * iterations for its model to stabilize then you should investigate what is causing the model to + * continuously change during the digest. + * + * Increasing the TTL could have performance implications, so you should not change it without + * proper justification. + * + * @param {number} limit The number of digest iterations. + */ + + +/** + * @ngdoc service + * @name $rootScope + * @description + * + * Every application has a single root {@link ng.$rootScope.Scope scope}. + * All other scopes are descendant scopes of the root scope. Scopes provide separation + * between the model and the view, via a mechanism for watching the model for changes. + * They also provide an event emission/broadcast and subscription facility. See the + * {@link guide/scope developer guide on scopes}. + */ +function $RootScopeProvider(){ + var TTL = 10; + var $rootScopeMinErr = minErr('$rootScope'); + var lastDirtyWatch = null; + + this.digestTtl = function(value) { + if (arguments.length) { + TTL = value; + } + return TTL; + }; + + this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', + function( $injector, $exceptionHandler, $parse, $browser) { + + /** + * @ngdoc type + * @name $rootScope.Scope + * + * @description + * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the + * {@link auto.$injector $injector}. Child scopes are created using the + * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when + * compiled HTML template is executed.) + * + * Here is a simple scope snippet to show how you can interact with the scope. + * ```html + * + * ``` + * + * # Inheritance + * A scope can inherit from a parent scope, as in this example: + * ```js + var parent = $rootScope; + var child = parent.$new(); + + parent.salutation = "Hello"; + child.name = "World"; + expect(child.salutation).toEqual('Hello'); + + child.salutation = "Welcome"; + expect(child.salutation).toEqual('Welcome'); + expect(parent.salutation).toEqual('Hello'); + * ``` + * + * + * @param {Object.=} providers Map of service factory which need to be + * provided for the current scope. Defaults to {@link ng}. + * @param {Object.=} instanceCache Provides pre-instantiated services which should + * append/override services provided by `providers`. This is handy + * when unit-testing and having the need to override a default + * service. + * @returns {Object} Newly created scope. + * + */ + function Scope() { + this.$id = nextUid(); + this.$$phase = this.$parent = this.$$watchers = + this.$$nextSibling = this.$$prevSibling = + this.$$childHead = this.$$childTail = null; + this['this'] = this.$root = this; + this.$$destroyed = false; + this.$$asyncQueue = []; + this.$$postDigestQueue = []; + this.$$listeners = {}; + this.$$listenerCount = {}; + this.$$isolateBindings = {}; + } + + /** + * @ngdoc property + * @name $rootScope.Scope#$id + * + * @description + * Unique scope ID (monotonically increasing) useful for debugging. + */ + + /** + * @ngdoc property + * @name $rootScope.Scope#$parent + * + * @description + * Reference to the parent scope. + */ + + /** + * @ngdoc property + * @name $rootScope.Scope#$root + * + * @description + * Reference to the root scope. + */ + + Scope.prototype = { + constructor: Scope, + /** + * @ngdoc method + * @name $rootScope.Scope#$new + * @kind function + * + * @description + * Creates a new child {@link ng.$rootScope.Scope scope}. + * + * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event. + * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. + * + * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is + * desired for the scope and its child scopes to be permanently detached from the parent and + * thus stop participating in model change detection and listener notification by invoking. + * + * @param {boolean} isolate If true, then the scope does not prototypically inherit from the + * parent scope. The scope is isolated, as it can not see parent scope properties. + * When creating widgets, it is useful for the widget to not accidentally read parent + * state. + * + * @returns {Object} The newly created child scope. + * + */ + $new: function(isolate) { + var ChildScope, + child; + + if (isolate) { + child = new Scope(); + child.$root = this.$root; + // ensure that there is just one async queue per $rootScope and its children + child.$$asyncQueue = this.$$asyncQueue; + child.$$postDigestQueue = this.$$postDigestQueue; + } else { + // Only create a child scope class if somebody asks for one, + // but cache it to allow the VM to optimize lookups. + if (!this.$$childScopeClass) { + this.$$childScopeClass = function() { + this.$$watchers = this.$$nextSibling = + this.$$childHead = this.$$childTail = null; + this.$$listeners = {}; + this.$$listenerCount = {}; + this.$id = nextUid(); + this.$$childScopeClass = null; + }; + this.$$childScopeClass.prototype = this; + } + child = new this.$$childScopeClass(); + } + child['this'] = child; + child.$parent = this; + child.$$prevSibling = this.$$childTail; + if (this.$$childHead) { + this.$$childTail.$$nextSibling = child; + this.$$childTail = child; + } else { + this.$$childHead = this.$$childTail = child; + } + return child; + }, + + /** + * @ngdoc method + * @name $rootScope.Scope#$watch + * @kind function + * + * @description + * Registers a `listener` callback to be executed whenever the `watchExpression` changes. + * + * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest + * $digest()} and should return the value that will be watched. (Since + * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the + * `watchExpression` can execute multiple times per + * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) + * - The `listener` is called only when the value from the current `watchExpression` and the + * previous call to `watchExpression` are not equal (with the exception of the initial run, + * see below). Inequality is determined according to reference inequality, + * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) + * via the `!==` Javascript operator, unless `objectEquality == true` + * (see next point) + * - When `objectEquality == true`, inequality of the `watchExpression` is determined + * according to the {@link angular.equals} function. To save the value of the object for + * later comparison, the {@link angular.copy} function is used. This therefore means that + * watching complex objects will have adverse memory and performance implications. + * - The watch `listener` may change the model, which may trigger other `listener`s to fire. + * This is achieved by rerunning the watchers until no changes are detected. The rerun + * iteration limit is 10 to prevent an infinite loop deadlock. + * + * + * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, + * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` + * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a + * change is detected, be prepared for multiple calls to your listener.) + * + * After a watcher is registered with the scope, the `listener` fn is called asynchronously + * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the + * watcher. In rare cases, this is undesirable because the listener is called when the result + * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you + * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the + * listener was called due to initialization. + * + * The example below contains an illustration of using a function as your $watch listener + * + * + * # Example + * ```js + // let's assume that scope was dependency injected as the $rootScope + var scope = $rootScope; + scope.name = 'misko'; + scope.counter = 0; + + expect(scope.counter).toEqual(0); + scope.$watch('name', function(newValue, oldValue) { + scope.counter = scope.counter + 1; + }); + expect(scope.counter).toEqual(0); + + scope.$digest(); + // the listener is always called during the first $digest loop after it was registered + expect(scope.counter).toEqual(1); + + scope.$digest(); + // but now it will not be called unless the value changes + expect(scope.counter).toEqual(1); + + scope.name = 'adam'; + scope.$digest(); + expect(scope.counter).toEqual(2); + + + + // Using a listener function + var food; + scope.foodCounter = 0; + expect(scope.foodCounter).toEqual(0); + scope.$watch( + // This is the listener function + function() { return food; }, + // This is the change handler + function(newValue, oldValue) { + if ( newValue !== oldValue ) { + // Only increment the counter if the value changed + scope.foodCounter = scope.foodCounter + 1; + } + } + ); + // No digest has been run so the counter will be zero + expect(scope.foodCounter).toEqual(0); + + // Run the digest but since food has not changed count will still be zero + scope.$digest(); + expect(scope.foodCounter).toEqual(0); + + // Update food and run digest. Now the counter will increment + food = 'cheeseburger'; + scope.$digest(); + expect(scope.foodCounter).toEqual(1); + + * ``` + * + * + * + * @param {(function()|string)} watchExpression Expression that is evaluated on each + * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers + * a call to the `listener`. + * + * - `string`: Evaluated as {@link guide/expression expression} + * - `function(scope)`: called with current `scope` as a parameter. + * @param {(function()|string)=} listener Callback called whenever the return value of + * the `watchExpression` changes. + * + * - `string`: Evaluated as {@link guide/expression expression} + * - `function(newValue, oldValue, scope)`: called with current and previous values as + * parameters. + * + * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of + * comparing for reference equality. + * @returns {function()} Returns a deregistration function for this listener. + */ + $watch: function(watchExp, listener, objectEquality) { + var scope = this, + get = compileToFn(watchExp, 'watch'), + array = scope.$$watchers, + watcher = { + fn: listener, + last: initWatchVal, + get: get, + exp: watchExp, + eq: !!objectEquality + }; + + lastDirtyWatch = null; + + // in the case user pass string, we need to compile it, do we really need this ? + if (!isFunction(listener)) { + var listenFn = compileToFn(listener || noop, 'listener'); + watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);}; + } + + if (typeof watchExp == 'string' && get.constant) { + var originalFn = watcher.fn; + watcher.fn = function(newVal, oldVal, scope) { + originalFn.call(this, newVal, oldVal, scope); + arrayRemove(array, watcher); + }; + } + + if (!array) { + array = scope.$$watchers = []; + } + // we use unshift since we use a while loop in $digest for speed. + // the while loop reads in reverse order. + array.unshift(watcher); + + return function deregisterWatch() { + arrayRemove(array, watcher); + lastDirtyWatch = null; + }; + }, + + + /** + * @ngdoc method + * @name $rootScope.Scope#$watchCollection + * @kind function + * + * @description + * Shallow watches the properties of an object and fires whenever any of the properties change + * (for arrays, this implies watching the array items; for object maps, this implies watching + * the properties). If a change is detected, the `listener` callback is fired. + * + * - The `obj` collection is observed via standard $watch operation and is examined on every + * call to $digest() to see if any items have been added, removed, or moved. + * - The `listener` is called whenever anything within the `obj` has changed. Examples include + * adding, removing, and moving items belonging to an object or array. + * + * + * # Example + * ```js + $scope.names = ['igor', 'matias', 'misko', 'james']; + $scope.dataCount = 4; + + $scope.$watchCollection('names', function(newNames, oldNames) { + $scope.dataCount = newNames.length; + }); + + expect($scope.dataCount).toEqual(4); + $scope.$digest(); + + //still at 4 ... no changes + expect($scope.dataCount).toEqual(4); + + $scope.names.pop(); + $scope.$digest(); + + //now there's been a change + expect($scope.dataCount).toEqual(3); + * ``` + * + * + * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The + * expression value should evaluate to an object or an array which is observed on each + * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the + * collection will trigger a call to the `listener`. + * + * @param {function(newCollection, oldCollection, scope)} listener a callback function called + * when a change is detected. + * - The `newCollection` object is the newly modified data obtained from the `obj` expression + * - The `oldCollection` object is a copy of the former collection data. + * Due to performance considerations, the`oldCollection` value is computed only if the + * `listener` function declares two or more arguments. + * - The `scope` argument refers to the current scope. + * + * @returns {function()} Returns a de-registration function for this listener. When the + * de-registration function is executed, the internal watch operation is terminated. + */ + $watchCollection: function(obj, listener) { + var self = this; + // the current value, updated on each dirty-check run + var newValue; + // a shallow copy of the newValue from the last dirty-check run, + // updated to match newValue during dirty-check run + var oldValue; + // a shallow copy of the newValue from when the last change happened + var veryOldValue; + // only track veryOldValue if the listener is asking for it + var trackVeryOldValue = (listener.length > 1); + var changeDetected = 0; + var objGetter = $parse(obj); + var internalArray = []; + var internalObject = {}; + var initRun = true; + var oldLength = 0; + + function $watchCollectionWatch() { + newValue = objGetter(self); + var newLength, key, bothNaN; + + if (!isObject(newValue)) { // if primitive + if (oldValue !== newValue) { + oldValue = newValue; + changeDetected++; + } + } else if (isArrayLike(newValue)) { + if (oldValue !== internalArray) { + // we are transitioning from something which was not an array into array. + oldValue = internalArray; + oldLength = oldValue.length = 0; + changeDetected++; + } + + newLength = newValue.length; + + if (oldLength !== newLength) { + // if lengths do not match we need to trigger change notification + changeDetected++; + oldValue.length = oldLength = newLength; + } + // copy the items to oldValue and look for changes. + for (var i = 0; i < newLength; i++) { + bothNaN = (oldValue[i] !== oldValue[i]) && + (newValue[i] !== newValue[i]); + if (!bothNaN && (oldValue[i] !== newValue[i])) { + changeDetected++; + oldValue[i] = newValue[i]; + } + } + } else { + if (oldValue !== internalObject) { + // we are transitioning from something which was not an object into object. + oldValue = internalObject = {}; + oldLength = 0; + changeDetected++; + } + // copy the items to oldValue and look for changes. + newLength = 0; + for (key in newValue) { + if (newValue.hasOwnProperty(key)) { + newLength++; + if (oldValue.hasOwnProperty(key)) { + bothNaN = (oldValue[key] !== oldValue[key]) && + (newValue[key] !== newValue[key]); + if (!bothNaN && (oldValue[key] !== newValue[key])) { + changeDetected++; + oldValue[key] = newValue[key]; + } + } else { + oldLength++; + oldValue[key] = newValue[key]; + changeDetected++; + } + } + } + if (oldLength > newLength) { + // we used to have more keys, need to find them and destroy them. + changeDetected++; + for(key in oldValue) { + if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) { + oldLength--; + delete oldValue[key]; + } + } + } + } + return changeDetected; + } + + function $watchCollectionAction() { + if (initRun) { + initRun = false; + listener(newValue, newValue, self); + } else { + listener(newValue, veryOldValue, self); + } + + // make a copy for the next time a collection is changed + if (trackVeryOldValue) { + if (!isObject(newValue)) { + //primitive + veryOldValue = newValue; + } else if (isArrayLike(newValue)) { + veryOldValue = new Array(newValue.length); + for (var i = 0; i < newValue.length; i++) { + veryOldValue[i] = newValue[i]; + } + } else { // if object + veryOldValue = {}; + for (var key in newValue) { + if (hasOwnProperty.call(newValue, key)) { + veryOldValue[key] = newValue[key]; + } + } + } + } + } + + return this.$watch($watchCollectionWatch, $watchCollectionAction); + }, + + /** + * @ngdoc method + * @name $rootScope.Scope#$digest + * @kind function + * + * @description + * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and + * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change + * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} + * until no more listeners are firing. This means that it is possible to get into an infinite + * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of + * iterations exceeds 10. + * + * Usually, you don't call `$digest()` directly in + * {@link ng.directive:ngController controllers} or in + * {@link ng.$compileProvider#directive directives}. + * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within + * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`. + * + * If you want to be notified whenever `$digest()` is called, + * you can register a `watchExpression` function with + * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. + * + * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. + * + * # Example + * ```js + var scope = ...; + scope.name = 'misko'; + scope.counter = 0; + + expect(scope.counter).toEqual(0); + scope.$watch('name', function(newValue, oldValue) { + scope.counter = scope.counter + 1; + }); + expect(scope.counter).toEqual(0); + + scope.$digest(); + // the listener is always called during the first $digest loop after it was registered + expect(scope.counter).toEqual(1); + + scope.$digest(); + // but now it will not be called unless the value changes + expect(scope.counter).toEqual(1); + + scope.name = 'adam'; + scope.$digest(); + expect(scope.counter).toEqual(2); + * ``` + * + */ + $digest: function() { + var watch, value, last, + watchers, + asyncQueue = this.$$asyncQueue, + postDigestQueue = this.$$postDigestQueue, + length, + dirty, ttl = TTL, + next, current, target = this, + watchLog = [], + logIdx, logMsg, asyncTask; + + beginPhase('$digest'); + // Check for changes to browser url that happened in sync before the call to $digest + $browser.$$checkUrlChange(); + + lastDirtyWatch = null; + + do { // "while dirty" loop + dirty = false; + current = target; + + while(asyncQueue.length) { + try { + asyncTask = asyncQueue.shift(); + asyncTask.scope.$eval(asyncTask.expression); + } catch (e) { + clearPhase(); + $exceptionHandler(e); + } + lastDirtyWatch = null; + } + + traverseScopesLoop: + do { // "traverse the scopes" loop + if ((watchers = current.$$watchers)) { + // process our watches + length = watchers.length; + while (length--) { + try { + watch = watchers[length]; + // Most common watches are on primitives, in which case we can short + // circuit it with === operator, only when === fails do we use .equals + if (watch) { + if ((value = watch.get(current)) !== (last = watch.last) && + !(watch.eq + ? equals(value, last) + : (typeof value === 'number' && typeof last === 'number' + && isNaN(value) && isNaN(last)))) { + dirty = true; + lastDirtyWatch = watch; + watch.last = watch.eq ? copy(value, null) : value; + watch.fn(value, ((last === initWatchVal) ? value : last), current); + if (ttl < 5) { + logIdx = 4 - ttl; + if (!watchLog[logIdx]) watchLog[logIdx] = []; + logMsg = (isFunction(watch.exp)) + ? 'fn: ' + (watch.exp.name || watch.exp.toString()) + : watch.exp; + logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last); + watchLog[logIdx].push(logMsg); + } + } else if (watch === lastDirtyWatch) { + // If the most recently dirty watcher is now clean, short circuit since the remaining watchers + // have already been tested. + dirty = false; + break traverseScopesLoop; + } + } + } catch (e) { + clearPhase(); + $exceptionHandler(e); + } + } + } + + // Insanity Warning: scope depth-first traversal + // yes, this code is a bit crazy, but it works and we have tests to prove it! + // this piece should be kept in sync with the traversal in $broadcast + if (!(next = (current.$$childHead || + (current !== target && current.$$nextSibling)))) { + while(current !== target && !(next = current.$$nextSibling)) { + current = current.$parent; + } + } + } while ((current = next)); + + // `break traverseScopesLoop;` takes us to here + + if((dirty || asyncQueue.length) && !(ttl--)) { + clearPhase(); + throw $rootScopeMinErr('infdig', + '{0} $digest() iterations reached. Aborting!\n' + + 'Watchers fired in the last 5 iterations: {1}', + TTL, toJson(watchLog)); + } + + } while (dirty || asyncQueue.length); + + clearPhase(); + + while(postDigestQueue.length) { + try { + postDigestQueue.shift()(); + } catch (e) { + $exceptionHandler(e); + } + } + }, + + + /** + * @ngdoc event + * @name $rootScope.Scope#$destroy + * @eventType broadcast on scope being destroyed + * + * @description + * Broadcasted when a scope and its children are being destroyed. + * + * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to + * clean up DOM bindings before an element is removed from the DOM. + */ + + /** + * @ngdoc method + * @name $rootScope.Scope#$destroy + * @kind function + * + * @description + * Removes the current scope (and all of its children) from the parent scope. Removal implies + * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer + * propagate to the current scope and its children. Removal also implies that the current + * scope is eligible for garbage collection. + * + * The `$destroy()` is usually used by directives such as + * {@link ng.directive:ngRepeat ngRepeat} for managing the + * unrolling of the loop. + * + * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. + * Application code can register a `$destroy` event handler that will give it a chance to + * perform any necessary cleanup. + * + * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to + * clean up DOM bindings before an element is removed from the DOM. + */ + $destroy: function() { + // we can't destroy the root scope or a scope that has been already destroyed + if (this.$$destroyed) return; + var parent = this.$parent; + + this.$broadcast('$destroy'); + this.$$destroyed = true; + if (this === $rootScope) return; + + forEach(this.$$listenerCount, bind(null, decrementListenerCount, this)); + + // sever all the references to parent scopes (after this cleanup, the current scope should + // not be retained by any of our references and should be eligible for garbage collection) + if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; + if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; + if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; + if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; + + + // All of the code below is bogus code that works around V8's memory leak via optimized code + // and inline caches. + // + // see: + // - https://code.google.com/p/v8/issues/detail?id=2073#c26 + // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 + // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 + + this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = + this.$$childTail = this.$root = null; + + // don't reset these to null in case some async task tries to register a listener/watch/task + this.$$listeners = {}; + this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = []; + + // prevent NPEs since these methods have references to properties we nulled out + this.$destroy = this.$digest = this.$apply = noop; + this.$on = this.$watch = function() { return noop; }; + }, + + /** + * @ngdoc method + * @name $rootScope.Scope#$eval + * @kind function + * + * @description + * Executes the `expression` on the current scope and returns the result. Any exceptions in + * the expression are propagated (uncaught). This is useful when evaluating Angular + * expressions. + * + * # Example + * ```js + var scope = ng.$rootScope.Scope(); + scope.a = 1; + scope.b = 2; + + expect(scope.$eval('a+b')).toEqual(3); + expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); + * ``` + * + * @param {(string|function())=} expression An angular expression to be executed. + * + * - `string`: execute using the rules as defined in {@link guide/expression expression}. + * - `function(scope)`: execute the function with the current `scope` parameter. + * + * @param {(object)=} locals Local variables object, useful for overriding values in scope. + * @returns {*} The result of evaluating the expression. + */ + $eval: function(expr, locals) { + return $parse(expr)(this, locals); + }, + + /** + * @ngdoc method + * @name $rootScope.Scope#$evalAsync + * @kind function + * + * @description + * Executes the expression on the current scope at a later point in time. + * + * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only + * that: + * + * - it will execute after the function that scheduled the evaluation (preferably before DOM + * rendering). + * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after + * `expression` execution. + * + * Any exceptions from the execution of the expression are forwarded to the + * {@link ng.$exceptionHandler $exceptionHandler} service. + * + * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle + * will be scheduled. However, it is encouraged to always call code that changes the model + * from within an `$apply` call. That includes code evaluated via `$evalAsync`. + * + * @param {(string|function())=} expression An angular expression to be executed. + * + * - `string`: execute using the rules as defined in {@link guide/expression expression}. + * - `function(scope)`: execute the function with the current `scope` parameter. + * + */ + $evalAsync: function(expr) { + // if we are outside of an $digest loop and this is the first time we are scheduling async + // task also schedule async auto-flush + if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) { + $browser.defer(function() { + if ($rootScope.$$asyncQueue.length) { + $rootScope.$digest(); + } + }); + } + + this.$$asyncQueue.push({scope: this, expression: expr}); + }, + + $$postDigest : function(fn) { + this.$$postDigestQueue.push(fn); + }, + + /** + * @ngdoc method + * @name $rootScope.Scope#$apply + * @kind function + * + * @description + * `$apply()` is used to execute an expression in angular from outside of the angular + * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). + * Because we are calling into the angular framework we need to perform proper scope life + * cycle of {@link ng.$exceptionHandler exception handling}, + * {@link ng.$rootScope.Scope#$digest executing watches}. + * + * ## Life cycle + * + * # Pseudo-Code of `$apply()` + * ```js + function $apply(expr) { + try { + return $eval(expr); + } catch (e) { + $exceptionHandler(e); + } finally { + $root.$digest(); + } + } + * ``` + * + * + * Scope's `$apply()` method transitions through the following stages: + * + * 1. The {@link guide/expression expression} is executed using the + * {@link ng.$rootScope.Scope#$eval $eval()} method. + * 2. Any exceptions from the execution of the expression are forwarded to the + * {@link ng.$exceptionHandler $exceptionHandler} service. + * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the + * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. + * + * + * @param {(string|function())=} exp An angular expression to be executed. + * + * - `string`: execute using the rules as defined in {@link guide/expression expression}. + * - `function(scope)`: execute the function with current `scope` parameter. + * + * @returns {*} The result of evaluating the expression. + */ + $apply: function(expr) { + try { + beginPhase('$apply'); + return this.$eval(expr); + } catch (e) { + $exceptionHandler(e); + } finally { + clearPhase(); + try { + $rootScope.$digest(); + } catch (e) { + $exceptionHandler(e); + throw e; + } + } + }, + + /** + * @ngdoc method + * @name $rootScope.Scope#$on + * @kind function + * + * @description + * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for + * discussion of event life cycle. + * + * The event listener function format is: `function(event, args...)`. The `event` object + * passed into the listener has the following attributes: + * + * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or + * `$broadcast`-ed. + * - `currentScope` - `{Scope}`: the current scope which is handling the event. + * - `name` - `{string}`: name of the event. + * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel + * further event propagation (available only for events that were `$emit`-ed). + * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag + * to true. + * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. + * + * @param {string} name Event name to listen on. + * @param {function(event, ...args)} listener Function to call when the event is emitted. + * @returns {function()} Returns a deregistration function for this listener. + */ + $on: function(name, listener) { + var namedListeners = this.$$listeners[name]; + if (!namedListeners) { + this.$$listeners[name] = namedListeners = []; + } + namedListeners.push(listener); + + var current = this; + do { + if (!current.$$listenerCount[name]) { + current.$$listenerCount[name] = 0; + } + current.$$listenerCount[name]++; + } while ((current = current.$parent)); + + var self = this; + return function() { + var indexOfListener = indexOf(namedListeners, listener); + if (indexOfListener !== -1) { + namedListeners[indexOfListener] = null; + decrementListenerCount(self, 1, name); + } + }; + }, + + + /** + * @ngdoc method + * @name $rootScope.Scope#$emit + * @kind function + * + * @description + * Dispatches an event `name` upwards through the scope hierarchy notifying the + * registered {@link ng.$rootScope.Scope#$on} listeners. + * + * The event life cycle starts at the scope on which `$emit` was called. All + * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get + * notified. Afterwards, the event traverses upwards toward the root scope and calls all + * registered listeners along the way. The event will stop propagating if one of the listeners + * cancels it. + * + * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed + * onto the {@link ng.$exceptionHandler $exceptionHandler} service. + * + * @param {string} name Event name to emit. + * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. + * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). + */ + $emit: function(name, args) { + var empty = [], + namedListeners, + scope = this, + stopPropagation = false, + event = { + name: name, + targetScope: scope, + stopPropagation: function() {stopPropagation = true;}, + preventDefault: function() { + event.defaultPrevented = true; + }, + defaultPrevented: false + }, + listenerArgs = concat([event], arguments, 1), + i, length; + + do { + namedListeners = scope.$$listeners[name] || empty; + event.currentScope = scope; + for (i=0, length=namedListeners.length; i= 8 ) { + normalizedVal = urlResolve(uri).href; + if (normalizedVal !== '' && !normalizedVal.match(regex)) { + return 'unsafe:'+normalizedVal; + } + } + return uri; + }; + }; +} + +var $sceMinErr = minErr('$sce'); + +var SCE_CONTEXTS = { + HTML: 'html', + CSS: 'css', + URL: 'url', + // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a + // url. (e.g. ng-include, script src, templateUrl) + RESOURCE_URL: 'resourceUrl', + JS: 'js' +}; + +// Helper functions follow. + +// Copied from: +// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962 +// Prereq: s is a string. +function escapeForRegexp(s) { + return s.replace(/([-()\[\]{}+?*.$\^|,:# -1) { + throw $sceMinErr('iwcard', + 'Illegal sequence *** in string matcher. String: {0}', matcher); + } + matcher = escapeForRegexp(matcher). + replace('\\*\\*', '.*'). + replace('\\*', '[^:/.?&;]*'); + return new RegExp('^' + matcher + '$'); + } else if (isRegExp(matcher)) { + // The only other type of matcher allowed is a Regexp. + // Match entire URL / disallow partial matches. + // Flags are reset (i.e. no global, ignoreCase or multiline) + return new RegExp('^' + matcher.source + '$'); + } else { + throw $sceMinErr('imatcher', + 'Matchers may only be "self", string patterns or RegExp objects'); + } +} + + +function adjustMatchers(matchers) { + var adjustedMatchers = []; + if (isDefined(matchers)) { + forEach(matchers, function(matcher) { + adjustedMatchers.push(adjustMatcher(matcher)); + }); + } + return adjustedMatchers; +} + + +/** + * @ngdoc service + * @name $sceDelegate + * @kind function + * + * @description + * + * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict + * Contextual Escaping (SCE)} services to AngularJS. + * + * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of + * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is + * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to + * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things + * work because `$sce` delegates to `$sceDelegate` for these operations. + * + * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. + * + * The default instance of `$sceDelegate` should work out of the box with little pain. While you + * can override it completely to change the behavior of `$sce`, the common case would + * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting + * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as + * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist + * $sceDelegateProvider.resourceUrlWhitelist} and {@link + * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} + */ + +/** + * @ngdoc provider + * @name $sceDelegateProvider + * @description + * + * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate + * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure + * that the URLs used for sourcing Angular templates are safe. Refer {@link + * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and + * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} + * + * For the general details about this service in Angular, read the main page for {@link ng.$sce + * Strict Contextual Escaping (SCE)}. + * + * **Example**: Consider the following case. + * + * - your app is hosted at url `http://myapp.example.com/` + * - but some of your templates are hosted on other domains you control such as + * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc. + * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. + * + * Here is what a secure configuration for this scenario might look like: + * + * ``` + * angular.module('myApp', []).config(function($sceDelegateProvider) { + * $sceDelegateProvider.resourceUrlWhitelist([ + * // Allow same origin resource loads. + * 'self', + * // Allow loading from our assets domain. Notice the difference between * and **. + * 'http://srv*.assets.example.com/**' + * ]); + * + * // The blacklist overrides the whitelist so the open redirect here is blocked. + * $sceDelegateProvider.resourceUrlBlacklist([ + * 'http://myapp.example.com/clickThru**' + * ]); + * }); + * ``` + */ + +function $SceDelegateProvider() { + this.SCE_CONTEXTS = SCE_CONTEXTS; + + // Resource URLs can also be trusted by policy. + var resourceUrlWhitelist = ['self'], + resourceUrlBlacklist = []; + + /** + * @ngdoc method + * @name $sceDelegateProvider#resourceUrlWhitelist + * @kind function + * + * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value + * provided. This must be an array or null. A snapshot of this array is used so further + * changes to the array are ignored. + * + * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items + * allowed in this array. + * + * Note: **an empty whitelist array will block all URLs**! + * + * @return {Array} the currently set whitelist array. + * + * The **default value** when no whitelist has been explicitly set is `['self']` allowing only + * same origin resource requests. + * + * @description + * Sets/Gets the whitelist of trusted resource URLs. + */ + this.resourceUrlWhitelist = function (value) { + if (arguments.length) { + resourceUrlWhitelist = adjustMatchers(value); + } + return resourceUrlWhitelist; + }; + + /** + * @ngdoc method + * @name $sceDelegateProvider#resourceUrlBlacklist + * @kind function + * + * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value + * provided. This must be an array or null. A snapshot of this array is used so further + * changes to the array are ignored. + * + * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items + * allowed in this array. + * + * The typical usage for the blacklist is to **block + * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as + * these would otherwise be trusted but actually return content from the redirected domain. + * + * Finally, **the blacklist overrides the whitelist** and has the final say. + * + * @return {Array} the currently set blacklist array. + * + * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there + * is no blacklist.) + * + * @description + * Sets/Gets the blacklist of trusted resource URLs. + */ + + this.resourceUrlBlacklist = function (value) { + if (arguments.length) { + resourceUrlBlacklist = adjustMatchers(value); + } + return resourceUrlBlacklist; + }; + + this.$get = ['$injector', function($injector) { + + var htmlSanitizer = function htmlSanitizer(html) { + throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); + }; + + if ($injector.has('$sanitize')) { + htmlSanitizer = $injector.get('$sanitize'); + } + + + function matchUrl(matcher, parsedUrl) { + if (matcher === 'self') { + return urlIsSameOrigin(parsedUrl); + } else { + // definitely a regex. See adjustMatchers() + return !!matcher.exec(parsedUrl.href); + } + } + + function isResourceUrlAllowedByPolicy(url) { + var parsedUrl = urlResolve(url.toString()); + var i, n, allowed = false; + // Ensure that at least one item from the whitelist allows this url. + for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { + if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { + allowed = true; + break; + } + } + if (allowed) { + // Ensure that no item from the blacklist blocked this url. + for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { + if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { + allowed = false; + break; + } + } + } + return allowed; + } + + function generateHolderType(Base) { + var holderType = function TrustedValueHolderType(trustedValue) { + this.$$unwrapTrustedValue = function() { + return trustedValue; + }; + }; + if (Base) { + holderType.prototype = new Base(); + } + holderType.prototype.valueOf = function sceValueOf() { + return this.$$unwrapTrustedValue(); + }; + holderType.prototype.toString = function sceToString() { + return this.$$unwrapTrustedValue().toString(); + }; + return holderType; + } + + var trustedValueHolderBase = generateHolderType(), + byType = {}; + + byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); + + /** + * @ngdoc method + * @name $sceDelegate#trustAs + * + * @description + * Returns an object that is trusted by angular for use in specified strict + * contextual escaping contexts (such as ng-bind-html, ng-include, any src + * attribute interpolation, any dom event binding attribute interpolation + * such as for onclick, etc.) that uses the provided value. + * See {@link ng.$sce $sce} for enabling strict contextual escaping. + * + * @param {string} type The kind of context in which this value is safe for use. e.g. url, + * resourceUrl, html, js and css. + * @param {*} value The value that that should be considered trusted/safe. + * @returns {*} A value that can be used to stand in for the provided `value` in places + * where Angular expects a $sce.trustAs() return value. + */ + function trustAs(type, trustedValue) { + var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); + if (!Constructor) { + throw $sceMinErr('icontext', + 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', + type, trustedValue); + } + if (trustedValue === null || trustedValue === undefined || trustedValue === '') { + return trustedValue; + } + // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting + // mutable objects, we ensure here that the value passed in is actually a string. + if (typeof trustedValue !== 'string') { + throw $sceMinErr('itype', + 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', + type); + } + return new Constructor(trustedValue); + } + + /** + * @ngdoc method + * @name $sceDelegate#valueOf + * + * @description + * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link + * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. + * + * If the passed parameter is not a value that had been returned by {@link + * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. + * + * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} + * call or anything else. + * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns + * `value` unchanged. + */ + function valueOf(maybeTrusted) { + if (maybeTrusted instanceof trustedValueHolderBase) { + return maybeTrusted.$$unwrapTrustedValue(); + } else { + return maybeTrusted; + } + } + + /** + * @ngdoc method + * @name $sceDelegate#getTrusted + * + * @description + * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and + * returns the originally supplied value if the queried context type is a supertype of the + * created type. If this condition isn't satisfied, throws an exception. + * + * @param {string} type The kind of context in which this value is to be used. + * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} call. + * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. + */ + function getTrusted(type, maybeTrusted) { + if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { + return maybeTrusted; + } + var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); + if (constructor && maybeTrusted instanceof constructor) { + return maybeTrusted.$$unwrapTrustedValue(); + } + // If we get here, then we may only take one of two actions. + // 1. sanitize the value for the requested type, or + // 2. throw an exception. + if (type === SCE_CONTEXTS.RESOURCE_URL) { + if (isResourceUrlAllowedByPolicy(maybeTrusted)) { + return maybeTrusted; + } else { + throw $sceMinErr('insecurl', + 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', + maybeTrusted.toString()); + } + } else if (type === SCE_CONTEXTS.HTML) { + return htmlSanitizer(maybeTrusted); + } + throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); + } + + return { trustAs: trustAs, + getTrusted: getTrusted, + valueOf: valueOf }; + }]; +} + + +/** + * @ngdoc provider + * @name $sceProvider + * @description + * + * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. + * - enable/disable Strict Contextual Escaping (SCE) in a module + * - override the default implementation with a custom delegate + * + * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. + */ + +/* jshint maxlen: false*/ + +/** + * @ngdoc service + * @name $sce + * @kind function + * + * @description + * + * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. + * + * # Strict Contextual Escaping + * + * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain + * contexts to result in a value that is marked as safe to use for that context. One example of + * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer + * to these contexts as privileged or SCE contexts. + * + * As of version 1.2, Angular ships with SCE enabled by default. + * + * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows + * one to execute arbitrary javascript by the use of the expression() syntax. Refer + * to learn more about them. + * You can ensure your document is in standards mode and not quirks mode by adding `` + * to the top of your HTML document. + * + * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for + * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. + * + * Here's an example of a binding in a privileged context: + * + * ``` + * + *
      + * ``` + * + * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE + * disabled, this application allows the user to render arbitrary HTML into the DIV. + * In a more realistic example, one may be rendering user comments, blog articles, etc. via + * bindings. (HTML is just one example of a context where rendering user controlled input creates + * security vulnerabilities.) + * + * For the case of HTML, you might use a library, either on the client side, or on the server side, + * to sanitize unsafe HTML before binding to the value and rendering it in the document. + * + * How would you ensure that every place that used these types of bindings was bound to a value that + * was sanitized by your library (or returned as safe for rendering by your server?) How can you + * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some + * properties/fields and forgot to update the binding to the sanitized value? + * + * To be secure by default, you want to ensure that any such bindings are disallowed unless you can + * determine that something explicitly says it's safe to use a value for binding in that + * context. You can then audit your code (a simple grep would do) to ensure that this is only done + * for those values that you can easily tell are safe - because they were received from your server, + * sanitized by your library, etc. You can organize your codebase to help with this - perhaps + * allowing only the files in a specific directory to do this. Ensuring that the internal API + * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. + * + * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} + * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to + * obtain values that will be accepted by SCE / privileged contexts. + * + * + * ## How does it work? + * + * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted + * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link + * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the + * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. + * + * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link + * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly + * simplified): + * + * ``` + * var ngBindHtmlDirective = ['$sce', function($sce) { + * return function(scope, element, attr) { + * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { + * element.html(value || ''); + * }); + * }; + * }]; + * ``` + * + * ## Impact on loading templates + * + * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as + * `templateUrl`'s specified by {@link guide/directive directives}. + * + * By default, Angular only loads templates from the same domain and protocol as the application + * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or + * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist + * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. + * + * *Please note*: + * The browser's + * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) + * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) + * policy apply in addition to this and may further restrict whether the template is successfully + * loaded. This means that without the right CORS policy, loading templates from a different domain + * won't work on all browsers. Also, loading templates from `file://` URL does not work on some + * browsers. + * + * ## This feels like too much overhead for the developer? + * + * It's important to remember that SCE only applies to interpolation expressions. + * + * If your expressions are constant literals, they're automatically trusted and you don't need to + * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g. + * `
      `) just works. + * + * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them + * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. + * + * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load + * templates in `ng-include` from your application's domain without having to even know about SCE. + * It blocks loading templates from other domains or loading templates over http from an https + * served document. You can change these by setting your own custom {@link + * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link + * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. + * + * This significantly reduces the overhead. It is far easier to pay the small overhead and have an + * application that's secure and can be audited to verify that with much more ease than bolting + * security onto an application later. + * + * + * ## What trusted context types are supported? + * + * | Context | Notes | + * |---------------------|----------------| + * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. | + * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | + * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`
      Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | + * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | + * + * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist}
      + * + * Each element in these arrays must be one of the following: + * + * - **'self'** + * - The special **string**, `'self'`, can be used to match against all URLs of the **same + * domain** as the application document using the **same protocol**. + * - **String** (except the special value `'self'`) + * - The string is matched against the full *normalized / absolute URL* of the resource + * being tested (substring matches are not good enough.) + * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters + * match themselves. + * - `*`: matches zero or more occurrences of any character other than one of the following 6 + * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use + * in a whitelist. + * - `**`: matches zero or more occurrences of *any* character. As such, it's not + * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. + * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might + * not have been the intention.) Its usage at the very end of the path is ok. (e.g. + * http://foo.example.com/templates/**). + * - **RegExp** (*see caveat below*) + * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax + * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to + * accidentally introduce a bug when one updates a complex expression (imho, all regexes should + * have good test coverage.). For instance, the use of `.` in the regex is correct only in a + * small number of cases. A `.` character in the regex used when matching the scheme or a + * subdomain could be matched against a `:` or literal `.` that was likely not intended. It + * is highly recommended to use the string patterns and only fall back to regular expressions + * if they as a last resort. + * - The regular expression must be an instance of RegExp (i.e. not a string.) It is + * matched against the **entire** *normalized / absolute URL* of the resource being tested + * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags + * present on the RegExp (such as multiline, global, ignoreCase) are ignored. + * - If you are generating your JavaScript from some other templating engine (not + * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), + * remember to escape your regular expression (and be aware that you might need more than + * one level of escaping depending on your templating engine and the way you interpolated + * the value.) Do make use of your platform's escaping mechanism as it might be good + * enough before coding your own. e.g. Ruby has + * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) + * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). + * Javascript lacks a similar built in function for escaping. Take a look at Google + * Closure library's [goog.string.regExpEscape(s)]( + * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). + * + * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. + * + * ## Show me an example using SCE. + * + * + * + *
      + *

      + * User comments
      + * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when + * $sanitize is available. If $sanitize isn't available, this results in an error instead of an + * exploit. + *
      + *
      + * {{userComment.name}}: + * + *
      + *
      + *
      + *
      + *
      + * + * + * var mySceApp = angular.module('mySceApp', ['ngSanitize']); + * + * mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { + * var self = this; + * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { + * self.userComments = userComments; + * }); + * self.explicitlyTrustedHtml = $sce.trustAsHtml( + * 'Hover over this text.'); + * }); + * + * + * + * [ + * { "name": "Alice", + * "htmlComment": + * "Is anyone reading this?" + * }, + * { "name": "Bob", + * "htmlComment": "Yes! Am I the only other one?" + * } + * ] + * + * + * + * describe('SCE doc demo', function() { + * it('should sanitize untrusted values', function() { + * expect(element.all(by.css('.htmlComment')).first().getInnerHtml()) + * .toBe('Is anyone reading this?'); + * }); + * + * it('should NOT sanitize explicitly trusted values', function() { + * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( + * 'Hover over this text.'); + * }); + * }); + * + *
      + * + * + * + * ## Can I disable SCE completely? + * + * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits + * for little coding overhead. It will be much harder to take an SCE disabled application and + * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE + * for cases where you have a lot of existing code that was written before SCE was introduced and + * you're migrating them a module at a time. + * + * That said, here's how you can completely disable SCE: + * + * ``` + * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { + * // Completely disable SCE. For demonstration purposes only! + * // Do not use in new projects. + * $sceProvider.enabled(false); + * }); + * ``` + * + */ +/* jshint maxlen: 100 */ + +function $SceProvider() { + var enabled = true; + + /** + * @ngdoc method + * @name $sceProvider#enabled + * @kind function + * + * @param {boolean=} value If provided, then enables/disables SCE. + * @return {boolean} true if SCE is enabled, false otherwise. + * + * @description + * Enables/disables SCE and returns the current value. + */ + this.enabled = function (value) { + if (arguments.length) { + enabled = !!value; + } + return enabled; + }; + + + /* Design notes on the default implementation for SCE. + * + * The API contract for the SCE delegate + * ------------------------------------- + * The SCE delegate object must provide the following 3 methods: + * + * - trustAs(contextEnum, value) + * This method is used to tell the SCE service that the provided value is OK to use in the + * contexts specified by contextEnum. It must return an object that will be accepted by + * getTrusted() for a compatible contextEnum and return this value. + * + * - valueOf(value) + * For values that were not produced by trustAs(), return them as is. For values that were + * produced by trustAs(), return the corresponding input value to trustAs. Basically, if + * trustAs is wrapping the given values into some type, this operation unwraps it when given + * such a value. + * + * - getTrusted(contextEnum, value) + * This function should return the a value that is safe to use in the context specified by + * contextEnum or throw and exception otherwise. + * + * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be + * opaque or wrapped in some holder object. That happens to be an implementation detail. For + * instance, an implementation could maintain a registry of all trusted objects by context. In + * such a case, trustAs() would return the same object that was passed in. getTrusted() would + * return the same object passed in if it was found in the registry under a compatible context or + * throw an exception otherwise. An implementation might only wrap values some of the time based + * on some criteria. getTrusted() might return a value and not throw an exception for special + * constants or objects even if not wrapped. All such implementations fulfill this contract. + * + * + * A note on the inheritance model for SCE contexts + * ------------------------------------------------ + * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This + * is purely an implementation details. + * + * The contract is simply this: + * + * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) + * will also succeed. + * + * Inheritance happens to capture this in a natural way. In some future, we + * may not use inheritance anymore. That is OK because no code outside of + * sce.js and sceSpecs.js would need to be aware of this detail. + */ + + this.$get = ['$parse', '$sniffer', '$sceDelegate', function( + $parse, $sniffer, $sceDelegate) { + // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows + // the "expression(javascript expression)" syntax which is insecure. + if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) { + throw $sceMinErr('iequirks', + 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' + + 'mode. You can fix this by adding the text to the top of your HTML ' + + 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); + } + + var sce = shallowCopy(SCE_CONTEXTS); + + /** + * @ngdoc method + * @name $sce#isEnabled + * @kind function + * + * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you + * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. + * + * @description + * Returns a boolean indicating if SCE is enabled. + */ + sce.isEnabled = function () { + return enabled; + }; + sce.trustAs = $sceDelegate.trustAs; + sce.getTrusted = $sceDelegate.getTrusted; + sce.valueOf = $sceDelegate.valueOf; + + if (!enabled) { + sce.trustAs = sce.getTrusted = function(type, value) { return value; }; + sce.valueOf = identity; + } + + /** + * @ngdoc method + * @name $sce#parseAs + * + * @description + * Converts Angular {@link guide/expression expression} into a function. This is like {@link + * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it + * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, + * *result*)} + * + * @param {string} type The kind of SCE context in which this result will be used. + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + sce.parseAs = function sceParseAs(type, expr) { + var parsed = $parse(expr); + if (parsed.literal && parsed.constant) { + return parsed; + } else { + return function sceParseAsTrusted(self, locals) { + return sce.getTrusted(type, parsed(self, locals)); + }; + } + }; + + /** + * @ngdoc method + * @name $sce#trustAs + * + * @description + * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, + * returns an object that is trusted by angular for use in specified strict contextual + * escaping contexts (such as ng-bind-html, ng-include, any src attribute + * interpolation, any dom event binding attribute interpolation such as for onclick, etc.) + * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual + * escaping. + * + * @param {string} type The kind of context in which this value is safe for use. e.g. url, + * resource_url, html, js and css. + * @param {*} value The value that that should be considered trusted/safe. + * @returns {*} A value that can be used to stand in for the provided `value` in places + * where Angular expects a $sce.trustAs() return value. + */ + + /** + * @ngdoc method + * @name $sce#trustAsHtml + * + * @description + * Shorthand method. `$sce.trustAsHtml(value)` → + * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml + * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name $sce#trustAsUrl + * + * @description + * Shorthand method. `$sce.trustAsUrl(value)` → + * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl + * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name $sce#trustAsResourceUrl + * + * @description + * Shorthand method. `$sce.trustAsResourceUrl(value)` → + * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the return + * value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name $sce#trustAsJs + * + * @description + * Shorthand method. `$sce.trustAsJs(value)` → + * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} + * + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs + * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) + */ + + /** + * @ngdoc method + * @name $sce#getTrusted + * + * @description + * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, + * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the + * originally supplied value if the queried context type is a supertype of the created type. + * If this condition isn't satisfied, throws an exception. + * + * @param {string} type The kind of context in which this value is to be used. + * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} + * call. + * @returns {*} The value the was originally provided to + * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context. + * Otherwise, throws an exception. + */ + + /** + * @ngdoc method + * @name $sce#getTrustedHtml + * + * @description + * Shorthand method. `$sce.getTrustedHtml(value)` → + * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` + */ + + /** + * @ngdoc method + * @name $sce#getTrustedCss + * + * @description + * Shorthand method. `$sce.getTrustedCss(value)` → + * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` + */ + + /** + * @ngdoc method + * @name $sce#getTrustedUrl + * + * @description + * Shorthand method. `$sce.getTrustedUrl(value)` → + * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` + */ + + /** + * @ngdoc method + * @name $sce#getTrustedResourceUrl + * + * @description + * Shorthand method. `$sce.getTrustedResourceUrl(value)` → + * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} + * + * @param {*} value The value to pass to `$sceDelegate.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` + */ + + /** + * @ngdoc method + * @name $sce#getTrustedJs + * + * @description + * Shorthand method. `$sce.getTrustedJs(value)` → + * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` + */ + + /** + * @ngdoc method + * @name $sce#parseAsHtml + * + * @description + * Shorthand method. `$sce.parseAsHtml(expression string)` → + * {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name $sce#parseAsCss + * + * @description + * Shorthand method. `$sce.parseAsCss(value)` → + * {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name $sce#parseAsUrl + * + * @description + * Shorthand method. `$sce.parseAsUrl(value)` → + * {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name $sce#parseAsResourceUrl + * + * @description + * Shorthand method. `$sce.parseAsResourceUrl(value)` → + * {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + /** + * @ngdoc method + * @name $sce#parseAsJs + * + * @description + * Shorthand method. `$sce.parseAsJs(value)` → + * {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`} + * + * @param {string} expression String expression to compile. + * @returns {function(context, locals)} a function which represents the compiled expression: + * + * * `context` – `{object}` – an object against which any expressions embedded in the strings + * are evaluated against (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + + // Shorthand delegations. + var parse = sce.parseAs, + getTrusted = sce.getTrusted, + trustAs = sce.trustAs; + + forEach(SCE_CONTEXTS, function (enumValue, name) { + var lName = lowercase(name); + sce[camelCase("parse_as_" + lName)] = function (expr) { + return parse(enumValue, expr); + }; + sce[camelCase("get_trusted_" + lName)] = function (value) { + return getTrusted(enumValue, value); + }; + sce[camelCase("trust_as_" + lName)] = function (value) { + return trustAs(enumValue, value); + }; + }); + + return sce; + }]; +} + +/** + * !!! This is an undocumented "private" service !!! + * + * @name $sniffer + * @requires $window + * @requires $document + * + * @property {boolean} history Does the browser support html5 history api ? + * @property {boolean} hashchange Does the browser support hashchange event ? + * @property {boolean} transitions Does the browser support CSS transition events ? + * @property {boolean} animations Does the browser support CSS animation events ? + * + * @description + * This is very simple implementation of testing browser's features. + */ +function $SnifferProvider() { + this.$get = ['$window', '$document', function($window, $document) { + var eventSupport = {}, + android = + int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), + boxee = /Boxee/i.test(($window.navigator || {}).userAgent), + document = $document[0] || {}, + documentMode = document.documentMode, + vendorPrefix, + vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, + bodyStyle = document.body && document.body.style, + transitions = false, + animations = false, + match; + + if (bodyStyle) { + for(var prop in bodyStyle) { + if(match = vendorRegex.exec(prop)) { + vendorPrefix = match[0]; + vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1); + break; + } + } + + if(!vendorPrefix) { + vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; + } + + transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); + animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); + + if (android && (!transitions||!animations)) { + transitions = isString(document.body.style.webkitTransition); + animations = isString(document.body.style.webkitAnimation); + } + } + + + return { + // Android has history.pushState, but it does not update location correctly + // so let's not use the history API at all. + // http://code.google.com/p/android/issues/detail?id=17471 + // https://github.com/angular/angular.js/issues/904 + + // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has + // so let's not use the history API also + // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined + // jshint -W018 + history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), + // jshint +W018 + hashchange: 'onhashchange' in $window && + // IE8 compatible mode lies + (!documentMode || documentMode > 7), + hasEvent: function(event) { + // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have + // it. In particular the event is not fired when backspace or delete key are pressed or + // when cut operation is performed. + if (event == 'input' && msie == 9) return false; + + if (isUndefined(eventSupport[event])) { + var divElm = document.createElement('div'); + eventSupport[event] = 'on' + event in divElm; + } + + return eventSupport[event]; + }, + csp: csp(), + vendorPrefix: vendorPrefix, + transitions : transitions, + animations : animations, + android: android, + msie : msie, + msieDocumentMode: documentMode + }; + }]; +} + +function $TimeoutProvider() { + this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler', + function($rootScope, $browser, $q, $exceptionHandler) { + var deferreds = {}; + + + /** + * @ngdoc service + * @name $timeout + * + * @description + * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch + * block and delegates any exceptions to + * {@link ng.$exceptionHandler $exceptionHandler} service. + * + * The return value of registering a timeout function is a promise, which will be resolved when + * the timeout is reached and the timeout function is executed. + * + * To cancel a timeout request, call `$timeout.cancel(promise)`. + * + * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to + * synchronously flush the queue of deferred functions. + * + * @param {function()} fn A function, whose execution should be delayed. + * @param {number=} [delay=0] Delay in milliseconds. + * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise + * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. + * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this + * promise will be resolved with is the return value of the `fn` function. + * + */ + function timeout(fn, delay, invokeApply) { + var deferred = $q.defer(), + promise = deferred.promise, + skipApply = (isDefined(invokeApply) && !invokeApply), + timeoutId; + + timeoutId = $browser.defer(function() { + try { + deferred.resolve(fn()); + } catch(e) { + deferred.reject(e); + $exceptionHandler(e); + } + finally { + delete deferreds[promise.$$timeoutId]; + } + + if (!skipApply) $rootScope.$apply(); + }, delay); + + promise.$$timeoutId = timeoutId; + deferreds[timeoutId] = deferred; + + return promise; + } + + + /** + * @ngdoc method + * @name $timeout#cancel + * + * @description + * Cancels a task associated with the `promise`. As a result of this, the promise will be + * resolved with a rejection. + * + * @param {Promise=} promise Promise returned by the `$timeout` function. + * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully + * canceled. + */ + timeout.cancel = function(promise) { + if (promise && promise.$$timeoutId in deferreds) { + deferreds[promise.$$timeoutId].reject('canceled'); + delete deferreds[promise.$$timeoutId]; + return $browser.defer.cancel(promise.$$timeoutId); + } + return false; + }; + + return timeout; + }]; +} + +// NOTE: The usage of window and document instead of $window and $document here is +// deliberate. This service depends on the specific behavior of anchor nodes created by the +// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and +// cause us to break tests. In addition, when the browser resolves a URL for XHR, it +// doesn't know about mocked locations and resolves URLs to the real document - which is +// exactly the behavior needed here. There is little value is mocking these out for this +// service. +var urlParsingNode = document.createElement("a"); +var originUrl = urlResolve(window.location.href, true); + + +/** + * + * Implementation Notes for non-IE browsers + * ---------------------------------------- + * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, + * results both in the normalizing and parsing of the URL. Normalizing means that a relative + * URL will be resolved into an absolute URL in the context of the application document. + * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related + * properties are all populated to reflect the normalized URL. This approach has wide + * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See + * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html + * + * Implementation Notes for IE + * --------------------------- + * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other + * browsers. However, the parsed components will not be set if the URL assigned did not specify + * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We + * work around that by performing the parsing in a 2nd step by taking a previously normalized + * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the + * properties such as protocol, hostname, port, etc. + * + * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one + * uses the inner HTML approach to assign the URL as part of an HTML snippet - + * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. + * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. + * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that + * method and IE < 8 is unsupported. + * + * References: + * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement + * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html + * http://url.spec.whatwg.org/#urlutils + * https://github.com/angular/angular.js/pull/2902 + * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ + * + * @kind function + * @param {string} url The URL to be parsed. + * @description Normalizes and parses a URL. + * @returns {object} Returns the normalized URL as a dictionary. + * + * | member name | Description | + * |---------------|----------------| + * | href | A normalized version of the provided URL if it was not an absolute URL | + * | protocol | The protocol including the trailing colon | + * | host | The host and port (if the port is non-default) of the normalizedUrl | + * | search | The search params, minus the question mark | + * | hash | The hash string, minus the hash symbol + * | hostname | The hostname + * | port | The port, without ":" + * | pathname | The pathname, beginning with "/" + * + */ +function urlResolve(url, base) { + var href = url; + + if (msie) { + // Normalize before parse. Refer Implementation Notes on why this is + // done in two steps on IE. + urlParsingNode.setAttribute("href", href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') + ? urlParsingNode.pathname + : '/' + urlParsingNode.pathname + }; +} + +/** + * Parse a request URL and determine whether this is a same-origin request as the application document. + * + * @param {string|object} requestUrl The url of the request as a string that will be resolved + * or a parsed URL object. + * @returns {boolean} Whether the request is for the same origin as the application document. + */ +function urlIsSameOrigin(requestUrl) { + var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl; + return (parsed.protocol === originUrl.protocol && + parsed.host === originUrl.host); +} + +/** + * @ngdoc service + * @name $window + * + * @description + * A reference to the browser's `window` object. While `window` + * is globally available in JavaScript, it causes testability problems, because + * it is a global variable. In angular we always refer to it through the + * `$window` service, so it may be overridden, removed or mocked for testing. + * + * Expressions, like the one defined for the `ngClick` directive in the example + * below, are evaluated with respect to the current scope. Therefore, there is + * no risk of inadvertently coding in a dependency on a global value in such an + * expression. + * + * @example + + + +
      + + +
      +
      + + it('should display the greeting in the input box', function() { + element(by.model('greeting')).sendKeys('Hello, E2E Tests'); + // If we click the button it will block the test runner + // element(':button').click(); + }); + +
      + */ +function $WindowProvider(){ + this.$get = valueFn(window); +} + +/* global currencyFilter: true, + dateFilter: true, + filterFilter: true, + jsonFilter: true, + limitToFilter: true, + lowercaseFilter: true, + numberFilter: true, + orderByFilter: true, + uppercaseFilter: true, + */ + +/** + * @ngdoc provider + * @name $filterProvider + * @description + * + * Filters are just functions which transform input to an output. However filters need to be + * Dependency Injected. To achieve this a filter definition consists of a factory function which is + * annotated with dependencies and is responsible for creating a filter function. + * + * ```js + * // Filter registration + * function MyModule($provide, $filterProvider) { + * // create a service to demonstrate injection (not always needed) + * $provide.value('greet', function(name){ + * return 'Hello ' + name + '!'; + * }); + * + * // register a filter factory which uses the + * // greet service to demonstrate DI. + * $filterProvider.register('greet', function(greet){ + * // return the filter function which uses the greet service + * // to generate salutation + * return function(text) { + * // filters need to be forgiving so check input validity + * return text && greet(text) || text; + * }; + * }); + * } + * ``` + * + * The filter function is registered with the `$injector` under the filter name suffix with + * `Filter`. + * + * ```js + * it('should be the same instance', inject( + * function($filterProvider) { + * $filterProvider.register('reverse', function(){ + * return ...; + * }); + * }, + * function($filter, reverseFilter) { + * expect($filter('reverse')).toBe(reverseFilter); + * }); + * ``` + * + * + * For more information about how angular filters work, and how to create your own filters, see + * {@link guide/filter Filters} in the Angular Developer Guide. + */ + +/** + * @ngdoc service + * @name $filter + * @kind function + * @description + * Filters are used for formatting data displayed to the user. + * + * The general syntax in templates is as follows: + * + * {{ expression [| filter_name[:parameter_value] ... ] }} + * + * @param {String} name Name of the filter function to retrieve + * @return {Function} the filter function + * @example + + +
      +

      {{ originalText }}

      +

      {{ filteredText }}

      +
      +
      + + + angular.module('filterExample', []) + .controller('MainCtrl', function($scope, $filter) { + $scope.originalText = 'hello'; + $scope.filteredText = $filter('uppercase')($scope.originalText); + }); + +
      + */ +$FilterProvider.$inject = ['$provide']; +function $FilterProvider($provide) { + var suffix = 'Filter'; + + /** + * @ngdoc method + * @name $filterProvider#register + * @param {string|Object} name Name of the filter function, or an object map of filters where + * the keys are the filter names and the values are the filter factories. + * @returns {Object} Registered filter instance, or if a map of filters was provided then a map + * of the registered filter instances. + */ + function register(name, factory) { + if(isObject(name)) { + var filters = {}; + forEach(name, function(filter, key) { + filters[key] = register(key, filter); + }); + return filters; + } else { + return $provide.factory(name + suffix, factory); + } + } + this.register = register; + + this.$get = ['$injector', function($injector) { + return function(name) { + return $injector.get(name + suffix); + }; + }]; + + //////////////////////////////////////// + + /* global + currencyFilter: false, + dateFilter: false, + filterFilter: false, + jsonFilter: false, + limitToFilter: false, + lowercaseFilter: false, + numberFilter: false, + orderByFilter: false, + uppercaseFilter: false, + */ + + register('currency', currencyFilter); + register('date', dateFilter); + register('filter', filterFilter); + register('json', jsonFilter); + register('limitTo', limitToFilter); + register('lowercase', lowercaseFilter); + register('number', numberFilter); + register('orderBy', orderByFilter); + register('uppercase', uppercaseFilter); +} + +/** + * @ngdoc filter + * @name filter + * @kind function + * + * @description + * Selects a subset of items from `array` and returns it as a new array. + * + * @param {Array} array The source array. + * @param {string|Object|function()} expression The predicate to be used for selecting items from + * `array`. + * + * Can be one of: + * + * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against + * the contents of the `array`. All strings or objects with string properties in `array` that contain this string + * will be returned. The predicate can be negated by prefixing the string with `!`. + * + * - `Object`: A pattern object can be used to filter specific properties on objects contained + * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items + * which have property `name` containing "M" and property `phone` containing "1". A special + * property name `$` can be used (as in `{$:"text"}`) to accept a match against any + * property of the object. That's equivalent to the simple substring match with a `string` + * as described above. The predicate can be negated by prefixing the string with `!`. + * For Example `{name: "!M"}` predicate will return an array of items which have property `name` + * not containing "M". + * + * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is + * called for each element of `array`. The final result is an array of those elements that + * the predicate returned true for. + * + * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in + * determining if the expected value (from the filter expression) and actual value (from + * the object in the array) should be considered a match. + * + * Can be one of: + * + * - `function(actual, expected)`: + * The function will be given the object value and the predicate value to compare and + * should return true if the item should be included in filtered result. + * + * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. + * this is essentially strict comparison of expected and actual. + * + * - `false|undefined`: A short hand for a function which will look for a substring match in case + * insensitive way. + * + * @example + + +
      + + Search: + + + + + + +
      NamePhone
      {{friend.name}}{{friend.phone}}
      +
      + Any:
      + Name only
      + Phone only
      + Equality
      + + + + + + +
      NamePhone
      {{friendObj.name}}{{friendObj.phone}}
      +
      + + var expectFriendNames = function(expectedNames, key) { + element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { + arr.forEach(function(wd, i) { + expect(wd.getText()).toMatch(expectedNames[i]); + }); + }); + }; + + it('should search across all fields when filtering with a string', function() { + var searchText = element(by.model('searchText')); + searchText.clear(); + searchText.sendKeys('m'); + expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); + + searchText.clear(); + searchText.sendKeys('76'); + expectFriendNames(['John', 'Julie'], 'friend'); + }); + + it('should search in specific fields when filtering with a predicate object', function() { + var searchAny = element(by.model('search.$')); + searchAny.clear(); + searchAny.sendKeys('i'); + expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); + }); + it('should use a equal comparison when comparator is true', function() { + var searchName = element(by.model('search.name')); + var strict = element(by.model('strict')); + searchName.clear(); + searchName.sendKeys('Julie'); + strict.click(); + expectFriendNames(['Julie'], 'friendObj'); + }); + +
      + */ +function filterFilter() { + return function(array, expression, comparator) { + if (!isArray(array)) return array; + + var comparatorType = typeof(comparator), + predicates = []; + + predicates.check = function(value) { + for (var j = 0; j < predicates.length; j++) { + if(!predicates[j](value)) { + return false; + } + } + return true; + }; + + if (comparatorType !== 'function') { + if (comparatorType === 'boolean' && comparator) { + comparator = function(obj, text) { + return angular.equals(obj, text); + }; + } else { + comparator = function(obj, text) { + if (obj && text && typeof obj === 'object' && typeof text === 'object') { + for (var objKey in obj) { + if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) && + comparator(obj[objKey], text[objKey])) { + return true; + } + } + return false; + } + text = (''+text).toLowerCase(); + return (''+obj).toLowerCase().indexOf(text) > -1; + }; + } + } + + var search = function(obj, text){ + if (typeof text === 'string' && text.charAt(0) === '!') { + return !search(obj, text.substr(1)); + } + switch (typeof obj) { + case 'boolean': + case 'number': + case 'string': + return comparator(obj, text); + case 'object': + switch (typeof text) { + case 'object': + return comparator(obj, text); + default: + for ( var objKey in obj) { + if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) { + return true; + } + } + break; + } + return false; + case 'array': + for ( var i = 0; i < obj.length; i++) { + if (search(obj[i], text)) { + return true; + } + } + return false; + default: + return false; + } + }; + switch (typeof expression) { + case 'boolean': + case 'number': + case 'string': + // Set up expression object and fall through + expression = {$:expression}; + // jshint -W086 + case 'object': + // jshint +W086 + for (var key in expression) { + (function(path) { + if (typeof expression[path] === 'undefined') return; + predicates.push(function(value) { + return search(path == '$' ? value : (value && value[path]), expression[path]); + }); + })(key); + } + break; + case 'function': + predicates.push(expression); + break; + default: + return array; + } + var filtered = []; + for ( var j = 0; j < array.length; j++) { + var value = array[j]; + if (predicates.check(value)) { + filtered.push(value); + } + } + return filtered; + }; +} + +/** + * @ngdoc filter + * @name currency + * @kind function + * + * @description + * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default + * symbol for current locale is used. + * + * @param {number} amount Input to filter. + * @param {string=} symbol Currency symbol or identifier to be displayed. + * @returns {string} Formatted number. + * + * + * @example + + + +
      +
      + default currency symbol ($): {{amount | currency}}
      + custom currency identifier (USD$): {{amount | currency:"USD$"}} +
      +
      + + it('should init with 1234.56', function() { + expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); + expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('USD$1,234.56'); + }); + it('should update', function() { + if (browser.params.browser == 'safari') { + // Safari does not understand the minus key. See + // https://github.com/angular/protractor/issues/481 + return; + } + element(by.model('amount')).clear(); + element(by.model('amount')).sendKeys('-1234'); + expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); + expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)'); + }); + +
      + */ +currencyFilter.$inject = ['$locale']; +function currencyFilter($locale) { + var formats = $locale.NUMBER_FORMATS; + return function(amount, currencySymbol){ + if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM; + return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2). + replace(/\u00A4/g, currencySymbol); + }; +} + +/** + * @ngdoc filter + * @name number + * @kind function + * + * @description + * Formats a number as text. + * + * If the input is not a number an empty string is returned. + * + * @param {number|string} number Number to format. + * @param {(number|string)=} fractionSize Number of decimal places to round the number to. + * If this is not provided then the fraction size is computed from the current locale's number + * formatting pattern. In the case of the default locale, it will be 3. + * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. + * + * @example + + + +
      + Enter number:
      + Default formatting: {{val | number}}
      + No fractions: {{val | number:0}}
      + Negative number: {{-val | number:4}} +
      +
      + + it('should format numbers', function() { + expect(element(by.id('number-default')).getText()).toBe('1,234.568'); + expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); + expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); + }); + + it('should update', function() { + element(by.model('val')).clear(); + element(by.model('val')).sendKeys('3374.333'); + expect(element(by.id('number-default')).getText()).toBe('3,374.333'); + expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); + expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); + }); + +
      + */ + + +numberFilter.$inject = ['$locale']; +function numberFilter($locale) { + var formats = $locale.NUMBER_FORMATS; + return function(number, fractionSize) { + return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, + fractionSize); + }; +} + +var DECIMAL_SEP = '.'; +function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { + if (number == null || !isFinite(number) || isObject(number)) return ''; + + var isNegative = number < 0; + number = Math.abs(number); + var numStr = number + '', + formatedText = '', + parts = []; + + var hasExponent = false; + if (numStr.indexOf('e') !== -1) { + var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); + if (match && match[2] == '-' && match[3] > fractionSize + 1) { + numStr = '0'; + number = 0; + } else { + formatedText = numStr; + hasExponent = true; + } + } + + if (!hasExponent) { + var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; + + // determine fractionSize if it is not specified + if (isUndefined(fractionSize)) { + fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); + } + + // safely round numbers in JS without hitting imprecisions of floating-point arithmetics + // inspired by: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round + number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize); + + if (number === 0) { + isNegative = false; + } + + var fraction = ('' + number).split(DECIMAL_SEP); + var whole = fraction[0]; + fraction = fraction[1] || ''; + + var i, pos = 0, + lgroup = pattern.lgSize, + group = pattern.gSize; + + if (whole.length >= (lgroup + group)) { + pos = whole.length - lgroup; + for (i = 0; i < pos; i++) { + if ((pos - i)%group === 0 && i !== 0) { + formatedText += groupSep; + } + formatedText += whole.charAt(i); + } + } + + for (i = pos; i < whole.length; i++) { + if ((whole.length - i)%lgroup === 0 && i !== 0) { + formatedText += groupSep; + } + formatedText += whole.charAt(i); + } + + // format fraction part. + while(fraction.length < fractionSize) { + fraction += '0'; + } + + if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); + } else { + + if (fractionSize > 0 && number > -1 && number < 1) { + formatedText = number.toFixed(fractionSize); + } + } + + parts.push(isNegative ? pattern.negPre : pattern.posPre); + parts.push(formatedText); + parts.push(isNegative ? pattern.negSuf : pattern.posSuf); + return parts.join(''); +} + +function padNumber(num, digits, trim) { + var neg = ''; + if (num < 0) { + neg = '-'; + num = -num; + } + num = '' + num; + while(num.length < digits) num = '0' + num; + if (trim) + num = num.substr(num.length - digits); + return neg + num; +} + + +function dateGetter(name, size, offset, trim) { + offset = offset || 0; + return function(date) { + var value = date['get' + name](); + if (offset > 0 || value > -offset) + value += offset; + if (value === 0 && offset == -12 ) value = 12; + return padNumber(value, size, trim); + }; +} + +function dateStrGetter(name, shortForm) { + return function(date, formats) { + var value = date['get' + name](); + var get = uppercase(shortForm ? ('SHORT' + name) : name); + + return formats[get][value]; + }; +} + +function timeZoneGetter(date) { + var zone = -1 * date.getTimezoneOffset(); + var paddedZone = (zone >= 0) ? "+" : ""; + + paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + + padNumber(Math.abs(zone % 60), 2); + + return paddedZone; +} + +function ampmGetter(date, formats) { + return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; +} + +var DATE_FORMATS = { + yyyy: dateGetter('FullYear', 4), + yy: dateGetter('FullYear', 2, 0, true), + y: dateGetter('FullYear', 1), + MMMM: dateStrGetter('Month'), + MMM: dateStrGetter('Month', true), + MM: dateGetter('Month', 2, 1), + M: dateGetter('Month', 1, 1), + dd: dateGetter('Date', 2), + d: dateGetter('Date', 1), + HH: dateGetter('Hours', 2), + H: dateGetter('Hours', 1), + hh: dateGetter('Hours', 2, -12), + h: dateGetter('Hours', 1, -12), + mm: dateGetter('Minutes', 2), + m: dateGetter('Minutes', 1), + ss: dateGetter('Seconds', 2), + s: dateGetter('Seconds', 1), + // while ISO 8601 requires fractions to be prefixed with `.` or `,` + // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions + sss: dateGetter('Milliseconds', 3), + EEEE: dateStrGetter('Day'), + EEE: dateStrGetter('Day', true), + a: ampmGetter, + Z: timeZoneGetter +}; + +var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, + NUMBER_STRING = /^\-?\d+$/; + +/** + * @ngdoc filter + * @name date + * @kind function + * + * @description + * Formats `date` to a string based on the requested `format`. + * + * `format` string can be composed of the following elements: + * + * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) + * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) + * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) + * * `'MMMM'`: Month in year (January-December) + * * `'MMM'`: Month in year (Jan-Dec) + * * `'MM'`: Month in year, padded (01-12) + * * `'M'`: Month in year (1-12) + * * `'dd'`: Day in month, padded (01-31) + * * `'d'`: Day in month (1-31) + * * `'EEEE'`: Day in Week,(Sunday-Saturday) + * * `'EEE'`: Day in Week, (Sun-Sat) + * * `'HH'`: Hour in day, padded (00-23) + * * `'H'`: Hour in day (0-23) + * * `'hh'`: Hour in am/pm, padded (01-12) + * * `'h'`: Hour in am/pm, (1-12) + * * `'mm'`: Minute in hour, padded (00-59) + * * `'m'`: Minute in hour (0-59) + * * `'ss'`: Second in minute, padded (00-59) + * * `'s'`: Second in minute (0-59) + * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999) + * * `'a'`: am/pm marker + * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) + * + * `format` string can also be one of the following predefined + * {@link guide/i18n localizable formats}: + * + * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale + * (e.g. Sep 3, 2010 12:05:08 pm) + * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) + * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale + * (e.g. Friday, September 3, 2010) + * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) + * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) + * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) + * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) + * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm) + * + * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g. + * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence + * (e.g. `"h 'o''clock'"`). + * + * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or + * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its + * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is + * specified in the string input, the time is considered to be in the local timezone. + * @param {string=} format Formatting rules (see Description). If not specified, + * `mediumDate` is used. + * @returns {string} Formatted string or the input if input is not recognized as date/millis. + * + * @example + + + {{1288323623006 | date:'medium'}}: + {{1288323623006 | date:'medium'}}
      + {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}: + {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}
      + {{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}: + {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
      + {{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}: + {{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}
      +
      + + it('should format date', function() { + expect(element(by.binding("1288323623006 | date:'medium'")).getText()). + toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); + expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). + toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); + expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). + toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); + expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()). + toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/); + }); + +
      + */ +dateFilter.$inject = ['$locale']; +function dateFilter($locale) { + + + var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; + // 1 2 3 4 5 6 7 8 9 10 11 + function jsonStringToDate(string) { + var match; + if (match = string.match(R_ISO8601_STR)) { + var date = new Date(0), + tzHour = 0, + tzMin = 0, + dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, + timeSetter = match[8] ? date.setUTCHours : date.setHours; + + if (match[9]) { + tzHour = int(match[9] + match[10]); + tzMin = int(match[9] + match[11]); + } + dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); + var h = int(match[4]||0) - tzHour; + var m = int(match[5]||0) - tzMin; + var s = int(match[6]||0); + var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000); + timeSetter.call(date, h, m, s, ms); + return date; + } + return string; + } + + + return function(date, format) { + var text = '', + parts = [], + fn, match; + + format = format || 'mediumDate'; + format = $locale.DATETIME_FORMATS[format] || format; + if (isString(date)) { + date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date); + } + + if (isNumber(date)) { + date = new Date(date); + } + + if (!isDate(date)) { + return date; + } + + while(format) { + match = DATE_FORMATS_SPLIT.exec(format); + if (match) { + parts = concat(parts, match, 1); + format = parts.pop(); + } else { + parts.push(format); + format = null; + } + } + + forEach(parts, function(value){ + fn = DATE_FORMATS[value]; + text += fn ? fn(date, $locale.DATETIME_FORMATS) + : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); + }); + + return text; + }; +} + + +/** + * @ngdoc filter + * @name json + * @kind function + * + * @description + * Allows you to convert a JavaScript object into JSON string. + * + * This filter is mostly useful for debugging. When using the double curly {{value}} notation + * the binding is automatically converted to JSON. + * + * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. + * @returns {string} JSON string. + * + * + * @example + + +
      {{ {'name':'value'} | json }}
      +
      + + it('should jsonify filtered objects', function() { + expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/); + }); + +
      + * + */ +function jsonFilter() { + return function(object) { + return toJson(object, true); + }; +} + + +/** + * @ngdoc filter + * @name lowercase + * @kind function + * @description + * Converts string to lowercase. + * @see angular.lowercase + */ +var lowercaseFilter = valueFn(lowercase); + + +/** + * @ngdoc filter + * @name uppercase + * @kind function + * @description + * Converts string to uppercase. + * @see angular.uppercase + */ +var uppercaseFilter = valueFn(uppercase); + +/** + * @ngdoc filter + * @name limitTo + * @kind function + * + * @description + * Creates a new array or string containing only a specified number of elements. The elements + * are taken from either the beginning or the end of the source array or string, as specified by + * the value and sign (positive or negative) of `limit`. + * + * @param {Array|string} input Source array or string to be limited. + * @param {string|number} limit The length of the returned array or string. If the `limit` number + * is positive, `limit` number of items from the beginning of the source array/string are copied. + * If the number is negative, `limit` number of items from the end of the source array/string + * are copied. The `limit` will be trimmed if it exceeds `array.length` + * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array + * had less than `limit` elements. + * + * @example + + + +
      + Limit {{numbers}} to: +

      Output numbers: {{ numbers | limitTo:numLimit }}

      + Limit {{letters}} to: +

      Output letters: {{ letters | limitTo:letterLimit }}

      +
      +
      + + var numLimitInput = element(by.model('numLimit')); + var letterLimitInput = element(by.model('letterLimit')); + var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); + var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); + + it('should limit the number array to first three items', function() { + expect(numLimitInput.getAttribute('value')).toBe('3'); + expect(letterLimitInput.getAttribute('value')).toBe('3'); + expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); + expect(limitedLetters.getText()).toEqual('Output letters: abc'); + }); + + // There is a bug in safari and protractor that doesn't like the minus key + // it('should update the output when -3 is entered', function() { + // numLimitInput.clear(); + // numLimitInput.sendKeys('-3'); + // letterLimitInput.clear(); + // letterLimitInput.sendKeys('-3'); + // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); + // expect(limitedLetters.getText()).toEqual('Output letters: ghi'); + // }); + + it('should not exceed the maximum size of input array', function() { + numLimitInput.clear(); + numLimitInput.sendKeys('100'); + letterLimitInput.clear(); + letterLimitInput.sendKeys('100'); + expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); + expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); + }); + +
      + */ +function limitToFilter(){ + return function(input, limit) { + if (!isArray(input) && !isString(input)) return input; + + if (Math.abs(Number(limit)) === Infinity) { + limit = Number(limit); + } else { + limit = int(limit); + } + + if (isString(input)) { + //NaN check on limit + if (limit) { + return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length); + } else { + return ""; + } + } + + var out = [], + i, n; + + // if abs(limit) exceeds maximum length, trim it + if (limit > input.length) + limit = input.length; + else if (limit < -input.length) + limit = -input.length; + + if (limit > 0) { + i = 0; + n = limit; + } else { + i = input.length + limit; + n = input.length; + } + + for (; i=} expression A predicate to be + * used by the comparator to determine the order of elements. + * + * Can be one of: + * + * - `function`: Getter function. The result of this function will be sorted using the + * `<`, `=`, `>` operator. + * - `string`: An Angular expression. The result of this expression is used to compare elements + * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by + * 3 first characters of a property called `name`). The result of a constant expression + * is interpreted as a property name to be used in comparisons (for example `"special name"` + * to sort object by the value of their `special name` property). An expression can be + * optionally prefixed with `+` or `-` to control ascending or descending sort order + * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array + * element itself is used to compare where sorting. + * - `Array`: An array of function or string predicates. The first predicate in the array + * is used for sorting, but when two items are equivalent, the next predicate is used. + * + * If the predicate is missing or empty then it defaults to `'+'`. + * + * @param {boolean=} reverse Reverse the order of the array. + * @returns {Array} Sorted copy of the source array. + * + * @example + + + +
      +
      Sorting predicate = {{predicate}}; reverse = {{reverse}}
      +
      + [ unsorted ] + + + + + + + + + + + +
      Name + (^)Phone NumberAge
      {{friend.name}}{{friend.phone}}{{friend.age}}
      +
      +
      +
      + * + * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the + * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the + * desired parameters. + * + * Example: + * + * @example + + +
      + + + + + + + + + + + +
      Name + (^)Phone NumberAge
      {{friend.name}}{{friend.phone}}{{friend.age}}
      +
      +
      + + + angular.module('orderByExample', []) + .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) { + var orderBy = $filter('orderBy'); + $scope.friends = [ + { name: 'John', phone: '555-1212', age: 10 }, + { name: 'Mary', phone: '555-9876', age: 19 }, + { name: 'Mike', phone: '555-4321', age: 21 }, + { name: 'Adam', phone: '555-5678', age: 35 }, + { name: 'Julie', phone: '555-8765', age: 29 } + ]; + $scope.order = function(predicate, reverse) { + $scope.friends = orderBy($scope.friends, predicate, reverse); + }; + $scope.order('-age',false); + }]); + +
      + */ +orderByFilter.$inject = ['$parse']; +function orderByFilter($parse){ + return function(array, sortPredicate, reverseOrder) { + if (!(isArrayLike(array))) return array; + sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate]; + if (sortPredicate.length === 0) { sortPredicate = ['+']; } + sortPredicate = map(sortPredicate, function(predicate){ + var descending = false, get = predicate || identity; + if (isString(predicate)) { + if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { + descending = predicate.charAt(0) == '-'; + predicate = predicate.substring(1); + } + if ( predicate === '' ) { + // Effectively no predicate was passed so we compare identity + return reverseComparator(function(a,b) { + return compare(a, b); + }, descending); + } + get = $parse(predicate); + if (get.constant) { + var key = get(); + return reverseComparator(function(a,b) { + return compare(a[key], b[key]); + }, descending); + } + } + return reverseComparator(function(a,b){ + return compare(get(a),get(b)); + }, descending); + }); + return slice.call(array).sort(reverseComparator(comparator, reverseOrder)); + + function comparator(o1, o2){ + for ( var i = 0; i < sortPredicate.length; i++) { + var comp = sortPredicate[i](o1, o2); + if (comp !== 0) return comp; + } + return 0; + } + function reverseComparator(comp, descending) { + return toBoolean(descending) + ? function(a,b){return comp(b,a);} + : comp; + } + function compare(v1, v2){ + var t1 = typeof v1; + var t2 = typeof v2; + if (t1 == t2) { + if (isDate(v1) && isDate(v2)) { + v1 = v1.valueOf(); + v2 = v2.valueOf(); + } + if (t1 == "string") { + v1 = v1.toLowerCase(); + v2 = v2.toLowerCase(); + } + if (v1 === v2) return 0; + return v1 < v2 ? -1 : 1; + } else { + return t1 < t2 ? -1 : 1; + } + } + }; +} + +function ngDirective(directive) { + if (isFunction(directive)) { + directive = { + link: directive + }; + } + directive.restrict = directive.restrict || 'AC'; + return valueFn(directive); +} + +/** + * @ngdoc directive + * @name a + * @restrict E + * + * @description + * Modifies the default behavior of the html A tag so that the default action is prevented when + * the href attribute is empty. + * + * This change permits the easy creation of action links with the `ngClick` directive + * without changing the location or causing page reloads, e.g.: + * `Add Item` + */ +var htmlAnchorDirective = valueFn({ + restrict: 'E', + compile: function(element, attr) { + + if (msie <= 8) { + + // turn link into a stylable link in IE + // but only if it doesn't have name attribute, in which case it's an anchor + if (!attr.href && !attr.name) { + attr.$set('href', ''); + } + + // add a comment node to anchors to workaround IE bug that causes element content to be reset + // to new attribute content if attribute is updated with value containing @ and element also + // contains value with @ + // see issue #1949 + element.append(document.createComment('IE fix')); + } + + if (!attr.href && !attr.xlinkHref && !attr.name) { + return function(scope, element) { + // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. + var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? + 'xlink:href' : 'href'; + element.on('click', function(event){ + // if we have no href url, then don't navigate anywhere. + if (!element.attr(href)) { + event.preventDefault(); + } + }); + }; + } + } +}); + +/** + * @ngdoc directive + * @name ngHref + * @restrict A + * @priority 99 + * + * @description + * Using Angular markup like `{{hash}}` in an href attribute will + * make the link go to the wrong URL if the user clicks it before + * Angular has a chance to replace the `{{hash}}` markup with its + * value. Until Angular replaces the markup the link will be broken + * and will most likely return a 404 error. The `ngHref` directive + * solves this problem. + * + * The wrong way to write it: + * ```html + * + * ``` + * + * The correct way to write it: + * ```html + * + * ``` + * + * @element A + * @param {template} ngHref any string which can contain `{{}}` markup. + * + * @example + * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes + * in links and their different behaviors: + + +
      +
      link 1 (link, don't reload)
      + link 2 (link, don't reload)
      + link 3 (link, reload!)
      + anchor (link, don't reload)
      + anchor (no link)
      + link (link, change location) +
      + + it('should execute ng-click but not reload when href without value', function() { + element(by.id('link-1')).click(); + expect(element(by.model('value')).getAttribute('value')).toEqual('1'); + expect(element(by.id('link-1')).getAttribute('href')).toBe(''); + }); + + it('should execute ng-click but not reload when href empty string', function() { + element(by.id('link-2')).click(); + expect(element(by.model('value')).getAttribute('value')).toEqual('2'); + expect(element(by.id('link-2')).getAttribute('href')).toBe(''); + }); + + it('should execute ng-click and change url when ng-href specified', function() { + expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); + + element(by.id('link-3')).click(); + + // At this point, we navigate away from an Angular page, so we need + // to use browser.driver to get the base webdriver. + + browser.wait(function() { + return browser.driver.getCurrentUrl().then(function(url) { + return url.match(/\/123$/); + }); + }, 5000, 'page should navigate to /123'); + }); + + xit('should execute ng-click but not reload when href empty string and name specified', function() { + element(by.id('link-4')).click(); + expect(element(by.model('value')).getAttribute('value')).toEqual('4'); + expect(element(by.id('link-4')).getAttribute('href')).toBe(''); + }); + + it('should execute ng-click but not reload when no href but name specified', function() { + element(by.id('link-5')).click(); + expect(element(by.model('value')).getAttribute('value')).toEqual('5'); + expect(element(by.id('link-5')).getAttribute('href')).toBe(null); + }); + + it('should only change url when only ng-href', function() { + element(by.model('value')).clear(); + element(by.model('value')).sendKeys('6'); + expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); + + element(by.id('link-6')).click(); + + // At this point, we navigate away from an Angular page, so we need + // to use browser.driver to get the base webdriver. + browser.wait(function() { + return browser.driver.getCurrentUrl().then(function(url) { + return url.match(/\/6$/); + }); + }, 5000, 'page should navigate to /6'); + }); + + + */ + +/** + * @ngdoc directive + * @name ngSrc + * @restrict A + * @priority 99 + * + * @description + * Using Angular markup like `{{hash}}` in a `src` attribute doesn't + * work right: The browser will fetch from the URL with the literal + * text `{{hash}}` until Angular replaces the expression inside + * `{{hash}}`. The `ngSrc` directive solves this problem. + * + * The buggy way to write it: + * ```html + * + * ``` + * + * The correct way to write it: + * ```html + * + * ``` + * + * @element IMG + * @param {template} ngSrc any string which can contain `{{}}` markup. + */ + +/** + * @ngdoc directive + * @name ngSrcset + * @restrict A + * @priority 99 + * + * @description + * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't + * work right: The browser will fetch from the URL with the literal + * text `{{hash}}` until Angular replaces the expression inside + * `{{hash}}`. The `ngSrcset` directive solves this problem. + * + * The buggy way to write it: + * ```html + * + * ``` + * + * The correct way to write it: + * ```html + * + * ``` + * + * @element IMG + * @param {template} ngSrcset any string which can contain `{{}}` markup. + */ + +/** + * @ngdoc directive + * @name ngDisabled + * @restrict A + * @priority 100 + * + * @description + * + * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: + * ```html + *
      + * + *
      + * ``` + * + * The HTML specification does not require browsers to preserve the values of boolean attributes + * such as disabled. (Their presence means true and their absence means false.) + * If we put an Angular interpolation expression into such an attribute then the + * binding information would be lost when the browser removes the attribute. + * The `ngDisabled` directive solves this problem for the `disabled` attribute. + * This complementary directive is not removed by the browser and so provides + * a permanent reliable place to store the binding information. + * + * @example + + + Click me to toggle:
      + +
      + + it('should toggle button', function() { + expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); + element(by.model('checked')).click(); + expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); + }); + +
      + * + * @element INPUT + * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, + * then special attribute "disabled" will be set on the element + */ + + +/** + * @ngdoc directive + * @name ngChecked + * @restrict A + * @priority 100 + * + * @description + * The HTML specification does not require browsers to preserve the values of boolean attributes + * such as checked. (Their presence means true and their absence means false.) + * If we put an Angular interpolation expression into such an attribute then the + * binding information would be lost when the browser removes the attribute. + * The `ngChecked` directive solves this problem for the `checked` attribute. + * This complementary directive is not removed by the browser and so provides + * a permanent reliable place to store the binding information. + * @example + + + Check me to check both:
      + +
      + + it('should check both checkBoxes', function() { + expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy(); + element(by.model('master')).click(); + expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy(); + }); + +
      + * + * @element INPUT + * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, + * then special attribute "checked" will be set on the element + */ + + +/** + * @ngdoc directive + * @name ngReadonly + * @restrict A + * @priority 100 + * + * @description + * The HTML specification does not require browsers to preserve the values of boolean attributes + * such as readonly. (Their presence means true and their absence means false.) + * If we put an Angular interpolation expression into such an attribute then the + * binding information would be lost when the browser removes the attribute. + * The `ngReadonly` directive solves this problem for the `readonly` attribute. + * This complementary directive is not removed by the browser and so provides + * a permanent reliable place to store the binding information. + * @example + + + Check me to make text readonly:
      + +
      + + it('should toggle readonly attr', function() { + expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); + element(by.model('checked')).click(); + expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); + }); + +
      + * + * @element INPUT + * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, + * then special attribute "readonly" will be set on the element + */ + + +/** + * @ngdoc directive + * @name ngSelected + * @restrict A + * @priority 100 + * + * @description + * The HTML specification does not require browsers to preserve the values of boolean attributes + * such as selected. (Their presence means true and their absence means false.) + * If we put an Angular interpolation expression into such an attribute then the + * binding information would be lost when the browser removes the attribute. + * The `ngSelected` directive solves this problem for the `selected` attribute. + * This complementary directive is not removed by the browser and so provides + * a permanent reliable place to store the binding information. + * + * @example + + + Check me to select:
      + +
      + + it('should select Greetings!', function() { + expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); + element(by.model('selected')).click(); + expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); + }); + +
      + * + * @element OPTION + * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, + * then special attribute "selected" will be set on the element + */ + +/** + * @ngdoc directive + * @name ngOpen + * @restrict A + * @priority 100 + * + * @description + * The HTML specification does not require browsers to preserve the values of boolean attributes + * such as open. (Their presence means true and their absence means false.) + * If we put an Angular interpolation expression into such an attribute then the + * binding information would be lost when the browser removes the attribute. + * The `ngOpen` directive solves this problem for the `open` attribute. + * This complementary directive is not removed by the browser and so provides + * a permanent reliable place to store the binding information. + * @example + + + Check me check multiple:
      +
      + Show/Hide me +
      +
      + + it('should toggle open', function() { + expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); + element(by.model('open')).click(); + expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); + }); + +
      + * + * @element DETAILS + * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, + * then special attribute "open" will be set on the element + */ + +var ngAttributeAliasDirectives = {}; + + +// boolean attrs are evaluated +forEach(BOOLEAN_ATTR, function(propName, attrName) { + // binding to multiple is not supported + if (propName == "multiple") return; + + var normalized = directiveNormalize('ng-' + attrName); + ngAttributeAliasDirectives[normalized] = function() { + return { + priority: 100, + link: function(scope, element, attr) { + scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { + attr.$set(attrName, !!value); + }); + } + }; + }; +}); + + +// ng-src, ng-srcset, ng-href are interpolated +forEach(['src', 'srcset', 'href'], function(attrName) { + var normalized = directiveNormalize('ng-' + attrName); + ngAttributeAliasDirectives[normalized] = function() { + return { + priority: 99, // it needs to run after the attributes are interpolated + link: function(scope, element, attr) { + var propName = attrName, + name = attrName; + + if (attrName === 'href' && + toString.call(element.prop('href')) === '[object SVGAnimatedString]') { + name = 'xlinkHref'; + attr.$attr[name] = 'xlink:href'; + propName = null; + } + + attr.$observe(normalized, function(value) { + if (!value) { + if (attrName === 'href') { + attr.$set(name, null); + } + return; + } + + attr.$set(name, value); + + // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist + // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need + // to set the property as well to achieve the desired effect. + // we use attr[attrName] value since $set can sanitize the url. + if (msie && propName) element.prop(propName, attr[name]); + }); + } + }; + }; +}); + +/* global -nullFormCtrl */ +var nullFormCtrl = { + $addControl: noop, + $removeControl: noop, + $setValidity: noop, + $setDirty: noop, + $setPristine: noop +}; + +/** + * @ngdoc type + * @name form.FormController + * + * @property {boolean} $pristine True if user has not interacted with the form yet. + * @property {boolean} $dirty True if user has already interacted with the form. + * @property {boolean} $valid True if all of the containing forms and controls are valid. + * @property {boolean} $invalid True if at least one containing control or form is invalid. + * + * @property {Object} $error Is an object hash, containing references to all invalid controls or + * forms, where: + * + * - keys are validation tokens (error names), + * - values are arrays of controls or forms that are invalid for given error name. + * + * + * Built-in validation tokens: + * + * - `email` + * - `max` + * - `maxlength` + * - `min` + * - `minlength` + * - `number` + * - `pattern` + * - `required` + * - `url` + * + * @description + * `FormController` keeps track of all its controls and nested forms as well as the state of them, + * such as being valid/invalid or dirty/pristine. + * + * Each {@link ng.directive:form form} directive creates an instance + * of `FormController`. + * + */ +//asks for $scope to fool the BC controller module +FormController.$inject = ['$element', '$attrs', '$scope', '$animate']; +function FormController(element, attrs, $scope, $animate) { + var form = this, + parentForm = element.parent().controller('form') || nullFormCtrl, + invalidCount = 0, // used to easily determine if we are valid + errors = form.$error = {}, + controls = []; + + // init state + form.$name = attrs.name || attrs.ngForm; + form.$dirty = false; + form.$pristine = true; + form.$valid = true; + form.$invalid = false; + + parentForm.$addControl(form); + + // Setup initial state of the control + element.addClass(PRISTINE_CLASS); + toggleValidCss(true); + + // convenience method for easy toggling of classes + function toggleValidCss(isValid, validationErrorKey) { + validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; + $animate.setClass(element, + (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey, + (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); + } + + /** + * @ngdoc method + * @name form.FormController#$addControl + * + * @description + * Register a control with the form. + * + * Input elements using ngModelController do this automatically when they are linked. + */ + form.$addControl = function(control) { + // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored + // and not added to the scope. Now we throw an error. + assertNotHasOwnProperty(control.$name, 'input'); + controls.push(control); + + if (control.$name) { + form[control.$name] = control; + } + }; + + /** + * @ngdoc method + * @name form.FormController#$removeControl + * + * @description + * Deregister a control from the form. + * + * Input elements using ngModelController do this automatically when they are destroyed. + */ + form.$removeControl = function(control) { + if (control.$name && form[control.$name] === control) { + delete form[control.$name]; + } + forEach(errors, function(queue, validationToken) { + form.$setValidity(validationToken, true, control); + }); + + arrayRemove(controls, control); + }; + + /** + * @ngdoc method + * @name form.FormController#$setValidity + * + * @description + * Sets the validity of a form control. + * + * This method will also propagate to parent forms. + */ + form.$setValidity = function(validationToken, isValid, control) { + var queue = errors[validationToken]; + + if (isValid) { + if (queue) { + arrayRemove(queue, control); + if (!queue.length) { + invalidCount--; + if (!invalidCount) { + toggleValidCss(isValid); + form.$valid = true; + form.$invalid = false; + } + errors[validationToken] = false; + toggleValidCss(true, validationToken); + parentForm.$setValidity(validationToken, true, form); + } + } + + } else { + if (!invalidCount) { + toggleValidCss(isValid); + } + if (queue) { + if (includes(queue, control)) return; + } else { + errors[validationToken] = queue = []; + invalidCount++; + toggleValidCss(false, validationToken); + parentForm.$setValidity(validationToken, false, form); + } + queue.push(control); + + form.$valid = false; + form.$invalid = true; + } + }; + + /** + * @ngdoc method + * @name form.FormController#$setDirty + * + * @description + * Sets the form to a dirty state. + * + * This method can be called to add the 'ng-dirty' class and set the form to a dirty + * state (ng-dirty class). This method will also propagate to parent forms. + */ + form.$setDirty = function() { + $animate.removeClass(element, PRISTINE_CLASS); + $animate.addClass(element, DIRTY_CLASS); + form.$dirty = true; + form.$pristine = false; + parentForm.$setDirty(); + }; + + /** + * @ngdoc method + * @name form.FormController#$setPristine + * + * @description + * Sets the form to its pristine state. + * + * This method can be called to remove the 'ng-dirty' class and set the form to its pristine + * state (ng-pristine class). This method will also propagate to all the controls contained + * in this form. + * + * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after + * saving or resetting it. + */ + form.$setPristine = function () { + $animate.removeClass(element, DIRTY_CLASS); + $animate.addClass(element, PRISTINE_CLASS); + form.$dirty = false; + form.$pristine = true; + forEach(controls, function(control) { + control.$setPristine(); + }); + }; +} + + +/** + * @ngdoc directive + * @name ngForm + * @restrict EAC + * + * @description + * Nestable alias of {@link ng.directive:form `form`} directive. HTML + * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a + * sub-group of controls needs to be determined. + * + * Note: the purpose of `ngForm` is to group controls, + * but not to be a replacement for the `
      ` tag with all of its capabilities + * (e.g. posting to the server, ...). + * + * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into + * related scope, under this name. + * + */ + + /** + * @ngdoc directive + * @name form + * @restrict E + * + * @description + * Directive that instantiates + * {@link form.FormController FormController}. + * + * If the `name` attribute is specified, the form controller is published onto the current scope under + * this name. + * + * # Alias: {@link ng.directive:ngForm `ngForm`} + * + * In Angular forms can be nested. This means that the outer form is valid when all of the child + * forms are valid as well. However, browsers do not allow nesting of `` elements, so + * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to + * `` but can be nested. This allows you to have nested forms, which is very useful when + * using Angular validation directives in forms that are dynamically generated using the + * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` + * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an + * `ngForm` directive and nest these in an outer `form` element. + * + * + * # CSS classes + * - `ng-valid` is set if the form is valid. + * - `ng-invalid` is set if the form is invalid. + * - `ng-pristine` is set if the form is pristine. + * - `ng-dirty` is set if the form is dirty. + * + * Keep in mind that ngAnimate can detect each of these classes when added and removed. + * + * + * # Submitting a form and preventing the default action + * + * Since the role of forms in client-side Angular applications is different than in classical + * roundtrip apps, it is desirable for the browser not to translate the form submission into a full + * page reload that sends the data to the server. Instead some javascript logic should be triggered + * to handle the form submission in an application-specific way. + * + * For this reason, Angular prevents the default action (form submission to the server) unless the + * `` element has an `action` attribute specified. + * + * You can use one of the following two ways to specify what javascript method should be called when + * a form is submitted: + * + * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element + * - {@link ng.directive:ngClick ngClick} directive on the first + * button or input field of type submit (input[type=submit]) + * + * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} + * or {@link ng.directive:ngClick ngClick} directives. + * This is because of the following form submission rules in the HTML specification: + * + * - If a form has only one input field then hitting enter in this field triggers form submit + * (`ngSubmit`) + * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter + * doesn't trigger submit + * - if a form has one or more input fields and one or more buttons or input[type=submit] then + * hitting enter in any of the input fields will trigger the click handler on the *first* button or + * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) + * + * + * ## Animation Hooks + * + * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. + * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any + * other validations that are performed within the form. Animations in ngForm are similar to how + * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well + * as JS animations. + * + * The following example shows a simple way to utilize CSS transitions to style a form element + * that has been rendered as invalid after it has been validated: + * + *
      + * //be sure to include ngAnimate as a module to hook into more
      + * //advanced animations
      + * .my-form {
      + *   transition:0.5s linear all;
      + *   background: white;
      + * }
      + * .my-form.ng-invalid {
      + *   background: red;
      + *   color:white;
      + * }
      + * 
      + * + * @example + + + + + + userType: + Required!
      + userType = {{userType}}
      + myForm.input.$valid = {{myForm.input.$valid}}
      + myForm.input.$error = {{myForm.input.$error}}
      + myForm.$valid = {{myForm.$valid}}
      + myForm.$error.required = {{!!myForm.$error.required}}
      + +
      + + it('should initialize to model', function() { + var userType = element(by.binding('userType')); + var valid = element(by.binding('myForm.input.$valid')); + + expect(userType.getText()).toContain('guest'); + expect(valid.getText()).toContain('true'); + }); + + it('should be invalid if empty', function() { + var userType = element(by.binding('userType')); + var valid = element(by.binding('myForm.input.$valid')); + var userInput = element(by.model('userType')); + + userInput.clear(); + userInput.sendKeys(''); + + expect(userType.getText()).toEqual('userType ='); + expect(valid.getText()).toContain('false'); + }); + +
      + * + * @param {string=} name Name of the form. If specified, the form controller will be published into + * related scope, under this name. + */ +var formDirectiveFactory = function(isNgForm) { + return ['$timeout', function($timeout) { + var formDirective = { + name: 'form', + restrict: isNgForm ? 'EAC' : 'E', + controller: FormController, + compile: function() { + return { + pre: function(scope, formElement, attr, controller) { + if (!attr.action) { + // we can't use jq events because if a form is destroyed during submission the default + // action is not prevented. see #1238 + // + // IE 9 is not affected because it doesn't fire a submit event and try to do a full + // page reload if the form was destroyed by submission of the form via a click handler + // on a button in the form. Looks like an IE9 specific bug. + var preventDefaultListener = function(event) { + event.preventDefault + ? event.preventDefault() + : event.returnValue = false; // IE + }; + + addEventListenerFn(formElement[0], 'submit', preventDefaultListener); + + // unregister the preventDefault listener so that we don't not leak memory but in a + // way that will achieve the prevention of the default action. + formElement.on('$destroy', function() { + $timeout(function() { + removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); + }, 0, false); + }); + } + + var parentFormCtrl = formElement.parent().controller('form'), + alias = attr.name || attr.ngForm; + + if (alias) { + setter(scope, alias, controller, alias); + } + if (parentFormCtrl) { + formElement.on('$destroy', function() { + parentFormCtrl.$removeControl(controller); + if (alias) { + setter(scope, alias, undefined, alias); + } + extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards + }); + } + } + }; + } + }; + + return formDirective; + }]; +}; + +var formDirective = formDirectiveFactory(); +var ngFormDirective = formDirectiveFactory(true); + +/* global VALID_CLASS: true, + INVALID_CLASS: true, + PRISTINE_CLASS: true, + DIRTY_CLASS: true +*/ + +var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; +var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; +var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; + +var inputType = { + + /** + * @ngdoc input + * @name input[text] + * + * @description + * Standard HTML text input with angular data binding, inherited by most of the `input` elements. + * + * *NOTE* Not every feature offered is available for all input types. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} required Adds `required` validation error key if the value is not entered. + * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to + * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of + * `required` when you want to data-bind to the `required` attribute. + * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than + * minlength. + * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than + * maxlength. + * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the + * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for + * patterns defined as scope expressions. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. + * This parameter is ignored for input[type=password] controls, which will never trim the + * input. + * + * @example + + + +
      + Single word: + + Required! + + Single word only! + + text = {{text}}
      + myForm.input.$valid = {{myForm.input.$valid}}
      + myForm.input.$error = {{myForm.input.$error}}
      + myForm.$valid = {{myForm.$valid}}
      + myForm.$error.required = {{!!myForm.$error.required}}
      +
      +
      + + var text = element(by.binding('text')); + var valid = element(by.binding('myForm.input.$valid')); + var input = element(by.model('text')); + + it('should initialize to model', function() { + expect(text.getText()).toContain('guest'); + expect(valid.getText()).toContain('true'); + }); + + it('should be invalid if empty', function() { + input.clear(); + input.sendKeys(''); + + expect(text.getText()).toEqual('text ='); + expect(valid.getText()).toContain('false'); + }); + + it('should be invalid if multi word', function() { + input.clear(); + input.sendKeys('hello world'); + + expect(valid.getText()).toContain('false'); + }); + +
      + */ + 'text': textInputType, + + + /** + * @ngdoc input + * @name input[number] + * + * @description + * Text input with number validation and transformation. Sets the `number` validation + * error if not a valid number. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. + * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. + * @param {string=} required Sets `required` validation error key if the value is not entered. + * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to + * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of + * `required` when you want to data-bind to the `required` attribute. + * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than + * minlength. + * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than + * maxlength. + * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the + * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for + * patterns defined as scope expressions. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * + * @example + + + +
      + Number: + + Required! + + Not valid number! + value = {{value}}
      + myForm.input.$valid = {{myForm.input.$valid}}
      + myForm.input.$error = {{myForm.input.$error}}
      + myForm.$valid = {{myForm.$valid}}
      + myForm.$error.required = {{!!myForm.$error.required}}
      +
      +
      + + var value = element(by.binding('value')); + var valid = element(by.binding('myForm.input.$valid')); + var input = element(by.model('value')); + + it('should initialize to model', function() { + expect(value.getText()).toContain('12'); + expect(valid.getText()).toContain('true'); + }); + + it('should be invalid if empty', function() { + input.clear(); + input.sendKeys(''); + expect(value.getText()).toEqual('value ='); + expect(valid.getText()).toContain('false'); + }); + + it('should be invalid if over max', function() { + input.clear(); + input.sendKeys('123'); + expect(value.getText()).toEqual('value ='); + expect(valid.getText()).toContain('false'); + }); + +
      + */ + 'number': numberInputType, + + + /** + * @ngdoc input + * @name input[url] + * + * @description + * Text input with URL validation. Sets the `url` validation error key if the content is not a + * valid URL. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} required Sets `required` validation error key if the value is not entered. + * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to + * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of + * `required` when you want to data-bind to the `required` attribute. + * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than + * minlength. + * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than + * maxlength. + * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the + * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for + * patterns defined as scope expressions. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * + * @example + + + +
      + URL: + + Required! + + Not valid url! + text = {{text}}
      + myForm.input.$valid = {{myForm.input.$valid}}
      + myForm.input.$error = {{myForm.input.$error}}
      + myForm.$valid = {{myForm.$valid}}
      + myForm.$error.required = {{!!myForm.$error.required}}
      + myForm.$error.url = {{!!myForm.$error.url}}
      +
      +
      + + var text = element(by.binding('text')); + var valid = element(by.binding('myForm.input.$valid')); + var input = element(by.model('text')); + + it('should initialize to model', function() { + expect(text.getText()).toContain('http://google.com'); + expect(valid.getText()).toContain('true'); + }); + + it('should be invalid if empty', function() { + input.clear(); + input.sendKeys(''); + + expect(text.getText()).toEqual('text ='); + expect(valid.getText()).toContain('false'); + }); + + it('should be invalid if not url', function() { + input.clear(); + input.sendKeys('box'); + + expect(valid.getText()).toContain('false'); + }); + +
      + */ + 'url': urlInputType, + + + /** + * @ngdoc input + * @name input[email] + * + * @description + * Text input with email validation. Sets the `email` validation error key if not a valid email + * address. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} required Sets `required` validation error key if the value is not entered. + * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to + * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of + * `required` when you want to data-bind to the `required` attribute. + * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than + * minlength. + * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than + * maxlength. + * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the + * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for + * patterns defined as scope expressions. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * + * @example + + + +
      + Email: + + Required! + + Not valid email! + text = {{text}}
      + myForm.input.$valid = {{myForm.input.$valid}}
      + myForm.input.$error = {{myForm.input.$error}}
      + myForm.$valid = {{myForm.$valid}}
      + myForm.$error.required = {{!!myForm.$error.required}}
      + myForm.$error.email = {{!!myForm.$error.email}}
      +
      +
      + + var text = element(by.binding('text')); + var valid = element(by.binding('myForm.input.$valid')); + var input = element(by.model('text')); + + it('should initialize to model', function() { + expect(text.getText()).toContain('me@example.com'); + expect(valid.getText()).toContain('true'); + }); + + it('should be invalid if empty', function() { + input.clear(); + input.sendKeys(''); + expect(text.getText()).toEqual('text ='); + expect(valid.getText()).toContain('false'); + }); + + it('should be invalid if not email', function() { + input.clear(); + input.sendKeys('xxx'); + + expect(valid.getText()).toContain('false'); + }); + +
      + */ + 'email': emailInputType, + + + /** + * @ngdoc input + * @name input[radio] + * + * @description + * HTML radio button. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string} value The value to which the expression should be set when selected. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * @param {string} ngValue Angular expression which sets the value to which the expression should + * be set when selected. + * + * @example + + + +
      + Red
      + Green
      + Blue
      + color = {{color | json}}
      +
      + Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. +
      + + it('should change state', function() { + var color = element(by.binding('color')); + + expect(color.getText()).toContain('blue'); + + element.all(by.model('color')).get(0).click(); + + expect(color.getText()).toContain('red'); + }); + +
      + */ + 'radio': radioInputType, + + + /** + * @ngdoc input + * @name input[checkbox] + * + * @description + * HTML checkbox. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} ngTrueValue The value to which the expression should be set when selected. + * @param {string=} ngFalseValue The value to which the expression should be set when not selected. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * + * @example + + + +
      + Value1:
      + Value2:
      + value1 = {{value1}}
      + value2 = {{value2}}
      +
      +
      + + it('should change state', function() { + var value1 = element(by.binding('value1')); + var value2 = element(by.binding('value2')); + + expect(value1.getText()).toContain('true'); + expect(value2.getText()).toContain('YES'); + + element(by.model('value1')).click(); + element(by.model('value2')).click(); + + expect(value1.getText()).toContain('false'); + expect(value2.getText()).toContain('NO'); + }); + +
      + */ + 'checkbox': checkboxInputType, + + 'hidden': noop, + 'button': noop, + 'submit': noop, + 'reset': noop, + 'file': noop +}; + +// A helper function to call $setValidity and return the value / undefined, +// a pattern that is repeated a lot in the input validation logic. +function validate(ctrl, validatorName, validity, value){ + ctrl.$setValidity(validatorName, validity); + return validity ? value : undefined; +} + +function testFlags(validity, flags) { + var i, flag; + if (flags) { + for (i=0; i= minlength, value); + }; + + ctrl.$parsers.push(minLengthValidator); + ctrl.$formatters.push(minLengthValidator); + } + + // max length validator + if (attr.ngMaxlength) { + var maxlength = int(attr.ngMaxlength); + var maxLengthValidator = function(value) { + return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value); + }; + + ctrl.$parsers.push(maxLengthValidator); + ctrl.$formatters.push(maxLengthValidator); + } +} + +var numberBadFlags = ['badInput']; + +function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { + textInputType(scope, element, attr, ctrl, $sniffer, $browser); + + ctrl.$parsers.push(function(value) { + var empty = ctrl.$isEmpty(value); + if (empty || NUMBER_REGEXP.test(value)) { + ctrl.$setValidity('number', true); + return value === '' ? null : (empty ? value : parseFloat(value)); + } else { + ctrl.$setValidity('number', false); + return undefined; + } + }); + + addNativeHtml5Validators(ctrl, 'number', numberBadFlags, null, ctrl.$$validityState); + + ctrl.$formatters.push(function(value) { + return ctrl.$isEmpty(value) ? '' : '' + value; + }); + + if (attr.min) { + var minValidator = function(value) { + var min = parseFloat(attr.min); + return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value); + }; + + ctrl.$parsers.push(minValidator); + ctrl.$formatters.push(minValidator); + } + + if (attr.max) { + var maxValidator = function(value) { + var max = parseFloat(attr.max); + return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value); + }; + + ctrl.$parsers.push(maxValidator); + ctrl.$formatters.push(maxValidator); + } + + ctrl.$formatters.push(function(value) { + return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value); + }); +} + +function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { + textInputType(scope, element, attr, ctrl, $sniffer, $browser); + + var urlValidator = function(value) { + return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value); + }; + + ctrl.$formatters.push(urlValidator); + ctrl.$parsers.push(urlValidator); +} + +function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { + textInputType(scope, element, attr, ctrl, $sniffer, $browser); + + var emailValidator = function(value) { + return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value); + }; + + ctrl.$formatters.push(emailValidator); + ctrl.$parsers.push(emailValidator); +} + +function radioInputType(scope, element, attr, ctrl) { + // make the name unique, if not defined + if (isUndefined(attr.name)) { + element.attr('name', nextUid()); + } + + element.on('click', function() { + if (element[0].checked) { + scope.$apply(function() { + ctrl.$setViewValue(attr.value); + }); + } + }); + + ctrl.$render = function() { + var value = attr.value; + element[0].checked = (value == ctrl.$viewValue); + }; + + attr.$observe('value', ctrl.$render); +} + +function checkboxInputType(scope, element, attr, ctrl) { + var trueValue = attr.ngTrueValue, + falseValue = attr.ngFalseValue; + + if (!isString(trueValue)) trueValue = true; + if (!isString(falseValue)) falseValue = false; + + element.on('click', function() { + scope.$apply(function() { + ctrl.$setViewValue(element[0].checked); + }); + }); + + ctrl.$render = function() { + element[0].checked = ctrl.$viewValue; + }; + + // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox. + ctrl.$isEmpty = function(value) { + return value !== trueValue; + }; + + ctrl.$formatters.push(function(value) { + return value === trueValue; + }); + + ctrl.$parsers.push(function(value) { + return value ? trueValue : falseValue; + }); +} + + +/** + * @ngdoc directive + * @name textarea + * @restrict E + * + * @description + * HTML textarea element control with angular data-binding. The data-binding and validation + * properties of this element are exactly the same as those of the + * {@link ng.directive:input input element}. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} required Sets `required` validation error key if the value is not entered. + * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to + * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of + * `required` when you want to data-bind to the `required` attribute. + * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than + * minlength. + * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than + * maxlength. + * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the + * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for + * patterns defined as scope expressions. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. + */ + + +/** + * @ngdoc directive + * @name input + * @restrict E + * + * @description + * HTML input element control with angular data-binding. Input control follows HTML5 input types + * and polyfills the HTML5 validation behavior for older browsers. + * + * *NOTE* Not every feature offered is available for all input types. + * + * @param {string} ngModel Assignable angular expression to data-bind to. + * @param {string=} name Property name of the form under which the control is published. + * @param {string=} required Sets `required` validation error key if the value is not entered. + * @param {boolean=} ngRequired Sets `required` attribute if set to true + * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than + * minlength. + * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than + * maxlength. + * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the + * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for + * patterns defined as scope expressions. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. + * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. + * This parameter is ignored for input[type=password] controls, which will never trim the + * input. + * + * @example + + + +
      +
      + User name: + + Required!
      + Last name: + + Too short! + + Too long!
      +
      +
      + user = {{user}}
      + myForm.userName.$valid = {{myForm.userName.$valid}}
      + myForm.userName.$error = {{myForm.userName.$error}}
      + myForm.lastName.$valid = {{myForm.lastName.$valid}}
      + myForm.lastName.$error = {{myForm.lastName.$error}}
      + myForm.$valid = {{myForm.$valid}}
      + myForm.$error.required = {{!!myForm.$error.required}}
      + myForm.$error.minlength = {{!!myForm.$error.minlength}}
      + myForm.$error.maxlength = {{!!myForm.$error.maxlength}}
      +
      +
      + + var user = element(by.binding('{{user}}')); + var userNameValid = element(by.binding('myForm.userName.$valid')); + var lastNameValid = element(by.binding('myForm.lastName.$valid')); + var lastNameError = element(by.binding('myForm.lastName.$error')); + var formValid = element(by.binding('myForm.$valid')); + var userNameInput = element(by.model('user.name')); + var userLastInput = element(by.model('user.last')); + + it('should initialize to model', function() { + expect(user.getText()).toContain('{"name":"guest","last":"visitor"}'); + expect(userNameValid.getText()).toContain('true'); + expect(formValid.getText()).toContain('true'); + }); + + it('should be invalid if empty when required', function() { + userNameInput.clear(); + userNameInput.sendKeys(''); + + expect(user.getText()).toContain('{"last":"visitor"}'); + expect(userNameValid.getText()).toContain('false'); + expect(formValid.getText()).toContain('false'); + }); + + it('should be valid if empty when min length is set', function() { + userLastInput.clear(); + userLastInput.sendKeys(''); + + expect(user.getText()).toContain('{"name":"guest","last":""}'); + expect(lastNameValid.getText()).toContain('true'); + expect(formValid.getText()).toContain('true'); + }); + + it('should be invalid if less than required min length', function() { + userLastInput.clear(); + userLastInput.sendKeys('xx'); + + expect(user.getText()).toContain('{"name":"guest"}'); + expect(lastNameValid.getText()).toContain('false'); + expect(lastNameError.getText()).toContain('minlength'); + expect(formValid.getText()).toContain('false'); + }); + + it('should be invalid if longer than max length', function() { + userLastInput.clear(); + userLastInput.sendKeys('some ridiculously long name'); + + expect(user.getText()).toContain('{"name":"guest"}'); + expect(lastNameValid.getText()).toContain('false'); + expect(lastNameError.getText()).toContain('maxlength'); + expect(formValid.getText()).toContain('false'); + }); + +
      + */ +var inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) { + return { + restrict: 'E', + require: '?ngModel', + link: function(scope, element, attr, ctrl) { + if (ctrl) { + (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer, + $browser); + } + } + }; +}]; + +var VALID_CLASS = 'ng-valid', + INVALID_CLASS = 'ng-invalid', + PRISTINE_CLASS = 'ng-pristine', + DIRTY_CLASS = 'ng-dirty'; + +/** + * @ngdoc type + * @name ngModel.NgModelController + * + * @property {string} $viewValue Actual string value in the view. + * @property {*} $modelValue The value in the model, that the control is bound to. + * @property {Array.} $parsers Array of functions to execute, as a pipeline, whenever + the control reads value from the DOM. Each function is called, in turn, passing the value + through to the next. The last return value is used to populate the model. + Used to sanitize / convert the value as well as validation. For validation, + the parsers should update the validity state using + {@link ngModel.NgModelController#$setValidity $setValidity()}, + and return `undefined` for invalid values. + + * + * @property {Array.} $formatters Array of functions to execute, as a pipeline, whenever + the model value changes. Each function is called, in turn, passing the value through to the + next. Used to format / convert values for display in the control and validation. + * ```js + * function formatter(value) { + * if (value) { + * return value.toUpperCase(); + * } + * } + * ngModel.$formatters.push(formatter); + * ``` + * + * @property {Array.} $viewChangeListeners Array of functions to execute whenever the + * view value has changed. It is called with no arguments, and its return value is ignored. + * This can be used in place of additional $watches against the model value. + * + * @property {Object} $error An object hash with all errors as keys. + * + * @property {boolean} $pristine True if user has not interacted with the control yet. + * @property {boolean} $dirty True if user has already interacted with the control. + * @property {boolean} $valid True if there is no error. + * @property {boolean} $invalid True if at least one error on the control. + * + * @description + * + * `NgModelController` provides API for the `ng-model` directive. The controller contains + * services for data-binding, validation, CSS updates, and value formatting and parsing. It + * purposefully does not contain any logic which deals with DOM rendering or listening to + * DOM events. Such DOM related logic should be provided by other directives which make use of + * `NgModelController` for data-binding. + * + * ## Custom Control Example + * This example shows how to use `NgModelController` with a custom control to achieve + * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) + * collaborate together to achieve the desired result. + * + * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element + * contents be edited in place by the user. This will not work on older browsers. + * + * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize} + * module to automatically remove "bad" content like inline event listener (e.g. ``). + * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks + * that content using the `$sce` service. + * + * + + [contenteditable] { + border: 1px solid black; + background-color: white; + min-height: 20px; + } + + .ng-invalid { + border: 1px solid red; + } + + + + angular.module('customControl', ['ngSanitize']). + directive('contenteditable', ['$sce', function($sce) { + return { + restrict: 'A', // only activate on element attribute + require: '?ngModel', // get a hold of NgModelController + link: function(scope, element, attrs, ngModel) { + if(!ngModel) return; // do nothing if no ng-model + + // Specify how UI should be updated + ngModel.$render = function() { + element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); + }; + + // Listen for change events to enable binding + element.on('blur keyup change', function() { + scope.$evalAsync(read); + }); + read(); // initialize + + // Write data to the model + function read() { + var html = element.html(); + // When we clear the content editable the browser leaves a
      behind + // If strip-br attribute is provided then we strip this out + if( attrs.stripBr && html == '
      ' ) { + html = ''; + } + ngModel.$setViewValue(html); + } + } + }; + }]); +
      + +
      +
      Change me!
      + Required! +
      + +
      +
      + + it('should data-bind and become invalid', function() { + if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') { + // SafariDriver can't handle contenteditable + // and Firefox driver can't clear contenteditables very well + return; + } + var contentEditable = element(by.css('[contenteditable]')); + var content = 'Change me!'; + + expect(contentEditable.getText()).toEqual(content); + + contentEditable.clear(); + contentEditable.sendKeys(protractor.Key.BACK_SPACE); + expect(contentEditable.getText()).toEqual(''); + expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); + }); + + *
      + * + * + */ +var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', + function($scope, $exceptionHandler, $attr, $element, $parse, $animate) { + this.$viewValue = Number.NaN; + this.$modelValue = Number.NaN; + this.$parsers = []; + this.$formatters = []; + this.$viewChangeListeners = []; + this.$pristine = true; + this.$dirty = false; + this.$valid = true; + this.$invalid = false; + this.$name = $attr.name; + + var ngModelGet = $parse($attr.ngModel), + ngModelSet = ngModelGet.assign; + + if (!ngModelSet) { + throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}", + $attr.ngModel, startingTag($element)); + } + + /** + * @ngdoc method + * @name ngModel.NgModelController#$render + * + * @description + * Called when the view needs to be updated. It is expected that the user of the ng-model + * directive will implement this method. + */ + this.$render = noop; + + /** + * @ngdoc method + * @name ngModel.NgModelController#$isEmpty + * + * @description + * This is called when we need to determine if the value of the input is empty. + * + * For instance, the required directive does this to work out if the input has data or not. + * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. + * + * You can override this for input directives whose concept of being empty is different to the + * default. The `checkboxInputType` directive does this because in its case a value of `false` + * implies empty. + * + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is empty. + */ + this.$isEmpty = function(value) { + return isUndefined(value) || value === '' || value === null || value !== value; + }; + + var parentForm = $element.inheritedData('$formController') || nullFormCtrl, + invalidCount = 0, // used to easily determine if we are valid + $error = this.$error = {}; // keep invalid keys here + + + // Setup initial state of the control + $element.addClass(PRISTINE_CLASS); + toggleValidCss(true); + + // convenience method for easy toggling of classes + function toggleValidCss(isValid, validationErrorKey) { + validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; + $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); + $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); + } + + /** + * @ngdoc method + * @name ngModel.NgModelController#$setValidity + * + * @description + * Change the validity state, and notifies the form when the control changes validity. (i.e. it + * does not notify form if given validator is already marked as invalid). + * + * This method should be called by validators - i.e. the parser or formatter functions. + * + * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign + * to `$error[validationErrorKey]=!isValid` so that it is available for data-binding. + * The `validationErrorKey` should be in camelCase and will get converted into dash-case + * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` + * class and can be bound to as `{{someForm.someControl.$error.myError}}` . + * @param {boolean} isValid Whether the current state is valid (true) or invalid (false). + */ + this.$setValidity = function(validationErrorKey, isValid) { + // Purposeful use of ! here to cast isValid to boolean in case it is undefined + // jshint -W018 + if ($error[validationErrorKey] === !isValid) return; + // jshint +W018 + + if (isValid) { + if ($error[validationErrorKey]) invalidCount--; + if (!invalidCount) { + toggleValidCss(true); + this.$valid = true; + this.$invalid = false; + } + } else { + toggleValidCss(false); + this.$invalid = true; + this.$valid = false; + invalidCount++; + } + + $error[validationErrorKey] = !isValid; + toggleValidCss(isValid, validationErrorKey); + + parentForm.$setValidity(validationErrorKey, isValid, this); + }; + + /** + * @ngdoc method + * @name ngModel.NgModelController#$setPristine + * + * @description + * Sets the control to its pristine state. + * + * This method can be called to remove the 'ng-dirty' class and set the control to its pristine + * state (ng-pristine class). + */ + this.$setPristine = function () { + this.$dirty = false; + this.$pristine = true; + $animate.removeClass($element, DIRTY_CLASS); + $animate.addClass($element, PRISTINE_CLASS); + }; + + /** + * @ngdoc method + * @name ngModel.NgModelController#$setViewValue + * + * @description + * Update the view value. + * + * This method should be called when the view value changes, typically from within a DOM event handler. + * For example {@link ng.directive:input input} and + * {@link ng.directive:select select} directives call it. + * + * It will update the $viewValue, then pass this value through each of the functions in `$parsers`, + * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to + * `$modelValue` and the **expression** specified in the `ng-model` attribute. + * + * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. + * + * Note that calling this function does not trigger a `$digest`. + * + * @param {string} value Value from the view. + */ + this.$setViewValue = function(value) { + this.$viewValue = value; + + // change to dirty + if (this.$pristine) { + this.$dirty = true; + this.$pristine = false; + $animate.removeClass($element, PRISTINE_CLASS); + $animate.addClass($element, DIRTY_CLASS); + parentForm.$setDirty(); + } + + forEach(this.$parsers, function(fn) { + value = fn(value); + }); + + if (this.$modelValue !== value) { + this.$modelValue = value; + ngModelSet($scope, value); + forEach(this.$viewChangeListeners, function(listener) { + try { + listener(); + } catch(e) { + $exceptionHandler(e); + } + }); + } + }; + + // model -> value + var ctrl = this; + + $scope.$watch(function ngModelWatch() { + var value = ngModelGet($scope); + + // if scope model value and ngModel value are out of sync + if (ctrl.$modelValue !== value) { + + var formatters = ctrl.$formatters, + idx = formatters.length; + + ctrl.$modelValue = value; + while(idx--) { + value = formatters[idx](value); + } + + if (ctrl.$viewValue !== value) { + ctrl.$viewValue = value; + ctrl.$render(); + } + } + + return value; + }); +}]; + + +/** + * @ngdoc directive + * @name ngModel + * + * @element input + * + * @description + * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a + * property on the scope using {@link ngModel.NgModelController NgModelController}, + * which is created and exposed by this directive. + * + * `ngModel` is responsible for: + * + * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` + * require. + * - Providing validation behavior (i.e. required, number, email, url). + * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors). + * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations. + * - Registering the control with its parent {@link ng.directive:form form}. + * + * Note: `ngModel` will try to bind to the property given by evaluating the expression on the + * current scope. If the property doesn't already exist on this scope, it will be created + * implicitly and added to the scope. + * + * For best practices on using `ngModel`, see: + * + * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes) + * + * For basic examples, how to use `ngModel`, see: + * + * - {@link ng.directive:input input} + * - {@link input[text] text} + * - {@link input[checkbox] checkbox} + * - {@link input[radio] radio} + * - {@link input[number] number} + * - {@link input[email] email} + * - {@link input[url] url} + * - {@link ng.directive:select select} + * - {@link ng.directive:textarea textarea} + * + * # CSS classes + * The following CSS classes are added and removed on the associated input/select/textarea element + * depending on the validity of the model. + * + * - `ng-valid` is set if the model is valid. + * - `ng-invalid` is set if the model is invalid. + * - `ng-pristine` is set if the model is pristine. + * - `ng-dirty` is set if the model is dirty. + * + * Keep in mind that ngAnimate can detect each of these classes when added and removed. + * + * ## Animation Hooks + * + * Animations within models are triggered when any of the associated CSS classes are added and removed + * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, + * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. + * The animations that are triggered within ngModel are similar to how they work in ngClass and + * animations can be hooked into using CSS transitions, keyframes as well as JS animations. + * + * The following example shows a simple way to utilize CSS transitions to style an input element + * that has been rendered as invalid after it has been validated: + * + *
      + * //be sure to include ngAnimate as a module to hook into more
      + * //advanced animations
      + * .my-input {
      + *   transition:0.5s linear all;
      + *   background: white;
      + * }
      + * .my-input.ng-invalid {
      + *   background: red;
      + *   color:white;
      + * }
      + * 
      + * + * @example + * + + + + Update input to see transitions when valid/invalid. + Integer is a valid value. +
      + +
      +
      + *
      + */ +var ngModelDirective = function() { + return { + require: ['ngModel', '^?form'], + controller: NgModelController, + link: function(scope, element, attr, ctrls) { + // notify others, especially parent forms + + var modelCtrl = ctrls[0], + formCtrl = ctrls[1] || nullFormCtrl; + + formCtrl.$addControl(modelCtrl); + + scope.$on('$destroy', function() { + formCtrl.$removeControl(modelCtrl); + }); + } + }; +}; + + +/** + * @ngdoc directive + * @name ngChange + * + * @description + * Evaluate the given expression when the user changes the input. + * The expression is evaluated immediately, unlike the JavaScript onchange event + * which only triggers at the end of a change (usually, when the user leaves the + * form element or presses the return key). + * The expression is not evaluated when the value change is coming from the model. + * + * Note, this directive requires `ngModel` to be present. + * + * @element input + * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change + * in input value. + * + * @example + * + * + * + *
      + * + * + *
      + * debug = {{confirmed}}
      + * counter = {{counter}}
      + *
      + *
      + * + * var counter = element(by.binding('counter')); + * var debug = element(by.binding('confirmed')); + * + * it('should evaluate the expression if changing from view', function() { + * expect(counter.getText()).toContain('0'); + * + * element(by.id('ng-change-example1')).click(); + * + * expect(counter.getText()).toContain('1'); + * expect(debug.getText()).toContain('true'); + * }); + * + * it('should not evaluate the expression if changing from model', function() { + * element(by.id('ng-change-example2')).click(); + + * expect(counter.getText()).toContain('0'); + * expect(debug.getText()).toContain('true'); + * }); + * + *
      + */ +var ngChangeDirective = valueFn({ + require: 'ngModel', + link: function(scope, element, attr, ctrl) { + ctrl.$viewChangeListeners.push(function() { + scope.$eval(attr.ngChange); + }); + } +}); + + +var requiredDirective = function() { + return { + require: '?ngModel', + link: function(scope, elm, attr, ctrl) { + if (!ctrl) return; + attr.required = true; // force truthy in case we are on non input element + + var validator = function(value) { + if (attr.required && ctrl.$isEmpty(value)) { + ctrl.$setValidity('required', false); + return; + } else { + ctrl.$setValidity('required', true); + return value; + } + }; + + ctrl.$formatters.push(validator); + ctrl.$parsers.unshift(validator); + + attr.$observe('required', function() { + validator(ctrl.$viewValue); + }); + } + }; +}; + + +/** + * @ngdoc directive + * @name ngList + * + * @description + * Text input that converts between a delimited string and an array of strings. The delimiter + * can be a fixed string (by default a comma) or a regular expression. + * + * @element input + * @param {string=} ngList optional delimiter that should be used to split the value. If + * specified in form `/something/` then the value will be converted into a regular expression. + * + * @example + + + +
      + List: + + Required! +
      + names = {{names}}
      + myForm.namesInput.$valid = {{myForm.namesInput.$valid}}
      + myForm.namesInput.$error = {{myForm.namesInput.$error}}
      + myForm.$valid = {{myForm.$valid}}
      + myForm.$error.required = {{!!myForm.$error.required}}
      +
      +
      + + var listInput = element(by.model('names')); + var names = element(by.binding('{{names}}')); + var valid = element(by.binding('myForm.namesInput.$valid')); + var error = element(by.css('span.error')); + + it('should initialize to model', function() { + expect(names.getText()).toContain('["igor","misko","vojta"]'); + expect(valid.getText()).toContain('true'); + expect(error.getCssValue('display')).toBe('none'); + }); + + it('should be invalid if empty', function() { + listInput.clear(); + listInput.sendKeys(''); + + expect(names.getText()).toContain(''); + expect(valid.getText()).toContain('false'); + expect(error.getCssValue('display')).not.toBe('none'); }); + +
      + */ +var ngListDirective = function() { + return { + require: 'ngModel', + link: function(scope, element, attr, ctrl) { + var match = /\/(.*)\//.exec(attr.ngList), + separator = match && new RegExp(match[1]) || attr.ngList || ','; + + var parse = function(viewValue) { + // If the viewValue is invalid (say required but empty) it will be `undefined` + if (isUndefined(viewValue)) return; + + var list = []; + + if (viewValue) { + forEach(viewValue.split(separator), function(value) { + if (value) list.push(trim(value)); + }); + } + + return list; + }; + + ctrl.$parsers.push(parse); + ctrl.$formatters.push(function(value) { + if (isArray(value)) { + return value.join(', '); + } + + return undefined; + }); + + // Override the standard $isEmpty because an empty array means the input is empty. + ctrl.$isEmpty = function(value) { + return !value || !value.length; + }; + } + }; +}; + + +var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; +/** + * @ngdoc directive + * @name ngValue + * + * @description + * Binds the given expression to the value of `input[select]` or `input[radio]`, so + * that when the element is selected, the `ngModel` of that element is set to the + * bound value. + * + * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as + * shown below. + * + * @element input + * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute + * of the `input` element + * + * @example + + + +
      +

      Which is your favorite?

      + +
      You chose {{my.favorite}}
      +
      +
      + + var favorite = element(by.binding('my.favorite')); + + it('should initialize to model', function() { + expect(favorite.getText()).toContain('unicorns'); + }); + it('should bind the values to the inputs', function() { + element.all(by.model('my.favorite')).get(0).click(); + expect(favorite.getText()).toContain('pizza'); + }); + +
      + */ +var ngValueDirective = function() { + return { + priority: 100, + compile: function(tpl, tplAttr) { + if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) { + return function ngValueConstantLink(scope, elm, attr) { + attr.$set('value', scope.$eval(attr.ngValue)); + }; + } else { + return function ngValueLink(scope, elm, attr) { + scope.$watch(attr.ngValue, function valueWatchAction(value) { + attr.$set('value', value); + }); + }; + } + } + }; +}; + +/** + * @ngdoc directive + * @name ngBind + * @restrict AC + * + * @description + * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element + * with the value of a given expression, and to update the text content when the value of that + * expression changes. + * + * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like + * `{{ expression }}` which is similar but less verbose. + * + * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily + * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an + * element attribute, it makes the bindings invisible to the user while the page is loading. + * + * An alternative solution to this problem would be using the + * {@link ng.directive:ngCloak ngCloak} directive. + * + * + * @element ANY + * @param {expression} ngBind {@link guide/expression Expression} to evaluate. + * + * @example + * Enter a name in the Live Preview text box; the greeting below the text box changes instantly. + + + +
      + Enter name:
      + Hello ! +
      +
      + + it('should check ng-bind', function() { + var nameInput = element(by.model('name')); + + expect(element(by.binding('name')).getText()).toBe('Whirled'); + nameInput.clear(); + nameInput.sendKeys('world'); + expect(element(by.binding('name')).getText()).toBe('world'); + }); + +
      + */ +var ngBindDirective = ngDirective({ + compile: function(templateElement) { + templateElement.addClass('ng-binding'); + return function (scope, element, attr) { + element.data('$binding', attr.ngBind); + scope.$watch(attr.ngBind, function ngBindWatchAction(value) { + // We are purposefully using == here rather than === because we want to + // catch when value is "null or undefined" + // jshint -W041 + element.text(value == undefined ? '' : value); + }); + }; + } +}); + + +/** + * @ngdoc directive + * @name ngBindTemplate + * + * @description + * The `ngBindTemplate` directive specifies that the element + * text content should be replaced with the interpolation of the template + * in the `ngBindTemplate` attribute. + * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` + * expressions. This directive is needed since some HTML elements + * (such as TITLE and OPTION) cannot contain SPAN elements. + * + * @element ANY + * @param {string} ngBindTemplate template of form + * {{ expression }} to eval. + * + * @example + * Try it here: enter text in text box and watch the greeting change. + + + +
      + Salutation:
      + Name:
      +
      
      +       
      +
      + + it('should check ng-bind', function() { + var salutationElem = element(by.binding('salutation')); + var salutationInput = element(by.model('salutation')); + var nameInput = element(by.model('name')); + + expect(salutationElem.getText()).toBe('Hello World!'); + + salutationInput.clear(); + salutationInput.sendKeys('Greetings'); + nameInput.clear(); + nameInput.sendKeys('user'); + + expect(salutationElem.getText()).toBe('Greetings user!'); + }); + +
      + */ +var ngBindTemplateDirective = ['$interpolate', function($interpolate) { + return function(scope, element, attr) { + // TODO: move this to scenario runner + var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate)); + element.addClass('ng-binding').data('$binding', interpolateFn); + attr.$observe('ngBindTemplate', function(value) { + element.text(value); + }); + }; +}]; + + +/** + * @ngdoc directive + * @name ngBindHtml + * + * @description + * Creates a binding that will innerHTML the result of evaluating the `expression` into the current + * element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link + * ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize` + * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in + * core Angular). In order to use {@link ngSanitize} in your module's dependencies, you need to + * include "angular-sanitize.js" in your application. + * + * You may also bypass sanitization for values you know are safe. To do so, bind to + * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example + * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}. + * + * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you + * will have an exception (instead of an exploit.) + * + * @element ANY + * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. + * + * @example + + + +
      +

      +
      +
      + + + angular.module('bindHtmlExample', ['ngSanitize']) + .controller('ExampleController', ['$scope', function($scope) { + $scope.myHTML = + 'I am an HTMLstring with ' + + 'links! and other stuff'; + }]); + + + + it('should check ng-bind-html', function() { + expect(element(by.binding('myHTML')).getText()).toBe( + 'I am an HTMLstring with links! and other stuff'); + }); + +
      + */ +var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { + return { + compile: function (tElement) { + tElement.addClass('ng-binding'); + + return function (scope, element, attr) { + element.data('$binding', attr.ngBindHtml); + + var parsed = $parse(attr.ngBindHtml); + + function getStringValue() { + return (parsed(scope) || '').toString(); + } + + scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { + element.html($sce.getTrustedHtml(parsed(scope)) || ''); + }); + }; + } + }; +}]; + +function classDirective(name, selector) { + name = 'ngClass' + name; + return ['$animate', function($animate) { + return { + restrict: 'AC', + link: function(scope, element, attr) { + var oldVal; + + scope.$watch(attr[name], ngClassWatchAction, true); + + attr.$observe('class', function(value) { + ngClassWatchAction(scope.$eval(attr[name])); + }); + + + if (name !== 'ngClass') { + scope.$watch('$index', function($index, old$index) { + // jshint bitwise: false + var mod = $index & 1; + if (mod !== (old$index & 1)) { + var classes = arrayClasses(scope.$eval(attr[name])); + mod === selector ? + addClasses(classes) : + removeClasses(classes); + } + }); + } + + function addClasses(classes) { + var newClasses = digestClassCounts(classes, 1); + attr.$addClass(newClasses); + } + + function removeClasses(classes) { + var newClasses = digestClassCounts(classes, -1); + attr.$removeClass(newClasses); + } + + function digestClassCounts (classes, count) { + var classCounts = element.data('$classCounts') || {}; + var classesToUpdate = []; + forEach(classes, function (className) { + if (count > 0 || classCounts[className]) { + classCounts[className] = (classCounts[className] || 0) + count; + if (classCounts[className] === +(count > 0)) { + classesToUpdate.push(className); + } + } + }); + element.data('$classCounts', classCounts); + return classesToUpdate.join(' '); + } + + function updateClasses (oldClasses, newClasses) { + var toAdd = arrayDifference(newClasses, oldClasses); + var toRemove = arrayDifference(oldClasses, newClasses); + toRemove = digestClassCounts(toRemove, -1); + toAdd = digestClassCounts(toAdd, 1); + + if (toAdd.length === 0) { + $animate.removeClass(element, toRemove); + } else if (toRemove.length === 0) { + $animate.addClass(element, toAdd); + } else { + $animate.setClass(element, toAdd, toRemove); + } + } + + function ngClassWatchAction(newVal) { + if (selector === true || scope.$index % 2 === selector) { + var newClasses = arrayClasses(newVal || []); + if (!oldVal) { + addClasses(newClasses); + } else if (!equals(newVal,oldVal)) { + var oldClasses = arrayClasses(oldVal); + updateClasses(oldClasses, newClasses); + } + } + oldVal = shallowCopy(newVal); + } + } + }; + + function arrayDifference(tokens1, tokens2) { + var values = []; + + outer: + for(var i = 0; i < tokens1.length; i++) { + var token = tokens1[i]; + for(var j = 0; j < tokens2.length; j++) { + if(token == tokens2[j]) continue outer; + } + values.push(token); + } + return values; + } + + function arrayClasses (classVal) { + if (isArray(classVal)) { + return classVal; + } else if (isString(classVal)) { + return classVal.split(' '); + } else if (isObject(classVal)) { + var classes = [], i = 0; + forEach(classVal, function(v, k) { + if (v) { + classes = classes.concat(k.split(' ')); + } + }); + return classes; + } + return classVal; + } + }]; +} + +/** + * @ngdoc directive + * @name ngClass + * @restrict AC + * + * @description + * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding + * an expression that represents all classes to be added. + * + * The directive operates in three different ways, depending on which of three types the expression + * evaluates to: + * + * 1. If the expression evaluates to a string, the string should be one or more space-delimited class + * names. + * + * 2. If the expression evaluates to an array, each element of the array should be a string that is + * one or more space-delimited class names. + * + * 3. If the expression evaluates to an object, then for each key-value pair of the + * object with a truthy value the corresponding key is used as a class name. + * + * The directive won't add duplicate classes if a particular class was already set. + * + * When the expression changes, the previously added classes are removed and only then the + * new classes are added. + * + * @animations + * add - happens just before the class is applied to the element + * remove - happens just before the class is removed from the element + * + * @element ANY + * @param {expression} ngClass {@link guide/expression Expression} to eval. The result + * of the evaluation can be a string representing space delimited class + * names, an array, or a map of class names to boolean values. In the case of a map, the + * names of the properties whose values are truthy will be added as css classes to the + * element. + * + * @example Example that demonstrates basic bindings via ngClass directive. + + +

      Map Syntax Example

      + deleted (apply "strike" class)
      + important (apply "bold" class)
      + error (apply "red" class) +
      +

      Using String Syntax

      + +
      +

      Using Array Syntax

      +
      +
      +
      +
      + + .strike { + text-decoration: line-through; + } + .bold { + font-weight: bold; + } + .red { + color: red; + } + + + var ps = element.all(by.css('p')); + + it('should let you toggle the class', function() { + + expect(ps.first().getAttribute('class')).not.toMatch(/bold/); + expect(ps.first().getAttribute('class')).not.toMatch(/red/); + + element(by.model('important')).click(); + expect(ps.first().getAttribute('class')).toMatch(/bold/); + + element(by.model('error')).click(); + expect(ps.first().getAttribute('class')).toMatch(/red/); + }); + + it('should let you toggle string example', function() { + expect(ps.get(1).getAttribute('class')).toBe(''); + element(by.model('style')).clear(); + element(by.model('style')).sendKeys('red'); + expect(ps.get(1).getAttribute('class')).toBe('red'); + }); + + it('array example should have 3 classes', function() { + expect(ps.last().getAttribute('class')).toBe(''); + element(by.model('style1')).sendKeys('bold'); + element(by.model('style2')).sendKeys('strike'); + element(by.model('style3')).sendKeys('red'); + expect(ps.last().getAttribute('class')).toBe('bold strike red'); + }); + +
      + + ## Animations + + The example below demonstrates how to perform animations using ngClass. + + + + + +
      + Sample Text +
      + + .base-class { + -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + } + + .base-class.my-class { + color: red; + font-size:3em; + } + + + it('should check ng-class', function() { + expect(element(by.css('.base-class')).getAttribute('class')).not. + toMatch(/my-class/); + + element(by.id('setbtn')).click(); + + expect(element(by.css('.base-class')).getAttribute('class')). + toMatch(/my-class/); + + element(by.id('clearbtn')).click(); + + expect(element(by.css('.base-class')).getAttribute('class')).not. + toMatch(/my-class/); + }); + +
      + + + ## ngClass and pre-existing CSS3 Transitions/Animations + The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. + Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder + any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure + to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and + {@link ngAnimate.$animate#removeclass $animate.removeClass}. + */ +var ngClassDirective = classDirective('', true); + +/** + * @ngdoc directive + * @name ngClassOdd + * @restrict AC + * + * @description + * The `ngClassOdd` and `ngClassEven` directives work exactly as + * {@link ng.directive:ngClass ngClass}, except they work in + * conjunction with `ngRepeat` and take effect only on odd (even) rows. + * + * This directive can be applied only within the scope of an + * {@link ng.directive:ngRepeat ngRepeat}. + * + * @element ANY + * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result + * of the evaluation can be a string representing space delimited class names or an array. + * + * @example + + +
        +
      1. + + {{name}} + +
      2. +
      +
      + + .odd { + color: red; + } + .even { + color: blue; + } + + + it('should check ng-class-odd and ng-class-even', function() { + expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). + toMatch(/odd/); + expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). + toMatch(/even/); + }); + +
      + */ +var ngClassOddDirective = classDirective('Odd', 0); + +/** + * @ngdoc directive + * @name ngClassEven + * @restrict AC + * + * @description + * The `ngClassOdd` and `ngClassEven` directives work exactly as + * {@link ng.directive:ngClass ngClass}, except they work in + * conjunction with `ngRepeat` and take effect only on odd (even) rows. + * + * This directive can be applied only within the scope of an + * {@link ng.directive:ngRepeat ngRepeat}. + * + * @element ANY + * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The + * result of the evaluation can be a string representing space delimited class names or an array. + * + * @example + + +
        +
      1. + + {{name}}       + +
      2. +
      +
      + + .odd { + color: red; + } + .even { + color: blue; + } + + + it('should check ng-class-odd and ng-class-even', function() { + expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). + toMatch(/odd/); + expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). + toMatch(/even/); + }); + +
      + */ +var ngClassEvenDirective = classDirective('Even', 1); + +/** + * @ngdoc directive + * @name ngCloak + * @restrict AC + * + * @description + * The `ngCloak` directive is used to prevent the Angular html template from being briefly + * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this + * directive to avoid the undesirable flicker effect caused by the html template display. + * + * The directive can be applied to the `` element, but the preferred usage is to apply + * multiple `ngCloak` directives to small portions of the page to permit progressive rendering + * of the browser view. + * + * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and + * `angular.min.js`. + * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). + * + * ```css + * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + * display: none !important; + * } + * ``` + * + * When this css rule is loaded by the browser, all html elements (including their children) that + * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive + * during the compilation of the template it deletes the `ngCloak` element attribute, making + * the compiled element visible. + * + * For the best result, the `angular.js` script must be loaded in the head section of the html + * document; alternatively, the css rule above must be included in the external stylesheet of the + * application. + * + * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they + * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css + * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below. + * + * @element ANY + * + * @example + + +
      {{ 'hello' }}
      +
      {{ 'hello IE7' }}
      +
      + + it('should remove the template directive and css class', function() { + expect($('#template1').getAttribute('ng-cloak')). + toBeNull(); + expect($('#template2').getAttribute('ng-cloak')). + toBeNull(); + }); + +
      + * + */ +var ngCloakDirective = ngDirective({ + compile: function(element, attr) { + attr.$set('ngCloak', undefined); + element.removeClass('ng-cloak'); + } +}); + +/** + * @ngdoc directive + * @name ngController + * + * @description + * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular + * supports the principles behind the Model-View-Controller design pattern. + * + * MVC components in angular: + * + * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties + * are accessed through bindings. + * * View — The template (HTML with data bindings) that is rendered into the View. + * * Controller — The `ngController` directive specifies a Controller class; the class contains business + * logic behind the application to decorate the scope with functions and values + * + * Note that you can also attach controllers to the DOM by declaring it in a route definition + * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller + * again using `ng-controller` in the template itself. This will cause the controller to be attached + * and executed twice. + * + * @element ANY + * @scope + * @priority 500 + * @param {expression} ngController Name of a globally accessible constructor function or an + * {@link guide/expression expression} that on the current scope evaluates to a + * constructor function. The controller instance can be published into a scope property + * by specifying `as propertyName`. + * + * @example + * Here is a simple form for editing user contact information. Adding, removing, clearing, and + * greeting are methods declared on the controller (see source tab). These methods can + * easily be called from the angular markup. Any changes to the data are automatically reflected + * in the View without the need for a manual update. + * + * Two different declaration styles are included below: + * + * * one binds methods and properties directly onto the controller using `this`: + * `ng-controller="SettingsController1 as settings"` + * * one injects `$scope` into the controller: + * `ng-controller="SettingsController2"` + * + * The second option is more common in the Angular community, and is generally used in boilerplates + * and in this guide. However, there are advantages to binding properties directly to the controller + * and avoiding scope. + * + * * Using `controller as` makes it obvious which controller you are accessing in the template when + * multiple controllers apply to an element. + * * If you are writing your controllers as classes you have easier access to the properties and + * methods, which will appear on the scope, from inside the controller code. + * * Since there is always a `.` in the bindings, you don't have to worry about prototypal + * inheritance masking primitives. + * + * This example demonstrates the `controller as` syntax. + * + * + * + *
      + * Name: + * [ greet ]
      + * Contact: + *
        + *
      • + * + * + * [ clear + * | X ] + *
      • + *
      • [ add ]
      • + *
      + *
      + *
      + * + * angular.module('controllerAsExample', []) + * .controller('SettingsController1', SettingsController1); + * + * function SettingsController1() { + * this.name = "John Smith"; + * this.contacts = [ + * {type: 'phone', value: '408 555 1212'}, + * {type: 'email', value: 'john.smith@example.org'} ]; + * } + * + * SettingsController1.prototype.greet = function() { + * alert(this.name); + * }; + * + * SettingsController1.prototype.addContact = function() { + * this.contacts.push({type: 'email', value: 'yourname@example.org'}); + * }; + * + * SettingsController1.prototype.removeContact = function(contactToRemove) { + * var index = this.contacts.indexOf(contactToRemove); + * this.contacts.splice(index, 1); + * }; + * + * SettingsController1.prototype.clearContact = function(contact) { + * contact.type = 'phone'; + * contact.value = ''; + * }; + * + * + * it('should check controller as', function() { + * var container = element(by.id('ctrl-as-exmpl')); + * expect(container.element(by.model('settings.name')) + * .getAttribute('value')).toBe('John Smith'); + * + * var firstRepeat = + * container.element(by.repeater('contact in settings.contacts').row(0)); + * var secondRepeat = + * container.element(by.repeater('contact in settings.contacts').row(1)); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('408 555 1212'); + * + * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('john.smith@example.org'); + * + * firstRepeat.element(by.linkText('clear')).click(); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe(''); + * + * container.element(by.linkText('add')).click(); + * + * expect(container.element(by.repeater('contact in settings.contacts').row(2)) + * .element(by.model('contact.value')) + * .getAttribute('value')) + * .toBe('yourname@example.org'); + * }); + * + *
      + * + * This example demonstrates the "attach to `$scope`" style of controller. + * + * + * + *
      + * Name: + * [ greet ]
      + * Contact: + *
        + *
      • + * + * + * [ clear + * | X ] + *
      • + *
      • [ add ]
      • + *
      + *
      + *
      + * + * angular.module('controllerExample', []) + * .controller('SettingsController2', ['$scope', SettingsController2]); + * + * function SettingsController2($scope) { + * $scope.name = "John Smith"; + * $scope.contacts = [ + * {type:'phone', value:'408 555 1212'}, + * {type:'email', value:'john.smith@example.org'} ]; + * + * $scope.greet = function() { + * alert($scope.name); + * }; + * + * $scope.addContact = function() { + * $scope.contacts.push({type:'email', value:'yourname@example.org'}); + * }; + * + * $scope.removeContact = function(contactToRemove) { + * var index = $scope.contacts.indexOf(contactToRemove); + * $scope.contacts.splice(index, 1); + * }; + * + * $scope.clearContact = function(contact) { + * contact.type = 'phone'; + * contact.value = ''; + * }; + * } + * + * + * it('should check controller', function() { + * var container = element(by.id('ctrl-exmpl')); + * + * expect(container.element(by.model('name')) + * .getAttribute('value')).toBe('John Smith'); + * + * var firstRepeat = + * container.element(by.repeater('contact in contacts').row(0)); + * var secondRepeat = + * container.element(by.repeater('contact in contacts').row(1)); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('408 555 1212'); + * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('john.smith@example.org'); + * + * firstRepeat.element(by.linkText('clear')).click(); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe(''); + * + * container.element(by.linkText('add')).click(); + * + * expect(container.element(by.repeater('contact in contacts').row(2)) + * .element(by.model('contact.value')) + * .getAttribute('value')) + * .toBe('yourname@example.org'); + * }); + * + *
      + + */ +var ngControllerDirective = [function() { + return { + scope: true, + controller: '@', + priority: 500 + }; +}]; + +/** + * @ngdoc directive + * @name ngCsp + * + * @element html + * @description + * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. + * + * This is necessary when developing things like Google Chrome Extensions. + * + * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). + * For Angular to be CSP compatible there are only two things that we need to do differently: + * + * - don't use `Function` constructor to generate optimized value getters + * - don't inject custom stylesheet into the document + * + * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` + * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will + * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will + * be raised. + * + * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically + * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). + * To make those directives work in CSP mode, include the `angular-csp.css` manually. + * + * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This + * autodetection however triggers a CSP error to be logged in the console: + * + * ``` + * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of + * script in the following Content Security Policy directive: "default-src 'self'". Note that + * 'script-src' was not explicitly set, so 'default-src' is used as a fallback. + * ``` + * + * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp` + * directive on the root element of the application or on the `angular.js` script tag, whichever + * appears first in the html document. + * + * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* + * + * @example + * This example shows how to apply the `ngCsp` directive to the `html` tag. + ```html + + + ... + ... + + ``` + */ + +// ngCsp is not implemented as a proper directive any more, because we need it be processed while we +// bootstrap the system (before $parse is instantiated), for this reason we just have +// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc + +/** + * @ngdoc directive + * @name ngClick + * + * @description + * The ngClick directive allows you to specify custom behavior when + * an element is clicked. + * + * @element ANY + * @priority 0 + * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon + * click. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + + count: {{count}} + + + + it('should check ng-click', function() { + expect(element(by.binding('count')).getText()).toMatch('0'); + element(by.css('button')).click(); + expect(element(by.binding('count')).getText()).toMatch('1'); + }); + + + */ +/* + * A collection of directives that allows creation of custom event handlers that are defined as + * angular expressions and are compiled and executed within the current scope. + */ +var ngEventDirectives = {}; + +// For events that might fire synchronously during DOM manipulation +// we need to execute their event handlers asynchronously using $evalAsync, +// so that they are not executed in an inconsistent state. +var forceAsyncEvents = { + 'blur': true, + 'focus': true +}; +forEach( + 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), + function(eventName) { + var directiveName = directiveNormalize('ng-' + eventName); + ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) { + return { + compile: function($element, attr) { + // We expose the powerful $event object on the scope that provides access to the Window, + // etc. that isn't protected by the fast paths in $parse. We explicitly request better + // checks at the cost of speed since event handler expressions are not executed as + // frequently as regular change detection. + var fn = $parse(attr[directiveName], /* expensiveChecks */ true); + return function ngEventHandler(scope, element) { + element.on(eventName, function(event) { + var callback = function() { + fn(scope, {$event:event}); + }; + if (forceAsyncEvents[eventName] && $rootScope.$$phase) { + scope.$evalAsync(callback); + } else { + scope.$apply(callback); + } + }); + }; + } + }; + }]; + } +); + +/** + * @ngdoc directive + * @name ngDblclick + * + * @description + * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event. + * + * @element ANY + * @priority 0 + * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon + * a dblclick. (The Event object is available as `$event`) + * + * @example + + + + count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngMousedown + * + * @description + * The ngMousedown directive allows you to specify custom behavior on mousedown event. + * + * @element ANY + * @priority 0 + * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon + * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngMouseup + * + * @description + * Specify custom behavior on mouseup event. + * + * @element ANY + * @priority 0 + * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon + * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + count: {{count}} + + + */ + +/** + * @ngdoc directive + * @name ngMouseover + * + * @description + * Specify custom behavior on mouseover event. + * + * @element ANY + * @priority 0 + * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon + * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngMouseenter + * + * @description + * Specify custom behavior on mouseenter event. + * + * @element ANY + * @priority 0 + * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon + * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngMouseleave + * + * @description + * Specify custom behavior on mouseleave event. + * + * @element ANY + * @priority 0 + * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon + * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngMousemove + * + * @description + * Specify custom behavior on mousemove event. + * + * @element ANY + * @priority 0 + * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon + * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngKeydown + * + * @description + * Specify custom behavior on keydown event. + * + * @element ANY + * @priority 0 + * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon + * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) + * + * @example + + + + key down count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngKeyup + * + * @description + * Specify custom behavior on keyup event. + * + * @element ANY + * @priority 0 + * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon + * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) + * + * @example + + +

      Typing in the input box below updates the key count

      + key up count: {{count}} + +

      Typing in the input box below updates the keycode

      + +

      event keyCode: {{ event.keyCode }}

      +

      event altKey: {{ event.altKey }}

      +
      +
      + */ + + +/** + * @ngdoc directive + * @name ngKeypress + * + * @description + * Specify custom behavior on keypress event. + * + * @element ANY + * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon + * keypress. ({@link guide/expression#-event- Event object is available as `$event`} + * and can be interrogated for keyCode, altKey, etc.) + * + * @example + + + + key press count: {{count}} + + + */ + + +/** + * @ngdoc directive + * @name ngSubmit + * + * @description + * Enables binding angular expressions to onsubmit events. + * + * Additionally it prevents the default action (which for form means sending the request to the + * server and reloading the current page), but only if the form does not contain `action`, + * `data-action`, or `x-action` attributes. + * + *
      + * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and + * `ngSubmit` handlers together. See the + * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation} + * for a detailed discussion of when `ngSubmit` may be triggered. + *
      + * + * @element form + * @priority 0 + * @param {expression} ngSubmit {@link guide/expression Expression} to eval. + * ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + +
      + Enter text and hit enter: + + +
      list={{list}}
      +
      +
      + + it('should check ng-submit', function() { + expect(element(by.binding('list')).getText()).toBe('list=[]'); + element(by.css('#submit')).click(); + expect(element(by.binding('list')).getText()).toContain('hello'); + expect(element(by.model('text')).getAttribute('value')).toBe(''); + }); + it('should ignore empty strings', function() { + expect(element(by.binding('list')).getText()).toBe('list=[]'); + element(by.css('#submit')).click(); + element(by.css('#submit')).click(); + expect(element(by.binding('list')).getText()).toContain('hello'); + }); + +
      + */ + +/** + * @ngdoc directive + * @name ngFocus + * + * @description + * Specify custom behavior on focus event. + * + * Note: As the `focus` event is executed synchronously when calling `input.focus()` + * AngularJS executes the expression using `scope.$evalAsync` if the event is fired + * during an `$apply` to ensure a consistent state. + * + * @element window, input, select, textarea, a + * @priority 0 + * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon + * focus. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + * See {@link ng.directive:ngClick ngClick} + */ + +/** + * @ngdoc directive + * @name ngBlur + * + * @description + * Specify custom behavior on blur event. + * + * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when + * an element has lost focus. + * + * Note: As the `blur` event is executed synchronously also during DOM manipulations + * (e.g. removing a focussed input), + * AngularJS executes the expression using `scope.$evalAsync` if the event is fired + * during an `$apply` to ensure a consistent state. + * + * @element window, input, select, textarea, a + * @priority 0 + * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon + * blur. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + * See {@link ng.directive:ngClick ngClick} + */ + +/** + * @ngdoc directive + * @name ngCopy + * + * @description + * Specify custom behavior on copy event. + * + * @element window, input, select, textarea, a + * @priority 0 + * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon + * copy. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + copied: {{copied}} + + + */ + +/** + * @ngdoc directive + * @name ngCut + * + * @description + * Specify custom behavior on cut event. + * + * @element window, input, select, textarea, a + * @priority 0 + * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon + * cut. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + cut: {{cut}} + + + */ + +/** + * @ngdoc directive + * @name ngPaste + * + * @description + * Specify custom behavior on paste event. + * + * @element window, input, select, textarea, a + * @priority 0 + * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon + * paste. ({@link guide/expression#-event- Event object is available as `$event`}) + * + * @example + + + + pasted: {{paste}} + + + */ + +/** + * @ngdoc directive + * @name ngIf + * @restrict A + * + * @description + * The `ngIf` directive removes or recreates a portion of the DOM tree based on an + * {expression}. If the expression assigned to `ngIf` evaluates to a false + * value then the element is removed from the DOM, otherwise a clone of the + * element is reinserted into the DOM. + * + * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the + * element in the DOM rather than changing its visibility via the `display` css property. A common + * case when this difference is significant is when using css selectors that rely on an element's + * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes. + * + * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope + * is created when the element is restored. The scope created within `ngIf` inherits from + * its parent scope using + * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance). + * An important implication of this is if `ngModel` is used within `ngIf` to bind to + * a javascript primitive defined in the parent scope. In this case any modifications made to the + * variable within the child scope will override (hide) the value in the parent scope. + * + * Also, `ngIf` recreates elements using their compiled state. An example of this behavior + * is if an element's class attribute is directly modified after it's compiled, using something like + * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element + * the added class will be lost because the original compiled state is used to regenerate the element. + * + * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter` + * and `leave` effects. + * + * @animations + * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container + * leave - happens just before the `ngIf` contents are removed from the DOM + * + * @element ANY + * @scope + * @priority 600 + * @param {expression} ngIf If the {@link guide/expression expression} is falsy then + * the element is removed from the DOM tree. If it is truthy a copy of the compiled + * element is added to the DOM tree. + * + * @example + + + Click me:
      + Show when checked: + + I'm removed when the checkbox is unchecked. + +
      + + .animate-if { + background:white; + border:1px solid black; + padding:10px; + } + + .animate-if.ng-enter, .animate-if.ng-leave { + -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + } + + .animate-if.ng-enter, + .animate-if.ng-leave.ng-leave-active { + opacity:0; + } + + .animate-if.ng-leave, + .animate-if.ng-enter.ng-enter-active { + opacity:1; + } + +
      + */ +var ngIfDirective = ['$animate', function($animate) { + return { + transclude: 'element', + priority: 600, + terminal: true, + restrict: 'A', + $$tlb: true, + link: function ($scope, $element, $attr, ctrl, $transclude) { + var block, childScope, previousElements; + $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { + + if (toBoolean(value)) { + if (!childScope) { + childScope = $scope.$new(); + $transclude(childScope, function (clone) { + clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); + // Note: We only need the first/last node of the cloned nodes. + // However, we need to keep the reference to the jqlite wrapper as it might be changed later + // by a directive with templateUrl when its template arrives. + block = { + clone: clone + }; + $animate.enter(clone, $element.parent(), $element); + }); + } + } else { + if(previousElements) { + previousElements.remove(); + previousElements = null; + } + if(childScope) { + childScope.$destroy(); + childScope = null; + } + if(block) { + previousElements = getBlockElements(block.clone); + $animate.leave(previousElements, function() { + previousElements = null; + }); + block = null; + } + } + }); + } + }; +}]; + +/** + * @ngdoc directive + * @name ngInclude + * @restrict ECA + * + * @description + * Fetches, compiles and includes an external HTML fragment. + * + * By default, the template URL is restricted to the same domain and protocol as the + * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols + * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or + * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link + * ng.$sce Strict Contextual Escaping}. + * + * In addition, the browser's + * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) + * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) + * policy may further restrict whether the template is successfully loaded. + * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://` + * access on some browsers. + * + * @animations + * enter - animation is used to bring new content into the browser. + * leave - animation is used to animate existing content away. + * + * The enter and leave animation occur concurrently. + * + * @scope + * @priority 400 + * + * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, + * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. + * @param {string=} onload Expression to evaluate when a new partial is loaded. + * + * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll + * $anchorScroll} to scroll the viewport after the content is loaded. + * + * - If the attribute is not set, disable scrolling. + * - If the attribute is set without value, enable scrolling. + * - Otherwise enable scrolling only if the expression evaluates to truthy value. + * + * @example + + +
      + + url of the template: {{template.url}} +
      +
      +
      +
      +
      +
      + + angular.module('includeExample', ['ngAnimate']) + .controller('ExampleController', ['$scope', function($scope) { + $scope.templates = + [ { name: 'template1.html', url: 'template1.html'}, + { name: 'template2.html', url: 'template2.html'} ]; + $scope.template = $scope.templates[0]; + }]); + + + Content of template1.html + + + Content of template2.html + + + .slide-animate-container { + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .slide-animate { + padding:10px; + } + + .slide-animate.ng-enter, .slide-animate.ng-leave { + -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + + position:absolute; + top:0; + left:0; + right:0; + bottom:0; + display:block; + padding:10px; + } + + .slide-animate.ng-enter { + top:-50px; + } + .slide-animate.ng-enter.ng-enter-active { + top:0; + } + + .slide-animate.ng-leave { + top:0; + } + .slide-animate.ng-leave.ng-leave-active { + top:50px; + } + + + var templateSelect = element(by.model('template')); + var includeElem = element(by.css('[ng-include]')); + + it('should load template1.html', function() { + expect(includeElem.getText()).toMatch(/Content of template1.html/); + }); + + it('should load template2.html', function() { + if (browser.params.browser == 'firefox') { + // Firefox can't handle using selects + // See https://github.com/angular/protractor/issues/480 + return; + } + templateSelect.click(); + templateSelect.all(by.css('option')).get(2).click(); + expect(includeElem.getText()).toMatch(/Content of template2.html/); + }); + + it('should change to blank', function() { + if (browser.params.browser == 'firefox') { + // Firefox can't handle using selects + return; + } + templateSelect.click(); + templateSelect.all(by.css('option')).get(0).click(); + expect(includeElem.isPresent()).toBe(false); + }); + +
      + */ + + +/** + * @ngdoc event + * @name ngInclude#$includeContentRequested + * @eventType emit on the scope ngInclude was declared in + * @description + * Emitted every time the ngInclude content is requested. + */ + + +/** + * @ngdoc event + * @name ngInclude#$includeContentLoaded + * @eventType emit on the current ngInclude scope + * @description + * Emitted every time the ngInclude content is reloaded. + */ +var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce', + function($http, $templateCache, $anchorScroll, $animate, $sce) { + return { + restrict: 'ECA', + priority: 400, + terminal: true, + transclude: 'element', + controller: angular.noop, + compile: function(element, attr) { + var srcExp = attr.ngInclude || attr.src, + onloadExp = attr.onload || '', + autoScrollExp = attr.autoscroll; + + return function(scope, $element, $attr, ctrl, $transclude) { + var changeCounter = 0, + currentScope, + previousElement, + currentElement; + + var cleanupLastIncludeContent = function() { + if(previousElement) { + previousElement.remove(); + previousElement = null; + } + if(currentScope) { + currentScope.$destroy(); + currentScope = null; + } + if(currentElement) { + $animate.leave(currentElement, function() { + previousElement = null; + }); + previousElement = currentElement; + currentElement = null; + } + }; + + scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { + var afterAnimation = function() { + if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { + $anchorScroll(); + } + }; + var thisChangeId = ++changeCounter; + + if (src) { + $http.get(src, {cache: $templateCache}).success(function(response) { + if (thisChangeId !== changeCounter) return; + var newScope = scope.$new(); + ctrl.template = response; + + // Note: This will also link all children of ng-include that were contained in the original + // html. If that content contains controllers, ... they could pollute/change the scope. + // However, using ng-include on an element with additional content does not make sense... + // Note: We can't remove them in the cloneAttchFn of $transclude as that + // function is called before linking the content, which would apply child + // directives to non existing elements. + var clone = $transclude(newScope, function(clone) { + cleanupLastIncludeContent(); + $animate.enter(clone, null, $element, afterAnimation); + }); + + currentScope = newScope; + currentElement = clone; + + currentScope.$emit('$includeContentLoaded'); + scope.$eval(onloadExp); + }).error(function() { + if (thisChangeId === changeCounter) cleanupLastIncludeContent(); + }); + scope.$emit('$includeContentRequested'); + } else { + cleanupLastIncludeContent(); + ctrl.template = null; + } + }); + }; + } + }; +}]; + +// This directive is called during the $transclude call of the first `ngInclude` directive. +// It will replace and compile the content of the element with the loaded template. +// We need this directive so that the element content is already filled when +// the link function of another directive on the same element as ngInclude +// is called. +var ngIncludeFillContentDirective = ['$compile', + function($compile) { + return { + restrict: 'ECA', + priority: -400, + require: 'ngInclude', + link: function(scope, $element, $attr, ctrl) { + $element.html(ctrl.template); + $compile($element.contents())(scope); + } + }; + }]; + +/** + * @ngdoc directive + * @name ngInit + * @restrict AC + * + * @description + * The `ngInit` directive allows you to evaluate an expression in the + * current scope. + * + *
      + * The only appropriate use of `ngInit` is for aliasing special properties of + * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you + * should use {@link guide/controller controllers} rather than `ngInit` + * to initialize values on a scope. + *
      + *
      + * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make + * sure you have parenthesis for correct precedence: + *
      + *   
      + *
      + *
      + * + * @priority 450 + * + * @element ANY + * @param {expression} ngInit {@link guide/expression Expression} to eval. + * + * @example + + + +
      +
      +
      + list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}}; +
      +
      +
      +
      + + it('should alias index positions', function() { + var elements = element.all(by.css('.example-init')); + expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;'); + expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;'); + expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;'); + expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;'); + }); + +
      + */ +var ngInitDirective = ngDirective({ + priority: 450, + compile: function() { + return { + pre: function(scope, element, attrs) { + scope.$eval(attrs.ngInit); + } + }; + } +}); + +/** + * @ngdoc directive + * @name ngNonBindable + * @restrict AC + * @priority 1000 + * + * @description + * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current + * DOM element. This is useful if the element contains what appears to be Angular directives and + * bindings but which should be ignored by Angular. This could be the case if you have a site that + * displays snippets of code, for instance. + * + * @element ANY + * + * @example + * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, + * but the one wrapped in `ngNonBindable` is left alone. + * + * @example + + +
      Normal: {{1 + 2}}
      +
      Ignored: {{1 + 2}}
      +
      + + it('should check ng-non-bindable', function() { + expect(element(by.binding('1 + 2')).getText()).toContain('3'); + expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); + }); + +
      + */ +var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); + +/** + * @ngdoc directive + * @name ngPluralize + * @restrict EA + * + * @description + * `ngPluralize` is a directive that displays messages according to en-US localization rules. + * These rules are bundled with angular.js, but can be overridden + * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive + * by specifying the mappings between + * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) + * and the strings to be displayed. + * + * # Plural categories and explicit number rules + * There are two + * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) + * in Angular's default en-US locale: "one" and "other". + * + * While a plural category may match many numbers (for example, in en-US locale, "other" can match + * any number that is not 1), an explicit number rule can only match one number. For example, the + * explicit number rule for "3" matches the number 3. There are examples of plural categories + * and explicit number rules throughout the rest of this documentation. + * + * # Configuring ngPluralize + * You configure ngPluralize by providing 2 attributes: `count` and `when`. + * You can also provide an optional attribute, `offset`. + * + * The value of the `count` attribute can be either a string or an {@link guide/expression + * Angular expression}; these are evaluated on the current scope for its bound value. + * + * The `when` attribute specifies the mappings between plural categories and the actual + * string to be displayed. The value of the attribute should be a JSON object. + * + * The following example shows how to configure ngPluralize: + * + * ```html + * + * + *``` + * + * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not + * specify this rule, 0 would be matched to the "other" category and "0 people are viewing" + * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for + * other numbers, for example 12, so that instead of showing "12 people are viewing", you can + * show "a dozen people are viewing". + * + * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted + * into pluralized strings. In the previous example, Angular will replace `{}` with + * `{{personCount}}`. The closed braces `{}` is a placeholder + * for {{numberExpression}}. + * + * # Configuring ngPluralize with offset + * The `offset` attribute allows further customization of pluralized text, which can result in + * a better user experience. For example, instead of the message "4 people are viewing this document", + * you might display "John, Kate and 2 others are viewing this document". + * The offset attribute allows you to offset a number by any desired value. + * Let's take a look at an example: + * + * ```html + * + * + * ``` + * + * Notice that we are still using two plural categories(one, other), but we added + * three explicit number rules 0, 1 and 2. + * When one person, perhaps John, views the document, "John is viewing" will be shown. + * When three people view the document, no explicit number rule is found, so + * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. + * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing" + * is shown. + * + * Note that when you specify offsets, you must provide explicit number rules for + * numbers from 0 up to and including the offset. If you use an offset of 3, for example, + * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for + * plural categories "one" and "other". + * + * @param {string|expression} count The variable to be bound to. + * @param {string} when The mapping between plural category to its corresponding strings. + * @param {number=} offset Offset to deduct from the total number. + * + * @example + + + +
      + Person 1:
      + Person 2:
      + Number of People:
      + + + Without Offset: + +
      + + + With Offset(2): + + +
      +
      + + it('should show correct pluralized string', function() { + var withoutOffset = element.all(by.css('ng-pluralize')).get(0); + var withOffset = element.all(by.css('ng-pluralize')).get(1); + var countInput = element(by.model('personCount')); + + expect(withoutOffset.getText()).toEqual('1 person is viewing.'); + expect(withOffset.getText()).toEqual('Igor is viewing.'); + + countInput.clear(); + countInput.sendKeys('0'); + + expect(withoutOffset.getText()).toEqual('Nobody is viewing.'); + expect(withOffset.getText()).toEqual('Nobody is viewing.'); + + countInput.clear(); + countInput.sendKeys('2'); + + expect(withoutOffset.getText()).toEqual('2 people are viewing.'); + expect(withOffset.getText()).toEqual('Igor and Misko are viewing.'); + + countInput.clear(); + countInput.sendKeys('3'); + + expect(withoutOffset.getText()).toEqual('3 people are viewing.'); + expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.'); + + countInput.clear(); + countInput.sendKeys('4'); + + expect(withoutOffset.getText()).toEqual('4 people are viewing.'); + expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.'); + }); + it('should show data-bound names', function() { + var withOffset = element.all(by.css('ng-pluralize')).get(1); + var personCount = element(by.model('personCount')); + var person1 = element(by.model('person1')); + var person2 = element(by.model('person2')); + personCount.clear(); + personCount.sendKeys('4'); + person1.clear(); + person1.sendKeys('Di'); + person2.clear(); + person2.sendKeys('Vojta'); + expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.'); + }); + +
      + */ +var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) { + var BRACE = /{}/g; + return { + restrict: 'EA', + link: function(scope, element, attr) { + var numberExp = attr.count, + whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs + offset = attr.offset || 0, + whens = scope.$eval(whenExp) || {}, + whensExpFns = {}, + startSymbol = $interpolate.startSymbol(), + endSymbol = $interpolate.endSymbol(), + isWhen = /^when(Minus)?(.+)$/; + + forEach(attr, function(expression, attributeName) { + if (isWhen.test(attributeName)) { + whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] = + element.attr(attr.$attr[attributeName]); + } + }); + forEach(whens, function(expression, key) { + whensExpFns[key] = + $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' + + offset + endSymbol)); + }); + + scope.$watch(function ngPluralizeWatch() { + var value = parseFloat(scope.$eval(numberExp)); + + if (!isNaN(value)) { + //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise, + //check it against pluralization rules in $locale service + if (!(value in whens)) value = $locale.pluralCat(value - offset); + return whensExpFns[value](scope, element, true); + } else { + return ''; + } + }, function ngPluralizeWatchAction(newVal) { + element.text(newVal); + }); + } + }; +}]; + +/** + * @ngdoc directive + * @name ngRepeat + * + * @description + * The `ngRepeat` directive instantiates a template once per item from a collection. Each template + * instance gets its own scope, where the given loop variable is set to the current collection item, + * and `$index` is set to the item index or key. + * + * Special properties are exposed on the local scope of each template instance, including: + * + * | Variable | Type | Details | + * |-----------|-----------------|-----------------------------------------------------------------------------| + * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | + * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | + * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | + * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | + * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | + * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | + * + * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}. + * This may be useful when, for instance, nesting ngRepeats. + * + * # Special repeat start and end points + * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending + * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. + * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) + * up to and including the ending HTML tag where **ng-repeat-end** is placed. + * + * The example below makes use of this feature: + * ```html + *
      + * Header {{ item }} + *
      + *
      + * Body {{ item }} + *
      + *
      + * Footer {{ item }} + *
      + * ``` + * + * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: + * ```html + *
      + * Header A + *
      + *
      + * Body A + *
      + *
      + * Footer A + *
      + *
      + * Header B + *
      + *
      + * Body B + *
      + *
      + * Footer B + *
      + * ``` + * + * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such + * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). + * + * @animations + * **.enter** - when a new item is added to the list or when an item is revealed after a filter + * + * **.leave** - when an item is removed from the list or when an item is filtered out + * + * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered + * + * @element ANY + * @scope + * @priority 1000 + * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These + * formats are currently supported: + * + * * `variable in expression` – where variable is the user defined loop variable and `expression` + * is a scope expression giving the collection to enumerate. + * + * For example: `album in artist.albums`. + * + * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, + * and `expression` is the scope expression giving the collection to enumerate. + * + * For example: `(name, age) in {'adam':10, 'amalie':12}`. + * + * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function + * which can be used to associate the objects in the collection with the DOM elements. If no tracking function + * is specified the ng-repeat associates elements by identity in the collection. It is an error to have + * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are + * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, + * before specifying a tracking expression. + * + * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements + * will be associated by item identity in the array. + * + * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique + * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements + * with the corresponding item in the array by identity. Moving the same object in array would move the DOM + * element in the same way in the DOM. + * + * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this + * case the object identity does not matter. Two objects are considered equivalent as long as their `id` + * property is same. + * + * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter + * to items in conjunction with a tracking expression. + * + * @example + * This example initializes the scope to a list of names and + * then uses `ngRepeat` to display every person: + + +
      + I have {{friends.length}} friends. They are: + +
        +
      • + [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. +
      • +
      +
      +
      + + .example-animate-container { + background:white; + border:1px solid black; + list-style:none; + margin:0; + padding:0 10px; + } + + .animate-repeat { + line-height:40px; + list-style:none; + box-sizing:border-box; + } + + .animate-repeat.ng-move, + .animate-repeat.ng-enter, + .animate-repeat.ng-leave { + -webkit-transition:all linear 0.5s; + transition:all linear 0.5s; + } + + .animate-repeat.ng-leave.ng-leave-active, + .animate-repeat.ng-move, + .animate-repeat.ng-enter { + opacity:0; + max-height:0; + } + + .animate-repeat.ng-leave, + .animate-repeat.ng-move.ng-move-active, + .animate-repeat.ng-enter.ng-enter-active { + opacity:1; + max-height:40px; + } + + + var friends = element.all(by.repeater('friend in friends')); + + it('should render initial data set', function() { + expect(friends.count()).toBe(10); + expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.'); + expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.'); + expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.'); + expect(element(by.binding('friends.length')).getText()) + .toMatch("I have 10 friends. They are:"); + }); + + it('should update repeater when filter predicate changes', function() { + expect(friends.count()).toBe(10); + + element(by.model('q')).sendKeys('ma'); + + expect(friends.count()).toBe(2); + expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.'); + expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.'); + }); + +
      + */ +var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { + var NG_REMOVED = '$$NG_REMOVED'; + var ngRepeatMinErr = minErr('ngRepeat'); + return { + transclude: 'element', + priority: 1000, + terminal: true, + $$tlb: true, + link: function($scope, $element, $attr, ctrl, $transclude){ + var expression = $attr.ngRepeat; + var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/), + trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn, + lhs, rhs, valueIdentifier, keyIdentifier, + hashFnLocals = {$id: hashKey}; + + if (!match) { + throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", + expression); + } + + lhs = match[1]; + rhs = match[2]; + trackByExp = match[3]; + + if (trackByExp) { + trackByExpGetter = $parse(trackByExp); + trackByIdExpFn = function(key, value, index) { + // assign key, value, and $index to the locals so that they can be used in hash functions + if (keyIdentifier) hashFnLocals[keyIdentifier] = key; + hashFnLocals[valueIdentifier] = value; + hashFnLocals.$index = index; + return trackByExpGetter($scope, hashFnLocals); + }; + } else { + trackByIdArrayFn = function(key, value) { + return hashKey(value); + }; + trackByIdObjFn = function(key) { + return key; + }; + } + + match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/); + if (!match) { + throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", + lhs); + } + valueIdentifier = match[3] || match[1]; + keyIdentifier = match[2]; + + // Store a list of elements from previous run. This is a hash where key is the item from the + // iterator, and the value is objects with following properties. + // - scope: bound scope + // - element: previous element. + // - index: position + var lastBlockMap = {}; + + //watch props + $scope.$watchCollection(rhs, function ngRepeatAction(collection){ + var index, length, + previousNode = $element[0], // current position of the node + nextNode, + // Same as lastBlockMap but it has the current state. It will become the + // lastBlockMap on the next iteration. + nextBlockMap = {}, + arrayLength, + childScope, + key, value, // key/value of iteration + trackById, + trackByIdFn, + collectionKeys, + block, // last object information {scope, element, id} + nextBlockOrder = [], + elementsToRemove; + + + if (isArrayLike(collection)) { + collectionKeys = collection; + trackByIdFn = trackByIdExpFn || trackByIdArrayFn; + } else { + trackByIdFn = trackByIdExpFn || trackByIdObjFn; + // if object, extract keys, sort them and use to determine order of iteration over obj props + collectionKeys = []; + for (key in collection) { + if (collection.hasOwnProperty(key) && key.charAt(0) != '$') { + collectionKeys.push(key); + } + } + collectionKeys.sort(); + } + + arrayLength = collectionKeys.length; + + // locate existing items + length = nextBlockOrder.length = collectionKeys.length; + for(index = 0; index < length; index++) { + key = (collection === collectionKeys) ? index : collectionKeys[index]; + value = collection[key]; + trackById = trackByIdFn(key, value, index); + assertNotHasOwnProperty(trackById, '`track by` id'); + if(lastBlockMap.hasOwnProperty(trackById)) { + block = lastBlockMap[trackById]; + delete lastBlockMap[trackById]; + nextBlockMap[trackById] = block; + nextBlockOrder[index] = block; + } else if (nextBlockMap.hasOwnProperty(trackById)) { + // restore lastBlockMap + forEach(nextBlockOrder, function(block) { + if (block && block.scope) lastBlockMap[block.id] = block; + }); + // This is a duplicate and we need to throw an error + throw ngRepeatMinErr('dupes', + "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", + expression, trackById, toJson(value)); + } else { + // new never before seen block + nextBlockOrder[index] = { id: trackById }; + nextBlockMap[trackById] = false; + } + } + + // remove existing items + for (key in lastBlockMap) { + // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn + if (lastBlockMap.hasOwnProperty(key)) { + block = lastBlockMap[key]; + elementsToRemove = getBlockElements(block.clone); + $animate.leave(elementsToRemove); + forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; }); + block.scope.$destroy(); + } + } + + // we are not using forEach for perf reasons (trying to avoid #call) + for (index = 0, length = collectionKeys.length; index < length; index++) { + key = (collection === collectionKeys) ? index : collectionKeys[index]; + value = collection[key]; + block = nextBlockOrder[index]; + if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]); + + if (block.scope) { + // if we have already seen this object, then we need to reuse the + // associated scope/element + childScope = block.scope; + + nextNode = previousNode; + do { + nextNode = nextNode.nextSibling; + } while(nextNode && nextNode[NG_REMOVED]); + + if (getBlockStart(block) != nextNode) { + // existing item which got moved + $animate.move(getBlockElements(block.clone), null, jqLite(previousNode)); + } + previousNode = getBlockEnd(block); + } else { + // new item which we don't know about + childScope = $scope.$new(); + } + + childScope[valueIdentifier] = value; + if (keyIdentifier) childScope[keyIdentifier] = key; + childScope.$index = index; + childScope.$first = (index === 0); + childScope.$last = (index === (arrayLength - 1)); + childScope.$middle = !(childScope.$first || childScope.$last); + // jshint bitwise: false + childScope.$odd = !(childScope.$even = (index&1) === 0); + // jshint bitwise: true + + if (!block.scope) { + $transclude(childScope, function(clone) { + clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' '); + $animate.enter(clone, null, jqLite(previousNode)); + previousNode = clone; + block.scope = childScope; + // Note: We only need the first/last node of the cloned nodes. + // However, we need to keep the reference to the jqlite wrapper as it might be changed later + // by a directive with templateUrl when its template arrives. + block.clone = clone; + nextBlockMap[block.id] = block; + }); + } + } + lastBlockMap = nextBlockMap; + }); + } + }; + + function getBlockStart(block) { + return block.clone[0]; + } + + function getBlockEnd(block) { + return block.clone[block.clone.length - 1]; + } +}]; + +/** + * @ngdoc directive + * @name ngShow + * + * @description + * The `ngShow` directive shows or hides the given HTML element based on the expression + * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding + * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined + * in AngularJS and sets the display style to none (using an !important flag). + * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). + * + * ```html + * + *
      + * + * + *
      + * ``` + * + * When the `ngShow` expression evaluates to false then the `.ng-hide` CSS class is added to the class attribute + * on the element causing it to become hidden. When true, the `.ng-hide` CSS class is removed + * from the element causing the element not to appear hidden. + * + *
      + * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):
      + * "f" / "0" / "false" / "no" / "n" / "[]" + *
      + * + * ## Why is !important used? + * + * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector + * can be easily overridden by heavier selectors. For example, something as simple + * as changing the display style on a HTML list item would make hidden elements appear visible. + * This also becomes a bigger issue when dealing with CSS frameworks. + * + * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector + * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the + * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. + * + * ### Overriding `.ng-hide` + * + * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change + * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` + * class in CSS: + * + * ```css + * .ng-hide { + * //this is just another form of hiding an element + * display:block!important; + * position:absolute; + * top:-9999px; + * left:-9999px; + * } + * ``` + * + * By default you don't need to override in CSS anything and the animations will work around the display style. + * + * ## A note about animations with `ngShow` + * + * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression + * is true and false. This system works like the animation system present with ngClass except that + * you must also include the !important flag to override the display property + * so that you can perform an animation when the element is hidden during the time of the animation. + * + * ```css + * // + * //a working example can be found at the bottom of this page + * // + * .my-element.ng-hide-add, .my-element.ng-hide-remove { + * transition:0.5s linear all; + * } + * + * .my-element.ng-hide-add { ... } + * .my-element.ng-hide-add.ng-hide-add-active { ... } + * .my-element.ng-hide-remove { ... } + * .my-element.ng-hide-remove.ng-hide-remove-active { ... } + * ``` + * + * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display + * property to block during animation states--ngAnimate will handle the style toggling automatically for you. + * + * @animations + * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible + * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden + * + * @element ANY + * @param {expression} ngShow If the {@link guide/expression expression} is truthy + * then the element is shown or hidden respectively. + * + * @example + + + Click me:
      +
      + Show: +
      + I show up when your checkbox is checked. +
      +
      +
      + Hide: +
      + I hide when your checkbox is checked. +
      +
      +
      + + @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); + + + .animate-show { + -webkit-transition:all linear 0.5s; + transition:all linear 0.5s; + line-height:20px; + opacity:1; + padding:10px; + border:1px solid black; + background:white; + } + + .animate-show.ng-hide { + line-height:0; + opacity:0; + padding:0 10px; + } + + .check-element { + padding:10px; + border:1px solid black; + background:white; + } + + + var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); + var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); + + it('should check ng-show / ng-hide', function() { + expect(thumbsUp.isDisplayed()).toBeFalsy(); + expect(thumbsDown.isDisplayed()).toBeTruthy(); + + element(by.model('checked')).click(); + + expect(thumbsUp.isDisplayed()).toBeTruthy(); + expect(thumbsDown.isDisplayed()).toBeFalsy(); + }); + +
      + */ +var ngShowDirective = ['$animate', function($animate) { + return function(scope, element, attr) { + scope.$watch(attr.ngShow, function ngShowWatchAction(value){ + $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide'); + }); + }; +}]; + + +/** + * @ngdoc directive + * @name ngHide + * + * @description + * The `ngHide` directive shows or hides the given HTML element based on the expression + * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding + * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined + * in AngularJS and sets the display style to none (using an !important flag). + * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). + * + * ```html + * + *
      + * + * + *
      + * ``` + * + * When the `.ngHide` expression evaluates to true then the `.ng-hide` CSS class is added to the class attribute + * on the element causing it to become hidden. When false, the `.ng-hide` CSS class is removed + * from the element causing the element not to appear hidden. + * + *
      + * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):
      + * "f" / "0" / "false" / "no" / "n" / "[]" + *
      + * + * ## Why is !important used? + * + * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector + * can be easily overridden by heavier selectors. For example, something as simple + * as changing the display style on a HTML list item would make hidden elements appear visible. + * This also becomes a bigger issue when dealing with CSS frameworks. + * + * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector + * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the + * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. + * + * ### Overriding `.ng-hide` + * + * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change + * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` + * class in CSS: + * + * ```css + * .ng-hide { + * //this is just another form of hiding an element + * display:block!important; + * position:absolute; + * top:-9999px; + * left:-9999px; + * } + * ``` + * + * By default you don't need to override in CSS anything and the animations will work around the display style. + * + * ## A note about animations with `ngHide` + * + * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression + * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide` + * CSS class is added and removed for you instead of your own CSS class. + * + * ```css + * // + * //a working example can be found at the bottom of this page + * // + * .my-element.ng-hide-add, .my-element.ng-hide-remove { + * transition:0.5s linear all; + * } + * + * .my-element.ng-hide-add { ... } + * .my-element.ng-hide-add.ng-hide-add-active { ... } + * .my-element.ng-hide-remove { ... } + * .my-element.ng-hide-remove.ng-hide-remove-active { ... } + * ``` + * + * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display + * property to block during animation states--ngAnimate will handle the style toggling automatically for you. + * + * @animations + * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden + * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible + * + * @element ANY + * @param {expression} ngHide If the {@link guide/expression expression} is truthy then + * the element is shown or hidden respectively. + * + * @example + + + Click me:
      +
      + Show: +
      + I show up when your checkbox is checked. +
      +
      +
      + Hide: +
      + I hide when your checkbox is checked. +
      +
      +
      + + @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); + + + .animate-hide { + -webkit-transition:all linear 0.5s; + transition:all linear 0.5s; + line-height:20px; + opacity:1; + padding:10px; + border:1px solid black; + background:white; + } + + .animate-hide.ng-hide { + line-height:0; + opacity:0; + padding:0 10px; + } + + .check-element { + padding:10px; + border:1px solid black; + background:white; + } + + + var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); + var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); + + it('should check ng-show / ng-hide', function() { + expect(thumbsUp.isDisplayed()).toBeFalsy(); + expect(thumbsDown.isDisplayed()).toBeTruthy(); + + element(by.model('checked')).click(); + + expect(thumbsUp.isDisplayed()).toBeTruthy(); + expect(thumbsDown.isDisplayed()).toBeFalsy(); + }); + +
      + */ +var ngHideDirective = ['$animate', function($animate) { + return function(scope, element, attr) { + scope.$watch(attr.ngHide, function ngHideWatchAction(value){ + $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide'); + }); + }; +}]; + +/** + * @ngdoc directive + * @name ngStyle + * @restrict AC + * + * @description + * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. + * + * @element ANY + * @param {expression} ngStyle + * + * {@link guide/expression Expression} which evals to an + * object whose keys are CSS style names and values are corresponding values for those CSS + * keys. + * + * Since some CSS style names are not valid keys for an object, they must be quoted. + * See the 'background-color' style in the example below. + * + * @example + + + + + +
      + Sample Text +
      myStyle={{myStyle}}
      +
      + + span { + color: black; + } + + + var colorSpan = element(by.css('span')); + + it('should check ng-style', function() { + expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); + element(by.css('input[value=\'set color\']')).click(); + expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); + element(by.css('input[value=clear]')).click(); + expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); + }); + +
      + */ +var ngStyleDirective = ngDirective(function(scope, element, attr) { + scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { + if (oldStyles && (newStyles !== oldStyles)) { + forEach(oldStyles, function(val, style) { element.css(style, '');}); + } + if (newStyles) element.css(newStyles); + }, true); +}); + +/** + * @ngdoc directive + * @name ngSwitch + * @restrict EA + * + * @description + * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression. + * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location + * as specified in the template. + * + * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it + * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element + * matches the value obtained from the evaluated expression. In other words, you define a container element + * (where you place the directive), place an expression on the **`on="..."` attribute** + * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place + * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on + * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default + * attribute is displayed. + * + *
      + * Be aware that the attribute values to match against cannot be expressions. They are interpreted + * as literal string values to match against. + * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the + * value of the expression `$scope.someVal`. + *
      + + * @animations + * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container + * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM + * + * @usage + * + * ``` + * + * ... + * ... + * ... + * + * ``` + * + * + * @scope + * @priority 800 + * @param {*} ngSwitch|on expression to match against ng-switch-when. + * On child elements add: + * + * * `ngSwitchWhen`: the case statement to match against. If match then this + * case will be displayed. If the same match appears multiple times, all the + * elements will be displayed. + * * `ngSwitchDefault`: the default case when no other case match. If there + * are multiple default cases, all of them will be displayed when no other + * case match. + * + * + * @example + + +
      + + selection={{selection}} +
      +
      +
      Settings Div
      +
      Home Span
      +
      default
      +
      +
      +
      + + angular.module('switchExample', ['ngAnimate']) + .controller('ExampleController', ['$scope', function($scope) { + $scope.items = ['settings', 'home', 'other']; + $scope.selection = $scope.items[0]; + }]); + + + .animate-switch-container { + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .animate-switch { + padding:10px; + } + + .animate-switch.ng-animate { + -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; + + position:absolute; + top:0; + left:0; + right:0; + bottom:0; + } + + .animate-switch.ng-leave.ng-leave-active, + .animate-switch.ng-enter { + top:-50px; + } + .animate-switch.ng-leave, + .animate-switch.ng-enter.ng-enter-active { + top:0; + } + + + var switchElem = element(by.css('[ng-switch]')); + var select = element(by.model('selection')); + + it('should start in settings', function() { + expect(switchElem.getText()).toMatch(/Settings Div/); + }); + it('should change to home', function() { + select.all(by.css('option')).get(1).click(); + expect(switchElem.getText()).toMatch(/Home Span/); + }); + it('should select default', function() { + select.all(by.css('option')).get(2).click(); + expect(switchElem.getText()).toMatch(/default/); + }); + +
      + */ +var ngSwitchDirective = ['$animate', function($animate) { + return { + restrict: 'EA', + require: 'ngSwitch', + + // asks for $scope to fool the BC controller module + controller: ['$scope', function ngSwitchController() { + this.cases = {}; + }], + link: function(scope, element, attr, ngSwitchController) { + var watchExpr = attr.ngSwitch || attr.on, + selectedTranscludes = [], + selectedElements = [], + previousElements = [], + selectedScopes = []; + + scope.$watch(watchExpr, function ngSwitchWatchAction(value) { + var i, ii; + for (i = 0, ii = previousElements.length; i < ii; ++i) { + previousElements[i].remove(); + } + previousElements.length = 0; + + for (i = 0, ii = selectedScopes.length; i < ii; ++i) { + var selected = selectedElements[i]; + selectedScopes[i].$destroy(); + previousElements[i] = selected; + $animate.leave(selected, function() { + previousElements.splice(i, 1); + }); + } + + selectedElements.length = 0; + selectedScopes.length = 0; + + if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) { + scope.$eval(attr.change); + forEach(selectedTranscludes, function(selectedTransclude) { + var selectedScope = scope.$new(); + selectedScopes.push(selectedScope); + selectedTransclude.transclude(selectedScope, function(caseElement) { + var anchor = selectedTransclude.element; + + selectedElements.push(caseElement); + $animate.enter(caseElement, anchor.parent(), anchor); + }); + }); + } + }); + } + }; +}]; + +var ngSwitchWhenDirective = ngDirective({ + transclude: 'element', + priority: 800, + require: '^ngSwitch', + link: function(scope, element, attrs, ctrl, $transclude) { + ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); + ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); + } +}); + +var ngSwitchDefaultDirective = ngDirective({ + transclude: 'element', + priority: 800, + require: '^ngSwitch', + link: function(scope, element, attr, ctrl, $transclude) { + ctrl.cases['?'] = (ctrl.cases['?'] || []); + ctrl.cases['?'].push({ transclude: $transclude, element: element }); + } +}); + +/** + * @ngdoc directive + * @name ngTransclude + * @restrict AC + * + * @description + * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. + * + * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. + * + * @element ANY + * + * @example + + + +
      +
      +
      + {{text}} +
      +
      + + it('should have transcluded', function() { + var titleElement = element(by.model('title')); + titleElement.clear(); + titleElement.sendKeys('TITLE'); + var textElement = element(by.model('text')); + textElement.clear(); + textElement.sendKeys('TEXT'); + expect(element(by.binding('title')).getText()).toEqual('TITLE'); + expect(element(by.binding('text')).getText()).toEqual('TEXT'); + }); + +
      + * + */ +var ngTranscludeDirective = ngDirective({ + link: function($scope, $element, $attrs, controller, $transclude) { + if (!$transclude) { + throw minErr('ngTransclude')('orphan', + 'Illegal use of ngTransclude directive in the template! ' + + 'No parent directive that requires a transclusion found. ' + + 'Element: {0}', + startingTag($element)); + } + + $transclude(function(clone) { + $element.empty(); + $element.append(clone); + }); + } +}); + +/** + * @ngdoc directive + * @name script + * @restrict E + * + * @description + * Load the content of a ` + + Load inlined template +
      + + + it('should load template defined inside script tag', function() { + element(by.css('#tpl-link')).click(); + expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/); + }); + + + */ +var scriptDirective = ['$templateCache', function($templateCache) { + return { + restrict: 'E', + terminal: true, + compile: function(element, attr) { + if (attr.type == 'text/ng-template') { + var templateUrl = attr.id, + text = element[0].text; + + $templateCache.put(templateUrl, text); + } + } + }; +}]; + +var ngOptionsMinErr = minErr('ngOptions'); +/** + * @ngdoc directive + * @name select + * @restrict E + * + * @description + * HTML `SELECT` element with angular data-binding. + * + * # `ngOptions` + * + * The `ngOptions` attribute can be used to dynamically generate a list of `` + * DOM element. + * * `trackexpr`: Used when working with an array of objects. The result of this expression will be + * used to identify the objects in the array. The `trackexpr` will most likely refer to the + * `value` variable (e.g. `value.propertyName`). + * + * @example + + + +
      +
        +
      • + Name: + [X] +
      • +
      • + [add] +
      • +
      +
      + Color (null not allowed): +
      + + Color (null allowed): + + +
      + + Color grouped by shade: +
      + + + Select bogus.
      +
      + Currently selected: {{ {selected_color:myColor} }} +
      +
      +
      +
      + + it('should check ng-options', function() { + expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red'); + element.all(by.model('myColor')).first().click(); + element.all(by.css('select[ng-model="myColor"] option')).first().click(); + expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black'); + element(by.css('.nullable select[ng-model="myColor"]')).click(); + element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click(); + expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null'); + }); + +
      + */ + +var ngOptionsDirective = valueFn({ terminal: true }); +// jshint maxlen: false +var selectDirective = ['$compile', '$parse', function($compile, $parse) { + //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 + var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, + nullModelCtrl = {$setViewValue: noop}; +// jshint maxlen: 100 + + return { + restrict: 'E', + require: ['select', '?ngModel'], + controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { + var self = this, + optionsMap = {}, + ngModelCtrl = nullModelCtrl, + nullOption, + unknownOption; + + + self.databound = $attrs.ngModel; + + + self.init = function(ngModelCtrl_, nullOption_, unknownOption_) { + ngModelCtrl = ngModelCtrl_; + nullOption = nullOption_; + unknownOption = unknownOption_; + }; + + + self.addOption = function(value) { + assertNotHasOwnProperty(value, '"option value"'); + optionsMap[value] = true; + + if (ngModelCtrl.$viewValue == value) { + $element.val(value); + if (unknownOption.parent()) unknownOption.remove(); + } + }; + + + self.removeOption = function(value) { + if (this.hasOption(value)) { + delete optionsMap[value]; + if (ngModelCtrl.$viewValue == value) { + this.renderUnknownOption(value); + } + } + }; + + + self.renderUnknownOption = function(val) { + var unknownVal = '? ' + hashKey(val) + ' ?'; + unknownOption.val(unknownVal); + $element.prepend(unknownOption); + $element.val(unknownVal); + unknownOption.prop('selected', true); // needed for IE + }; + + + self.hasOption = function(value) { + return optionsMap.hasOwnProperty(value); + }; + + $scope.$on('$destroy', function() { + // disable unknown option so that we don't do work when the whole select is being destroyed + self.renderUnknownOption = noop; + }); + }], + + link: function(scope, element, attr, ctrls) { + // if ngModel is not defined, we don't need to do anything + if (!ctrls[1]) return; + + var selectCtrl = ctrls[0], + ngModelCtrl = ctrls[1], + multiple = attr.multiple, + optionsExp = attr.ngOptions, + nullOption = false, // if false, user will not be able to select it (used by ngOptions) + emptyOption, + // we can't just jqLite('