Compare commits
10 commits
ben/fix/co
...
developmen
Author | SHA1 | Date | |
---|---|---|---|
|
94ee509b43 | ||
bab6b9f354 | |||
a0c0c7e032 | |||
90f0a91f50 | |||
067f0543d4 | |||
|
792e431fad | ||
a19ddcb1b7 | |||
|
49e5951747 | ||
7be68c3fc0 | |||
0dd7ab1e34 |
14 changed files with 88 additions and 126 deletions
111
README.md
111
README.md
|
@ -1,30 +1,43 @@
|
||||||
# LocalLoop Web Interface
|
# LocalSpend - Web Application
|
||||||
|
|
||||||
This is the repository for the LocalLoop web interface, for traders and
|
This repository contains the Web application for the LocalSpend system.
|
||||||
customers to see and submit data to the service.
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
| Branch | Status |
|
| Branch | Status |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| *Master:* | [![Build Status](https://travis-ci.org/Pear-Trading/FoodLoop-Web.svg?branch=master)](https://travis-ci.org/Pear-Trading/FoodLoop-Web) |
|
| `master` | [![Build Status](https://travis-ci.org/Pear-Trading/FoodLoop-Web.svg?branch=master)](https://travis-ci.org/Pear-Trading/FoodLoop-Web) |
|
||||||
| *Development:* | [![Build Status](https://travis-ci.org/Pear-Trading/FoodLoop-Web.svg?branch=development)](https://travis-ci.org/Pear-Trading/FoodLoop-Web) |
|
| `development` | [![Build Status](https://travis-ci.org/Pear-Trading/FoodLoop-Web.svg?branch=development)](https://travis-ci.org/Pear-Trading/FoodLoop-Web) |
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
|
1. [Getting Started](#getting-started)
|
||||||
|
1. [Environments](#environments)
|
||||||
|
1. [Testing](#testing)
|
||||||
|
1. [Troubleshooting](#troubleshooting)
|
||||||
|
1. [Licences](#licenses)
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
To get started with development, you will need an up to date version of
|
To get started with development, you will need an up-to-date version of
|
||||||
node.js, git, and access to either the backend dev server, or a local running
|
Node.js, git, and access to either the backend dev. server or a local
|
||||||
copy of the backend server from [LocalLoop Server][LocalLoop-Server].
|
copy of it from the [LocalSpend Server][LocalLoop-Server] repo.
|
||||||
|
|
||||||
For your local node.js, We reccomend using [n][tj/n] on \*nix and Mac, for
|
For your local Node.js, we recommend using:
|
||||||
Windows take a look at [nodist][marcelklehr/nodist] - although other options
|
- [n][tj/n] for \*nix and Mac; and
|
||||||
exist. We reccomend Node.js version 8.0.0+ and npm version 5.3.0+.
|
- [nodist][marcelklehr/nodist] for Windows.
|
||||||
|
|
||||||
To get this repository set up, first clone it and then run the following
|
We reccomend Node.js version 8.0.0+ and npm version 5.3.0+.
|
||||||
commands:
|
|
||||||
|
|
||||||
```
|
To get this repository set up:
|
||||||
npm install -g @angular/cli
|
|
||||||
npm install
|
1. Clone it
|
||||||
```
|
2. Install the dependencies:
|
||||||
|
- `npm install -g @angular/cli`
|
||||||
|
- `npm install`
|
||||||
|
3. Start the application:
|
||||||
|
- `npm start`
|
||||||
|
- The app. will automatically reload after source file changes
|
||||||
|
|
||||||
[LocalLoop-Server]:https://github.com/Pear-Trading/Foodloop-Server
|
[LocalLoop-Server]:https://github.com/Pear-Trading/Foodloop-Server
|
||||||
[tj/n]:https://github.com/tj/n
|
[tj/n]:https://github.com/tj/n
|
||||||
|
@ -33,11 +46,17 @@ npm install
|
||||||
## Environments
|
## Environments
|
||||||
|
|
||||||
The app defaults to using the development server. For other options, see
|
The app defaults to using the development server. For other options, see
|
||||||
`src/environments/environments.ts`
|
`src/environments/environments.ts`.
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Run `ng build` to build the project; the resulting files will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
There are two types of test in this codebase, unit tests (using Karma) and E2E tests (using Protractor).
|
There are two types of test in this codebase:
|
||||||
|
- unit tests (using Karma); and
|
||||||
|
- E2E tests (using Protractor).
|
||||||
|
|
||||||
### Karma Unit Tests
|
### Karma Unit Tests
|
||||||
|
|
||||||
|
@ -47,15 +66,25 @@ These tests are a long-running process, and will automatically run on file chang
|
||||||
|
|
||||||
### Protractor E2E Tests
|
### Protractor E2E Tests
|
||||||
|
|
||||||
To run these, you will need to run the following:
|
To run these, you will need to run the following command:
|
||||||
|
|
||||||
```
|
- `webdriver-manager update`
|
||||||
webdriver-manager update
|
|
||||||
```
|
|
||||||
|
|
||||||
This will download the correct webdriver for you (we use chromedriver), and any other dependencies it needs. After that, you can run the tests with `npm run e2e`. Note these run once, and will need to be re-run every time you want to run an e2e test. You will also need to run the
|
This will download the correct webdriver for you (we use chromedriver), and
|
||||||
|
any other dependencies it needs.
|
||||||
|
After that, you can run the tests with `npm run e2e`.
|
||||||
|
Note these run once, and will need to be re-run every time you want to run an
|
||||||
|
e2e test.
|
||||||
|
|
||||||
These tests are best run regularly, and should show if any issues have emerged in other parts of the application that you are not aware of, or if some part of the flow through the app has changed sufficiently.
|
These tests are best run regularly, and should show if any issues have emerged
|
||||||
|
in other parts of the application that you are not aware of, or if some part
|
||||||
|
of the flow through the app has changed significantly.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### ‘Error: EACCES: permission denied, access '/usr/local/lib'’ when installing dependencies
|
||||||
|
|
||||||
|
Change npm's default directory by following [these steps](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally#manually-change-npms-default-directory).
|
||||||
|
|
||||||
## Licences
|
## Licences
|
||||||
|
|
||||||
|
@ -65,35 +94,3 @@ The interface itself is based off of [CoreUI][core-ui] which is MIT Licenced.
|
||||||
For information, see `LICENCE.MIT` included in this repo.
|
For information, see `LICENCE.MIT` included in this repo.
|
||||||
|
|
||||||
[core-ui]: http://coreui.io
|
[core-ui]: http://coreui.io
|
||||||
|
|
||||||
# Old README
|
|
||||||
|
|
||||||
This is the old README with some minor tips on getting started, and more reading.
|
|
||||||
|
|
||||||
## Angular2DevelopmentCLI
|
|
||||||
|
|
||||||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.0.0-beta.32.3.
|
|
||||||
|
|
||||||
### Development server
|
|
||||||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
|
|
||||||
|
|
||||||
### Code scaffolding
|
|
||||||
|
|
||||||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/class/module`.
|
|
||||||
|
|
||||||
### Build
|
|
||||||
|
|
||||||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
|
|
||||||
|
|
||||||
### Running unit tests
|
|
||||||
|
|
||||||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
||||||
|
|
||||||
### Running end-to-end tests
|
|
||||||
|
|
||||||
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
|
|
||||||
Before running the tests make sure you are serving the app via `ng serve`.
|
|
||||||
|
|
||||||
### Further help
|
|
||||||
|
|
||||||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
|
|
||||||
|
|
|
@ -1,22 +1,16 @@
|
||||||
<div class="animated fadeIn">
|
<div class="animated fadeIn">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 col-md-8">
|
<div class="col-lg-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<strong>Record Transaction</strong>
|
<strong>Submit Transaction</strong>
|
||||||
<small>Required Data marked in <strong>bold</strong>.</small>
|
<small>Required Data marked in <strong>bold</strong>.</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-block">
|
<div class="card-block">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-md-3 form-control-label" for="text-input"><strong>Time of Transaction</strong></label>
|
<label class="col-md-3 form-control-label" for="text-input"><strong>Time of Transaction</strong></label>
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<input
|
<input type="datetime-local" class="form-control" [min]="minDate" [(ngModel)]="myDate" (ngModelChange)="transactionFormValidate()">
|
||||||
type="datetime-local"
|
|
||||||
class="form-control"
|
|
||||||
[min]="minDate"
|
|
||||||
[(ngModel)]="myDate"
|
|
||||||
(ngModelChange)="transactionFormValidate()"
|
|
||||||
>
|
|
||||||
<span class="help-block">Enter the date and time the transaction occurred.</span>
|
<span class="help-block">Enter the date and time the transaction occurred.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -27,7 +21,7 @@
|
||||||
<span class="input-group-addon"><i class="fa fa-gbp"></i></span>
|
<span class="input-group-addon"><i class="fa fa-gbp"></i></span>
|
||||||
<input type="number" min="0.00" step="0.01" class="form-control" placeholder="0.00" [(ngModel)]="amount" (ngModelChange)="transactionFormValidate()">
|
<input type="number" min="0.00" step="0.01" class="form-control" placeholder="0.00" [(ngModel)]="amount" (ngModelChange)="transactionFormValidate()">
|
||||||
</div>
|
</div>
|
||||||
<span class="help-block">Enter the amount spent, such as ‘5.35’ for £5.35.</span>
|
<span class="help-block">Enter the amount spent, such as 5.35 for £5.35.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -35,7 +29,7 @@
|
||||||
<label class="col-md-3 form-control-label" for="text-input">Essential Purchase</label>
|
<label class="col-md-3 form-control-label" for="text-input">Essential Purchase</label>
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="checkbox" class="mr-1" [(ngModel)]="essentialPurchase" (ngModelChange)="transactionFormValidate()">
|
<input type="checkbox" class="mr-auto" [(ngModel)]="essentialPurchase" (ngModelChange)="transactionFormValidate()">
|
||||||
<span class="help-block">Tick if the purchase is deemed an essential purchase for budgeting purposes.</span>
|
<span class="help-block">Tick if the purchase is deemed an essential purchase for budgeting purposes.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -44,7 +38,7 @@
|
||||||
<label class="col-md-3 form-control-label" for="text-input">Recurring Purchase</label>
|
<label class="col-md-3 form-control-label" for="text-input">Recurring Purchase</label>
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="checkbox" class="mr-1" [(ngModel)]="recurringPurchase" (ngModelChange)="transactionFormValidate()">
|
<input type="checkbox" class="mr-auto" [(ngModel)]="recurringPurchase" (ngModelChange)="transactionFormValidate()">
|
||||||
<span class="help-block">Tick if the purchase frequently recurs, such as monthly.</span>
|
<span class="help-block">Tick if the purchase frequently recurs, such as monthly.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -48,7 +48,7 @@ const routes: Routes = [
|
||||||
{
|
{
|
||||||
path: 'add-data',
|
path: 'add-data',
|
||||||
component: AddDataComponent,
|
component: AddDataComponent,
|
||||||
data: { title: 'Record Transaction' },
|
data: { title: 'Add Transaction' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'leaderboard',
|
path: 'leaderboard',
|
||||||
|
@ -85,7 +85,7 @@ const routes: Routes = [
|
||||||
{
|
{
|
||||||
path: 'feedback',
|
path: 'feedback',
|
||||||
component: FeedbackComponent,
|
component: FeedbackComponent,
|
||||||
data: { title: 'Submit Feedback' },
|
data: { title: 'Give Feedback' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'suppliers',
|
path: 'suppliers',
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<div class="animated fadeIn">
|
<div class="animated fadeIn">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 col-md-8">
|
<div class="col-lg-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<strong>Submit Feedback</strong>
|
<strong>Submit Transaction</strong>
|
||||||
<small>Required Data marked in <strong>bold</strong>.</small>
|
<small>Required Data marked in <strong>bold</strong>.</small>
|
||||||
</div>
|
</div>
|
||||||
<form class="form-horizontal" [formGroup]="feedbackForm" (ngSubmit)="onSubmit()">
|
<form class="form-horizontal" [formGroup]="feedbackForm" (ngSubmit)="onSubmit()">
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<table class="table table-striped table-hover">
|
<table class="table table-striped table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Type</th>
|
<th>Ward</th>
|
||||||
<th>Amount of Transactions</th>
|
<th>Amount of Transactions</th>
|
||||||
<th>Sum of Transactions</th>
|
<th>Sum of Transactions</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="animated fadeIn">
|
<div class="animated fadeIn">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 col-md-8">
|
<div class="col-lg-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Search Suppliers</h4>
|
<h4>Search Suppliers</h4>
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="animated fadeIn">
|
<div class="animated fadeIn">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 col-md-8">
|
<div class="col-lg-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>List of Suppliers</h4>
|
<h4>List of Suppliers</h4>
|
||||||
|
|
|
@ -101,7 +101,7 @@
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<strong>Log of Outgoing Transactions</strong>
|
<strong>Log of Outgoing Transactions</strong>
|
||||||
<small>This lists all purchases that have been submitted.</small>
|
<small>This lists all purchases that have been submitted.</small>
|
||||||
<button class="btn pull-right btn-sm" (click)="toggleShowMeta()">
|
<button *ngIf="accountType == 'organisation'" class="btn pull-right btn-sm" (click)="toggleShowMeta()">
|
||||||
<span *ngIf="!showMeta">Show</span><span *ngIf="showMeta">Hide</span> Details
|
<span *ngIf="!showMeta">Show</span><span *ngIf="showMeta">Hide</span> Details
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -29,6 +29,7 @@ export class TransactionLogComponent implements OnInit {
|
||||||
transactionFormStatusSuccess: string;
|
transactionFormStatusSuccess: string;
|
||||||
transactionFormStatusError = 'Error received, please try again.';
|
transactionFormStatusError = 'Error received, please try again.';
|
||||||
updatedTime: string;
|
updatedTime: string;
|
||||||
|
accountType: any;
|
||||||
showMeta = false;
|
showMeta = false;
|
||||||
|
|
||||||
public paginateConfig: PaginationInstance = {
|
public paginateConfig: PaginationInstance = {
|
||||||
|
@ -58,6 +59,7 @@ export class TransactionLogComponent implements OnInit {
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
this.loadTransactions(1);
|
this.loadTransactions(1);
|
||||||
|
this.accountType = localStorage.getItem('usertype');
|
||||||
}
|
}
|
||||||
|
|
||||||
loadTransactions(logPage: number) {
|
loadTransactions(logPage: number) {
|
||||||
|
|
|
@ -38,17 +38,19 @@
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li *ngIf="accountType == 'organisation'" class="nav-item">
|
||||||
|
<a class="nav-link" routerLinkActive="active" [routerLink]="['/more-graphs-and-tables']">
|
||||||
<hr>
|
<div class="row no-gutters align-items-center">
|
||||||
|
<div class="col-2"><i class="icon-map"></i></div>
|
||||||
<ul class="nav">
|
<div class="col-10">Infographics</div>
|
||||||
<strong class="nav-title">Actions</strong>
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" routerLinkActive="active" [routerLink]="['/add-data']">
|
<a class="nav-link" routerLinkActive="active" [routerLink]="['/add-data']">
|
||||||
<div class="row no-gutters align-items-center">
|
<div class="row no-gutters align-items-center">
|
||||||
<div class="col-2"><i class="icon-basket"></i></div>
|
<div class="col-2"><i class="icon-basket"></i></div>
|
||||||
<div class="col-10">Record Transaction</div>
|
<div class="col-10">Add Transaction</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -56,21 +58,7 @@
|
||||||
<a class="nav-link" routerLinkActive="active" [routerLink]="['/feedback']">
|
<a class="nav-link" routerLinkActive="active" [routerLink]="['/feedback']">
|
||||||
<div class="row no-gutters align-items-center">
|
<div class="row no-gutters align-items-center">
|
||||||
<div class="col-2"><i class="icon-envelope-letter"></i></div>
|
<div class="col-2"><i class="icon-envelope-letter"></i></div>
|
||||||
<div class="col-10">Submit Feedback</div>
|
<div class="col-10">Enter Feedback</div>
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
<ul class="nav">
|
|
||||||
<strong class="nav-title">Info</strong>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" routerLinkActive="active" [routerLink]="['/more-graphs-and-tables']">
|
|
||||||
<div class="row no-gutters align-items-center">
|
|
||||||
<div class="col-2"><i class="icon-map"></i></div>
|
|
||||||
<div class="col-10">Infographics</div>
|
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -106,7 +94,7 @@
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li *ngIf="accountType == 'customer'" class="nav-item">
|
||||||
<a class="nav-link" routerLinkActive="active" [routerLink]="['/category-month']">
|
<a class="nav-link" routerLinkActive="active" [routerLink]="['/category-month']">
|
||||||
<div class="row no-gutters align-items-center">
|
<div class="row no-gutters align-items-center">
|
||||||
<div class="col-2"><i class="icon-basket"></i></div>
|
<div class="col-2"><i class="icon-basket"></i></div>
|
||||||
|
@ -114,7 +102,7 @@
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li *ngIf="accountType == 'organisation'" class="nav-item">
|
||||||
<a class="nav-link" routerLinkActive="active" [routerLink]="['/suppliers']">
|
<a class="nav-link" routerLinkActive="active" [routerLink]="['/suppliers']">
|
||||||
<div class="row no-gutters align-items-center">
|
<div class="row no-gutters align-items-center">
|
||||||
<div class="col-2"><i class="icon-speedometer"></i></div>
|
<div class="col-2"><i class="icon-speedometer"></i></div>
|
||||||
|
@ -151,6 +139,6 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="app-footer">
|
<footer class="app-footer">
|
||||||
<a href="http://www.peartrade.org" target="_blank">© 2020 Pear Trading Ltd.</a>
|
<a href="http://www.peartrade.org" target="_blank">© 2017 Pear Trading Ltd.</a>
|
||||||
<span class="float-right">Powered by <a href="http://coreui.io">CoreUI</a></span>
|
<span class="float-right">Powered by <a href="http://coreui.io">CoreUI</a></span>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
flex: 0 1 auto;
|
flex: 0 1 auto;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
// Bring the hover, focused, and "active" buttons to the fron to overlay
|
// Bring the hover, focused, and "active" buttons to the fron to overlay
|
||||||
// the borders properly
|
// the borders properly
|
||||||
|
|
|
@ -32,14 +32,12 @@
|
||||||
@include box-shadow(none);
|
@include box-shadow(none);
|
||||||
}
|
}
|
||||||
|
|
||||||
:enabled {
|
|
||||||
&:active,
|
&:active,
|
||||||
&.active {
|
&.active {
|
||||||
background-image: none;
|
background-image: none;
|
||||||
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
|
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Future-proof disabling of clicks on `<a>` elements
|
// Future-proof disabling of clicks on `<a>` elements
|
||||||
a.btn.disabled,
|
a.btn.disabled,
|
||||||
|
|
|
@ -70,10 +70,6 @@
|
||||||
&:first-child {
|
&:first-child {
|
||||||
@include border-radius($card-border-radius-inner $card-border-radius-inner 0 0);
|
@include border-radius($card-border-radius-inner $card-border-radius-inner 0 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
small {
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-footer {
|
.card-footer {
|
||||||
|
|
|
@ -23,16 +23,6 @@
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="radio"],
|
|
||||||
input[type="checkbox"] {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.help-block {
|
|
||||||
font-size: 0.8em;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-group-addon,
|
.input-group-addon,
|
||||||
|
|
|
@ -80,8 +80,6 @@
|
||||||
|
|
||||||
.table-hover {
|
.table-hover {
|
||||||
tbody tr {
|
tbody tr {
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
@include hover {
|
@include hover {
|
||||||
background-color: $table-bg-hover;
|
background-color: $table-bg-hover;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue