@ -1,3 +1,37 @@ |
||||
# pe1rxf-aprs-server |
||||
|
||||
A dual band aprs digipeater with enhanced telemetry capabilities. |
||||
## A dual band APRS digipeater with enhanced telemetry capabilities. |
||||
|
||||
This is the custom software for a self build two band APRS digipeater. |
||||
It runs on a Raspberry Pi Zero with Raspberry Pi OS Bullseye. |
||||
|
||||
## In short |
||||
|
||||
It can: |
||||
|
||||
* Function as a normal digipeater (mono, dual or cross band) |
||||
* Work as an IGate (RX only or RX/TX) |
||||
* Send and receive APRS messages |
||||
* Display some basic statistics like heard stations. |
||||
* Process and display data from the custom telemetry devices from PE1RXF |
||||
|
||||
In has (hardware): |
||||
|
||||
* Two build in 1200bps AFSK modems |
||||
* Build in transceiver |
||||
* Connector for external (second) transceiver |
||||
* Two USB ports for a network adapter and a third modem |
||||
* Real Time Clock |
||||
* Raspberry Pi Zero |
||||
|
||||
It has (software): |
||||
|
||||
* APRX digipeater software for the basic functions |
||||
* Apache2 web server for the user interface |
||||
* Custom software (from this repository) for extra functionality |
||||
|
||||
Want to know more? The complete guide (and more) is available on https://www.meezenest.nl/mees |
||||
|
||||
![Main page](image screenshots/screenshot_main_page.png "Main page") |
||||
![Send message](image screenshots/screenshot_send_message.png "Send message") |
||||
![Telemetry](image screenshots/screenshot_telemetry.png "Telemetry") |
||||
|
@ -0,0 +1,5 @@ |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:39,16.6,59.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
@ -0,0 +1,5 @@ |
||||
2021-12-28 11:48,16.2,57.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 11:58,16.1,57.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:08,16.0,57.4,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:18,16.1,59.9,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:19,16.1,59.9,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
@ -0,0 +1,18 @@ |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:29,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:39,16.6,59.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:49,16.9,59.4,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 12:59,17.1,59.6,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 13:24,16.3,58.7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 13:24,16.3,58.7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 13:24,16.3,58.7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 13:34,16.1,59.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 13:44,16.1,59.1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 13:54,16.1,59.1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 14:04,16.1,59.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 14:05,16.1,59.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 14:15,16.2,59.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 14:25,16.2,59.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28 14:35,16.3,59.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
@ -0,0 +1,228 @@ |
||||
2021-12-26 10:18:05,ax0,PE1RXF-1,APRX29,Test message |
||||
2021-12-26 10:18:38,ax0,PE1RXF-1,APRX29,Test message |
||||
2021-12-26 10:18:56,ax1,PE1RXF-1,APRX29,Test message |
||||
2021-12-26 10:19:29,ax1,PA1RXF-1,APRX29,Test message |
||||
2021-12-26 10:28:22,ax1,PA1RXF-1,APRX29,Test message{001 |
||||
2021-12-26 10:29:30,ax1,PE1RXF-1,APRX29,Test message{001 |
||||
2021-12-26 10:30:20,ax1,PE1RXF-1,APRX29,Test message{001 |
||||
2021-12-26 10:33:16,ax0,PE1RXF-1,APRX29,Test message{001 |
||||
2021-12-26 14:42:29,ax0,PE1RXF-1,APRX29,Test message 3 |
||||
2021-12-26 14:57:09,ax0,KM6LYW-9,APZ100,Your sister swims out to meet troop ships.{2 |
||||
2021-12-26 14:57:18,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 14:58:19,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 14:59:01,ax0,KM6LYW-9,APZ100,You will be recognized and honored as a community leader.{3 |
||||
2021-12-26 14:59:09,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 19:39:59,ax0,KM6LYW-9,APZ100,"A tall, dark stranger will have more fun than you.{4" |
||||
2021-12-26 19:40:06,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 19:40:13,ax0,KM6LYW-9,APZ100,A tall, dark stranger will have more fun than you.{4 |
||||
2021-12-26 19:40:20,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 19:40:34,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 19:40:54,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 19:41:01,ax0,KM6LYW-9,APZ100,ack0 |
||||
2021-12-26 19:46:20,ax0,KM6LYW-9,APZ100,"A tall, dark stranger will have more fun than you." |
||||
2021-12-26 19:51:03,ax0,KM6LYW-9,APZ100,"Your lucky number has been disconnected.{5" |
||||
2021-12-26 19:51:14,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:51:25,ax0,KM6LYW-9,APZ100,"Your lucky number has been disconnected.{5" |
||||
2021-12-26 19:51:36,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:51:47,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:51:58,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:53:02,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:53:13,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:58:23,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:58:34,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 19:59:17,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 20:02:30,ax0,PE1RXF-1,APRX29,"Test message" |
||||
2021-12-26 20:02:50,ax0,PE1RXF-1,APRX29,"Test message" |
||||
2021-12-26 20:03:54,ax0,KM6LYW-9,APZ100,"Do not overtax your powers.{7" |
||||
2021-12-26 20:04:15,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 20:04:36,ax0,KM6LYW-9,APZ100,"Do not overtax your powers.{7" |
||||
2021-12-26 20:04:58,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 20:08:37,ax0,KM6LYW-9,APZ100,"Condense soup, not books!{8" |
||||
2021-12-26 20:11:58,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 20:12:18,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 20:16:26,ax0,KM6LYW-9,APZ100,"Condense soup, not books!{8" |
||||
2021-12-26 20:16:47,ax0,KM6LYW-9,APZ100,"Condense soup, not books!{8" |
||||
2021-12-26 20:17:08,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 20:17:49,ax0,KM6LYW-9,APZ100,"Do not overtax your powers.{7" |
||||
2021-12-26 20:18:10,ax0,KM6LYW-9,APZ100,"Do not overtax your powers.{7" |
||||
2021-12-26 20:18:51,ax0,KM6LYW-9,APZ100,"Condense soup, not books!{8" |
||||
2021-12-26 20:19:12,ax0,KM6LYW-9,APZ100,"Condense soup, not books!{8" |
||||
2021-12-26 21:21:22,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 21:21:42,ax0,KM6LYW-9,APZ100,"You will gain money by a speculation or lottery.{9" |
||||
2021-12-26 21:21:43,ax0,KM6LYW-9,APZ100,"You will gain money by a speculation or lottery.{9" |
||||
2021-12-26 21:21:45,ax0,KM6LYW-9,APZ100,"You will gain money by a speculation or lottery.{9" |
||||
2021-12-26 21:21:56,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-26 21:21:58,ax0,KM6LYW-9,APZ100,"ack0" |
||||
2021-12-28 08:58:07,ax0,PE1RXF-1,APRX29,"Test message" |
||||
2021-12-28 08:58:08,ax0,PE1RXF-1,APRX29,"Test message" |
||||
2021-12-28 09:07:02,ax0,PE1RXF-1,APRX29,"Test message" |
||||
2021-12-28 09:08:53,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:11:50,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:14:11,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:15:02,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:17:10,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:49:49,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:53:28,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:54:35,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:59:04,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 09:59:05,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:59:06,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 09:59:43,ax0,PE1RXF-2,APRX29,"PE1RXF-7 :?01<0x1b><0xa9>" |
||||
2021-12-28 10:00:11,ax0,PE1RXF-2,APRX29,"PE1RXF-7 :?01<0x0d>F" |
||||
2021-12-28 10:00:51,ax0,PE1RXF-2,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:01:07,ax0,PE1RXF-2,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:01:15,ax0,PE1RXF-2,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:01:29,ax0,PE1RXF-2,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:01:55,ax1,PE1RXF-1,APRX29,"PE1RXF-7 :?01<0xfb>" |
||||
2021-12-28 10:01:59,ax1,PE1RXF-1,APRX29,"PE1RXF-7 :?01<0xf2><0x9d>" |
||||
2021-12-28 10:02:01,ax1,PE1RXF-1,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:02:06,ax1,PE1RXF-1,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:02:24,ax1,PE1RXF-1,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:02:33,ax1,PE1RXF-1,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:02:50,ax0,PE1RXF-2,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:02:57,ax1,PE1RXF-1,APRX29,"PE1RXF-7 :?01" |
||||
2021-12-28 10:03:18,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:03:21,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:03:22,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:03:39,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:03:40,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:03:41,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:03:49,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:03:50,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:03:51,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:04:12,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:04:17,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:04:28,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:04:53,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:05:09,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:05:25,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:05:34,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:05:44,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:06:21,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:06:22,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:06:23,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:06:27,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:06:36,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:06:53,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:06:54,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:07:43,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:07:44,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:07:45,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:09:35,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:09:36,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:09:37,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:09:52,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:09:58,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:07,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:11:12,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:22,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:25,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:11:38,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:40,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:45,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:11:47,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:50,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:53,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:11:54,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:11:55,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:12:28,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:12:29,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:12:30,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:12:39,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:12:40,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:12:41,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:12:48,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:12:53,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:12:54,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:12:55,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:12:58,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:12:59,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:13:00,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:15:17,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:15:27,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:15:27,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:15:28,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:16:43,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:16:44,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:16:52,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:16:52,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:17:07,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:17:08,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:33:23,ax1,PE1RXF-1,APRX29,"?01" |
||||
2021-12-28 10:33:29,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:33:32,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:33:39,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:33:40,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:33:41,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:33:44,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:33:45,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:33:46,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:33:51,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:33:52,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:33:53,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:34:08,ax0,PE1RXF-2,APRX29,"?01" |
||||
2021-12-28 10:34:09,ax0,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:34:10,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:35:48,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:36:16,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:36:44,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 10:37:43,ax1,PE1RXF-7,APZMDM," 15.2,58.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0" |
||||
2021-12-28 10:38:21,ax1,PE1RXF-7,APZMDM,"ack10" |
||||
2021-12-28 10:39:17,ax1,PE1RXF-7,APZMDM,"rej51" |
||||
2021-12-28 10:41:04,ax1,PE1RXF-7,APZMDM,"ack21" |
||||
2021-12-28 10:41:05,ax1,PE1RXF-7,APZMDM," 15.3,59.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 10:41:10,ax1,PE1RXF-7,APZMDM," 15.3,59.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 10:41:15,ax1,PE1RXF-7,APZMDM," 15.3,59.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 10:41:20,ax1,PE1RXF-7,APZMDM," 15.3,59.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 10:41:50,ax1,PE1RXF-7,APZMDM,"ack21" |
||||
2021-12-28 10:44:08,ax0,PE1RXF-2,APRX29,"?21{21" |
||||
2021-12-28 10:44:09,ax0,PE1RXF-7,APZMDM,"ack21" |
||||
2021-12-28 10:44:10,ax1,PE1RXF-7,APZMDM,"ack21" |
||||
2021-12-28 10:44:11,ax1,PE1RXF-1,APRX29,"ack21" |
||||
2021-12-28 10:51:25,ax0,PE1RXF-7,APZMDM," 15.4,58.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{002" |
||||
2021-12-28 10:51:26,ax1,PE1RXF-7,APZMDM," 15.4,58.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{002" |
||||
2021-12-28 10:51:27,ax1,PE1RXF-1,APRX29,"ack002" |
||||
2021-12-28 10:51:28,ax1,PE1RXF-1,APRX29,"ack002" |
||||
2021-12-28 10:51:30,ax0,PE1RXF-7,APZMDM," 15.4,58.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{002" |
||||
2021-12-28 10:51:31,ax1,PE1RXF-7,APZMDM," 15.4,58.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{002" |
||||
2021-12-28 10:51:32,ax1,PE1RXF-1,APRX29,"ack002" |
||||
2021-12-28 10:51:33,ax1,PE1RXF-1,APRX29,"ack002" |
||||
2021-12-28 10:57:55,ax1,PE1RXF-7,APZMDM,"ack21" |
||||
2021-12-28 11:07:37,ax1,PE1RXF-7,APZMDM," 15.5,58.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:07:42,ax1,PE1RXF-7,APZMDM," 15.5,58.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:07:47,ax1,PE1RXF-7,APZMDM," 15.5,58.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:15:53,ax1,PE1RXF-7,APZMDM," 15.5,58.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:16:24,ax1,PE1RXF-7,APZMDM," 15.5,58.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:16:53,ax1,PE1RXF-7,APZMDM," 15.5,58.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:27:59,ax1,PE1RXF-7,APZMDM," 15.9,58.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:28:09,ax1,PE1RXF-7,APZMDM," 15.9,58.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:28:14,ax1,PE1RXF-7,APZMDM," 15.9,58.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:31:56,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 11:32:14,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 11:36:14,ax1,PE1RXF-7,APZMDM," 16.1,58.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:37:14,ax1,PE1RXF-7,APZMDM," 16.1,58.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{002" |
||||
2021-12-28 11:38:14,ax1,PE1RXF-7,APZMDM," 16.1,59.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{003" |
||||
2021-12-28 11:43:20,ax1,PE1RXF-7,APZMDM,"APRS node V1" |
||||
2021-12-28 11:48:46,ax1,PE1RXF-7,APZMDM," 16.2,57.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 11:58:46,ax1,PE1RXF-7,APZMDM," 16.1,57.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{002" |
||||
2021-12-28 12:08:45,ax1,PE1RXF-7,APZMDM," 16.0,57.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{003" |
||||
2021-12-28 12:18:45,ax1,PE1RXF-7,APZMDM," 16.1,59.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{004" |
||||
2021-12-28 12:19:00,ax1,PE1RXF-7,APZMDM," 16.1,59.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{004" |
||||
2021-12-28 12:29:01,ax1,PE1RXF-7,APZMDM," 16.3,60.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{005" |
||||
2021-12-28 12:29:15,ax1,PE1RXF-7,APZMDM," 16.3,60.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{005" |
||||
2021-12-28 12:29:30,ax1,PE1RXF-7,APZMDM," 16.3,60.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{005" |
||||
2021-12-28 12:29:45,ax1,PE1RXF-7,APZMDM," 16.3,60.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{005" |
||||
2021-12-28 12:39:45,ax1,PE1RXF-7,APZMDM," 16.6,59.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{006" |
||||
2021-12-28 12:49:45,ax1,PE1RXF-7,APZMDM," 16.9,59.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{007" |
||||
2021-12-28 12:59:44,ax1,PE1RXF-7,APZMDM," 17.1,59.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{008" |
||||
2021-12-28 13:24:02,ax1,PE1RXF-7,APZMDM," 16.3,58.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 13:24:17,ax1,PE1RXF-7,APZMDM," 16.3,58.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 13:24:32,ax1,PE1RXF-7,APZMDM," 16.3,58.7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{001" |
||||
2021-12-28 13:34:32,ax1,PE1RXF-7,APZMDM," 16.1,59.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{002" |
||||
2021-12-28 13:44:47,ax1,PE1RXF-7,APZMDM," 16.1,59.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{003" |
||||
2021-12-28 13:54:47,ax1,PE1RXF-7,APZMDM," 16.1,59.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{004" |
||||
2021-12-28 14:04:47,ax1,PE1RXF-7,APZMDM," 16.1,59.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{005" |
||||
2021-12-28 14:05:02,ax1,PE1RXF-7,APZMDM," 16.1,59.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{005" |
||||
2021-12-28 14:15:01,ax1,PE1RXF-7,APZMDM," 16.2,59.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{006" |
||||
2021-12-28 14:25:01,ax1,PE1RXF-7,APZMDM," 16.2,59.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{007" |
||||
2021-12-28 14:35:01,ax1,PE1RXF-7,APZMDM," 16.3,59.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0{008" |
@ -0,0 +1,36 @@ |
||||
2021-12-26 19:06:37,ax1,PE1RXF-7,APRX29,test berichtje |
||||
2021-12-26 19:06:39,ax0,PE1RXF-7,APRX29,test berichtje |
||||
2021-12-26 19:57:59,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-26 20:01:09,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-26 20:02:20,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-26 20:02:52,ax0,KM6LYW-9,APRX29,fortune |
||||
2021-12-26 21:20:39,ax0,KM6LYW-9,APRX29,fortune |
||||
2021-12-28 08:57:37,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 08:58:03,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 08:58:19,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 08:58:32,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 08:58:46,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 08:58:56,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 09:06:59,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 09:07:44,ax0,PE1RXF-7,APRX29,Test message |
||||
2021-12-28 09:08:22,ax0,PE1RXF-7,APRX29,01 |
||||
2021-12-28 09:08:50,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:09:37,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:11:07,ax0,PE1RXF,APRX29,?01 |
||||
2021-12-28 09:11:36,ax0,PE1RXF,APRX29,?01 |
||||
2021-12-28 09:11:47,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:14:08,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:14:59,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:17:06,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:49:47,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:53:25,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:54:31,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 09:59:02,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 10:03:15,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 10:04:50,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 10:07:41,ax0,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 11:30:48,ax1,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 11:31:03,ax1,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 11:31:13,ax1,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 11:31:53,ax1,PE1RXF-7,APRX29,?01 |
||||
2021-12-28 11:32:12,ax1,PE1RXF-7,APRX29,?01 |
@ -0,0 +1,36 @@ |
||||
2021-12-28 14:28:57,ax0,DO1IBS-4,APNU19-3 |
||||
2021-12-28 14:42:54,ax0,DL0PBS-5,APMI03 |
||||
2021-12-28 14:42:54,ax0,DO1EJK,APU25N |
||||
2021-12-28 10:27:43,ax0,DB0PDF-10,AP4R10 |
||||
2021-12-28 14:40:48,ax0,SM5WXF-9,APOTC1 |
||||
2021-12-28 13:50:33,ax0,DG4BRT-1,WIDE1-1 |
||||
2021-12-28 14:40:18,ax0,DB0ET,APTT4 |
||||
2021-12-27 20:38:17,ax0,DB0LER,APRX29 |
||||
2021-12-28 14:40:31,ax0,DB0PBG-5,APMI03 |
||||
2021-12-27 16:18:09,ax0,DL9OBG-9,UR5RY4 |
||||
2021-12-28 14:33:57,ax0,DB0WHV,APRX29 |
||||
2021-12-28 13:38:01,ax0,DH9AG-7,UR0TW1-2 |
||||
2021-12-28 14:08:40,ax0,DO6DN-10,APRX28 |
||||
2021-12-28 11:00:42,ax0,DL2KV-9,APPIC3 |
||||
2021-12-28 11:28:49,ax0,DB0OL-10,AP4R10 |
||||
2021-12-28 12:49:42,ax0,DB0SAH,APMI06 |
||||
2021-12-28 14:27:43,ax0,DB0OHB,APDW16 |
||||
2021-12-28 14:42:28,ax0,DO2DAN-6,APRS |
||||
2021-12-28 12:51:21,ax0,DL2MT-6,APRS |
||||
2021-12-28 12:54:26,ax0,DL1BJN-1,USRQX8 |
||||
2021-12-28 09:05:06,ax0,DB1NTO-2,APRS |
||||
2021-12-28 14:30:36,ax0,DG4BRT-6,WIDE1-1 |
||||
2021-12-28 11:14:11,ax0,DD1GO,5S0YX8 |
||||
2021-12-28 13:47:01,ax0,DG9OBI-9,US2TT6 |
||||
2021-12-27 15:29:20,ax0,DG9BFE-9,US2TR0 |
||||
2021-12-28 04:53:47,ax0,DO6HT-9,US2VT3 |
||||
2021-12-28 11:32:52,ax0,DL5UHR-9,US2TR2 |
||||
2021-12-27 14:54:30,ax0,PA0EMS-9,US2PQ4 |
||||
2021-12-28 13:54:19,ax0,PD1ATA,5S2RQ5 |
||||
2021-12-28 14:38:38,ax0,DB0LER-13,APRX29 |
||||
2021-12-28 08:44:58,ax0,OE5DRP-9,UQ3UT0 |
||||
2021-12-28 09:07:03,ax0,PE1RXF-1,APRX29 |
||||
2021-12-28 09:07:15,ax0,DB6PBG-5,APMI03 |
||||
2021-12-28 11:52:50,ax0,DO9BG-9,APOTC1 |
||||
2021-12-28 12:47:06,ax0,PA0KNW-2,APRS |
||||
2021-12-28 13:20:45,ax0,DG7ACF-9,5R1WQ2 |
@ -0,0 +1,8 @@ |
||||
2021-12-28 14:41:24,ax0,DB0PBG-5,APMI03 |
||||
2021-12-28 14:38:02,ax0,DB0LER,APRX29 |
||||
2021-12-28 05:10:44,ax0,DL0PBS-5,APMI33 |
||||
2021-12-28 14:39:31,ax0,PA0EMS,USRPR0 |
||||
2021-12-28 10:51:30,ax0,PE1RXF-7,APZMDM |
||||
2021-12-28 10:51:33,ax1,PE1RXF-1,APRX29 |
||||
2021-12-28 14:35:02,ax1,PE1RXF-7,APZMDM |
||||
2021-12-28 10:44:09,ax0,PE1RXF-2,APRX29 |
@ -0,0 +1 @@ |
||||
16.3,59.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
@ -0,0 +1 @@ |
||||
16.1,59.9,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
@ -0,0 +1,2 @@ |
||||
2021-12-28,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
@ -0,0 +1,2 @@ |
||||
2021-12-28,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
||||
2021-12-28,16.3,60.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 |
@ -0,0 +1 @@ |
||||
PE1RXF-1>APRX29,WIDE2-1:!5302.78N/00707.91E-https://meezenest.nl/pe1rxf |
@ -0,0 +1 @@ |
||||
/usr/sbin/beacon -d "APRX29" -s ax1 '!5302.78N/00707.91E-https://meezenest.nl/pe1rxf' |
@ -0,0 +1,44 @@ |
||||
################################################################################## |
||||
# Bash library for reading configuration file # |
||||
# # |
||||
# Example use: # |
||||
# # |
||||
# #!/usr/bin/env bash # |
||||
# source config.shlib; # load the config library functions # |
||||
# echo "$(config_get myvar)"; # will be found in user-cfg # |
||||
# printf -- "%s\n" "$(config_get myvar $config_file_name)"; # safer way of # |
||||
# # echoing! # |
||||
# myvar="$(config_get myvar)"; # how to just read a value without echoing # |
||||
# echo "$(config_get othervar)"; # will fall back to defaults # |
||||
# echo "$(config_get bleh)"; # "__UNDEFINED__" since it isn't set anywhere # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
config_read_file() { |
||||
(grep -E "^${2}=" -m 1 "${1}" 2>/dev/null || echo "VAR=__UNDEFINED__") | head -n 1 | cut -d '=' -f 2-; |
||||
} |
||||
|
||||
config_get() { |
||||
val="$(config_read_file "${2}" "${1}")"; |
||||
if [ "${val}" = "__UNDEFINED__" ]; then |
||||
val="$(config_read_file pe1rxf-aprs-server.cfg.defaults "${1}")"; |
||||
fi |
||||
printf -- "%s" "${val}"; |
||||
} |
@ -0,0 +1,41 @@ |
||||
# This is a template crontab for the pe1rxf-aprs-server software. Make sure crontab changes are listed in this file! |
||||
# Otherwise, changing the beacon from the website will delete your changes made with crontab -e |
||||
# |
||||
# Edit this file to introduce tasks to be run by cron. |
||||
# |
||||
# Each task to run has to be defined through a single line |
||||
# indicating with different fields when the task will be run |
||||
# and what command to run for the task |
||||
# |
||||
# To define the time you can provide concrete values for |
||||
# minute (m), hour (h), day of month (dom), month (mon), |
||||
# and day of week (dow) or use '*' in these fields (for 'any'). |
||||
# |
||||
# Notice that tasks will be started based on the cron's system |
||||
# daemon's notion of time and timezones. |
||||
# |
||||
# Output of the crontab jobs (including errors) is sent through |
||||
# email to the user the crontab file belongs to (unless redirected). |
||||
# |
||||
# For example, you can run a backup of all your user accounts |
||||
# at 5 a.m every week with: |
||||
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ |
||||
# |
||||
# For more information see the manual pages of crontab(5) and cron(8) |
||||
# |
||||
# m h dom mon dow command |
||||
# Start APRS server at boot time (delay of 1 minute is needed. Otherwise direwolf will not start for some reason) |
||||
@reboot sleep 60 && /home/marcel/ham/start_aprs_server.sh |
||||
|
||||
# Calculate minimum and maximum values from last day (run at one minute past midnight) |
||||
1 0 * * * /home/marcel/ham/aprs_utils/get_max_min_values.sh |
||||
|
||||
# Generate new graphs from telemetry data every thirty minutes |
||||
*/30 * * * * /home/marcel/ham/aprs_utils/generate_diagrams_from_aprs_data_PE1RXF-7.sh |
||||
|
||||
# Send beacon on AX0 (internal radio) |
||||
#* * * * * /home/marcel/ham/aprs_utils/send_beacon_internal_radio.sh |
||||
|
||||
#Send beacon on AX1 (external radio) |
||||
#* * * * * /home/marcel/ham/aprs_utils/send_beacon_external_radio.sh |
||||
|
@ -0,0 +1,276 @@ |
||||
#!/bin/bash |
||||
################################################################################## |
||||
# # |
||||
# Generates graphs and images of telemetry data for website # |
||||
# Run at the same frequency as telemetry data comes in # |
||||
# For example in the crontab # |
||||
# |
||||
# Data format: # |
||||
# [date],1,2,3,4,5,6,7,8,9,10 # |
||||
# # |
||||
# 1 = temperature outside # |
||||
# 2 = humidity outside # |
||||
# 3 = temperature small greenhouse # |
||||
# 4 = humidity small greenhouse # |
||||
# 5 = soil moisture small greenhouse # |
||||
# 6 = soil moisture small greenhouse # |
||||
# 7 = temperature large greenhouse # |
||||
# 8 = humidity large greenhouse # |
||||
# 9 = soil moisture large greenhouse # |
||||
# 10 = soil moisture large greenhouse # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server. If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
APRS_RECEIVED_MESSAGES_DIR=/home/marcel/ham/aprs_utils/aprs_log/ |
||||
APRS_TELEMETRY_FILE_SUFFIX=_telemetry_PE1RXF-7.dat |
||||
APRS_LATEST_TELEMETRY_FILE=latest_telemetry_PE1RXF-7.dat |
||||
APRS_MAX_DATA=telemetry_PE1RXF-7_max_values.dat |
||||
APRS_MIN_DATA=telemetry_PE1RXF-7_min_values.dat |
||||
|
||||
PUBLISH_DIR=/home/marcel/ham/web-interface/telemetry |
||||
|
||||
# Get current date YYYY-MM-DD |
||||
CURRENT_DATE=$(date +"%Y-%m-%d") |
||||
YESTERDAY_DATE=$(date --date="yesterday" +"%Y-%m-%d") |
||||
MONTH_AGO_DATE=$(date --date="1 month ago" +"%Y-%m-%d") |
||||
|
||||
APRS_TELEMETRY_FILE_TODAY="$CURRENT_DATE$APRS_TELEMETRY_FILE_SUFFIX" |
||||
APRS_TELEMETRY_FILE_YESTERDAY="$YESTERDAY_DATE$APRS_TELEMETRY_FILE_SUFFIX" |
||||
APRS_TELEMETRY_FILE="TEMP$APRS_TELEMETRY_FILE_SUFFIX" |
||||
|
||||
cat "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE_YESTERDAY" > "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" |
||||
cat "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE_TODAY" >> "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" |
||||
|
||||
|
||||
#Temperatuur buiten en in beide kassen |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Temperatuur" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d %H:%M" |
||||
set format x "%H:%M" |
||||
set xdata time |
||||
set xrange ["$YESTERDAY_DATE 00:00":"$CURRENT_DATE 23:59"] |
||||
set yrange [-20:45] |
||||
set xlabel "tijd" |
||||
set ylabel "graden Celcius" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 2 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/temperature_graph.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:2 with lines linewidth 2 title "buiten", "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:8 with lines linewidth 2 title "kleine kas", "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:4 with lines linewidth 2 title "grote kas" |
||||
EOFMarker |
||||
|
||||
#Luchtvochtigheid buiten en in beide kassen |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Luchtvochtigheid" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d %H:%M" |
||||
set format x "%H:%M" |
||||
set xdata time |
||||
set xrange ["$YESTERDAY_DATE 00:00":"$CURRENT_DATE 23:59"] |
||||
set yrange [0:100] |
||||
set xlabel "tijd" |
||||
set ylabel "%" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 2 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/humidity_graph.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:3 with lines linewidth 2 title "buiten", "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:9 with lines linewidth 2 title "kleine kas", "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:5 with lines linewidth 2 title "grote kas" |
||||
EOFMarker |
||||
|
||||
#Bodemvochtigheid in beide kassen |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Bodemvochtigheid" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d %H:%M" |
||||
set format x "%H:%M" |
||||
set xdata time |
||||
set xrange ["$YESTERDAY_DATE 00:00":"$CURRENT_DATE 23:59"] |
||||
set yrange [0:1000] |
||||
set xlabel "tijd" |
||||
set ylabel "absoluut" |
||||
set ytics 100 |
||||
set mytics 2 |
||||
set mxtics 2 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/soilmoisture_graph.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:10 with lines linewidth 2 title "kleine kas", "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" using 1:6 with lines linewidth 2 title "grote kas" |
||||
EOFMarker |
||||
|
||||
#Min-max temperatuur buiten afgelopen maand |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Minimale en maximale buitentemperatuur afgelopen maand" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d" |
||||
set format x "%d %B" |
||||
set xdata time |
||||
set xrange ["$MONTH_AGO_DATE":"$YESTERDAY_DATE"] |
||||
set yrange [-20:45] |
||||
set xlabel "tijd" |
||||
set ylabel "graden Celcius" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 7 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/minmax_temperature_outside.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_MAX_DATA" using 1:2 with lines linewidth 2 title "maxima", "$APRS_RECEIVED_MESSAGES_DIR$APRS_MIN_DATA" using 1:2 with lines linewidth 2 title "minima" |
||||
EOFMarker |
||||
#Min-max temperatuur kleine kas afgelopen maand |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Minimale en maximale temperatuur kleine kas afgelopen maand" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d" |
||||
set format x "%d %B" |
||||
set xdata time |
||||
set xrange ["$MONTH_AGO_DATE":"$YESTERDAY_DATE"] |
||||
set yrange [-20:45] |
||||
set xlabel "tijd" |
||||
set ylabel "graden Celcius" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 7 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/minmax_temperature_small_greenhouse.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_MAX_DATA" using 1:8 with lines linewidth 2 title "maxima", "$APRS_RECEIVED_MESSAGES_DIR$APRS_MIN_DATA" using 1:8 with lines linewidth 2 title "minima" |
||||
EOFMarker |
||||
#Min-max temperatuur grote kas afgelopen maand |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Minimale en maximale temperatuur grote kas afgelopen maand" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d" |
||||
set format x "%d %B" |
||||
set xdata time |
||||
set xrange ["$MONTH_AGO_DATE":"$YESTERDAY_DATE"] |
||||
set yrange [-20:45] |
||||
set xlabel "tijd" |
||||
set ylabel "graden Celcius" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 7 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/minmax_temperature_large_greenhouse.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_MAX_DATA" using 1:4 with lines linewidth 2 title "maxima", "$APRS_RECEIVED_MESSAGES_DIR$APRS_MIN_DATA" using 1:4 with lines linewidth 2 title "minima" |
||||
EOFMarker |
||||
#Min-max luchtvochtigheid buiten afgelopen maand |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Minimale en maximale luchtvochtigheid buiten afgelopen maand" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d" |
||||
set format x "%d %B" |
||||
set xdata time |
||||
set xrange ["$MONTH_AGO_DATE":"$YESTERDAY_DATE"] |
||||
set yrange [0:100] |
||||
set xlabel "tijd" |
||||
set ylabel "%" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 7 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/minmax_humidity_outside.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_MAX_DATA" using 1:3 with lines linewidth 2 title "maxima", "$APRS_RECEIVED_MESSAGES_DIR$APRS_MIN_DATA" using 1:3 with lines linewidth 2 title "minima" |
||||
EOFMarker |
||||
#Min-max luchtvochtigheid kleine kas afgelopen maand |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Minimale en maximale luchtvochtigheid kleine kas afgelopen maand" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d" |
||||
set format x "%d %B" |
||||
set xdata time |
||||
set xrange ["$MONTH_AGO_DATE":"$YESTERDAY_DATE"] |
||||
set yrange [0:100] |
||||
set xlabel "tijd" |
||||
set ylabel "%" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 7 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/minmax_humidity_small_greenhouse.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_MAX_DATA" using 1:9 with lines linewidth 2 title "maxima", "$APRS_RECEIVED_MESSAGES_DIR$APRS_MIN_DATA" using 1:9 with lines linewidth 2 title "minima" |
||||
EOFMarker |
||||
#Min-max luchtvochtigheid grote kas afgelopen maand |
||||
/usr/bin/gnuplot -persist <<-EOFMarker |
||||
set title "Minimale en maximale luchtvochtigheid grote kas afgelopen maand" font ",14" textcolor rgbcolor "royalblue" |
||||
set datafile separator "," |
||||
set timefmt "%Y-%m-%d" |
||||
set format x "%d %B" |
||||
set xdata time |
||||
set xrange ["$MONTH_AGO_DATE":"$YESTERDAY_DATE"] |
||||
set yrange [0:100] |
||||
set xlabel "tijd" |
||||
set ylabel "%" |
||||
set ytics 10 |
||||
set mytics 2 |
||||
set mxtics 7 |
||||
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mytics |
||||
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb" |
||||
set grid mxtics |
||||
set pointsize 1 |
||||
set terminal png size 1024,768 |
||||
set output "$PUBLISH_DIR/minmax_humidity_large_greenhouse.png" |
||||
plot "$APRS_RECEIVED_MESSAGES_DIR$APRS_MAX_DATA" using 1:5 with lines linewidth 2 title "maxima", "$APRS_RECEIVED_MESSAGES_DIR$APRS_MIN_DATA" using 1:5 with lines linewidth 2 title "minima" |
||||
EOFMarker |
||||
# rest of script, after gnuplot exits |
||||
|
||||
# Remove temporary file |
||||
rm "$APRS_RECEIVED_MESSAGES_DIR$APRS_TELEMETRY_FILE" |
||||
|
@ -0,0 +1,132 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Reads telemetry data file from yesterday and output minimum and maximum # |
||||
# values of every data field. # |
||||
# This script should be run once every day at midnight # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server. If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
APRS_RECEIVED_MESSAGES_DIR=/home/marcel/ham/aprs_utils/aprs_log/ |
||||
APRS_TELEMETRY_FILE_SUFFIX=_telemetry_PE1RXF-7.dat |
||||
MIN_TELEMETRY_FILE=telemetry_PE1RXF-7_min_values.dat |
||||
MAX_TELEMETRY_FILE=telemetry_PE1RXF-7_max_values.dat |
||||
|
||||
PUBLISH_DIR=/home/marcel/ham/aprs_utils/publish |
||||
|
||||
# Get current and yesterdays date YYYY-MM-DD |
||||
CURRENT_DATE=$(date +"%Y-%m-%d") |
||||
YESTERDAY_DATE=$(date --date="yesterday" +"%Y-%m-%d") |
||||
|
||||
APRS_TELEMETRY_FILE="$APRS_RECEIVED_MESSAGES_DIR$YESTERDAY_DATE$APRS_TELEMETRY_FILE_SUFFIX" |
||||
|
||||
SINGLE_SHOT=0 |
||||
|
||||
declare -a max |
||||
declare -a min |
||||
|
||||
##################################################################### |
||||
# Evaluate a floating point number conditional expression. |
||||
# Bash itself cannot work with floating point, so we use bc |
||||
|
||||
function float_cond() |
||||
{ |
||||
local cond=0 |
||||
if [[ $# -gt 0 ]]; then |
||||
cond=$(echo "$*" | bc -q 2>/dev/null) |
||||
if [[ -z "$cond" ]]; then cond=0; fi |
||||
if [[ "$cond" != 0 && "$cond" != 1 ]]; then cond=0; fi |
||||
fi |
||||
local stat=$((cond == 0)) |
||||
return $stat |
||||
} |
||||
|
||||
#Read file line by line |
||||
while read LINE |
||||
do |
||||
#echo "$LINE" |
||||
#Datafiled should have comma as field seperator, so asume this and put values in array for later testing if data is valid |
||||
IFS=',' read -r -a array <<< "$LINE" |
||||
|
||||
cnt=0 |
||||
for index in "${!array[@]}" |
||||
do |
||||
|
||||
#First time in the loop: we fill the min and max values with the first values in the array |
||||
if [[ $SINGLE_SHOT -eq 0 ]]; then |
||||
#echo "First: ${array[index]}" |
||||
max[cnt]=${array[index]} |
||||
min[cnt]=${array[index]} |
||||
|
||||
else |
||||
#bash cannot work with floats, so we use this function instead |
||||
if float_cond "${array[index]} > ${max[cnt]}"; then |
||||
#if [[ ${array[index]} > ${max[cnt]} ]]; then |
||||
#echo "Max: $cnt ${max[cnt]} $index ${array[index]}" |
||||
max[cnt]=${array[index]} |
||||
|
||||
fi |
||||
#bash cannot work with floats, so we use this function instead |
||||
if float_cond "${array[index]} < ${min[cnt]}"; then |
||||
#if [[ ${array[index]} < ${min[cnt]} ]]; then |
||||
min[cnt]=${array[index]} |
||||
# echo "Min: $cnt $index ${array[index]}" |
||||
fi |
||||
fi |
||||
#echo "$cnt" |
||||
cnt=$((cnt+1)) |
||||
|
||||
done |
||||
|
||||
#First time through loop is different from all the rest |
||||
SINGLE_SHOT=1 |
||||
|
||||
#done < /dev/stdin |
||||
done < "$APRS_TELEMETRY_FILE" |
||||
|
||||
#Store minimum values in file (append file) |
||||
for index in "${!min[@]}" |
||||
do |
||||
#first data field: remove time from date/time field and no leading comma |
||||
if [[ index -eq 0 ]] ; then |
||||
min[index]="$(echo "${min[index]}" | cut -b 1-10)" |
||||
echo -n "${min[index]}" >> "$APRS_RECEIVED_MESSAGES_DIR$MIN_TELEMETRY_FILE" |
||||
else |
||||
echo -n ",${min[index]}" >> "$APRS_RECEIVED_MESSAGES_DIR$MIN_TELEMETRY_FILE" |
||||
fi |
||||
done |
||||
|
||||
#New line |
||||
echo "" >> "$APRS_RECEIVED_MESSAGES_DIR$MIN_TELEMETRY_FILE" |
||||
|
||||
#Store maximum values in file (append file) |
||||
for index in "${!max[@]}" |
||||
do |
||||
#first data field: remove time from date/time field and no leading comma |
||||
if [[ index -eq 0 ]] ; then |
||||
max[index]="$(echo "${max[index]}" | cut -b 1-10)" |
||||
echo -n "${max[index]}" >> "$APRS_RECEIVED_MESSAGES_DIR$MAX_TELEMETRY_FILE" |
||||
else |
||||
echo -n ",${max[index]}" >> "$APRS_RECEIVED_MESSAGES_DIR$MAX_TELEMETRY_FILE" |
||||
fi |
||||
done |
||||
|
||||
#New line |
||||
echo "" >> "$APRS_RECEIVED_MESSAGES_DIR$MAX_TELEMETRY_FILE" |
@ -0,0 +1,73 @@ |
||||
# Configuration file for PE1RXF-APRS-server |
||||
# |
||||
# Must be readable AND writable by www-data! |
||||
# |
||||
# This file is read periodically, so just changing this file will automatically |
||||
# update take effect. |
||||
|
||||
# Internal radio settings |
||||
ax0_name=Digipeater 2 meter |
||||
ax0_frequency=144.800 MHz |
||||
|
||||
# Beacon time internal radio (ax0) in minutes. 0-60, where 0 disables beaconing. |
||||
ax0_beacon_time=0 |
||||
ax0_beacon_destination=APRX29 |
||||
ax0_beacon_path=WIDE2-1 |
||||
ax0_beacon_position=!5302.78N/00707.91E- |
||||
ax0_beacon_comment=https://meezenest.nl/pe1rxf |
||||
ax0_beacon_file=/home/marcel/ham/aprs_utils/beacon_ax0.txt |
||||
ax0_transmit_directory=/home/marcel/ham/aprs_utils/aprs_files_to_transmit/ |
||||
|
||||
# Predefined messages |
||||
ax0_message1_id=Test naar PE1RXF |
||||
ax0_message1_text=Test message |
||||
ax0_message1_destination=PE1RXF-7 |
||||
ax0_message1_path=WIDE2-2 |
||||
|
||||
ax0_message2_id=Fortune bot |
||||
ax0_message2_text=fortune |
||||
ax0_message2_destination=KM6LYW-9 |
||||
ax0_message2_path=WIDE2-2 |
||||
|
||||
ax0_message3_id=Message 3 |
||||
ax0_message3_text=Thirth message |
||||
ax0_message3_destination=PE1RXF-7 |
||||
ax0_message3_path=WIDE2-2 |
||||
|
||||
ax0_message4_id=Message 4 |
||||
ax0_message4_text=Fourth message |
||||
ax0_message4_destination=PE1RXF-7 |
||||
ax0_message4_path=WIDE2-2 |
||||
|
||||
# External radio settings |
||||
ax1_name=Digipeater 70 cm |
||||
ax1_frequency=432.500 MHz |
||||
|
||||
# Beacon time external radio (ax1) in minutes. 0-60, where 0 disables beaconing. |
||||
ax1_beacon_time=0 |
||||
ax1_beacon_destination=APRX29 |
||||
ax1_beacon_path=none |
||||
ax1_beacon_position=!5302.78N/00707.91E- |
||||
ax1_beacon_comment=https://meezenest.nl/pe1rxf |
||||
ax1_beacon_file=/home/marcel/ham/aprs_utils/beacon_ax1.txt |
||||
|
||||
# Predefined messages |
||||
ax1_message1_id=Message 1 |
||||
ax1_message1_text=First message |
||||
ax1_message1_destination=PE1RXF-7 |
||||
ax1_message1_path=WIDE2-2 |
||||
|
||||
ax1_message2_id=Message 2 |
||||
ax1_message2_text=Second message |
||||
ax1_message2_destination=PE1RXF-7 |
||||
ax1_message2_path=WIDE2-2 |
||||
|
||||
ax1_message3_id=Message 3 |
||||
ax1_message3_text=Thirth message |
||||
ax1_message3_destination=PE1RXF-7 |
||||
ax1_message3_path=WIDE2-2 |
||||
|
||||
ax1_message4_id=Message 4 |
||||
ax1_message4_text=Fourth message |
||||
ax1_message4_destination=PE1RXF-7 |
||||
ax1_message4_path=WIDE2-2 |
@ -0,0 +1,71 @@ |
||||
# Default configuration file for PE1RXF-APRS-server |
||||
# |
||||
# The values in this file are read only if the correspondinf values in the main configuration file are missing. |
||||
|
||||
# Internal radio settings |
||||
ax0_name=Digipeater 2 meter |
||||
ax0_frequency=144.800 MHz |
||||
|
||||
# Beacon time internal radio (ax0) in minutes. 0-60, where 0 disables beaconing. |
||||
ax0_beacon_time=0 |
||||
ax0_beacon_destination=APRX29 |
||||
ax0_beacon_path=WIDE2-1 |
||||
ax0_beacon_position=!5302.78N/00707.91E- |
||||
ax0_beacon_comment=https://meezenest.nl/pe1rxf |
||||
ax0_beacon_file=/home/marcel/ham/aprs_utils/beacon_ax0.txt |
||||
ax0_transmit_directory=/home/marcel/ham/aprs_utils/aprs_files_to_transmit/ |
||||
|
||||
# Predefined messages |
||||
ax0_message1_id=Message 1 |
||||
ax0_message1_text=First message |
||||
ax0_message1_destination=PE1RXF-7 |
||||
ax0_message1_path=none |
||||
|
||||
ax0_message2_id=Message 2 |
||||
ax0_message2_text=Second message |
||||
ax0_message2_destination=PE1RXF-7 |
||||
ax0_message2_path=WIDE2-1 |
||||
|
||||
ax0_message3_id=Message 3 |
||||
ax0_message3_text=Thirth message |
||||
ax0_message3_destination=PE1RXF-7 |
||||
ax0_message3_path=WIDE2-2 |
||||
|
||||
ax0_message4_id=Message 4 |
||||
ax0_message4_text=Fourth message |
||||
ax0_message4_destination=PE1RXF-7 |
||||
ax0_message4_path=WIDE3-3 |
||||
|
||||
# External radio settings |
||||
ax1_name=Digipeater 70 cm |
||||
ax1_frequency=432.500 MHz |
||||
|
||||
# Beacon time external radio (ax1) in minutes. 0-60, where 0 disables beaconing. |
||||
ax1_beacon_time=0 |
||||
ax1_beacon_destination=APRX29 |
||||
ax1_beacon_path=none |
||||
ax1_beacon_position=!5302.78N/00707.91E- |
||||
ax1_beacon_comment=https://meezenest.nl/pe1rxf |
||||
ax1_beacon_file=/home/marcel/ham/aprs_utils/beacon_ax1.txt |
||||
|
||||
# Predefined messages |
||||
ax1_message1_id=Message 1 |
||||
ax1_message1_text=First message |
||||
ax1_message1_destination=PE1RXF-7 |
||||
ax1_message1_path=WIDE2-2 |
||||
|
||||
ax1_message2_id=Message 2 |
||||
ax1_message2_text=Second message |
||||
ax1_message2_destination=PE1RXF-7 |
||||
ax1_message2_path=WIDE2-2 |
||||
|
||||
ax1_message3_id=Message 3 |
||||
ax1_message3_text=Thirth message |
||||
ax1_message3_destination=PE1RXF-7 |
||||
ax1_message3_path=WIDE2-2 |
||||
|
||||
ax1_message4_id=Message 4 |
||||
ax1_message4_text=Fourth message |
||||
ax1_message4_destination=PE1RXF-7 |
||||
ax1_message4_path=WIDE2-2 |
||||
|
@ -0,0 +1,62 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Main loop of PE1RXF-APRS-server. # |
||||
# Here it all starts. From here all functions are called. # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
source /home/marcel/ham/aprs_utils/config.shlib; # load the config library functions |
||||
ConfigFile="/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg" |
||||
|
||||
web_interface_config_file="/home/marcel/ham/web-interface/config/pe1rxf-aprs-server.cfg" |
||||
|
||||
ConfigFileMD5_previous=0 |
||||
|
||||
while : |
||||
do |
||||
|
||||
# First check if configuration file has changed. If so, update the processes with the new changes. |
||||
# Ontherwise, do nothing. |
||||
ConfigFileMD5=$(md5sum $ConfigFile | cut -d ' ' -f1) |
||||
if [ $ConfigFileMD5 != $ConfigFileMD5_previous ]; then |
||||
echo "Configuration file has changed." |
||||
|
||||
# Update beacon files and corresponding crontab entries |
||||
/home/marcel/ham/aprs_utils/set_beacon.sh -c $ConfigFile |
||||
|
||||
ConfigFileMD5_previous=$ConfigFileMD5 |
||||
fi |
||||
|
||||
# If configuration file on web interface exists, we copy it to the program directory |
||||
# and remove it from the web interface |
||||
if [ -f "$web_interface_config_file" ]; then |
||||
cp $web_interface_config_file $ConfigFile |
||||
rm -f $web_interface_config_file |
||||
|
||||
# change beacon settings |
||||
/home/marcel/ham/aprs_utils/set_beacon.sh -c $ConfigFile |
||||
fi |
||||
|
||||
echo |
||||
echo "Loop repeats every 1 seconds. Press [CTRL+C] to stop.." |
||||
sleep 1 |
||||
|
||||
done |
@ -0,0 +1,217 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Background process started by the initializing script start_aprs_server.sh # |
||||
# # |
||||
# It processes all incomming messages for PE1RXF and sends acknowledges when # |
||||
# if asked for (via kissutil for ax0 and beacon for ax1. It also prosesses the # |
||||
# special telemetry messages from PE1RXF devices. # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
# Filters out all APRS messages to PE1RXF-1 and saves these to file. |
||||
# Generate and send acknowledge message when incomming message ask for it. |
||||
# Also, reads APRS message and when it is telemetry converts it to a format readeble by gnuplot |
||||
# |
||||
# The script aprs_utils.sh starts a filters means of tail | grep on the log file of aprx. |
||||
# The output of this command goes to this script via stdin. This script reads this line by line |
||||
# and sends an acknowledgement to the stations asking for one. This is done via kissutil, which |
||||
# is also started the script aprs_utils.sh |
||||
|
||||
# Direectory where kissutils expect files to send |
||||
APRS_SEND_MESSAGE_DIRECTORY=/home/marcel/ham/aprs_utils/aprs_files_to_transmit/ |
||||
|
||||
# Directory where APRS messages are stored |
||||
APRS_RECEIVED_MESSAGES_DIR=/home/marcel/ham/aprs_utils/aprs_log/ |
||||
MESSAGE_FILE=aprs_received_messages.log |
||||
|
||||
# Get current date YYYY-MM-DD |
||||
#CURRENT_DATE=$(date +"%Y-%m-%d") |
||||
|
||||
#Read file line by line and send acknowledge if needed |
||||
while read LINE |
||||
do |
||||
|
||||
################# |
||||
# Section: filter out APRS messages and generate acknowledge if needed |
||||
################# |
||||
|
||||
# Get current date YYYY-MM-DD (do this every time, because a day may already have passed) |
||||
CURRENT_DATE=$(date +"%Y-%m-%d") |
||||
CURRENT_DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S") |
||||
|
||||
# figure out who sent the message |
||||
# Check channel 1 (internal radio) |
||||
CALL="$(grep -o -P "(?<=PE1RXF-1 d \*).+?\>"<<<$LINE)" |
||||
PORT="ax0" |
||||
|
||||
# If call is empty, frame not from channel 1, maybe from channel 2? |
||||
if [ -z $CALL ]; then |
||||
CALL="$(grep -o -P "(?<=PE1RXF-2 d \*).+?\>"<<<$LINE)" |
||||
PORT="ax1" |
||||
fi |
||||
|
||||
# Lets do something with the message from channel 1 or 2 |
||||
if [[ $CALL ]]; then |
||||
|
||||
# Remove last character from string |
||||
CALL=${CALL::-1} |
||||
|
||||
ACKNOWLEDGE_NUMBER="$(grep -o -P '(?<={).*'<<<$LINE)" |
||||
|
||||
#Write messages to file with name "YYYY-MM-DD_messages_from_NOCALL.log (append) |
||||
#echo "$LINE" >> "$APRS_RECEIVED_MESSAGES_DIR""$CURRENT_DATE""_messages_from_""$CALL"".log" |
||||
|
||||
# Get full path of message |
||||
if [ $PORT == "ax0" ]; then |
||||
FULL_PATH="$(grep -o -P '(?<=PE1RXF-1 d \*).+?:'<<<$LINE)" |
||||
else |
||||
FULL_PATH="$(grep -o -P '(?<=PE1RXF-2 d \*).+?:'<<<$LINE)" |
||||
fi |
||||
|
||||
FULL_PATH="$(grep -o -P '(?<=\>).*'<<<$FULL_PATH)" |
||||
# Remove last character from string |
||||
FULL_PATH=${FULL_PATH::-1} |
||||
|
||||
# Messages direct from sender do not contain a '*' in the path |
||||
DIRECT="$(grep '*' <<<$FULL_PATH)" |
||||
if [ -z $DIRECT ]; then |
||||
DIRECT="true" |
||||
else |
||||
unset DIRECT |
||||
fi |
||||
# First call in path is destination |
||||
DESTINATION="$(awk -F "," '{ print $1} ' <<<$FULL_PATH)" |
||||
|
||||
# get the message |
||||
MESSAGE="$(grep -o -P '(?<=::).*'<<<$LINE)" |
||||
MESSAGE="$(grep -o -P '(?<=:).*'<<<$MESSAGE)" |
||||
|
||||
# Write message to file |
||||
echo "$CURRENT_DATE_TIME"",""$PORT"",""$CALL"",""$DESTINATION",\"$MESSAGE\" >> "$APRS_RECEIVED_MESSAGES_DIR""$MESSAGE_FILE" |
||||
|
||||
#Send incomming message as email |
||||
#echo "$LINE" | /home/marcel/ham/aprs_utils/send_aprs_message_to_email.sh |
||||
|
||||
#Generate acknowledge frame and put in in de directory where kissutil can find (ax0) it or (for channel ax1) send it via beacon |
||||
if [[ $ACKNOWLEDGE_NUMBER ]]; then |
||||
|
||||
# if call is less than 9 characters, add spaces at the end (according to the APRS protocol) |
||||
printf -v FORMATTED_CALL %-9.9s "$CALL" |
||||
|
||||
OWN_CALL="$(grep "PE1RXF"<<<$CALL)" |
||||
|
||||
# Message on port ax0 |
||||
if [ $PORT == "ax0" ]; then |
||||
|
||||
# Local (own) stations do not need to be digipeated |
||||
if [ $OWN_CALL ]; then |
||||
APRS_FRAME="PE1RXF-1>APRX29::$FORMATTED_CALL:ack$ACKNOWLEDGE_NUMBER" |
||||
# Everyone else is digipeated |
||||
else |
||||
APRS_FRAME="PE1RXF-1>APRX29,WIDE2-2::$FORMATTED_CALL:ack$ACKNOWLEDGE_NUMBER" |
||||
fi |
||||
|
||||
# Send acknowledge frame |
||||
APRS_TRANSMIT_FILE="acknowledge_""$FORMATTED_CALL""_message_""$ACKNOWLEDGE_NUMBER" |
||||
echo "$APRS_FRAME" > "$APRS_SEND_MESSAGE_DIRECTORY$APRS_TRANSMIT_FILE" |
||||
|
||||
# Message on port ax1 |
||||
else |
||||
|
||||
# Local (own) stations do not need to be digipeated |
||||
if [ $OWN_CALL ]; then |
||||
APRS_HEADER="APRX29" |
||||
APRS_FRAME="::$FORMATTED_CALL:ack$ACKNOWLEDGE_NUMBER" |
||||
args[0]=-d |
||||
args[1]="APRX29" |
||||
args[2]=-s |
||||
args[3]=ax1 |
||||
args[4]=":$FORMATTED_CALL:ack$ACKNOWLEDGE_NUMBER" |
||||
# Everyone else is digipeated |
||||
else |
||||
APRS_HEADER="APRX29 WIDE2-2" |
||||
APRS_FRAME="::$FORMATTED_CALL:ack$ACKNOWLEDGE_NUMBER" |
||||
args[0]=-d |
||||
args[1]="APRX29 WIDE2-2" |
||||
args[2]=-s |
||||
args[3]=ax1 |
||||
args[4]=":$FORMATTED_CALL:ack$ACKNOWLEDGE_NUMBER" |
||||
fi |
||||
|
||||
# use beacon to send acknowledge frame |
||||
#echo "/usr/sbin/beacon -d '$APRS_HEADER' -s ax1 '$APRS_FRAME'" |
||||
#/usr/sbin/beacon -d "$APRS_HEADER" -s ax1 "$APRS_FRAME" |
||||
/usr/sbin/beacon "${args[@]}" |
||||
|
||||
fi |
||||
|
||||
fi |
||||
|
||||
################# |
||||
# Section: process APRS telemetry to format readable by gnuplot |
||||
################# |
||||
|
||||
# get date field |
||||
DATE="$(echo $LINE | cut -b 1-10)" |
||||
|
||||
# get time field |
||||
TIME="$(echo $LINE | cut -b 12-16)" |
||||
|
||||
# get telemetry fields and remove empty spaces and optional acknowledge message if it is present |
||||
TELEMETRY="$(echo $LINE | cut -b 65- | sed 's/{.*//' | tr -d "[:blank:]")" |
||||
|
||||
#Datafiled should have comma as field seperator, so asume this and put values in array for later testing if data is valid |
||||
IFS=',' read -r -a array <<< "$TELEMETRY" |
||||
|
||||
# Test if message contains valid numbers. It could be an acknowledge or beacon etc. |
||||
TELEMETRY_ERROR=0 |
||||
for index in "${!array[@]}" |
||||
do |
||||
|
||||
if ! [[ ${array[index]} =~ ^-?[0-9]+([.][0-9]+)?$ ]] ; then |
||||
TELEMETRY_ERROR=1 |
||||
fi |
||||
|
||||
done |
||||
|
||||
# If telemetry message is valid, store it (change APRS date/time (UTM) with local time) |
||||
if [ $TELEMETRY_ERROR -eq 0 ] ; then |
||||
|
||||
# Get current date and time YYYY-MM-DD %H:%M for local time stamp (do this every time, because a day may already have passed) |
||||
LOCAL_DATE_TIME=$(date +"%Y-%m-%d %H:%M") |
||||
|
||||
#Format line by combining all needed fields |
||||
DATA_STRING="$(echo "$LOCAL_DATE_TIME","$TELEMETRY")" |
||||
#| tr -d "[:blank:]")" |
||||
|
||||
#Write messages to file with name "YYYY-MM-DD_telemetry_NOCALL.log (append) |
||||
echo "$DATA_STRING" >> "$APRS_RECEIVED_MESSAGES_DIR""$CURRENT_DATE""_telemetry_""$CALL"".dat" |
||||
|
||||
#Write last telemetry message to file (overwrite) for current values |
||||
echo "$TELEMETRY" > "$APRS_RECEIVED_MESSAGES_DIR""latest_telemetry_""$CALL"".dat" |
||||
|
||||
fi |
||||
|
||||
fi |
||||
# end channel 1 |
||||
|
||||
done < /dev/stdin |
||||
|
@ -0,0 +1,182 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Background process started by the initializing script start_aprs_server.sh # |
||||
# # |
||||
# It processes all incomming traffic and filters out heard stations. # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
# The script aprs_utils.sh starts a filters means of tail | grep on the log file of aprx. |
||||
# The output of this command goes to this script via stdin. This script reads this line by line. |
||||
|
||||
# Directory where APRS data files are stored |
||||
APRS_DATA_DIR=/home/marcel/ham/aprs_utils/aprs_log/ |
||||
APRS_STATIONS_HEARD_DIRECT=aprs_stations_heard_direct.log |
||||
APRS_STATIONS_HEARD_DIGIPEATED=aprs_stations_heard_digipeated.log |
||||
|
||||
# If files do not exist, create them |
||||
if [ ! -f "$APRS_DATA_DIR$APRS_STATIONS_HEARD_DIRECT" ]; then |
||||
touch $APRS_DATA_DIR$APRS_STATIONS_HEARD_DIRECT |
||||
fi |
||||
if [ ! -f "$APRS_DATA_DIR$APRS_STATIONS_HEARD_DIGIPEATED" ]; then |
||||
touch $APRS_DATA_DIR$APRS_STATIONS_HEARD_DIGIPEATED |
||||
fi |
||||
|
||||
# Maybe there is an old temporary file still pressent: remove it |
||||
for ACTIVE_FILE in $APRS_STATIONS_HEARD_DIRECT $APRS_STATIONS_HEARD_DIGIPEATED |
||||
do |
||||
rm $APRS_DATA_DIR$ACTIVE_FILE".tmp" |
||||
done |
||||
|
||||
# Get current date YYYY-MM-DD |
||||
#CURRENT_DATE=$(date +"%Y-%m-%d") |
||||
CURRENT_DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S") |
||||
LAST_EPOCH_DATE="$(date -d"$CURRENT_DATE_TIME" +%s)" |
||||
|
||||
#Read file line by line and send acknowledge if needed |
||||
while read LINE |
||||
do |
||||
|
||||
# Start filter for received messages to PE1RXF (all sufixes) |
||||
# Messages addressed to PE1RXF are stored in file /home/marcel/ham/aprs_utils/aprs_received_messages.log |
||||
MESSAGE_FOR_PE1RXF="$(grep "::PE1RXF"<<<$LINE)" |
||||
if [[ $MESSAGE_FOR_PE1RXF ]]; then |
||||
#echo "Message from PE1RXF" |
||||
/home/marcel/ham/aprs_utils/process_aprs_messages.sh <<<$MESSAGE_FOR_PE1RXF |
||||
fi |
||||
|
||||
# Get current date YYYY-MM-DD (do this every time, because a day may already have passed) |
||||
CURRENT_DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S") |
||||
CURRENT_DATE=$(date +"%Y-%m-%d") |
||||
|
||||
# figure out who sent the message |
||||
# Check channel 1 (internal radio) |
||||
CALL="$(grep -o -P "(?<=PE1RXF-1 d \*).+?\>"<<<$LINE)" |
||||
PORT="ax0" |
||||
|
||||
# If call is empty, frame not from channel 1, maybe from channel 2? |
||||
if [ -z $CALL ]; then |
||||
CALL="$(grep -o -P "(?<=PE1RXF-2 d \*).+?\>"<<<$LINE)" |
||||
PORT="ax1" |
||||
fi |
||||
|
||||
# Lets do something with the frame from channel 1 or 2 |
||||
if [[ $CALL ]]; then |
||||
|
||||
# Remove last character from string |
||||
CALL=${CALL::-1} |
||||
|
||||
# Get full path of message |
||||
if [ $PORT == "ax0" ]; then |
||||
FULL_PATH="$(grep -o -P '(?<=PE1RXF-1 d \*).+?:'<<<$LINE)" |
||||
else |
||||
FULL_PATH="$(grep -o -P '(?<=PE1RXF-2 d \*).+?:'<<<$LINE)" |
||||
fi |
||||
|
||||
FULL_PATH="$(grep -o -P '(?<=\>).*'<<<$FULL_PATH)" |
||||
# Remove last character from string |
||||
FULL_PATH=${FULL_PATH::-1} |
||||
|
||||
# Messages direct from sender do not contain a '*' in the path |
||||
DIRECT="$(grep '*' <<<$FULL_PATH)" |
||||
if [ -z $DIRECT ]; then |
||||
DIRECT="true" |
||||
else |
||||
unset DIRECT |
||||
fi |
||||
# First call in path is destination |
||||
DESTINATION="$(awk -F "," '{ print $1} ' <<<$FULL_PATH)" |
||||
|
||||
#echo "Port: " $PORT |
||||
#echo "Call:" $CALL |
||||
#echo "Path:" $FULL_PATH |
||||
#echo "Destination: "$DESTINATION |
||||
|
||||
# Select correct log file to use: direct or digipeated |
||||
if [ $DIRECT ]; then |
||||
ACTIVE_FILE=$APRS_STATIONS_HEARD_DIRECT |
||||
else |
||||
ACTIVE_FILE=$APRS_STATIONS_HEARD_DIGIPEATED |
||||
fi |
||||
|
||||
# get line number where call occurs (will return NULL if call is never heard) |
||||
LINE_NUMBER="$(grep -n $PORT","$CALL "$APRS_DATA_DIR$ACTIVE_FILE" | cut -d : -f 1)" |
||||
#LINE_NUMBER=2 |
||||
|
||||
# If call already heard: replace line |
||||
if [[ $LINE_NUMBER ]]; then |
||||
# replace found line with new date and time |
||||
#SED_CMD="'$LINE_NUMBER c\\""$CURRENT_DATE_TIME"",""$CALL"","$DESTINATION"' ""$APRS_DATA_DIR""$ACTIVE_FILE" |
||||
#echo $SED_CMD |
||||
RESULT="$(sed -i "$LINE_NUMBER c\\$CURRENT_DATE_TIME,$PORT,$CALL,$DESTINATION" $APRS_DATA_DIR$ACTIVE_FILE )" |
||||
# If call not heard before: add to file |
||||
else |
||||
echo "$CURRENT_DATE_TIME"",""$PORT"",""$CALL"",""$DESTINATION" >> "$APRS_DATA_DIR""$ACTIVE_FILE" |
||||
fi |
||||
|
||||
|
||||
fi |
||||
|
||||
|
||||
# Do maintenance on all log files (every 10 minutes) |
||||
# Remove all heard calls older than 24 hours |
||||
EPOCH_DATE="$(date -d"$CURRENT_DATE_TIME" +%s)" |
||||
|
||||
EPOCH_COUNTER=$((EPOCH_DATE-LAST_EPOCH_DATE)) |
||||
|
||||
if [ "$EPOCH_COUNTER" -gt "600" ]; then |
||||
LAST_EPOCH_DATE="$EPOCH_DATE" |
||||
|
||||
for ACTIVE_FILE in $APRS_STATIONS_HEARD_DIRECT $APRS_STATIONS_HEARD_DIGIPEATED |
||||
do |
||||
touch $APRS_DATA_DIR$ACTIVE_FILE".tmp" |
||||
LINE_NR=1 |
||||
while read FILE_LINE; do |
||||
|
||||
# reading each line |
||||
|
||||
# echo "Line No. $LINE_NR : $FILE_LINE" |
||||
LINE_DATE="$(awk -F "," '{ print $1} ' <<<$FILE_LINE)" |
||||
EPOCH_LINE_DATE="$(date -d"$LINE_DATE" +%s)" |
||||
# echo $EPOCH_LINE_DATE |
||||
ELAPSED_TIME=$((EPOCH_DATE-EPOCH_LINE_DATE)) |
||||
# echo $ELAPSED_TIME |
||||
|
||||
# Entry older than 24 hours? Remove entry |
||||
if [ "$ELAPSED_TIME" -lt "86400" ]; then |
||||
#RESULT="$(sed -e "$LINE_NR d" $APRS_DATA_DIR$ACTIVE_FILE >> $APRS_DATA_DIR$ACTIVE_FILE".tmp")" |
||||
echo $FILE_LINE >> $APRS_DATA_DIR$ACTIVE_FILE".tmp" |
||||
# echo "OUD" |
||||
fi |
||||
|
||||
LINE_NR=$((LINE_NR+1)) |
||||
|
||||
done < $APRS_DATA_DIR$ACTIVE_FILE |
||||
cp $APRS_DATA_DIR$ACTIVE_FILE".tmp" $APRS_DATA_DIR$ACTIVE_FILE |
||||
rm $APRS_DATA_DIR$ACTIVE_FILE".tmp" |
||||
|
||||
done |
||||
fi |
||||
# END: remove all heard calls older than 24 hours |
||||
|
||||
|
||||
done < /dev/stdin |
||||
|
@ -0,0 +1,52 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Send beacon via APRS channel 2 (ax1) # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server. If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
source /home/marcel/ham/aprs_utils/config.shlib; # load the config library functions |
||||
|
||||
ConfigFile="/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg" |
||||
BEACON_FILE="$(config_get ax1_beacon_file $ConfigFile)" |
||||
|
||||
if [ -f "$BEACON_FILE" ]; then |
||||
BEACON_TEXT=$(cat "$BEACON_FILE") |
||||
|
||||
# The BEACON_FILE holds the command for sending a beacon. So make this file part of the script. |
||||
# I shouldn't really do this, as it is a potential security risk. But the BEACON_FILE is as safe as this script itself. |
||||
# The BEACON_FILE can not be altered via the web interface, but only by the main program. So it should be ok. |
||||
# But this makes the code potential self altering, which is bad! Realy realy bad! |
||||
# But than again, is it really not the same as calling an external program from the script, as this program can also be alterred. |
||||
# Anyway, enough of my rambling, let's continue with the script. |
||||
|
||||
# To be safe, lets do some minimal safety checks before executing the external file: |
||||
|
||||
# BEACON_FILE should only have one line: |
||||
NR_OF_LINES=$(awk 'END { print NR }' $BEACON_FILE) |
||||
# And this line should contain the beacon command: |
||||
RESULT=$(grep "/usr/sbin/beacon" $BEACON_FILE) |
||||
|
||||
if [ -n "$RESULT" ] && [ $NR_OF_LINES -eq 1 ]; then |
||||
# Send the beacon |
||||
. $BEACON_FILE |
||||
fi |
||||
|
||||
fi |
@ -0,0 +1,36 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Send beacon via APRS channel 1 (ax0) # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server. If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
source /home/marcel/ham/aprs_utils/config.shlib; # load the config library functions |
||||
|
||||
ConfigFile="/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg" |
||||
BEACON_FILE="$(config_get ax0_beacon_file $ConfigFile)" |
||||
TRANSMIT_LOCATION="$(config_get ax0_transmit_directory $ConfigFile)" |
||||
|
||||
if [ -f "$BEACON_FILE" ]; then |
||||
/bin/cp "$BEACON_FILE" "$TRANSMIT_LOCATION" |
||||
fi |
||||
|
||||
|
||||
|
@ -0,0 +1,131 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Send an APRS message consrructed from the given parameters. # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# NOTE: the ax25 utility 'beacon' has a bug: the first few times it is called # |
||||
# the send string ends with some random characters. After these first few # |
||||
# times it all comes good and the utility works fine. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
source /home/marcel/ham/aprs_utils/config.shlib; # load the config library functions |
||||
ConfigFile=/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg |
||||
|
||||
# Directory where APRS messages are stored |
||||
APRS_RECEIVED_MESSAGES_DIR=/home/marcel/ham/aprs_utils/aprs_log/ |
||||
MESSAGE_FILE=aprs_send_messages.log |
||||
|
||||
############################################################ |
||||
# Help # |
||||
############################################################ |
||||
Help() |
||||
{ |
||||
# Display Help |
||||
echo "Send APRS message." |
||||
echo |
||||
echo "Syntax: set_beacon.sh [-i <interface>|-c <call>|-p <path>|-m <message>]" |
||||
echo "Options:" |
||||
echo "-i AX.25 interface (ax0 or ax1)" |
||||
echo "-c Destination call" |
||||
echo "-p Path: 0=none, WIDE2-1, WIDE2-2, WIDE3-3 or call of digipeater" |
||||
echo "-m Message to send." |
||||
echo |
||||
} |
||||
|
||||
############################################################ |
||||
############################################################ |
||||
# Main program # |
||||
############################################################ |
||||
############################################################ |
||||
|
||||
# Set variables |
||||
Interface="0" |
||||
Call="0" |
||||
Path="0" |
||||
Message="" |
||||
|
||||
############################################################ |
||||
# Process the input options. # |
||||
############################################################ |
||||
# Get the options |
||||
while getopts i:c:p:m: flag; do |
||||
case "${flag}" in |
||||
i) # Interface |
||||
Interface=${OPTARG};; |
||||
c) # Destination Call |
||||
Call=${OPTARG};; |
||||
p) # Path |
||||
Path=${OPTARG};; |
||||
m) # Message |
||||
Message=${OPTARG};; |
||||
\?) # Invalid option |
||||
echo "Syntax error!" |
||||
Help |
||||
exit;; |
||||
esac |
||||
done |
||||
|
||||
CURRENT_DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S") |
||||
|
||||
if [ "$Interface" == "ax0" ]; then |
||||
|
||||
# Log message |
||||
echo "$CURRENT_DATE_TIME,ax0,$Call,APRX29,$Message" >> $APRS_RECEIVED_MESSAGES_DIR$MESSAGE_FILE |
||||
|
||||
# if call is less than 9 characters, add spaces at the end (according to the APRS protocol) |
||||
printf -v Call %-9.9s "$Call" |
||||
if [ "$Path" == "0" ]; then |
||||
APRS_FRAME="PE1RXF-1>APRX29::$Call:$Message" |
||||
else |
||||
APRS_FRAME="PE1RXF-1>APRX29,$Path::$Call:$Message" |
||||
fi |
||||
AX0_APRS_TRANSMIT_DIR="$(config_get ax0_transmit_directory $ConfigFile)" |
||||
echo "$APRS_FRAME" > "$AX0_APRS_TRANSMIT_DIR"message.msg |
||||
#echo "$APRS_FRAME $AX0_APRS_TRANSMIT_DIR" |
||||
|
||||
else |
||||
# Log message |
||||
echo "$CURRENT_DATE_TIME,ax1,$Call,APRX29,$Message" >> $APRS_RECEIVED_MESSAGES_DIR$MESSAGE_FILE |
||||
|
||||
# if call is less than 9 characters, add spaces at the end (according to the APRS protocol) |
||||
printf -v Call %-9.9s "$Call" |
||||
if [ "$Path" == "0" ]; then |
||||
APRS_FRAME="PE1RXF-2>APRX29::$Call:$Message" |
||||
args[0]=-d |
||||
args[1]="APRX29" |
||||
args[2]=-s |
||||
args[3]=ax1 |
||||
args[4]=":$Call:$Message" |
||||
else |
||||
APRS_FRAME="PE1RXF-2>APRX29,$Path::$Call:$Message" |
||||
args[0]=-d |
||||
args[1]="APRX29 $Path" |
||||
args[2]=-s |
||||
args[3]=ax1 |
||||
args[4]=":$Call:$Message" |
||||
fi |
||||
#echo "$APRS_FRAME" |
||||
|
||||
#"$APRS_CMD" > tmp.tmp |
||||
|
||||
/usr/sbin/beacon "${args[@]}" |
||||
|
||||
fi |
@ -0,0 +1,236 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Formats crontab string for periodic APRS beacon and # |
||||
# replaces the original crontab entry string with this # |
||||
# new string thus changing the crontab. # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
source /home/marcel/ham/aprs_utils/config.shlib; # load the config library functions |
||||
|
||||
############################################################ |
||||
# Help # |
||||
############################################################ |
||||
Help() |
||||
{ |
||||
# Display Help |
||||
echo "Set interval of APRS beacons in crontab." |
||||
echo |
||||
echo "Syntax: set_beacon.sh [-i <interface>|-t <time>|-c <config-file>]" |
||||
echo "Options:" |
||||
echo "-i AX.25 interface (ax0 or ax1)" |
||||
echo "-t Time interval in minutes (0-60), 0 disables beacon" |
||||
echo "-c Read from config file instead of command line arguments" |
||||
echo |
||||
} |
||||
|
||||
############################################################ |
||||
# This function update the crontab of user marcel # |
||||
############################################################ |
||||
UpdateCrontab() |
||||
{ |
||||
# All those escaped characters were a nightmare, but in the end the resulting string was perfect. But executing the string directly from this script proved to be another nightmare: |
||||
# It appears that bash inserts additional escape characters, resulting in the command not working. The solution below is not very elegant, but hey...it works! |
||||
# Let's make a bash script, execute is and remove it again. |
||||
echo "#!/bin/bash" > $sed_tmp_command_file |
||||
echo "$sed_string" >> $sed_tmp_command_file |
||||
chmod u+x $sed_tmp_command_file |
||||
$sed_tmp_command_file |
||||
rm $sed_tmp_command_file |
||||
|
||||
# Update crontab |
||||
/usr/bin/crontab -u marcel $crontab_intermediate_file |
||||
} |
||||
|
||||
############################################################### |
||||
# Generates beacon files which are send via a crontab process # |
||||
############################################################### |
||||
ConstructBeaconFile() |
||||
{ |
||||
if [ "${1}" == "ax0" ]; then |
||||
ConstructBeaconFile_Destination="$(config_get ax0_beacon_destination $ConfigFile)" |
||||
ConstructBeaconFile_Path="$(config_get ax0_beacon_path $ConfigFile)" |
||||
ConstructBeaconFile_Position="$(config_get ax0_beacon_position $ConfigFile)" |
||||
ConstructBeaconFile_Comment="$(config_get ax0_beacon_comment $ConfigFile)" |
||||
ConstructBeaconFile_File="$(config_get ax0_beacon_file $ConfigFile)" |
||||
|
||||
if [ "$ConstructBeaconFile_Path" == "none" ]; then |
||||
ConstructBeaconFile_Beacon="PE1RXF-1>$ConstructBeaconFile_Destination:$ConstructBeaconFile_Position$ConstructBeaconFile_Comment" |
||||
else |
||||
ConstructBeaconFile_Beacon="PE1RXF-1>$ConstructBeaconFile_Destination,$ConstructBeaconFile_Path:$ConstructBeaconFile_Position$ConstructBeaconFile_Comment" |
||||
fi |
||||
|
||||
echo "Beacon for ax0:" |
||||
echo $ConstructBeaconFile_Beacon |
||||
echo $ConstructBeaconFile_Beacon > $ConstructBeaconFile_File |
||||
|
||||
else |
||||
ConstructBeaconFile_Destination="$(config_get ax1_beacon_destination $ConfigFile)" |
||||
ConstructBeaconFile_Path="$(config_get ax1_beacon_path $ConfigFile)" |
||||
ConstructBeaconFile_Position="$(config_get ax1_beacon_position $ConfigFile)" |
||||
ConstructBeaconFile_Comment="$(config_get ax1_beacon_comment $ConfigFile)" |
||||
ConstructBeaconFile_File="$(config_get ax1_beacon_file $ConfigFile)" |
||||
|
||||
if [ "$ConstructBeaconFile_Path" == "none" ]; then |
||||
ConstructBeaconFile_Beacon="PE1RXF-2>$ConstructBeaconFile_Destination:$ConstructBeaconFile_Position$ConstructBeaconFile_Comment" |
||||
else |
||||
ConstructBeaconFile_Beacon="PE1RXF-2>$ConstructBeaconFile_Destination,$ConstructBeaconFile_Path:$ConstructBeaconFile_Position$ConstructBeaconFile_Comment" |
||||
fi |
||||
|
||||
echo "Beacon for ax1:" |
||||
echo $ConstructBeaconFile_Beacon |
||||
|
||||
if [ "$ConstructBeaconFile_Path" == "none" ]; then |
||||
ConstructBeaconFile_Beacon="/usr/sbin/beacon -d \"$ConstructBeaconFile_Destination\" -s ax1 '$ConstructBeaconFile_Position$ConstructBeaconFile_Comment'" |
||||
else |
||||
ConstructBeaconFile_Beacon="/usr/sbin/beacon -d \"$ConstructBeaconFile_Destination $ConstructBeaconFile_Path\" -s ax1 '$ConstructBeaconFile_Position$ConstructBeaconFile_Comment'" |
||||
fi |
||||
echo $ConstructBeaconFile_Beacon > $ConstructBeaconFile_File |
||||
|
||||
fi |
||||
|
||||
} |
||||
############################################################ |
||||
############################################################ |
||||
# Main program # |
||||
############################################################ |
||||
############################################################ |
||||
|
||||
# Set variables |
||||
Interface="0" |
||||
TimeInterval="-1" |
||||
crontab_time_string="* * * * *" |
||||
crontab_command_string_ax0="/home/marcel/ham/aprs_utils/send_beacon_internal_radio.sh" |
||||
crontab_command_string_ax1="/home/marcel/ham/aprs_utils/send_beacon_external_radio.sh" |
||||
crontab_full_string="#* * * * * /home/marcel/ham/aprs_utils/send_beacon_internal_radio.sh" |
||||
crontab_intermediate_file="/home/marcel/ham/aprs_utils/crontab.pe1rxf" |
||||
sed_tmp_command_file="/home/marcel/ham/aprs_utils/sed.cmd" |
||||
work_with_config_file="0" |
||||
|
||||
############################################################ |
||||
# Process the input options. # |
||||
############################################################ |
||||
# Get the options |
||||
while getopts i:t:c: flag; do |
||||
case "${flag}" in |
||||
i) # interface |
||||
Interface=${OPTARG};; |
||||
t) # time interval beacon |
||||
TimeInterval=${OPTARG};; |
||||
c) # work with config_file |
||||
work_with_config_file="1" |
||||
ConfigFile=${OPTARG};; |
||||
\?) # Invalid option |
||||
echo "Syntax error!" |
||||
Help |
||||
exit;; |
||||
esac |
||||
done |
||||
|
||||
############################################################## |
||||
# Get Beacon Timer Interval and translate to crontab syntax # |
||||
############################################################## |
||||
|
||||
# Read values from config-file |
||||
if [ "$work_with_config_file" -eq "1" ]; then |
||||
|
||||
|
||||
for ax_port in ax0 ax1 |
||||
do |
||||
Interface="$ax_port" |
||||
if [ "$Interface" == "ax0" ]; then |
||||
TimeInterval="$(config_get ax0_beacon_time $ConfigFile)" |
||||
else |
||||
TimeInterval="$(config_get ax1_beacon_time $ConfigFile)" |
||||
fi |
||||
|
||||
# Let's generate new beacon files according to values in configuration file |
||||
ConstructBeaconFile $Interface |
||||
|
||||
# Every 1 to 59 minutes |
||||
if [ "$TimeInterval" -gt 0 ] && [ "$TimeInterval" -lt 60 ]; then |
||||
crontab_time_string="*/$TimeInterval * * * *" |
||||
# Never |
||||
elif [ "$TimeInterval" -eq 0 ]; then |
||||
crontab_time_string="#* * * * *" |
||||
# Every hour |
||||
elif [ "$TimeInterval" -eq 60 ]; then |
||||
crontab_time_string="0 * * * *" |
||||
else |
||||
echo "No valid value. Using default." |
||||
crontab_time_string="#* * * * *" |
||||
fi |
||||
|
||||
# Select ax.25 port |
||||
if [ "$Interface" == "ax0" ]; then |
||||
crontab_full_string="$crontab_time_string $crontab_command_string_ax0" |
||||
sed_string="sed -i \"/send_beacon_internal_radio/c\\$crontab_full_string\" $crontab_intermediate_file" |
||||
elif [ "$Interface" == "ax1" ]; then |
||||
crontab_full_string="$crontab_time_string $crontab_command_string_ax1" |
||||
sed_string="sed -i \"/send_beacon_external_radio/c\\$crontab_full_string\" $crontab_intermediate_file" |
||||
else |
||||
echo "No valid value. Using default." |
||||
crontab_full_string="$crontab_time_string $crontab_command_string_ax0" |
||||
sed_string="sed -i \"/send_beacon_internal_radio/c\\$crontab_full_string\" $crontab_intermediate_file" |
||||
fi |
||||
|
||||
UpdateCrontab |
||||
|
||||
done |
||||
|
||||
printf -- "Values read from file: %s$ConfigFile\n"; |
||||
printf -- "ax0 beacon time: %s\n" "$(config_get ax0_beacon_time $ConfigFile)"; |
||||
printf -- "ax1 beacon time: %s\n" "$(config_get ax1_beacon_time $ConfigFile)"; |
||||
# Read values from command line arguments |
||||
else |
||||
|
||||
# Every 1 to 59 minutes |
||||
if [ "$TimeInterval" -gt 0 ] && [ "$TimeInterval" -lt 60 ]; then |
||||
crontab_time_string="*/$TimeInterval * * * *" |
||||
# Never |
||||
elif [ "$TimeInterval" -eq 0 ]; then |
||||
crontab_time_string="#* * * * *" |
||||
# Every hour |
||||
elif [ "$TimeInterval" -eq 60 ]; then |
||||
crontab_time_string="0 * * * *" |
||||
else |
||||
echo "Syntax error!" |
||||
Help |
||||
exit |
||||
fi |
||||
|
||||
# Select ax.25 port |
||||
if [ "$Interface" == "ax0" ]; then |
||||
crontab_full_string="$crontab_time_string $crontab_command_string_ax0" |
||||
sed_string="sed -i \"/send_beacon_internal_radio/c\\$crontab_full_string\" $crontab_intermediate_file" |
||||
elif [ "$Interface" == "ax1" ]; then |
||||
crontab_full_string="$crontab_time_string $crontab_command_string_ax1" |
||||
sed_string="sed -i \"/send_beacon_external_radio/c\\$crontab_full_string\" $crontab_intermediate_file" |
||||
else |
||||
echo "Syntax error!" |
||||
Help |
||||
exit |
||||
fi |
||||
|
||||
UpdateCrontab |
||||
fi |
||||
|
||||
|
@ -0,0 +1,246 @@ |
||||
Raspberry Pi 1e installation |
||||
|
||||
-------- |
||||
Before 1e boot: |
||||
|
||||
Add "ssh" file In The Boot Partition |
||||
|
||||
"ssh" is empty |
||||
|
||||
-------- |
||||
|
||||
Find ip-adres in router and log in via ssh (user: pi, password: raspberry) |
||||
|
||||
Add user and make sure it has the same UID as your other machines (for convenience): |
||||
|
||||
in "/etc/passwd" you cab find the UID of users |
||||
|
||||
Add user: |
||||
adduser user_name |
||||
|
||||
Change UID with command: |
||||
usermod -u 1001 user_name |
||||
|
||||
Add new user to all the groups 'pi' is also in: |
||||
|
||||
File "/etc/group" |
||||
Change all entries. For example: adm:x:4:pi becomes adm_x:username,pi") |
||||
|
||||
Add new user to sudo: |
||||
usermod -aG sudo user_name |
||||
|
||||
REBOOT SYSTEEM! |
||||
|
||||
Login as new user and test (don't forget to test sudo! |
||||
|
||||
Remove pi-user: |
||||
sudo deluser -remove-home pi |
||||
sudo rm -vf /etc/sudoers.d/010_pi-nopasswd |
||||
|
||||
---- |
||||
|
||||
SSH loggin without password: |
||||
On local-machine (if not already done, check with "ls ~/.ssh/id_*"): |
||||
ssh-keygen -t rsa -b 4096 |
||||
|
||||
Copy the keu: |
||||
ssh-copy-id remote_username@server_ip_address |
||||
|
||||
Log in on remote, now without passworrd |
||||
|
||||
Disable login with password on remote: (optional; don't loose the key!) |
||||
open file "/etc/ssh/sshd_config" |
||||
|
||||
Change: |
||||
PasswordAuthentication no |
||||
ChallengeResponseAuthentication no |
||||
UsePAM no |
||||
|
||||
Restart ssh deamon: |
||||
sudo /etc/init.d/ssh reload |
||||
|
||||
---- |
||||
|
||||
Change login schreen by editing the text file "/etc/motd". |
||||
|
||||
Change the "sshd_config" to (if you now get two motd's, change it back to no) |
||||
PrintMotd yes |
||||
|
||||
---- |
||||
Change hostname: |
||||
|
||||
sudo nano /etc/hostname |
||||
sudo nano /etc/hosts |
||||
|
||||
|
||||
--- |
||||
LOCALE settings |
||||
|
||||
sudo raspi-config |
||||
Than Localisation options / change locale (en_US.UTF-8 UTF-8) |
||||
and also time-zone |
||||
|
||||
----- |
||||
|
||||
Update system: |
||||
sudo apt-get update |
||||
sudo apt-get upgrade |
||||
|
||||
--- |
||||
|
||||
Apache webserver and php |
||||
|
||||
sudo apt-get install apache2 php |
||||
sudo chown www-data:www-data /var/www/html/ |
||||
sudo usermod -aG www-data marcel |
||||
sudo chmod g+w /var/www/html/ |
||||
install index.html in /var/www/html |
||||
|
||||
--- |
||||
|
||||
Add firewall: |
||||
|
||||
sudo apt install ufw |
||||
sudo ufw allow ssh |
||||
sudo ufw allow http |
||||
sudo ufw allow https |
||||
sudo ufw enable |
||||
sudo ufw status |
||||
------ |
||||
|
||||
Enable I2C RTC |
||||
|
||||
sudo rapi-config |
||||
enable i2c |
||||
sudo reboot |
||||
|
||||
sudo apt-get install i2c-tools |
||||
|
||||
sudo i2cdetect -y 1 |
||||
#68 is RTC |
||||
|
||||
sudo nano /boot/config.txt |
||||
dtoverlay=i2c-rtc,ds1307 |
||||
|
||||
sudo reboot |
||||
sudo i2cdetect -y 1 |
||||
You should see a wall of text appear, if UU appears instead of 68 then we have successfully loaded in the Kernel driver for our RTC circuit. |
||||
|
||||
Disable fake hardware clock: |
||||
sudo apt-get -y remove fake-hwclock |
||||
sudo update-rc.d -f fake-hwclock remove |
||||
sudo systemctl disable fake-hwclock |
||||
|
||||
|
||||
sudo nano /lib/udev/hwclock-set |
||||
Find |
||||
|
||||
if [ -e /run/systemd/system ] ; then |
||||
exit 0 |
||||
fi |
||||
|
||||
Replace With |
||||
|
||||
#if [ -e /run/systemd/system ] ; then |
||||
# exit 0 |
||||
#fi |
||||
|
||||
|
||||
Also comment out the two lines |
||||
/sbin/hwclock --rtc=$dev --systz --badyear |
||||
and |
||||
/sbin/hwclock --rtc=$dev --systz |
||||
|
||||
Read RTC: |
||||
sudo hwclock -r |
||||
|
||||
Set RTC from system time: |
||||
sudo hwclock -w |
||||
|
||||
---- |
||||
|
||||
Direwolf: |
||||
sudo apt-get install git |
||||
sudo apt-get install cmake |
||||
sudo apt-get install libasound2-dev |
||||
sudo apt-get install libudev-dev |
||||
cd ~ |
||||
cd direwolf |
||||
mkdir build && cd build |
||||
cmake -DUNITTEST=1 .. |
||||
make -j4 |
||||
make test |
||||
sudo make install |
||||
|
||||
make install-conf |
||||
|
||||
edit direwolf.conf: |
||||
ADEVICE plughw:1,0 |
||||
CHANNEL 0 |
||||
MYCALL MYCALL-0 |
||||
MODEM 1200 |
||||
PTT GPIO 18 |
||||
DCD GPIO 17 |
||||
TXDELAY 40 |
||||
TXTAIL 5 |
||||
AGWPORT 8000 |
||||
KISSPORT 8001 |
||||
<REST: leave at default> |
||||
|
||||
Add user to gpio-group: |
||||
sudo usermod -aG gpio marcel |
||||
|
||||
---- |
||||
AX25 support |
||||
|
||||
sudo apt-get install libax25 ax25-apps ax25-tools |
||||
sudo nano /etc/ax25/axports |
||||
add: |
||||
ax0 PE1RXF-0 1200 255 2 144.800 MHz (1200 bps) |
||||
ax1 PE1RXF-1 9600 255 2 External radio |
||||
|
||||
--- |
||||
APRX software |
||||
|
||||
sudo apt-get install aprx |
||||
sudo systemctl enable aprx |
||||
|
||||
---- |
||||
|
||||
gnuplot: |
||||
|
||||
sudo apt install gnuplot |
||||
|
||||
----- |
||||
|
||||
kissattach and kissutil can only be executed as root. But we don't want to enter a password when starting the pe1rxf-scripts as the aprs-server has to work autonomous. We also don't want to run all the scripts as root, because that's a safety risk. The solution is to add the following lines to the sudoers-file: |
||||
|
||||
sudo visudo |
||||
marcel ALL = (root) NOPASSWD: /usr/sbin/kissattach |
||||
marcel ALL = (root) NOPASSWD: /usr/sbin/kissparms |
||||
|
||||
--- |
||||
|
||||
Install software from PE1RXF (meezenest.nl/mees): |
||||
|
||||
Start ax.25 interfaces (direwolf and kiss) in crontab of user marcel. |
||||
Delay of 60 sec, otherwise direwolf will not start. Probably no sound card module loaded at time crontab is executed: |
||||
|
||||
crontab -l |
||||
|
||||
Add: |
||||
# Start APRS server at boot time |
||||
@reboot sleep 60 && /home/marcel/ham/start_aprs_server.sh |
||||
|
||||
A default crontab is included in the ham/aprs_utils directory. Two more processes are in there for the custom telemetry. |
||||
|
||||
The web-interface uses php to do some tasks. Make sure that at least the following files and directories can be accessed by user www-data: |
||||
ham/aprs_utils/aprs_files_to_transmit/ (rwx) |
||||
ham/aprs_utils/aprs_log/ (rwx) |
||||
ham/aprs_utils/send_message.sh (rx) |
||||
|
||||
Make a symbolic link from ham/web-interface/ to /var/log/www/html/ and place all web-files in this folder. |
||||
|
||||
MAKE IMAGE OF SD_KAART! |
||||
Use the script 'pishrink.sh' to compress the image. |
||||
At 1st boot, the image is automatically expanded (or not if you have choosen to to it manually. Than do that with sudo raspi-config. |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 121 KiB |
@ -0,0 +1,73 @@ |
||||
#!/bin/bash |
||||
|
||||
################################################################################## |
||||
# Initializing drivers and background processes for PE1RXF-APRS-server # |
||||
# # |
||||
# (C)2021 M.T. Konstapel https://meezenest.nl/mees # |
||||
# # |
||||
# This file is part of PE1RXF-APRS-server. # |
||||
# # |
||||
# PE1RXF-APRS-server is free software: you can redistribute it and/or modify # |
||||
# it under the terms of the GNU General Public License as published by # |
||||
# the Free Software Foundation, either version 3 of the License, or # |
||||
# (at your option) any later version. # |
||||
# # |
||||
# PE1RXF-APRS-server is distributed in the hope that it will be useful, # |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
||||
# GNU General Public License for more details. # |
||||
# # |
||||
# You should have received a copy of the GNU General Public License # |
||||
# along with PE1RXF-APRS-server If not, see <https://www.gnu.org/licenses/>. # |
||||
# # |
||||
################################################################################## |
||||
|
||||
########################### |
||||
# initializing soundmodem # |
||||
########################### |
||||
echo "Starting direwolf" |
||||
/usr/local/bin/direwolf -t 0 -c /home/marcel/direwolf.conf -p -q hd > /dev/null 2>&1 & |
||||
#Check if Direwolf is running |
||||
/usr/bin/sleep 5 |
||||
if [ -z "`ps ax | grep -v grep | grep direwolf`" ]; then |
||||
echo -e "\nERROR: Direwolf did not start properly and is not running, please review direwolf.conf" |
||||
exit 1 |
||||
fi |
||||
echo "Installing one KISS connection on PTY port /tmp/direwolf/kisstnc_aprx" |
||||
mkdir -p /tmp/direwolf |
||||
cp -a /tmp/kisstnc /tmp/direwolf/kisstnc_aprx |
||||
/usr/sbin/mkiss -s 19200 -x 1 /tmp/direwolf/kisstnc_aprx > /tmp/unix98 |
||||
#This creates a PTS interface like "/dev/pts/3" |
||||
export PTS0=`more /tmp/unix98 | grep -w /dev | cut -b -11` |
||||
echo "PTS0 device: $PTS0" |
||||
sudo /usr/sbin/kissattach $PTS0 ax0 > /tmp/ax25-config.tmp |
||||
awk '/device/ { print $7 }' /tmp/ax25-config.tmp > /tmp/ax25-config1-tmp |
||||
read Device < /tmp/ax25-config1-tmp |
||||
|
||||
# Start kissutil to send messages in files written to /home/marcel/ham/aprs_utils/aprs_files_to_transmit |
||||
/usr/local/bin/kissutil -f /home/marcel/ham/aprs_utils/aprs_files_to_transmit > /dev/null 2>&1 & |
||||
|
||||
# Start filter for received messages to PE1RXF-0 |
||||
# Messages addressed to PE1RXF are stored in file /home/marcel/ham/aprs_utils/aprs_received_messages.log |
||||
# tail /var/log/aprx/aprx-rf.log -F | grep --line-buffered "::PE1RXF-10" >> /home/marcel/ham/aprs_utils/aprs_received_messages/received_aprs_messages.log & |
||||
#tail /var/log/aprx/aprx-rf.log -F --lines=1 | grep --line-buffered "::PE1RXF-1" | /home/marcel/ham/aprs_utils/process_aprs_messages.sh & |
||||
|
||||
########################### |
||||
#initialize arduino modem # |
||||
########################### |
||||
echo "Starting external interface" |
||||
sudo /usr/sbin/kissattach /dev/ttyUSB0 ax1 |
||||
sudo /usr/sbin/kissparms -p ax1 -t 500 -s 200 -r 32 -l 100 -f n |
||||
# Start kissutil to send messages in files written to /home/marcel/ham/aprs_utils/aprs_files_to_transmit_channel_B |
||||
# kissutil -f /home/marcel/ham/aprs_utils/aprs_files_to_transmit_channel_B > /dev/null 2>&1 & |
||||
|
||||
|
||||
# Start filter for received messages to PE1RXF (all sufixes) |
||||
# Messages addressed to PE1RXF are stored in file /home/marcel/ham/aprs_utils/aprs_received_messages.log |
||||
#tail /var/log/aprx/aprx-rf.log -F --lines=1 | grep --line-buffered "::PE1RXF" | /home/marcel/ham/aprs_utils/process_aprs_messages.sh & |
||||
|
||||
# Test log heard stations |
||||
tail /var/log/aprx/aprx-rf.log -F --lines=1 | /home/marcel/ham/aprs_utils/process_traffic.sh & |
||||
|
||||
# Start mainloop maintenance routine |
||||
/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.sh |
@ -0,0 +1,87 @@ |
||||
* { |
||||
box-sizing: border-box; |
||||
} |
||||
.openBtn { |
||||
display: flex; |
||||
justify-content: left; |
||||
} |
||||
.openButton { |
||||
border: none; |
||||
border-radius: 5px; |
||||
background-color: #1c87c9; |
||||
color: white; |
||||
padding: 14px 20px; |
||||
cursor: pointer; |
||||
position: fixed; |
||||
} |
||||
.loginPopup { |
||||
position: relative; |
||||
text-align: center; |
||||
width: 100%; |
||||
} |
||||
.formPopup { |
||||
display: none; |
||||
position: fixed; |
||||
left: 25%; |
||||
top: 5%; |
||||
transform: translate(-30%, -5%); |
||||
border: 3px solid #999999; |
||||
z-index: 9; |
||||
} |
||||
.formContainer { |
||||
max-width: 300px; |
||||
padding: 20px; |
||||
background-color: #fff; |
||||
} |
||||
.formContainer input[type=text], |
||||
.formContainer input[type=number], |
||||
.formContainer select, |
||||
.formContainer radio, |
||||
.formContainer input[type=password] { |
||||
width: 100%; |
||||
padding: 15px; |
||||
margin: 5px 0 20px 0; |
||||
border: none; |
||||
background: #eee; |
||||
} |
||||
.formContainer input[type=text]:focus, |
||||
.formContainer input[type=number]:focus, |
||||
.formContainer select:focus, |
||||
.formContainer input[type=password]:focus { |
||||
background-color: #ddd; |
||||
outline: none; |
||||
} |
||||
.formContainer .btn { |
||||
padding: 12px 20px; |
||||
border: none; |
||||
background-color: #8ebf42; |
||||
color: #fff; |
||||
cursor: pointer; |
||||
width: 100%; |
||||
margin-bottom: 15px; |
||||
opacity: 0.8; |
||||
} |
||||
.formContainer .cancel { |
||||
background-color: #cc0000; |
||||
} |
||||
.formContainer .wait { |
||||
background-color: #ffffff; |
||||
} |
||||
.formContainer .radio { |
||||
vertical-align: middle; |
||||
padding: 12px 20px; |
||||
height: 30px; |
||||
width: 30px; |
||||
background-color: #eee; |
||||
border-radius: 25%; |
||||
} |
||||
.formContainer .btn:hover, |
||||
.openButton:hover { |
||||
opacity: 1; |
||||
} |
||||
.radioLeft { |
||||
display: block; |
||||
text-align: left; |
||||
margin-left: 25%; |
||||
margin-bottom: 20px; |
||||
} |
@ -0,0 +1,148 @@ |
||||
* { |
||||
box-sizing: border-box; |
||||
} |
||||
|
||||
img { |
||||
display: block; |
||||
margin-left: auto; |
||||
margin-right: auto; |
||||
width: 50%; |
||||
} |
||||
|
||||
.medium { |
||||
display: block; |
||||
margin-left: auto; |
||||
margin-right: auto; |
||||
width: 50%; |
||||
height: auto; |
||||
} |
||||
|
||||
.large { |
||||
width: 100%; |
||||
height: auto; |
||||
} |
||||
|
||||
.row:after { |
||||
content: ""; |
||||
clear: both; |
||||
display: table; |
||||
} |
||||
|
||||
[class*="col-"] { |
||||
float: left; |
||||
padding: 15px; |
||||
width: 100%; |
||||
} |
||||
|
||||
@media only screen and (min-width: 600px) { |
||||
.col-s-1 {width: 8.33%;} |
||||
.col-s-2 {width: 16.66%;} |
||||
.col-s-3 {width: 25%;} |
||||
.col-s-4 {width: 33.33%;} |
||||
.col-s-5 {width: 41.66%;} |
||||
.col-s-6 {width: 50%;} |
||||
.col-s-7 {width: 58.33%;} |
||||
.col-s-8 {width: 66.66%;} |
||||
.col-s-9 {width: 75%;} |
||||
.col-s-10 {width: 83.33%;} |
||||
.col-s-11 {width: 91.66%;} |
||||
.col-s-12 {width: 100%;} |
||||
} |
||||
|
||||
@media only screen and (min-width: 768px) { |
||||
.col-1 {width: 8.33%;} |
||||
.col-2 {width: 16.66%;} |
||||
.col-3 {width: 25%;} |
||||
.col-4 {width: 33.33%;} |
||||
.col-5 {width: 41.66%;} |
||||
.col-6 {width: 50%;} |
||||
.col-7 {width: 58.33%;} |
||||
.col-8 {width: 66.66%;} |
||||
.col-9 {width: 75%;} |
||||
.col-10 {width: 83.33%;} |
||||
.col-11 {width: 91.66%;} |
||||
.col-12 {width: 100%;} |
||||
} |
||||
|
||||
html { |
||||
font-family: "Lucida Sans", sans-serif; |
||||
} |
||||
|
||||
.header { |
||||
background-color: #33b5e5; |
||||
color: #ffffff; |
||||
padding: 15px; |
||||
} |
||||
|
||||
.menu ul { |
||||
list-style-type: none; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
.menu li { |
||||
padding: 8px; |
||||
margin-bottom: 7px; |
||||
background-color :#33b5e5; |
||||
color: #ffffff; |
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); |
||||
} |
||||
|
||||
.menu li:hover { |
||||
background-color: #0099cc; |
||||
} |
||||
|
||||
.aside { |
||||
background-color: #33b5e5; |
||||
padding: 15px; |
||||
color: #ffffff; |
||||
text-align: center; |
||||
font-size: 14px; |
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); |
||||
} |
||||
|
||||
.footer { |
||||
background-color: #0099cc; |
||||
color: #ffffff; |
||||
text-align: center; |
||||
font-size: 12px; |
||||
padding: 15px; |
||||
} |
||||
|
||||
h1 { |
||||
text-align: center; |
||||
} |
||||
|
||||
a:link { |
||||
color: white; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
/* visited link */ |
||||
a:visited { |
||||
color: white; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.input-blue { |
||||
background-color: #33b5e5; |
||||
color: #ffffff; |
||||
font-weight: bold; |
||||
border: none; |
||||
border-bottom: 2px solid #33b5e5; |
||||
text-decoration: none; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.input-blue-submit { |
||||
background-color: #33b5e5; |
||||
color: #ffffff; |
||||
font-weight: bold; |
||||
border: none; |
||||
border-bottom: 2px solid #33b5e5; |
||||
text-decoration: none; |
||||
font-size: medium; |
||||
font-weight: normal; |
||||
cursor: pointer; |
||||
font-family: "Lucida Sans", sans-serif; |
||||
} |
After Width: | Height: | Size: 434 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 4.0 KiB |
@ -0,0 +1,468 @@ |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<title>PE1RXF APRS server</title> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<link rel="stylesheet" href="css/styles.css"> |
||||
<link rel="stylesheet" href="css/popup.css"> |
||||
<link rel="stylesheet" href="css/font-awesome.min.css"> |
||||
</head> |
||||
<body> |
||||
|
||||
<?php
|
||||
|
||||
// Prevents a repost when the user refreshes the page. |
||||
// Also it handles the post itself. |
||||
session_start(); |
||||
|
||||
if(count($_POST) > 0) { |
||||
// figure out which form was entered |
||||
if ($_POST['comment_ax0']) { |
||||
$_SESSION['comment_ax0'] = $_POST['comment_ax0']; |
||||
$_SESSION['period_ax0'] = $_POST['period_ax0']; |
||||
$_SESSION['path_ax0'] = $_POST['path_ax0']; |
||||
|
||||
} |
||||
if ($_POST['comment_ax1']) { |
||||
$_SESSION['comment_ax1'] = $_POST['comment_ax1']; |
||||
$_SESSION['period_ax1'] = $_POST['period_ax1']; |
||||
$_SESSION['path_ax1'] = $_POST['path_ax1']; |
||||
} |
||||
|
||||
header("HTTP/1.1 303 See Other"); |
||||
header("Location: http://$_SERVER[HTTP_HOST]/index.php"); |
||||
die(); |
||||
} |
||||
else { |
||||
|
||||
if (isset($_SESSION['comment_ax0'])){ |
||||
$comment_ax0 = $_SESSION['comment_ax0']; |
||||
$period_ax0 = $_SESSION['period_ax0']; |
||||
$path_ax0 = $_SESSION['path_ax0']; |
||||
//echo "Set ax0: $comment_ax0, $period_ax0, $path_ax0"; |
||||
save_settings("ax0", $period_ax0, 0, $path_ax0, 0, $comment_ax0); |
||||
# Wait for the changes to take effect |
||||
sleep(1); |
||||
} |
||||
|
||||
else if (isset($_SESSION['comment_ax1'])){ |
||||
$comment_ax1 = $_SESSION['comment_ax1']; |
||||
$period_ax1 = $_SESSION['period_ax1']; |
||||
$path_ax1 = $_SESSION['path_ax1']; |
||||
//echo "Set ax1: $comment_ax1, $period_ax1, $path_ax1"; |
||||
save_settings("ax1", $period_ax1, 0, $path_ax1, 0, $comment_ax1); |
||||
# Wait for the changes to take effect |
||||
sleep(1); |
||||
} |
||||
|
||||
session_unset(); |
||||
session_destroy(); |
||||
|
||||
} |
||||
// END: Prevents a repost when the user refreshes the page. |
||||
|
||||
# Reads configuration file from pe1rxf-aprs-server directory, makes changes if necesary |
||||
# and writes the newly constructed file to a temporary config-file. It does not overwrite |
||||
# the original file, because user www-data can only read the program directory, not write to it. |
||||
# It's a safety thing... |
||||
# The main loop of pe1rxf-aprs-server than copies it to the program directory and removes the temporary file. |
||||
function change_parameter_value($parameter, $value) |
||||
{ |
||||
$config_file = '/var/www/html/config/test.cfg'; |
||||
$tmp_config_file = '/var/www/html/config/test.cfg.tmp'; |
||||
$reading = fopen($config_file, 'r'); |
||||
$writing = fopen($tmp_config_file, 'w'); |
||||
|
||||
$replaced = false; |
||||
while (!feof($reading)) { |
||||
|
||||
$line = fgets($reading); |
||||
if (stristr($line,$parameter)) { |
||||
$line = "$parameter=$value\n"; |
||||
//echo "New value: ", "$line"; |
||||
$replaced = true; |
||||
} |
||||
fputs($writing, $line); |
||||
} |
||||
fclose($reading); fclose($writing); |
||||
|
||||
// might as well not overwrite the file if we didn't replace anything |
||||
if ($replaced) |
||||
{ |
||||
shell_exec("mv $tmp_config_file $config_file"); |
||||
} else { |
||||
shell_exec("rm $tmp_config_file"); |
||||
} |
||||
} |
||||
|
||||
# Saves setting for given form: ax0 or ax1 |
||||
# $a = beacon_time |
||||
# $b = beacon_destination |
||||
# $c = beacon_path |
||||
# $d = beacon_position |
||||
# $e = beacon_comment |
||||
# $f = beacon_file |
||||
# $g = transmit_directory |
||||
function save_settings($form, $a, $b=0, $c=0, $d=0, $e=0, $f=0, $g=0) |
||||
{ |
||||
# Copy original config file to temporary place on web server. |
||||
# From here we can change the values |
||||
$original_config_file = '/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg'; |
||||
$destination_config_file = '/var/www/html/config/test.cfg'; |
||||
$newly_made_config_file = '/var/www/html/config/pe1rxf-aprs-server.cfg'; |
||||
|
||||
$fileCopied = copy("$original_config_file", "$destination_config_file"); |
||||
if($fileCopied) { |
||||
//echo "# $a, $b, $c, $d, $e, $f, $g"; |
||||
if ($form == "ax0" ) { |
||||
change_parameter_value("ax0_beacon_time", $a); |
||||
if ($c) change_parameter_value("ax0_beacon_path", $c); |
||||
if ($e) change_parameter_value("ax0_beacon_comment", $e); |
||||
} |
||||
else if ($form == "ax1" ) { |
||||
change_parameter_value("ax1_beacon_time", $a); |
||||
if ($c) change_parameter_value("ax1_beacon_path", $c); |
||||
if ($e) change_parameter_value("ax1_beacon_comment", $e); |
||||
} |
||||
|
||||
# now make new file with new configuration for the main loop to find. |
||||
shell_exec("cp $destination_config_file $newly_made_config_file"); |
||||
# and remove working file: |
||||
shell_exec("rm $destination_config_file"); |
||||
|
||||
} else{ |
||||
#echo "Error"; |
||||
} |
||||
} |
||||
|
||||
# Reads configuration file from pe1rxf-aprs-server directory. |
||||
# Search this file for given paramter and returns its value. |
||||
function search_parameter_in_config_file($parameter) |
||||
{ |
||||
$config_file = '/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg'; |
||||
$reading = fopen($config_file, 'r'); |
||||
while (!feof($reading)) { |
||||
|
||||
$line = fgets($reading); |
||||
if ( strstr($line,$parameter) ) { |
||||
|
||||
$line = substr( $line, strlen($parameter)+1 ); |
||||
|
||||
# Found match. Stop further search. |
||||
fclose($reading); |
||||
return rtrim($line); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
$ax0_name = search_parameter_in_config_file("ax0_name"); |
||||
$ax0_frequency = search_parameter_in_config_file("ax0_frequency"); |
||||
$ax0_beacon_comment = search_parameter_in_config_file("ax0_beacon_comment"); |
||||
$ax0_beacon_time = search_parameter_in_config_file("ax0_beacon_time"); |
||||
$ax0_beacon_path = search_parameter_in_config_file("ax0_beacon_path"); |
||||
|
||||
$ax1_name = search_parameter_in_config_file("ax1_name"); |
||||
$ax1_frequency = search_parameter_in_config_file("ax1_frequency"); |
||||
$ax1_beacon_comment = search_parameter_in_config_file("ax1_beacon_comment"); |
||||
$ax1_beacon_time = search_parameter_in_config_file("ax1_beacon_time"); |
||||
$ax1_beacon_path = search_parameter_in_config_file("ax1_beacon_path"); |
||||
|
||||
?> |
||||
|
||||
<div class="header"> |
||||
<a href="index.php" > |
||||
<h1><i class="fa fa-home" aria-hidden="true"></i> PE1RXF APRS server</h1> |
||||
</a> |
||||
</div> |
||||
|
||||
<div class="row"> |
||||
<div class="col-3 col-s-3 menu"> |
||||
<ul> |
||||
<li><h3><?php echo $ax0_name ?> (<?php echo $ax0_frequency ?>)</h3></li>
|
||||
<li onclick="openForm_ax0()">Beacon: <b><?php echo $ax0_beacon_comment; ?></b></li>
|
||||
<li onclick="openForm_ax0()">Beacon interval: <b><?php if ($ax0_beacon_time == 0) echo "OFF";else echo $ax0_beacon_time; ?></b></li>
|
||||
<li onclick="openForm_ax0()">Path: <b><?php echo $ax0_beacon_path; ?></b></li>
|
||||
</ul> |
||||
</div> |
||||
|
||||
<div class="col-6 col-s-9" id="main_page"> |
||||
|
||||
<div class="col-6 col-s-12"> |
||||
<a href="send_message.php"><img src="images/mail-out.svg" /></a> |
||||
<h1>Send a message</h1> |
||||
|
||||
|
||||
<img src="images/mail-in.svg" style="cursor:pointer;" onclick="show_received_messages()" /> |
||||
<h1>Received messages</h1> |
||||
|
||||
</div> |
||||
|
||||
<div class="col-6 col-s-12"> |
||||
<a href="telemetry.php"><img src="images/telemetry.svg" /></a> |
||||
<h1>Telemetry</h1> |
||||
|
||||
<img src="images/received.svg" style="cursor:pointer;" onclick="show_heard_stations()" /> |
||||
<h1>Heard stations</h1> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<div class="col-6 col-s-9" id="heard_stations" style="display:none"> |
||||
|
||||
<h1>Heard last 24 hours</h1> |
||||
|
||||
<div class="col-6 col-s-12"> |
||||
<h1><?php echo $ax0_frequency ?></h1>
|
||||
<h3 align="center"> |
||||
<b style="color:Blue">DIRECT</b><br><br> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_stations_heard_direct.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax0") { |
||||
echo $csv[$i][2]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
echo "<br><b style=\"color:Blue\">DIGIPEATED</b><br><br>"; |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_stations_heard_digipeated.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax0") { |
||||
echo $csv[$i][2]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
</div> |
||||
|
||||
<div class="col-6 col-s-12"> |
||||
<h1><?php echo $ax1_frequency ?></h1>
|
||||
<h3 align="center"> |
||||
<b style="color:Blue">DIRECT</b><br><br> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_stations_heard_direct.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax1") { |
||||
echo $csv[$i][2]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
echo "<br><b style=\"color:Blue\">DIGIPEATED</b><br><br>"; |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_stations_heard_digipeated.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax1") { |
||||
echo $csv[$i][2]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
</div> |
||||
<a href=""><h1 style="color:Black;" onclick="show_main_page()"><i class="fa fa-arrow-left" aria-hidden="true"></i> Back</h1></a> |
||||
</div> |
||||
|
||||
<div class="col-6 col-s-9" id="received_messages" style="display:none"> |
||||
|
||||
<h1>Received messages</h1> |
||||
|
||||
|
||||
<h2 align="left"><?php echo $ax0_name ?> (<?php echo $ax0_frequency ?>)</h2>
|
||||
<h3 align="left"> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_received_messages.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax0") { |
||||
echo $csv[$i][2]; |
||||
echo ": "; |
||||
echo $csv[$i][4]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
|
||||
|
||||
|
||||
<h2 align="left"><?php echo $ax1_name ?> (<?php echo $ax1_frequency ?>)</h2>
|
||||
<h3 align="left"> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_received_messages.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax1") { |
||||
echo $csv[$i][2]; |
||||
echo ": "; |
||||
echo $csv[$i][4]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
|
||||
<a href=""><h1 style="color:Black;" onclick="show_main_page()"><i class="fa fa-arrow-left" aria-hidden="true"></i> Back</h1></a> |
||||
</div> |
||||
|
||||
<div class="col-3 col-s-12 menu"> |
||||
<ul> |
||||
<li><h3><?php echo $ax1_name ?> (<?php echo $ax1_frequency ?>)</h3></li>
|
||||
<li onclick="openForm_ax1()">Beacon: <b><?php echo $ax1_beacon_comment; ?></b></li>
|
||||
<li onclick="openForm_ax1()">Beacon interval: <b><?php if ($ax1_beacon_time == 0) echo "OFF";else echo $ax1_beacon_time; ?></b></li>
|
||||
<li onclick="openForm_ax1()">Path: <b><?php echo $ax1_beacon_path; ?></b></li>
|
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax0_beacon"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Beacon <?php echo $ax0_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Comment</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Comment" name="comment_ax0" value="<?php echo $ax0_beacon_comment; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Period (minutes)</strong> |
||||
</label> |
||||
<input type="number" id="psw" placeholder="Minutes" name="period_ax0" min="0" max="60" step="10" value="<?php echo $ax0_beacon_time; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="path_ax0" value="none"<?php if ($ax0_beacon_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="path_ax0" value="WIDE2-1" <?php if ($ax0_beacon_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="path_ax0" value="WIDE2-2" <?php if ($ax0_beacon_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="path_ax0" value="WIDE3-3" <?php if ($ax0_beacon_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax0"><button type="submit" class="btn" onclick="SubmitClicked_ax0()">Submit</button></div> |
||||
<div id="submit_done_ax0" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax0"><button type="button" class="btn cancel" onclick="closeForm_ax0()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popup_ax1_beacon"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Beacon <?php echo $ax1_frequency ?></h2>
|
||||
<label for="email"> |
||||
<strong>Comment</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="comment" name="comment_ax1" value="<?php echo $ax1_beacon_comment; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Period</strong> |
||||
</label> |
||||
<input type="number" id="psw" placeholder="Period" name="period_ax1" min="0" max="60" step="10" value="<?php echo $ax1_beacon_time; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="path_ax1" value="none"<?php if ($ax1_beacon_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="path_ax1" value="WIDE2-1" <?php if ($ax1_beacon_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="path_ax1" value="WIDE2-2" <?php if ($ax1_beacon_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="path_ax1" value="WIDE3-3" <?php if ($ax1_beacon_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
<div id="submit_ax1"><button type="submit" class="btn" onclick="SubmitClicked_ax1()">Submit</button></div> |
||||
<div id="submit_done_ax1" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax1"><button type="button" class="btn cancel" onclick="closeForm_ax1()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="footer"> |
||||
<p>Open source hardware and software. Visit https://www.meezenest.nl/mees for more information.</p> |
||||
</div> |
||||
|
||||
<script> |
||||
function openForm_ax0() { |
||||
document.getElementById("popupForm_ax0_beacon").style.display = "block"; |
||||
} |
||||
function closeForm_ax0() { |
||||
document.getElementById("popupForm_ax0_beacon").style.display = "none"; |
||||
} |
||||
function openForm_ax1() { |
||||
document.getElementById("popup_ax1_beacon").style.display = "block"; |
||||
} |
||||
function closeForm_ax1() { |
||||
document.getElementById("popup_ax1_beacon").style.display = "none"; |
||||
} |
||||
|
||||
function show_heard_stations() { |
||||
document.getElementById("main_page").style.display = "none"; |
||||
document.getElementById("heard_stations").style.display = "block"; |
||||
document.getElementById("received_messages").style.display = "none"; |
||||
} |
||||
function show_received_messages() { |
||||
document.getElementById("main_page").style.display = "none"; |
||||
document.getElementById("heard_stations").style.display = "none"; |
||||
document.getElementById("received_messages").style.display = "block"; |
||||
} |
||||
|
||||
function show_main_page() { |
||||
document.getElementById("main_page").style.display = "block"; |
||||
document.getElementById("heard_stations").style.display = "none"; |
||||
document.getElementById("received_messages").style.display = "none"; |
||||
} |
||||
|
||||
|
||||
/* |
||||
Replacing Submit Button with 'Loading' Image |
||||
Version 2.0 |
||||
December 18, 2012 |
||||
|
||||
Will Bontrager Software, LLC |
||||
https://www.willmaster.com/ |
||||
Copyright 2012 Will Bontrager Software, LLC |
||||
|
||||
This software is provided "AS IS," without |
||||
any warranty of any kind, without even any |
||||
implied warranty such as merchantability |
||||
or fitness for a particular purpose. |
||||
Will Bontrager Software, LLC grants |
||||
you a royalty free license to use or |
||||
modify this software provided this |
||||
notice appears on all copies. |
||||
*/ |
||||
function SubmitClicked_ax1() |
||||
{ |
||||
document.getElementById("submit_ax1").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax1").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax1").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
|
||||
function SubmitClicked_ax0() |
||||
{ |
||||
document.getElementById("submit_ax0").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax0").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax0").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
</script> |
||||
</body> |
||||
</html> |
||||
|
||||
|
@ -0,0 +1,34 @@ |
||||
// Animated Icons |
||||
// -------------------------- |
||||
|
||||
.@{fa-css-prefix}-spin { |
||||
-webkit-animation: fa-spin 2s infinite linear; |
||||
animation: fa-spin 2s infinite linear; |
||||
} |
||||
|
||||
.@{fa-css-prefix}-pulse { |
||||
-webkit-animation: fa-spin 1s infinite steps(8); |
||||
animation: fa-spin 1s infinite steps(8); |
||||
} |
||||
|
||||
@-webkit-keyframes fa-spin { |
||||
0% { |
||||
-webkit-transform: rotate(0deg); |
||||
transform: rotate(0deg); |
||||
} |
||||
100% { |
||||
-webkit-transform: rotate(359deg); |
||||
transform: rotate(359deg); |
||||
} |
||||
} |
||||
|
||||
@keyframes fa-spin { |
||||
0% { |
||||
-webkit-transform: rotate(0deg); |
||||
transform: rotate(0deg); |
||||
} |
||||
100% { |
||||
-webkit-transform: rotate(359deg); |
||||
transform: rotate(359deg); |
||||
} |
||||
} |
@ -0,0 +1,25 @@ |
||||
// Bordered & Pulled |
||||
// ------------------------- |
||||
|
||||
.@{fa-css-prefix}-border { |
||||
padding: .2em .25em .15em; |
||||
border: solid .08em @fa-border-color; |
||||
border-radius: .1em; |
||||
} |
||||
|
||||
.@{fa-css-prefix}-pull-left { float: left; } |
||||
.@{fa-css-prefix}-pull-right { float: right; } |
||||
|
||||
.@{fa-css-prefix} { |
||||
&.@{fa-css-prefix}-pull-left { margin-right: .3em; } |
||||
&.@{fa-css-prefix}-pull-right { margin-left: .3em; } |
||||
} |
||||
|
||||
/* Deprecated as of 4.4.0 */ |
||||
.pull-right { float: right; } |
||||
.pull-left { float: left; } |
||||
|
||||
.@{fa-css-prefix} { |
||||
&.pull-left { margin-right: .3em; } |
||||
&.pull-right { margin-left: .3em; } |
||||
} |
@ -0,0 +1,12 @@ |
||||
// Base Class Definition |
||||
// ------------------------- |
||||
|
||||
.@{fa-css-prefix} { |
||||
display: inline-block; |
||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration |
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override |
||||
text-rendering: auto; // optimizelegibility throws things off #1094 |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
|
||||
} |
@ -0,0 +1,6 @@ |
||||
// Fixed Width Icons |
||||
// ------------------------- |
||||
.@{fa-css-prefix}-fw { |
||||
width: (18em / 14); |
||||
text-align: center; |
||||
} |
@ -0,0 +1,18 @@ |
||||
/*! |
||||
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome |
||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) |
||||
*/ |
||||
|
||||
@import "variables.less"; |
||||
@import "mixins.less"; |
||||
@import "path.less"; |
||||
@import "core.less"; |
||||
@import "larger.less"; |
||||
@import "fixed-width.less"; |
||||
@import "list.less"; |
||||
@import "bordered-pulled.less"; |
||||
@import "animated.less"; |
||||
@import "rotated-flipped.less"; |
||||
@import "stacked.less"; |
||||
@import "icons.less"; |
||||
@import "screen-reader.less"; |
@ -0,0 +1,789 @@ |
||||
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen |
||||
readers do not read off random characters that represent icons */ |
||||
|
||||
.@{fa-css-prefix}-glass:before { content: @fa-var-glass; } |
||||
.@{fa-css-prefix}-music:before { content: @fa-var-music; } |
||||
.@{fa-css-prefix}-search:before { content: @fa-var-search; } |
||||
.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } |
||||
.@{fa-css-prefix}-heart:before { content: @fa-var-heart; } |
||||
.@{fa-css-prefix}-star:before { content: @fa-var-star; } |
||||
.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } |
||||
.@{fa-css-prefix}-user:before { content: @fa-var-user; } |
||||
.@{fa-css-prefix}-film:before { content: @fa-var-film; } |
||||
.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } |
||||
.@{fa-css-prefix}-th:before { content: @fa-var-th; } |
||||
.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } |
||||
.@{fa-css-prefix}-check:before { content: @fa-var-check; } |
||||
.@{fa-css-prefix}-remove:before, |
||||
.@{fa-css-prefix}-close:before, |
||||
.@{fa-css-prefix}-times:before { content: @fa-var-times; } |
||||
.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } |
||||
.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } |
||||
.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } |
||||
.@{fa-css-prefix}-signal:before { content: @fa-var-signal; } |
||||
.@{fa-css-prefix}-gear:before, |
||||
.@{fa-css-prefix}-cog:before { content: @fa-var-cog; } |
||||
.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } |
||||
.@{fa-css-prefix}-home:before { content: @fa-var-home; } |
||||
.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } |
||||
.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } |
||||
.@{fa-css-prefix}-road:before { content: @fa-var-road; } |
||||
.@{fa-css-prefix}-download:before { content: @fa-var-download; } |
||||
.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } |
||||
.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } |
||||
.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } |
||||
.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } |
||||
.@{fa-css-prefix}-rotate-right:before, |
||||
.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } |
||||
.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } |
||||
.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } |
||||
.@{fa-css-prefix}-lock:before { content: @fa-var-lock; } |
||||
.@{fa-css-prefix}-flag:before { content: @fa-var-flag; } |
||||
.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } |
||||
.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } |
||||
.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } |
||||
.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } |
||||
.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } |
||||
.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } |
||||
.@{fa-css-prefix}-tag:before { content: @fa-var-tag; } |
||||
.@{fa-css-prefix}-tags:before { content: @fa-var-tags; } |
||||
.@{fa-css-prefix}-book:before { content: @fa-var-book; } |
||||
.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } |
||||
.@{fa-css-prefix}-print:before { content: @fa-var-print; } |
||||
.@{fa-css-prefix}-camera:before { content: @fa-var-camera; } |
||||
.@{fa-css-prefix}-font:before { content: @fa-var-font; } |
||||
.@{fa-css-prefix}-bold:before { content: @fa-var-bold; } |
||||
.@{fa-css-prefix}-italic:before { content: @fa-var-italic; } |
||||
.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } |
||||
.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } |
||||
.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } |
||||
.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } |
||||
.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } |
||||
.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } |
||||
.@{fa-css-prefix}-list:before { content: @fa-var-list; } |
||||
.@{fa-css-prefix}-dedent:before, |
||||
.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } |
||||
.@{fa-css-prefix}-indent:before { content: @fa-var-indent; } |
||||
.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } |
||||
.@{fa-css-prefix}-photo:before, |
||||
.@{fa-css-prefix}-image:before, |
||||
.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } |
||||
.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } |
||||
.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } |
||||
.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } |
||||
.@{fa-css-prefix}-tint:before { content: @fa-var-tint; } |
||||
.@{fa-css-prefix}-edit:before, |
||||
.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } |
||||
.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } |
||||
.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } |
||||
.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } |
||||
.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } |
||||
.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } |
||||
.@{fa-css-prefix}-backward:before { content: @fa-var-backward; } |
||||
.@{fa-css-prefix}-play:before { content: @fa-var-play; } |
||||
.@{fa-css-prefix}-pause:before { content: @fa-var-pause; } |
||||
.@{fa-css-prefix}-stop:before { content: @fa-var-stop; } |
||||
.@{fa-css-prefix}-forward:before { content: @fa-var-forward; } |
||||
.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } |
||||
.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } |
||||
.@{fa-css-prefix}-eject:before { content: @fa-var-eject; } |
||||
.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } |
||||
.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } |
||||
.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } |
||||
.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } |
||||
.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } |
||||
.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } |
||||
.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } |
||||
.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } |
||||
.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } |
||||
.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } |
||||
.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } |
||||
.@{fa-css-prefix}-ban:before { content: @fa-var-ban; } |
||||
.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } |
||||
.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } |
||||
.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } |
||||
.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } |
||||
.@{fa-css-prefix}-mail-forward:before, |
||||
.@{fa-css-prefix}-share:before { content: @fa-var-share; } |
||||
.@{fa-css-prefix}-expand:before { content: @fa-var-expand; } |
||||
.@{fa-css-prefix}-compress:before { content: @fa-var-compress; } |
||||
.@{fa-css-prefix}-plus:before { content: @fa-var-plus; } |
||||
.@{fa-css-prefix}-minus:before { content: @fa-var-minus; } |
||||
.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } |
||||
.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } |
||||
.@{fa-css-prefix}-gift:before { content: @fa-var-gift; } |
||||
.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } |
||||
.@{fa-css-prefix}-fire:before { content: @fa-var-fire; } |
||||
.@{fa-css-prefix}-eye:before { content: @fa-var-eye; } |
||||
.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } |
||||
.@{fa-css-prefix}-warning:before, |
||||
.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } |
||||
.@{fa-css-prefix}-plane:before { content: @fa-var-plane; } |
||||
.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } |
||||
.@{fa-css-prefix}-random:before { content: @fa-var-random; } |
||||
.@{fa-css-prefix}-comment:before { content: @fa-var-comment; } |
||||
.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } |
||||
.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } |
||||
.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } |
||||
.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } |
||||
.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } |
||||
.@{fa-css-prefix}-folder:before { content: @fa-var-folder; } |
||||
.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } |
||||
.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } |
||||
.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } |
||||
.@{fa-css-prefix}-bar-chart-o:before, |
||||
.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; } |
||||
.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } |
||||
.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } |
||||
.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } |
||||
.@{fa-css-prefix}-key:before { content: @fa-var-key; } |
||||
.@{fa-css-prefix}-gears:before, |
||||
.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } |
||||
.@{fa-css-prefix}-comments:before { content: @fa-var-comments; } |
||||
.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } |
||||
.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } |
||||
.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } |
||||
.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } |
||||
.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } |
||||
.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } |
||||
.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } |
||||
.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } |
||||
.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } |
||||
.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } |
||||
.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } |
||||
.@{fa-css-prefix}-upload:before { content: @fa-var-upload; } |
||||
.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } |
||||
.@{fa-css-prefix}-phone:before { content: @fa-var-phone; } |
||||
.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } |
||||
.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } |
||||
.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } |
||||
.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } |
||||
.@{fa-css-prefix}-facebook-f:before, |
||||
.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } |
||||
.@{fa-css-prefix}-github:before { content: @fa-var-github; } |
||||
.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } |
||||
.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } |
||||
.@{fa-css-prefix}-feed:before, |
||||
.@{fa-css-prefix}-rss:before { content: @fa-var-rss; } |
||||
.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } |
||||
.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } |
||||
.@{fa-css-prefix}-bell:before { content: @fa-var-bell; } |
||||
.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } |
||||
.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } |
||||
.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } |
||||
.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } |
||||
.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } |
||||
.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } |
||||
.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } |
||||
.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } |
||||
.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } |
||||
.@{fa-css-prefix}-globe:before { content: @fa-var-globe; } |
||||
.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } |
||||
.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } |
||||
.@{fa-css-prefix}-filter:before { content: @fa-var-filter; } |
||||
.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } |
||||
.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } |
||||
.@{fa-css-prefix}-group:before, |
||||
.@{fa-css-prefix}-users:before { content: @fa-var-users; } |
||||
.@{fa-css-prefix}-chain:before, |
||||
.@{fa-css-prefix}-link:before { content: @fa-var-link; } |
||||
.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } |
||||
.@{fa-css-prefix}-flask:before { content: @fa-var-flask; } |
||||
.@{fa-css-prefix}-cut:before, |
||||
.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } |
||||
.@{fa-css-prefix}-copy:before, |
||||
.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } |
||||
.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } |
||||
.@{fa-css-prefix}-save:before, |
||||
.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } |
||||
.@{fa-css-prefix}-square:before { content: @fa-var-square; } |
||||
.@{fa-css-prefix}-navicon:before, |
||||
.@{fa-css-prefix}-reorder:before, |
||||
.@{fa-css-prefix}-bars:before { content: @fa-var-bars; } |
||||
.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } |
||||
.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } |
||||
.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } |
||||
.@{fa-css-prefix}-underline:before { content: @fa-var-underline; } |
||||
.@{fa-css-prefix}-table:before { content: @fa-var-table; } |
||||
.@{fa-css-prefix}-magic:before { content: @fa-var-magic; } |
||||
.@{fa-css-prefix}-truck:before { content: @fa-var-truck; } |
||||
.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } |
||||
.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } |
||||
.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } |
||||
.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } |
||||
.@{fa-css-prefix}-money:before { content: @fa-var-money; } |
||||
.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } |
||||
.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } |
||||
.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } |
||||
.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } |
||||
.@{fa-css-prefix}-columns:before { content: @fa-var-columns; } |
||||
.@{fa-css-prefix}-unsorted:before, |
||||
.@{fa-css-prefix}-sort:before { content: @fa-var-sort; } |
||||
.@{fa-css-prefix}-sort-down:before, |
||||
.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } |
||||
.@{fa-css-prefix}-sort-up:before, |
||||
.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } |
||||
.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } |
||||
.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } |
||||
.@{fa-css-prefix}-rotate-left:before, |
||||
.@{fa-css-prefix}-undo:before { content: @fa-var-undo; } |
||||
.@{fa-css-prefix}-legal:before, |
||||
.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } |
||||
.@{fa-css-prefix}-dashboard:before, |
||||
.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } |
||||
.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } |
||||
.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } |
||||
.@{fa-css-prefix}-flash:before, |
||||
.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } |
||||
.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } |
||||
.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } |
||||
.@{fa-css-prefix}-paste:before, |
||||
.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } |
||||
.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } |
||||
.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } |
||||
.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } |
||||
.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } |
||||
.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } |
||||
.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } |
||||
.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } |
||||
.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } |
||||
.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } |
||||
.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } |
||||
.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } |
||||
.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } |
||||
.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } |
||||
.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } |
||||
.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } |
||||
.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } |
||||
.@{fa-css-prefix}-beer:before { content: @fa-var-beer; } |
||||
.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } |
||||
.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } |
||||
.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } |
||||
.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } |
||||
.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } |
||||
.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } |
||||
.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } |
||||
.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } |
||||
.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } |
||||
.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } |
||||
.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } |
||||
.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } |
||||
.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } |
||||
.@{fa-css-prefix}-mobile-phone:before, |
||||
.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } |
||||
.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } |
||||
.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } |
||||
.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } |
||||
.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } |
||||
.@{fa-css-prefix}-circle:before { content: @fa-var-circle; } |
||||
.@{fa-css-prefix}-mail-reply:before, |
||||
.@{fa-css-prefix}-reply:before { content: @fa-var-reply; } |
||||
.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } |
||||
.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } |
||||
.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } |
||||
.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } |
||||
.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } |
||||
.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } |
||||
.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } |
||||
.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } |
||||
.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } |
||||
.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } |
||||
.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } |
||||
.@{fa-css-prefix}-code:before { content: @fa-var-code; } |
||||
.@{fa-css-prefix}-mail-reply-all:before, |
||||
.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } |
||||
.@{fa-css-prefix}-star-half-empty:before, |
||||
.@{fa-css-prefix}-star-half-full:before, |
||||
.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } |
||||
.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } |
||||
.@{fa-css-prefix}-crop:before { content: @fa-var-crop; } |
||||
.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } |
||||
.@{fa-css-prefix}-unlink:before, |
||||
.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } |
||||
.@{fa-css-prefix}-question:before { content: @fa-var-question; } |
||||
.@{fa-css-prefix}-info:before { content: @fa-var-info; } |
||||
.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } |
||||
.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } |
||||
.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } |
||||
.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } |
||||
.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } |
||||
.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } |
||||
.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } |
||||
.@{fa-css-prefix}-shield:before { content: @fa-var-shield; } |
||||
.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } |
||||
.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } |
||||
.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } |
||||
.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } |
||||
.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } |
||||
.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } |
||||
.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } |
||||
.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } |
||||
.@{fa-css-prefix}-html5:before { content: @fa-var-html5; } |
||||
.@{fa-css-prefix}-css3:before { content: @fa-var-css3; } |
||||
.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } |
||||
.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } |
||||
.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } |
||||
.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } |
||||
.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } |
||||
.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } |
||||
.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } |
||||
.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } |
||||
.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } |
||||
.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } |
||||
.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } |
||||
.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } |
||||
.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } |
||||
.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } |
||||
.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } |
||||
.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } |
||||
.@{fa-css-prefix}-compass:before { content: @fa-var-compass; } |
||||
.@{fa-css-prefix}-toggle-down:before, |
||||
.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } |
||||
.@{fa-css-prefix}-toggle-up:before, |
||||
.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } |
||||
.@{fa-css-prefix}-toggle-right:before, |
||||
.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } |
||||
.@{fa-css-prefix}-euro:before, |
||||
.@{fa-css-prefix}-eur:before { content: @fa-var-eur; } |
||||
.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } |
||||
.@{fa-css-prefix}-dollar:before, |
||||
.@{fa-css-prefix}-usd:before { content: @fa-var-usd; } |
||||
.@{fa-css-prefix}-rupee:before, |
||||
.@{fa-css-prefix}-inr:before { content: @fa-var-inr; } |
||||
.@{fa-css-prefix}-cny:before, |
||||
.@{fa-css-prefix}-rmb:before, |
||||
.@{fa-css-prefix}-yen:before, |
||||
.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } |
||||
.@{fa-css-prefix}-ruble:before, |
||||
.@{fa-css-prefix}-rouble:before, |
||||
.@{fa-css-prefix}-rub:before { content: @fa-var-rub; } |
||||
.@{fa-css-prefix}-won:before, |
||||
.@{fa-css-prefix}-krw:before { content: @fa-var-krw; } |
||||
.@{fa-css-prefix}-bitcoin:before, |
||||
.@{fa-css-prefix}-btc:before { content: @fa-var-btc; } |
||||
.@{fa-css-prefix}-file:before { content: @fa-var-file; } |
||||
.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } |
||||
.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } |
||||
.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } |
||||
.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } |
||||
.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } |
||||
.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } |
||||
.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } |
||||
.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } |
||||
.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } |
||||
.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } |
||||
.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } |
||||
.@{fa-css-prefix}-xing:before { content: @fa-var-xing; } |
||||
.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } |
||||
.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } |
||||
.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } |
||||
.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } |
||||
.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } |
||||
.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } |
||||
.@{fa-css-prefix}-adn:before { content: @fa-var-adn; } |
||||
.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } |
||||
.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } |
||||
.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } |
||||
.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } |
||||
.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } |
||||
.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } |
||||
.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } |
||||
.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } |
||||
.@{fa-css-prefix}-apple:before { content: @fa-var-apple; } |
||||
.@{fa-css-prefix}-windows:before { content: @fa-var-windows; } |
||||
.@{fa-css-prefix}-android:before { content: @fa-var-android; } |
||||
.@{fa-css-prefix}-linux:before { content: @fa-var-linux; } |
||||
.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } |
||||
.@{fa-css-prefix}-skype:before { content: @fa-var-skype; } |
||||
.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } |
||||
.@{fa-css-prefix}-trello:before { content: @fa-var-trello; } |
||||
.@{fa-css-prefix}-female:before { content: @fa-var-female; } |
||||
.@{fa-css-prefix}-male:before { content: @fa-var-male; } |
||||
.@{fa-css-prefix}-gittip:before, |
||||
.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; } |
||||
.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } |
||||
.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } |
||||
.@{fa-css-prefix}-archive:before { content: @fa-var-archive; } |
||||
.@{fa-css-prefix}-bug:before { content: @fa-var-bug; } |
||||
.@{fa-css-prefix}-vk:before { content: @fa-var-vk; } |
||||
.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } |
||||
.@{fa-css-prefix}-renren:before { content: @fa-var-renren; } |
||||
.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } |
||||
.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } |
||||
.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } |
||||
.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } |
||||
.@{fa-css-prefix}-toggle-left:before, |
||||
.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } |
||||
.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } |
||||
.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } |
||||
.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } |
||||
.@{fa-css-prefix}-turkish-lira:before, |
||||
.@{fa-css-prefix}-try:before { content: @fa-var-try; } |
||||
.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } |
||||
.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; } |
||||
.@{fa-css-prefix}-slack:before { content: @fa-var-slack; } |
||||
.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; } |
||||
.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; } |
||||
.@{fa-css-prefix}-openid:before { content: @fa-var-openid; } |
||||
.@{fa-css-prefix}-institution:before, |
||||
.@{fa-css-prefix}-bank:before, |
||||
.@{fa-css-prefix}-university:before { content: @fa-var-university; } |
||||
.@{fa-css-prefix}-mortar-board:before, |
||||
.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; } |
||||
.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; } |
||||
.@{fa-css-prefix}-google:before { content: @fa-var-google; } |
||||
.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } |
||||
.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; } |
||||
.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; } |
||||
.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; } |
||||
.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; } |
||||
.@{fa-css-prefix}-digg:before { content: @fa-var-digg; } |
||||
.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; } |
||||
.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } |
||||
.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; } |
||||
.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; } |
||||
.@{fa-css-prefix}-language:before { content: @fa-var-language; } |
||||
.@{fa-css-prefix}-fax:before { content: @fa-var-fax; } |
||||
.@{fa-css-prefix}-building:before { content: @fa-var-building; } |
||||
.@{fa-css-prefix}-child:before { content: @fa-var-child; } |
||||
.@{fa-css-prefix}-paw:before { content: @fa-var-paw; } |
||||
.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; } |
||||
.@{fa-css-prefix}-cube:before { content: @fa-var-cube; } |
||||
.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; } |
||||
.@{fa-css-prefix}-behance:before { content: @fa-var-behance; } |
||||
.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; } |
||||
.@{fa-css-prefix}-steam:before { content: @fa-var-steam; } |
||||
.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; } |
||||
.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } |
||||
.@{fa-css-prefix}-automobile:before, |
||||
.@{fa-css-prefix}-car:before { content: @fa-var-car; } |
||||
.@{fa-css-prefix}-cab:before, |
||||
.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; } |
||||
.@{fa-css-prefix}-tree:before { content: @fa-var-tree; } |
||||
.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; } |
||||
.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; } |
||||
.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; } |
||||
.@{fa-css-prefix}-database:before { content: @fa-var-database; } |
||||
.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; } |
||||
.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; } |
||||
.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; } |
||||
.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; } |
||||
.@{fa-css-prefix}-file-photo-o:before, |
||||
.@{fa-css-prefix}-file-picture-o:before, |
||||
.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; } |
||||
.@{fa-css-prefix}-file-zip-o:before, |
||||
.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; } |
||||
.@{fa-css-prefix}-file-sound-o:before, |
||||
.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; } |
||||
.@{fa-css-prefix}-file-movie-o:before, |
||||
.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; } |
||||
.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; } |
||||
.@{fa-css-prefix}-vine:before { content: @fa-var-vine; } |
||||
.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; } |
||||
.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; } |
||||
.@{fa-css-prefix}-life-bouy:before, |
||||
.@{fa-css-prefix}-life-buoy:before, |
||||
.@{fa-css-prefix}-life-saver:before, |
||||
.@{fa-css-prefix}-support:before, |
||||
.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; } |
||||
.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; } |
||||
.@{fa-css-prefix}-ra:before, |
||||
.@{fa-css-prefix}-resistance:before, |
||||
.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } |
||||
.@{fa-css-prefix}-ge:before, |
||||
.@{fa-css-prefix}-empire:before { content: @fa-var-empire; } |
||||
.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } |
||||
.@{fa-css-prefix}-git:before { content: @fa-var-git; } |
||||
.@{fa-css-prefix}-y-combinator-square:before, |
||||
.@{fa-css-prefix}-yc-square:before, |
||||
.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } |
||||
.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } |
||||
.@{fa-css-prefix}-qq:before { content: @fa-var-qq; } |
||||
.@{fa-css-prefix}-wechat:before, |
||||
.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; } |
||||
.@{fa-css-prefix}-send:before, |
||||
.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; } |
||||
.@{fa-css-prefix}-send-o:before, |
||||
.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } |
||||
.@{fa-css-prefix}-history:before { content: @fa-var-history; } |
||||
.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } |
||||
.@{fa-css-prefix}-header:before { content: @fa-var-header; } |
||||
.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } |
||||
.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; } |
||||
.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; } |
||||
.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; } |
||||
.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; } |
||||
.@{fa-css-prefix}-soccer-ball-o:before, |
||||
.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; } |
||||
.@{fa-css-prefix}-tty:before { content: @fa-var-tty; } |
||||
.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; } |
||||
.@{fa-css-prefix}-plug:before { content: @fa-var-plug; } |
||||
.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; } |
||||
.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; } |
||||
.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; } |
||||
.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; } |
||||
.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; } |
||||
.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } |
||||
.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; } |
||||
.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; } |
||||
.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; } |
||||
.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; } |
||||
.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; } |
||||
.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; } |
||||
.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; } |
||||
.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; } |
||||
.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; } |
||||
.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; } |
||||
.@{fa-css-prefix}-trash:before { content: @fa-var-trash; } |
||||
.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } |
||||
.@{fa-css-prefix}-at:before { content: @fa-var-at; } |
||||
.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; } |
||||
.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; } |
||||
.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; } |
||||
.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; } |
||||
.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; } |
||||
.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; } |
||||
.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; } |
||||
.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; } |
||||
.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; } |
||||
.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; } |
||||
.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; } |
||||
.@{fa-css-prefix}-bus:before { content: @fa-var-bus; } |
||||
.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; } |
||||
.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; } |
||||
.@{fa-css-prefix}-cc:before { content: @fa-var-cc; } |
||||
.@{fa-css-prefix}-shekel:before, |
||||
.@{fa-css-prefix}-sheqel:before, |
||||
.@{fa-css-prefix}-ils:before { content: @fa-var-ils; } |
||||
.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; } |
||||
.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } |
||||
.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; } |
||||
.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } |
||||
.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; } |
||||
.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; } |
||||
.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; } |
||||
.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } |
||||
.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; } |
||||
.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; } |
||||
.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; } |
||||
.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; } |
||||
.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; } |
||||
.@{fa-css-prefix}-ship:before { content: @fa-var-ship; } |
||||
.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; } |
||||
.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } |
||||
.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; } |
||||
.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; } |
||||
.@{fa-css-prefix}-venus:before { content: @fa-var-venus; } |
||||
.@{fa-css-prefix}-mars:before { content: @fa-var-mars; } |
||||
.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } |
||||
.@{fa-css-prefix}-intersex:before, |
||||
.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } |
||||
.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } |
||||
.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } |
||||
.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; } |
||||
.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; } |
||||
.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; } |
||||
.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } |
||||
.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } |
||||
.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } |
||||
.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; } |
||||
.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } |
||||
.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } |
||||
.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } |
||||
.@{fa-css-prefix}-server:before { content: @fa-var-server; } |
||||
.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; } |
||||
.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; } |
||||
.@{fa-css-prefix}-hotel:before, |
||||
.@{fa-css-prefix}-bed:before { content: @fa-var-bed; } |
||||
.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; } |
||||
.@{fa-css-prefix}-train:before { content: @fa-var-train; } |
||||
.@{fa-css-prefix}-subway:before { content: @fa-var-subway; } |
||||
.@{fa-css-prefix}-medium:before { content: @fa-var-medium; } |
||||
.@{fa-css-prefix}-yc:before, |
||||
.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; } |
||||
.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } |
||||
.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; } |
||||
.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } |
||||
.@{fa-css-prefix}-battery-4:before, |
||||
.@{fa-css-prefix}-battery:before, |
||||
.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; } |
||||
.@{fa-css-prefix}-battery-3:before, |
||||
.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; } |
||||
.@{fa-css-prefix}-battery-2:before, |
||||
.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; } |
||||
.@{fa-css-prefix}-battery-1:before, |
||||
.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; } |
||||
.@{fa-css-prefix}-battery-0:before, |
||||
.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; } |
||||
.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } |
||||
.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; } |
||||
.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; } |
||||
.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; } |
||||
.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; } |
||||
.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; } |
||||
.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; } |
||||
.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; } |
||||
.@{fa-css-prefix}-clone:before { content: @fa-var-clone; } |
||||
.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } |
||||
.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; } |
||||
.@{fa-css-prefix}-hourglass-1:before, |
||||
.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; } |
||||
.@{fa-css-prefix}-hourglass-2:before, |
||||
.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; } |
||||
.@{fa-css-prefix}-hourglass-3:before, |
||||
.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; } |
||||
.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; } |
||||
.@{fa-css-prefix}-hand-grab-o:before, |
||||
.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; } |
||||
.@{fa-css-prefix}-hand-stop-o:before, |
||||
.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; } |
||||
.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; } |
||||
.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; } |
||||
.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; } |
||||
.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; } |
||||
.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; } |
||||
.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } |
||||
.@{fa-css-prefix}-registered:before { content: @fa-var-registered; } |
||||
.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } |
||||
.@{fa-css-prefix}-gg:before { content: @fa-var-gg; } |
||||
.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; } |
||||
.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; } |
||||
.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; } |
||||
.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; } |
||||
.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; } |
||||
.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; } |
||||
.@{fa-css-prefix}-safari:before { content: @fa-var-safari; } |
||||
.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; } |
||||
.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } |
||||
.@{fa-css-prefix}-opera:before { content: @fa-var-opera; } |
||||
.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } |
||||
.@{fa-css-prefix}-tv:before, |
||||
.@{fa-css-prefix}-television:before { content: @fa-var-television; } |
||||
.@{fa-css-prefix}-contao:before { content: @fa-var-contao; } |
||||
.@{fa-css-prefix}-500px:before { content: @fa-var-500px; } |
||||
.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; } |
||||
.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; } |
||||
.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; } |
||||
.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; } |
||||
.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; } |
||||
.@{fa-css-prefix}-industry:before { content: @fa-var-industry; } |
||||
.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; } |
||||
.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; } |
||||
.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; } |
||||
.@{fa-css-prefix}-map:before { content: @fa-var-map; } |
||||
.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; } |
||||
.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; } |
||||
.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; } |
||||
.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; } |
||||
.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; } |
||||
.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; } |
||||
.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; } |
||||
.@{fa-css-prefix}-edge:before { content: @fa-var-edge; } |
||||
.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; } |
||||
.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; } |
||||
.@{fa-css-prefix}-modx:before { content: @fa-var-modx; } |
||||
.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; } |
||||
.@{fa-css-prefix}-usb:before { content: @fa-var-usb; } |
||||
.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; } |
||||
.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; } |
||||
.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; } |
||||
.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; } |
||||
.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; } |
||||
.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; } |
||||
.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; } |
||||
.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; } |
||||
.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; } |
||||
.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; } |
||||
.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; } |
||||
.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; } |
||||
.@{fa-css-prefix}-percent:before { content: @fa-var-percent; } |
||||
.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; } |
||||
.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; } |
||||
.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; } |
||||
.@{fa-css-prefix}-envira:before { content: @fa-var-envira; } |
||||
.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; } |
||||
.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; } |
||||
.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; } |
||||
.@{fa-css-prefix}-blind:before { content: @fa-var-blind; } |
||||
.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; } |
||||
.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; } |
||||
.@{fa-css-prefix}-braille:before { content: @fa-var-braille; } |
||||
.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; } |
||||
.@{fa-css-prefix}-asl-interpreting:before, |
||||
.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; } |
||||
.@{fa-css-prefix}-deafness:before, |
||||
.@{fa-css-prefix}-hard-of-hearing:before, |
||||
.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; } |
||||
.@{fa-css-prefix}-glide:before { content: @fa-var-glide; } |
||||
.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; } |
||||
.@{fa-css-prefix}-signing:before, |
||||
.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; } |
||||
.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; } |
||||
.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; } |
||||
.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; } |
||||
.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; } |
||||
.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; } |
||||
.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; } |
||||
.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; } |
||||
.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; } |
||||
.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; } |
||||
.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; } |
||||
.@{fa-css-prefix}-google-plus-circle:before, |
||||
.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; } |
||||
.@{fa-css-prefix}-fa:before, |
||||
.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; } |
||||
.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; } |
||||
.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; } |
||||
.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; } |
||||
.@{fa-css-prefix}-linode:before { content: @fa-var-linode; } |
||||
.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; } |
||||
.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; } |
||||
.@{fa-css-prefix}-vcard:before, |
||||
.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; } |
||||
.@{fa-css-prefix}-vcard-o:before, |
||||
.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; } |
||||
.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; } |
||||
.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; } |
||||
.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; } |
||||
.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; } |
||||
.@{fa-css-prefix}-drivers-license:before, |
||||
.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; } |
||||
.@{fa-css-prefix}-drivers-license-o:before, |
||||
.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; } |
||||
.@{fa-css-prefix}-quora:before { content: @fa-var-quora; } |
||||
.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; } |
||||
.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; } |
||||
.@{fa-css-prefix}-thermometer-4:before, |
||||
.@{fa-css-prefix}-thermometer:before, |
||||
.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; } |
||||
.@{fa-css-prefix}-thermometer-3:before, |
||||
.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; } |
||||
.@{fa-css-prefix}-thermometer-2:before, |
||||
.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; } |
||||
.@{fa-css-prefix}-thermometer-1:before, |
||||
.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; } |
||||
.@{fa-css-prefix}-thermometer-0:before, |
||||
.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; } |
||||
.@{fa-css-prefix}-shower:before { content: @fa-var-shower; } |
||||
.@{fa-css-prefix}-bathtub:before, |
||||
.@{fa-css-prefix}-s15:before, |
||||
.@{fa-css-prefix}-bath:before { content: @fa-var-bath; } |
||||
.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; } |
||||
.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; } |
||||
.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; } |
||||
.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; } |
||||
.@{fa-css-prefix}-times-rectangle:before, |
||||
.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; } |
||||
.@{fa-css-prefix}-times-rectangle-o:before, |
||||
.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; } |
||||
.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; } |
||||
.@{fa-css-prefix}-grav:before { content: @fa-var-grav; } |
||||
.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; } |
||||
.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; } |
||||
.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; } |
||||
.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; } |
||||
.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; } |
||||
.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; } |
||||
.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; } |
||||
.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; } |
||||
.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; } |
@ -0,0 +1,13 @@ |
||||
// Icon Sizes |
||||
// ------------------------- |
||||
|
||||
/* makes the font 33% larger relative to the icon container */ |
||||
.@{fa-css-prefix}-lg { |
||||
font-size: (4em / 3); |
||||
line-height: (3em / 4); |
||||
vertical-align: -15%; |
||||
} |
||||
.@{fa-css-prefix}-2x { font-size: 2em; } |
||||
.@{fa-css-prefix}-3x { font-size: 3em; } |
||||
.@{fa-css-prefix}-4x { font-size: 4em; } |
||||
.@{fa-css-prefix}-5x { font-size: 5em; } |
@ -0,0 +1,19 @@ |
||||
// List Icons |
||||
// ------------------------- |
||||
|
||||
.@{fa-css-prefix}-ul { |
||||
padding-left: 0; |
||||
margin-left: @fa-li-width; |
||||
list-style-type: none; |
||||
> li { position: relative; } |
||||
} |
||||
.@{fa-css-prefix}-li { |
||||
position: absolute; |
||||
left: -@fa-li-width; |
||||
width: @fa-li-width; |
||||
top: (2em / 14); |
||||
text-align: center; |
||||
&.@{fa-css-prefix}-lg { |
||||
left: (-@fa-li-width + (4em / 14)); |
||||
} |
||||
} |
@ -0,0 +1,60 @@ |
||||
// Mixins |
||||
// -------------------------- |
||||
|
||||
.fa-icon() { |
||||
display: inline-block; |
||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration |
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override |
||||
text-rendering: auto; // optimizelegibility throws things off #1094 |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
|
||||
} |
||||
|
||||
.fa-icon-rotate(@degrees, @rotation) { |
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; |
||||
-webkit-transform: rotate(@degrees); |
||||
-ms-transform: rotate(@degrees); |
||||
transform: rotate(@degrees); |
||||
} |
||||
|
||||
.fa-icon-flip(@horiz, @vert, @rotation) { |
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; |
||||
-webkit-transform: scale(@horiz, @vert); |
||||
-ms-transform: scale(@horiz, @vert); |
||||
transform: scale(@horiz, @vert); |
||||
} |
||||
|
||||
|
||||
// Only display content to screen readers. A la Bootstrap 4. |
||||
// |
||||
// See: http://a11yproject.com/posts/how-to-hide-content/ |
||||
|
||||
.sr-only() { |
||||
position: absolute; |
||||
width: 1px; |
||||
height: 1px; |
||||
padding: 0; |
||||
margin: -1px; |
||||
overflow: hidden; |
||||
clip: rect(0,0,0,0); |
||||
border: 0; |
||||
} |
||||
|
||||
// Use in conjunction with .sr-only to only display content when it's focused. |
||||
// |
||||
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 |
||||
// |
||||
// Credit: HTML5 Boilerplate |
||||
|
||||
.sr-only-focusable() { |
||||
&:active, |
||||
&:focus { |
||||
position: static; |
||||
width: auto; |
||||
height: auto; |
||||
margin: 0; |
||||
overflow: visible; |
||||
clip: auto; |
||||
} |
||||
} |
@ -0,0 +1,15 @@ |
||||
/* FONT PATH |
||||
* -------------------------- */ |
||||
|
||||
@font-face { |
||||
font-family: 'FontAwesome'; |
||||
src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); |
||||
src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), |
||||
url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), |
||||
url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), |
||||
url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), |
||||
url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); |
||||
// src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts |
||||
font-weight: normal; |
||||
font-style: normal; |
||||
} |
@ -0,0 +1,20 @@ |
||||
// Rotated & Flipped Icons |
||||
// ------------------------- |
||||
|
||||
.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } |
||||
.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } |
||||
.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } |
||||
|
||||
.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } |
||||
.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } |
||||
|
||||
// Hook for IE8-9 |
||||
// ------------------------- |
||||
|
||||
:root .@{fa-css-prefix}-rotate-90, |
||||
:root .@{fa-css-prefix}-rotate-180, |
||||
:root .@{fa-css-prefix}-rotate-270, |
||||
:root .@{fa-css-prefix}-flip-horizontal, |
||||
:root .@{fa-css-prefix}-flip-vertical { |
||||
filter: none; |
||||
} |
@ -0,0 +1,5 @@ |
||||
// Screen Readers |
||||
// ------------------------- |
||||
|
||||
.sr-only { .sr-only(); } |
||||
.sr-only-focusable { .sr-only-focusable(); } |
@ -0,0 +1,20 @@ |
||||
// Stacked Icons |
||||
// ------------------------- |
||||
|
||||
.@{fa-css-prefix}-stack { |
||||
position: relative; |
||||
display: inline-block; |
||||
width: 2em; |
||||
height: 2em; |
||||
line-height: 2em; |
||||
vertical-align: middle; |
||||
} |
||||
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { |
||||
position: absolute; |
||||
left: 0; |
||||
width: 100%; |
||||
text-align: center; |
||||
} |
||||
.@{fa-css-prefix}-stack-1x { line-height: inherit; } |
||||
.@{fa-css-prefix}-stack-2x { font-size: 2em; } |
||||
.@{fa-css-prefix}-inverse { color: @fa-inverse; } |
@ -0,0 +1,800 @@ |
||||
// Variables |
||||
// -------------------------- |
||||
|
||||
@fa-font-path: "../fonts"; |
||||
@fa-font-size-base: 14px; |
||||
@fa-line-height-base: 1; |
||||
//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly |
||||
@fa-css-prefix: fa; |
||||
@fa-version: "4.7.0"; |
||||
@fa-border-color: #eee; |
||||
@fa-inverse: #fff; |
||||
@fa-li-width: (30em / 14); |
||||
|
||||
@fa-var-500px: "\f26e"; |
||||
@fa-var-address-book: "\f2b9"; |
||||
@fa-var-address-book-o: "\f2ba"; |
||||
@fa-var-address-card: "\f2bb"; |
||||
@fa-var-address-card-o: "\f2bc"; |
||||
@fa-var-adjust: "\f042"; |
||||
@fa-var-adn: "\f170"; |
||||
@fa-var-align-center: "\f037"; |
||||
@fa-var-align-justify: "\f039"; |
||||
@fa-var-align-left: "\f036"; |
||||
@fa-var-align-right: "\f038"; |
||||
@fa-var-amazon: "\f270"; |
||||
@fa-var-ambulance: "\f0f9"; |
||||
@fa-var-american-sign-language-interpreting: "\f2a3"; |
||||
@fa-var-anchor: "\f13d"; |
||||
@fa-var-android: "\f17b"; |
||||
@fa-var-angellist: "\f209"; |
||||
@fa-var-angle-double-down: "\f103"; |
||||
@fa-var-angle-double-left: "\f100"; |
||||
@fa-var-angle-double-right: "\f101"; |
||||
@fa-var-angle-double-up: "\f102"; |
||||
@fa-var-angle-down: "\f107"; |
||||
@fa-var-angle-left: "\f104"; |
||||
@fa-var-angle-right: "\f105"; |
||||
@fa-var-angle-up: "\f106"; |
||||
@fa-var-apple: "\f179"; |
||||
@fa-var-archive: "\f187"; |
||||
@fa-var-area-chart: "\f1fe"; |
||||
@fa-var-arrow-circle-down: "\f0ab"; |
||||
@fa-var-arrow-circle-left: "\f0a8"; |
||||
@fa-var-arrow-circle-o-down: "\f01a"; |
||||
@fa-var-arrow-circle-o-left: "\f190"; |
||||
@fa-var-arrow-circle-o-right: "\f18e"; |
||||
@fa-var-arrow-circle-o-up: "\f01b"; |
||||
@fa-var-arrow-circle-right: "\f0a9"; |
||||
@fa-var-arrow-circle-up: "\f0aa"; |
||||
@fa-var-arrow-down: "\f063"; |
||||
@fa-var-arrow-left: "\f060"; |
||||
@fa-var-arrow-right: "\f061"; |
||||
@fa-var-arrow-up: "\f062"; |
||||
@fa-var-arrows: "\f047"; |
||||
@fa-var-arrows-alt: "\f0b2"; |
||||
@fa-var-arrows-h: "\f07e"; |
||||
@fa-var-arrows-v: "\f07d"; |
||||
@fa-var-asl-interpreting: "\f2a3"; |
||||
@fa-var-assistive-listening-systems: "\f2a2"; |
||||
@fa-var-asterisk: "\f069"; |
||||
@fa-var-at: "\f1fa"; |
||||
@fa-var-audio-description: "\f29e"; |
||||
@fa-var-automobile: "\f1b9"; |
||||
@fa-var-backward: "\f04a"; |
||||
@fa-var-balance-scale: "\f24e"; |
||||
@fa-var-ban: "\f05e"; |
||||
@fa-var-bandcamp: "\f2d5"; |
||||
@fa-var-bank: "\f19c"; |
||||
@fa-var-bar-chart: "\f080"; |
||||
@fa-var-bar-chart-o: "\f080"; |
||||
@fa-var-barcode: "\f02a"; |
||||
@fa-var-bars: "\f0c9"; |
||||
@fa-var-bath: "\f2cd"; |
||||
@fa-var-bathtub: "\f2cd"; |
||||
@fa-var-battery: "\f240"; |
||||
@fa-var-battery-0: "\f244"; |
||||
@fa-var-battery-1: "\f243"; |
||||
@fa-var-battery-2: "\f242"; |
||||
@fa-var-battery-3: "\f241"; |
||||
@fa-var-battery-4: "\f240"; |
||||
@fa-var-battery-empty: "\f244"; |
||||
@fa-var-battery-full: "\f240"; |
||||
@fa-var-battery-half: "\f242"; |
||||
@fa-var-battery-quarter: "\f243"; |
||||
@fa-var-battery-three-quarters: "\f241"; |
||||
@fa-var-bed: "\f236"; |
||||
@fa-var-beer: "\f0fc"; |
||||
@fa-var-behance: "\f1b4"; |
||||
@fa-var-behance-square: "\f1b5"; |
||||
@fa-var-bell: "\f0f3"; |
||||
@fa-var-bell-o: "\f0a2"; |
||||
@fa-var-bell-slash: "\f1f6"; |
||||
@fa-var-bell-slash-o: "\f1f7"; |
||||
@fa-var-bicycle: "\f206"; |
||||
@fa-var-binoculars: "\f1e5"; |
||||
@fa-var-birthday-cake: "\f1fd"; |
||||
@fa-var-bitbucket: "\f171"; |
||||
@fa-var-bitbucket-square: "\f172"; |
||||
@fa-var-bitcoin: "\f15a"; |
||||
@fa-var-black-tie: "\f27e"; |
||||
@fa-var-blind: "\f29d"; |
||||
@fa-var-bluetooth: "\f293"; |
||||
@fa-var-bluetooth-b: "\f294"; |
||||
@fa-var-bold: "\f032"; |
||||
@fa-var-bolt: "\f0e7"; |
||||
@fa-var-bomb: "\f1e2"; |
||||
@fa-var-book: "\f02d"; |
||||
@fa-var-bookmark: "\f02e"; |
||||
@fa-var-bookmark-o: "\f097"; |
||||
@fa-var-braille: "\f2a1"; |
||||
@fa-var-briefcase: "\f0b1"; |
||||
@fa-var-btc: "\f15a"; |
||||
@fa-var-bug: "\f188"; |
||||
@fa-var-building: "\f1ad"; |
||||
@fa-var-building-o: "\f0f7"; |
||||
@fa-var-bullhorn: "\f0a1"; |
||||
@fa-var-bullseye: "\f140"; |
||||
@fa-var-bus: "\f207"; |
||||
@fa-var-buysellads: "\f20d"; |
||||
@fa-var-cab: "\f1ba"; |
||||
@fa-var-calculator: "\f1ec"; |
||||
@fa-var-calendar: "\f073"; |
||||
@fa-var-calendar-check-o: "\f274"; |
||||
@fa-var-calendar-minus-o: "\f272"; |
||||
@fa-var-calendar-o: "\f133"; |
||||
@fa-var-calendar-plus-o: "\f271"; |
||||
@fa-var-calendar-times-o: "\f273"; |
||||
@fa-var-camera: "\f030"; |
||||
@fa-var-camera-retro: "\f083"; |
||||
@fa-var-car: "\f1b9"; |
||||
@fa-var-caret-down: "\f0d7"; |
||||
@fa-var-caret-left: "\f0d9"; |
||||
@fa-var-caret-right: "\f0da"; |
||||
@fa-var-caret-square-o-down: "\f150"; |
||||
@fa-var-caret-square-o-left: "\f191"; |
||||
@fa-var-caret-square-o-right: "\f152"; |
||||
@fa-var-caret-square-o-up: "\f151"; |
||||
@fa-var-caret-up: "\f0d8"; |
||||
@fa-var-cart-arrow-down: "\f218"; |
||||
@fa-var-cart-plus: "\f217"; |
||||
@fa-var-cc: "\f20a"; |
||||
@fa-var-cc-amex: "\f1f3"; |
||||
@fa-var-cc-diners-club: "\f24c"; |
||||
@fa-var-cc-discover: "\f1f2"; |
||||
@fa-var-cc-jcb: "\f24b"; |
||||
@fa-var-cc-mastercard: "\f1f1"; |
||||
@fa-var-cc-paypal: "\f1f4"; |
||||
@fa-var-cc-stripe: "\f1f5"; |
||||
@fa-var-cc-visa: "\f1f0"; |
||||
@fa-var-certificate: "\f0a3"; |
||||
@fa-var-chain: "\f0c1"; |
||||
@fa-var-chain-broken: "\f127"; |
||||
@fa-var-check: "\f00c"; |
||||
@fa-var-check-circle: "\f058"; |
||||
@fa-var-check-circle-o: "\f05d"; |
||||
@fa-var-check-square: "\f14a"; |
||||
@fa-var-check-square-o: "\f046"; |
||||
@fa-var-chevron-circle-down: "\f13a"; |
||||
@fa-var-chevron-circle-left: "\f137"; |
||||
@fa-var-chevron-circle-right: "\f138"; |
||||
@fa-var-chevron-circle-up: "\f139"; |
||||
@fa-var-chevron-down: "\f078"; |
||||
@fa-var-chevron-left: "\f053"; |
||||
@fa-var-chevron-right: "\f054"; |
||||
@fa-var-chevron-up: "\f077"; |
||||
@fa-var-child: "\f1ae"; |
||||
@fa-var-chrome: "\f268"; |
||||
@fa-var-circle: "\f111"; |
||||
@fa-var-circle-o: "\f10c"; |
||||
@fa-var-circle-o-notch: "\f1ce"; |
||||
@fa-var-circle-thin: "\f1db"; |
||||
@fa-var-clipboard: "\f0ea"; |
||||
@fa-var-clock-o: "\f017"; |
||||
@fa-var-clone: "\f24d"; |
||||
@fa-var-close: "\f00d"; |
||||
@fa-var-cloud: "\f0c2"; |
||||
@fa-var-cloud-download: "\f0ed"; |
||||
@fa-var-cloud-upload: "\f0ee"; |
||||
@fa-var-cny: "\f157"; |
||||
@fa-var-code: "\f121"; |
||||
@fa-var-code-fork: "\f126"; |
||||
@fa-var-codepen: "\f1cb"; |
||||
@fa-var-codiepie: "\f284"; |
||||
@fa-var-coffee: "\f0f4"; |
||||
@fa-var-cog: "\f013"; |
||||
@fa-var-cogs: "\f085"; |
||||
@fa-var-columns: "\f0db"; |
||||
@fa-var-comment: "\f075"; |
||||
@fa-var-comment-o: "\f0e5"; |
||||
@fa-var-commenting: "\f27a"; |
||||
@fa-var-commenting-o: "\f27b"; |
||||
@fa-var-comments: "\f086"; |
||||
@fa-var-comments-o: "\f0e6"; |
||||
@fa-var-compass: "\f14e"; |
||||
@fa-var-compress: "\f066"; |
||||
@fa-var-connectdevelop: "\f20e"; |
||||
@fa-var-contao: "\f26d"; |
||||
@fa-var-copy: "\f0c5"; |
||||
@fa-var-copyright: "\f1f9"; |
||||
@fa-var-creative-commons: "\f25e"; |
||||
@fa-var-credit-card: "\f09d"; |
||||
@fa-var-credit-card-alt: "\f283"; |
||||
@fa-var-crop: "\f125"; |
||||
@fa-var-crosshairs: "\f05b"; |
||||
@fa-var-css3: "\f13c"; |
||||
@fa-var-cube: "\f1b2"; |
||||
@fa-var-cubes: "\f1b3"; |
||||
@fa-var-cut: "\f0c4"; |
||||
@fa-var-cutlery: "\f0f5"; |
||||
@fa-var-dashboard: "\f0e4"; |
||||
@fa-var-dashcube: "\f210"; |
||||
@fa-var-database: "\f1c0"; |
||||
@fa-var-deaf: "\f2a4"; |
||||
@fa-var-deafness: "\f2a4"; |
||||
@fa-var-dedent: "\f03b"; |
||||
@fa-var-delicious: "\f1a5"; |
||||
@fa-var-desktop: "\f108"; |
||||
@fa-var-deviantart: "\f1bd"; |
||||
@fa-var-diamond: "\f219"; |
||||
@fa-var-digg: "\f1a6"; |
||||
@fa-var-dollar: "\f155"; |
||||
@fa-var-dot-circle-o: "\f192"; |
||||
@fa-var-download: "\f019"; |
||||
@fa-var-dribbble: "\f17d"; |
||||
@fa-var-drivers-license: "\f2c2"; |
||||
@fa-var-drivers-license-o: "\f2c3"; |
||||
@fa-var-dropbox: "\f16b"; |
||||
@fa-var-drupal: "\f1a9"; |
||||
@fa-var-edge: "\f282"; |
||||
@fa-var-edit: "\f044"; |
||||
@fa-var-eercast: "\f2da"; |
||||
@fa-var-eject: "\f052"; |
||||
@fa-var-ellipsis-h: "\f141"; |
||||
@fa-var-ellipsis-v: "\f142"; |
||||
@fa-var-empire: "\f1d1"; |
||||
@fa-var-envelope: "\f0e0"; |
||||
@fa-var-envelope-o: "\f003"; |
||||
@fa-var-envelope-open: "\f2b6"; |
||||
@fa-var-envelope-open-o: "\f2b7"; |
||||
@fa-var-envelope-square: "\f199"; |
||||
@fa-var-envira: "\f299"; |
||||
@fa-var-eraser: "\f12d"; |
||||
@fa-var-etsy: "\f2d7"; |
||||
@fa-var-eur: "\f153"; |
||||
@fa-var-euro: "\f153"; |
||||
@fa-var-exchange: "\f0ec"; |
||||
@fa-var-exclamation: "\f12a"; |
||||
@fa-var-exclamation-circle: "\f06a"; |
||||
@fa-var-exclamation-triangle: "\f071"; |
||||
@fa-var-expand: "\f065"; |
||||
@fa-var-expeditedssl: "\f23e"; |
||||
@fa-var-external-link: "\f08e"; |
||||
@fa-var-external-link-square: "\f14c"; |
||||
@fa-var-eye: "\f06e"; |
||||
@fa-var-eye-slash: "\f070"; |
||||
@fa-var-eyedropper: "\f1fb"; |
||||
@fa-var-fa: "\f2b4"; |
||||
@fa-var-facebook: "\f09a"; |
||||
@fa-var-facebook-f: "\f09a"; |
||||
@fa-var-facebook-official: "\f230"; |
||||
@fa-var-facebook-square: "\f082"; |
||||
@fa-var-fast-backward: "\f049"; |
||||
@fa-var-fast-forward: "\f050"; |
||||
@fa-var-fax: "\f1ac"; |
||||
@fa-var-feed: "\f09e"; |
||||
@fa-var-female: "\f182"; |
||||
@fa-var-fighter-jet: "\f0fb"; |
||||
@fa-var-file: "\f15b"; |
||||
@fa-var-file-archive-o: "\f1c6"; |
||||
@fa-var-file-audio-o: "\f1c7"; |
||||
@fa-var-file-code-o: "\f1c9"; |
||||
@fa-var-file-excel-o: "\f1c3"; |
||||
@fa-var-file-image-o: "\f1c5"; |
||||
@fa-var-file-movie-o: "\f1c8"; |
||||
@fa-var-file-o: "\f016"; |
||||
@fa-var-file-pdf-o: "\f1c1"; |
||||
@fa-var-file-photo-o: "\f1c5"; |
||||
@fa-var-file-picture-o: "\f1c5"; |
||||
@fa-var-file-powerpoint-o: "\f1c4"; |
||||
@fa-var-file-sound-o: "\f1c7"; |
||||
@fa-var-file-text: "\f15c"; |
||||
@fa-var-file-text-o: "\f0f6"; |
||||
@fa-var-file-video-o: "\f1c8"; |
||||
@fa-var-file-word-o: "\f1c2"; |
||||
@fa-var-file-zip-o: "\f1c6"; |
||||
@fa-var-files-o: "\f0c5"; |
||||
@fa-var-film: "\f008"; |
||||
@fa-var-filter: "\f0b0"; |
||||
@fa-var-fire: "\f06d"; |
||||
@fa-var-fire-extinguisher: "\f134"; |
||||
@fa-var-firefox: "\f269"; |
||||
@fa-var-first-order: "\f2b0"; |
||||
@fa-var-flag: "\f024"; |
||||
@fa-var-flag-checkered: "\f11e"; |
||||
@fa-var-flag-o: "\f11d"; |
||||
@fa-var-flash: "\f0e7"; |
||||
@fa-var-flask: "\f0c3"; |
||||
@fa-var-flickr: "\f16e"; |
||||
@fa-var-floppy-o: "\f0c7"; |
||||
@fa-var-folder: "\f07b"; |
||||
@fa-var-folder-o: "\f114"; |
||||
@fa-var-folder-open: "\f07c"; |
||||
@fa-var-folder-open-o: "\f115"; |
||||
@fa-var-font: "\f031"; |
||||
@fa-var-font-awesome: "\f2b4"; |
||||
@fa-var-fonticons: "\f280"; |
||||
@fa-var-fort-awesome: "\f286"; |
||||
@fa-var-forumbee: "\f211"; |
||||
@fa-var-forward: "\f04e"; |
||||
@fa-var-foursquare: "\f180"; |
||||
@fa-var-free-code-camp: "\f2c5"; |
||||
@fa-var-frown-o: "\f119"; |
||||
@fa-var-futbol-o: "\f1e3"; |
||||
@fa-var-gamepad: "\f11b"; |
||||
@fa-var-gavel: "\f0e3"; |
||||
@fa-var-gbp: "\f154"; |
||||
@fa-var-ge: "\f1d1"; |
||||
@fa-var-gear: "\f013"; |
||||
@fa-var-gears: "\f085"; |
||||
@fa-var-genderless: "\f22d"; |
||||
@fa-var-get-pocket: "\f265"; |
||||
@fa-var-gg: "\f260"; |
||||
@fa-var-gg-circle: "\f261"; |
||||
@fa-var-gift: "\f06b"; |
||||
@fa-var-git: "\f1d3"; |
||||
@fa-var-git-square: "\f1d2"; |
||||
@fa-var-github: "\f09b"; |
||||
@fa-var-github-alt: "\f113"; |
||||
@fa-var-github-square: "\f092"; |
||||
@fa-var-gitlab: "\f296"; |
||||
@fa-var-gittip: "\f184"; |
||||
@fa-var-glass: "\f000"; |
||||
@fa-var-glide: "\f2a5"; |
||||
@fa-var-glide-g: "\f2a6"; |
||||
@fa-var-globe: "\f0ac"; |
||||
@fa-var-google: "\f1a0"; |
||||
@fa-var-google-plus: "\f0d5"; |
||||
@fa-var-google-plus-circle: "\f2b3"; |
||||
@fa-var-google-plus-official: "\f2b3"; |
||||
@fa-var-google-plus-square: "\f0d4"; |
||||
@fa-var-google-wallet: "\f1ee"; |
||||
@fa-var-graduation-cap: "\f19d"; |
||||
@fa-var-gratipay: "\f184"; |
||||
@fa-var-grav: "\f2d6"; |
||||
@fa-var-group: "\f0c0"; |
||||
@fa-var-h-square: "\f0fd"; |
||||
@fa-var-hacker-news: "\f1d4"; |
||||
@fa-var-hand-grab-o: "\f255"; |
||||
@fa-var-hand-lizard-o: "\f258"; |
||||
@fa-var-hand-o-down: "\f0a7"; |
||||
@fa-var-hand-o-left: "\f0a5"; |
||||
@fa-var-hand-o-right: "\f0a4"; |
||||
@fa-var-hand-o-up: "\f0a6"; |
||||
@fa-var-hand-paper-o: "\f256"; |
||||
@fa-var-hand-peace-o: "\f25b"; |
||||
@fa-var-hand-pointer-o: "\f25a"; |
||||
@fa-var-hand-rock-o: "\f255"; |
||||
@fa-var-hand-scissors-o: "\f257"; |
||||
@fa-var-hand-spock-o: "\f259"; |
||||
@fa-var-hand-stop-o: "\f256"; |
||||
@fa-var-handshake-o: "\f2b5"; |
||||
@fa-var-hard-of-hearing: "\f2a4"; |
||||
@fa-var-hashtag: "\f292"; |
||||
@fa-var-hdd-o: "\f0a0"; |
||||
@fa-var-header: "\f1dc"; |
||||
@fa-var-headphones: "\f025"; |
||||
@fa-var-heart: "\f004"; |
||||
@fa-var-heart-o: "\f08a"; |
||||
@fa-var-heartbeat: "\f21e"; |
||||
@fa-var-history: "\f1da"; |
||||
@fa-var-home: "\f015"; |
||||
@fa-var-hospital-o: "\f0f8"; |
||||
@fa-var-hotel: "\f236"; |
||||
@fa-var-hourglass: "\f254"; |
||||
@fa-var-hourglass-1: "\f251"; |
||||
@fa-var-hourglass-2: "\f252"; |
||||
@fa-var-hourglass-3: "\f253"; |
||||
@fa-var-hourglass-end: "\f253"; |
||||
@fa-var-hourglass-half: "\f252"; |
||||
@fa-var-hourglass-o: "\f250"; |
||||
@fa-var-hourglass-start: "\f251"; |
||||
@fa-var-houzz: "\f27c"; |
||||
@fa-var-html5: "\f13b"; |
||||
@fa-var-i-cursor: "\f246"; |
||||
@fa-var-id-badge: "\f2c1"; |
||||
@fa-var-id-card: "\f2c2"; |
||||
@fa-var-id-card-o: "\f2c3"; |
||||
@fa-var-ils: "\f20b"; |
||||
@fa-var-image: "\f03e"; |
||||
@fa-var-imdb: "\f2d8"; |
||||
@fa-var-inbox: "\f01c"; |
||||
@fa-var-indent: "\f03c"; |
||||
@fa-var-industry: "\f275"; |
||||
@fa-var-info: "\f129"; |
||||
@fa-var-info-circle: "\f05a"; |
||||
@fa-var-inr: "\f156"; |
||||
@fa-var-instagram: "\f16d"; |
||||
@fa-var-institution: "\f19c"; |
||||
@fa-var-internet-explorer: "\f26b"; |
||||
@fa-var-intersex: "\f224"; |
||||
@fa-var-ioxhost: "\f208"; |
||||
@fa-var-italic: "\f033"; |
||||
@fa-var-joomla: "\f1aa"; |
||||
@fa-var-jpy: "\f157"; |
||||
@fa-var-jsfiddle: "\f1cc"; |
||||
@fa-var-key: "\f084"; |
||||
@fa-var-keyboard-o: "\f11c"; |
||||
@fa-var-krw: "\f159"; |
||||
@fa-var-language: "\f1ab"; |
||||
@fa-var-laptop: "\f109"; |
||||
@fa-var-lastfm: "\f202"; |
||||
@fa-var-lastfm-square: "\f203"; |
||||
@fa-var-leaf: "\f06c"; |
||||
@fa-var-leanpub: "\f212"; |
||||
@fa-var-legal: "\f0e3"; |
||||
@fa-var-lemon-o: "\f094"; |
||||
@fa-var-level-down: "\f149"; |
||||
@fa-var-level-up: "\f148"; |
||||
@fa-var-life-bouy: "\f1cd"; |
||||
@fa-var-life-buoy: "\f1cd"; |
||||
@fa-var-life-ring: "\f1cd"; |
||||
@fa-var-life-saver: "\f1cd"; |
||||
@fa-var-lightbulb-o: "\f0eb"; |
||||
@fa-var-line-chart: "\f201"; |
||||
@fa-var-link: "\f0c1"; |
||||
@fa-var-linkedin: "\f0e1"; |
||||
@fa-var-linkedin-square: "\f08c"; |
||||
@fa-var-linode: "\f2b8"; |
||||
@fa-var-linux: "\f17c"; |
||||
@fa-var-list: "\f03a"; |
||||
@fa-var-list-alt: "\f022"; |
||||
@fa-var-list-ol: "\f0cb"; |
||||
@fa-var-list-ul: "\f0ca"; |
||||
@fa-var-location-arrow: "\f124"; |
||||
@fa-var-lock: "\f023"; |
||||
@fa-var-long-arrow-down: "\f175"; |
||||
@fa-var-long-arrow-left: "\f177"; |
||||
@fa-var-long-arrow-right: "\f178"; |
||||
@fa-var-long-arrow-up: "\f176"; |
||||
@fa-var-low-vision: "\f2a8"; |
||||
@fa-var-magic: "\f0d0"; |
||||
@fa-var-magnet: "\f076"; |
||||
@fa-var-mail-forward: "\f064"; |
||||
@fa-var-mail-reply: "\f112"; |
||||
@fa-var-mail-reply-all: "\f122"; |
||||
@fa-var-male: "\f183"; |
||||
@fa-var-map: "\f279"; |
||||
@fa-var-map-marker: "\f041"; |
||||
@fa-var-map-o: "\f278"; |
||||
@fa-var-map-pin: "\f276"; |
||||
@fa-var-map-signs: "\f277"; |
||||
@fa-var-mars: "\f222"; |
||||
@fa-var-mars-double: "\f227"; |
||||
@fa-var-mars-stroke: "\f229"; |
||||
@fa-var-mars-stroke-h: "\f22b"; |
||||
@fa-var-mars-stroke-v: "\f22a"; |
||||
@fa-var-maxcdn: "\f136"; |
||||
@fa-var-meanpath: "\f20c"; |
||||
@fa-var-medium: "\f23a"; |
||||
@fa-var-medkit: "\f0fa"; |
||||
@fa-var-meetup: "\f2e0"; |
||||
@fa-var-meh-o: "\f11a"; |
||||
@fa-var-mercury: "\f223"; |
||||
@fa-var-microchip: "\f2db"; |
||||
@fa-var-microphone: "\f130"; |
||||
@fa-var-microphone-slash: "\f131"; |
||||
@fa-var-minus: "\f068"; |
||||
@fa-var-minus-circle: "\f056"; |
||||
@fa-var-minus-square: "\f146"; |
||||
@fa-var-minus-square-o: "\f147"; |
||||
@fa-var-mixcloud: "\f289"; |
||||
@fa-var-mobile: "\f10b"; |
||||
@fa-var-mobile-phone: "\f10b"; |
||||
@fa-var-modx: "\f285"; |
||||
@fa-var-money: "\f0d6"; |
||||
@fa-var-moon-o: "\f186"; |
||||
@fa-var-mortar-board: "\f19d"; |
||||
@fa-var-motorcycle: "\f21c"; |
||||
@fa-var-mouse-pointer: "\f245"; |
||||
@fa-var-music: "\f001"; |
||||
@fa-var-navicon: "\f0c9"; |
||||
@fa-var-neuter: "\f22c"; |
||||
@fa-var-newspaper-o: "\f1ea"; |
||||
@fa-var-object-group: "\f247"; |
||||
@fa-var-object-ungroup: "\f248"; |
||||
@fa-var-odnoklassniki: "\f263"; |
||||
@fa-var-odnoklassniki-square: "\f264"; |
||||
@fa-var-opencart: "\f23d"; |
||||
@fa-var-openid: "\f19b"; |
||||
@fa-var-opera: "\f26a"; |
||||
@fa-var-optin-monster: "\f23c"; |
||||
@fa-var-outdent: "\f03b"; |
||||
@fa-var-pagelines: "\f18c"; |
||||
@fa-var-paint-brush: "\f1fc"; |
||||
@fa-var-paper-plane: "\f1d8"; |
||||
@fa-var-paper-plane-o: "\f1d9"; |
||||
@fa-var-paperclip: "\f0c6"; |
||||
@fa-var-paragraph: "\f1dd"; |
||||
@fa-var-paste: "\f0ea"; |
||||
@fa-var-pause: "\f04c"; |
||||
@fa-var-pause-circle: "\f28b"; |
||||
@fa-var-pause-circle-o: "\f28c"; |
||||
@fa-var-paw: "\f1b0"; |
||||
@fa-var-paypal: "\f1ed"; |
||||
@fa-var-pencil: "\f040"; |
||||
@fa-var-pencil-square: "\f14b"; |
||||
@fa-var-pencil-square-o: "\f044"; |
||||
@fa-var-percent: "\f295"; |
||||
@fa-var-phone: "\f095"; |
||||
@fa-var-phone-square: "\f098"; |
||||
@fa-var-photo: "\f03e"; |
||||
@fa-var-picture-o: "\f03e"; |
||||
@fa-var-pie-chart: "\f200"; |
||||
@fa-var-pied-piper: "\f2ae"; |
||||
@fa-var-pied-piper-alt: "\f1a8"; |
||||
@fa-var-pied-piper-pp: "\f1a7"; |
||||
@fa-var-pinterest: "\f0d2"; |
||||
@fa-var-pinterest-p: "\f231"; |
||||
@fa-var-pinterest-square: "\f0d3"; |
||||
@fa-var-plane: "\f072"; |
||||
@fa-var-play: "\f04b"; |
||||
@fa-var-play-circle: "\f144"; |
||||
@fa-var-play-circle-o: "\f01d"; |
||||
@fa-var-plug: "\f1e6"; |
||||
@fa-var-plus: "\f067"; |
||||
@fa-var-plus-circle: "\f055"; |
||||
@fa-var-plus-square: "\f0fe"; |
||||
@fa-var-plus-square-o: "\f196"; |
||||
@fa-var-podcast: "\f2ce"; |
||||
@fa-var-power-off: "\f011"; |
||||
@fa-var-print: "\f02f"; |
||||
@fa-var-product-hunt: "\f288"; |
||||
@fa-var-puzzle-piece: "\f12e"; |
||||
@fa-var-qq: "\f1d6"; |
||||
@fa-var-qrcode: "\f029"; |
||||
@fa-var-question: "\f128"; |
||||
@fa-var-question-circle: "\f059"; |
||||
@fa-var-question-circle-o: "\f29c"; |
||||
@fa-var-quora: "\f2c4"; |
||||
@fa-var-quote-left: "\f10d"; |
||||
@fa-var-quote-right: "\f10e"; |
||||
@fa-var-ra: "\f1d0"; |
||||
@fa-var-random: "\f074"; |
||||
@fa-var-ravelry: "\f2d9"; |
||||
@fa-var-rebel: "\f1d0"; |
||||
@fa-var-recycle: "\f1b8"; |
||||
@fa-var-reddit: "\f1a1"; |
||||
@fa-var-reddit-alien: "\f281"; |
||||
@fa-var-reddit-square: "\f1a2"; |
||||
@fa-var-refresh: "\f021"; |
||||
@fa-var-registered: "\f25d"; |
||||
@fa-var-remove: "\f00d"; |
||||
@fa-var-renren: "\f18b"; |
||||
@fa-var-reorder: "\f0c9"; |
||||
@fa-var-repeat: "\f01e"; |
||||
@fa-var-reply: "\f112"; |
||||
@fa-var-reply-all: "\f122"; |
||||
@fa-var-resistance: "\f1d0"; |
||||
@fa-var-retweet: "\f079"; |
||||
@fa-var-rmb: "\f157"; |
||||
@fa-var-road: "\f018"; |
||||
@fa-var-rocket: "\f135"; |
||||
@fa-var-rotate-left: "\f0e2"; |
||||
@fa-var-rotate-right: "\f01e"; |
||||
@fa-var-rouble: "\f158"; |
||||
@fa-var-rss: "\f09e"; |
||||
@fa-var-rss-square: "\f143"; |
||||
@fa-var-rub: "\f158"; |
||||
@fa-var-ruble: "\f158"; |
||||
@fa-var-rupee: "\f156"; |
||||
@fa-var-s15: "\f2cd"; |
||||
@fa-var-safari: "\f267"; |
||||
@fa-var-save: "\f0c7"; |
||||
@fa-var-scissors: "\f0c4"; |
||||
@fa-var-scribd: "\f28a"; |
||||
@fa-var-search: "\f002"; |
||||
@fa-var-search-minus: "\f010"; |
||||
@fa-var-search-plus: "\f00e"; |
||||
@fa-var-sellsy: "\f213"; |
||||
@fa-var-send: "\f1d8"; |
||||
@fa-var-send-o: "\f1d9"; |
||||
@fa-var-server: "\f233"; |
||||
@fa-var-share: "\f064"; |
||||
@fa-var-share-alt: "\f1e0"; |
||||
@fa-var-share-alt-square: "\f1e1"; |
||||
@fa-var-share-square: "\f14d"; |
||||
@fa-var-share-square-o: "\f045"; |
||||
@fa-var-shekel: "\f20b"; |
||||
@fa-var-sheqel: "\f20b"; |
||||
@fa-var-shield: "\f132"; |
||||
@fa-var-ship: "\f21a"; |
||||
@fa-var-shirtsinbulk: "\f214"; |
||||
@fa-var-shopping-bag: "\f290"; |
||||
@fa-var-shopping-basket: "\f291"; |
||||
@fa-var-shopping-cart: "\f07a"; |
||||
@fa-var-shower: "\f2cc"; |
||||
@fa-var-sign-in: "\f090"; |
||||
@fa-var-sign-language: "\f2a7"; |
||||
@fa-var-sign-out: "\f08b"; |
||||
@fa-var-signal: "\f012"; |
||||
@fa-var-signing: "\f2a7"; |
||||
@fa-var-simplybuilt: "\f215"; |
||||
@fa-var-sitemap: "\f0e8"; |
||||
@fa-var-skyatlas: "\f216"; |
||||
@fa-var-skype: "\f17e"; |
||||
@fa-var-slack: "\f198"; |
||||
@fa-var-sliders: "\f1de"; |
||||
@fa-var-slideshare: "\f1e7"; |
||||
@fa-var-smile-o: "\f118"; |
||||
@fa-var-snapchat: "\f2ab"; |
||||
@fa-var-snapchat-ghost: "\f2ac"; |
||||
@fa-var-snapchat-square: "\f2ad"; |
||||
@fa-var-snowflake-o: "\f2dc"; |
||||
@fa-var-soccer-ball-o: "\f1e3"; |
||||
@fa-var-sort: "\f0dc"; |
||||
@fa-var-sort-alpha-asc: "\f15d"; |
||||
@fa-var-sort-alpha-desc: "\f15e"; |
||||
@fa-var-sort-amount-asc: "\f160"; |
||||
@fa-var-sort-amount-desc: "\f161"; |
||||
@fa-var-sort-asc: "\f0de"; |
||||
@fa-var-sort-desc: "\f0dd"; |
||||
@fa-var-sort-down: "\f0dd"; |
||||
@fa-var-sort-numeric-asc: "\f162"; |
||||
@fa-var-sort-numeric-desc: "\f163"; |
||||
@fa-var-sort-up: "\f0de"; |
||||
@fa-var-soundcloud: "\f1be"; |
||||
@fa-var-space-shuttle: "\f197"; |
||||
@fa-var-spinner: "\f110"; |
||||
@fa-var-spoon: "\f1b1"; |
||||
@fa-var-spotify: "\f1bc"; |
||||
@fa-var-square: "\f0c8"; |
||||
@fa-var-square-o: "\f096"; |
||||
@fa-var-stack-exchange: "\f18d"; |
||||
@fa-var-stack-overflow: "\f16c"; |
||||
@fa-var-star: "\f005"; |
||||
@fa-var-star-half: "\f089"; |
||||
@fa-var-star-half-empty: "\f123"; |
||||
@fa-var-star-half-full: "\f123"; |
||||
@fa-var-star-half-o: "\f123"; |
||||
@fa-var-star-o: "\f006"; |
||||
@fa-var-steam: "\f1b6"; |
||||
@fa-var-steam-square: "\f1b7"; |
||||
@fa-var-step-backward: "\f048"; |
||||
@fa-var-step-forward: "\f051"; |
||||
@fa-var-stethoscope: "\f0f1"; |
||||
@fa-var-sticky-note: "\f249"; |
||||
@fa-var-sticky-note-o: "\f24a"; |
||||
@fa-var-stop: "\f04d"; |
||||
@fa-var-stop-circle: "\f28d"; |
||||
@fa-var-stop-circle-o: "\f28e"; |
||||
@fa-var-street-view: "\f21d"; |
||||
@fa-var-strikethrough: "\f0cc"; |
||||
@fa-var-stumbleupon: "\f1a4"; |
||||
@fa-var-stumbleupon-circle: "\f1a3"; |
||||
@fa-var-subscript: "\f12c"; |
||||
@fa-var-subway: "\f239"; |
||||
@fa-var-suitcase: "\f0f2"; |
||||
@fa-var-sun-o: "\f185"; |
||||
@fa-var-superpowers: "\f2dd"; |
||||
@fa-var-superscript: "\f12b"; |
||||
@fa-var-support: "\f1cd"; |
||||
@fa-var-table: "\f0ce"; |
||||
@fa-var-tablet: "\f10a"; |
||||
@fa-var-tachometer: "\f0e4"; |
||||
@fa-var-tag: "\f02b"; |
||||
@fa-var-tags: "\f02c"; |
||||
@fa-var-tasks: "\f0ae"; |
||||
@fa-var-taxi: "\f1ba"; |
||||
@fa-var-telegram: "\f2c6"; |
||||
@fa-var-television: "\f26c"; |
||||
@fa-var-tencent-weibo: "\f1d5"; |
||||
@fa-var-terminal: "\f120"; |
||||
@fa-var-text-height: "\f034"; |
||||
@fa-var-text-width: "\f035"; |
||||
@fa-var-th: "\f00a"; |
||||
@fa-var-th-large: "\f009"; |
||||
@fa-var-th-list: "\f00b"; |
||||
@fa-var-themeisle: "\f2b2"; |
||||
@fa-var-thermometer: "\f2c7"; |
||||
@fa-var-thermometer-0: "\f2cb"; |
||||
@fa-var-thermometer-1: "\f2ca"; |
||||
@fa-var-thermometer-2: "\f2c9"; |
||||
@fa-var-thermometer-3: "\f2c8"; |
||||
@fa-var-thermometer-4: "\f2c7"; |
||||
@fa-var-thermometer-empty: "\f2cb"; |
||||
@fa-var-thermometer-full: "\f2c7"; |
||||
@fa-var-thermometer-half: "\f2c9"; |
||||
@fa-var-thermometer-quarter: "\f2ca"; |
||||
@fa-var-thermometer-three-quarters: "\f2c8"; |
||||
@fa-var-thumb-tack: "\f08d"; |
||||
@fa-var-thumbs-down: "\f165"; |
||||
@fa-var-thumbs-o-down: "\f088"; |
||||
@fa-var-thumbs-o-up: "\f087"; |
||||
@fa-var-thumbs-up: "\f164"; |
||||
@fa-var-ticket: "\f145"; |
||||
@fa-var-times: "\f00d"; |
||||
@fa-var-times-circle: "\f057"; |
||||
@fa-var-times-circle-o: "\f05c"; |
||||
@fa-var-times-rectangle: "\f2d3"; |
||||
@fa-var-times-rectangle-o: "\f2d4"; |
||||
@fa-var-tint: "\f043"; |
||||
@fa-var-toggle-down: "\f150"; |
||||
@fa-var-toggle-left: "\f191"; |
||||
@fa-var-toggle-off: "\f204"; |
||||
@fa-var-toggle-on: "\f205"; |
||||
@fa-var-toggle-right: "\f152"; |
||||
@fa-var-toggle-up: "\f151"; |
||||
@fa-var-trademark: "\f25c"; |
||||
@fa-var-train: "\f238"; |
||||
@fa-var-transgender: "\f224"; |
||||
@fa-var-transgender-alt: "\f225"; |
||||
@fa-var-trash: "\f1f8"; |
||||
@fa-var-trash-o: "\f014"; |
||||
@fa-var-tree: "\f1bb"; |
||||
@fa-var-trello: "\f181"; |
||||
@fa-var-tripadvisor: "\f262"; |
||||
@fa-var-trophy: "\f091"; |
||||
@fa-var-truck: "\f0d1"; |
||||
@fa-var-try: "\f195"; |
||||
@fa-var-tty: "\f1e4"; |
||||
@fa-var-tumblr: "\f173"; |
||||
@fa-var-tumblr-square: "\f174"; |
||||
@fa-var-turkish-lira: "\f195"; |
||||
@fa-var-tv: "\f26c"; |
||||
@fa-var-twitch: "\f1e8"; |
||||
@fa-var-twitter: "\f099"; |
||||
@fa-var-twitter-square: "\f081"; |
||||
@fa-var-umbrella: "\f0e9"; |
||||
@fa-var-underline: "\f0cd"; |
||||
@fa-var-undo: "\f0e2"; |
||||
@fa-var-universal-access: "\f29a"; |
||||
@fa-var-university: "\f19c"; |
||||
@fa-var-unlink: "\f127"; |
||||
@fa-var-unlock: "\f09c"; |
||||
@fa-var-unlock-alt: "\f13e"; |
||||
@fa-var-unsorted: "\f0dc"; |
||||
@fa-var-upload: "\f093"; |
||||
@fa-var-usb: "\f287"; |
||||
@fa-var-usd: "\f155"; |
||||
@fa-var-user: "\f007"; |
||||
@fa-var-user-circle: "\f2bd"; |
||||
@fa-var-user-circle-o: "\f2be"; |
||||
@fa-var-user-md: "\f0f0"; |
||||
@fa-var-user-o: "\f2c0"; |
||||
@fa-var-user-plus: "\f234"; |
||||
@fa-var-user-secret: "\f21b"; |
||||
@fa-var-user-times: "\f235"; |
||||
@fa-var-users: "\f0c0"; |
||||
@fa-var-vcard: "\f2bb"; |
||||
@fa-var-vcard-o: "\f2bc"; |
||||
@fa-var-venus: "\f221"; |
||||
@fa-var-venus-double: "\f226"; |
||||
@fa-var-venus-mars: "\f228"; |
||||
@fa-var-viacoin: "\f237"; |
||||
@fa-var-viadeo: "\f2a9"; |
||||
@fa-var-viadeo-square: "\f2aa"; |
||||
@fa-var-video-camera: "\f03d"; |
||||
@fa-var-vimeo: "\f27d"; |
||||
@fa-var-vimeo-square: "\f194"; |
||||
@fa-var-vine: "\f1ca"; |
||||
@fa-var-vk: "\f189"; |
||||
@fa-var-volume-control-phone: "\f2a0"; |
||||
@fa-var-volume-down: "\f027"; |
||||
@fa-var-volume-off: "\f026"; |
||||
@fa-var-volume-up: "\f028"; |
||||
@fa-var-warning: "\f071"; |
||||
@fa-var-wechat: "\f1d7"; |
||||
@fa-var-weibo: "\f18a"; |
||||
@fa-var-weixin: "\f1d7"; |
||||
@fa-var-whatsapp: "\f232"; |
||||
@fa-var-wheelchair: "\f193"; |
||||
@fa-var-wheelchair-alt: "\f29b"; |
||||
@fa-var-wifi: "\f1eb"; |
||||
@fa-var-wikipedia-w: "\f266"; |
||||
@fa-var-window-close: "\f2d3"; |
||||
@fa-var-window-close-o: "\f2d4"; |
||||
@fa-var-window-maximize: "\f2d0"; |
||||
@fa-var-window-minimize: "\f2d1"; |
||||
@fa-var-window-restore: "\f2d2"; |
||||
@fa-var-windows: "\f17a"; |
||||
@fa-var-won: "\f159"; |
||||
@fa-var-wordpress: "\f19a"; |
||||
@fa-var-wpbeginner: "\f297"; |
||||
@fa-var-wpexplorer: "\f2de"; |
||||
@fa-var-wpforms: "\f298"; |
||||
@fa-var-wrench: "\f0ad"; |
||||
@fa-var-xing: "\f168"; |
||||
@fa-var-xing-square: "\f169"; |
||||
@fa-var-y-combinator: "\f23b"; |
||||
@fa-var-y-combinator-square: "\f1d4"; |
||||
@fa-var-yahoo: "\f19e"; |
||||
@fa-var-yc: "\f23b"; |
||||
@fa-var-yc-square: "\f1d4"; |
||||
@fa-var-yelp: "\f1e9"; |
||||
@fa-var-yen: "\f157"; |
||||
@fa-var-yoast: "\f2b1"; |
||||
@fa-var-youtube: "\f167"; |
||||
@fa-var-youtube-play: "\f16a"; |
||||
@fa-var-youtube-square: "\f166"; |
||||
|
@ -0,0 +1,34 @@ |
||||
// Spinning Icons |
||||
// -------------------------- |
||||
|
||||
.#{$fa-css-prefix}-spin { |
||||
-webkit-animation: fa-spin 2s infinite linear; |
||||
animation: fa-spin 2s infinite linear; |
||||
} |
||||
|
||||
.#{$fa-css-prefix}-pulse { |
||||
-webkit-animation: fa-spin 1s infinite steps(8); |
||||
animation: fa-spin 1s infinite steps(8); |
||||
} |
||||
|
||||
@-webkit-keyframes fa-spin { |
||||
0% { |
||||
-webkit-transform: rotate(0deg); |
||||
transform: rotate(0deg); |
||||
} |
||||
100% { |
||||
-webkit-transform: rotate(359deg); |
||||
transform: rotate(359deg); |
||||
} |
||||
} |
||||
|
||||
@keyframes fa-spin { |
||||
0% { |
||||
-webkit-transform: rotate(0deg); |
||||
transform: rotate(0deg); |
||||
} |
||||
100% { |
||||
-webkit-transform: rotate(359deg); |
||||
transform: rotate(359deg); |
||||
} |
||||
} |
@ -0,0 +1,25 @@ |
||||
// Bordered & Pulled |
||||
// ------------------------- |
||||
|
||||
.#{$fa-css-prefix}-border { |
||||
padding: .2em .25em .15em; |
||||
border: solid .08em $fa-border-color; |
||||
border-radius: .1em; |
||||
} |
||||
|
||||
.#{$fa-css-prefix}-pull-left { float: left; } |
||||
.#{$fa-css-prefix}-pull-right { float: right; } |
||||
|
||||
.#{$fa-css-prefix} { |
||||
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; } |
||||
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; } |
||||
} |
||||
|
||||
/* Deprecated as of 4.4.0 */ |
||||
.pull-right { float: right; } |
||||
.pull-left { float: left; } |
||||
|
||||
.#{$fa-css-prefix} { |
||||
&.pull-left { margin-right: .3em; } |
||||
&.pull-right { margin-left: .3em; } |
||||
} |
@ -0,0 +1,12 @@ |
||||
// Base Class Definition |
||||
// ------------------------- |
||||
|
||||
.#{$fa-css-prefix} { |
||||
display: inline-block; |
||||
font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration |
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override |
||||
text-rendering: auto; // optimizelegibility throws things off #1094 |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
|
||||
} |
@ -0,0 +1,6 @@ |
||||
// Fixed Width Icons |
||||
// ------------------------- |
||||
.#{$fa-css-prefix}-fw { |
||||
width: (18em / 14); |
||||
text-align: center; |
||||
} |
@ -0,0 +1,789 @@ |
||||
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen |
||||
readers do not read off random characters that represent icons */ |
||||
|
||||
.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; } |
||||
.#{$fa-css-prefix}-music:before { content: $fa-var-music; } |
||||
.#{$fa-css-prefix}-search:before { content: $fa-var-search; } |
||||
.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } |
||||
.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } |
||||
.#{$fa-css-prefix}-star:before { content: $fa-var-star; } |
||||
.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } |
||||
.#{$fa-css-prefix}-user:before { content: $fa-var-user; } |
||||
.#{$fa-css-prefix}-film:before { content: $fa-var-film; } |
||||
.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } |
||||
.#{$fa-css-prefix}-th:before { content: $fa-var-th; } |
||||
.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } |
||||
.#{$fa-css-prefix}-check:before { content: $fa-var-check; } |
||||
.#{$fa-css-prefix}-remove:before, |
||||
.#{$fa-css-prefix}-close:before, |
||||
.#{$fa-css-prefix}-times:before { content: $fa-var-times; } |
||||
.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } |
||||
.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } |
||||
.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } |
||||
.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } |
||||
.#{$fa-css-prefix}-gear:before, |
||||
.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } |
||||
.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } |
||||
.#{$fa-css-prefix}-home:before { content: $fa-var-home; } |
||||
.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } |
||||
.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } |
||||
.#{$fa-css-prefix}-road:before { content: $fa-var-road; } |
||||
.#{$fa-css-prefix}-download:before { content: $fa-var-download; } |
||||
.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } |
||||
.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } |
||||
.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } |
||||
.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } |
||||
.#{$fa-css-prefix}-rotate-right:before, |
||||
.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } |
||||
.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } |
||||
.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } |
||||
.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } |
||||
.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } |
||||
.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } |
||||
.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } |
||||
.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } |
||||
.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } |
||||
.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } |
||||
.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } |
||||
.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } |
||||
.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } |
||||
.#{$fa-css-prefix}-book:before { content: $fa-var-book; } |
||||
.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } |
||||
.#{$fa-css-prefix}-print:before { content: $fa-var-print; } |
||||
.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } |
||||
.#{$fa-css-prefix}-font:before { content: $fa-var-font; } |
||||
.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } |
||||
.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } |
||||
.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } |
||||
.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } |
||||
.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } |
||||
.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } |
||||
.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } |
||||
.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } |
||||
.#{$fa-css-prefix}-list:before { content: $fa-var-list; } |
||||
.#{$fa-css-prefix}-dedent:before, |
||||
.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } |
||||
.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } |
||||
.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } |
||||
.#{$fa-css-prefix}-photo:before, |
||||
.#{$fa-css-prefix}-image:before, |
||||
.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } |
||||
.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } |
||||
.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } |
||||
.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } |
||||
.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } |
||||
.#{$fa-css-prefix}-edit:before, |
||||
.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } |
||||
.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } |
||||
.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } |
||||
.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } |
||||
.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } |
||||
.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } |
||||
.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } |
||||
.#{$fa-css-prefix}-play:before { content: $fa-var-play; } |
||||
.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } |
||||
.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } |
||||
.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } |
||||
.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } |
||||
.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } |
||||
.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } |
||||
.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } |
||||
.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } |
||||
.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } |
||||
.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } |
||||
.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } |
||||
.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } |
||||
.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } |
||||
.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } |
||||
.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } |
||||
.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } |
||||
.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } |
||||
.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } |
||||
.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } |
||||
.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } |
||||
.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } |
||||
.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } |
||||
.#{$fa-css-prefix}-mail-forward:before, |
||||
.#{$fa-css-prefix}-share:before { content: $fa-var-share; } |
||||
.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } |
||||
.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } |
||||
.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } |
||||
.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } |
||||
.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } |
||||
.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } |
||||
.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } |
||||
.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } |
||||
.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } |
||||
.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } |
||||
.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } |
||||
.#{$fa-css-prefix}-warning:before, |
||||
.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } |
||||
.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } |
||||
.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } |
||||
.#{$fa-css-prefix}-random:before { content: $fa-var-random; } |
||||
.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } |
||||
.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } |
||||
.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } |
||||
.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } |
||||
.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } |
||||
.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } |
||||
.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } |
||||
.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } |
||||
.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } |
||||
.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } |
||||
.#{$fa-css-prefix}-bar-chart-o:before, |
||||
.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; } |
||||
.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } |
||||
.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } |
||||
.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } |
||||
.#{$fa-css-prefix}-key:before { content: $fa-var-key; } |
||||
.#{$fa-css-prefix}-gears:before, |
||||
.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } |
||||
.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } |
||||
.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } |
||||
.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } |
||||
.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } |
||||
.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } |
||||
.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } |
||||
.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } |
||||
.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } |
||||
.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } |
||||
.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } |
||||
.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } |
||||
.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } |
||||
.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } |
||||
.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } |
||||
.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } |
||||
.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } |
||||
.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } |
||||
.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } |
||||
.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } |
||||
.#{$fa-css-prefix}-facebook-f:before, |
||||
.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } |
||||
.#{$fa-css-prefix}-github:before { content: $fa-var-github; } |
||||
.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } |
||||
.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } |
||||
.#{$fa-css-prefix}-feed:before, |
||||
.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } |
||||
.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } |
||||
.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } |
||||
.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } |
||||
.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } |
||||
.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } |
||||
.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } |
||||
.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } |
||||
.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } |
||||
.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } |
||||
.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } |
||||
.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } |
||||
.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } |
||||
.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } |
||||
.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } |
||||
.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } |
||||
.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } |
||||
.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } |
||||
.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } |
||||
.#{$fa-css-prefix}-group:before, |
||||
.#{$fa-css-prefix}-users:before { content: $fa-var-users; } |
||||
.#{$fa-css-prefix}-chain:before, |
||||
.#{$fa-css-prefix}-link:before { content: $fa-var-link; } |
||||
.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } |
||||
.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } |
||||
.#{$fa-css-prefix}-cut:before, |
||||
.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } |
||||
.#{$fa-css-prefix}-copy:before, |
||||
.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } |
||||
.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } |
||||
.#{$fa-css-prefix}-save:before, |
||||
.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } |
||||
.#{$fa-css-prefix}-square:before { content: $fa-var-square; } |
||||
.#{$fa-css-prefix}-navicon:before, |
||||
.#{$fa-css-prefix}-reorder:before, |
||||
.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } |
||||
.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } |
||||
.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } |
||||
.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } |
||||
.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } |
||||
.#{$fa-css-prefix}-table:before { content: $fa-var-table; } |
||||
.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } |
||||
.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } |
||||
.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } |
||||
.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } |
||||
.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } |
||||
.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } |
||||
.#{$fa-css-prefix}-money:before { content: $fa-var-money; } |
||||
.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } |
||||
.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } |
||||
.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } |
||||
.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } |
||||
.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } |
||||
.#{$fa-css-prefix}-unsorted:before, |
||||
.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } |
||||
.#{$fa-css-prefix}-sort-down:before, |
||||
.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } |
||||
.#{$fa-css-prefix}-sort-up:before, |
||||
.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } |
||||
.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } |
||||
.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } |
||||
.#{$fa-css-prefix}-rotate-left:before, |
||||
.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } |
||||
.#{$fa-css-prefix}-legal:before, |
||||
.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } |
||||
.#{$fa-css-prefix}-dashboard:before, |
||||
.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } |
||||
.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } |
||||
.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } |
||||
.#{$fa-css-prefix}-flash:before, |
||||
.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } |
||||
.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } |
||||
.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } |
||||
.#{$fa-css-prefix}-paste:before, |
||||
.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } |
||||
.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } |
||||
.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } |
||||
.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } |
||||
.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } |
||||
.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } |
||||
.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } |
||||
.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } |
||||
.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } |
||||
.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } |
||||
.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } |
||||
.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } |
||||
.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } |
||||
.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } |
||||
.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } |
||||
.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } |
||||
.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } |
||||
.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } |
||||
.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } |
||||
.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } |
||||
.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } |
||||
.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } |
||||
.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } |
||||
.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } |
||||
.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } |
||||
.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } |
||||
.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } |
||||
.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } |
||||
.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } |
||||
.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } |
||||
.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } |
||||
.#{$fa-css-prefix}-mobile-phone:before, |
||||
.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } |
||||
.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } |
||||
.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } |
||||
.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } |
||||
.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } |
||||
.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } |
||||
.#{$fa-css-prefix}-mail-reply:before, |
||||
.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } |
||||
.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } |
||||
.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } |
||||
.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } |
||||
.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } |
||||
.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } |
||||
.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } |
||||
.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } |
||||
.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } |
||||
.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } |
||||
.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } |
||||
.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } |
||||
.#{$fa-css-prefix}-code:before { content: $fa-var-code; } |
||||
.#{$fa-css-prefix}-mail-reply-all:before, |
||||
.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } |
||||
.#{$fa-css-prefix}-star-half-empty:before, |
||||
.#{$fa-css-prefix}-star-half-full:before, |
||||
.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } |
||||
.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } |
||||
.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } |
||||
.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } |
||||
.#{$fa-css-prefix}-unlink:before, |
||||
.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } |
||||
.#{$fa-css-prefix}-question:before { content: $fa-var-question; } |
||||
.#{$fa-css-prefix}-info:before { content: $fa-var-info; } |
||||
.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } |
||||
.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } |
||||
.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } |
||||
.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } |
||||
.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } |
||||
.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } |
||||
.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } |
||||
.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } |
||||
.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } |
||||
.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } |
||||
.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } |
||||
.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } |
||||
.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } |
||||
.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } |
||||
.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } |
||||
.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } |
||||
.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } |
||||
.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } |
||||
.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } |
||||
.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } |
||||
.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } |
||||
.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } |
||||
.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } |
||||
.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } |
||||
.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } |
||||
.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } |
||||
.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } |
||||
.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } |
||||
.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } |
||||
.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } |
||||
.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } |
||||
.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } |
||||
.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } |
||||
.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } |
||||
.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } |
||||
.#{$fa-css-prefix}-toggle-down:before, |
||||
.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } |
||||
.#{$fa-css-prefix}-toggle-up:before, |
||||
.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } |
||||
.#{$fa-css-prefix}-toggle-right:before, |
||||
.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } |
||||
.#{$fa-css-prefix}-euro:before, |
||||
.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } |
||||
.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } |
||||
.#{$fa-css-prefix}-dollar:before, |
||||
.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } |
||||
.#{$fa-css-prefix}-rupee:before, |
||||
.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } |
||||
.#{$fa-css-prefix}-cny:before, |
||||
.#{$fa-css-prefix}-rmb:before, |
||||
.#{$fa-css-prefix}-yen:before, |
||||
.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } |
||||
.#{$fa-css-prefix}-ruble:before, |
||||
.#{$fa-css-prefix}-rouble:before, |
||||
.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } |
||||
.#{$fa-css-prefix}-won:before, |
||||
.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } |
||||
.#{$fa-css-prefix}-bitcoin:before, |
||||
.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } |
||||
.#{$fa-css-prefix}-file:before { content: $fa-var-file; } |
||||
.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } |
||||
.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } |
||||
.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } |
||||
.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } |
||||
.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } |
||||
.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } |
||||
.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } |
||||
.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } |
||||
.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } |
||||
.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } |
||||
.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } |
||||
.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } |
||||
.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } |
||||
.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } |
||||
.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } |
||||
.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } |
||||
.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } |
||||
.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } |
||||
.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } |
||||
.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } |
||||
.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } |
||||
.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } |
||||
.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } |
||||
.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } |
||||
.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } |
||||
.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } |
||||
.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } |
||||
.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } |
||||
.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } |
||||
.#{$fa-css-prefix}-android:before { content: $fa-var-android; } |
||||
.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } |
||||
.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } |
||||
.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } |
||||
.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } |
||||
.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } |
||||
.#{$fa-css-prefix}-female:before { content: $fa-var-female; } |
||||
.#{$fa-css-prefix}-male:before { content: $fa-var-male; } |
||||
.#{$fa-css-prefix}-gittip:before, |
||||
.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; } |
||||
.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } |
||||
.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } |
||||
.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } |
||||
.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } |
||||
.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } |
||||
.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } |
||||
.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } |
||||
.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } |
||||
.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } |
||||
.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } |
||||
.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } |
||||
.#{$fa-css-prefix}-toggle-left:before, |
||||
.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } |
||||
.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } |
||||
.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } |
||||
.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } |
||||
.#{$fa-css-prefix}-turkish-lira:before, |
||||
.#{$fa-css-prefix}-try:before { content: $fa-var-try; } |
||||
.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } |
||||
.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; } |
||||
.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; } |
||||
.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; } |
||||
.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; } |
||||
.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; } |
||||
.#{$fa-css-prefix}-institution:before, |
||||
.#{$fa-css-prefix}-bank:before, |
||||
.#{$fa-css-prefix}-university:before { content: $fa-var-university; } |
||||
.#{$fa-css-prefix}-mortar-board:before, |
||||
.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; } |
||||
.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; } |
||||
.#{$fa-css-prefix}-google:before { content: $fa-var-google; } |
||||
.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; } |
||||
.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; } |
||||
.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; } |
||||
.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } |
||||
.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } |
||||
.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } |
||||
.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; } |
||||
.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } |
||||
.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } |
||||
.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } |
||||
.#{$fa-css-prefix}-language:before { content: $fa-var-language; } |
||||
.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; } |
||||
.#{$fa-css-prefix}-building:before { content: $fa-var-building; } |
||||
.#{$fa-css-prefix}-child:before { content: $fa-var-child; } |
||||
.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; } |
||||
.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; } |
||||
.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; } |
||||
.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; } |
||||
.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; } |
||||
.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; } |
||||
.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; } |
||||
.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; } |
||||
.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; } |
||||
.#{$fa-css-prefix}-automobile:before, |
||||
.#{$fa-css-prefix}-car:before { content: $fa-var-car; } |
||||
.#{$fa-css-prefix}-cab:before, |
||||
.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; } |
||||
.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; } |
||||
.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; } |
||||
.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; } |
||||
.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; } |
||||
.#{$fa-css-prefix}-database:before { content: $fa-var-database; } |
||||
.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; } |
||||
.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; } |
||||
.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; } |
||||
.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; } |
||||
.#{$fa-css-prefix}-file-photo-o:before, |
||||
.#{$fa-css-prefix}-file-picture-o:before, |
||||
.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; } |
||||
.#{$fa-css-prefix}-file-zip-o:before, |
||||
.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; } |
||||
.#{$fa-css-prefix}-file-sound-o:before, |
||||
.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; } |
||||
.#{$fa-css-prefix}-file-movie-o:before, |
||||
.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; } |
||||
.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; } |
||||
.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; } |
||||
.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; } |
||||
.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; } |
||||
.#{$fa-css-prefix}-life-bouy:before, |
||||
.#{$fa-css-prefix}-life-buoy:before, |
||||
.#{$fa-css-prefix}-life-saver:before, |
||||
.#{$fa-css-prefix}-support:before, |
||||
.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } |
||||
.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } |
||||
.#{$fa-css-prefix}-ra:before, |
||||
.#{$fa-css-prefix}-resistance:before, |
||||
.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } |
||||
.#{$fa-css-prefix}-ge:before, |
||||
.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } |
||||
.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } |
||||
.#{$fa-css-prefix}-git:before { content: $fa-var-git; } |
||||
.#{$fa-css-prefix}-y-combinator-square:before, |
||||
.#{$fa-css-prefix}-yc-square:before, |
||||
.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } |
||||
.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } |
||||
.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } |
||||
.#{$fa-css-prefix}-wechat:before, |
||||
.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; } |
||||
.#{$fa-css-prefix}-send:before, |
||||
.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; } |
||||
.#{$fa-css-prefix}-send-o:before, |
||||
.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } |
||||
.#{$fa-css-prefix}-history:before { content: $fa-var-history; } |
||||
.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } |
||||
.#{$fa-css-prefix}-header:before { content: $fa-var-header; } |
||||
.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } |
||||
.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; } |
||||
.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; } |
||||
.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; } |
||||
.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; } |
||||
.#{$fa-css-prefix}-soccer-ball-o:before, |
||||
.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; } |
||||
.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; } |
||||
.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; } |
||||
.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; } |
||||
.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; } |
||||
.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; } |
||||
.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; } |
||||
.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; } |
||||
.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; } |
||||
.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; } |
||||
.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; } |
||||
.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; } |
||||
.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; } |
||||
.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; } |
||||
.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; } |
||||
.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; } |
||||
.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; } |
||||
.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; } |
||||
.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; } |
||||
.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; } |
||||
.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; } |
||||
.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; } |
||||
.#{$fa-css-prefix}-at:before { content: $fa-var-at; } |
||||
.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; } |
||||
.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; } |
||||
.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; } |
||||
.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; } |
||||
.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; } |
||||
.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; } |
||||
.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; } |
||||
.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; } |
||||
.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; } |
||||
.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; } |
||||
.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; } |
||||
.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; } |
||||
.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; } |
||||
.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; } |
||||
.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; } |
||||
.#{$fa-css-prefix}-shekel:before, |
||||
.#{$fa-css-prefix}-sheqel:before, |
||||
.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; } |
||||
.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; } |
||||
.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; } |
||||
.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; } |
||||
.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; } |
||||
.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; } |
||||
.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; } |
||||
.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; } |
||||
.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; } |
||||
.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; } |
||||
.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; } |
||||
.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; } |
||||
.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; } |
||||
.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; } |
||||
.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; } |
||||
.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; } |
||||
.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; } |
||||
.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; } |
||||
.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; } |
||||
.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } |
||||
.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } |
||||
.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } |
||||
.#{$fa-css-prefix}-intersex:before, |
||||
.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } |
||||
.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } |
||||
.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } |
||||
.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; } |
||||
.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; } |
||||
.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; } |
||||
.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } |
||||
.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } |
||||
.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } |
||||
.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } |
||||
.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } |
||||
.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } |
||||
.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } |
||||
.#{$fa-css-prefix}-server:before { content: $fa-var-server; } |
||||
.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; } |
||||
.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; } |
||||
.#{$fa-css-prefix}-hotel:before, |
||||
.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; } |
||||
.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; } |
||||
.#{$fa-css-prefix}-train:before { content: $fa-var-train; } |
||||
.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } |
||||
.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } |
||||
.#{$fa-css-prefix}-yc:before, |
||||
.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } |
||||
.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } |
||||
.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } |
||||
.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } |
||||
.#{$fa-css-prefix}-battery-4:before, |
||||
.#{$fa-css-prefix}-battery:before, |
||||
.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } |
||||
.#{$fa-css-prefix}-battery-3:before, |
||||
.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } |
||||
.#{$fa-css-prefix}-battery-2:before, |
||||
.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } |
||||
.#{$fa-css-prefix}-battery-1:before, |
||||
.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } |
||||
.#{$fa-css-prefix}-battery-0:before, |
||||
.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } |
||||
.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } |
||||
.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } |
||||
.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } |
||||
.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } |
||||
.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } |
||||
.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } |
||||
.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } |
||||
.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } |
||||
.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } |
||||
.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } |
||||
.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } |
||||
.#{$fa-css-prefix}-hourglass-1:before, |
||||
.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } |
||||
.#{$fa-css-prefix}-hourglass-2:before, |
||||
.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } |
||||
.#{$fa-css-prefix}-hourglass-3:before, |
||||
.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } |
||||
.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } |
||||
.#{$fa-css-prefix}-hand-grab-o:before, |
||||
.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } |
||||
.#{$fa-css-prefix}-hand-stop-o:before, |
||||
.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } |
||||
.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } |
||||
.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } |
||||
.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } |
||||
.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } |
||||
.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } |
||||
.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } |
||||
.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } |
||||
.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } |
||||
.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } |
||||
.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } |
||||
.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } |
||||
.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } |
||||
.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } |
||||
.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } |
||||
.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } |
||||
.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } |
||||
.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } |
||||
.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } |
||||
.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } |
||||
.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } |
||||
.#{$fa-css-prefix}-tv:before, |
||||
.#{$fa-css-prefix}-television:before { content: $fa-var-television; } |
||||
.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } |
||||
.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } |
||||
.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } |
||||
.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } |
||||
.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } |
||||
.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } |
||||
.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } |
||||
.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } |
||||
.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } |
||||
.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } |
||||
.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } |
||||
.#{$fa-css-prefix}-map:before { content: $fa-var-map; } |
||||
.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } |
||||
.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } |
||||
.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } |
||||
.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } |
||||
.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } |
||||
.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } |
||||
.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; } |
||||
.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; } |
||||
.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; } |
||||
.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; } |
||||
.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; } |
||||
.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; } |
||||
.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; } |
||||
.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; } |
||||
.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; } |
||||
.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; } |
||||
.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; } |
||||
.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; } |
||||
.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; } |
||||
.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; } |
||||
.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; } |
||||
.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; } |
||||
.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; } |
||||
.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; } |
||||
.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; } |
||||
.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; } |
||||
.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; } |
||||
.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; } |
||||
.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; } |
||||
.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; } |
||||
.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; } |
||||
.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; } |
||||
.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; } |
||||
.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; } |
||||
.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; } |
||||
.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; } |
||||
.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; } |
||||
.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; } |
||||
.#{$fa-css-prefix}-asl-interpreting:before, |
||||
.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; } |
||||
.#{$fa-css-prefix}-deafness:before, |
||||
.#{$fa-css-prefix}-hard-of-hearing:before, |
||||
.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; } |
||||
.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; } |
||||
.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; } |
||||
.#{$fa-css-prefix}-signing:before, |
||||
.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; } |
||||
.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; } |
||||
.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; } |
||||
.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; } |
||||
.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; } |
||||
.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; } |
||||
.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; } |
||||
.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } |
||||
.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; } |
||||
.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; } |
||||
.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; } |
||||
.#{$fa-css-prefix}-google-plus-circle:before, |
||||
.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; } |
||||
.#{$fa-css-prefix}-fa:before, |
||||
.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; } |
||||
.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; } |
||||
.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; } |
||||
.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; } |
||||
.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; } |
||||
.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; } |
||||
.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; } |
||||
.#{$fa-css-prefix}-vcard:before, |
||||
.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; } |
||||
.#{$fa-css-prefix}-vcard-o:before, |
||||
.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; } |
||||
.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; } |
||||
.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; } |
||||
.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; } |
||||
.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; } |
||||
.#{$fa-css-prefix}-drivers-license:before, |
||||
.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; } |
||||
.#{$fa-css-prefix}-drivers-license-o:before, |
||||
.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; } |
||||
.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; } |
||||
.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; } |
||||
.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; } |
||||
.#{$fa-css-prefix}-thermometer-4:before, |
||||
.#{$fa-css-prefix}-thermometer:before, |
||||
.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; } |
||||
.#{$fa-css-prefix}-thermometer-3:before, |
||||
.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; } |
||||
.#{$fa-css-prefix}-thermometer-2:before, |
||||
.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; } |
||||
.#{$fa-css-prefix}-thermometer-1:before, |
||||
.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; } |
||||
.#{$fa-css-prefix}-thermometer-0:before, |
||||
.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; } |
||||
.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; } |
||||
.#{$fa-css-prefix}-bathtub:before, |
||||
.#{$fa-css-prefix}-s15:before, |
||||
.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; } |
||||
.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; } |
||||
.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; } |
||||
.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; } |
||||
.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; } |
||||
.#{$fa-css-prefix}-times-rectangle:before, |
||||
.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; } |
||||
.#{$fa-css-prefix}-times-rectangle-o:before, |
||||
.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; } |
||||
.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; } |
||||
.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; } |
||||
.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; } |
||||
.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; } |
||||
.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; } |
||||
.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; } |
||||
.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; } |
||||
.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; } |
||||
.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; } |
||||
.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; } |
||||
.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; } |
@ -0,0 +1,13 @@ |
||||
// Icon Sizes |
||||
// ------------------------- |
||||
|
||||
/* makes the font 33% larger relative to the icon container */ |
||||
.#{$fa-css-prefix}-lg { |
||||
font-size: (4em / 3); |
||||
line-height: (3em / 4); |
||||
vertical-align: -15%; |
||||
} |
||||
.#{$fa-css-prefix}-2x { font-size: 2em; } |
||||
.#{$fa-css-prefix}-3x { font-size: 3em; } |
||||
.#{$fa-css-prefix}-4x { font-size: 4em; } |
||||
.#{$fa-css-prefix}-5x { font-size: 5em; } |
@ -0,0 +1,19 @@ |
||||
// List Icons |
||||
// ------------------------- |
||||
|
||||
.#{$fa-css-prefix}-ul { |
||||
padding-left: 0; |
||||
margin-left: $fa-li-width; |
||||
list-style-type: none; |
||||
> li { position: relative; } |
||||
} |
||||
.#{$fa-css-prefix}-li { |
||||
position: absolute; |
||||
left: -$fa-li-width; |
||||
width: $fa-li-width; |
||||
top: (2em / 14); |
||||
text-align: center; |
||||
&.#{$fa-css-prefix}-lg { |
||||
left: -$fa-li-width + (4em / 14); |
||||
} |
||||
} |
@ -0,0 +1,60 @@ |
||||
// Mixins |
||||
// -------------------------- |
||||
|
||||
@mixin fa-icon() { |
||||
display: inline-block; |
||||
font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration |
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override |
||||
text-rendering: auto; // optimizelegibility throws things off #1094 |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
|
||||
} |
||||
|
||||
@mixin fa-icon-rotate($degrees, $rotation) { |
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; |
||||
-webkit-transform: rotate($degrees); |
||||
-ms-transform: rotate($degrees); |
||||
transform: rotate($degrees); |
||||
} |
||||
|
||||
@mixin fa-icon-flip($horiz, $vert, $rotation) { |
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; |
||||
-webkit-transform: scale($horiz, $vert); |
||||
-ms-transform: scale($horiz, $vert); |
||||
transform: scale($horiz, $vert); |
||||
} |
||||
|
||||
|
||||
// Only display content to screen readers. A la Bootstrap 4. |
||||
// |
||||
// See: http://a11yproject.com/posts/how-to-hide-content/ |
||||
|
||||
@mixin sr-only { |
||||
position: absolute; |
||||
width: 1px; |
||||
height: 1px; |
||||
padding: 0; |
||||
margin: -1px; |
||||
overflow: hidden; |
||||
clip: rect(0,0,0,0); |
||||
border: 0; |
||||
} |
||||
|
||||
// Use in conjunction with .sr-only to only display content when it's focused. |
||||
// |
||||
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 |
||||
// |
||||
// Credit: HTML5 Boilerplate |
||||
|
||||
@mixin sr-only-focusable { |
||||
&:active, |
||||
&:focus { |
||||
position: static; |
||||
width: auto; |
||||
height: auto; |
||||
margin: 0; |
||||
overflow: visible; |
||||
clip: auto; |
||||
} |
||||
} |
@ -0,0 +1,15 @@ |
||||
/* FONT PATH |
||||
* -------------------------- */ |
||||
|
||||
@font-face { |
||||
font-family: 'FontAwesome'; |
||||
src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); |
||||
src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), |
||||
url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), |
||||
url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), |
||||
url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), |
||||
url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); |
||||
// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts |
||||
font-weight: normal; |
||||
font-style: normal; |
||||
} |
@ -0,0 +1,20 @@ |
||||
// Rotated & Flipped Icons |
||||
// ------------------------- |
||||
|
||||
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } |
||||
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } |
||||
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } |
||||
|
||||
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } |
||||
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } |
||||
|
||||
// Hook for IE8-9 |
||||
// ------------------------- |
||||
|
||||
:root .#{$fa-css-prefix}-rotate-90, |
||||
:root .#{$fa-css-prefix}-rotate-180, |
||||
:root .#{$fa-css-prefix}-rotate-270, |
||||
:root .#{$fa-css-prefix}-flip-horizontal, |
||||
:root .#{$fa-css-prefix}-flip-vertical { |
||||
filter: none; |
||||
} |
@ -0,0 +1,5 @@ |
||||
// Screen Readers |
||||
// ------------------------- |
||||
|
||||
.sr-only { @include sr-only(); } |
||||
.sr-only-focusable { @include sr-only-focusable(); } |
@ -0,0 +1,20 @@ |
||||
// Stacked Icons |
||||
// ------------------------- |
||||
|
||||
.#{$fa-css-prefix}-stack { |
||||
position: relative; |
||||
display: inline-block; |
||||
width: 2em; |
||||
height: 2em; |
||||
line-height: 2em; |
||||
vertical-align: middle; |
||||
} |
||||
.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { |
||||
position: absolute; |
||||
left: 0; |
||||
width: 100%; |
||||
text-align: center; |
||||
} |
||||
.#{$fa-css-prefix}-stack-1x { line-height: inherit; } |
||||
.#{$fa-css-prefix}-stack-2x { font-size: 2em; } |
||||
.#{$fa-css-prefix}-inverse { color: $fa-inverse; } |
@ -0,0 +1,800 @@ |
||||
// Variables |
||||
// -------------------------- |
||||
|
||||
$fa-font-path: "../fonts" !default; |
||||
$fa-font-size-base: 14px !default; |
||||
$fa-line-height-base: 1 !default; |
||||
//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly |
||||
$fa-css-prefix: fa !default; |
||||
$fa-version: "4.7.0" !default; |
||||
$fa-border-color: #eee !default; |
||||
$fa-inverse: #fff !default; |
||||
$fa-li-width: (30em / 14) !default; |
||||
|
||||
$fa-var-500px: "\f26e"; |
||||
$fa-var-address-book: "\f2b9"; |
||||
$fa-var-address-book-o: "\f2ba"; |
||||
$fa-var-address-card: "\f2bb"; |
||||
$fa-var-address-card-o: "\f2bc"; |
||||
$fa-var-adjust: "\f042"; |
||||
$fa-var-adn: "\f170"; |
||||
$fa-var-align-center: "\f037"; |
||||
$fa-var-align-justify: "\f039"; |
||||
$fa-var-align-left: "\f036"; |
||||
$fa-var-align-right: "\f038"; |
||||
$fa-var-amazon: "\f270"; |
||||
$fa-var-ambulance: "\f0f9"; |
||||
$fa-var-american-sign-language-interpreting: "\f2a3"; |
||||
$fa-var-anchor: "\f13d"; |
||||
$fa-var-android: "\f17b"; |
||||
$fa-var-angellist: "\f209"; |
||||
$fa-var-angle-double-down: "\f103"; |
||||
$fa-var-angle-double-left: "\f100"; |
||||
$fa-var-angle-double-right: "\f101"; |
||||
$fa-var-angle-double-up: "\f102"; |
||||
$fa-var-angle-down: "\f107"; |
||||
$fa-var-angle-left: "\f104"; |
||||
$fa-var-angle-right: "\f105"; |
||||
$fa-var-angle-up: "\f106"; |
||||
$fa-var-apple: "\f179"; |
||||
$fa-var-archive: "\f187"; |
||||
$fa-var-area-chart: "\f1fe"; |
||||
$fa-var-arrow-circle-down: "\f0ab"; |
||||
$fa-var-arrow-circle-left: "\f0a8"; |
||||
$fa-var-arrow-circle-o-down: "\f01a"; |
||||
$fa-var-arrow-circle-o-left: "\f190"; |
||||
$fa-var-arrow-circle-o-right: "\f18e"; |
||||
$fa-var-arrow-circle-o-up: "\f01b"; |
||||
$fa-var-arrow-circle-right: "\f0a9"; |
||||
$fa-var-arrow-circle-up: "\f0aa"; |
||||
$fa-var-arrow-down: "\f063"; |
||||
$fa-var-arrow-left: "\f060"; |
||||
$fa-var-arrow-right: "\f061"; |
||||
$fa-var-arrow-up: "\f062"; |
||||
$fa-var-arrows: "\f047"; |
||||
$fa-var-arrows-alt: "\f0b2"; |
||||
$fa-var-arrows-h: "\f07e"; |
||||
$fa-var-arrows-v: "\f07d"; |
||||
$fa-var-asl-interpreting: "\f2a3"; |
||||
$fa-var-assistive-listening-systems: "\f2a2"; |
||||
$fa-var-asterisk: "\f069"; |
||||
$fa-var-at: "\f1fa"; |
||||
$fa-var-audio-description: "\f29e"; |
||||
$fa-var-automobile: "\f1b9"; |
||||
$fa-var-backward: "\f04a"; |
||||
$fa-var-balance-scale: "\f24e"; |
||||
$fa-var-ban: "\f05e"; |
||||
$fa-var-bandcamp: "\f2d5"; |
||||
$fa-var-bank: "\f19c"; |
||||
$fa-var-bar-chart: "\f080"; |
||||
$fa-var-bar-chart-o: "\f080"; |
||||
$fa-var-barcode: "\f02a"; |
||||
$fa-var-bars: "\f0c9"; |
||||
$fa-var-bath: "\f2cd"; |
||||
$fa-var-bathtub: "\f2cd"; |
||||
$fa-var-battery: "\f240"; |
||||
$fa-var-battery-0: "\f244"; |
||||
$fa-var-battery-1: "\f243"; |
||||
$fa-var-battery-2: "\f242"; |
||||
$fa-var-battery-3: "\f241"; |
||||
$fa-var-battery-4: "\f240"; |
||||
$fa-var-battery-empty: "\f244"; |
||||
$fa-var-battery-full: "\f240"; |
||||
$fa-var-battery-half: "\f242"; |
||||
$fa-var-battery-quarter: "\f243"; |
||||
$fa-var-battery-three-quarters: "\f241"; |
||||
$fa-var-bed: "\f236"; |
||||
$fa-var-beer: "\f0fc"; |
||||
$fa-var-behance: "\f1b4"; |
||||
$fa-var-behance-square: "\f1b5"; |
||||
$fa-var-bell: "\f0f3"; |
||||
$fa-var-bell-o: "\f0a2"; |
||||
$fa-var-bell-slash: "\f1f6"; |
||||
$fa-var-bell-slash-o: "\f1f7"; |
||||
$fa-var-bicycle: "\f206"; |
||||
$fa-var-binoculars: "\f1e5"; |
||||
$fa-var-birthday-cake: "\f1fd"; |
||||
$fa-var-bitbucket: "\f171"; |
||||
$fa-var-bitbucket-square: "\f172"; |
||||
$fa-var-bitcoin: "\f15a"; |
||||
$fa-var-black-tie: "\f27e"; |
||||
$fa-var-blind: "\f29d"; |
||||
$fa-var-bluetooth: "\f293"; |
||||
$fa-var-bluetooth-b: "\f294"; |
||||
$fa-var-bold: "\f032"; |
||||
$fa-var-bolt: "\f0e7"; |
||||
$fa-var-bomb: "\f1e2"; |
||||
$fa-var-book: "\f02d"; |
||||
$fa-var-bookmark: "\f02e"; |
||||
$fa-var-bookmark-o: "\f097"; |
||||
$fa-var-braille: "\f2a1"; |
||||
$fa-var-briefcase: "\f0b1"; |
||||
$fa-var-btc: "\f15a"; |
||||
$fa-var-bug: "\f188"; |
||||
$fa-var-building: "\f1ad"; |
||||
$fa-var-building-o: "\f0f7"; |
||||
$fa-var-bullhorn: "\f0a1"; |
||||
$fa-var-bullseye: "\f140"; |
||||
$fa-var-bus: "\f207"; |
||||
$fa-var-buysellads: "\f20d"; |
||||
$fa-var-cab: "\f1ba"; |
||||
$fa-var-calculator: "\f1ec"; |
||||
$fa-var-calendar: "\f073"; |
||||
$fa-var-calendar-check-o: "\f274"; |
||||
$fa-var-calendar-minus-o: "\f272"; |
||||
$fa-var-calendar-o: "\f133"; |
||||
$fa-var-calendar-plus-o: "\f271"; |
||||
$fa-var-calendar-times-o: "\f273"; |
||||
$fa-var-camera: "\f030"; |
||||
$fa-var-camera-retro: "\f083"; |
||||
$fa-var-car: "\f1b9"; |
||||
$fa-var-caret-down: "\f0d7"; |
||||
$fa-var-caret-left: "\f0d9"; |
||||
$fa-var-caret-right: "\f0da"; |
||||
$fa-var-caret-square-o-down: "\f150"; |
||||
$fa-var-caret-square-o-left: "\f191"; |
||||
$fa-var-caret-square-o-right: "\f152"; |
||||
$fa-var-caret-square-o-up: "\f151"; |
||||
$fa-var-caret-up: "\f0d8"; |
||||
$fa-var-cart-arrow-down: "\f218"; |
||||
$fa-var-cart-plus: "\f217"; |
||||
$fa-var-cc: "\f20a"; |
||||
$fa-var-cc-amex: "\f1f3"; |
||||
$fa-var-cc-diners-club: "\f24c"; |
||||
$fa-var-cc-discover: "\f1f2"; |
||||
$fa-var-cc-jcb: "\f24b"; |
||||
$fa-var-cc-mastercard: "\f1f1"; |
||||
$fa-var-cc-paypal: "\f1f4"; |
||||
$fa-var-cc-stripe: "\f1f5"; |
||||
$fa-var-cc-visa: "\f1f0"; |
||||
$fa-var-certificate: "\f0a3"; |
||||
$fa-var-chain: "\f0c1"; |
||||
$fa-var-chain-broken: "\f127"; |
||||
$fa-var-check: "\f00c"; |
||||
$fa-var-check-circle: "\f058"; |
||||
$fa-var-check-circle-o: "\f05d"; |
||||
$fa-var-check-square: "\f14a"; |
||||
$fa-var-check-square-o: "\f046"; |
||||
$fa-var-chevron-circle-down: "\f13a"; |
||||
$fa-var-chevron-circle-left: "\f137"; |
||||
$fa-var-chevron-circle-right: "\f138"; |
||||
$fa-var-chevron-circle-up: "\f139"; |
||||
$fa-var-chevron-down: "\f078"; |
||||
$fa-var-chevron-left: "\f053"; |
||||
$fa-var-chevron-right: "\f054"; |
||||
$fa-var-chevron-up: "\f077"; |
||||
$fa-var-child: "\f1ae"; |
||||
$fa-var-chrome: "\f268"; |
||||
$fa-var-circle: "\f111"; |
||||
$fa-var-circle-o: "\f10c"; |
||||
$fa-var-circle-o-notch: "\f1ce"; |
||||
$fa-var-circle-thin: "\f1db"; |
||||
$fa-var-clipboard: "\f0ea"; |
||||
$fa-var-clock-o: "\f017"; |
||||
$fa-var-clone: "\f24d"; |
||||
$fa-var-close: "\f00d"; |
||||
$fa-var-cloud: "\f0c2"; |
||||
$fa-var-cloud-download: "\f0ed"; |
||||
$fa-var-cloud-upload: "\f0ee"; |
||||
$fa-var-cny: "\f157"; |
||||
$fa-var-code: "\f121"; |
||||
$fa-var-code-fork: "\f126"; |
||||
$fa-var-codepen: "\f1cb"; |
||||
$fa-var-codiepie: "\f284"; |
||||
$fa-var-coffee: "\f0f4"; |
||||
$fa-var-cog: "\f013"; |
||||
$fa-var-cogs: "\f085"; |
||||
$fa-var-columns: "\f0db"; |
||||
$fa-var-comment: "\f075"; |
||||
$fa-var-comment-o: "\f0e5"; |
||||
$fa-var-commenting: "\f27a"; |
||||
$fa-var-commenting-o: "\f27b"; |
||||
$fa-var-comments: "\f086"; |
||||
$fa-var-comments-o: "\f0e6"; |
||||
$fa-var-compass: "\f14e"; |
||||
$fa-var-compress: "\f066"; |
||||
$fa-var-connectdevelop: "\f20e"; |
||||
$fa-var-contao: "\f26d"; |
||||
$fa-var-copy: "\f0c5"; |
||||
$fa-var-copyright: "\f1f9"; |
||||
$fa-var-creative-commons: "\f25e"; |
||||
$fa-var-credit-card: "\f09d"; |
||||
$fa-var-credit-card-alt: "\f283"; |
||||
$fa-var-crop: "\f125"; |
||||
$fa-var-crosshairs: "\f05b"; |
||||
$fa-var-css3: "\f13c"; |
||||
$fa-var-cube: "\f1b2"; |
||||
$fa-var-cubes: "\f1b3"; |
||||
$fa-var-cut: "\f0c4"; |
||||
$fa-var-cutlery: "\f0f5"; |
||||
$fa-var-dashboard: "\f0e4"; |
||||
$fa-var-dashcube: "\f210"; |
||||
$fa-var-database: "\f1c0"; |
||||
$fa-var-deaf: "\f2a4"; |
||||
$fa-var-deafness: "\f2a4"; |
||||
$fa-var-dedent: "\f03b"; |
||||
$fa-var-delicious: "\f1a5"; |
||||
$fa-var-desktop: "\f108"; |
||||
$fa-var-deviantart: "\f1bd"; |
||||
$fa-var-diamond: "\f219"; |
||||
$fa-var-digg: "\f1a6"; |
||||
$fa-var-dollar: "\f155"; |
||||
$fa-var-dot-circle-o: "\f192"; |
||||
$fa-var-download: "\f019"; |
||||
$fa-var-dribbble: "\f17d"; |
||||
$fa-var-drivers-license: "\f2c2"; |
||||
$fa-var-drivers-license-o: "\f2c3"; |
||||
$fa-var-dropbox: "\f16b"; |
||||
$fa-var-drupal: "\f1a9"; |
||||
$fa-var-edge: "\f282"; |
||||
$fa-var-edit: "\f044"; |
||||
$fa-var-eercast: "\f2da"; |
||||
$fa-var-eject: "\f052"; |
||||
$fa-var-ellipsis-h: "\f141"; |
||||
$fa-var-ellipsis-v: "\f142"; |
||||
$fa-var-empire: "\f1d1"; |
||||
$fa-var-envelope: "\f0e0"; |
||||
$fa-var-envelope-o: "\f003"; |
||||
$fa-var-envelope-open: "\f2b6"; |
||||
$fa-var-envelope-open-o: "\f2b7"; |
||||
$fa-var-envelope-square: "\f199"; |
||||
$fa-var-envira: "\f299"; |
||||
$fa-var-eraser: "\f12d"; |
||||
$fa-var-etsy: "\f2d7"; |
||||
$fa-var-eur: "\f153"; |
||||
$fa-var-euro: "\f153"; |
||||
$fa-var-exchange: "\f0ec"; |
||||
$fa-var-exclamation: "\f12a"; |
||||
$fa-var-exclamation-circle: "\f06a"; |
||||
$fa-var-exclamation-triangle: "\f071"; |
||||
$fa-var-expand: "\f065"; |
||||
$fa-var-expeditedssl: "\f23e"; |
||||
$fa-var-external-link: "\f08e"; |
||||
$fa-var-external-link-square: "\f14c"; |
||||
$fa-var-eye: "\f06e"; |
||||
$fa-var-eye-slash: "\f070"; |
||||
$fa-var-eyedropper: "\f1fb"; |
||||
$fa-var-fa: "\f2b4"; |
||||
$fa-var-facebook: "\f09a"; |
||||
$fa-var-facebook-f: "\f09a"; |
||||
$fa-var-facebook-official: "\f230"; |
||||
$fa-var-facebook-square: "\f082"; |
||||
$fa-var-fast-backward: "\f049"; |
||||
$fa-var-fast-forward: "\f050"; |
||||
$fa-var-fax: "\f1ac"; |
||||
$fa-var-feed: "\f09e"; |
||||
$fa-var-female: "\f182"; |
||||
$fa-var-fighter-jet: "\f0fb"; |
||||
$fa-var-file: "\f15b"; |
||||
$fa-var-file-archive-o: "\f1c6"; |
||||
$fa-var-file-audio-o: "\f1c7"; |
||||
$fa-var-file-code-o: "\f1c9"; |
||||
$fa-var-file-excel-o: "\f1c3"; |
||||
$fa-var-file-image-o: "\f1c5"; |
||||
$fa-var-file-movie-o: "\f1c8"; |
||||
$fa-var-file-o: "\f016"; |
||||
$fa-var-file-pdf-o: "\f1c1"; |
||||
$fa-var-file-photo-o: "\f1c5"; |
||||
$fa-var-file-picture-o: "\f1c5"; |
||||
$fa-var-file-powerpoint-o: "\f1c4"; |
||||
$fa-var-file-sound-o: "\f1c7"; |
||||
$fa-var-file-text: "\f15c"; |
||||
$fa-var-file-text-o: "\f0f6"; |
||||
$fa-var-file-video-o: "\f1c8"; |
||||
$fa-var-file-word-o: "\f1c2"; |
||||
$fa-var-file-zip-o: "\f1c6"; |
||||
$fa-var-files-o: "\f0c5"; |
||||
$fa-var-film: "\f008"; |
||||
$fa-var-filter: "\f0b0"; |
||||
$fa-var-fire: "\f06d"; |
||||
$fa-var-fire-extinguisher: "\f134"; |
||||
$fa-var-firefox: "\f269"; |
||||
$fa-var-first-order: "\f2b0"; |
||||
$fa-var-flag: "\f024"; |
||||
$fa-var-flag-checkered: "\f11e"; |
||||
$fa-var-flag-o: "\f11d"; |
||||
$fa-var-flash: "\f0e7"; |
||||
$fa-var-flask: "\f0c3"; |
||||
$fa-var-flickr: "\f16e"; |
||||
$fa-var-floppy-o: "\f0c7"; |
||||
$fa-var-folder: "\f07b"; |
||||
$fa-var-folder-o: "\f114"; |
||||
$fa-var-folder-open: "\f07c"; |
||||
$fa-var-folder-open-o: "\f115"; |
||||
$fa-var-font: "\f031"; |
||||
$fa-var-font-awesome: "\f2b4"; |
||||
$fa-var-fonticons: "\f280"; |
||||
$fa-var-fort-awesome: "\f286"; |
||||
$fa-var-forumbee: "\f211"; |
||||
$fa-var-forward: "\f04e"; |
||||
$fa-var-foursquare: "\f180"; |
||||
$fa-var-free-code-camp: "\f2c5"; |
||||
$fa-var-frown-o: "\f119"; |
||||
$fa-var-futbol-o: "\f1e3"; |
||||
$fa-var-gamepad: "\f11b"; |
||||
$fa-var-gavel: "\f0e3"; |
||||
$fa-var-gbp: "\f154"; |
||||
$fa-var-ge: "\f1d1"; |
||||
$fa-var-gear: "\f013"; |
||||
$fa-var-gears: "\f085"; |
||||
$fa-var-genderless: "\f22d"; |
||||
$fa-var-get-pocket: "\f265"; |
||||
$fa-var-gg: "\f260"; |
||||
$fa-var-gg-circle: "\f261"; |
||||
$fa-var-gift: "\f06b"; |
||||
$fa-var-git: "\f1d3"; |
||||
$fa-var-git-square: "\f1d2"; |
||||
$fa-var-github: "\f09b"; |
||||
$fa-var-github-alt: "\f113"; |
||||
$fa-var-github-square: "\f092"; |
||||
$fa-var-gitlab: "\f296"; |
||||
$fa-var-gittip: "\f184"; |
||||
$fa-var-glass: "\f000"; |
||||
$fa-var-glide: "\f2a5"; |
||||
$fa-var-glide-g: "\f2a6"; |
||||
$fa-var-globe: "\f0ac"; |
||||
$fa-var-google: "\f1a0"; |
||||
$fa-var-google-plus: "\f0d5"; |
||||
$fa-var-google-plus-circle: "\f2b3"; |
||||
$fa-var-google-plus-official: "\f2b3"; |
||||
$fa-var-google-plus-square: "\f0d4"; |
||||
$fa-var-google-wallet: "\f1ee"; |
||||
$fa-var-graduation-cap: "\f19d"; |
||||
$fa-var-gratipay: "\f184"; |
||||
$fa-var-grav: "\f2d6"; |
||||
$fa-var-group: "\f0c0"; |
||||
$fa-var-h-square: "\f0fd"; |
||||
$fa-var-hacker-news: "\f1d4"; |
||||
$fa-var-hand-grab-o: "\f255"; |
||||
$fa-var-hand-lizard-o: "\f258"; |
||||
$fa-var-hand-o-down: "\f0a7"; |
||||
$fa-var-hand-o-left: "\f0a5"; |
||||
$fa-var-hand-o-right: "\f0a4"; |
||||
$fa-var-hand-o-up: "\f0a6"; |
||||
$fa-var-hand-paper-o: "\f256"; |
||||
$fa-var-hand-peace-o: "\f25b"; |
||||
$fa-var-hand-pointer-o: "\f25a"; |
||||
$fa-var-hand-rock-o: "\f255"; |
||||
$fa-var-hand-scissors-o: "\f257"; |
||||
$fa-var-hand-spock-o: "\f259"; |
||||
$fa-var-hand-stop-o: "\f256"; |
||||
$fa-var-handshake-o: "\f2b5"; |
||||
$fa-var-hard-of-hearing: "\f2a4"; |
||||
$fa-var-hashtag: "\f292"; |
||||
$fa-var-hdd-o: "\f0a0"; |
||||
$fa-var-header: "\f1dc"; |
||||
$fa-var-headphones: "\f025"; |
||||
$fa-var-heart: "\f004"; |
||||
$fa-var-heart-o: "\f08a"; |
||||
$fa-var-heartbeat: "\f21e"; |
||||
$fa-var-history: "\f1da"; |
||||
$fa-var-home: "\f015"; |
||||
$fa-var-hospital-o: "\f0f8"; |
||||
$fa-var-hotel: "\f236"; |
||||
$fa-var-hourglass: "\f254"; |
||||
$fa-var-hourglass-1: "\f251"; |
||||
$fa-var-hourglass-2: "\f252"; |
||||
$fa-var-hourglass-3: "\f253"; |
||||
$fa-var-hourglass-end: "\f253"; |
||||
$fa-var-hourglass-half: "\f252"; |
||||
$fa-var-hourglass-o: "\f250"; |
||||
$fa-var-hourglass-start: "\f251"; |
||||
$fa-var-houzz: "\f27c"; |
||||
$fa-var-html5: "\f13b"; |
||||
$fa-var-i-cursor: "\f246"; |
||||
$fa-var-id-badge: "\f2c1"; |
||||
$fa-var-id-card: "\f2c2"; |
||||
$fa-var-id-card-o: "\f2c3"; |
||||
$fa-var-ils: "\f20b"; |
||||
$fa-var-image: "\f03e"; |
||||
$fa-var-imdb: "\f2d8"; |
||||
$fa-var-inbox: "\f01c"; |
||||
$fa-var-indent: "\f03c"; |
||||
$fa-var-industry: "\f275"; |
||||
$fa-var-info: "\f129"; |
||||
$fa-var-info-circle: "\f05a"; |
||||
$fa-var-inr: "\f156"; |
||||
$fa-var-instagram: "\f16d"; |
||||
$fa-var-institution: "\f19c"; |
||||
$fa-var-internet-explorer: "\f26b"; |
||||
$fa-var-intersex: "\f224"; |
||||
$fa-var-ioxhost: "\f208"; |
||||
$fa-var-italic: "\f033"; |
||||
$fa-var-joomla: "\f1aa"; |
||||
$fa-var-jpy: "\f157"; |
||||
$fa-var-jsfiddle: "\f1cc"; |
||||
$fa-var-key: "\f084"; |
||||
$fa-var-keyboard-o: "\f11c"; |
||||
$fa-var-krw: "\f159"; |
||||
$fa-var-language: "\f1ab"; |
||||
$fa-var-laptop: "\f109"; |
||||
$fa-var-lastfm: "\f202"; |
||||
$fa-var-lastfm-square: "\f203"; |
||||
$fa-var-leaf: "\f06c"; |
||||
$fa-var-leanpub: "\f212"; |
||||
$fa-var-legal: "\f0e3"; |
||||
$fa-var-lemon-o: "\f094"; |
||||
$fa-var-level-down: "\f149"; |
||||
$fa-var-level-up: "\f148"; |
||||
$fa-var-life-bouy: "\f1cd"; |
||||
$fa-var-life-buoy: "\f1cd"; |
||||
$fa-var-life-ring: "\f1cd"; |
||||
$fa-var-life-saver: "\f1cd"; |
||||
$fa-var-lightbulb-o: "\f0eb"; |
||||
$fa-var-line-chart: "\f201"; |
||||
$fa-var-link: "\f0c1"; |
||||
$fa-var-linkedin: "\f0e1"; |
||||
$fa-var-linkedin-square: "\f08c"; |
||||
$fa-var-linode: "\f2b8"; |
||||
$fa-var-linux: "\f17c"; |
||||
$fa-var-list: "\f03a"; |
||||
$fa-var-list-alt: "\f022"; |
||||
$fa-var-list-ol: "\f0cb"; |
||||
$fa-var-list-ul: "\f0ca"; |
||||
$fa-var-location-arrow: "\f124"; |
||||
$fa-var-lock: "\f023"; |
||||
$fa-var-long-arrow-down: "\f175"; |
||||
$fa-var-long-arrow-left: "\f177"; |
||||
$fa-var-long-arrow-right: "\f178"; |
||||
$fa-var-long-arrow-up: "\f176"; |
||||
$fa-var-low-vision: "\f2a8"; |
||||
$fa-var-magic: "\f0d0"; |
||||
$fa-var-magnet: "\f076"; |
||||
$fa-var-mail-forward: "\f064"; |
||||
$fa-var-mail-reply: "\f112"; |
||||
$fa-var-mail-reply-all: "\f122"; |
||||
$fa-var-male: "\f183"; |
||||
$fa-var-map: "\f279"; |
||||
$fa-var-map-marker: "\f041"; |
||||
$fa-var-map-o: "\f278"; |
||||
$fa-var-map-pin: "\f276"; |
||||
$fa-var-map-signs: "\f277"; |
||||
$fa-var-mars: "\f222"; |
||||
$fa-var-mars-double: "\f227"; |
||||
$fa-var-mars-stroke: "\f229"; |
||||
$fa-var-mars-stroke-h: "\f22b"; |
||||
$fa-var-mars-stroke-v: "\f22a"; |
||||
$fa-var-maxcdn: "\f136"; |
||||
$fa-var-meanpath: "\f20c"; |
||||
$fa-var-medium: "\f23a"; |
||||
$fa-var-medkit: "\f0fa"; |
||||
$fa-var-meetup: "\f2e0"; |
||||
$fa-var-meh-o: "\f11a"; |
||||
$fa-var-mercury: "\f223"; |
||||
$fa-var-microchip: "\f2db"; |
||||
$fa-var-microphone: "\f130"; |
||||
$fa-var-microphone-slash: "\f131"; |
||||
$fa-var-minus: "\f068"; |
||||
$fa-var-minus-circle: "\f056"; |
||||
$fa-var-minus-square: "\f146"; |
||||
$fa-var-minus-square-o: "\f147"; |
||||
$fa-var-mixcloud: "\f289"; |
||||
$fa-var-mobile: "\f10b"; |
||||
$fa-var-mobile-phone: "\f10b"; |
||||
$fa-var-modx: "\f285"; |
||||
$fa-var-money: "\f0d6"; |
||||
$fa-var-moon-o: "\f186"; |
||||
$fa-var-mortar-board: "\f19d"; |
||||
$fa-var-motorcycle: "\f21c"; |
||||
$fa-var-mouse-pointer: "\f245"; |
||||
$fa-var-music: "\f001"; |
||||
$fa-var-navicon: "\f0c9"; |
||||
$fa-var-neuter: "\f22c"; |
||||
$fa-var-newspaper-o: "\f1ea"; |
||||
$fa-var-object-group: "\f247"; |
||||
$fa-var-object-ungroup: "\f248"; |
||||
$fa-var-odnoklassniki: "\f263"; |
||||
$fa-var-odnoklassniki-square: "\f264"; |
||||
$fa-var-opencart: "\f23d"; |
||||
$fa-var-openid: "\f19b"; |
||||
$fa-var-opera: "\f26a"; |
||||
$fa-var-optin-monster: "\f23c"; |
||||
$fa-var-outdent: "\f03b"; |
||||
$fa-var-pagelines: "\f18c"; |
||||
$fa-var-paint-brush: "\f1fc"; |
||||
$fa-var-paper-plane: "\f1d8"; |
||||
$fa-var-paper-plane-o: "\f1d9"; |
||||
$fa-var-paperclip: "\f0c6"; |
||||
$fa-var-paragraph: "\f1dd"; |
||||
$fa-var-paste: "\f0ea"; |
||||
$fa-var-pause: "\f04c"; |
||||
$fa-var-pause-circle: "\f28b"; |
||||
$fa-var-pause-circle-o: "\f28c"; |
||||
$fa-var-paw: "\f1b0"; |
||||
$fa-var-paypal: "\f1ed"; |
||||
$fa-var-pencil: "\f040"; |
||||
$fa-var-pencil-square: "\f14b"; |
||||
$fa-var-pencil-square-o: "\f044"; |
||||
$fa-var-percent: "\f295"; |
||||
$fa-var-phone: "\f095"; |
||||
$fa-var-phone-square: "\f098"; |
||||
$fa-var-photo: "\f03e"; |
||||
$fa-var-picture-o: "\f03e"; |
||||
$fa-var-pie-chart: "\f200"; |
||||
$fa-var-pied-piper: "\f2ae"; |
||||
$fa-var-pied-piper-alt: "\f1a8"; |
||||
$fa-var-pied-piper-pp: "\f1a7"; |
||||
$fa-var-pinterest: "\f0d2"; |
||||
$fa-var-pinterest-p: "\f231"; |
||||
$fa-var-pinterest-square: "\f0d3"; |
||||
$fa-var-plane: "\f072"; |
||||
$fa-var-play: "\f04b"; |
||||
$fa-var-play-circle: "\f144"; |
||||
$fa-var-play-circle-o: "\f01d"; |
||||
$fa-var-plug: "\f1e6"; |
||||
$fa-var-plus: "\f067"; |
||||
$fa-var-plus-circle: "\f055"; |
||||
$fa-var-plus-square: "\f0fe"; |
||||
$fa-var-plus-square-o: "\f196"; |
||||
$fa-var-podcast: "\f2ce"; |
||||
$fa-var-power-off: "\f011"; |
||||
$fa-var-print: "\f02f"; |
||||
$fa-var-product-hunt: "\f288"; |
||||
$fa-var-puzzle-piece: "\f12e"; |
||||
$fa-var-qq: "\f1d6"; |
||||
$fa-var-qrcode: "\f029"; |
||||
$fa-var-question: "\f128"; |
||||
$fa-var-question-circle: "\f059"; |
||||
$fa-var-question-circle-o: "\f29c"; |
||||
$fa-var-quora: "\f2c4"; |
||||
$fa-var-quote-left: "\f10d"; |
||||
$fa-var-quote-right: "\f10e"; |
||||
$fa-var-ra: "\f1d0"; |
||||
$fa-var-random: "\f074"; |
||||
$fa-var-ravelry: "\f2d9"; |
||||
$fa-var-rebel: "\f1d0"; |
||||
$fa-var-recycle: "\f1b8"; |
||||
$fa-var-reddit: "\f1a1"; |
||||
$fa-var-reddit-alien: "\f281"; |
||||
$fa-var-reddit-square: "\f1a2"; |
||||
$fa-var-refresh: "\f021"; |
||||
$fa-var-registered: "\f25d"; |
||||
$fa-var-remove: "\f00d"; |
||||
$fa-var-renren: "\f18b"; |
||||
$fa-var-reorder: "\f0c9"; |
||||
$fa-var-repeat: "\f01e"; |
||||
$fa-var-reply: "\f112"; |
||||
$fa-var-reply-all: "\f122"; |
||||
$fa-var-resistance: "\f1d0"; |
||||
$fa-var-retweet: "\f079"; |
||||
$fa-var-rmb: "\f157"; |
||||
$fa-var-road: "\f018"; |
||||
$fa-var-rocket: "\f135"; |
||||
$fa-var-rotate-left: "\f0e2"; |
||||
$fa-var-rotate-right: "\f01e"; |
||||
$fa-var-rouble: "\f158"; |
||||
$fa-var-rss: "\f09e"; |
||||
$fa-var-rss-square: "\f143"; |
||||
$fa-var-rub: "\f158"; |
||||
$fa-var-ruble: "\f158"; |
||||
$fa-var-rupee: "\f156"; |
||||
$fa-var-s15: "\f2cd"; |
||||
$fa-var-safari: "\f267"; |
||||
$fa-var-save: "\f0c7"; |
||||
$fa-var-scissors: "\f0c4"; |
||||
$fa-var-scribd: "\f28a"; |
||||
$fa-var-search: "\f002"; |
||||
$fa-var-search-minus: "\f010"; |
||||
$fa-var-search-plus: "\f00e"; |
||||
$fa-var-sellsy: "\f213"; |
||||
$fa-var-send: "\f1d8"; |
||||
$fa-var-send-o: "\f1d9"; |
||||
$fa-var-server: "\f233"; |
||||
$fa-var-share: "\f064"; |
||||
$fa-var-share-alt: "\f1e0"; |
||||
$fa-var-share-alt-square: "\f1e1"; |
||||
$fa-var-share-square: "\f14d"; |
||||
$fa-var-share-square-o: "\f045"; |
||||
$fa-var-shekel: "\f20b"; |
||||
$fa-var-sheqel: "\f20b"; |
||||
$fa-var-shield: "\f132"; |
||||
$fa-var-ship: "\f21a"; |
||||
$fa-var-shirtsinbulk: "\f214"; |
||||
$fa-var-shopping-bag: "\f290"; |
||||
$fa-var-shopping-basket: "\f291"; |
||||
$fa-var-shopping-cart: "\f07a"; |
||||
$fa-var-shower: "\f2cc"; |
||||
$fa-var-sign-in: "\f090"; |
||||
$fa-var-sign-language: "\f2a7"; |
||||
$fa-var-sign-out: "\f08b"; |
||||
$fa-var-signal: "\f012"; |
||||
$fa-var-signing: "\f2a7"; |
||||
$fa-var-simplybuilt: "\f215"; |
||||
$fa-var-sitemap: "\f0e8"; |
||||
$fa-var-skyatlas: "\f216"; |
||||
$fa-var-skype: "\f17e"; |
||||
$fa-var-slack: "\f198"; |
||||
$fa-var-sliders: "\f1de"; |
||||
$fa-var-slideshare: "\f1e7"; |
||||
$fa-var-smile-o: "\f118"; |
||||
$fa-var-snapchat: "\f2ab"; |
||||
$fa-var-snapchat-ghost: "\f2ac"; |
||||
$fa-var-snapchat-square: "\f2ad"; |
||||
$fa-var-snowflake-o: "\f2dc"; |
||||
$fa-var-soccer-ball-o: "\f1e3"; |
||||
$fa-var-sort: "\f0dc"; |
||||
$fa-var-sort-alpha-asc: "\f15d"; |
||||
$fa-var-sort-alpha-desc: "\f15e"; |
||||
$fa-var-sort-amount-asc: "\f160"; |
||||
$fa-var-sort-amount-desc: "\f161"; |
||||
$fa-var-sort-asc: "\f0de"; |
||||
$fa-var-sort-desc: "\f0dd"; |
||||
$fa-var-sort-down: "\f0dd"; |
||||
$fa-var-sort-numeric-asc: "\f162"; |
||||
$fa-var-sort-numeric-desc: "\f163"; |
||||
$fa-var-sort-up: "\f0de"; |
||||
$fa-var-soundcloud: "\f1be"; |
||||
$fa-var-space-shuttle: "\f197"; |
||||
$fa-var-spinner: "\f110"; |
||||
$fa-var-spoon: "\f1b1"; |
||||
$fa-var-spotify: "\f1bc"; |
||||
$fa-var-square: "\f0c8"; |
||||
$fa-var-square-o: "\f096"; |
||||
$fa-var-stack-exchange: "\f18d"; |
||||
$fa-var-stack-overflow: "\f16c"; |
||||
$fa-var-star: "\f005"; |
||||
$fa-var-star-half: "\f089"; |
||||
$fa-var-star-half-empty: "\f123"; |
||||
$fa-var-star-half-full: "\f123"; |
||||
$fa-var-star-half-o: "\f123"; |
||||
$fa-var-star-o: "\f006"; |
||||
$fa-var-steam: "\f1b6"; |
||||
$fa-var-steam-square: "\f1b7"; |
||||
$fa-var-step-backward: "\f048"; |
||||
$fa-var-step-forward: "\f051"; |
||||
$fa-var-stethoscope: "\f0f1"; |
||||
$fa-var-sticky-note: "\f249"; |
||||
$fa-var-sticky-note-o: "\f24a"; |
||||
$fa-var-stop: "\f04d"; |
||||
$fa-var-stop-circle: "\f28d"; |
||||
$fa-var-stop-circle-o: "\f28e"; |
||||
$fa-var-street-view: "\f21d"; |
||||
$fa-var-strikethrough: "\f0cc"; |
||||
$fa-var-stumbleupon: "\f1a4"; |
||||
$fa-var-stumbleupon-circle: "\f1a3"; |
||||
$fa-var-subscript: "\f12c"; |
||||
$fa-var-subway: "\f239"; |
||||
$fa-var-suitcase: "\f0f2"; |
||||
$fa-var-sun-o: "\f185"; |
||||
$fa-var-superpowers: "\f2dd"; |
||||
$fa-var-superscript: "\f12b"; |
||||
$fa-var-support: "\f1cd"; |
||||
$fa-var-table: "\f0ce"; |
||||
$fa-var-tablet: "\f10a"; |
||||
$fa-var-tachometer: "\f0e4"; |
||||
$fa-var-tag: "\f02b"; |
||||
$fa-var-tags: "\f02c"; |
||||
$fa-var-tasks: "\f0ae"; |
||||
$fa-var-taxi: "\f1ba"; |
||||
$fa-var-telegram: "\f2c6"; |
||||
$fa-var-television: "\f26c"; |
||||
$fa-var-tencent-weibo: "\f1d5"; |
||||
$fa-var-terminal: "\f120"; |
||||
$fa-var-text-height: "\f034"; |
||||
$fa-var-text-width: "\f035"; |
||||
$fa-var-th: "\f00a"; |
||||
$fa-var-th-large: "\f009"; |
||||
$fa-var-th-list: "\f00b"; |
||||
$fa-var-themeisle: "\f2b2"; |
||||
$fa-var-thermometer: "\f2c7"; |
||||
$fa-var-thermometer-0: "\f2cb"; |
||||
$fa-var-thermometer-1: "\f2ca"; |
||||
$fa-var-thermometer-2: "\f2c9"; |
||||
$fa-var-thermometer-3: "\f2c8"; |
||||
$fa-var-thermometer-4: "\f2c7"; |
||||
$fa-var-thermometer-empty: "\f2cb"; |
||||
$fa-var-thermometer-full: "\f2c7"; |
||||
$fa-var-thermometer-half: "\f2c9"; |
||||
$fa-var-thermometer-quarter: "\f2ca"; |
||||
$fa-var-thermometer-three-quarters: "\f2c8"; |
||||
$fa-var-thumb-tack: "\f08d"; |
||||
$fa-var-thumbs-down: "\f165"; |
||||
$fa-var-thumbs-o-down: "\f088"; |
||||
$fa-var-thumbs-o-up: "\f087"; |
||||
$fa-var-thumbs-up: "\f164"; |
||||
$fa-var-ticket: "\f145"; |
||||
$fa-var-times: "\f00d"; |
||||
$fa-var-times-circle: "\f057"; |
||||
$fa-var-times-circle-o: "\f05c"; |
||||
$fa-var-times-rectangle: "\f2d3"; |
||||
$fa-var-times-rectangle-o: "\f2d4"; |
||||
$fa-var-tint: "\f043"; |
||||
$fa-var-toggle-down: "\f150"; |
||||
$fa-var-toggle-left: "\f191"; |
||||
$fa-var-toggle-off: "\f204"; |
||||
$fa-var-toggle-on: "\f205"; |
||||
$fa-var-toggle-right: "\f152"; |
||||
$fa-var-toggle-up: "\f151"; |
||||
$fa-var-trademark: "\f25c"; |
||||
$fa-var-train: "\f238"; |
||||
$fa-var-transgender: "\f224"; |
||||
$fa-var-transgender-alt: "\f225"; |
||||
$fa-var-trash: "\f1f8"; |
||||
$fa-var-trash-o: "\f014"; |
||||
$fa-var-tree: "\f1bb"; |
||||
$fa-var-trello: "\f181"; |
||||
$fa-var-tripadvisor: "\f262"; |
||||
$fa-var-trophy: "\f091"; |
||||
$fa-var-truck: "\f0d1"; |
||||
$fa-var-try: "\f195"; |
||||
$fa-var-tty: "\f1e4"; |
||||
$fa-var-tumblr: "\f173"; |
||||
$fa-var-tumblr-square: "\f174"; |
||||
$fa-var-turkish-lira: "\f195"; |
||||
$fa-var-tv: "\f26c"; |
||||
$fa-var-twitch: "\f1e8"; |
||||
$fa-var-twitter: "\f099"; |
||||
$fa-var-twitter-square: "\f081"; |
||||
$fa-var-umbrella: "\f0e9"; |
||||
$fa-var-underline: "\f0cd"; |
||||
$fa-var-undo: "\f0e2"; |
||||
$fa-var-universal-access: "\f29a"; |
||||
$fa-var-university: "\f19c"; |
||||
$fa-var-unlink: "\f127"; |
||||
$fa-var-unlock: "\f09c"; |
||||
$fa-var-unlock-alt: "\f13e"; |
||||
$fa-var-unsorted: "\f0dc"; |
||||
$fa-var-upload: "\f093"; |
||||
$fa-var-usb: "\f287"; |
||||
$fa-var-usd: "\f155"; |
||||
$fa-var-user: "\f007"; |
||||
$fa-var-user-circle: "\f2bd"; |
||||
$fa-var-user-circle-o: "\f2be"; |
||||
$fa-var-user-md: "\f0f0"; |
||||
$fa-var-user-o: "\f2c0"; |
||||
$fa-var-user-plus: "\f234"; |
||||
$fa-var-user-secret: "\f21b"; |
||||
$fa-var-user-times: "\f235"; |
||||
$fa-var-users: "\f0c0"; |
||||
$fa-var-vcard: "\f2bb"; |
||||
$fa-var-vcard-o: "\f2bc"; |
||||
$fa-var-venus: "\f221"; |
||||
$fa-var-venus-double: "\f226"; |
||||
$fa-var-venus-mars: "\f228"; |
||||
$fa-var-viacoin: "\f237"; |
||||
$fa-var-viadeo: "\f2a9"; |
||||
$fa-var-viadeo-square: "\f2aa"; |
||||
$fa-var-video-camera: "\f03d"; |
||||
$fa-var-vimeo: "\f27d"; |
||||
$fa-var-vimeo-square: "\f194"; |
||||
$fa-var-vine: "\f1ca"; |
||||
$fa-var-vk: "\f189"; |
||||
$fa-var-volume-control-phone: "\f2a0"; |
||||
$fa-var-volume-down: "\f027"; |
||||
$fa-var-volume-off: "\f026"; |
||||
$fa-var-volume-up: "\f028"; |
||||
$fa-var-warning: "\f071"; |
||||
$fa-var-wechat: "\f1d7"; |
||||
$fa-var-weibo: "\f18a"; |
||||
$fa-var-weixin: "\f1d7"; |
||||
$fa-var-whatsapp: "\f232"; |
||||
$fa-var-wheelchair: "\f193"; |
||||
$fa-var-wheelchair-alt: "\f29b"; |
||||
$fa-var-wifi: "\f1eb"; |
||||
$fa-var-wikipedia-w: "\f266"; |
||||
$fa-var-window-close: "\f2d3"; |
||||
$fa-var-window-close-o: "\f2d4"; |
||||
$fa-var-window-maximize: "\f2d0"; |
||||
$fa-var-window-minimize: "\f2d1"; |
||||
$fa-var-window-restore: "\f2d2"; |
||||
$fa-var-windows: "\f17a"; |
||||
$fa-var-won: "\f159"; |
||||
$fa-var-wordpress: "\f19a"; |
||||
$fa-var-wpbeginner: "\f297"; |
||||
$fa-var-wpexplorer: "\f2de"; |
||||
$fa-var-wpforms: "\f298"; |
||||
$fa-var-wrench: "\f0ad"; |
||||
$fa-var-xing: "\f168"; |
||||
$fa-var-xing-square: "\f169"; |
||||
$fa-var-y-combinator: "\f23b"; |
||||
$fa-var-y-combinator-square: "\f1d4"; |
||||
$fa-var-yahoo: "\f19e"; |
||||
$fa-var-yc: "\f23b"; |
||||
$fa-var-yc-square: "\f1d4"; |
||||
$fa-var-yelp: "\f1e9"; |
||||
$fa-var-yen: "\f157"; |
||||
$fa-var-yoast: "\f2b1"; |
||||
$fa-var-youtube: "\f167"; |
||||
$fa-var-youtube-play: "\f16a"; |
||||
$fa-var-youtube-square: "\f166"; |
||||
|
@ -0,0 +1,18 @@ |
||||
/*! |
||||
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome |
||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) |
||||
*/ |
||||
|
||||
@import "variables"; |
||||
@import "mixins"; |
||||
@import "path"; |
||||
@import "core"; |
||||
@import "larger"; |
||||
@import "fixed-width"; |
||||
@import "list"; |
||||
@import "bordered-pulled"; |
||||
@import "animated"; |
||||
@import "rotated-flipped"; |
||||
@import "stacked"; |
||||
@import "icons"; |
||||
@import "screen-reader"; |
@ -0,0 +1,897 @@ |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<title>PE1RXF APRS server</title> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<link rel="stylesheet" href="css/styles.css"> |
||||
<link rel="stylesheet" href="css/popup.css"> |
||||
<link rel="stylesheet" href="css/font-awesome.min.css"> |
||||
|
||||
</head> |
||||
<body> |
||||
|
||||
<?php
|
||||
|
||||
// Prevents a repost when the user refreshes the page. |
||||
// Also it handles the post itself. |
||||
session_start(); |
||||
|
||||
if(count($_POST) > 0) { |
||||
// figure out which form was entered |
||||
if ($_POST['ax0_message_text']) { |
||||
$_SESSION['ax0_message_text'] = $_POST['ax0_message_text']; |
||||
$_SESSION['ax0_message_path'] = $_POST['ax0_message_path']; |
||||
$_SESSION['ax0_message_destination'] = $_POST['ax0_message_destination']; |
||||
|
||||
} |
||||
if ($_POST['ax1_message_text']) { |
||||
$_SESSION['ax1_message_text'] = $_POST['ax1_message_text']; |
||||
$_SESSION['ax1_message_path'] = $_POST['ax1_message_path']; |
||||
$_SESSION['ax1_message_destination'] = $_POST['ax1_message_destination']; |
||||
|
||||
} |
||||
|
||||
header("HTTP/1.1 303 See Other"); |
||||
header("Location: http://$_SERVER[HTTP_HOST]/send_message.php"); |
||||
die(); |
||||
} |
||||
else { |
||||
|
||||
if (isset($_SESSION['ax0_message_text'])){ |
||||
$ax0_message_text = $_SESSION['ax0_message_text']; |
||||
$ax0_message_path = $_SESSION['ax0_message_path']; |
||||
$ax0_message_destination = $_SESSION['ax0_message_destination']; |
||||
|
||||
//echo "Send ax0: $ax0_message_text, $ax0_message_path, $ax0_message_destination"; |
||||
//$ax0_message_destination = str_pad($ax0_message_destination, 9, " "); |
||||
//echo "PE1RXF-1>APRX29,$ax0_message_path::$ax0_message_destination:$ax0_message_text"; |
||||
|
||||
# Send message. NOTE: send_message.sh should be executable by www-data. Also, the ax0 transmit directory should be writable by www-data |
||||
if ($ax0_message_path == "none") |
||||
$execuatable_string = sprintf("/home/marcel/ham/aprs_utils/send_message.sh -i ax0 -c \"%s\" -m \"%s\"", $ax0_message_destination, $ax0_message_text); |
||||
else |
||||
$execuatable_string = sprintf("/home/marcel/ham/aprs_utils/send_message.sh -i ax0 -c \"%s\" -p \"%s\" -m \"%s\"", $ax0_message_destination, $ax0_message_path, $ax0_message_text); |
||||
//$execuatable_string = sprintf("%'.9d\n", 123); |
||||
//echo $execuatable_string; |
||||
exec("$execuatable_string"); |
||||
|
||||
# Wait for the changes to take effect |
||||
sleep(1); |
||||
} |
||||
|
||||
else if (isset($_SESSION['ax1_message_text'])){ |
||||
$ax1_message_text = $_SESSION['ax1_message_text']; |
||||
$ax1_message_path = $_SESSION['ax1_message_path']; |
||||
$ax1_message_destination = $_SESSION['ax1_message_destination']; |
||||
|
||||
//echo "Send ax1: $ax1_message_text, $ax1_message_path, $ax1_message_destination"; |
||||
# Send message. NOTE: send_message.sh should be executable by www-data. Also, the ax0 transmit directory should be writable by www-data |
||||
if ($ax1_message_path == "none") |
||||
$execuatable_string = sprintf("/home/marcel/ham/aprs_utils/send_message.sh -i ax1 -c \"%s\" -m \"%s\"", $ax1_message_destination, $ax1_message_text); |
||||
else |
||||
$execuatable_string = sprintf("/home/marcel/ham/aprs_utils/send_message.sh -i ax1 -c \"%s\" -p \"%s\" -m \"%s\"", $ax1_message_destination, $ax1_message_path, $ax1_message_text); |
||||
|
||||
//$execuatable_string = sprintf("/home/marcel/ham/aprs_utils/send_message.sh -i ax1 -c \"%s\" -p \"%s\" -m \"%s\"", $ax1_message_destination, $ax1_message_path, $ax1_message_text); |
||||
//echo exec("/home/marcel/ham/aprs_utils/send_message.sh -i ax1 -c $ax1_message_destination -p $ax1_message_path -m $ax1_message_text"); |
||||
exec("$execuatable_string"); |
||||
|
||||
# Wait for the changes to take effect |
||||
sleep(1); |
||||
} |
||||
|
||||
session_unset(); |
||||
session_destroy(); |
||||
|
||||
} |
||||
// END: Prevents a repost when the user refreshes the page. |
||||
|
||||
# Reads configuration file from pe1rxf-aprs-server directory, makes changes if necesary |
||||
# and writes the newly constructed file to a temporary config-file. It does not overwrite |
||||
# the original file, because user www-data can only read the program directory, not write to it. |
||||
# It's a safety thing... |
||||
# The main loop of pe1rxf-aprs-server than copies it to the program directory and removes the temporary file. |
||||
function change_parameter_value($parameter, $value) |
||||
{ |
||||
$config_file = '/var/www/html/config/test.cfg'; |
||||
$tmp_config_file = '/var/www/html/config/test.cfg.tmp'; |
||||
$reading = fopen($config_file, 'r'); |
||||
$writing = fopen($tmp_config_file, 'w'); |
||||
|
||||
$replaced = false; |
||||
while (!feof($reading)) { |
||||
|
||||
$line = fgets($reading); |
||||
if (stristr($line,$parameter)) { |
||||
$line = "$parameter=$value\n"; |
||||
//echo "New value: ", "$line"; |
||||
$replaced = true; |
||||
} |
||||
fputs($writing, $line); |
||||
} |
||||
fclose($reading); fclose($writing); |
||||
|
||||
// might as well not overwrite the file if we didn't replace anything |
||||
if ($replaced) |
||||
{ |
||||
shell_exec("mv $tmp_config_file $config_file"); |
||||
} else { |
||||
shell_exec("rm $tmp_config_file"); |
||||
} |
||||
} |
||||
|
||||
# Saves setting for given form: ax0 or ax1 |
||||
# $a = beacon_time |
||||
# $b = beacon_destination |
||||
# $c = beacon_path |
||||
# $d = beacon_position |
||||
# $e = beacon_comment |
||||
# $f = beacon_file |
||||
# $g = transmit_directory |
||||
function save_settings($form, $a, $b=0, $c=0, $d=0, $e=0, $f=0, $g=0) |
||||
{ |
||||
# Copy original config file to temporary place on web server. |
||||
# From here we can change the values |
||||
$original_config_file = '/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg'; |
||||
$destination_config_file = '/var/www/html/config/test.cfg'; |
||||
$newly_made_config_file = '/var/www/html/config/pe1rxf-aprs-server.cfg'; |
||||
|
||||
$fileCopied = copy("$original_config_file", "$destination_config_file"); |
||||
if($fileCopied) { |
||||
//echo "# $a, $b, $c, $d, $e, $f, $g"; |
||||
if ($form == "ax0" ) { |
||||
change_parameter_value("ax0_beacon_time", $a); |
||||
if ($c) change_parameter_value("ax0_beacon_path", $c); |
||||
if ($e) change_parameter_value("ax0_beacon_comment", $e); |
||||
} |
||||
else if ($form == "ax1" ) { |
||||
change_parameter_value("ax1_beacon_time", $a); |
||||
if ($c) change_parameter_value("ax1_beacon_path", $c); |
||||
if ($e) change_parameter_value("ax1_beacon_comment", $e); |
||||
} |
||||
|
||||
# now make new file with new configuration for the main loop to find. |
||||
shell_exec("cp $destination_config_file $newly_made_config_file"); |
||||
# and remove working file: |
||||
shell_exec("rm $destination_config_file"); |
||||
|
||||
} else{ |
||||
#echo "Error"; |
||||
} |
||||
} |
||||
|
||||
# Reads configuration file from pe1rxf-aprs-server directory. |
||||
# Search this file for given paramter and returns its value. |
||||
function search_parameter_in_config_file($parameter) |
||||
{ |
||||
$config_file = '/home/marcel/ham/aprs_utils/pe1rxf-aprs-server.cfg'; |
||||
$reading = fopen($config_file, 'r'); |
||||
while (!feof($reading)) { |
||||
|
||||
$line = fgets($reading); |
||||
if ( strstr($line,$parameter) ) { |
||||
|
||||
$line = substr( $line, strlen($parameter)+1 ); |
||||
|
||||
# Found match. Stop further search. |
||||
fclose($reading); |
||||
return rtrim($line); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
$ax0_name = search_parameter_in_config_file("ax0_name"); |
||||
$ax0_frequency = search_parameter_in_config_file("ax0_frequency"); |
||||
|
||||
$ax0_message1_id = search_parameter_in_config_file("ax0_message1_id"); |
||||
$ax0_message2_id = search_parameter_in_config_file("ax0_message2_id"); |
||||
$ax0_message3_id = search_parameter_in_config_file("ax0_message3_id"); |
||||
$ax0_message4_id = search_parameter_in_config_file("ax0_message4_id"); |
||||
|
||||
$ax0_message1_text = search_parameter_in_config_file("ax0_message1_text"); |
||||
$ax0_message2_text = search_parameter_in_config_file("ax0_message2_text"); |
||||
$ax0_message3_text = search_parameter_in_config_file("ax0_message3_text"); |
||||
$ax0_message4_text = search_parameter_in_config_file("ax0_message4_text"); |
||||
|
||||
$ax0_message1_destination = search_parameter_in_config_file("ax0_message1_destination"); |
||||
$ax0_message2_destination = search_parameter_in_config_file("ax0_message2_destination"); |
||||
$ax0_message3_destination = search_parameter_in_config_file("ax0_message3_destination"); |
||||
$ax0_message4_destination = search_parameter_in_config_file("ax0_message4_destination"); |
||||
|
||||
$ax0_message1_path = search_parameter_in_config_file("ax0_message1_path"); |
||||
$ax0_message2_path = search_parameter_in_config_file("ax0_message2_path"); |
||||
$ax0_message3_path = search_parameter_in_config_file("ax0_message3_path"); |
||||
$ax0_message4_path = search_parameter_in_config_file("ax0_message4_path"); |
||||
|
||||
$ax1_name = search_parameter_in_config_file("ax1_name"); |
||||
$ax1_frequency = search_parameter_in_config_file("ax1_frequency"); |
||||
|
||||
$ax1_message1_id = search_parameter_in_config_file("ax1_message1_id"); |
||||
$ax1_message2_id = search_parameter_in_config_file("ax1_message2_id"); |
||||
$ax1_message3_id = search_parameter_in_config_file("ax1_message3_id"); |
||||
$ax1_message4_id = search_parameter_in_config_file("ax1_message4_id"); |
||||
|
||||
$ax1_message1_text = search_parameter_in_config_file("ax1_message1_text"); |
||||
$ax1_message2_text = search_parameter_in_config_file("ax1_message2_text"); |
||||
$ax1_message3_text = search_parameter_in_config_file("ax1_message3_text"); |
||||
$ax1_message4_text = search_parameter_in_config_file("ax1_message4_text"); |
||||
|
||||
$ax1_message1_destination = search_parameter_in_config_file("ax1_message1_destination"); |
||||
$ax1_message2_destination = search_parameter_in_config_file("ax1_message2_destination"); |
||||
$ax1_message3_destination = search_parameter_in_config_file("ax1_message3_destination"); |
||||
$ax1_message4_destination = search_parameter_in_config_file("ax1_message4_destination"); |
||||
|
||||
$ax1_message1_path = search_parameter_in_config_file("ax1_message1_path"); |
||||
$ax1_message2_path = search_parameter_in_config_file("ax1_message2_path"); |
||||
$ax1_message3_path = search_parameter_in_config_file("ax1_message3_path"); |
||||
$ax1_message4_path = search_parameter_in_config_file("ax1_message4_path"); |
||||
|
||||
?> |
||||
|
||||
<div class="header"> |
||||
<a href="index.php" > |
||||
<h1><i class="fa fa-home" aria-hidden="true"></i> PE1RXF APRS server</h1> |
||||
</a> |
||||
</div> |
||||
|
||||
<div class="row"> |
||||
<div class="col-3 col-s-3 menu"> |
||||
<ul> |
||||
<li><h3><?php echo $ax0_name ?> (<?php echo $ax0_frequency ?>)</h3></li>
|
||||
<li onclick="openForm_ax0_message0()">Send new message</li> |
||||
<li><b>Predefined messages:</b></li> |
||||
<li onclick="openForm_ax0_message1()"><b><?php echo $ax0_message1_id; ?></b></li>
|
||||
<li onclick="openForm_ax0_message2()"><b><?php echo $ax0_message2_id; ?></b></li>
|
||||
<li onclick="openForm_ax0_message3()"><b><?php echo $ax0_message3_id; ?></b></li>
|
||||
<li onclick="openForm_ax0_message4()"><b><?php echo $ax0_message4_id; ?></b></li>
|
||||
</ul> |
||||
</div> |
||||
|
||||
<div class="col-6 col-s-9" id="main_page"> |
||||
|
||||
<div class="col-6 col-s-12"> |
||||
<img src="images/mail-out.svg" style="cursor:pointer;" onclick="show_send_messages()"/></a> |
||||
<h1>Send messages</h1> |
||||
</div> |
||||
|
||||
<div class="col-6 col-s-12"> |
||||
<img src="images/mail-in.svg" style="cursor:pointer;" onclick="show_received_messages()" /> |
||||
<h1>Received messages</h1> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<div class="col-6 col-s-9" id="send_messages" style="display:none"> |
||||
|
||||
<h1>Send messages</h1> |
||||
|
||||
<h2 align="left"><?php echo $ax0_name ?> (<?php echo $ax0_frequency ?>)</h2>
|
||||
<h3 align="left"> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_send_messages.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax0") { |
||||
echo $csv[$i][2]; |
||||
echo ": "; |
||||
echo $csv[$i][4]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
|
||||
<h2 align="left"><?php echo $ax1_name ?> (<?php echo $ax1_frequency ?>)</h2>
|
||||
<h3 align="left"> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_send_messages.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax1") { |
||||
echo $csv[$i][2]; |
||||
echo ": "; |
||||
echo $csv[$i][4]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
|
||||
<a href=""><h1 style="color:Black;" onclick="show_main_page()"><i class="fa fa-arrow-left" aria-hidden="true"></i> Back</h1></a> |
||||
</div> |
||||
|
||||
<div class="col-6 col-s-9" id="received_messages" style="display:none"> |
||||
|
||||
<h1>Received messages</h1> |
||||
|
||||
<h2 align="left"><?php echo $ax0_name ?> (<?php echo $ax0_frequency ?>)</h2>
|
||||
<h3 align="left"> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_received_messages.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax0") { |
||||
echo $csv[$i][2]; |
||||
echo ": "; |
||||
echo $csv[$i][4]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
|
||||
<h2 align="left"><?php echo $ax1_name ?> (<?php echo $ax1_frequency ?>)</h2>
|
||||
<h3 align="left"> |
||||
<?php |
||||
$csv = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/aprs_received_messages.log")); |
||||
|
||||
for ($i = 0; $i < count($csv); $i++) { |
||||
if ($csv[$i][1] == "ax1") { |
||||
echo $csv[$i][2]; |
||||
echo ": "; |
||||
echo $csv[$i][4]; |
||||
echo "<br>"; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</h3> |
||||
|
||||
<a href=""><h1 style="color:Black;" onclick="show_main_page()"><i class="fa fa-arrow-left" aria-hidden="true"></i> Back</h1></a> |
||||
</div> |
||||
|
||||
<div class="col-3 col-s-12 menu"> |
||||
<ul> |
||||
<li><h3><?php echo $ax1_name ?> (<?php echo $ax1_frequency ?>)</h3></li>
|
||||
<li onclick="openForm_ax1_message0()">Send new message</li> |
||||
<li><b>Predefined messages:</b></li> |
||||
<li onclick="openForm_ax1_message1()"><b><?php echo $ax1_message1_id; ?></b></li>
|
||||
<li onclick="openForm_ax1_message2()"><b><?php echo $ax1_message2_id; ?></b></li>
|
||||
<li onclick="openForm_ax1_message3()"><b><?php echo $ax1_message3_id; ?></b></li>
|
||||
<li onclick="openForm_ax1_message4()"><b><?php echo $ax1_message4_id; ?></b></li>
|
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax0_message0"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax0_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax0_message_text" required> |
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="pwd" placeholder="Destination" name="ax0_message_destination" required> |
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax0_message_path" value="none" checked> |
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax0_message_path" value="WIDE2-1" <?php if ($ax0_message0_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax0_message_path" value="WIDE2-2" <?php if ($ax0_message0_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax0_message_path" value="WIDE3-3" <?php if ($ax0_message0_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax0_message0"><button type="submit" class="btn" onclick="SubmitClicked_ax0_message0()">Submit</button></div> |
||||
<div id="submit_done_ax0_message0" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax0_message0"><button type="button" class="btn cancel" onclick="closeForm_ax0_message0()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax0_message1"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax0_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax0_message_text" value="<?php echo $ax0_message1_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax0_message_destination" value="<?php echo $ax0_message1_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax0_message_path" value="none" <?php if ($ax0_message1_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax0_message_path" value="WIDE2-1" <?php if ($ax0_message1_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax0_message_path" value="WIDE2-2" <?php if ($ax0_message1_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax0_message_path" value="WIDE3-3" <?php if ($ax0_message1_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax0_message1"><button type="submit" class="btn" onclick="SubmitClicked_ax0_message1()">Submit</button></div> |
||||
<div id="submit_done_ax0_message1" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax0_message1"><button type="button" class="btn cancel" onclick="closeForm_ax0_message1()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax0_message2"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax0_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax0_message_text" value="<?php echo $ax0_message2_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax0_message_destination" value="<?php echo $ax0_message2_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax0_message_path" value="none" <?php if ($ax0_message2_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax0_message_path" value="WIDE2-1" <?php if ($ax0_message2_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax0_message_path" value="WIDE2-2" <?php if ($ax0_message2_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax0_message_path" value="WIDE3-3" <?php if ($ax0_message2_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax0_message2"><button type="submit" class="btn" onclick="SubmitClicked_ax0_message2()">Submit</button></div> |
||||
<div id="submit_done_ax0_message2" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax0_message2"><button type="button" class="btn cancel" onclick="closeForm_ax0_message2()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax0_message3"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax0_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax0_message_text" value="<?php echo $ax0_message3_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax0_message_destination" value="<?php echo $ax0_message3_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax0_message_path" value="none" <?php if ($ax0_message3_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax0_message_path" value="WIDE2-1" <?php if ($ax0_message3_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax0_message_path" value="WIDE2-2" <?php if ($ax0_message3_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax0_message_path" value="WIDE3-3" <?php if ($ax0_message3_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax0_message3"><button type="submit" class="btn" onclick="SubmitClicked_ax0_message3()">Submit</button></div> |
||||
<div id="submit_done_ax0_message3" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax0_message3"><button type="button" class="btn cancel" onclick="closeForm_ax0_message3()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax0_message4"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax0_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax0_message_text" value="<?php echo $ax0_message4_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax0_message_destination" value="<?php echo $ax0_message4_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax0_message_path" value="none" <?php if ($ax0_message4_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax0_message_path" value="WIDE2-1" <?php if ($ax0_message4_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax0_message_path" value="WIDE2-2" <?php if ($ax0_message4_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax0_message_path" value="WIDE3-3" <?php if ($ax0_message4_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax0_message4"><button type="submit" class="btn" onclick="SubmitClicked_ax0_message4()">Submit</button></div> |
||||
<div id="submit_done_ax0_message4" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax0_message4"><button type="button" class="btn cancel" onclick="closeForm_ax0_message4()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax1_message0"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax1_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax1_message_text" required> |
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax1_message_destination" required> |
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax1_message_path" value="none" checked> |
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax1_message_path" value="WIDE2-1" <?php if ($ax1_message0_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax1_message_path" value="WIDE2-2" <?php if ($ax1_message0_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax1_message_path" value="WIDE3-3" <?php if ($ax1_message0_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax1_message0"><button type="submit" class="btn" onclick="SubmitClicked_ax1_message0()">Submit</button></div> |
||||
<div id="submit_done_ax1_message0" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax1_message0"><button type="button" class="btn cancel" onclick="closeForm_ax1_message0()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax1_message1"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax1_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax1_message_text" value="<?php echo $ax1_message1_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax1_message_destination" value="<?php echo $ax1_message1_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax1_message_path" value="none" <?php if ($ax1_message1_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax1_message_path" value="WIDE2-1" <?php if ($ax1_message1_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax1_message_path" value="WIDE2-2" <?php if ($ax1_message1_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax1_message_path" value="WIDE3-3" <?php if ($ax1_message1_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax1_message1"><button type="submit" class="btn" onclick="SubmitClicked_ax1_message1()">Submit</button></div> |
||||
<div id="submit_done_ax1_message1" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax1_message1"><button type="button" class="btn cancel" onclick="closeForm_ax1_message1()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax1_message2"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax1_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax1_message_text" value="<?php echo $ax1_message2_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax1_message_destination" value="<?php echo $ax1_message2_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax1_message_path" value="none" <?php if ($ax1_message2_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax1_message_path" value="WIDE2-1" <?php if ($ax1_message2_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax1_message_path" value="WIDE2-2" <?php if ($ax1_message2_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax1_message_path" value="WIDE3-3" <?php if ($ax1_message2_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax1"><button type="submit" class="btn" onclick="SubmitClicked_ax1_message2()">Submit</button></div> |
||||
<div id="submit_done_ax1" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax1"><button type="button" class="btn cancel" onclick="closeForm_ax1_message2()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax1_message3"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax1_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax1_message_text" value="<?php echo $ax1_message3_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax1_message_destination" value="<?php echo $ax1_message3_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax1_message_path" value="none" <?php if ($ax1_message3_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax1_message_path" value="WIDE2-1" <?php if ($ax1_message3_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax1_message_path" value="WIDE2-2" <?php if ($ax1_message3_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax1_message_path" value="WIDE3-3" <?php if ($ax1_message3_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax1"><button type="submit" class="btn" onclick="SubmitClicked_ax1_message3()">Submit</button></div> |
||||
<div id="submit_done_ax1" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax1"><button type="button" class="btn cancel" onclick="closeForm_ax1_message3()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="loginPopup"> |
||||
<div class="formPopup" id="popupForm_ax1_message4"> |
||||
<form action="" class="formContainer" method="post"> |
||||
<h2>Message <?php echo $ax1_frequency ?></h2>
|
||||
|
||||
<label for="email"> |
||||
<strong>Message</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Message" name="ax1_message_text" value="<?php echo $ax1_message4_text; ?>" required>
|
||||
<label for="psw"> |
||||
<strong>Destination</strong> |
||||
</label> |
||||
<input type="text" id="email" placeholder="Destination" name="ax1_message_destination" value="<?php echo $ax1_message4_destination; ?>" required>
|
||||
|
||||
<label for="path"> |
||||
<strong>Path<br></strong> |
||||
</label> |
||||
<div class="radioLeft"> |
||||
<input type="radio" class="formContainer radio" id="path_none" name="ax1_message_path" value="none" <?php if ($ax1_message4_path == "none") echo "checked"; ?>>
|
||||
<label for="path_none">none</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide21" name="ax1_message_path" value="WIDE2-1" <?php if ($ax1_message4_path == "WIDE2-1") echo "checked"; ?> >
|
||||
<label for="path_wide21">WIDE2-1</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide22" name="ax1_message_path" value="WIDE2-2" <?php if ($ax1_message4_path == "WIDE2-2") echo "checked"; ?> >
|
||||
<label for="path_wide22">WIDE2-2</label><br> |
||||
<input type="radio" class="formContainer radio" id="path_wide33" name="ax1_message_path" value="WIDE3-3" <?php if ($ax1_message4_path == "WIDE3-3") echo "checked"; ?> >
|
||||
<label for="path_wide33">WIDE3-3</label><br> |
||||
</div> |
||||
|
||||
|
||||
<div id="submit_ax1"><button type="submit" class="btn" onclick="SubmitClicked_ax1_message4()">Submit</button></div> |
||||
<div id="submit_done_ax1" style="display:none;"><button type="button" class="btn wait"><img src="images/preload.gif">Please wait...</button></div> |
||||
<div id="cancel_ax1"><button type="button" class="btn cancel" onclick="closeForm_ax1_message4()">Cancel</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="footer"> |
||||
<p>Open source hardware and software. Visit https://www.meezenest.nl/mees for more information.</p> |
||||
</div> |
||||
|
||||
<script> |
||||
function openForm_ax0_message0() { |
||||
document.getElementById("popupForm_ax0_message0").style.display = "block"; |
||||
} |
||||
function closeForm_ax0_message0() { |
||||
document.getElementById("popupForm_ax0_message0").style.display = "none"; |
||||
} |
||||
function openForm_ax0_message1() { |
||||
document.getElementById("popupForm_ax0_message1").style.display = "block"; |
||||
} |
||||
function closeForm_ax0_message1() { |
||||
document.getElementById("popupForm_ax0_message1").style.display = "none"; |
||||
} |
||||
function openForm_ax0_message2() { |
||||
document.getElementById("popupForm_ax0_message2").style.display = "block"; |
||||
} |
||||
function closeForm_ax0_message2() { |
||||
document.getElementById("popupForm_ax0_message2").style.display = "none"; |
||||
} |
||||
function openForm_ax0_message3() { |
||||
document.getElementById("popupForm_ax0_message3").style.display = "block"; |
||||
} |
||||
function closeForm_ax0_message3() { |
||||
document.getElementById("popupForm_ax0_message3").style.display = "none"; |
||||
} |
||||
function openForm_ax0_message4() { |
||||
document.getElementById("popupForm_ax0_message4").style.display = "block"; |
||||
} |
||||
function closeForm_ax0_message4() { |
||||
document.getElementById("popupForm_ax0_message4").style.display = "none"; |
||||
} |
||||
|
||||
function openForm_ax1_message0() { |
||||
document.getElementById("popupForm_ax1_message0").style.display = "block"; |
||||
} |
||||
function closeForm_ax1_message0() { |
||||
document.getElementById("popupForm_ax1_message0").style.display = "none"; |
||||
} |
||||
function openForm_ax1_message1() { |
||||
document.getElementById("popupForm_ax1_message1").style.display = "block"; |
||||
} |
||||
function closeForm_ax1_message1() { |
||||
document.getElementById("popupForm_ax1_message1").style.display = "none"; |
||||
} |
||||
function openForm_ax1_message2() { |
||||
document.getElementById("popupForm_ax1_message2").style.display = "block"; |
||||
} |
||||
function closeForm_ax1_message2() { |
||||
document.getElementById("popupForm_ax1_message2").style.display = "none"; |
||||
} |
||||
function openForm_ax1_message3() { |
||||
document.getElementById("popupForm_ax1_message3").style.display = "block"; |
||||
} |
||||
function closeForm_ax1_message3() { |
||||
document.getElementById("popupForm_ax1_message3").style.display = "none"; |
||||
} |
||||
function openForm_ax1_message4() { |
||||
document.getElementById("popupForm_ax1_message4").style.display = "block"; |
||||
} |
||||
function closeForm_ax1_message4() { |
||||
document.getElementById("popupForm_ax1_message4").style.display = "none"; |
||||
} |
||||
|
||||
function show_send_messages() { |
||||
document.getElementById("main_page").style.display = "none"; |
||||
document.getElementById("received_messages").style.display = "none"; |
||||
document.getElementById("send_messages").style.display = "block"; |
||||
} |
||||
function show_received_messages() { |
||||
document.getElementById("main_page").style.display = "none"; |
||||
document.getElementById("received_messages").style.display = "block"; |
||||
document.getElementById("send_messages").style.display = "none"; |
||||
} |
||||
|
||||
function show_main_page() { |
||||
document.getElementById("main_page").style.display = "block"; |
||||
document.getElementById("received_messages").style.display = "none"; |
||||
document.getElementById("send_messages").style.display = "none"; |
||||
} |
||||
|
||||
|
||||
/* |
||||
Replacing Submit Button with 'Loading' Image |
||||
Version 2.0 |
||||
December 18, 2012 |
||||
|
||||
Will Bontrager Software, LLC |
||||
https://www.willmaster.com/ |
||||
Copyright 2012 Will Bontrager Software, LLC |
||||
|
||||
This software is provided "AS IS," without |
||||
any warranty of any kind, without even any |
||||
implied warranty such as merchantability |
||||
or fitness for a particular purpose. |
||||
Will Bontrager Software, LLC grants |
||||
you a royalty free license to use or |
||||
modify this software provided this |
||||
notice appears on all copies. |
||||
*/ |
||||
function SubmitClicked_ax1_message0() |
||||
{ |
||||
document.getElementById("submit_ax1_message0").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax1_message0").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax1_message0").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
function SubmitClicked_ax1_message1() |
||||
{ |
||||
document.getElementById("submit_ax1_message1").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax1_message1").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax1_message1").style.display = "none"; // to display |
||||
return true; |
||||
}function SubmitClicked_ax1_message2() |
||||
{ |
||||
document.getElementById("submit_ax1_message2").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax1_message2").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax1_message2").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
function SubmitClicked_ax1_message3() |
||||
{ |
||||
document.getElementById("submit_ax1_message3").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax1_message3").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax1_message3").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
function SubmitClicked_ax1_message4() |
||||
{ |
||||
document.getElementById("submit_ax1_message4").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax1_message4").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax1_message4").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
|
||||
function SubmitClicked_ax0_message0() |
||||
{ |
||||
document.getElementById("submit_ax0_message0").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax0_message0").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax0_message0").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
function SubmitClicked_ax0_message1() |
||||
{ |
||||
document.getElementById("submit_ax0_message1").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax0_message1").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax0_message1").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
function SubmitClicked_ax0_message2() |
||||
{ |
||||
document.getElementById("submit_ax0_message2").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax0_message2").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax0_message2").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
function SubmitClicked_ax0_message3() |
||||
{ |
||||
document.getElementById("submit_ax0_message3").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax0_message3").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax0_message3").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
function SubmitClicked_ax0_message4() |
||||
{ |
||||
document.getElementById("submit_ax0_message4").style.display = "none"; // to undisplay |
||||
document.getElementById("submit_done_ax0_message4").style.display = "block"; // to display |
||||
document.getElementById("cancel_ax0_message4").style.display = "none"; // to display |
||||
return true; |
||||
} |
||||
</script> |
||||
</body> |
||||
</html> |
||||
|
||||
|
@ -0,0 +1,72 @@ |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<title>PE1RXF APRS server</title> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<meta http-equiv="refresh" content="600"> |
||||
|
||||
<link rel="stylesheet" href="css/styles.css"> |
||||
<link rel="stylesheet" href="css/popup.css"> |
||||
<link rel="stylesheet" href="css/font-awesome.min.css"> |
||||
</head> |
||||
<body> |
||||
|
||||
<?php |
||||
#Data format: |
||||
#0,1,2,3,4,5,6,7,8,9 |
||||
|
||||
# 0 = temperature outside |
||||
# 1 = humidity outside |
||||
# 2 = temperature small greenhouse |
||||
# 3 = humidity small greenhouse |
||||
# 4 = soil moisture small greenhouse |
||||
# 5 = soil moisture small greenhouse |
||||
# 6 = temperature large greenhouse |
||||
# 7 = humidity large greenhouse |
||||
# 8 = soil moisture large greenhouse |
||||
# 9 = soil moisture large greenhouse |
||||
$telemetry_data = array_map('str_getcsv', file("/home/marcel/ham/aprs_utils/aprs_log/latest_telemetry_PE1RXF-7.dat")); |
||||
?> |
||||
<div class="header"> |
||||
<a href="index.php" > |
||||
<h1><i class="fa fa-home" aria-hidden="true"></i> PE1RXF APRS TELEMETRY</h1> |
||||
</a> |
||||
</div> |
||||
|
||||
<div class="row"> |
||||
<div class="col-3 col-s-3 menu"> |
||||
<ul> |
||||
<li><h3>Temperature buiten: <?php echo $telemetry_data[0][0] ?>° C</h3></li>
|
||||
<li><h3>Temperature kleine kas: <?php echo $telemetry_data[0][2] ?>° C</h3></li>
|
||||
<li><h3>Temperature grote kas: <?php echo $telemetry_data[0][6] ?>° C</h3></li>
|
||||
</ul> |
||||
</div> |
||||
|
||||
<div class="col-6 col-s-9" id="main_page"> |
||||
|
||||
<img src="telemetry/temperature_graph.png" class="large"/></a> |
||||
<img src="telemetry/humidity_graph.png" class="large"/></a> |
||||
|
||||
<img src="telemetry/minmax_temperature_outside.png" class="large"/></a> |
||||
<img src="telemetry/minmax_temperature_small_greenhouse.png" class="large"/></a> |
||||
<img src="telemetry/minmax_temperature_large_greenhouse.png" class="large"/></a> |
||||
|
||||
<img src="telemetry/minmax_humidity_outside.png" class="large"/></a> |
||||
<img src="telemetry/minmax_humidity_small_greenhouse.png" class="large"/></a> |
||||
<img src="telemetry/minmax_humidity_large_greenhouse.png" class="large"/></a> |
||||
|
||||
</div> |
||||
|
||||
<div class="col-3 col-s-12 menu"> |
||||
<ul> |
||||
<li><h3>Luchtvochtigheid buiten: <?php echo $telemetry_data[0][1] ?> %</h3></li>
|
||||
<li><h3>Luchtvochtigheid kleine kas: <?php echo $telemetry_data[0][3] ?> %</h3></li>
|
||||
<li><h3>Luchtvochtigheid grote kas: <?php echo $telemetry_data[0][7] ?> %</h3></li>
|
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
</body> |
||||
</html> |
||||
|
||||
|
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 9.0 KiB |