correct ipfs cid detection logic

correct ipfs cid detection logic

<template>

                 {{$t('transaction.trx_op')}} 0">{{id}}
                <router-link
                        :to="{path:'/transaction/'+this.txid}">txid:{{this.txid}}</router-link>

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.transfer.name')}}

                            {{$t('transaction.trxTypes.transfer.from')}}

                                <router-link :to="{path: '/account/' + op[1].from}">
                                    {{formatted_account(op[1].from, 'from')}}
                                </router-link>

                            {{$t('transaction.trxTypes.transfer.to')}}

                                <router-link :to="{path: '/account/' + op[1].to}">
                                    {{formatted_account(op[1].to, 'to')}}
                                </router-link>

                            {{$t('transaction.trxTypes.transfer.amount')}}
                            {{formatted_number(op[1].amount.asset_id, op[1].amount.amount, 5)}}

                            {{$t('transaction.trxTypes.transfer.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.limit_order_create')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.limit_order_cancel')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.call_order_update')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.fill_order')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_create.name')}}

                            {{$t('transaction.trxTypes.account_create.registrar')}}

                                <router-link :to="{path: '/account/' + op[1].registrar}">
                                    {{formatted_account(op[1].registrar, 'registrar')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_create.referrer')}}

                                <router-link :to="{path: '/account/' + op[1].referrer}">
                                    {{formatted_account(op[1].referrer, 'referrer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_create.account')}}

                                <router-link :to="{path: '/account/' + op[1].name}">{{op[1].name}}</router-link>

                            {{$t('transaction.trxTypes.account_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_update.name')}}

                            {{$t('transaction.trxTypes.account_update.account')}}

                                <router-link :to="{path: '/account/' + op[1].account}">
                                    {{formatted_account(op[1].account, 'account')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_whitelist.name')}}

                            {{$t('transaction.trxTypes.account_whitelist.authorizing_account')}}

                                <router-link :to="{path: '/account/' + op[1].authorizing_account}">
                                    {{formatted_account(op[1].authorizing_account, 'authorizing_account')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_whitelist.account_to_list')}}

                                <router-link :to="{path: '/account/' + op[1].account_to_list}">
                                    {{formatted_account(op[1].account_to_list, 'account_to_list')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_whitelist.new_listing')}}
                            {{$t(formatted_listing(op[1].new_listing))}}

                            {{$t('transaction.trxTypes.account_whitelist.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_upgrade.name')}}

                            {{$t('transaction.trxTypes.account_upgrade.account_to_upgrade')}}

                                <router-link :to="{path: '/account/' + op[1].account_to_upgrade}">
                                    {{formatted_account(op[1].account_to_upgrade, 'account_to_upgrade')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_upgrade.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.account_upgrade.upgrade_to_lifetime_member')}}
                            {{op[1].upgrade_to_lifetime_member}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_transfer.name')}}

                            {{$t('transaction.trxTypes.account_transfer.account_id')}}

                                <router-link :to="{path: '/account/' + op[1].account_id}">
                                    {{formatted_account(op[1].account_id, 'account_id')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_transfer.new_owner')}}

                                <router-link :to="{path: '/account/' + op[1].new_owner}">
                                    {{formatted_account(op[1].new_owner, 'new_owner')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_transfer.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_create.name')}}

                            {{$t('transaction.trxTypes.asset_create.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.asset_create.symbol')}}
                            {{op[1].symbol}}

                            {{$t('transaction.trxTypes.asset_create.precision')}}
                            {{op[1].precision}}

                            {{$t('transaction.trxTypes.asset_create.max_supply')}}
                            {{op[1].common_options.max_supply}}

                            {{$t('transaction.trxTypes.asset_create.description')}}
                            {{op[1].common_options.description}}

                            {{$t('transaction.trxTypes.asset_create.market_fee')}}
                            {{op[1].common_options.market_fee_percent}}%

                            {{$t('transaction.trxTypes.asset_create.maximum_market_fee')}}
                            {{op[1].common_options.max_market_fee}}

                            {{$t('transaction.trxTypes.asset_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_update')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_update_bitasset')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_update_feed_producers')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_issue.name')}}

                            {{$t('transaction.trxTypes.asset_issue.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.asset_issue.asset_to_issue')}}

                                {{formatted_number(op[1].asset_to_issue.asset_id, op[1].asset_to_issue.amount, 5)}}

                            {{$t('transaction.trxTypes.asset_issue.issue_to_account')}}

                                <router-link :to="{path: '/account/' + op[1].issue_to_account}">
                                    {{formatted_account(op[1].issue_to_account, 'issue_to_account')}}
                                </router-link>

                            {{$t('transaction.trxTypes.asset_issue.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_reserve')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_fund_fee_pool')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_settle')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_global_settle')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_publish_feed')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.witness_create')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.witness_update')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.proposal.proposal_create')}}

                            {{$t('transaction.trxTypes.proposal.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.proposal.fee_paying_account')}}

                                <router-link :to="{path: '/account/' + op[1].fee_paying_account}">
                                    {{formatted_account(op[1].fee_paying_account, 'fee_paying_account')}}
                                </router-link>

                            {{$t('transaction.trxTypes.proposal.expiration_time')}}
                            {{op[1].expiration_time}}

                                <Proposed_Op v-for="(operation,index) in op[1].proposed_ops[0]" :key="index" :id="index"
                                             :operation="operation"></Proposed_Op>

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.proposal.proposal_update')}}

                            {{$t('transaction.trxTypes.proposal.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.proposal.fee_paying_account')}}

                                <router-link :to="{path: '/account/' + op[1].fee_paying_account}">
                                    {{formatted_account(op[1].fee_paying_account, 'fee_paying_account')}}
                                </router-link>

0">
                            {{$t('transaction.trxTypes.proposal.update.active_approvals_to_add')}}

                  <router-link :to="{path: '/account/' + account}">{{account}}</router-link>

0">
                            {{$t('transaction.trxTypes.proposal.update.active_approvals_to_remove')}}

                  <router-link :to="{path: '/account/' + account}">{{account}}</router-link>

0">
                            {{$t('transaction.trxTypes.proposal.update.owner_approvals_to_add')}}

                  <router-link :to="{path: '/account/' + account}">{{account}}</router-link>

0">
                            {{$t('transaction.trxTypes.proposal.update.owner_approvals_to_remove')}}

                  <router-link :to="{path: '/account/' + account}">{{account}}</router-link>

0">
                            {{$t('transaction.trxTypes.proposal.update.key_approvals_to_add')}}

                  <router-link :to="{path: '/account/' + account}">{{account}}</router-link>

0">
                            {{$t('transaction.trxTypes.proposal.update.key_approvals_to_remove')}}

                  <router-link :to="{path: '/account/' + account}">{{account}}</router-link>

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.proposal.proposal_delete')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.withdraw_permission_create')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.withdraw_permission_update')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.withdraw_permission_claim')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.withdraw_permission_delete')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.committee_member_create')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.committee_member_update')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.committee_member_update_global_parameters')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.vesting_balance_create')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.vesting_balance_withdraw.name')}}

                            {{$t('transaction.trxTypes.vesting_balance_withdraw.owner')}}

                                <router-link :to="{path: '/account/' + op[1].owner}">
                                    {{formatted_account(op[1].owner, 'owner')}}
                                </router-link>

                            {{$t('transaction.trxTypes.vesting_balance_withdraw.amount')}}
                            {{formatted_number(op[1].amount.asset_id, op[1].amount.amount, 5)}}

                            {{$t('transaction.trxTypes.vesting_balance_withdraw.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.worker_create')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.custom')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.assert')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.balance_claim')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.override_transfer.name')}}

                            {{$t('transaction.trxTypes.override_transfer.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.override_transfer.from')}}

                                <router-link :to="{path: '/account/' + op[1].from}">
                                    {{formatted_account(op[1].from, 'from')}}
                                </router-link>

                            {{$t('transaction.trxTypes.override_transfer.to')}}

                                <router-link :to="{path: '/account/' + op[1].to}">
                                    {{formatted_account(op[1].to, 'to')}}
                                </router-link>

                            {{$t('transaction.trxTypes.override_transfer.amount')}}
                            {{formatted_number(op[1].amount.asset_id, op[1].amount.amount, 5)}}

                            {{$t('transaction.trxTypes.override_transfer.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.transfer_to_blind')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.blind_transfer')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.transfer_from_blind')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_settle_cancel')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.asset_claim_fees')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.fba_distribute')}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_upgrade_merchant.name')}}

                            {{$t('transaction.trxTypes.account_upgrade_merchant.auth_referrer')}}

                                <router-link :to="{path: '/account/' + op[1].auth_referrer}">
                                    {{formatted_account(op[1].auth_referrer, 'auth_referrer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_upgrade_merchant.account_to_upgrade')}}

                                <router-link :to="{path: '/account/' + op[1].account_to_upgrade}">
                                    {{formatted_account(op[1].account_to_upgrade, 'account_to_upgrade')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_upgrade_merchant.upgrade_to_merchant_member')}}
                            {{op[1].upgrade_to_merchant_member}}

                            {{$t('transaction.trxTypes.account_upgrade_merchant.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_upgrade_datasource.name')}}

                            {{$t('transaction.trxTypes.account_upgrade_datasource.auth_referrer')}}

                                <router-link :to="{path: '/account/' + op[1].auth_referrer}">
                                    {{formatted_account(op[1].auth_referrer, 'auth_referrer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_upgrade_datasource.account_to_upgrade')}}

                                <router-link :to="{path: '/account/' + op[1].account_to_upgrade}">
                                    {{formatted_account(op[1].account_to_upgrade, 'account_to_upgrade')}}
                                </router-link>

                            {{$t('transaction.trxTypes.account_upgrade_datasource.upgrade_to_datasource_member')}}

                            {{op[1].upgrade_to_datasource_member}}

                            {{$t('transaction.trxTypes.account_upgrade_datasource.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_market_category_create')}}

                            {{$t('transaction.trxTypes.data_market_category_create.category_name')}}
                            {{op[1].category_name}}

                            {{$t('transaction.trxTypes.data_market_category_create.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_market_category_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.data_market_category_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_market_category_update')}}

                            {{$t('transaction.trxTypes.data_market_category_update.category')}}
                            {{op[1].category}}

                            {{$t('transaction.trxTypes.data_market_category_update.new_category_name')}}
                            {{op[1].new_category_name}}

                            {{$t('transaction.trxTypes.data_market_category_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.data_market_category_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.free_data_product_create.name')}}

                            {{$t('transaction.trxTypes.free_data_product_create.product_name')}}
                            {{op[1].product_name}}

                            {{$t('transaction.trxTypes.free_data_product_create.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.free_data_product_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.free_data_product_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.free_data_product_update.name')}}

                            {{$t('transaction.trxTypes.free_data_product_update.free_data_product')}}
                            {{op[1].free_data_product}}

                            {{$t('transaction.trxTypes.free_data_product_update.new_product_name')}}
                            {{op[1].new_product_name}}

                            {{$t('transaction.trxTypes.free_data_product_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.free_data_product_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_data_product_create.name')}}

                            {{$t('transaction.trxTypes.league_data_product_create.product_name')}}
                            {{op[1].product_name}}

                            {{$t('transaction.trxTypes.league_data_product_create.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.league_data_product_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_data_product_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_data_product_update.name')}}

                            {{$t('transaction.trxTypes.league_data_product_update.league_data_product')}}
                            {{op[1].league_data_product}}

                            {{$t('transaction.trxTypes.league_data_product_update.new_product_name')}}
                            {{op[1].new_product_name}}

                            {{$t('transaction.trxTypes.league_data_product_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_data_product_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_create.name')}}

                            {{$t('transaction.trxTypes.league_create.league_name')}}
                            {{op[1].league_name}}

                            {{$t('transaction.trxTypes.league_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_update.name')}}

                            {{$t('transaction.trxTypes.league_update.league')}}
                            {{op[1].league}}

                            {{$t('transaction.trxTypes.league_update.new_league_name')}}
                            {{op[1].new_league_name}}

                            {{$t('transaction.trxTypes.league_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_transaction_create.name')}}

                            {{$t('transaction.trxTypes.data_transaction_create.request_id')}}
                            {{op[1].request_id}}

                            {{$t('transaction.trxTypes.data_transaction_create.product_id')}}
                            {{formatted_product(op[1].product_id, 'product_id')}}

                            {{$t('transaction.trxTypes.data_transaction_create.version')}}
                            {{op[1].version}}

                            {{$t('transaction.trxTypes.data_transaction_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.data_transaction_create.requester')}}

                                <router-link :to="{path: '/account/'+op[1].requester}">
                                    {{formatted_account(op[1].requester, 'requester')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_transaction_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_transaction_update.name')}}

                            {{$t('transaction.trxTypes.data_transaction_update.request_id')}}
                            {{op[1].request_id}}

                            {{$t('transaction.trxTypes.data_transaction_update.new_requester')}}

                                <router-link :to="{path: '/account/'+op[1].new_requester}">
                                    {{formatted_account(op[1].new_requester, 'new_requester')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_transaction_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trxTypes.data_transaction_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_transaction_pay.name')}}

                            {{$t('transaction.trxTypes.data_transaction_pay.request_id')}}
                            {{op[1].request_id}}

                            {{$t('transaction.trxTypes.data_transaction_pay.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.data_transaction_pay.from')}}

                                <router-link :to="{path: '/account/' + op[1].from}">
                                    {{formatted_account(op[1].from, 'from')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_transaction_pay.to')}}

                                <router-link :to="{path: '/account/' + op[1].to}">
                                    {{formatted_account(op[1].to, 'to')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_transaction_pay.amount')}}
                            {{formatted_number(op[1].amount.asset_id, op[1].amount.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.account_upgrade_data_transaction_member.name')}}

                                {{$t('transaction.trxTypes.account_upgrade_data_transaction_member.account_to_upgrade')}}

                                <router-link :to="{path: '/account/' + op[1].account_to_upgrade}">
                                    {{formatted_account(op[1].account_to_upgrade, 'account_to_upgrade')}}
                                </router-link>

                                {{$t('transaction.trxTypes.account_upgrade_data_transaction_member.upgrade_to_data_transaction_member')}}

                            {{op[1].upgrade_to_data_transaction_member}}

                            {{$t('transaction.trxTypes.account_upgrade_data_transaction_member.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_transaction_datasource_upload.name')}}

                            {{$t('transaction.trxTypes.data_transaction_datasource_upload.request_id')}}
                            {{op[1].request_id}}

                            {{$t('transaction.trxTypes.data_transaction_datasource_upload.requester')}}

                                <router-link :to="{path: '/account/' + op[1].requester}">
                                    {{formatted_account(op[1].requester, 'requester')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_transaction_datasource_upload.datasource')}}

                                <router-link :to="{path: '/account/' + op[1].datasource}">
                                    {{formatted_account(op[1].datasource, 'datasource')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_transaction_datasource_upload.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_transaction_datasource_validate_error.name')}}

                            {{$t('transaction.trxTypes.data_transaction_datasource_validate_error.request_id')}}

                            {{op[1].request_id}}

                            {{$t('transaction.trxTypes.data_transaction_datasource_validate_error.datasource')}}

                                <router-link :to="{path: '/account/' + op[1].datasource}">
                                    {{formatted_account(op[1].datasource, 'datasource')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_transaction_datasource_validate_error.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_market_category_create')}}

                            {{$t('transaction.trxTypes.data_market_category_create.category_name')}}
                            {{op[1].category_name}}

                            {{$t('transaction.trxTypes.data_market_category_create.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.data_market_category_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.data_market_category_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.data_market_category_update')}}

                            {{$t('transaction.trxTypes.data_market_category_update.category')}}
                            {{op[1].category}}

                            {{$t('transaction.trxTypes.data_market_category_update.new_category_name')}}
                            {{op[1].new_category_name}}

                            {{$t('transaction.trxTypes.data_market_category_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.data_market_category_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.free_data_product_create.name')}}

                            {{$t('transaction.trxTypes.free_data_product_create.product_name')}}
                            {{op[1].product_name}}

                            {{$t('transaction.trxTypes.free_data_product_create.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.free_data_product_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.free_data_product_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.free_data_product_update.name')}}

                            {{$t('transaction.trxTypes.free_data_product_update.free_data_product')}}
                            {{op[1].free_data_product}}

                            {{$t('transaction.trxTypes.free_data_product_update.new_product_name')}}
                            {{op[1].new_product_name}}

                            {{$t('transaction.trxTypes.free_data_product_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.free_data_product_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_data_product_create.name')}}

                            {{$t('transaction.trxTypes.league_data_product_create.product_name')}}
                            {{op[1].product_name}}

                            {{$t('transaction.trxTypes.league_data_product_create.issuer')}}

                                <router-link :to="{path: '/account/' + op[1].issuer}">
                                    {{formatted_account(op[1].issuer, 'issuer')}}
                                </router-link>

                            {{$t('transaction.trxTypes.league_data_product_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_data_product_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_data_product_update.name')}}

                            {{$t('transaction.trxTypes.league_data_product_update.league_data_product')}}
                            {{op[1].league_data_product}}

                            {{$t('transaction.trxTypes.league_data_product_update.new_product_name')}}
                            {{op[1].new_product_name}}

                            {{$t('transaction.trxTypes.league_data_product_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_data_product_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_create.name')}}

                            {{$t('transaction.trxTypes.league_create.league_name')}}
                            {{op[1].league_name}}

                            {{$t('transaction.trxTypes.league_create.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_create.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.league_update.name')}}

                            {{$t('transaction.trxTypes.league_update.league')}}
                            {{op[1].league}}

                            {{$t('transaction.trxTypes.league_update.new_league_name')}}
                            {{op[1].new_league_name}}

                            {{$t('transaction.trxTypes.league_update.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.league_update.new_status')}}
                            {{$t('transaction.trxTypes.status_states.' + op[1].new_status)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.balance_lock.name')}}

                            {{$t('transaction.trxTypes.balance_lock.create_date_time')}}
                            {{op[1].create_date_time}}

                            {{$t('transaction.trxTypes.balance_lock.program_id')}}
                            {{op[1].program_id}}{{$t('transaction.trxTypes.balance_lock.term')}}

                            {{$t('transaction.trxTypes.balance_lock.interest_rate')}}
                            {{op[1].interest_rate / 100}}%

                            {{$t('transaction.trxTypes.balance_lock.amount')}}
                            {{formatted_number(op[1].amount.asset_id, op[1].amount.amount, 5)}}

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.balance_unlock.name')}}

                            {{$t('transaction.trxTypes.balance_unlock.lock_id')}}
                            {{op[1].lock_id}}

                            {{$t('transaction.trxTypes.balance_unlock.account')}}

                                <router-link :to="{path: '/account/' + op[1].account}">
                                    {{formatted_account(op[1].account, 'account')}}
                                </router-link>

                            {{$t('transaction.trx_type')}}
                            {{$t('transaction.trxTypes.proxy_transfer.name')}}

                            {{$t('transaction.trxTypes.proxy_transfer.from')}}

                                <router-link :to="{path: '/account/' + op[1].request_params.from}">
                                    {{formatted_account(op[1].request_params.from, 'from')}}
                                </router-link>

                            {{$t('transaction.trxTypes.proxy_transfer.to')}}

                                <router-link :to="{path: '/account/' + op[1].request_params.to}">
                                    {{formatted_account(op[1].request_params.to, 'to')}}
                                </router-link>

                            {{$t('transaction.trxTypes.proxy_transfer.proxy_account')}}

                                <router-link :to="{path: '/account/' + op[1].request_params.proxy_account}">
                                    {{formatted_account(op[1].request_params.proxy_account, 'proxy_account')}}
                                </router-link>

                            {{$t('transaction.trxTypes.proxy_transfer.amount')}}
                            {{formatted_number(op[1].request_params.amount.asset_id,
                                op[1].request_params.amount.amount, 5)}}

                            {{$t('transaction.trxTypes.proxy_transfer.fee')}}
                            {{formatted_number(op[1].fee.asset_id, op[1].fee.amount, 5)}}

                            {{$t('transaction.trxTypes.proxy_transfer.memo')}}
                            {{op[1].request_params.memo}}

                            {{$t('transaction.trxTypes.proxy_transfer.proxy_memo')}}
                            <a
                                    :href="`/api/ipfs/${op[1].proxy_memo}`" target="_blank">{{op[1].proxy_memo}}

                            {{op[1].proxy_memo}}

</template>


Fixed tests

Fixed tests

<template>

{{ playlist.name || "Playlist" }}

					save
					<playlist-save
						v-if="saving"
						v-bind:tracks="playlist.tracks"
						v-bind:initialName="playlist.name"
						v-on:cancel="endSave"
						v-on:complete="endSave"
					/>

					delete

					shuffle

					Order:
					<select v-model="playbackOrder">
						<option value="default">Default</option>
						<option value="random">Random</option>
						<option value="repeat-track">Repeat Track</option>
						<option value="repeat-all">Repeat All</option>
					</select>

 0"
					v-bind:style="{ right: scrollbarWidth + 'px' }"
				>{{ formatPlaylistDuration(duration) }}

[-]

							play_arrow

						{{ formatTrackContext(track) }}

							{{ formatTrackDetails(track) }}
							({{ track.info.artist }})

						{{ formatTrackDuration(track) }}

				queue

Make a playlist by dragging music from your collection to here.

</template>


Use MultiPanelLayout

Use MultiPanelLayout

<template>

  <MultiPaneLayout ref="multiPaneLayout">
    <template #header>

        {{ learnString('recommendedLabel') }}

    </template>

    <template #aside>

        <KFixedGrid
          numCols="4"
          gutter="30"
        >
          <KFixedGridItem class="title">

Keywords

          </KFixedGridItem>
          <SearchBox />
          <KFixedGridItem class="title">

Categories

          </KFixedGridItem>
          <KFixedGridItem
            v-for="(value, category) in libraryCategoriesList"
            :key="category"
            span="4"
            class="category-list-item"
          >
            <KButton
              :text="value"
              appearance="flat-button"
              :appearanceOverrides="customCategoryStyles"
              iconAfter="chevronRight"
            />
          </KFixedGridItem>

          <KFixedGridItem class="title">

Activities

          </KFixedGridItem>
          <KFixedGridItem
            span="2"
            alignment="center"
          >
            <KButton
              appearance="flat-button"
              :appearanceOverrides="customActivityStyles"
            >
              <KIcon icon="allActivities" class="activity-icon" />

                {{ learnString('all') }}

            </KButton>
          </KFixedGridItem>
          <KFixedGridItem
            v-for="(value, activity) in learningActivitiesList"
            :key="activity"
            span="2"
            alignment="center"
          >
            <KButton
              appearance="flat-button"
              :appearanceOverrides="customActivityStyles"
            >
              <KIcon :icon="`${value + 'Shaded'}`" class="activity-icon" />

                {{ learnString(value) }}

            </KButton>
          </KFixedGridItem>
          <KFixedGridItem>
            <KSelect
              :options="languageOptionsList"
              class="selector"
              :value="selectedLanguage"
            />
          </KFixedGridItem>
          <KFixedGridItem>
            <KSelect
              :options="contentLevelsList"
              class="selector"
              :value="selectedLevel"
            />
          </KFixedGridItem>
          <KFixedGridItem>
            <KSelect
              :options="channelOptionsList"
              class="selector"
              :value="selectedChannel"
            />
          </KFixedGridItem>
          <KFixedGridItem>
            <KSelect
              :options="accessibilityOptionsList"
              class="selector"
              :value="selectedAccessibilityFilter"
            />
          </KFixedGridItem>
          <KFixedGridItem
            v-for="(value, activity) in resourcesNeededList"
            :key="activity"
            span="4"
            alignment="center"
          >
            <KCheckbox
              key="adHocLearners"
              :checked="isSelected"
              :label="value"
              @change="$emit('toggleSelected', $event)"
            />
          </KFixedGridItem>
        </KFixedGrid>

    </template>

    <template #main>
      <template v-if="popular.length">
        <ContentCardGroupHeader
          :header="learnString('mostPopularLabel')"
          :viewMorePageLink="popularPageLink"
          :showViewMore="popular.length > trimmedPopular.length"
        />
        <ContentCardGroupGrid
          v-if="windowIsSmall"
          :genContentLink="genContentLink"
          :contents="trimmedPopular"
        />
        <ContentCardGroupCarousel
          v-else
          :genContentLink="genContentLink"
          :contents="trimmedPopular"
        />
      </template>

      <template v-if="nextSteps.length">
        <ContentCardGroupHeader
          :header="learnString('nextStepsLabel')"
          :viewMorePageLink="nextStepsPageLink"
          :showViewMore="nextSteps.length > trimmedNextSteps.length"
        />
        <ContentCardGroupGrid
          v-if="windowIsSmall"
          :genContentLink="genContentLink"
          :contents="trimmedNextSteps"
        />
        <ContentCardGroupCarousel
          v-else
          :genContentLink="genContentLink"
          :contents="trimmedNextSteps"
        />
      </template>

      <template v-if="resume.length">
        <ContentCardGroupHeader
          :header="learnString('resumeLabel')"
          :viewMorePageLink="resumePageLink"
          :showViewMore="resume.length > trimmedResume.length"
        />
        <ContentCardGroupGrid
          v-if="windowIsSmall"
          :genContentLink="genContentLink"
          :contents="trimmedResume"
        />
        <ContentCardGroupCarousel
          v-else
          :genContentLink="genContentLink"
          :contents="trimmedResume"
        />
      </template>

    </template>
  </MultiPaneLayout>

</template>

<template>

      {{ learnString('recommendedLabel') }}

    <KGrid>
      <KGridItem :layout12="{ span: 3 }">

          <KFixedGrid
            numCols="4"
            gutter="30"
          >
            <KFixedGridItem class="title">

Keywords

            </KFixedGridItem>
            <SearchBox />
            <KFixedGridItem class="title">

Categories

            </KFixedGridItem>
            <KFixedGridItem
              v-for="(value, category) in libraryCategoriesList"
              :key="category"
              span="4"
              class="category-list-item"
            >
              <KButton
                :text="value"
                appearance="flat-button"
                :appearanceOverrides="customCategoryStyles"
                iconAfter="chevronRight"
              />
            </KFixedGridItem>

            <KFixedGridItem class="title">

Activities

            </KFixedGridItem>
            <KFixedGridItem
              span="2"
              alignment="center"
            >
              <KButton
                appearance="flat-button"
                :appearanceOverrides="customActivityStyles"
              >
                <KIcon icon="allActivities" class="activity-icon" />

                  {{ learnString('all') }}

              </KButton>
            </KFixedGridItem>
            <KFixedGridItem
              v-for="(value, activity) in learningActivitiesList"
              :key="activity"
              span="2"
              alignment="center"
            >
              <KButton
                appearance="flat-button"
                :appearanceOverrides="customActivityStyles"
              >
                <KIcon :icon="`${value + 'Shaded'}`" class="activity-icon" />

                  {{ learnString(value) }}

              </KButton>
            </KFixedGridItem>
            <KFixedGridItem>
              <KSelect
                :options="languageOptionsList"
                class="selector"
                :value="selectedLanguage"
              />
            </KFixedGridItem>
            <KFixedGridItem>
              <KSelect
                :options="contentLevelsList"
                class="selector"
                :value="selectedLevel"
              />
            </KFixedGridItem>
            <KFixedGridItem>
              <KSelect
                :options="channelOptionsList"
                class="selector"
                :value="selectedChannel"
              />
            </KFixedGridItem>
            <KFixedGridItem>
              <KSelect
                :options="accessibilityOptionsList"
                class="selector"
                :value="selectedAccessibilityFilter"
              />
            </KFixedGridItem>
            <KFixedGridItem
              v-for="(value, activity) in resourcesNeededList"
              :key="activity"
              span="4"
              alignment="center"
            >
              <KCheckbox
                key="adHocLearners"
                :checked="isSelected"
                :label="value"
                @change="$emit('toggleSelected', $event)"
              />
            </KFixedGridItem>
          </KFixedGrid>

      </KGridItem>
      <KGridItem
        :layout12="{ span: 9 }"
      >
        <template v-if="popular.length">
          <ContentCardGroupHeader
            :header="learnString('mostPopularLabel')"
            :viewMorePageLink="popularPageLink"
            :showViewMore="popular.length > trimmedPopular.length"
          />
          <ContentCardGroupGrid
            v-if="windowIsSmall"
            :genContentLink="genContentLink"
            :contents="trimmedPopular"
          />
          <ContentCardGroupCarousel
            v-else
            :genContentLink="genContentLink"
            :contents="trimmedPopular"
          />
        </template>

        <template v-if="nextSteps.length">
          <ContentCardGroupHeader
            :header="learnString('nextStepsLabel')"
            :viewMorePageLink="nextStepsPageLink"
            :showViewMore="nextSteps.length > trimmedNextSteps.length"
          />
          <ContentCardGroupGrid
            v-if="windowIsSmall"
            :genContentLink="genContentLink"
            :contents="trimmedNextSteps"
          />
          <ContentCardGroupCarousel
            v-else
            :genContentLink="genContentLink"
            :contents="trimmedNextSteps"
          />
        </template>

        <template v-if="resume.length">
          <ContentCardGroupHeader
            :header="learnString('resumeLabel')"
            :viewMorePageLink="resumePageLink"
            :showViewMore="resume.length > trimmedResume.length"
          />
          <ContentCardGroupGrid
            v-if="windowIsSmall"
            :genContentLink="genContentLink"
            :contents="trimmedResume"
          />
          <ContentCardGroupCarousel
            v-else
            :genContentLink="genContentLink"
            :contents="trimmedResume"
          />
        </template>
      </KGridItem>
    </KGrid>

</template>


Make a copy of interaction_history, rather than just copying a reference.

<template>

  <immersive-full-screen
    v-if="exam"
    :backPageLink="backPageLink"
    :backPageText="$tr('backToExamList')"
  >
    <multi-pane-layout ref="multiPaneLayout">

        <mat-svg class="exam-icon" slot="content-icon" category="action" name="assignment_late" />

{{ exam.title }}

            {{
              $tr(
                'questionsAnswered',
                { numAnswered: questionsAnswered, numTotal: exam.question_count }
              )
            }}

          <k-button @click="toggleModal" :text="$tr('submitExam')" :primary="true" />

      <answer-history
        slot="aside"
        :questionNumber="questionNumber"
        @goToQuestion="goToQuestion"
      />

        <content-renderer
          ref="contentRenderer"
          v-if="itemId"
          :id="content.id"
          :kind="content.kind"
          :files="content.files"
          :contentId="content.content_id"
          :channelId="channelId"
          :available="content.available"
          :extraFields="content.extra_fields"
          :itemId="itemId"
          :assessment="true"
          :allowHints="false"
          :answerState="currentAttempt.answer"
          @interaction="saveAnswer"
        />
        <ui-alert v-else :dismissible="false" type="error">
          {{ $tr('noItemId') }}
        </ui-alert>

        <k-button
          :disabled="questionNumber===0"
          @click="goToQuestion(questionNumber - 1)"
          :text="$tr('previousQuestion')"
        />
        <k-button
          :disabled="questionNumber===exam.question_count-1"
          @click="goToQuestion(questionNumber + 1)"
          :text="$tr('nextQuestion')"
        />

    </multi-pane-layout>

    <core-modal
      v-if="submitModalOpen"
      :title="$tr('submitExam')"
      @cancel="toggleModal"
    >

{{ $tr('areYouSure') }}

        {{ $tr('unanswered', { numLeft: questionsUnanswered } ) }}

        <k-button
          :text="$tr('goBack')"
          appearance="flat-button"
          @click="toggleModal"
        />
        <k-button
          :text="$tr('submitExam')"
          @click="finishExam"
          :primary="true"
        />

    </core-modal>
  </immersive-full-screen>

</template>


devop: format token balances

devop: format token balances

<template>

    <v-skeleton-loader
      v-if="loading && tokensData"
      class="mx-auto"
      type="table"
    />
    <mew-module
      v-if="!loading && tokensData.length > 0"
      subtitle="My Tokens Value"
      :has-body-padding="false"
      :title="`$ ${totalTokensValue}`"
      :icon="require('@/assets/images/icons/icon-token-grey.png')"
      icon-align="left"
    >

      <template #moduleBody>

          <mew-table
            :has-color="false"
            :table-headers="tableHeaders"
            :table-data="tokensData"
          />

      </template>
    </mew-module>

    <balance-empty-block
      v-if="!loading && tokensData.length === 0"
      is-tokens
      :is-eth="isEthNetwork"
    />

</template>


Add more space for timeline item contents on small displays

<template>
  <v-card
    color="grey lighten-4"
    light
  >
    <v-card-text>

        <template slot="actions">

            <v-switch
              v-model="detailed"
              :label="detailed ? 'Detailed' : 'Summary'"
            />

        </template>

        <v-timeline
          dense
        >
          <v-timeline-item
            v-for="(item, i) in orderedItems"
            :key="i"
            :icon="item.icon ? item.icon : ''"
            :class="{transparent: item.transparent}"
            large
          >

            <template
              v-if="item.iconImage"
              v-slot:icon
            >
              <v-avatar>

              </v-avatar>
            </template>
            <template v-slot:opposite />
            <v-layout>
              <v-flex
                v-if="$vuetify.breakpoint.smAndUp"
                md1
                sm2
                align-self-center
              >
                {{ item.year }}
              </v-flex>
              <v-flex
                md11
                sm10
                xs12
              >
                <v-card class="elevation-1">
                  <v-card-title class="pb-0">

                        {{ item.year }}

{{ item.title }}

                  </v-card-title>
                  <v-card-text>
                    <v-layout wrap>
                      <v-flex
                        :md7="!!item.image"
                        :md12="!item.image"
                        xs12
                      >
                        {{ item.text }}

                      </v-flex>
                      <v-flex
                        v-if="item.image"
                        md5
                        xs12
                      >

                          <v-carousel
                            v-if="Array.isArray(item.image)"
                            :show-arrows="false"
                            :height="325"
                          >
                            <v-carousel-item
                              v-for="(citem,ci) in item.image"
                              :key="ci"
                              :src="publicPath(citem)"
                            />
                          </v-carousel>
                          <v-img
                            v-else
                            :max-height="item.imageHeight ? item.imageHeight : ''"
                            :src="publicPath(item.image)"
                          />

                      </v-flex>
                    </v-layout>
                  </v-card-text>
                </v-card>
              </v-flex>
            </v-layout>
          </v-timeline-item>
        </v-timeline>

    </v-card-text>
  </v-card>
</template>

<template>
  <v-card
    color="grey lighten-4"
    light
  >
    <v-card-text>

        <template slot="actions">

            <v-switch
              v-model="detailed"
              :label="detailed ? 'Detailed' : 'Summary'"
            />

        </template>

        <v-timeline
          dense
        >
          <v-timeline-item
            v-for="(item, i) in orderedItems"
            :key="i"
            :icon="item.icon ? item.icon : ''"
            :class="{transparent: item.transparent}"
            large
          >

            <template
              v-if="item.iconImage"
              v-slot:icon
            >
              <v-avatar>

              </v-avatar>
            </template>
            <template v-slot:opposite />
            <v-layout>
              <v-flex
                md1
                xs3
                align-self-center
              >
                {{ item.year }}
              </v-flex>
              <v-flex
                md11
                xs9
              >
                <v-card class="elevation-1">
                  <v-card-title class="pb-0">

{{ item.title }}

                  </v-card-title>
                  <v-card-text>
                    <v-layout wrap>
                      <v-flex
                        :md7="!!item.image"
                        :md12="!item.image"
                        xs12
                      >
                        {{ item.text }}

                      </v-flex>
                      <v-flex
                        v-if="item.image"
                        md5
                        xs12
                      >

                          <v-carousel
                            v-if="Array.isArray(item.image)"
                            :show-arrows="false"
                            :height="325"
                          >
                            <v-carousel-item
                              v-for="(citem,ci) in item.image"
                              :key="ci"
                              :src="publicPath(citem)"
                            />
                          </v-carousel>
                          <v-img
                            v-else
                            :max-height="item.imageHeight ? item.imageHeight : ''"
                            :src="publicPath(item.image)"
                          />

                      </v-flex>
                    </v-layout>
                  </v-card-text>
                </v-card>
              </v-flex>
            </v-layout>
          </v-timeline-item>
        </v-timeline>

    </v-card-text>
  </v-card>
</template>


fix banner form not sending action

fix banner form not sending action

remp/remp#213

<template>

            <html-template v-if="template === 'html'"
                v-bind:_backgroundColor="htmlTemplate.backgroundColor"
                v-bind:_text="htmlTemplate.text"
                v-bind:_css="htmlTemplate.css"
                v-bind:_textColor="htmlTemplate.textColor"
                v-bind:_fontSize="htmlTemplate.fontSize"
                v-bind:_textAlign="htmlTemplate.textAlign"
                v-bind:_dimensions="htmlTemplate.dimensions"
                v-bind:alignmentOptions="alignmentOptions"
                v-bind:dimensionOptions="dimensionOptions"
                v-bind:show="show"
            >

            <medium-rectangle-template v-if="template === 'medium_rectangle'"
               v-bind:_headerText="mediumRectangleTemplate.headerText"
               v-bind:_mainText="mediumRectangleTemplate.mainText"
               v-bind:_buttonText="mediumRectangleTemplate.buttonText"
               v-bind:_width="mediumRectangleTemplate.height"
               v-bind:_height="mediumRectangleTemplate.width"
               v-bind:_backgroundColor="mediumRectangleTemplate.backgroundColor"
               v-bind:_textColor="mediumRectangleTemplate.textColor"
               v-bind:_buttonBackgroundColor="mediumRectangleTemplate.buttonBackgroundColor"
               v-bind:_buttonTextColor="mediumRectangleTemplate.buttonTextColor"
               v-bind:show="show"
            ></medium-rectangle-template>

            <bar-template v-if="template === 'bar'"
               v-bind:_mainText="barTemplate.mainText"
               v-bind:_buttonText="barTemplate.buttonText"
               v-bind:_backgroundColor="barTemplate.backgroundColor"
               v-bind:_textColor="barTemplate.textColor"
               v-bind:_buttonBackgroundColor="barTemplate.buttonBackgroundColor"
               v-bind:_buttonTextColor="barTemplate.buttonTextColor"
               v-bind:show="show"
            ></bar-template>

            <short-message-template v-if="template === 'short_message'"
              v-bind:_text="shortMessageTemplate.text"
              v-bind:_backgroundColor="shortMessageTemplate.backgroundColor"
              v-bind:_textColor="shortMessageTemplate.textColor"
              v-bind:show="show"
            ></short-message-template>

                    Settings

                                    Name
                                    <input v-model="name" class="form-control fg-input" name="name" id="name" type="text">

                                            Transition

                                            <v-select v-model="transition"
                                                    id="transition"
                                                    :name="'transition'"
                                                    :value="transition"
                                                    :options.sync="transitionOptions"
                                            ></v-select>

                                    Target URL
                                    <input v-model="targetUrl" class="form-control fg-input" name="target_url" type="text" id="target_url">

                    Overlay Banner

                    Inline Banner

                                            Position

                                            <select v-model.lazy="position" class="selectpicker" name="position" id="position">
                                                <option v-for="option in positionOptions" v-bind:value="option.key">
                                                    {{ option.name }}
                                                </option>
                                            </select>

                                    Hortizontal offset (px)
                                    <input v-model="offsetHorizontal" class="form-control fg-input" name="offset_horizontal" type="number" id="offsetHorizontal">

                                    Vertical offset (px)
                                    <input v-model="offsetVertical" class="form-control fg-input" name="offset_vertical" type="number" id="offsetVertical">

                                    Display delay (milliseconds)
                                    <input v-model="displayDelay" class="form-control fg-input" name="display_delay" type="number" id="display_delay">

                                    Automatic close after (milliseconds)
                                    <input v-model="closeTimeout" class="form-control fg-input" name="close_timeout" type="number" id="automatic_close">

                                    Ability to close banner manually
                                    <input v-model="closeable" value="1" name="closeable" type="checkbox">

                                    Close Text
                                    <input v-model="closeText" class="form-control fg-input" name="close_text" type="text" id="close_text">

                                    Target element selector
                                    <input v-model="targetSelector" class="form-control fg-input" name="target_selector" type="text" id="target_selector">

                                    Ability to close banner manually
                                    <input v-model="closeable" value="1" name="closeable" type="checkbox">

                    <input type="hidden" name="action" :value="submitAction">

                    <button class="btn btn-info waves-effect" type="submit" name="action" value="save" @click="submitAction = 'save'">
                         Save
                    </button>
                    <button class="btn btn-info waves-effect" type="submit" name="action" value="save_close" @click="submitAction = 'save_close'">
                         Save and close
                    </button>

                    Preview

                    <button type="button" class="btn btn-default" v-on:click="show = !show">Toggle banner</button>

                                <banner-preview
                                        :alignmentOptions="alignmentOptions"
                                        :dimensionOptions="dimensionOptions"
                                        :positionOptions="positionOptions"
                                        :show="show"
                                        :template="template"

                                        :mediumRectangleTemplate="mediumRectangleTemplate"
                                        :barTemplate="barTemplate"
                                        :htmlTemplate="htmlTemplate"
                                        :shortMessageTemplate="shortMessageTemplate"

                                        :position="position"
                                        :offsetVertical="offsetVertical"
                                        :offsetHorizontal="offsetHorizontal"
                                        :targetUrl="targetUrl"
                                        :closeable="closeable"
                                        :closeText="closeText"
                                        :transition="transition"
                                        :displayType="displayType"
                                        :forcedPosition="'absolute'"
                                ></banner-preview>

        <input type="hidden" name="display_type" v-bind:value="displayType" />

        <form-validator :url="validateUrl"></form-validator>

</template>

<template>

            <html-template v-if="template === 'html'"
                v-bind:_backgroundColor="htmlTemplate.backgroundColor"
                v-bind:_text="htmlTemplate.text"
                v-bind:_css="htmlTemplate.css"
                v-bind:_textColor="htmlTemplate.textColor"
                v-bind:_fontSize="htmlTemplate.fontSize"
                v-bind:_textAlign="htmlTemplate.textAlign"
                v-bind:_dimensions="htmlTemplate.dimensions"
                v-bind:alignmentOptions="alignmentOptions"
                v-bind:dimensionOptions="dimensionOptions"
                v-bind:show="show"
            >

            <medium-rectangle-template v-if="template === 'medium_rectangle'"
               v-bind:_headerText="mediumRectangleTemplate.headerText"
               v-bind:_mainText="mediumRectangleTemplate.mainText"
               v-bind:_buttonText="mediumRectangleTemplate.buttonText"
               v-bind:_width="mediumRectangleTemplate.height"
               v-bind:_height="mediumRectangleTemplate.width"
               v-bind:_backgroundColor="mediumRectangleTemplate.backgroundColor"
               v-bind:_textColor="mediumRectangleTemplate.textColor"
               v-bind:_buttonBackgroundColor="mediumRectangleTemplate.buttonBackgroundColor"
               v-bind:_buttonTextColor="mediumRectangleTemplate.buttonTextColor"
               v-bind:show="show"
            ></medium-rectangle-template>

            <bar-template v-if="template === 'bar'"
               v-bind:_mainText="barTemplate.mainText"
               v-bind:_buttonText="barTemplate.buttonText"
               v-bind:_backgroundColor="barTemplate.backgroundColor"
               v-bind:_textColor="barTemplate.textColor"
               v-bind:_buttonBackgroundColor="barTemplate.buttonBackgroundColor"
               v-bind:_buttonTextColor="barTemplate.buttonTextColor"
               v-bind:show="show"
            ></bar-template>

            <short-message-template v-if="template === 'short_message'"
              v-bind:_text="shortMessageTemplate.text"
              v-bind:_backgroundColor="shortMessageTemplate.backgroundColor"
              v-bind:_textColor="shortMessageTemplate.textColor"
              v-bind:show="show"
            ></short-message-template>

                    Settings

                                    Name
                                    <input v-model="name" class="form-control fg-input" name="name" id="name" type="text">

                                            Transition

                                            <v-select v-model="transition"
                                                    id="transition"
                                                    :name="'transition'"
                                                    :value="transition"
                                                    :options.sync="transitionOptions"
                                            ></v-select>

                                    Target URL
                                    <input v-model="targetUrl" class="form-control fg-input" name="target_url" type="text" id="target_url">

                    Overlay Banner

                    Inline Banner

                                            Position

                                            <select v-model.lazy="position" class="selectpicker" name="position" id="position">
                                                <option v-for="option in positionOptions" v-bind:value="option.key">
                                                    {{ option.name }}
                                                </option>
                                            </select>

                                    Hortizontal offset (px)
                                    <input v-model="offsetHorizontal" class="form-control fg-input" name="offset_horizontal" type="number" id="offsetHorizontal">

                                    Vertical offset (px)
                                    <input v-model="offsetVertical" class="form-control fg-input" name="offset_vertical" type="number" id="offsetVertical">

                                    Display delay (milliseconds)
                                    <input v-model="displayDelay" class="form-control fg-input" name="display_delay" type="number" id="display_delay">

                                    Automatic close after (milliseconds)
                                    <input v-model="closeTimeout" class="form-control fg-input" name="close_timeout" type="number" id="automatic_close">

                                    Ability to close banner manually
                                    <input v-model="closeable" value="1" name="closeable" type="checkbox">

                                    Close Text
                                    <input v-model="closeText" class="form-control fg-input" name="close_text" type="text" id="close_text">

                                    Target element selector
                                    <input v-model="targetSelector" class="form-control fg-input" name="target_selector" type="text" id="target_selector">

                                    Ability to close banner manually
                                    <input v-model="closeable" value="1" name="closeable" type="checkbox">

                    <button class="btn btn-info waves-effect" type="submit" name="action" value="save">
                         Save
                    </button>
                    <button class="btn btn-info waves-effect" type="submit" name="action" value="save_close">
                         Save and close
                    </button>

                    Preview

                    <button type="button" class="btn btn-default" v-on:click="show = !show">Toggle banner</button>

                                <banner-preview
                                        :alignmentOptions="alignmentOptions"
                                        :dimensionOptions="dimensionOptions"
                                        :positionOptions="positionOptions"
                                        :show="show"
                                        :template="template"

                                        :mediumRectangleTemplate="mediumRectangleTemplate"
                                        :barTemplate="barTemplate"
                                        :htmlTemplate="htmlTemplate"
                                        :shortMessageTemplate="shortMessageTemplate"

                                        :position="position"
                                        :offsetVertical="offsetVertical"
                                        :offsetHorizontal="offsetHorizontal"
                                        :targetUrl="targetUrl"
                                        :closeable="closeable"
                                        :closeText="closeText"
                                        :transition="transition"
                                        :displayType="displayType"
                                        :forcedPosition="'absolute'"
                                ></banner-preview>

        <input type="hidden" name="display_type" v-bind:value="displayType" />

        <form-validator :url="validateUrl"></form-validator>

</template>


Added comments

Added comments

<template>

            {{ time.format('ha') }}

            {{ time.format('h:mma') }}

        <div v-for="day in daySlots" :key="day"
             :aria-labelledby="`${day}-${period.id}`"
             role="group"
             class="day-column"
        >

            <div :id="`${day}-${period.id}`">
              {{ days[day] }}

                {{ getFirstFinalExamTimeOn(day).format('MMM D') }}

 0
            )" class="d-flex"
            >
              <uw-course-section
                v-for="(meetingData, j) in
                  meetingMap[day][formatToUnique(time)]"
                :key="j" :meeting-data="meetingData"
                :is-finals-card="isFinalsTab"
              />

 0
            )" class="d-flex"
            >
              <uw-course-section
                v-for="(meetingData, j) in
                  meetingMap[mobile['current']][formatToUnique(time)]"
                :key="j" :meeting-data="meetingData"
                :is-finals-card="isFinalsTab"
              />

 0">

        No meeting time specified:

        Courses with final exam meeting times to be determined or courses with
        no final exam:

        <uw-course-section :meeting-data="meeting" />

</template>


Redoing undo functionality, allows quick page not to result in odd numbers on load.

<template>

  <core-table>

          {{ $tr('resourceReorderColumnHeaderForTable') }}

          {{ $tr('nameColumnHeaderForTable') }}

          {{ $tr('resourceProgressColumnHeaderForTable') }}

          {{ $tr('resourceRemovalColumnHeaderForTable') }}

    <transition-group
      name="resource-reorder"
      slot="tbody"
      tag="tbody"
    >

          <ui-icon-button
            type="flat"
            icon="keyboard_arrow_up"
            :ariaLabel="$tr('moveResourceUpButtonDescription')"
            :disabled="index === 0"
            @click="moveUpOne(index)"
            class="position-adjustment-button"
          />
          <ui-icon-button
            type="flat"
            icon="keyboard_arrow_down"
            :ariaLabel="$tr('moveResourceDownButtonDescription')"
            :disabled="index === (workingResources.length - 1)"
            @click="moveDownOne(index)"
            class="position-adjustment-button"
          />

          <content-icon :kind="resourceKind(resourceId)" />

          <k-router-link
            :to="resourceUserSummaryLink(resourceId)"
            :text="resourceTitle(resourceId)"
          />

            <dfn class="visuallyhidden"> {$tr('parentChannelLabel')} </dfn>
            {{ resourceChannelTitle(resourceId) }}

          <progress-bar
            v-if="resourceProgress(resourceId)!==null"
            class="resource-progress-bar"
            :progress="resourceProgress(resourceId)"
            :showPercentage="false"
          />

            {{ resourceProgressMessage(resourceId) }}

          <k-button
            :text="$tr('resourceRemovalButtonLabel')"
            @click="stageRemoval(resourceId)"
            appearance="flat-button"
          />

    </transition-group>
  </core-table>

</template>

<template>

  <core-table>

          {{ $tr('resourceReorderColumnHeaderForTable') }}

          {{ $tr('nameColumnHeaderForTable') }}

          {{ $tr('resourceProgressColumnHeaderForTable') }}

          {{ $tr('resourceRemovalColumnHeaderForTable') }}

    <transition-group
      name="resource-reorder"
      slot="tbody"
      tag="tbody"
    >

          <ui-icon-button
            type="flat"
            icon="keyboard_arrow_up"
            :ariaLabel="$tr('moveResourceUpButtonDescription')"
            :disabled="index === 0"
            @click="moveUpOne(index)"
            class="position-adjustment-button"
          />
          <ui-icon-button
            type="flat"
            icon="keyboard_arrow_down"
            :ariaLabel="$tr('moveResourceDownButtonDescription')"
            :disabled="index === (workingResources.length - 1)"
            @click="moveDownOne(index)"
            class="position-adjustment-button"
          />

          <content-icon :kind="resourceKind(resourceId)" />

          <k-router-link
            :to="resourceUserSummaryLink(resourceId)"
            :text="resourceTitle(resourceId)"
          />

            <dfn class="visuallyhidden"> {$tr('parentChannelLabel')} </dfn>
            {{ resourceChannelTitle(resourceId) }}

          <progress-bar
            v-if="resourceProgress(resourceId)!==null"
            class="resource-progress-bar"
            :progress="resourceProgress(resourceId)"
            :showPercentage="false"
          />

            {{ resourceProgressMessage(resourceId) }}

          <k-button
            :text="$tr('resourceRemovalButtonLabel')"
            @click="stageRemoval(index, resourceId)"
            appearance="flat-button"
          />

    </transition-group>
  </core-table>

</template>


Add open new page footer links dashboard

<template>

            {{ $t(`Footer.HelpCenter.title`) }}

{{ $t(`Footer.HelpCenter.description`) }}

            {{ $t(`Footer.DeveloperCenter.title`) }}

{{ $t(`Footer.DeveloperCenter.description`) }}

            {{ $t(`Footer.GISStackExchange.title`) }}

{{ $t(`Footer.GISStackExchange.description`) }}

            {{ $t(`Footer.TechSupport.title`) }}

{{ $t(`Footer.TechSupport.description`) }}

            {{ $t(`Footer.DedicatedSupport.title`) }}

{{ $t(`Footer.DedicatedSupport.description`) }}

            {{ $t(`Footer.DedicatedSupport.title`) }}

{{ $t(`Footer.DedicatedSupport.description`) }}

        <a :href="`mailto:${organizationMail}`" class="footer-link" v-if="isOrganizationUser && !isOrganizationOwner">

            {{ $t(`Footer.OrganizationAdmin.title`) }}

{{ $t(`Footer.OrganizationAdmin.description`) }}

</template>


Fix value when duplicating shared dataset in dashboard

<template>
  <QuickActions
    :actions="actions[actionMode]"
    v-on="getEventListeners()"
    ref="quickActions"
    @open="openQuickactions"
    @close="closeQuickactions" />
</template>

<script>
import * as Table from 'new-dashboard/core/models/table';
import QuickActions from 'new-dashboard/components/QuickActions/QuickActions';
import * as DialogActions from 'new-dashboard/core/dialog-actions';

export default {
  name: 'DatasetQuickActions',
  inject: ['backboneViews'],
  components: {
    QuickActions
  },
  props: {
    dataset: Object,
    storeActionType: {
      type: String,
      default: 'datasets'
    },
    isShared: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    actions () {
      return {
        mine: [
          { name: this.$t('QuickActions.createMap'), event: 'createMap' },
          { name: this.$t('QuickActions.editInfo'), event: 'editInfo' },
          { name: this.$t('QuickActions.manageTags'), event: 'manageTags' },
          { name: this.$t('QuickActions.changePrivacy'), event: 'changePrivacy' },
          { name: this.$t('QuickActions.share'), event: 'shareVisualization', shouldBeHidden: !this.isUserInsideOrganization },
          { name: this.$t('QuickActions.duplicate'), event: 'duplicateDataset' },
          { name: this.$t('QuickActions.lock'), event: 'lockDataset' },
          { name: this.$t('QuickActions.delete'), event: 'deleteDataset', isDestructive: true }
        ],
        shared: [
          { name: this.$t('QuickActions.createMap'), event: 'createMap' },
          { name: this.$t('QuickActions.duplicate'), event: 'duplicateDataset' }
        ],
        locked: [
          { name: this.$t('QuickActions.duplicate'), event: 'duplicateDataset' },
          { name: this.$t('QuickActions.unlock'), event: 'unlockDataset' }
        ]
      };
    },
    actionMode () {
      if (this.dataset.locked) {
        return 'locked';
      }
      if (this.isShared) {
        return 'shared';
      }
      return 'mine';
    },
    isUserInsideOrganization () {
      const userOrganization = this.$store.state.user.organization;
      return userOrganization && userOrganization.id;
    }
  },
  methods: {
    getActionHandlers () {
      return {
        deselectAll: () => {},
        fetchList: () => {
          this.$store.dispatch(`${this.storeActionType}/fetch`);
          this.$emit('contentChanged', 'datasets');
        },
        updateVisualization: (model) => {
          this.$store.dispatch(`${this.storeActionType}/updateVisualization`, { visualizationId: model.get('id'), visualizationAttributes: model.attributes });
        }
      };
    },
    getEventListeners () {
      const events = this.actions[this.actionMode].map(action => action.event);

      return events.reduce(
        (eventListeners, action) => {
          eventListeners[action] = this[action].bind(this);
          return eventListeners;
        }, {}
      );
    },
    showModal (componentDefinition, componentPropsData) {
      this.$modal.show(
        componentDefinition,
        componentPropsData,
        { width: '100%', height: '100%' }
      );
    },
    openQuickactions () {
      this.$emit('open');
    },
    closeQuickactions () {
      this.$emit('close');
    },
    closeDropdown () {
      this.$refs.quickActions.closeDropdown();
    },
    editInfo () {
      DialogActions.editDatasetMetadata.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    },
    createMap () {
      DialogActions.createMap.apply(this, [
        [this.dataset],
        this.backboneViews.backgroundPollingView.getBackgroundPollingView(),
        this.backboneViews.mamufasImportView.getView()
      ]);
    },
    changePrivacy () {
      DialogActions.changePrivacy.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    },
    manageTags () {
      DialogActions.editDatasetMetadata.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    },
    duplicateDataset () {
      const bgPollingView = this.backboneViews.backgroundPollingView.getBackgroundPollingView();

      bgPollingView._addDataset({
        type: 'duplication',
        table_name: `${Table.getUnqualifiedName(this.dataset.name)}_copy`,
        value: `${this.dataset.permission.owner.username}.${this.dataset.name}`,
        create_vis: false
      });
      this.closeDropdown();
    },
    unlockDataset () {
      DialogActions.changeLockState.apply(this, [this.dataset, 'datasets', this.getActionHandlers()]);
      this.closeDropdown();
    },
    lockDataset () {
      DialogActions.changeLockState.apply(this, [this.dataset, 'datasets', this.getActionHandlers()]);
      this.closeDropdown();
    },
    deleteDataset () {
      DialogActions.deleteVisualization.apply(this, [this.dataset, 'datasets', this.getActionHandlers()]);
      this.closeDropdown();
    },
    shareVisualization () {
      DialogActions.shareVisualization.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    }
  }
};
</script>

<template>
  <QuickActions
    :actions="actions[actionMode]"
    v-on="getEventListeners()"
    ref="quickActions"
    @open="openQuickactions"
    @close="closeQuickactions" />
</template>

<script>
import * as Table from 'new-dashboard/core/models/table';
import QuickActions from 'new-dashboard/components/QuickActions/QuickActions';
import * as DialogActions from 'new-dashboard/core/dialog-actions';

export default {
  name: 'DatasetQuickActions',
  inject: ['backboneViews'],
  components: {
    QuickActions
  },
  props: {
    dataset: Object,
    storeActionType: {
      type: String,
      default: 'datasets'
    },
    isShared: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    actions () {
      return {
        mine: [
          { name: this.$t('QuickActions.createMap'), event: 'createMap' },
          { name: this.$t('QuickActions.editInfo'), event: 'editInfo' },
          { name: this.$t('QuickActions.manageTags'), event: 'manageTags' },
          { name: this.$t('QuickActions.changePrivacy'), event: 'changePrivacy' },
          { name: this.$t('QuickActions.share'), event: 'shareVisualization', shouldBeHidden: !this.isUserInsideOrganization },
          { name: this.$t('QuickActions.duplicate'), event: 'duplicateDataset' },
          { name: this.$t('QuickActions.lock'), event: 'lockDataset' },
          { name: this.$t('QuickActions.delete'), event: 'deleteDataset', isDestructive: true }
        ],
        shared: [
          { name: this.$t('QuickActions.createMap'), event: 'createMap' },
          { name: this.$t('QuickActions.duplicate'), event: 'duplicateDataset' }
        ],
        locked: [
          { name: this.$t('QuickActions.duplicate'), event: 'duplicateDataset' },
          { name: this.$t('QuickActions.unlock'), event: 'unlockDataset' }
        ]
      };
    },
    actionMode () {
      if (this.dataset.locked) {
        return 'locked';
      }
      if (this.isShared) {
        return 'shared';
      }
      return 'mine';
    },
    isUserInsideOrganization () {
      const userOrganization = this.$store.state.user.organization;
      return userOrganization && userOrganization.id;
    }
  },
  methods: {
    getActionHandlers () {
      return {
        deselectAll: () => {},
        fetchList: () => {
          this.$store.dispatch(`${this.storeActionType}/fetch`);
          this.$emit('contentChanged', 'datasets');
        },
        updateVisualization: (model) => {
          this.$store.dispatch(`${this.storeActionType}/updateVisualization`, { visualizationId: model.get('id'), visualizationAttributes: model.attributes });
        }
      };
    },
    getEventListeners () {
      const events = this.actions[this.actionMode].map(action => action.event);

      return events.reduce(
        (eventListeners, action) => {
          eventListeners[action] = this[action].bind(this);
          return eventListeners;
        }, {}
      );
    },
    showModal (componentDefinition, componentPropsData) {
      this.$modal.show(
        componentDefinition,
        componentPropsData,
        { width: '100%', height: '100%' }
      );
    },
    openQuickactions () {
      this.$emit('open');
    },
    closeQuickactions () {
      this.$emit('close');
    },
    closeDropdown () {
      this.$refs.quickActions.closeDropdown();
    },
    editInfo () {
      DialogActions.editDatasetMetadata.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    },
    createMap () {
      DialogActions.createMap.apply(this, [
        [this.dataset],
        this.backboneViews.backgroundPollingView.getBackgroundPollingView(),
        this.backboneViews.mamufasImportView.getView()
      ]);
    },
    changePrivacy () {
      DialogActions.changePrivacy.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    },
    manageTags () {
      DialogActions.editDatasetMetadata.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    },
    duplicateDataset () {
      const bgPollingView = this.backboneViews.backgroundPollingView.getBackgroundPollingView();

      bgPollingView._addDataset({
        type: 'duplication',
        table_name: `${Table.getUnqualifiedName(this.dataset.name)}_copy`,
        value: this.dataset.name,
        create_vis: false
      });
      this.closeDropdown();
    },
    unlockDataset () {
      DialogActions.changeLockState.apply(this, [this.dataset, 'datasets', this.getActionHandlers()]);
      this.closeDropdown();
    },
    lockDataset () {
      DialogActions.changeLockState.apply(this, [this.dataset, 'datasets', this.getActionHandlers()]);
      this.closeDropdown();
    },
    deleteDataset () {
      DialogActions.deleteVisualization.apply(this, [this.dataset, 'datasets', this.getActionHandlers()]);
      this.closeDropdown();
    },
    shareVisualization () {
      DialogActions.shareVisualization.apply(this, [this.dataset, this.getActionHandlers()]);
      this.closeDropdown();
    }
  }
};
</script>


docs: fix edit this language link

docs: fix edit this language link

<template>
  <v-layout>

      Edit this  |  on Github

    <v-spacer />

  </v-layout>
</template>


minimum length defaults to 0

minimum length defaults to 0

<template>
  <input   type="text"
          :id="id"
          :class="class"
          :name="name"
          :placeholder="placeholder"
          v-model="type"
          @input="input(type)"
          @dblclick="showAll"
          @blur="hideAll"
          @keydown="keydown"
          @focus="focus" />

          {{ data[anchor] }}
          {{ data[label] }}

</template>


fix(richlabels): remove rich labels for now. It is too complicated without a UX design.

<template>

          <template v-if="gCanDirectEdit">
            {{ $t('Button-RevertNow') }}
          </template>
          <template v-else>
            {{ $t('Button-OpenedUrlToRevert') }}
          </template>

</template>

<template>

      thankworthy
      second opinion needed
      blanking
      gibberish

          <template v-if="gCanDirectEdit">
            {{ $t('Button-RevertNow') }}
          </template>
          <template v-else>
            {{ $t('Button-OpenedUrlToRevert') }}
          </template>

</template>


debug

debug

<template>
	<modal v-if="spot !== null" class="vue-dialog" name="edit-spot" :delay="250" height="auto" :clickToClose="false">

				{{ this.$store.state.lang.modal.spot.edit.form.title }}

				<form>

						{{ this.$store.state.lang.modal.spot.edit.form.name }}
						<input type="text" id="spot-edit-title" class="form-control" :placeholder="this.$store.state.lang.modal.spot.edit.form.name" :value="spot.title" required ref="title" @change="formFieldChange">

						{{ this.$store.state.lang.modal.spot.edit.form.description }}
						<textarea id="spot-edit-description" class="form-control" :placeholder="this.$store.state.lang.modal.spot.edit.form.description" :value="spot.description" required ref="desc" @change="formFieldChange"></textarea>

				</form>

			<button class="vue-dialog-button" @click="closeModal">
				 {{ this.$store.state.lang.modal.spot.edit.form.buttons.cancel }}</button>
			<button class="vue-dialog-button" @click="submitForm">{{ this.$store.state.lang.modal.spot.edit.form.buttons.confirm }}

			</button>

	</modal>
</template>

<template>
	<modal class="vue-dialog" name="edit-spot" :delay="250" height="auto" :clickToClose="false">

				{{ this.$store.state.lang.modal.spot.edit.form.title }}

				<form>

						{{ this.$store.state.lang.modal.spot.edit.form.name }}
						<input type="text" id="spot-edit-title" class="form-control" :placeholder="this.$store.state.lang.modal.spot.edit.form.name" :value="spot.title" required ref="title" @change="formFieldChange">

						{{ this.$store.state.lang.modal.spot.edit.form.description }}
						<textarea id="spot-edit-description" class="form-control" :placeholder="this.$store.state.lang.modal.spot.edit.form.description" :value="spot.description" required ref="desc" @change="formFieldChange"></textarea>

				</form>

			<button class="vue-dialog-button" @click="closeModal">
				 {{ this.$store.state.lang.modal.spot.edit.form.buttons.cancel }}</button>
			<button class="vue-dialog-button" @click="submitForm">{{ this.$store.state.lang.modal.spot.edit.form.buttons.confirm }}

			</button>

	</modal>
</template>


docs: add margins upport for headings

docs: add margins upport for headings

<template>
  <a
    :class="classes"
    :href="`#${id}`"
    class="mr-2 d-inline-flex core-goto text--primary"
    @click.prevent="onClick"
  >
    <v-hover v-model="hover">
      <v-layout align-center>
        <slot />
        <v-fade-transition hide-on-leave>
          <v-icon
            v-if="hover"
            color="primary"
            class="ml-2"
            size="16"
          >
            mdi-pound
          </v-icon>
        </v-fade-transition>
      </v-layout>
    </v-hover>
  </a>
</template>

<script>
  export default {
    data: () => ({
      hover: false,
      id: '',
      tag: null
    }),

    computed: {
      classes () {
        return {
          'mb-4': this.tag === 'H1',
          'mb-3': this.tag === 'H2',
          'mb-2': this.tag === 'H3'
        }
      }
    },

    mounted () {
      const goto = this.$el.querySelector('[id]')

      if (!goto) return

      this.tag = goto.tagName
      this.id = goto.id
    },

    methods: {
      onClick (e) {
        e.stopPropagation()
        const href = `#${this.id}`

        this.$vuetify.goTo(href, { offset: -80 })
        this.$router.push(href)
      }
    }
  }
</script>

<style lang="stylus">
.core-goto {
  text-decoration: none;

  p {
    margin-bottom: 0 !important;
  }
}
</style>

<template>
  <a
    :href="`#${id}`"
    class="mr-2 d-inline-flex core-goto text--primary"
    @click.prevent="onClick"
  >
    <v-hover v-model="hover">
      <v-layout align-center>
        <slot />
        <v-fade-transition hide-on-leave>
          <v-icon
            v-if="hover"
            color="primary"
            class="ml-2"
            size="16"
          >
            mdi-pound
          </v-icon>
        </v-fade-transition>
      </v-layout>
    </v-hover>
  </a>
</template>

<script>
  export default {
    data: () => ({
      hover: false,
      id: ''
    }),

    mounted () {
      const goto = this.$el.querySelector('[id]')

      if (!goto) return

      this.id = goto.id
    },

    methods: {
      onClick (e) {
        e.stopPropagation()
        const href = `#${this.id}`

        this.$vuetify.goTo(href, { offset: -80 })
        this.$router.push(href)
      }
    }
  }
</script>

<style lang="stylus">
.core-goto {
  text-decoration: none;

  p {
    margin-bottom: 0 !important;
  }
}
</style>