diff --git a/app/Api/V1/Controllers/TransactionController.php b/app/Api/V1/Controllers/TransactionController.php index 728e3f0e8b..9e25876dcb 100644 --- a/app/Api/V1/Controllers/TransactionController.php +++ b/app/Api/V1/Controllers/TransactionController.php @@ -29,6 +29,7 @@ use FireflyIII\Api\V1\Requests\TransactionUpdateRequest; use FireflyIII\Events\StoredTransactionGroup; use FireflyIII\Events\UpdatedTransactionGroup; use FireflyIII\Exceptions\DuplicateTransactionException; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; @@ -294,10 +295,23 @@ class TransactionController extends Controller ], ]; + return response()->json($response, 422); + } catch(FireflyException $e) { + Log::warning('Caught an exception. Return error message.'); + Log::error($e->getMessage()); + // return bad validation message. + // TODO use Laravel's internal validation thing to do this. + $response = [ + 'message' => 'The given data was invalid.', + 'errors' => [ + 'transactions.0.description' => [sprintf('Internal exception: %s',$e->getMessage())], + ], + ]; + return response()->json($response, 422); } app('preferences')->mark(); - event(new StoredTransactionGroup($transactionGroup)); + event(new StoredTransactionGroup($transactionGroup, $data['apply_rules'] ?? true)); $manager = $this->getManager(); /** @var User $admin */ @@ -341,7 +355,7 @@ class TransactionController extends Controller $manager = $this->getManager(); app('preferences')->mark(); - event(new UpdatedTransactionGroup($transactionGroup)); + event(new UpdatedTransactionGroup($transactionGroup, $data['apply_rules'] ?? true)); /** @var User $admin */ $admin = auth()->user(); diff --git a/app/Api/V1/Requests/TransactionStoreRequest.php b/app/Api/V1/Requests/TransactionStoreRequest.php index faec8e3c62..3b9319dd51 100644 --- a/app/Api/V1/Requests/TransactionStoreRequest.php +++ b/app/Api/V1/Requests/TransactionStoreRequest.php @@ -47,6 +47,7 @@ class TransactionStoreRequest extends Request public function authorize(): bool { Log::debug('Authorize TransactionStoreRequest'); + // Only allow authenticated users return auth()->check(); } @@ -62,6 +63,7 @@ class TransactionStoreRequest extends Request $data = [ 'group_title' => $this->string('group_title'), 'error_if_duplicate_hash' => $this->boolean('error_if_duplicate_hash'), + 'apply_rules' => $this->boolean('apply_rules', true), 'transactions' => $this->getTransactionData(), ]; @@ -80,6 +82,7 @@ class TransactionStoreRequest extends Request // basic fields for group: 'group_title' => 'between:1,1000|nullable', 'error_if_duplicate_hash' => [new IsBoolean], + 'apply_rules' => [new IsBoolean], // transaction rules (in array for splits): 'transactions.*.type' => 'required|in:withdrawal,deposit,transfer,opening-balance,reconciliation', diff --git a/app/Api/V1/Requests/TransactionUpdateRequest.php b/app/Api/V1/Requests/TransactionUpdateRequest.php index 764570a570..422032ba3e 100644 --- a/app/Api/V1/Requests/TransactionUpdateRequest.php +++ b/app/Api/V1/Requests/TransactionUpdateRequest.php @@ -138,6 +138,7 @@ class TransactionUpdateRequest extends Request $data = [ 'transactions' => $this->getTransactionData(), + 'apply_rules' => $this->boolean('apply_rules', true), ]; if ($this->has('group_title')) { $data['group_title'] = $this->string('group_title'); @@ -156,6 +157,7 @@ class TransactionUpdateRequest extends Request $rules = [ // basic fields for group: 'group_title' => 'between:1,1000', + 'apply_rules' => [new IsBoolean], // transaction rules (in array for splits): 'transactions.*.type' => 'in:withdrawal,deposit,transfer,opening-balance,reconciliation', diff --git a/app/Console/Commands/SetLatestVersion.php b/app/Console/Commands/SetLatestVersion.php index eec6710f6e..4eb0ce6285 100644 --- a/app/Console/Commands/SetLatestVersion.php +++ b/app/Console/Commands/SetLatestVersion.php @@ -25,6 +25,9 @@ namespace FireflyIII\Console\Commands; use Illuminate\Console\Command; +/** + * Class SetLatestVersion + */ class SetLatestVersion extends Command { /** @@ -53,19 +56,22 @@ class SetLatestVersion extends Command /** * Execute the console command. * - * @return mixed + * @return int */ - public function handle() + public function handle(): int { if (!$this->option('james-is-cool')) { $this->error('Am too!'); - return; + return 0; } app('fireflyconfig')->set('db_version', config('firefly.db_version')); app('fireflyconfig')->set('ff3_version', config('firefly.version')); $this->line('Updated version.'); + //Telemetry::string('db_version', config('firefly.db_version')); + //Telemetry::string('ff3_version', config('firefly.version')); + return 0; } } diff --git a/app/Events/StoredTransactionGroup.php b/app/Events/StoredTransactionGroup.php index 701733b184..13e9341eb3 100644 --- a/app/Events/StoredTransactionGroup.php +++ b/app/Events/StoredTransactionGroup.php @@ -36,6 +36,7 @@ class StoredTransactionGroup extends Event { use SerializesModels; + /** @var bool */ public $applyRules; /** @var TransactionGroup The group that was stored. */ public $transactionGroup; diff --git a/app/Events/UpdatedTransactionGroup.php b/app/Events/UpdatedTransactionGroup.php index 1ab814ec14..cd1ded0b2c 100644 --- a/app/Events/UpdatedTransactionGroup.php +++ b/app/Events/UpdatedTransactionGroup.php @@ -37,6 +37,8 @@ class UpdatedTransactionGroup extends Event { use SerializesModels; + /** @var bool */ + public $applyRules; /** @var TransactionGroup The group that was stored. */ public $transactionGroup; @@ -45,8 +47,9 @@ class UpdatedTransactionGroup extends Event * * @param TransactionGroup $transactionGroup */ - public function __construct(TransactionGroup $transactionGroup) + public function __construct(TransactionGroup $transactionGroup, bool $applyRules = true) { $this->transactionGroup = $transactionGroup; + $this->applyRules = $applyRules; } } diff --git a/app/Exceptions/GracefulNotFoundHandler.php b/app/Exceptions/GracefulNotFoundHandler.php index 6c93d16d12..a59de42168 100644 --- a/app/Exceptions/GracefulNotFoundHandler.php +++ b/app/Exceptions/GracefulNotFoundHandler.php @@ -30,6 +30,7 @@ use FireflyIII\Models\Attachment; use FireflyIII\Models\Bill; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\TransactionType; use FireflyIII\User; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Http\Request; @@ -225,6 +226,10 @@ class GracefulNotFoundHandler extends ExceptionHandler $type = $journal->transactionType->type; $request->session()->reflash(); + if (TransactionType::RECONCILIATION === $type) { + return redirect(route('accounts.index', ['asset'])); + } + return redirect(route('transactions.index', [strtolower($type)])); } diff --git a/app/Factory/TransactionFactory.php b/app/Factory/TransactionFactory.php index 89ba3f0203..a601499a54 100644 --- a/app/Factory/TransactionFactory.php +++ b/app/Factory/TransactionFactory.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Factory; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionCurrency; @@ -102,12 +103,17 @@ class TransactionFactory /** * Create transaction with negative amount (for source accounts). * - * @param string $amount + * @param string $amount * @param string|null $foreignAmount - * @return Transaction|null + * + * @return Transaction + * @throws FireflyException */ - public function createNegative(string $amount, ?string $foreignAmount): ?Transaction + public function createNegative(string $amount, ?string $foreignAmount): Transaction { + if ('' === $foreignAmount) { + $foreignAmount = null; + } if (null !== $foreignAmount) { $foreignAmount = app('steam')->negative($foreignAmount); } @@ -118,16 +124,20 @@ class TransactionFactory /** * Create transaction with positive amount (for destination accounts). * - * @param string $amount + * @param string $amount * @param string|null $foreignAmount - * @return Transaction|null + * + * @return Transaction + * @throws FireflyException */ - public function createPositive(string $amount, ?string $foreignAmount): ?Transaction + public function createPositive(string $amount, ?string $foreignAmount): Transaction { + if ('' === $foreignAmount) { + $foreignAmount = null; + } if (null !== $foreignAmount) { $foreignAmount = app('steam')->positive($foreignAmount); } - return $this->create(app('steam')->positive($amount), $foreignAmount); } @@ -151,14 +161,19 @@ class TransactionFactory } /** - * @param string $amount + * @param string $amount * @param string|null $foreignAmount - * @return Transaction|null + * + * @return Transaction + * @throws FireflyException */ - private function create(string $amount, ?string $foreignAmount): ?Transaction + private function create(string $amount, ?string $foreignAmount): Transaction { $result = null; - $data = [ + if ('' === $foreignAmount) { + $foreignAmount = null; + } + $data = [ 'reconciled' => $this->reconciled, 'account_id' => $this->account->id, 'transaction_journal_id' => $this->journal->id, @@ -174,6 +189,12 @@ class TransactionFactory // @codeCoverageIgnoreStart } catch (QueryException $e) { Log::error(sprintf('Could not create transaction: %s', $e->getMessage()), $data); + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + throw new FireflyException('Query exception when creating transaction.'); + } + if (null === $result) { + throw new FireflyException('Transaction is NULL.'); } // @codeCoverageIgnoreEnd if (null !== $result) { @@ -185,7 +206,7 @@ class TransactionFactory ); // do foreign currency thing: add foreign currency info to $one and $two if necessary. - if (null !== $this->foreignCurrency && null !== $foreignAmount && $this->foreignCurrency->id !== $this->currency->id) { + if (null !== $this->foreignCurrency && null !== $foreignAmount && $this->foreignCurrency->id !== $this->currency->id && '' !== $foreignAmount) { $result->foreign_currency_id = $this->foreignCurrency->id; $result->foreign_amount = $foreignAmount; diff --git a/app/Factory/TransactionGroupFactory.php b/app/Factory/TransactionGroupFactory.php index 27e6b619dc..045cdec5e4 100644 --- a/app/Factory/TransactionGroupFactory.php +++ b/app/Factory/TransactionGroupFactory.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Factory; use FireflyIII\Exceptions\DuplicateTransactionException; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionGroup; use FireflyIII\User; use Log; @@ -60,7 +61,6 @@ class TransactionGroupFactory { $this->journalFactory->setUser($this->user); $this->journalFactory->setErrorOnHash($data['error_if_duplicate_hash'] ?? false); - try { $collection = $this->journalFactory->create($data); } catch(DuplicateTransactionException $e) { diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index e1db66c70f..b0a855b190 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -29,6 +29,7 @@ use Exception; use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournalMeta; @@ -40,6 +41,7 @@ use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface; +use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use FireflyIII\Services\Internal\Support\JournalServiceTrait; use FireflyIII\Support\NullArrayObject; use FireflyIII\User; @@ -125,6 +127,7 @@ class TransactionJournalFactory * * @return Collection * @throws DuplicateTransactionException + * @throws FireflyException */ public function create(array $data): Collection { @@ -139,24 +142,30 @@ class TransactionJournalFactory return new Collection; } - - /** @var array $row */ - foreach ($transactions as $index => $row) { - Log::debug(sprintf('Now creating journal %d/%d', $index + 1, count($transactions))); - - Log::debug('Going to call createJournal', $row); - try { + try { + /** @var array $row */ + foreach ($transactions as $index => $row) { + Log::debug(sprintf('Now creating journal %d/%d', $index + 1, count($transactions))); $journal = $this->createJournal(new NullArrayObject($row)); - } catch (DuplicateTransactionException|Exception $e) { - Log::warning('TransactionJournalFactory::create() caught a duplicate journal in createJournal()'); - throw new DuplicateTransactionException($e->getMessage()); - } - if (null !== $journal) { - $collection->push($journal); - } - if (null === $journal) { - Log::error('The createJournal() method returned NULL. This may indicate an error.'); + if (null !== $journal) { + $collection->push($journal); + } + if (null === $journal) { + Log::error('The createJournal() method returned NULL. This may indicate an error.'); + } } + } catch (DuplicateTransactionException $e) { + Log::warning('TransactionJournalFactory::create() caught a duplicate journal in createJournal()'); + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + $this->forceDeleteOnError($collection); + throw new DuplicateTransactionException($e->getMessage()); + } catch (FireflyException $e) { + Log::warning('TransactionJournalFactory::create() caught an exception.'); + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + $this->forceDeleteOnError($collection); + throw new FireflyException($e->getMessage()); } return $collection; @@ -204,7 +213,7 @@ class TransactionJournalFactory * @param NullArrayObject $row * * @return TransactionJournal|null - * @throws Exception + * @throws FireflyException * @throws DuplicateTransactionException */ private function createJournal(NullArrayObject $row): ?TransactionJournal @@ -232,36 +241,33 @@ class TransactionJournalFactory try { // validate source and destination using a new Validator. $this->validateAccounts($row); - /** create or get source and destination accounts */ - - $sourceInfo = [ - 'id' => (int)$row['source_id'], - 'name' => $row['source_name'], - 'iban' => $row['source_iban'], - 'number' => $row['source_number'], - 'bic' => $row['source_bic'], - ]; - - $destInfo = [ - 'id' => (int)$row['destination_id'], - 'name' => $row['destination_name'], - 'iban' => $row['destination_iban'], - 'number' => $row['destination_number'], - 'bic' => $row['destination_bic'], - ]; - Log::debug('Source info:', $sourceInfo); - Log::debug('Destination info:', $destInfo); - - $sourceAccount = $this->getAccount($type->type, 'source', $sourceInfo); - $destinationAccount = $this->getAccount($type->type, 'destination', $destInfo); - // @codeCoverageIgnoreStart } catch (FireflyException $e) { Log::error('Could not validate source or destination.'); Log::error($e->getMessage()); return null; } - // @codeCoverageIgnoreEnd + /** create or get source and destination accounts */ + $sourceInfo = [ + 'id' => (int)$row['source_id'], + 'name' => $row['source_name'], + 'iban' => $row['source_iban'], + 'number' => $row['source_number'], + 'bic' => $row['source_bic'], + ]; + + $destInfo = [ + 'id' => (int)$row['destination_id'], + 'name' => $row['destination_name'], + 'iban' => $row['destination_iban'], + 'number' => $row['destination_number'], + 'bic' => $row['destination_bic'], + ]; + Log::debug('Source info:', $sourceInfo); + Log::debug('Destination info:', $destInfo); + + $sourceAccount = $this->getAccount($type->type, 'source', $sourceInfo); + $destinationAccount = $this->getAccount($type->type, 'destination', $destInfo); // TODO AFTER 4.8,0 better handling below: @@ -337,7 +343,15 @@ class TransactionJournalFactory $transactionFactory->setCurrency($sourceCurrency); $transactionFactory->setForeignCurrency($sourceForeignCurrency); $transactionFactory->setReconciled($row['reconciled'] ?? false); - $transactionFactory->createNegative((string)$row['amount'], (string)$row['foreign_amount']); + try { + $negative = $transactionFactory->createNegative((string)$row['amount'], (string)$row['foreign_amount']); + } catch (FireflyException $e) { + Log::error('Exception creating negative transaction.'); + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + $this->forceDeleteOnError(new Collection([$journal])); + throw new FireflyException($e->getMessage()); + } // and the destination one: /** @var TransactionFactory $transactionFactory */ @@ -348,7 +362,18 @@ class TransactionJournalFactory $transactionFactory->setCurrency($destCurrency); $transactionFactory->setForeignCurrency($destForeignCurrency); $transactionFactory->setReconciled($row['reconciled'] ?? false); - $transactionFactory->createPositive((string)$row['amount'], (string)$row['foreign_amount']); + try { + $transactionFactory->createPositive((string)$row['amount'], (string)$row['foreign_amount']); + } catch (FireflyException $e) { + Log::error('Exception creating positive transaction.'); + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + Log::warning('Delete negative transaction.'); + $this->forceTrDelete($negative); + $this->forceDeleteOnError(new Collection([$journal])); + throw new FireflyException($e->getMessage()); + } + // verify that journal has two transactions. Otherwise, delete and cancel. // TODO this can't be faked so it can't be tested. @@ -418,6 +443,37 @@ class TransactionJournalFactory } } + /** + * Force the deletion of an entire set of transaction journals and their meta object in case of + * an error creating a group. + * + * @param Collection $collection + */ + private function forceDeleteOnError(Collection $collection): void + { + Log::debug(sprintf('forceDeleteOnError on collection size %d item(s)', $collection->count())); + $service = app(JournalDestroyService::class); + /** @var TransactionJournal $journal */ + foreach ($collection as $journal) { + Log::debug(sprintf('forceDeleteOnError on journal #%d', $journal->id)); + $service->destroy($journal); + } + } + + /** + * @param Transaction $transaction + */ + private function forceTrDelete(Transaction $transaction): void + { + try { + $transaction->delete(); + } catch (Exception $e) { + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + Log::error('Could not delete negative transaction.'); + } + } + /** * @param TransactionCurrency|null $currency * @param Account $account diff --git a/app/Handlers/Events/StoredGroupEventHandler.php b/app/Handlers/Events/StoredGroupEventHandler.php index 77b3a3c960..60a0ad99a2 100644 --- a/app/Handlers/Events/StoredGroupEventHandler.php +++ b/app/Handlers/Events/StoredGroupEventHandler.php @@ -35,21 +35,23 @@ class StoredGroupEventHandler /** * This method grabs all the users rules and processes them. * - * @param StoredTransactionGroup $storedJournalEvent + * @param StoredTransactionGroup $storedGroupEvent */ - public function processRules(StoredTransactionGroup $storedJournalEvent): void + public function processRules(StoredTransactionGroup $storedGroupEvent): void { - if (false === $storedJournalEvent->applyRules) { + if (false === $storedGroupEvent->applyRules) { + Log::info(sprintf('Will not run rules on group #%d', $storedGroupEvent->transactionGroup->id)); + return; } Log::debug('Now in StoredGroupEventHandler::processRules()'); /** @var RuleEngine $ruleEngine */ $ruleEngine = app(RuleEngine::class); - $ruleEngine->setUser($storedJournalEvent->transactionGroup->user); + $ruleEngine->setUser($storedGroupEvent->transactionGroup->user); $ruleEngine->setAllRules(true); $ruleEngine->setTriggerMode(RuleEngine::TRIGGER_STORE); - $journals = $storedJournalEvent->transactionGroup->transactionJournals; + $journals = $storedGroupEvent->transactionGroup->transactionJournals; /** @var TransactionJournal $journal */ foreach ($journals as $journal) { diff --git a/app/Handlers/Events/UpdatedGroupEventHandler.php b/app/Handlers/Events/UpdatedGroupEventHandler.php index 96b6025091..f478f9983e 100644 --- a/app/Handlers/Events/UpdatedGroupEventHandler.php +++ b/app/Handlers/Events/UpdatedGroupEventHandler.php @@ -35,16 +35,22 @@ class UpdatedGroupEventHandler /** * This method will check all the rules when a journal is updated. * - * @param UpdatedTransactionGroup $updatedJournalEvent + * @param UpdatedTransactionGroup $updatedGroupEvent */ - public function processRules(UpdatedTransactionGroup $updatedJournalEvent): void + public function processRules(UpdatedTransactionGroup $updatedGroupEvent): void { + if (false === $updatedGroupEvent->applyRules) { + Log::info(sprintf('Will not run rules on group #%d', $updatedGroupEvent->transactionGroup->id)); + + return; + } + /** @var RuleEngine $ruleEngine */ $ruleEngine = app(RuleEngine::class); - $ruleEngine->setUser($updatedJournalEvent->transactionGroup->user); + $ruleEngine->setUser($updatedGroupEvent->transactionGroup->user); $ruleEngine->setAllRules(true); $ruleEngine->setTriggerMode(RuleEngine::TRIGGER_UPDATE); - $journals = $updatedJournalEvent->transactionGroup->transactionJournals; + $journals = $updatedGroupEvent->transactionGroup->transactionJournals; /** @var TransactionJournal $journal */ foreach ($journals as $journal) { diff --git a/app/Http/Controllers/Admin/TelemetryController.php b/app/Http/Controllers/Admin/TelemetryController.php new file mode 100644 index 0000000000..0456883e67 --- /dev/null +++ b/app/Http/Controllers/Admin/TelemetryController.php @@ -0,0 +1,78 @@ +. + */ + +namespace FireflyIII\Http\Controllers\Admin; + + +use FireflyIII\Http\Controllers\Controller; + +/** + * Class TelemetryController + */ +class TelemetryController extends Controller +{ + public function __construct() + { + parent::__construct(); + + $this->middleware( + static function ($request, $next) { + app('view')->share('title', (string)trans('firefly.administration')); + app('view')->share('mainTitleIcon', 'fa-hand-spock-o'); + + return $next($request); + } + ); + } + + /** + * @return string + */ + public function delete() + { + session()->flash('info', 'No telemetry to delete. Does not work yet.'); + + return redirect(route('admin.telemetry.index')); + } + + /** + * + */ + public function index() + { + app('view')->share('subTitleIcon', 'fa-eye'); + app('view')->share('subTitle', (string)trans('firefly.telemetry_admin_index')); + $version = config('firefly.version'); + $enabled = config('firefly.telemetry', false); + $count = 1; + + return view('admin.telemetry.index', compact('version', 'enabled', 'count')); + } + + /** + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function view() + { + return view('admin.telemetry.view'); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 13d81ebf1e..4b9372e896 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -78,7 +78,7 @@ class ResetPasswordController extends Controller $rules = [ 'token' => 'required', 'email' => 'required|email', - 'password' => 'required|confirmed|min:6|secure_password', + 'password' => 'required|confirmed|min:16|secure_password', ]; $this->validate($request, $rules, $this->validationErrorMessages()); diff --git a/app/Http/Controllers/Auth/TwoFactorController.php b/app/Http/Controllers/Auth/TwoFactorController.php index 28dbae7aef..3f0ea68425 100644 --- a/app/Http/Controllers/Auth/TwoFactorController.php +++ b/app/Http/Controllers/Auth/TwoFactorController.php @@ -34,6 +34,20 @@ use Preferences; */ class TwoFactorController extends Controller { + /** + * What to do if 2FA lost? + * + * @return mixed + */ + public function lostTwoFactor() + { + /** @var User $user */ + $user = auth()->user(); + $siteOwner = config('firefly.site_owner'); + $title = (string)trans('firefly.two_factor_forgot_title'); + return view('auth.lost-two-factor', compact('user', 'siteOwner', 'title')); + } + /** * @param Request $request * @@ -118,27 +132,6 @@ class TwoFactorController extends Controller Preferences::set('mfa_history', $newHistory); } - /** - * What to do if 2FA lost? - * - * @return mixed - */ - public function lostTwoFactor() - { - /** @var User $user */ - $user = auth()->user(); - $siteOwner = config('firefly.site_owner'); - $title = (string)trans('firefly.two_factor_forgot_title'); - - Log::info( - 'To reset the two factor authentication for user #' . $user->id . - ' (' . $user->email . '), simply open the "preferences" table and delete the entries with the names "twoFactorAuthEnabled" and' . - ' "twoFactorAuthSecret" for user_id ' . $user->id . '. That will take care of it.' - ); - - return view('auth.lost-two-factor', compact('user', 'siteOwner', 'title')); - } - /** * Each MFA history has a timestamp and a code, saving the MFA entries for 5 minutes. So if the * submitted MFA code has been submitted in the last 5 minutes, it won't work despite being valid. diff --git a/app/Http/Controllers/Json/BoxController.php b/app/Http/Controllers/Json/BoxController.php index 76c0ff2418..7ec0f37d45 100644 --- a/app/Http/Controllers/Json/BoxController.php +++ b/app/Http/Controllers/Json/BoxController.php @@ -59,8 +59,6 @@ class BoxController extends Controller */ public function available(): JsonResponse { - /** @var BudgetRepositoryInterface $repository */ - $repository = app(BudgetRepositoryInterface::class); /** @var OperationsRepositoryInterface $opsRepository */ $opsRepository = app(OperationsRepositoryInterface::class); /** @var AvailableBudgetRepositoryInterface $abRepository */ @@ -102,13 +100,12 @@ class BoxController extends Controller $spent = $opsRepository->sumExpenses($start, $end, null, null, $currency); $spentAmount = $spent[(int)$currency->id]['sum'] ?? '0'; $spentPerDay = '-1'; - if (1 === $availableBudgets->count()) { + if ($availableBudgets->count() > 0) { $display = 0; // assume user overspent $boxTitle = (string)trans('firefly.overspent'); - /** @var AvailableBudget $availableBudget */ - $availableBudget = $availableBudgets->first(); + $totalAvailableSum = (string)$availableBudgets->sum('amount'); // calculate with available budget. - $leftToSpendAmount = bcadd($availableBudget->amount, $spentAmount); + $leftToSpendAmount = bcadd($totalAvailableSum, $spentAmount); if (1 === bccomp($leftToSpendAmount, '0')) { $boxTitle = (string)trans('firefly.left_to_spend'); $days = $today->diffInDays($end) + 1; diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index bd146d38e1..9af0e535a7 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers; +use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\Preference; use FireflyIII\Repositories\Account\AccountRepositoryInterface; @@ -59,10 +60,29 @@ class PreferencesController extends Controller */ public function index(AccountRepositoryInterface $repository) { - $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); + $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); + + // group accounts + $groupedAccounts = []; + /** @var Account $account */ + foreach ($accounts as $account) { + $type = $account->accountType->type; + $role = sprintf('opt_group_%s', $repository->getMetaValue($account, 'account_role')); + + if (in_array($type, [AccountType::MORTGAGE, AccountType::DEBT, AccountType::LOAN], true)) { + $role = sprintf('opt_group_l_%s',$type); + } + + if ('' === $role || 'opt_group_' === $role) { + $role = 'opt_group_defaultAsset'; + } + $groupedAccounts[trans(sprintf('firefly.%s',$role))][$account->id] = $account->name; + } + ksort($groupedAccounts); + $accountIds = $accounts->pluck('id')->toArray(); $viewRangePref = app('preferences')->get('viewRange', '1M'); - /** @noinspection NullPointerExceptionInspection */ + $viewRange = $viewRangePref->data; $frontPageAccounts = app('preferences')->get('frontPageAccounts', $accountIds); $language = app('preferences')->get('language', config('firefly.default_language', 'en_US'))->data; @@ -82,7 +102,7 @@ class PreferencesController extends Controller 'preferences.index', compact( 'language', - 'accounts', + 'groupedAccounts', 'frontPageAccounts', 'tjOptionalFields', 'viewRange', @@ -135,7 +155,7 @@ class PreferencesController extends Controller // language: /** @var Preference $currentLang */ $currentLang = app('preferences')->get('language', 'en_US'); - $lang = $request->get('language'); + $lang = $request->get('language'); if (array_key_exists($lang, config('firefly.languages'))) { app('preferences')->set('language', $lang); } diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 3405474582..249c60a001 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -27,6 +27,7 @@ use Carbon\Carbon; use FireflyIII\Generator\Report\ReportGeneratorFactory; use FireflyIII\Helpers\Report\ReportHelperInterface; use FireflyIII\Http\Requests\ReportFormRequest; +use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; @@ -262,11 +263,32 @@ class ReportController extends Controller $start = clone session('first'); $months = $this->helper->listOfMonths($start); $customFiscalYear = app('preferences')->get('customFiscalYear', 0)->data; - $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); + $accounts = $repository->getAccountsByType( + [AccountType::DEFAULT, AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE] + ); + + // group accounts by role: + $groupedAccounts = []; + /** @var Account $account */ + foreach ($accounts as $account) { + $type = $account->accountType->type; + $role = sprintf('opt_group_%s', $repository->getMetaValue($account, 'account_role')); + + if (in_array($type, [AccountType::MORTGAGE, AccountType::DEBT, AccountType::LOAN], true)) { + $role = sprintf('opt_group_l_%s',$type); + } + + if ('' === $role || 'opt_group_' === $role) { + $role = 'opt_group_defaultAsset'; + } + $groupedAccounts[trans(sprintf('firefly.%s',$role))][$account->id] = $account; + } + ksort($groupedAccounts); + $accountList = implode(',', $accounts->pluck('id')->toArray()); $this->repository->cleanupBudgets(); - return view('reports.index', compact('months', 'accounts', 'start', 'accountList', 'customFiscalYear')); + return view('reports.index', compact('months', 'accounts', 'start', 'accountList','groupedAccounts', 'customFiscalYear')); } /** diff --git a/app/Http/Controllers/Transaction/CreateController.php b/app/Http/Controllers/Transaction/CreateController.php index 766489b8e8..6fa54509d9 100644 --- a/app/Http/Controllers/Transaction/CreateController.php +++ b/app/Http/Controllers/Transaction/CreateController.php @@ -90,6 +90,9 @@ class CreateController extends Controller { app('preferences')->mark(); + $sourceId = (int)request()->get('source'); + $destinationId = (int)request()->get('destination'); + /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); $cash = $repository->getCashAccount(); @@ -112,7 +115,7 @@ class CreateController extends Controller 'transactions.create', compact( 'subTitleIcon', 'cash', 'objectType', 'subTitle', 'defaultCurrency', 'previousUri', 'optionalFields', 'preFilled', 'allowedOpposingTypes', - 'accountToTypes' + 'accountToTypes','sourceId','destinationId' ) ); } diff --git a/app/Http/Controllers/Transaction/ShowController.php b/app/Http/Controllers/Transaction/ShowController.php index 390d025fe9..acef814d9f 100644 --- a/app/Http/Controllers/Transaction/ShowController.php +++ b/app/Http/Controllers/Transaction/ShowController.php @@ -81,8 +81,8 @@ class ShowController extends Controller public function show(Request $request, TransactionGroup $transactionGroup) { /** @var TransactionJournal $first */ - $first = $transactionGroup->transactionJournals->first(); - $splits = $transactionGroup->transactionJournals->count(); + $first = $transactionGroup->transactionJournals()->first(['transaction_journals.*']); + $splits = $transactionGroup->transactionJournals()->count(); if(null === $first) { throw new FireflyException('This transaction is broken :(.'); diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php index 965d8636c0..43a7bc223e 100644 --- a/app/Providers/FireflyServiceProvider.php +++ b/app/Providers/FireflyServiceProvider.php @@ -58,6 +58,7 @@ use FireflyIII\Support\Form\RuleForm; use FireflyIII\Support\Navigation; use FireflyIII\Support\Preferences; use FireflyIII\Support\Steam; +use FireflyIII\Support\Telemetry; use FireflyIII\Validation\FireflyValidator; use Illuminate\Support\ServiceProvider; use Validator; @@ -91,33 +92,33 @@ class FireflyServiceProvider extends ServiceProvider { $this->app->bind( 'preferences', - function () { + static function () { return new Preferences; } ); $this->app->bind( 'fireflyconfig', - function () { + static function () { return new FireflyConfig; } ); $this->app->bind( 'navigation', - function () { + static function () { return new Navigation; } ); $this->app->bind( 'amount', - function () { + static function () { return new Amount; } ); $this->app->bind( 'steam', - function () { + static function () { return new Steam; } ); @@ -155,6 +156,13 @@ class FireflyServiceProvider extends ServiceProvider } ); + $this->app->bind( + 'telemetry', + static function () { + return new Telemetry; + } + ); + // chart generator: $this->app->bind(GeneratorInterface::class, ChartJsGenerator::class); diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepository.php b/app/Repositories/TransactionGroup/TransactionGroupRepository.php index 2c000c5c66..15a47653d8 100644 --- a/app/Repositories/TransactionGroup/TransactionGroupRepository.php +++ b/app/Repositories/TransactionGroup/TransactionGroupRepository.php @@ -332,6 +332,7 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface * * @return TransactionGroup * @throws DuplicateTransactionException + * @throws FireflyException */ public function store(array $data): TransactionGroup { @@ -343,6 +344,10 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface } catch (DuplicateTransactionException $e) { Log::warning('Group repository caught group factory with a duplicate exception!'); throw new DuplicateTransactionException($e->getMessage()); + } catch(FireflyException $e) { + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + throw new FireflyException($e->getMessage()); } diff --git a/app/Support/Facades/Telemetry.php b/app/Support/Facades/Telemetry.php new file mode 100644 index 0000000000..1ff4d604f8 --- /dev/null +++ b/app/Support/Facades/Telemetry.php @@ -0,0 +1,41 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Support\Facades; + +use Illuminate\Support\Facades\Facade; + +/** + * Class Telemetry + */ +class Telemetry extends Facade +{ + /** + * Get the registered name of the component. + * + * @return string + */ + protected static function getFacadeAccessor(): string + { + return 'telemetry'; + } +} diff --git a/app/Support/Search/Search.php b/app/Support/Search/Search.php index c425c752f0..1a3f7a3371 100644 --- a/app/Support/Search/Search.php +++ b/app/Support/Search/Search.php @@ -312,7 +312,7 @@ class Search implements SearchInterface { $parts = explode(':', $string); if (2 === count($parts) && '' !== trim((string)$parts[1]) && '' !== trim((string)$parts[0])) { - $type = trim((string)$parts[0]); + $type = strtolower(trim((string)$parts[0])); $value = trim((string)$parts[1]); $value = trim(trim($value, '"\'')); if (in_array($type, $this->validModifiers, true)) { diff --git a/app/Support/Telemetry.php b/app/Support/Telemetry.php new file mode 100644 index 0000000000..f4293c2d24 --- /dev/null +++ b/app/Support/Telemetry.php @@ -0,0 +1,81 @@ +. + */ + +namespace FireflyIII\Support; + +use Log; + +/** + * Class Telemetry + */ +class Telemetry +{ + /** + * Feature telemetry stores a boolean "true" for the given $flag. + * + * Examples: + * - use-help-pages + * - has-created-bill + * - do-big-import + * - first-time-install + * - more + * + * Its use should be limited to exotic and strange use cases in Firefly III. + * Because time and date are logged as well, useful to track users' evolution in Firefly III. + * + * Any meta-data stored is strictly non-financial. + * + * @param string $flag + */ + public function feature(string $flag): void + { + if (false === config('firefly.send_telemetry')) { + // hard stop if not allowed to do telemetry. + // do nothing! + return; + } + Log::info(sprintf('Logged telemetry feature flag "%s".', $flag)); + + // no storage backend yet, do nothing. + } + + /** + * String telemetry stores a string value as a telemetry entry. Values could include: + * + * - "php-version", "php7.3" + * - "os-version", "linux" + * + * Any meta-data stored is strictly non-financial. + * + * @param string $name + * @param string $value + */ + public function string(string $name, string $value): void + { + if (false === config('firefly.send_telemetry')) { + // hard stop if not allowed to do telemetry. + // do nothing! + return; + } + Log::info(sprintf('Logged telemetry string "%s" with value "%s".', $name, $value)); + } + +} \ No newline at end of file diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php index c58faa73b5..4731f56e31 100644 --- a/app/Transformers/TransactionGroupTransformer.php +++ b/app/Transformers/TransactionGroupTransformer.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Transformers; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Budget; use FireflyIII\Models\Category; use FireflyIII\Models\Transaction; @@ -32,6 +33,7 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; use FireflyIII\Support\NullArrayObject; use Illuminate\Support\Collection; +use Log; /** * Class TransactionGroupTransformer @@ -98,9 +100,11 @@ class TransactionGroupTransformer extends AbstractTransformer * @param TransactionGroup $group * * @return array + * @throws FireflyException */ public function transformObject(TransactionGroup $group): array { + try { $result = [ 'id' => (int)$group->id, 'created_at' => $group->created_at->toAtomString(), @@ -115,7 +119,11 @@ class TransactionGroupTransformer extends AbstractTransformer ], ], ]; - + } catch(FireflyException $e) { + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + throw new FireflyException(sprintf('Transaction group #%d is broken. Please check out your log files.', $group->id)); + } // do something else. return $result; @@ -125,36 +133,47 @@ class TransactionGroupTransformer extends AbstractTransformer * @param TransactionJournal $journal * * @return Transaction + * @throws FireflyException */ private function getDestinationTransaction(TransactionJournal $journal): Transaction { - - return $journal->transactions->first( + $result = $journal->transactions->first( static function (Transaction $transaction) { return (float)$transaction->amount > 0; } ); + if (null === $result) { + throw new FireflyException(sprintf('Journal #%d unexpectedly has no destination transaction.', $journal->id)); + } + + return $result; } /** * @param TransactionJournal $journal * * @return Transaction + * @throws FireflyException */ private function getSourceTransaction(TransactionJournal $journal): Transaction { - - return $journal->transactions->first( + $result = $journal->transactions->first( static function (Transaction $transaction) { return (float)$transaction->amount < 0; } ); + if (null === $result) { + throw new FireflyException(sprintf('Journal #%d unexpectedly has no source transaction.', $journal->id)); + } + + return $result; } /** * @param Collection $transactionJournals * * @return array + * @throws FireflyException */ private function transformJournals(Collection $transactionJournals): array { diff --git a/changelog.md b/changelog.md index 360f39c886..8faa2a6263 100644 --- a/changelog.md +++ b/changelog.md @@ -2,7 +2,31 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [5.1.0 (API 1.0.0)] - 2020-03-06 +## [5.1.1 (API 1.0.2)] - 2020-03-xx + +### Added +- [Issue 2672](https://github.com/firefly-iii/firefly-iii/issues/2672) Buttons to create transactions from the list of accounts is back. + +### Changed +- [Issue 3176](https://github.com/firefly-iii/firefly-iii/issues/3176) Greek language support is enabled again! + +### Fixed +- [Issue 3160](https://github.com/firefly-iii/firefly-iii/issues/3160) Deleting a reconciliation won't send you to a 404. +- [Issue 3172](https://github.com/firefly-iii/firefly-iii/issues/3172) Remaining amount left calculation is wrong over multiple months. +- [Issue 3173](https://github.com/firefly-iii/firefly-iii/issues/3173) Amount is invisible when viewing transactions. +- [Issue 3177](https://github.com/firefly-iii/firefly-iii/issues/3177) Fix attachment breadcrumb. +- [Issue 3180](https://github.com/firefly-iii/firefly-iii/issues/3180) Improve instructions for when the user loses MFA info. +- [Issue 3182](https://github.com/firefly-iii/firefly-iii/issues/3182) Better fallback when transaction errors out. +- Search modifiers are now case insensitive. + +### Security +- The minimal password length for new users is now 16 characters. +- Have I Been Pwnd check is now enabled by default. + +### API +- A new call to `apply_rules` is available when submitting transactions. + +## [5.1.0 (API 1.0.1)] - 2020-03-06 Before this release came out, several alpha and beta versions had been released already: diff --git a/composer.lock b/composer.lock index 9b27803358..bee1132f85 100644 --- a/composer.lock +++ b/composer.lock @@ -8,26 +8,26 @@ "packages": [ { "name": "adldap2/adldap2", - "version": "v10.2.2", + "version": "v10.2.3", "source": { "type": "git", "url": "https://github.com/Adldap2/Adldap2.git", - "reference": "f09ca4ae3a65dbf123b56dc7e4ace8682ea16cdb" + "reference": "2baffac2dfef308f0a94afa360b6a77540730fd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Adldap2/Adldap2/zipball/f09ca4ae3a65dbf123b56dc7e4ace8682ea16cdb", - "reference": "f09ca4ae3a65dbf123b56dc7e4ace8682ea16cdb", + "url": "https://api.github.com/repos/Adldap2/Adldap2/zipball/2baffac2dfef308f0a94afa360b6a77540730fd2", + "reference": "2baffac2dfef308f0a94afa360b6a77540730fd2", "shasum": "" }, "require": { "ext-json": "*", "ext-ldap": "*", - "illuminate/contracts": "~5.0|~6.0", + "illuminate/contracts": "~5.0|~6.0|~7.0", "php": ">=7.0", "psr/log": "~1.0", "psr/simple-cache": "~1.0", - "tightenco/collect": "~5.0|~6.0" + "tightenco/collect": "~5.0|~6.0|~7.0" }, "require-dev": { "mockery/mockery": "~1.0", @@ -63,25 +63,25 @@ "ldap", "windows" ], - "time": "2019-12-18T15:07:31+00:00" + "time": "2020-03-08T23:04:47+00:00" }, { "name": "adldap2/adldap2-laravel", - "version": "v6.0.8", + "version": "v6.0.9", "source": { "type": "git", "url": "https://github.com/Adldap2/Adldap2-Laravel.git", - "reference": "c2809bcca39bd51fe3fbe426c5dc32e89a868a42" + "reference": "0c828772333936f4c26c1ce27bd372008eae7e6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Adldap2/Adldap2-Laravel/zipball/c2809bcca39bd51fe3fbe426c5dc32e89a868a42", - "reference": "c2809bcca39bd51fe3fbe426c5dc32e89a868a42", + "url": "https://api.github.com/repos/Adldap2/Adldap2-Laravel/zipball/0c828772333936f4c26c1ce27bd372008eae7e6e", + "reference": "0c828772333936f4c26c1ce27bd372008eae7e6e", "shasum": "" }, "require": { "adldap2/adldap2": "^10.1", - "illuminate/support": "~5.5|~6.0", + "illuminate/support": "~5.5|~6.0|~7.0", "php": ">=7.1" }, "require-dev": { @@ -117,7 +117,7 @@ "laravel", "ldap" ], - "time": "2019-09-03T16:03:04+00:00" + "time": "2020-03-08T23:15:56+00:00" }, { "name": "bacon/bacon-qr-code", @@ -1239,7 +1239,7 @@ }, { "name": "James Cole", - "email": "thegrumpydictator@gmail.com", + "email": "james@firefly-iii.org", "role": "Developer" } ], @@ -1390,16 +1390,16 @@ }, { "name": "laravel/framework", - "version": "v6.18.0", + "version": "v6.18.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "077b895d935b7fbcfb1d1eb34217fa4f80a130d8" + "reference": "367c2c8dfdfe83cb2ddbc029c0222174098d093a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/077b895d935b7fbcfb1d1eb34217fa4f80a130d8", - "reference": "077b895d935b7fbcfb1d1eb34217fa4f80a130d8", + "url": "https://api.github.com/repos/laravel/framework/zipball/367c2c8dfdfe83cb2ddbc029c0222174098d093a", + "reference": "367c2c8dfdfe83cb2ddbc029c0222174098d093a", "shasum": "" }, "require": { @@ -1532,7 +1532,7 @@ "framework", "laravel" ], - "time": "2020-03-03T13:14:27+00:00" + "time": "2020-03-10T14:11:04+00:00" }, { "name": "laravel/passport", @@ -1925,16 +1925,16 @@ }, { "name": "league/flysystem", - "version": "1.0.64", + "version": "1.0.65", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "d13c43dbd4b791f815215959105a008515d1a2e0" + "reference": "8f17b3ba67097aafb8318cd5c553b1acf7c891c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d13c43dbd4b791f815215959105a008515d1a2e0", - "reference": "d13c43dbd4b791f815215959105a008515d1a2e0", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8f17b3ba67097aafb8318cd5c553b1acf7c891c8", + "reference": "8f17b3ba67097aafb8318cd5c553b1acf7c891c8", "shasum": "" }, "require": { @@ -2005,7 +2005,7 @@ "sftp", "storage" ], - "time": "2020-02-05T18:14:17+00:00" + "time": "2020-03-08T18:53:20+00:00" }, { "name": "league/flysystem-replicate-adapter", @@ -2989,8 +2989,8 @@ "authors": [ { "name": "Antonio Carlos Ribeiro", - "email": "acr@antoniocarlosribeiro.com", - "role": "Creator & Designer" + "role": "Creator & Designer", + "email": "acr@antoniocarlosribeiro.com" } ], "description": "QR Code package for Google2FA", @@ -3049,9 +3049,9 @@ "authors": [ { "name": "Antonio Carlos Ribeiro", + "role": "Developer", "email": "acr@antoniocarlosribeiro.com", - "homepage": "https://antoniocarlosribeiro.com", - "role": "Developer" + "homepage": "https://antoniocarlosribeiro.com" } ], "description": "Create random chars, numbers, strings", @@ -3111,9 +3111,9 @@ "authors": [ { "name": "Antonio Carlos Ribeiro", + "role": "Developer", "email": "acr@antoniocarlosribeiro.com", - "homepage": "https://antoniocarlosribeiro.com", - "role": "Developer" + "homepage": "https://antoniocarlosribeiro.com" } ], "description": "Create recovery codes for two factor auth", @@ -5230,16 +5230,16 @@ }, { "name": "tightenco/collect", - "version": "v6.17.0", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/tightenco/collect.git", - "reference": "bc554bfb79fc02b4e6e1dd463a7fa8470119e9ab" + "reference": "306a4def08c9781ff74fcf1e012f22cbf8686348" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tightenco/collect/zipball/bc554bfb79fc02b4e6e1dd463a7fa8470119e9ab", - "reference": "bc554bfb79fc02b4e6e1dd463a7fa8470119e9ab", + "url": "https://api.github.com/repos/tightenco/collect/zipball/306a4def08c9781ff74fcf1e012f22cbf8686348", + "reference": "306a4def08c9781ff74fcf1e012f22cbf8686348", "shasum": "" }, "require": { @@ -5276,7 +5276,7 @@ "collection", "laravel" ], - "time": "2020-02-25T19:45:47+00:00" + "time": "2020-03-09T16:52:33+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5394,16 +5394,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156" + "reference": "8f7961f7b9deb3b432452c18093cf16f88205902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1bdf24f065975594f6a117f0f1f6cabf1333b156", - "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8f7961f7b9deb3b432452c18093cf16f88205902", + "reference": "8f7961f7b9deb3b432452c18093cf16f88205902", "shasum": "" }, "require": { @@ -5412,8 +5412,12 @@ "symfony/polyfill-ctype": "^1.9" }, "require-dev": { + "ext-filter": "*", "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, "type": "library", "extra": { "branch-alias": { @@ -5447,7 +5451,7 @@ "env", "environment" ], - "time": "2019-09-10T21:37:39+00:00" + "time": "2020-03-12T13:44:00+00:00" } ], "packages-dev": [ @@ -5629,16 +5633,16 @@ }, { "name": "composer/composer", - "version": "1.9.3", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b" + "reference": "472c917b2a083ec7d2fa25c55fd099d1300e2515" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/1291a16ce3f48bfdeca39d64fca4875098af4d7b", - "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b", + "url": "https://api.github.com/repos/composer/composer/zipball/472c917b2a083ec7d2fa25c55fd099d1300e2515", + "reference": "472c917b2a083ec7d2fa25c55fd099d1300e2515", "shasum": "" }, "require": { @@ -5651,17 +5655,17 @@ "psr/log": "^1.0", "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0" + "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "conflict": { "symfony/console": "2.8.38" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", - "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + "phpspec/prophecy": "^1.10", + "symfony/phpunit-bridge": "^3.4" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", @@ -5674,7 +5678,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -5705,7 +5709,7 @@ "dependency", "package" ], - "time": "2020-02-04T11:58:49+00:00" + "time": "2020-03-10T13:08:05+00:00" }, { "name": "composer/semver", @@ -7935,26 +7939,26 @@ }, { "name": "symfony/filesystem", - "version": "v4.4.5", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd" + "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/266c9540b475f26122b61ef8b23dd9198f5d1cfd", - "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3afadc0f57cd74f86379d073e694b0f2cda2a88c", + "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -7981,7 +7985,7 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-01-21T08:20:44+00:00" + "time": "2020-01-21T08:40:24+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/firefly.php b/config/firefly.php index c6fa43fa5d..1de4bac523 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -134,11 +134,12 @@ return [ ], 'feature_flags' => [ 'export' => true, + 'telemetry' => false, ], 'encryption' => null === env('USE_ENCRYPTION') || true === env('USE_ENCRYPTION'), - 'version' => '5.1.0', - 'api_version' => '1.0.1', + 'version' => '5.1.1', + 'api_version' => '1.0.2', 'db_version' => 12, 'maxUploadSize' => 15242880, 'send_error_message' => env('SEND_ERROR_MESSAGE', true), @@ -160,6 +161,7 @@ return [ 'login_provider' => envNonEmpty('LOGIN_PROVIDER', 'eloquent'), 'cer_provider' => envNonEmpty('CER_PROVIDER', 'fixer'), 'update_endpoint' => 'https://version.firefly-iii.org/index.json', + 'send_telemetry' => env('SEND_TELEMETRY', false), 'update_minimum_age' => 6, 'default_location' => [ 'longitude' => env('MAP_DEFAULT_LONG', '5.916667'), @@ -317,6 +319,7 @@ return [ // currently enabled languages 'en_US' => ['name_locale' => 'English', 'name_english' => 'English'], 'cs_CZ' => ['name_locale' => 'Czech', 'name_english' => 'Czech'], + 'el_GR' => ['name_locale' => 'Ελληνικά', 'name_english' => 'Greek'], 'es_ES' => ['name_locale' => 'Español', 'name_english' => 'Spanish'], 'de_DE' => ['name_locale' => 'Deutsch', 'name_english' => 'German'], 'fr_FR' => ['name_locale' => 'Français', 'name_english' => 'French'], @@ -345,7 +348,7 @@ return [ // 'pt_PT' => ['name_locale' => 'Portuguese', 'name_english' => 'Portuguese'], // 'sl_SI' => ['name_locale' => 'Slovenian', 'name_english' => 'Slovenian'], // 'tlh_AA' => ['name_locale' => 'tlhIngan Hol', 'name_english' => 'Klingon'], - // 'el_GR' => ['name_locale' => 'Ελληνικά', 'name_english' => 'Greek'], + // // 'tr_TR' => ['name_locale' => 'Türkçe', 'name_english' => 'Turkish'], // 'sr_CS' => ['name_locale' => 'Serbian (Latin)', 'name_english' => 'Serbian (Latin)'], // 'uk_UA' => ['name_locale' => 'Ukranian', 'name_english' => 'Ukranian'], diff --git a/config/import.php b/config/import.php index c3f53ff749..da6f6581f4 100644 --- a/config/import.php +++ b/config/import.php @@ -70,7 +70,7 @@ return [ 'allowed_for_user' => [ 'fake' => false, 'file' => true, - 'bunq' => true, + 'bunq' => false, 'spectre' => true, 'ynab' => true, 'plaid' => true, @@ -82,7 +82,7 @@ return [ 'has_prereq' => [ 'fake' => true, 'file' => false, - 'bunq' => true, + 'bunq' => false, 'spectre' => true, 'ynab' => true, 'plaid' => true, diff --git a/package.json b/package.json index b208e55ca9..5b2b0bd7a2 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,5 @@ "vue": "^2.6.10", "vue-i18n": "^8.14.1", "vue-template-compiler": "^2.6.10" - }, - "dependencies": {} + } } diff --git a/public/v1/css/gf-source.css b/public/v1/css/gf-source.css index 91e8c2c8f5..b77a492221 100644 --- a/public/v1/css/gf-source.css +++ b/public/v1/css/gf-source.css @@ -1,523 +1,59 @@ -/* - * gf-source.css - * Copyright (c) 2019 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* cyrillic-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 300; - src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-LightItalic-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} - -/* cyrillic */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 300; - src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-LightItalic-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 300; - src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-LightItalic-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 300; - src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-LightItalic-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 300; - src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-LightItalic-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 300; - src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-LightItalic-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 300; - src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-LightItalic-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} - -/* cyrillic-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 400; - src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Italic-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} - -/* cyrillic */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 400; - src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-Italic-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 400; - src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Italic-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 400; - src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-Italic-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 400; - src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-Italic-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 400; - src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Italic-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 400; - src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-Italic-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} - -/* cyrillic-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 600; - src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} - -/* cyrillic */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 600; - src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 600; - src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 600; - src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBoldItalic-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 600; - src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 600; - src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: italic; - font-weight: 600; - src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBoldItalic-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} - -/* cyrillic-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold Italic'), local('SourceSansPro-BoldItalic'), url('../fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} - -/* cyrillic */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold Italic'), local('SourceSansPro-BoldItalic'), url('../fonts/SourceSansPro-BoldItalic-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-BoldItalic-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold Italic'), local('SourceSansPro-BoldItalic'), url('../fonts/SourceSansPro-BoldItalic-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-BoldItalic-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold Italic'), local('SourceSansPro-BoldItalic'), url('../fonts/SourceSansPro-BoldItalic-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-BoldItalic-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold Italic'), local('SourceSansPro-BoldItalic'), url('../fonts/SourceSansPro-BoldItalic-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-BoldItalic-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold Italic'), local('SourceSansPro-BoldItalic'), url('../fonts/SourceSansPro-BoldItalic-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-BoldItalic-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold Italic'), local('SourceSansPro-BoldItalic'), url('../fonts/SourceSansPro-BoldItalic-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-BoldItalic-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} - -/* cyrillic-ext */ +/* source-sans-pro-300 - greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin */ @font-face { font-family: 'Source Sans Pro'; font-style: normal; font-weight: 300; - src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Light-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ } -/* cyrillic */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 300; - src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-Light-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 300; - src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Light-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 300; - src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-Light-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 300; - src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-Light-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 300; - src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Light-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 300; - src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-Light-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} - -/* cyrillic-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 400; - src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Regular-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} - -/* cyrillic */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 400; - src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-Regular-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 400; - src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Regular-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 400; - src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-Regular-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 400; - src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-Regular-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 400; - src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Regular-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 400; - src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-Regular-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} - -/* cyrillic-ext */ +/* source-sans-pro-600 - greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin */ @font-face { font-family: 'Source Sans Pro'; font-style: normal; font-weight: 600; - src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBold-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ } -/* cyrillic */ +/* source-sans-pro-regular - greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin */ @font-face { font-family: 'Source Sans Pro'; font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* source-sans-pro-italic - greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: italic; + font-weight: 400; + src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* source-sans-pro-600italic - greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: italic; font-weight: 600; - src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBold-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; + src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ } -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 600; - src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBold-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 600; - src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBold-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 600; - src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBold-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 600; - src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBold-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 600; - src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-SemiBold-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} - -/* cyrillic-ext */ +/* source-sans-pro-700 - greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin */ @font-face { font-family: 'Source Sans Pro'; font-style: normal; font-weight: 700; - src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-cyrillic-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Bold-cyrillic-ext.woff') format('woff'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} - -/* cyrillic */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-cyrillic.woff2') format('woff2'), url('../fonts/SourceSansPro-Bold-cyrillic.woff') format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-greek-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Bold-greek-ext.woff') format('woff'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-greek.woff2') format('woff2'), url('../fonts/SourceSansPro-Bold-greek.woff') format('woff'); - unicode-range: U+0370-03FF; -} - -/* vietnamese */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-vietnamese.woff2') format('woff2'), url('../fonts/SourceSansPro-Bold-vietnamese.woff') format('woff'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} - -/* latin-ext */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-latin-ext.woff2') format('woff2'), url('../fonts/SourceSansPro-Bold-latin-ext.woff') format('woff'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Source Sans Pro'; - font-style: normal; - font-weight: 700; - src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-latin.woff2') format('woff2'), url('../fonts/SourceSansPro-Bold-latin.woff') format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; + src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('../fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ } diff --git a/public/v1/fonts/SourceSansPro-Bold-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-Bold-cyrillic-ext.woff deleted file mode 100644 index b72af4d82d..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-Bold-cyrillic-ext.woff2 deleted file mode 100644 index 1d07f2f3d7..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-cyrillic.woff b/public/v1/fonts/SourceSansPro-Bold-cyrillic.woff deleted file mode 100644 index 120079b15d..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-Bold-cyrillic.woff2 deleted file mode 100644 index 19ae7a46ba..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-greek-ext.woff b/public/v1/fonts/SourceSansPro-Bold-greek-ext.woff deleted file mode 100644 index 2a9ed1ca56..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-Bold-greek-ext.woff2 deleted file mode 100644 index 29b751404d..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-greek.woff b/public/v1/fonts/SourceSansPro-Bold-greek.woff deleted file mode 100644 index 7beed8bed1..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-greek.woff2 b/public/v1/fonts/SourceSansPro-Bold-greek.woff2 deleted file mode 100644 index 72883a4bd3..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-latin-ext.woff b/public/v1/fonts/SourceSansPro-Bold-latin-ext.woff deleted file mode 100644 index c7bab33e6f..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-Bold-latin-ext.woff2 deleted file mode 100644 index 6d8ce38f2e..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-latin.woff b/public/v1/fonts/SourceSansPro-Bold-latin.woff deleted file mode 100644 index 9d77184ce6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-latin.woff2 b/public/v1/fonts/SourceSansPro-Bold-latin.woff2 deleted file mode 100644 index 17bf4e4704..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-vietnamese.woff b/public/v1/fonts/SourceSansPro-Bold-vietnamese.woff deleted file mode 100644 index e13ffdf8d7..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Bold-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-Bold-vietnamese.woff2 deleted file mode 100644 index 20f9569bc8..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Bold-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff deleted file mode 100644 index df807fe5e6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff2 deleted file mode 100644 index 9165569335..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic.woff b/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic.woff deleted file mode 100644 index df807fe5e6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic.woff2 deleted file mode 100644 index 9165569335..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-greek-ext.woff b/public/v1/fonts/SourceSansPro-BoldItalic-greek-ext.woff deleted file mode 100644 index bdf5a8bdb5..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-BoldItalic-greek-ext.woff2 deleted file mode 100644 index a8877a873e..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-greek.woff b/public/v1/fonts/SourceSansPro-BoldItalic-greek.woff deleted file mode 100644 index bdf5a8bdb5..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-greek.woff2 b/public/v1/fonts/SourceSansPro-BoldItalic-greek.woff2 deleted file mode 100644 index a8877a873e..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-latin-ext.woff b/public/v1/fonts/SourceSansPro-BoldItalic-latin-ext.woff deleted file mode 100644 index 58bea39dc5..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-BoldItalic-latin-ext.woff2 deleted file mode 100644 index 66e003be18..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-latin.woff b/public/v1/fonts/SourceSansPro-BoldItalic-latin.woff deleted file mode 100644 index df807fe5e6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-latin.woff2 b/public/v1/fonts/SourceSansPro-BoldItalic-latin.woff2 deleted file mode 100644 index 9165569335..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-vietnamese.woff b/public/v1/fonts/SourceSansPro-BoldItalic-vietnamese.woff deleted file mode 100644 index 229d937042..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-BoldItalic-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-BoldItalic-vietnamese.woff2 deleted file mode 100644 index f5cbac4985..0000000000 Binary files a/public/v1/fonts/SourceSansPro-BoldItalic-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-Italic-cyrillic-ext.woff deleted file mode 100644 index acd3f44f20..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-Italic-cyrillic-ext.woff2 deleted file mode 100644 index a797d94366..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-cyrillic.woff b/public/v1/fonts/SourceSansPro-Italic-cyrillic.woff deleted file mode 100644 index acd3f44f20..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-Italic-cyrillic.woff2 deleted file mode 100644 index a797d94366..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-greek-ext.woff b/public/v1/fonts/SourceSansPro-Italic-greek-ext.woff deleted file mode 100644 index 87bdb30e04..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-Italic-greek-ext.woff2 deleted file mode 100644 index a797d94366..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-greek.woff b/public/v1/fonts/SourceSansPro-Italic-greek.woff deleted file mode 100644 index 87bdb30e04..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-greek.woff2 b/public/v1/fonts/SourceSansPro-Italic-greek.woff2 deleted file mode 100644 index 1b48cc92db..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-latin-ext.woff b/public/v1/fonts/SourceSansPro-Italic-latin-ext.woff deleted file mode 100644 index 89d85e9906..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-Italic-latin-ext.woff2 deleted file mode 100644 index b27e2689a1..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-latin.woff b/public/v1/fonts/SourceSansPro-Italic-latin.woff deleted file mode 100644 index acd3f44f20..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-latin.woff2 b/public/v1/fonts/SourceSansPro-Italic-latin.woff2 deleted file mode 100644 index 6e45d8a059..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-vietnamese.woff b/public/v1/fonts/SourceSansPro-Italic-vietnamese.woff deleted file mode 100644 index 7ab473380c..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Italic-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-Italic-vietnamese.woff2 deleted file mode 100644 index f3d417afae..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Italic-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-Light-cyrillic-ext.woff deleted file mode 100644 index 0ae46b8e75..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-Light-cyrillic-ext.woff2 deleted file mode 100644 index 41df763e2a..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-cyrillic.woff b/public/v1/fonts/SourceSansPro-Light-cyrillic.woff deleted file mode 100644 index 5a771e709b..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-Light-cyrillic.woff2 deleted file mode 100644 index f3adea28e3..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-greek-ext.woff b/public/v1/fonts/SourceSansPro-Light-greek-ext.woff deleted file mode 100644 index 0406b44079..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-Light-greek-ext.woff2 deleted file mode 100644 index fb9176d5d6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-greek.woff b/public/v1/fonts/SourceSansPro-Light-greek.woff deleted file mode 100644 index bce40897c6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-greek.woff2 b/public/v1/fonts/SourceSansPro-Light-greek.woff2 deleted file mode 100644 index 3faab6d8a6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-latin-ext.woff b/public/v1/fonts/SourceSansPro-Light-latin-ext.woff deleted file mode 100644 index 1d56327323..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-Light-latin-ext.woff2 deleted file mode 100644 index 43a485084a..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-latin.woff b/public/v1/fonts/SourceSansPro-Light-latin.woff deleted file mode 100644 index 7ceadfc812..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-latin.woff2 b/public/v1/fonts/SourceSansPro-Light-latin.woff2 deleted file mode 100644 index 12dff7cc06..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-vietnamese.woff b/public/v1/fonts/SourceSansPro-Light-vietnamese.woff deleted file mode 100644 index c4c358b664..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Light-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-Light-vietnamese.woff2 deleted file mode 100644 index 16eec5b2a4..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Light-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff deleted file mode 100644 index aa69b60673..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2 deleted file mode 100644 index 21d8d27c87..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic.woff b/public/v1/fonts/SourceSansPro-LightItalic-cyrillic.woff deleted file mode 100644 index aa69b60673..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-LightItalic-cyrillic.woff2 deleted file mode 100644 index 21d8d27c87..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-greek-ext.woff b/public/v1/fonts/SourceSansPro-LightItalic-greek-ext.woff deleted file mode 100644 index d6444d6b4d..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-LightItalic-greek-ext.woff2 deleted file mode 100644 index 21d8d27c87..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-greek.woff b/public/v1/fonts/SourceSansPro-LightItalic-greek.woff deleted file mode 100644 index d6444d6b4d..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-greek.woff2 b/public/v1/fonts/SourceSansPro-LightItalic-greek.woff2 deleted file mode 100644 index 0de9903a0e..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-latin-ext.woff b/public/v1/fonts/SourceSansPro-LightItalic-latin-ext.woff deleted file mode 100644 index 235ba030c2..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-LightItalic-latin-ext.woff2 deleted file mode 100644 index 085394b4f9..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-latin.woff b/public/v1/fonts/SourceSansPro-LightItalic-latin.woff deleted file mode 100644 index aa69b60673..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-latin.woff2 b/public/v1/fonts/SourceSansPro-LightItalic-latin.woff2 deleted file mode 100644 index 7db9217a7b..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-vietnamese.woff b/public/v1/fonts/SourceSansPro-LightItalic-vietnamese.woff deleted file mode 100644 index b4e1e3bfb6..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-LightItalic-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-LightItalic-vietnamese.woff2 deleted file mode 100644 index b55e3c6a76..0000000000 Binary files a/public/v1/fonts/SourceSansPro-LightItalic-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-Regular-cyrillic-ext.woff deleted file mode 100644 index 7208ac33bb..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-Regular-cyrillic-ext.woff2 deleted file mode 100644 index df4cedd75e..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-cyrillic.woff b/public/v1/fonts/SourceSansPro-Regular-cyrillic.woff deleted file mode 100644 index 968ab912a8..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-Regular-cyrillic.woff2 deleted file mode 100644 index 4128457fe4..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-greek-ext.woff b/public/v1/fonts/SourceSansPro-Regular-greek-ext.woff deleted file mode 100644 index 3bd3298563..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-Regular-greek-ext.woff2 deleted file mode 100644 index 0d828520d7..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-greek.woff b/public/v1/fonts/SourceSansPro-Regular-greek.woff deleted file mode 100644 index 8572b30c4c..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-greek.woff2 b/public/v1/fonts/SourceSansPro-Regular-greek.woff2 deleted file mode 100644 index 87c63dce9e..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-latin-ext.woff b/public/v1/fonts/SourceSansPro-Regular-latin-ext.woff deleted file mode 100644 index ba4a980274..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-Regular-latin-ext.woff2 deleted file mode 100644 index 40428533a1..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-latin.woff b/public/v1/fonts/SourceSansPro-Regular-latin.woff deleted file mode 100644 index 16f51fff18..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-latin.woff2 b/public/v1/fonts/SourceSansPro-Regular-latin.woff2 deleted file mode 100644 index a04559988d..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-vietnamese.woff b/public/v1/fonts/SourceSansPro-Regular-vietnamese.woff deleted file mode 100644 index 4e2a67d85b..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-Regular-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-Regular-vietnamese.woff2 deleted file mode 100644 index 2ddc3bdc29..0000000000 Binary files a/public/v1/fonts/SourceSansPro-Regular-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff deleted file mode 100644 index 33c1e69911..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2 deleted file mode 100644 index daceb6907a..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic.woff b/public/v1/fonts/SourceSansPro-SemiBold-cyrillic.woff deleted file mode 100644 index 3fc34ef47a..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-SemiBold-cyrillic.woff2 deleted file mode 100644 index 5209480ddd..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-greek-ext.woff b/public/v1/fonts/SourceSansPro-SemiBold-greek-ext.woff deleted file mode 100644 index 2c6c1834c4..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-SemiBold-greek-ext.woff2 deleted file mode 100644 index ff38f57172..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-greek.woff b/public/v1/fonts/SourceSansPro-SemiBold-greek.woff deleted file mode 100644 index a592bbfbef..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-greek.woff2 b/public/v1/fonts/SourceSansPro-SemiBold-greek.woff2 deleted file mode 100644 index a4065b7db5..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-latin-ext.woff b/public/v1/fonts/SourceSansPro-SemiBold-latin-ext.woff deleted file mode 100644 index 1d7ccf5fea..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-SemiBold-latin-ext.woff2 deleted file mode 100644 index 32fe4a26b5..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-latin.woff b/public/v1/fonts/SourceSansPro-SemiBold-latin.woff deleted file mode 100644 index 3c6ce2ff36..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-latin.woff2 b/public/v1/fonts/SourceSansPro-SemiBold-latin.woff2 deleted file mode 100644 index 3bfd9b463a..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-vietnamese.woff b/public/v1/fonts/SourceSansPro-SemiBold-vietnamese.woff deleted file mode 100644 index 575887febc..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBold-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-SemiBold-vietnamese.woff2 deleted file mode 100644 index 18d19b438b..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBold-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff b/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff deleted file mode 100644 index 04f36322b3..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2 b/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2 deleted file mode 100644 index 8892f41219..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff b/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff deleted file mode 100644 index 04f36322b3..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2 b/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2 deleted file mode 100644 index 8892f41219..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff b/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff deleted file mode 100644 index 5f97786279..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2 b/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2 deleted file mode 100644 index 8892f41219..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek.woff b/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek.woff deleted file mode 100644 index 5f97786279..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek.woff2 b/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek.woff2 deleted file mode 100644 index e5f524f8f1..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-greek.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff b/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff deleted file mode 100644 index 8f35cfa9eb..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2 b/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2 deleted file mode 100644 index 734dd40896..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin.woff b/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin.woff deleted file mode 100644 index 04f36322b3..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin.woff2 b/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin.woff2 deleted file mode 100644 index c99d25dca9..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-latin.woff2 and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff b/public/v1/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff deleted file mode 100644 index 9f2f37f5cd..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff and /dev/null differ diff --git a/public/v1/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2 b/public/v1/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2 deleted file mode 100644 index fd5c030edd..0000000000 Binary files a/public/v1/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2 and /dev/null differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff new file mode 100644 index 0000000000..40ecc555b0 Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff2 b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff2 new file mode 100644 index 0000000000..b20acbd73a Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-300.woff2 differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff new file mode 100644 index 0000000000..6e2fa025e2 Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff2 b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff2 new file mode 100644 index 0000000000..96dac0021a Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600.woff2 differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff new file mode 100644 index 0000000000..feae814f4d Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff2 b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff2 new file mode 100644 index 0000000000..8dc8672cd0 Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-600italic.woff2 differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff new file mode 100644 index 0000000000..9fa2711f7c Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff2 b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff2 new file mode 100644 index 0000000000..a7d24d23bb Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-700.woff2 differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff new file mode 100644 index 0000000000..22ac87f83a Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff2 b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff2 new file mode 100644 index 0000000000..325f226c03 Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-italic.woff2 differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff new file mode 100644 index 0000000000..306936522b Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff differ diff --git a/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff2 b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff2 new file mode 100644 index 0000000000..2a37c77632 Binary files /dev/null and b/public/v1/fonts/source-sans-pro-v13-greek_cyrillic-ext_vietnamese_greek-ext_latin-ext_cyrillic_latin-regular.woff2 differ diff --git a/public/v1/js/app.js b/public/v1/js/app.js index 22248c589d..3918ec36e0 100644 --- a/public/v1/js/app.js +++ b/public/v1/js/app.js @@ -1 +1 @@ -!function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s=71)}({71:function(t,e,n){t.exports=n(72)},72:function(t,e,n){try{window.$=window.jQuery=n(73),n(74)}catch(t){}},73:function(t,e,n){var i;!function(e,n){"use strict";"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,(function(n,o){"use strict";var r=[],s=n.document,a=Object.getPrototypeOf,l=r.slice,u=r.concat,c=r.push,f=r.indexOf,p={},d=p.toString,h=p.hasOwnProperty,g=h.toString,v=g.call(Object),m={},y=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType},b=function(t){return null!=t&&t===t.window},x={type:!0,src:!0,nonce:!0,noModule:!0};function w(t,e,n){var i,o,r=(n=n||s).createElement("script");if(r.text=t,e)for(i in x)(o=e[i]||e.getAttribute&&e.getAttribute(i))&&r.setAttribute(i,o);n.head.appendChild(r).parentNode.removeChild(r)}function T(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?p[d.call(t)]||"object":typeof t}var C=function(t,e){return new C.fn.init(t,e)},E=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function S(t){var e=!!t&&"length"in t&&t.length,n=T(t);return!y(t)&&!b(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}C.fn=C.prototype={jquery:"3.4.1",constructor:C,length:0,toArray:function(){return l.call(this)},get:function(t){return null==t?l.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=C.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return C.each(this,t)},map:function(t){return this.pushStack(C.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(l.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|"+q+")"+q+"*"),z=new RegExp(q+"|>"),V=new RegExp(F),Q=new RegExp("^"+H+"$"),X={ID:new RegExp("^#("+H+")"),CLASS:new RegExp("^\\.("+H+")"),TAG:new RegExp("^("+H+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+q+"*(even|odd|(([+-]|)(\\d*)n|)"+q+"*(?:([+-]|)"+q+"*(\\d+)|))"+q+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+q+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+q+"*((?:-\\d)?\\d*)"+q+"*\\)|)(?=[^-]|$)","i")},G=/HTML$/i,Y=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=new RegExp("\\\\([\\da-f]{1,6}"+q+"?|("+q+")|.)","ig"),nt=function(t,e,n){var i="0x"+e-65536;return i!=i||n?e:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},it=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ot=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},rt=function(){p()},st=xt((function(t){return!0===t.disabled&&"fieldset"===t.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{I.apply(N=L.call(w.childNodes),w.childNodes),N[w.childNodes.length].nodeType}catch(t){I={apply:N.length?function(t,e){O.apply(t,L.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}function at(t,e,i,o){var r,a,u,c,f,h,m,y=e&&e.ownerDocument,T=e?e.nodeType:9;if(i=i||[],"string"!=typeof t||!t||1!==T&&9!==T&&11!==T)return i;if(!o&&((e?e.ownerDocument||e:w)!==d&&p(e),e=e||d,g)){if(11!==T&&(f=Z.exec(t)))if(r=f[1]){if(9===T){if(!(u=e.getElementById(r)))return i;if(u.id===r)return i.push(u),i}else if(y&&(u=y.getElementById(r))&&b(e,u)&&u.id===r)return i.push(u),i}else{if(f[2])return I.apply(i,e.getElementsByTagName(t)),i;if((r=f[3])&&n.getElementsByClassName&&e.getElementsByClassName)return I.apply(i,e.getElementsByClassName(r)),i}if(n.qsa&&!k[t+" "]&&(!v||!v.test(t))&&(1!==T||"object"!==e.nodeName.toLowerCase())){if(m=t,y=e,1===T&&z.test(t)){for((c=e.getAttribute("id"))?c=c.replace(it,ot):e.setAttribute("id",c=x),a=(h=s(t)).length;a--;)h[a]="#"+c+" "+bt(h[a]);m=h.join(","),y=tt.test(t)&&mt(e.parentNode)||e}try{return I.apply(i,y.querySelectorAll(m)),i}catch(e){k(t,!0)}finally{c===x&&e.removeAttribute("id")}}}return l(t.replace(B,"$1"),e,i,o)}function lt(){var t=[];return function e(n,o){return t.push(n+" ")>i.cacheLength&&delete e[t.shift()],e[n+" "]=o}}function ut(t){return t[x]=!0,t}function ct(t){var e=d.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function ft(t,e){for(var n=t.split("|"),o=n.length;o--;)i.attrHandle[n[o]]=e}function pt(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function dt(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function ht(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function gt(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&st(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function vt(t){return ut((function(e){return e=+e,ut((function(n,i){for(var o,r=t([],n.length,e),s=r.length;s--;)n[o=r[s]]&&(n[o]=!(i[o]=n[o]))}))}))}function mt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=at.support={},r=at.isXML=function(t){var e=t.namespaceURI,n=(t.ownerDocument||t).documentElement;return!G.test(e||n&&n.nodeName||"HTML")},p=at.setDocument=function(t){var e,o,s=t?t.ownerDocument||t:w;return s!==d&&9===s.nodeType&&s.documentElement?(h=(d=s).documentElement,g=!r(d),w!==d&&(o=d.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener("unload",rt,!1):o.attachEvent&&o.attachEvent("onunload",rt)),n.attributes=ct((function(t){return t.className="i",!t.getAttribute("className")})),n.getElementsByTagName=ct((function(t){return t.appendChild(d.createComment("")),!t.getElementsByTagName("*").length})),n.getElementsByClassName=K.test(d.getElementsByClassName),n.getById=ct((function(t){return h.appendChild(t).id=x,!d.getElementsByName||!d.getElementsByName(x).length})),n.getById?(i.filter.ID=function(t){var e=t.replace(et,nt);return function(t){return t.getAttribute("id")===e}},i.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}}):(i.filter.ID=function(t){var e=t.replace(et,nt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},i.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n,i,o,r=e.getElementById(t);if(r){if((n=r.getAttributeNode("id"))&&n.value===t)return[r];for(o=e.getElementsByName(t),i=0;r=o[i++];)if((n=r.getAttributeNode("id"))&&n.value===t)return[r]}return[]}}),i.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,i=[],o=0,r=e.getElementsByTagName(t);if("*"===t){for(;n=r[o++];)1===n.nodeType&&i.push(n);return i}return r},i.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&g)return e.getElementsByClassName(t)},m=[],v=[],(n.qsa=K.test(d.querySelectorAll))&&(ct((function(t){h.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+q+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||v.push("\\["+q+"*(?:value|"+P+")"),t.querySelectorAll("[id~="+x+"-]").length||v.push("~="),t.querySelectorAll(":checked").length||v.push(":checked"),t.querySelectorAll("a#"+x+"+*").length||v.push(".#.+[+~]")})),ct((function(t){t.innerHTML="";var e=d.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&v.push("name"+q+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),h.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),v.push(",.*:")}))),(n.matchesSelector=K.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=y.call(t,"*"),y.call(t,"[s!='']:x"),m.push("!=",F)})),v=v.length&&new RegExp(v.join("|")),m=m.length&&new RegExp(m.join("|")),e=K.test(h.compareDocumentPosition),b=e||K.test(h.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},D=e?function(t,e){if(t===e)return f=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(1&(i=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===i?t===d||t.ownerDocument===w&&b(w,t)?-1:e===d||e.ownerDocument===w&&b(w,e)?1:c?R(c,t)-R(c,e):0:4&i?-1:1)}:function(t,e){if(t===e)return f=!0,0;var n,i=0,o=t.parentNode,r=e.parentNode,s=[t],a=[e];if(!o||!r)return t===d?-1:e===d?1:o?-1:r?1:c?R(c,t)-R(c,e):0;if(o===r)return pt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?pt(s[i],a[i]):s[i]===w?-1:a[i]===w?1:0},d):d},at.matches=function(t,e){return at(t,null,null,e)},at.matchesSelector=function(t,e){if((t.ownerDocument||t)!==d&&p(t),n.matchesSelector&&g&&!k[e+" "]&&(!m||!m.test(e))&&(!v||!v.test(e)))try{var i=y.call(t,e);if(i||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(t){k(e,!0)}return at(e,d,null,[t]).length>0},at.contains=function(t,e){return(t.ownerDocument||t)!==d&&p(t),b(t,e)},at.attr=function(t,e){(t.ownerDocument||t)!==d&&p(t);var o=i.attrHandle[e.toLowerCase()],r=o&&A.call(i.attrHandle,e.toLowerCase())?o(t,e,!g):void 0;return void 0!==r?r:n.attributes||!g?t.getAttribute(e):(r=t.getAttributeNode(e))&&r.specified?r.value:null},at.escape=function(t){return(t+"").replace(it,ot)},at.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},at.uniqueSort=function(t){var e,i=[],o=0,r=0;if(f=!n.detectDuplicates,c=!n.sortStable&&t.slice(0),t.sort(D),f){for(;e=t[r++];)e===t[r]&&(o=i.push(r));for(;o--;)t.splice(i[o],1)}return c=null,t},o=at.getText=function(t){var e,n="",i=0,r=t.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=o(t)}else if(3===r||4===r)return t.nodeValue}else for(;e=t[i++];)n+=o(e);return n},(i=at.selectors={cacheLength:50,createPseudo:ut,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,nt),t[3]=(t[3]||t[4]||t[5]||"").replace(et,nt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||at.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&at.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return X.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&V.test(n)&&(e=s(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,nt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=E[t+" "];return e||(e=new RegExp("(^|"+q+")"+t+"("+q+"|$)"))&&E(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,n){return function(i){var o=at.attr(i,t);return null==o?"!="===e:!e||(o+="","="===e?o===n:"!="===e?o!==n:"^="===e?n&&0===o.indexOf(n):"*="===e?n&&o.indexOf(n)>-1:"$="===e?n&&o.slice(-n.length)===n:"~="===e?(" "+o.replace(W," ")+" ").indexOf(n)>-1:"|="===e&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,i,o){var r="nth"!==t.slice(0,3),s="last"!==t.slice(-4),a="of-type"===e;return 1===i&&0===o?function(t){return!!t.parentNode}:function(e,n,l){var u,c,f,p,d,h,g=r!==s?"nextSibling":"previousSibling",v=e.parentNode,m=a&&e.nodeName.toLowerCase(),y=!l&&!a,b=!1;if(v){if(r){for(;g;){for(p=e;p=p[g];)if(a?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;h=g="only"===t&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(b=(d=(u=(c=(f=(p=v)[x]||(p[x]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]||[])[0]===T&&u[1])&&u[2],p=d&&v.childNodes[d];p=++d&&p&&p[g]||(b=d=0)||h.pop();)if(1===p.nodeType&&++b&&p===e){c[t]=[T,d,b];break}}else if(y&&(b=d=(u=(c=(f=(p=e)[x]||(p[x]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]||[])[0]===T&&u[1]),!1===b)for(;(p=++d&&p&&p[g]||(b=d=0)||h.pop())&&((a?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++b||(y&&((c=(f=p[x]||(p[x]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]=[T,b]),p!==e)););return(b-=o)===i||b%i==0&&b/i>=0}}},PSEUDO:function(t,e){var n,o=i.pseudos[t]||i.setFilters[t.toLowerCase()]||at.error("unsupported pseudo: "+t);return o[x]?o(e):o.length>1?(n=[t,t,"",e],i.setFilters.hasOwnProperty(t.toLowerCase())?ut((function(t,n){for(var i,r=o(t,e),s=r.length;s--;)t[i=R(t,r[s])]=!(n[i]=r[s])})):function(t){return o(t,0,n)}):o}},pseudos:{not:ut((function(t){var e=[],n=[],i=a(t.replace(B,"$1"));return i[x]?ut((function(t,e,n,o){for(var r,s=i(t,null,o,[]),a=t.length;a--;)(r=s[a])&&(t[a]=!(e[a]=r))})):function(t,o,r){return e[0]=t,i(e,null,r,n),e[0]=null,!n.pop()}})),has:ut((function(t){return function(e){return at(t,e).length>0}})),contains:ut((function(t){return t=t.replace(et,nt),function(e){return(e.textContent||o(e)).indexOf(t)>-1}})),lang:ut((function(t){return Q.test(t||"")||at.error("unsupported lang: "+t),t=t.replace(et,nt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===h},focus:function(t){return t===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:gt(!1),disabled:gt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!i.pseudos.empty(t)},header:function(t){return J.test(t.nodeName)},input:function(t){return Y.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:vt((function(){return[0]})),last:vt((function(t,e){return[e-1]})),eq:vt((function(t,e,n){return[n<0?n+e:n]})),even:vt((function(t,e){for(var n=0;ne?e:n;--i>=0;)t.push(i);return t})),gt:vt((function(t,e,n){for(var i=n<0?n+e:n;++i1?function(e,n,i){for(var o=t.length;o--;)if(!t[o](e,n,i))return!1;return!0}:t[0]}function Tt(t,e,n,i,o){for(var r,s=[],a=0,l=t.length,u=null!=e;a-1&&(r[u]=!(s[u]=f))}}else m=Tt(m===s?m.splice(h,m.length):m),o?o(null,s,m,l):I.apply(s,m)}))}function Et(t){for(var e,n,o,r=t.length,s=i.relative[t[0].type],a=s||i.relative[" "],l=s?1:0,c=xt((function(t){return t===e}),a,!0),f=xt((function(t){return R(e,t)>-1}),a,!0),p=[function(t,n,i){var o=!s&&(i||n!==u)||((e=n).nodeType?c(t,n,i):f(t,n,i));return e=null,o}];l1&&wt(p),l>1&&bt(t.slice(0,l-1).concat({value:" "===t[l-2].type?"*":""})).replace(B,"$1"),n,l0,o=t.length>0,r=function(r,s,a,l,c){var f,h,v,m=0,y="0",b=r&&[],x=[],w=u,C=r||o&&i.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,S=C.length;for(c&&(u=s===d||s||c);y!==S&&null!=(f=C[y]);y++){if(o&&f){for(h=0,s||f.ownerDocument===d||(p(f),a=!g);v=t[h++];)if(v(f,s||d,a)){l.push(f);break}c&&(T=E)}n&&((f=!v&&f)&&m--,r&&b.push(f))}if(m+=y,n&&y!==m){for(h=0;v=e[h++];)v(b,x,s,a);if(r){if(m>0)for(;y--;)b[y]||x[y]||(x[y]=j.call(l));x=Tt(x)}I.apply(l,x),c&&!r&&x.length>0&&m+e.length>1&&at.uniqueSort(l)}return c&&(T=E,u=w),b};return n?ut(r):r}(r,o))).selector=t}return a},l=at.select=function(t,e,n,o){var r,l,u,c,f,p="function"==typeof t&&t,d=!o&&s(t=p.selector||t);if(n=n||[],1===d.length){if((l=d[0]=d[0].slice(0)).length>2&&"ID"===(u=l[0]).type&&9===e.nodeType&&g&&i.relative[l[1].type]){if(!(e=(i.find.ID(u.matches[0].replace(et,nt),e)||[])[0]))return n;p&&(e=e.parentNode),t=t.slice(l.shift().value.length)}for(r=X.needsContext.test(t)?0:l.length;r--&&(u=l[r],!i.relative[c=u.type]);)if((f=i.find[c])&&(o=f(u.matches[0].replace(et,nt),tt.test(l[0].type)&&mt(e.parentNode)||e))){if(l.splice(r,1),!(t=o.length&&bt(l)))return I.apply(n,o),n;break}}return(p||a(t,d))(o,e,!g,n,!e||tt.test(t)&&mt(e.parentNode)||e),n},n.sortStable=x.split("").sort(D).join("")===x,n.detectDuplicates=!!f,p(),n.sortDetached=ct((function(t){return 1&t.compareDocumentPosition(d.createElement("fieldset"))})),ct((function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")}))||ft("type|href|height|width",(function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)})),n.attributes&&ct((function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")}))||ft("value",(function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue})),ct((function(t){return null==t.getAttribute("disabled")}))||ft(P,(function(t,e,n){var i;if(!n)return!0===t[e]?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null})),at}(n);C.find=$,C.expr=$.selectors,C.expr[":"]=C.expr.pseudos,C.uniqueSort=C.unique=$.uniqueSort,C.text=$.getText,C.isXMLDoc=$.isXML,C.contains=$.contains,C.escapeSelector=$.escape;var k=function(t,e,n){for(var i=[],o=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&C(t).is(n))break;i.push(t)}return i},D=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},A=C.expr.match.needsContext;function N(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var j=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function O(t,e,n){return y(e)?C.grep(t,(function(t,i){return!!e.call(t,i,t)!==n})):e.nodeType?C.grep(t,(function(t){return t===e!==n})):"string"!=typeof e?C.grep(t,(function(t){return f.call(e,t)>-1!==n})):C.filter(e,t,n)}C.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?C.find.matchesSelector(i,t)?[i]:[]:C.find.matches(t,C.grep(e,(function(t){return 1===t.nodeType})))},C.fn.extend({find:function(t){var e,n,i=this.length,o=this;if("string"!=typeof t)return this.pushStack(C(t).filter((function(){for(e=0;e1?C.uniqueSort(n):n},filter:function(t){return this.pushStack(O(this,t||[],!1))},not:function(t){return this.pushStack(O(this,t||[],!0))},is:function(t){return!!O(this,"string"==typeof t&&A.test(t)?C(t):t||[],!1).length}});var I,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(C.fn.init=function(t,e,n){var i,o;if(!t)return this;if(n=n||I,"string"==typeof t){if(!(i="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:L.exec(t))||!i[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(i[1]){if(e=e instanceof C?e[0]:e,C.merge(this,C.parseHTML(i[1],e&&e.nodeType?e.ownerDocument||e:s,!0)),j.test(i[1])&&C.isPlainObject(e))for(i in e)y(this[i])?this[i](e[i]):this.attr(i,e[i]);return this}return(o=s.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):y(t)?void 0!==n.ready?n.ready(t):t(C):C.makeArray(t,this)}).prototype=C.fn,I=C(s);var R=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};function q(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}C.fn.extend({has:function(t){var e=C(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&C.find.matchesSelector(n,t))){r.push(n);break}return this.pushStack(r.length>1?C.uniqueSort(r):r)},index:function(t){return t?"string"==typeof t?f.call(C(t),this[0]):f.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),C.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return k(t,"parentNode")},parentsUntil:function(t,e,n){return k(t,"parentNode",n)},next:function(t){return q(t,"nextSibling")},prev:function(t){return q(t,"previousSibling")},nextAll:function(t){return k(t,"nextSibling")},prevAll:function(t){return k(t,"previousSibling")},nextUntil:function(t,e,n){return k(t,"nextSibling",n)},prevUntil:function(t,e,n){return k(t,"previousSibling",n)},siblings:function(t){return D((t.parentNode||{}).firstChild,t)},children:function(t){return D(t.firstChild)},contents:function(t){return void 0!==t.contentDocument?t.contentDocument:(N(t,"template")&&(t=t.content||t),C.merge([],t.childNodes))}},(function(t,e){C.fn[t]=function(n,i){var o=C.map(this,e,n);return"Until"!==t.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=C.filter(i,o)),this.length>1&&(P[t]||C.uniqueSort(o),R.test(t)&&o.reverse()),this.pushStack(o)}}));var H=/[^\x20\t\r\n\f]+/g;function M(t){return t}function F(t){throw t}function W(t,e,n,i){var o;try{t&&y(o=t.promise)?o.call(t).done(e).fail(n):t&&y(o=t.then)?o.call(t,e,n):e.apply(void 0,[t].slice(i))}catch(t){n.apply(void 0,[t])}}C.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return C.each(t.match(H)||[],(function(t,n){e[n]=!0})),e}(t):C.extend({},t);var e,n,i,o,r=[],s=[],a=-1,l=function(){for(o=o||t.once,i=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)r.splice(n,1),n<=a&&a--})),this},has:function(t){return t?C.inArray(t,r)>-1:r.length>0},empty:function(){return r&&(r=[]),this},disable:function(){return o=s=[],r=n="",this},disabled:function(){return!r},lock:function(){return o=s=[],n||e||(r=n=""),this},locked:function(){return!!o},fireWith:function(t,n){return o||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||l()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},C.extend({Deferred:function(t){var e=[["notify","progress",C.Callbacks("memory"),C.Callbacks("memory"),2],["resolve","done",C.Callbacks("once memory"),C.Callbacks("once memory"),0,"resolved"],["reject","fail",C.Callbacks("once memory"),C.Callbacks("once memory"),1,"rejected"]],i="pending",o={state:function(){return i},always:function(){return r.done(arguments).fail(arguments),this},catch:function(t){return o.then(null,t)},pipe:function(){var t=arguments;return C.Deferred((function(n){C.each(e,(function(e,i){var o=y(t[i[4]])&&t[i[4]];r[i[1]]((function(){var t=o&&o.apply(this,arguments);t&&y(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this,o?[t]:arguments)}))})),t=null})).promise()},then:function(t,i,o){var r=0;function s(t,e,i,o){return function(){var a=this,l=arguments,u=function(){var n,u;if(!(t=r&&(i!==F&&(a=void 0,l=[n]),e.rejectWith(a,l))}};t?c():(C.Deferred.getStackHook&&(c.stackTrace=C.Deferred.getStackHook()),n.setTimeout(c))}}return C.Deferred((function(n){e[0][3].add(s(0,n,y(o)?o:M,n.notifyWith)),e[1][3].add(s(0,n,y(t)?t:M)),e[2][3].add(s(0,n,y(i)?i:F))})).promise()},promise:function(t){return null!=t?C.extend(t,o):o}},r={};return C.each(e,(function(t,n){var s=n[2],a=n[5];o[n[1]]=s.add,a&&s.add((function(){i=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(n[3].fire),r[n[0]]=function(){return r[n[0]+"With"](this===r?void 0:this,arguments),this},r[n[0]+"With"]=s.fireWith})),o.promise(r),t&&t.call(r,r),r},when:function(t){var e=arguments.length,n=e,i=Array(n),o=l.call(arguments),r=C.Deferred(),s=function(t){return function(n){i[t]=this,o[t]=arguments.length>1?l.call(arguments):n,--e||r.resolveWith(i,o)}};if(e<=1&&(W(t,r.done(s(n)).resolve,r.reject,!e),"pending"===r.state()||y(o[n]&&o[n].then)))return r.then();for(;n--;)W(o[n],s(n),r.reject);return r.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;C.Deferred.exceptionHook=function(t,e){n.console&&n.console.warn&&t&&B.test(t.name)&&n.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},C.readyException=function(t){n.setTimeout((function(){throw t}))};var _=C.Deferred();function U(){s.removeEventListener("DOMContentLoaded",U),n.removeEventListener("load",U),C.ready()}C.fn.ready=function(t){return _.then(t).catch((function(t){C.readyException(t)})),this},C.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--C.readyWait:C.isReady)||(C.isReady=!0,!0!==t&&--C.readyWait>0||_.resolveWith(s,[C]))}}),C.ready.then=_.then,"complete"===s.readyState||"loading"!==s.readyState&&!s.documentElement.doScroll?n.setTimeout(C.ready):(s.addEventListener("DOMContentLoaded",U),n.addEventListener("load",U));var z=function(t,e,n,i,o,r,s){var a=0,l=t.length,u=null==n;if("object"===T(n))for(a in o=!0,n)z(t,e,a,n[a],!0,r,s);else if(void 0!==i&&(o=!0,y(i)||(s=!0),u&&(s?(e.call(t,i),e=null):(u=e,e=function(t,e,n){return u.call(C(t),n)})),e))for(;a1,null,!0)},removeData:function(t){return this.each((function(){Z.remove(this,t)}))}}),C.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=K.get(t,e),n&&(!i||Array.isArray(n)?i=K.access(t,e,C.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=C.queue(t,e),i=n.length,o=n.shift(),r=C._queueHooks(t,e);"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===e&&n.unshift("inprogress"),delete r.stop,o.call(t,(function(){C.dequeue(t,e)}),r)),!i&&r&&r.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return K.get(t,n)||K.access(t,n,{empty:C.Callbacks("once memory").add((function(){K.remove(t,[e+"queue",n])}))})}}),C.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]*)/i,mt=/^$|^module$|\/(?:java|ecma)script/i,yt={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function bt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&N(t,e)?C.merge([t],n):n}function xt(t,e){for(var n=0,i=t.length;n-1)o&&o.push(r);else if(u=at(r),s=bt(f.appendChild(r),"script"),u&&xt(s),n)for(c=0;r=s[c++];)mt.test(r.type||"")&&n.push(r);return f}wt=s.createDocumentFragment().appendChild(s.createElement("div")),(Tt=s.createElement("input")).setAttribute("type","radio"),Tt.setAttribute("checked","checked"),Tt.setAttribute("name","t"),wt.appendChild(Tt),m.checkClone=wt.cloneNode(!0).cloneNode(!0).lastChild.checked,wt.innerHTML="",m.noCloneChecked=!!wt.cloneNode(!0).lastChild.defaultValue;var St=/^key/,$t=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,kt=/^([^.]*)(?:\.(.+)|)/;function Dt(){return!0}function At(){return!1}function Nt(t,e){return t===function(){try{return s.activeElement}catch(t){}}()==("focus"===e)}function jt(t,e,n,i,o,r){var s,a;if("object"==typeof e){for(a in"string"!=typeof n&&(i=i||n,n=void 0),e)jt(t,a,n,i,e[a],r);return t}if(null==i&&null==o?(o=n,i=n=void 0):null==o&&("string"==typeof n?(o=i,i=void 0):(o=i,i=n,n=void 0)),!1===o)o=At;else if(!o)return t;return 1===r&&(s=o,(o=function(t){return C().off(t),s.apply(this,arguments)}).guid=s.guid||(s.guid=C.guid++)),t.each((function(){C.event.add(this,e,o,i,n)}))}function Ot(t,e,n){n?(K.set(t,e,!1),C.event.add(t,e,{namespace:!1,handler:function(t){var i,o,r=K.get(this,e);if(1&t.isTrigger&&this[e]){if(r.length)(C.event.special[e]||{}).delegateType&&t.stopPropagation();else if(r=l.call(arguments),K.set(this,e,r),i=n(this,e),this[e](),r!==(o=K.get(this,e))||i?K.set(this,e,!1):o={},r!==o)return t.stopImmediatePropagation(),t.preventDefault(),o.value}else r.length&&(K.set(this,e,{value:C.event.trigger(C.extend(r[0],C.Event.prototype),r.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===K.get(t,e)&&C.event.add(t,e,Dt)}C.event={global:{},add:function(t,e,n,i,o){var r,s,a,l,u,c,f,p,d,h,g,v=K.get(t);if(v)for(n.handler&&(n=(r=n).handler,o=r.selector),o&&C.find.matchesSelector(st,o),n.guid||(n.guid=C.guid++),(l=v.events)||(l=v.events={}),(s=v.handle)||(s=v.handle=function(e){return void 0!==C&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(H)||[""]).length;u--;)d=g=(a=kt.exec(e[u])||[])[1],h=(a[2]||"").split(".").sort(),d&&(f=C.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=C.event.special[d]||{},c=C.extend({type:d,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&C.expr.match.needsContext.test(o),namespace:h.join(".")},r),(p=l[d])||((p=l[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,i,h,s)||t.addEventListener&&t.addEventListener(d,s)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,c):p.push(c),C.event.global[d]=!0)},remove:function(t,e,n,i,o){var r,s,a,l,u,c,f,p,d,h,g,v=K.hasData(t)&&K.get(t);if(v&&(l=v.events)){for(u=(e=(e||"").match(H)||[""]).length;u--;)if(d=g=(a=kt.exec(e[u])||[])[1],h=(a[2]||"").split(".").sort(),d){for(f=C.event.special[d]||{},p=l[d=(i?f.delegateType:f.bindType)||d]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=r=p.length;r--;)c=p[r],!o&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(p.splice(r,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(t,c));s&&!p.length&&(f.teardown&&!1!==f.teardown.call(t,h,v.handle)||C.removeEvent(t,d,v.handle),delete l[d])}else for(d in l)C.event.remove(t,d+e[u],n,i,!0);C.isEmptyObject(l)&&K.remove(t,"handle events")}},dispatch:function(t){var e,n,i,o,r,s,a=C.event.fix(t),l=new Array(arguments.length),u=(K.get(this,"events")||{})[a.type]||[],c=C.event.special[a.type]||{};for(l[0]=a,e=1;e=1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==t.type||!0!==u.disabled)){for(r=[],s={},n=0;n-1:C.find(o,this,null,[u]).length),s[o]&&r.push(i);r.length&&a.push({elem:u,handlers:r})}return u=this,l\x20\t\r\n\f]*)[^>]*)\/>/gi,Lt=/\s*$/g;function qt(t,e){return N(t,"table")&&N(11!==e.nodeType?e:e.firstChild,"tr")&&C(t).children("tbody")[0]||t}function Ht(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function Mt(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function Ft(t,e){var n,i,o,r,s,a,l,u;if(1===e.nodeType){if(K.hasData(t)&&(r=K.access(t),s=K.set(e,r),u=r.events))for(o in delete s.handle,s.events={},u)for(n=0,i=u[o].length;n1&&"string"==typeof h&&!m.checkClone&&Rt.test(h))return t.each((function(o){var r=t.eq(o);g&&(e[0]=h.call(this,o,r.html())),Bt(r,e,n,i)}));if(p&&(r=(o=Et(e,t[0].ownerDocument,!1,t,i)).firstChild,1===o.childNodes.length&&(o=r),r||i)){for(a=(s=C.map(bt(o,"script"),Ht)).length;f")},clone:function(t,e,n){var i,o,r,s,a=t.cloneNode(!0),l=at(t);if(!(m.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||C.isXMLDoc(t)))for(s=bt(a),i=0,o=(r=bt(t)).length;i0&&xt(s,!l&&bt(t,"script")),a},cleanData:function(t){for(var e,n,i,o=C.event.special,r=0;void 0!==(n=t[r]);r++)if(Y(n)){if(e=n[K.expando]){if(e.events)for(i in e.events)o[i]?C.event.remove(n,i):C.removeEvent(n,i,e.handle);n[K.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),C.fn.extend({detach:function(t){return _t(this,t,!0)},remove:function(t){return _t(this,t)},text:function(t){return z(this,(function(t){return void 0===t?C.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Bt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qt(this,t).appendChild(t)}))},prepend:function(){return Bt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=qt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Bt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Bt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(C.cleanData(bt(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return C.clone(this,t,e)}))},html:function(t){return z(this,(function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!Lt.test(t)&&!yt[(vt.exec(t)||["",""])[1].toLowerCase()]){t=C.htmlPrefilter(t);try{for(;n=0&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-r-l-a-.5))||0),l}function re(t,e,n){var i=zt(t),o=(!m.boxSizingReliable()||n)&&"border-box"===C.css(t,"boxSizing",!1,i),r=o,s=Qt(t,e,i),a="offset"+e[0].toUpperCase()+e.slice(1);if(Ut.test(s)){if(!n)return s;s="auto"}return(!m.boxSizingReliable()&&o||"auto"===s||!parseFloat(s)&&"inline"===C.css(t,"display",!1,i))&&t.getClientRects().length&&(o="border-box"===C.css(t,"boxSizing",!1,i),(r=a in t)&&(s=t[a])),(s=parseFloat(s)||0)+oe(t,e,n||(o?"border":"content"),r,i,s)+"px"}function se(t,e,n,i,o){return new se.prototype.init(t,e,n,i,o)}C.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Qt(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,r,s,a=G(e),l=te.test(e),u=t.style;if(l||(e=Kt(a)),s=C.cssHooks[e]||C.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:u[e];"string"===(r=typeof n)&&(o=ot.exec(n))&&o[1]&&(n=ft(t,e,o),r="number"),null!=n&&n==n&&("number"!==r||l||(n+=o&&o[3]||(C.cssNumber[a]?"":"px")),m.clearCloneStyle||""!==n||0!==e.indexOf("background")||(u[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,i))||(l?u.setProperty(e,n):u[e]=n))}},css:function(t,e,n,i){var o,r,s,a=G(e);return te.test(e)||(e=Kt(a)),(s=C.cssHooks[e]||C.cssHooks[a])&&"get"in s&&(o=s.get(t,!0,n)),void 0===o&&(o=Qt(t,e,i)),"normal"===o&&e in ne&&(o=ne[e]),""===n||n?(r=parseFloat(o),!0===n||isFinite(r)?r||0:o):o}}),C.each(["height","width"],(function(t,e){C.cssHooks[e]={get:function(t,n,i){if(n)return!Zt.test(C.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?re(t,e,i):ct(t,ee,(function(){return re(t,e,i)}))},set:function(t,n,i){var o,r=zt(t),s=!m.scrollboxSize()&&"absolute"===r.position,a=(s||i)&&"border-box"===C.css(t,"boxSizing",!1,r),l=i?oe(t,e,i,a,r):0;return a&&s&&(l-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(r[e])-oe(t,e,"border",!1,r)-.5)),l&&(o=ot.exec(n))&&"px"!==(o[3]||"px")&&(t.style[e]=n,n=C.css(t,e)),ie(0,n,l)}}})),C.cssHooks.marginLeft=Xt(m.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Qt(t,"marginLeft"))||t.getBoundingClientRect().left-ct(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),C.each({margin:"",padding:"",border:"Width"},(function(t,e){C.cssHooks[t+e]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];i<4;i++)o[t+rt[i]+e]=r[i]||r[i-2]||r[0];return o}},"margin"!==t&&(C.cssHooks[t+e].set=ie)})),C.fn.extend({css:function(t,e){return z(this,(function(t,e,n){var i,o,r={},s=0;if(Array.isArray(e)){for(i=zt(t),o=e.length;s1)}}),C.Tween=se,se.prototype={constructor:se,init:function(t,e,n,i,o,r){this.elem=t,this.prop=n,this.easing=o||C.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(C.cssNumber[n]?"":"px")},cur:function(){var t=se.propHooks[this.prop];return t&&t.get?t.get(this):se.propHooks._default.get(this)},run:function(t){var e,n=se.propHooks[this.prop];return this.options.duration?this.pos=e=C.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):se.propHooks._default.set(this),this}},se.prototype.init.prototype=se.prototype,se.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=C.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){C.fx.step[t.prop]?C.fx.step[t.prop](t):1!==t.elem.nodeType||!C.cssHooks[t.prop]&&null==t.elem.style[Kt(t.prop)]?t.elem[t.prop]=t.now:C.style(t.elem,t.prop,t.now+t.unit)}}},se.propHooks.scrollTop=se.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},C.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},C.fx=se.prototype.init,C.fx.step={};var ae,le,ue=/^(?:toggle|show|hide)$/,ce=/queueHooks$/;function fe(){le&&(!1===s.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(fe):n.setTimeout(fe,C.fx.interval),C.fx.tick())}function pe(){return n.setTimeout((function(){ae=void 0})),ae=Date.now()}function de(t,e){var n,i=0,o={height:t};for(e=e?1:0;i<4;i+=2-e)o["margin"+(n=rt[i])]=o["padding"+n]=t;return e&&(o.opacity=o.width=t),o}function he(t,e,n){for(var i,o=(ge.tweeners[e]||[]).concat(ge.tweeners["*"]),r=0,s=o.length;r1)},removeAttr:function(t){return this.each((function(){C.removeAttr(this,t)}))}}),C.extend({attr:function(t,e,n){var i,o,r=t.nodeType;if(3!==r&&8!==r&&2!==r)return void 0===t.getAttribute?C.prop(t,e,n):(1===r&&C.isXMLDoc(t)||(o=C.attrHooks[e.toLowerCase()]||(C.expr.match.bool.test(e)?ve:void 0)),void 0!==n?null===n?void C.removeAttr(t,e):o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(i=o.get(t,e))?i:null==(i=C.find.attr(t,e))?void 0:i)},attrHooks:{type:{set:function(t,e){if(!m.radioValue&&"radio"===e&&N(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i=0,o=e&&e.match(H);if(o&&1===t.nodeType)for(;n=o[i++];)t.removeAttribute(n)}}),ve={set:function(t,e,n){return!1===e?C.removeAttr(t,n):t.setAttribute(n,n),n}},C.each(C.expr.match.bool.source.match(/\w+/g),(function(t,e){var n=me[e]||C.find.attr;me[e]=function(t,e,i){var o,r,s=e.toLowerCase();return i||(r=me[s],me[s]=o,o=null!=n(t,e,i)?s:null,me[s]=r),o}}));var ye=/^(?:input|select|textarea|button)$/i,be=/^(?:a|area)$/i;function xe(t){return(t.match(H)||[]).join(" ")}function we(t){return t.getAttribute&&t.getAttribute("class")||""}function Te(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(H)||[]}C.fn.extend({prop:function(t,e){return z(this,C.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[C.propFix[t]||t]}))}}),C.extend({prop:function(t,e,n){var i,o,r=t.nodeType;if(3!==r&&8!==r&&2!==r)return 1===r&&C.isXMLDoc(t)||(e=C.propFix[e]||e,o=C.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=C.find.attr(t,"tabindex");return e?parseInt(e,10):ye.test(t.nodeName)||be.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),m.optSelected||(C.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),C.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){C.propFix[this.toLowerCase()]=this})),C.fn.extend({addClass:function(t){var e,n,i,o,r,s,a,l=0;if(y(t))return this.each((function(e){C(this).addClass(t.call(this,e,we(this)))}));if((e=Te(t)).length)for(;n=this[l++];)if(o=we(n),i=1===n.nodeType&&" "+xe(o)+" "){for(s=0;r=e[s++];)i.indexOf(" "+r+" ")<0&&(i+=r+" ");o!==(a=xe(i))&&n.setAttribute("class",a)}return this},removeClass:function(t){var e,n,i,o,r,s,a,l=0;if(y(t))return this.each((function(e){C(this).removeClass(t.call(this,e,we(this)))}));if(!arguments.length)return this.attr("class","");if((e=Te(t)).length)for(;n=this[l++];)if(o=we(n),i=1===n.nodeType&&" "+xe(o)+" "){for(s=0;r=e[s++];)for(;i.indexOf(" "+r+" ")>-1;)i=i.replace(" "+r+" "," ");o!==(a=xe(i))&&n.setAttribute("class",a)}return this},toggleClass:function(t,e){var n=typeof t,i="string"===n||Array.isArray(t);return"boolean"==typeof e&&i?e?this.addClass(t):this.removeClass(t):y(t)?this.each((function(n){C(this).toggleClass(t.call(this,n,we(this),e),e)})):this.each((function(){var e,o,r,s;if(i)for(o=0,r=C(this),s=Te(t);e=s[o++];)r.hasClass(e)?r.removeClass(e):r.addClass(e);else void 0!==t&&"boolean"!==n||((e=we(this))&&K.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":K.get(this,"__className__")||""))}))},hasClass:function(t){var e,n,i=0;for(e=" "+t+" ";n=this[i++];)if(1===n.nodeType&&(" "+xe(we(n))+" ").indexOf(e)>-1)return!0;return!1}});var Ce=/\r/g;C.fn.extend({val:function(t){var e,n,i,o=this[0];return arguments.length?(i=y(t),this.each((function(n){var o;1===this.nodeType&&(null==(o=i?t.call(this,n,C(this).val()):t)?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=C.map(o,(function(t){return null==t?"":t+""}))),(e=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))}))):o?(e=C.valHooks[o.type]||C.valHooks[o.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(Ce,""):null==n?"":n:void 0}}),C.extend({valHooks:{option:{get:function(t){var e=C.find.attr(t,"value");return null!=e?e:xe(C.text(t))}},select:{get:function(t){var e,n,i,o=t.options,r=t.selectedIndex,s="select-one"===t.type,a=s?null:[],l=s?r+1:o.length;for(i=r<0?l:s?r:0;i-1)&&(n=!0);return n||(t.selectedIndex=-1),r}}}}),C.each(["radio","checkbox"],(function(){C.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=C.inArray(C(t).val(),e)>-1}},m.checkOn||(C.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})})),m.focusin="onfocusin"in n;var Ee=/^(?:focusinfocus|focusoutblur)$/,Se=function(t){t.stopPropagation()};C.extend(C.event,{trigger:function(t,e,i,o){var r,a,l,u,c,f,p,d,g=[i||s],v=h.call(t,"type")?t.type:t,m=h.call(t,"namespace")?t.namespace.split("."):[];if(a=d=l=i=i||s,3!==i.nodeType&&8!==i.nodeType&&!Ee.test(v+C.event.triggered)&&(v.indexOf(".")>-1&&(m=v.split("."),v=m.shift(),m.sort()),c=v.indexOf(":")<0&&"on"+v,(t=t[C.expando]?t:new C.Event(v,"object"==typeof t&&t)).isTrigger=o?2:3,t.namespace=m.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),e=null==e?[t]:C.makeArray(e,[t]),p=C.event.special[v]||{},o||!p.trigger||!1!==p.trigger.apply(i,e))){if(!o&&!p.noBubble&&!b(i)){for(u=p.delegateType||v,Ee.test(u+v)||(a=a.parentNode);a;a=a.parentNode)g.push(a),l=a;l===(i.ownerDocument||s)&&g.push(l.defaultView||l.parentWindow||n)}for(r=0;(a=g[r++])&&!t.isPropagationStopped();)d=a,t.type=r>1?u:p.bindType||v,(f=(K.get(a,"events")||{})[t.type]&&K.get(a,"handle"))&&f.apply(a,e),(f=c&&a[c])&&f.apply&&Y(a)&&(t.result=f.apply(a,e),!1===t.result&&t.preventDefault());return t.type=v,o||t.isDefaultPrevented()||p._default&&!1!==p._default.apply(g.pop(),e)||!Y(i)||c&&y(i[v])&&!b(i)&&((l=i[c])&&(i[c]=null),C.event.triggered=v,t.isPropagationStopped()&&d.addEventListener(v,Se),i[v](),t.isPropagationStopped()&&d.removeEventListener(v,Se),C.event.triggered=void 0,l&&(i[c]=l)),t.result}},simulate:function(t,e,n){var i=C.extend(new C.Event,n,{type:t,isSimulated:!0});C.event.trigger(i,null,e)}}),C.fn.extend({trigger:function(t,e){return this.each((function(){C.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return C.event.trigger(t,e,n,!0)}}),m.focusin||C.each({focus:"focusin",blur:"focusout"},(function(t,e){var n=function(t){C.event.simulate(e,t.target,C.event.fix(t))};C.event.special[e]={setup:function(){var i=this.ownerDocument||this,o=K.access(i,e);o||i.addEventListener(t,n,!0),K.access(i,e,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=K.access(i,e)-1;o?K.access(i,e,o):(i.removeEventListener(t,n,!0),K.remove(i,e))}}}));var $e=n.location,ke=Date.now(),De=/\?/;C.parseXML=function(t){var e;if(!t||"string"!=typeof t)return null;try{e=(new n.DOMParser).parseFromString(t,"text/xml")}catch(t){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||C.error("Invalid XML: "+t),e};var Ae=/\[\]$/,Ne=/\r?\n/g,je=/^(?:submit|button|image|reset|file)$/i,Oe=/^(?:input|select|textarea|keygen)/i;function Ie(t,e,n,i){var o;if(Array.isArray(e))C.each(e,(function(e,o){n||Ae.test(t)?i(t,o):Ie(t+"["+("object"==typeof o&&null!=o?e:"")+"]",o,n,i)}));else if(n||"object"!==T(e))i(t,e);else for(o in e)Ie(t+"["+o+"]",e[o],n,i)}C.param=function(t,e){var n,i=[],o=function(t,e){var n=y(e)?e():e;i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!C.isPlainObject(t))C.each(t,(function(){o(this.name,this.value)}));else for(n in t)Ie(n,t[n],e,o);return i.join("&")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=C.prop(this,"elements");return t?C.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!C(this).is(":disabled")&&Oe.test(this.nodeName)&&!je.test(t)&&(this.checked||!gt.test(t))})).map((function(t,e){var n=C(this).val();return null==n?null:Array.isArray(n)?C.map(n,(function(t){return{name:e.name,value:t.replace(Ne,"\r\n")}})):{name:e.name,value:n.replace(Ne,"\r\n")}})).get()}});var Le=/%20/g,Re=/#.*$/,Pe=/([?&])_=[^&]*/,qe=/^(.*?):[ \t]*([^\r\n]*)$/gm,He=/^(?:GET|HEAD)$/,Me=/^\/\//,Fe={},We={},Be="*/".concat("*"),_e=s.createElement("a");function Ue(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var i,o=0,r=e.toLowerCase().match(H)||[];if(y(n))for(;i=r[o++];)"+"===i[0]?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(n)):(t[i]=t[i]||[]).push(n)}}function ze(t,e,n,i){var o={},r=t===We;function s(a){var l;return o[a]=!0,C.each(t[a]||[],(function(t,a){var u=a(e,n,i);return"string"!=typeof u||r||o[u]?r?!(l=u):void 0:(e.dataTypes.unshift(u),s(u),!1)})),l}return s(e.dataTypes[0])||!o["*"]&&s("*")}function Ve(t,e){var n,i,o=C.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((o[n]?t:i||(i={}))[n]=e[n]);return i&&C.extend(!0,t,i),t}_e.href=$e.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:$e.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test($e.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Be,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Ve(Ve(t,C.ajaxSettings),e):Ve(C.ajaxSettings,t)},ajaxPrefilter:Ue(Fe),ajaxTransport:Ue(We),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,o,r,a,l,u,c,f,p,d,h=C.ajaxSetup({},e),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?C(g):C.event,m=C.Deferred(),y=C.Callbacks("once memory"),b=h.statusCode||{},x={},w={},T="canceled",E={readyState:0,getResponseHeader:function(t){var e;if(c){if(!a)for(a={};e=qe.exec(r);)a[e[1].toLowerCase()+" "]=(a[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=a[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return c?r:null},setRequestHeader:function(t,e){return null==c&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,x[t]=e),this},overrideMimeType:function(t){return null==c&&(h.mimeType=t),this},statusCode:function(t){var e;if(t)if(c)E.always(t[E.status]);else for(e in t)b[e]=[b[e],t[e]];return this},abort:function(t){var e=t||T;return i&&i.abort(e),S(0,e),this}};if(m.promise(E),h.url=((t||h.url||$e.href)+"").replace(Me,$e.protocol+"//"),h.type=e.method||e.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(H)||[""],null==h.crossDomain){u=s.createElement("a");try{u.href=h.url,u.href=u.href,h.crossDomain=_e.protocol+"//"+_e.host!=u.protocol+"//"+u.host}catch(t){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=C.param(h.data,h.traditional)),ze(Fe,h,e,E),c)return E;for(p in(f=C.event&&h.global)&&0==C.active++&&C.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!He.test(h.type),o=h.url.replace(Re,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Le,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(De.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Pe,"$1"),d=(De.test(o)?"&":"?")+"_="+ke+++d),h.url=o+d),h.ifModified&&(C.lastModified[o]&&E.setRequestHeader("If-Modified-Since",C.lastModified[o]),C.etag[o]&&E.setRequestHeader("If-None-Match",C.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||e.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Be+"; q=0.01":""):h.accepts["*"]),h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(T="abort",y.add(h.complete),E.done(h.success),E.fail(h.error),i=ze(We,h,e,E)){if(E.readyState=1,f&&v.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(l=n.setTimeout((function(){E.abort("timeout")}),h.timeout));try{c=!1,i.send(x,S)}catch(t){if(c)throw t;S(-1,t)}}else S(-1,"No Transport");function S(t,e,s,a){var u,p,d,x,w,T=e;c||(c=!0,l&&n.clearTimeout(l),i=void 0,r=a||"",E.readyState=t>0?4:0,u=t>=200&&t<300||304===t,s&&(x=function(t,e,n){for(var i,o,r,s,a=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=t.mimeType||e.getResponseHeader("Content-Type"));if(i)for(o in a)if(a[o]&&a[o].test(i)){l.unshift(o);break}if(l[0]in n)r=l[0];else{for(o in n){if(!l[0]||t.converters[o+" "+l[0]]){r=o;break}s||(s=o)}r=r||s}if(r)return r!==l[0]&&l.unshift(r),n[r]}(h,E,s)),x=function(t,e,n,i){var o,r,s,a,l,u={},c=t.dataTypes.slice();if(c[1])for(s in t.converters)u[s.toLowerCase()]=t.converters[s];for(r=c.shift();r;)if(t.responseFields[r]&&(n[t.responseFields[r]]=e),!l&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=r,r=c.shift())if("*"===r)r=l;else if("*"!==l&&l!==r){if(!(s=u[l+" "+r]||u["* "+r]))for(o in u)if((a=o.split(" "))[1]===r&&(s=u[l+" "+a[0]]||u["* "+a[0]])){!0===s?s=u[o]:!0!==u[o]&&(r=a[0],c.unshift(a[1]));break}if(!0!==s)if(s&&t.throws)e=s(e);else try{e=s(e)}catch(t){return{state:"parsererror",error:s?t:"No conversion from "+l+" to "+r}}}return{state:"success",data:e}}(h,x,E,u),u?(h.ifModified&&((w=E.getResponseHeader("Last-Modified"))&&(C.lastModified[o]=w),(w=E.getResponseHeader("etag"))&&(C.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=x.state,p=x.data,u=!(d=x.error))):(d=T,!t&&T||(T="error",t<0&&(t=0))),E.status=t,E.statusText=(e||T)+"",u?m.resolveWith(g,[p,T,E]):m.rejectWith(g,[E,T,d]),E.statusCode(b),b=void 0,f&&v.trigger(u?"ajaxSuccess":"ajaxError",[E,h,u?p:d]),y.fireWith(g,[E,T]),f&&(v.trigger("ajaxComplete",[E,h]),--C.active||C.event.trigger("ajaxStop")))}return E},getJSON:function(t,e,n){return C.get(t,e,n,"json")},getScript:function(t,e){return C.get(t,void 0,e,"script")}}),C.each(["get","post"],(function(t,e){C[e]=function(t,n,i,o){return y(n)&&(o=o||i,i=n,n=void 0),C.ajax(C.extend({url:t,type:e,dataType:o,data:n,success:i},C.isPlainObject(t)&&t))}})),C._evalUrl=function(t,e){return C.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){C.globalEval(t,e)}})},C.fn.extend({wrapAll:function(t){var e;return this[0]&&(y(t)&&(t=t.call(this[0])),e=C(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return y(t)?this.each((function(e){C(this).wrapInner(t.call(this,e))})):this.each((function(){var e=C(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=y(t);return this.each((function(n){C(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){C(this).replaceWith(this.childNodes)})),this}}),C.expr.pseudos.hidden=function(t){return!C.expr.pseudos.visible(t)},C.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(t){}};var Qe={0:200,1223:204},Xe=C.ajaxSettings.xhr();m.cors=!!Xe&&"withCredentials"in Xe,m.ajax=Xe=!!Xe,C.ajaxTransport((function(t){var e,i;if(m.cors||Xe&&!t.crossDomain)return{send:function(o,r){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];for(s in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest"),o)a.setRequestHeader(s,o[s]);e=function(t){return function(){e&&(e=i=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?r(0,"error"):r(a.status,a.statusText):r(Qe[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=e(),i=a.onerror=a.ontimeout=e("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&n.setTimeout((function(){e&&i()}))},e=e("abort");try{a.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),C.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),C.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return C.globalEval(t),t}}}),C.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),C.ajaxTransport("script",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(i,o){e=C(" diff --git a/resources/assets/js/components/transactions/CustomString.vue b/resources/assets/js/components/transactions/CustomString.vue index f04d230e45..9706004ff6 100644 --- a/resources/assets/js/components/transactions/CustomString.vue +++ b/resources/assets/js/components/transactions/CustomString.vue @@ -26,11 +26,20 @@ {{ title }}
+
+ + + +
  • {{ error }}
@@ -51,6 +60,12 @@ handleInput(e) { this.$emit('input', this.$refs.str.value); }, + clearField: function () { + //props.value = ''; + this.name = ''; + this.$refs.str.value = ''; + this.$emit('input', this.$refs.str.value); + }, hasError: function () { return this.error.length > 0; } diff --git a/resources/assets/js/components/transactions/CustomTransactionFields.vue b/resources/assets/js/components/transactions/CustomTransactionFields.vue index 53420e988e..898f44cefc 100644 --- a/resources/assets/js/components/transactions/CustomTransactionFields.vue +++ b/resources/assets/js/components/transactions/CustomTransactionFields.vue @@ -20,6 +20,7 @@ diff --git a/resources/assets/js/components/transactions/EditTransaction.vue b/resources/assets/js/components/transactions/EditTransaction.vue index ec4b562ef0..418e89b512 100644 --- a/resources/assets/js/components/transactions/EditTransaction.vue +++ b/resources/assets/js/components/transactions/EditTransaction.vue @@ -41,24 +41,6 @@
-
-
-
-
-

- {{ $t('firefly.split_transaction_title')}} -

-
-
- -
-
-
-
-
@@ -189,8 +171,25 @@
+
+
+
+
+

+ {{ $t('firefly.split_transaction_title')}} +

+
+
+ +
+
+
+
-
+

diff --git a/resources/assets/js/components/transactions/ForeignAmountSelect.vue b/resources/assets/js/components/transactions/ForeignAmountSelect.vue index 2339683375..9d82b62357 100644 --- a/resources/assets/js/components/transactions/ForeignAmountSelect.vue +++ b/resources/assets/js/components/transactions/ForeignAmountSelect.vue @@ -21,11 +21,10 @@