First commit

stable
Hypolite Petovan 4 years ago
commit 201edf2e4a

@ -0,0 +1,14 @@
# How to Contribute
## Pull Requests
1. Fork the repository
2. Create a new branch for each feature or improvement
3. Send a pull request from each feature branch to the master branch
It is very important to separate new features or improvements into separate feature branches, and to send a
pull request for each branch. This allows us to review and pull in new features or improvements individually.
## Style Guide
All pull requests must adhere to the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md).

5
.gitignore vendored

@ -0,0 +1,5 @@
src/settings.php
vendor/
/logs/*
!/logs/README.md
cache/

@ -0,0 +1,2 @@
# Friendica Global Directory

@ -0,0 +1 @@
2.0-dev

@ -0,0 +1,10 @@
#!/usr/bin/env sh
dir=$(cd "${0%[/\\]*}" > /dev/null; pwd)
if [ -d /proc/cygdrive ] && [[ $(which php) == $(readlink -n /proc/cygdrive)/* ]]; then
# We are in Cgywin using Windows php, so the path must be translated
dir=$(cygpath -m "$dir");
fi
"${dir}/console.php" "$@"

@ -0,0 +1,4 @@
@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/console.php
php "%BIN_TARGET%" %*

@ -0,0 +1,19 @@
#!/usr/bin/env php
<?php
ini_set('error_log', __DIR__ . '/../logs/console.log');
ini_set('log_errors', true);
require_once __DIR__ . '/../vendor/autoload.php';
$settings = require __DIR__ . '/../src/settings.php';
$settings['settings']['logger']['path'] = 'php://stdout';
$settings['settings']['logger']['level'] = \Monolog\Logger::INFO;
$settings['settings']['logger']['formatter'] = 'console';
$container = new Slim\Container($settings);
require __DIR__ . '/../src/dependencies.php';
(new \Friendica\Directory\Controllers\Console($container, $argv))->execute();

@ -0,0 +1,10 @@
#!/usr/bin/env sh
dir=$(cd "${0%[/\\]*}" > /dev/null; pwd)
if [ -d /proc/cygdrive ] && [[ $(which php) == $(readlink -n /proc/cygdrive)/* ]]; then
# We are in Cgywin using Windows php, so the path must be translated
dir=$(cygpath -m "$dir");
fi
"${dir}/cron.php" "$@"

@ -0,0 +1,4 @@
@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/cron.php
php "%BIN_TARGET%" %*

@ -0,0 +1,23 @@
#!/usr/bin/env php
<?php
ini_set('error_log', __DIR__ . '/../logs/cron.log');
ini_set('log_errors', true);
ini_set('display_errors', false);
require_once __DIR__ . '/../vendor/autoload.php';
$settings = require __DIR__ . '/../src/settings.php';
$container = new Slim\Container($settings);
require __DIR__ . '/../src/dependencies.php';
(new \Friendica\Directory\Controllers\Cron(
$container->get('atlas'),
$container->get('\Friendica\Directory\Pollers\Profile'),
$container->get('\Friendica\Directory\Pollers\Server'),
$container->get('\Friendica\Directory\Pollers\Directory'),
$container->get('logger')
))->execute();

@ -0,0 +1,70 @@
{
"name": "friendica/friendica-directory",
"description": "Standalone global public directory for Friendica",
"type": "project",
"keywords": ["friendica", "directory"],
"license": "AGPL-3.0+",
"authors": [
{
"name": "Hypolite Petovan",
"email": "hypolite@mrpetovan.com"
}
],
"require": {
"php": ">=7.1.0",
"ext-curl": "*",
"ext-gd": "*",
"ext-json": "*",
"asika/simple-console": "^1.0",
"atlas/pdo": "^1.1",
"byjg/migration": "^2.1",
"fxp/composer-asset-plugin": "^1.4",
"masterminds/html5": "^2.3",
"monolog/monolog": "^1.17",
"mrpetovan/net_ping": "^1.0",
"sarahman/simple-filesystem-cache": "dev-master",
"seld/cli-prompt": "^1.0",
"slim/slim": "^3.1",
"slim/php-view": "^2.0",
"zendframework/zend-escaper": "^2.6",
"bower-asset/bootstrap.native": "^2.0",
"bower-asset/fontawesome": "^5.5",
"gofabian/negotiation-middleware": "^0.1.3"
},
"require-dev": {
"bower-asset/bootstrap": "^4.1",
"phpunit/phpunit": ">=4.8 < 6.0",
"vimeo/psalm": "^2.0",
"leafo/scssphp": "^0.7.7"
},
"autoload": {
"psr-4": {
"Friendica\\Directory\\": "src/classes/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"config": {
"process-timeout" : 0,
"autoloader-suffix": "FriendicaDirectory",
"optimize-autoloader": true,
"preferred-install": "dist",
"fxp-asset": {
"installer-paths": {
"npm-asset-library": "public/assets/vendor/",
"bower-asset-library": "public/assets/vendor/"
}
}
},
"scripts": {
"post-create-project-cmd" : [
"php bin/console.php install"
],
"post-install-cmd" : [
"php bin/console.php dbupdate"
]
}
}

4126
composer.lock generated

File diff suppressed because it is too large Load Diff

4
config/.gitignore vendored

@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

@ -0,0 +1,88 @@
# Friendica Directory Protocol
## Search
```
GET /search[/account_type]?q=...
Accept: application/json
```
Parameters:
- `account_type`: An arbitrary account type string. Currently supported are `all`, `people` and `forum`. Default is `all`.
- `q`: The search query.
Returns a JSON structure containing a paginated list profiles matching the search query and the optional account type.
Example:
```json
{
"query": "philosophy",
"page": 1,
"itemsperpage": 20,
"count": "13",
"profiles": [
{
"id": "2259",
"name": "Hyp🌧lite Pe☂ov🍃n (he/him)",
"username": "hypolite",
"addr": "hypolite@friendica.mrpetovan.com",
"account_type": "People",
"pdesc": "Subpar geek, french/english, science, games, feminism, jokes and anything in between. Avatar by @DearMsDear@mastodon.art",
"locality": "Brooklyn",
"region": "New York",
"country": "USA",
"profile_url": "https://friendica.mrpetovan.com/profile/hypolite",
"dfrn_request": "https://friendica.mrpetovan.com/dfrn_request/hypolite",
"photo": "https://friendica.mrpetovan.com/photo/27330388315ae4ed2b03e3c116980490-4.jpg?ts=1541567135",
"tags": "videogame gaming boardgame politics philosophy development programming php",
"last_activity": "2018-45"
},
...
]
}
```
## Profile submission
`GET /submit?url=...`
Parameters:
- `url`: a hexadecimal-encoded profile URL to be added to the directory.
The success of the operation is indicated by the HTTP response code.
## Synchronization
`GET /sync/pull/all`
Returns a JSON structure containing all the profiles displayed by the directory.
Example:
```json
{
now: 1541942034,
count: 7435,
results: [
"http://example.com/profile/test",
...
]
}
```
`GET /sync/pull/since/1541942034`
Returns a JSON structure containing profiles displayed by the directory that have been updated since the provided UNIX timestamp.
Example:
```json
{
now: 1541942160,
count: 2766,
results: [
"http://example.com/profile/test",
...
]
}
```

4
logs/.gitignore vendored

@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

@ -0,0 +1,7 @@
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="SlimSkeleton">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>

@ -0,0 +1,47 @@
<?xml version="1.0"?>
<psalm
totallyTyped="false"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config file://D:\Projects\Friendica\MrPetovan\friendica-directory\vendor\vimeo\psalm\config.xsd"
>
<projectFiles>
<directory name="src" />
<ignoreFiles>
<directory name="vendor" />
</ignoreFiles>
</projectFiles>
<issueHandlers>
<LessSpecificReturnType errorLevel="info" />
<!-- level 3 issues - slightly lazy code writing, but provably low false-negatives -->
<DeprecatedMethod errorLevel="info" />
<DeprecatedProperty errorLevel="info" />
<DeprecatedClass errorLevel="info" />
<DeprecatedConstant errorLevel="info" />
<DeprecatedInterface errorLevel="info" />
<DeprecatedTrait errorLevel="info" />
<MissingClosureReturnType errorLevel="info" />
<MissingReturnType errorLevel="info" />
<MissingPropertyType errorLevel="info" />
<InvalidDocblock errorLevel="info" />
<MisplacedRequiredParam errorLevel="info" />
<PropertyNotSetInConstructor errorLevel="info" />
<MissingConstructor errorLevel="info" />
<MissingClosureParamType errorLevel="info" />
<MissingParamType errorLevel="info" />
<RedundantCondition errorLevel="info" />
<DocblockTypeContradiction errorLevel="info" />
<RedundantConditionGivenDocblockType errorLevel="info" />
<UnresolvableInclude errorLevel="info" />
<RawObjectIteration errorLevel="info" />
</issueHandlers>
</psalm>

@ -0,0 +1,21 @@
<IfModule mod_rewrite.c>
RewriteEngine On
# Some hosts may require you to use the `RewriteBase` directive.
# Determine the RewriteBase automatically and set it as environment variable.
# If you are using Apache aliases to do mass virtual hosting or installed the
# project in a subdirectory, the base path will be prepended to allow proper
# resolution of the index.php file and to redirect to the correct URI. It will
# work in environments without path prefix as well, providing a safe, one-size
# fits all solution. But as you do not need it in this case, you can comment
# the following 2 lines to eliminate the overhead.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
# If the above doesn't work you might need to set the `RewriteBase` directive manually, it should be the
# absolute physical path to the directory that contains this htaccess file.
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -0,0 +1,952 @@
/* Bootstrap */
@font-face {
font-family: 'Icons';
src: url('../fonts/open-iconic.eot');
src: url('../fonts/open-iconic.eot?#iconic-sm') format('embedded-opentype'), url('../fonts/open-iconic.woff') format('woff'), url('../fonts/open-iconic.ttf') format('truetype'), url('../fonts/open-iconic.otf') format('opentype'), url('../fonts/open-iconic.svg#iconic-sm') format('svg');
font-weight: normal;
font-style: normal;
}
.oi {
position: relative;
top: 1px;
display: inline-block;
speak:none;
font-family: 'Icons';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.oi:empty:before {
width: 1em;
text-align: center;
box-sizing: content-box;
}
.oi.oi-align-center:before {
text-align: center;
}
.oi.oi-align-left:before {
text-align: left;
}
.oi.oi-align-right:before {
text-align: right;
}
.oi.oi-flip-horizontal:before {
-webkit-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);
}
.oi.oi-flip-vertical:before {
-webkit-transform: scale(1, -1);
-ms-transform: scale(-1, 1);
transform: scale(1, -1);
}
.oi.oi-flip-horizontal-vertical:before {
-webkit-transform: scale(-1, -1);
-ms-transform: scale(-1, 1);
transform: scale(-1, -1);
}
.oi-account-login:before {
content:'\e000';
}
.oi-account-logout:before {
content:'\e001';
}
.oi-action-redo:before {
content:'\e002';
}
.oi-action-undo:before {
content:'\e003';
}
.oi-align-center:before {
content:'\e004';
}
.oi-align-left:before {
content:'\e005';
}
.oi-align-right:before {
content:'\e006';
}
.oi-aperture:before {
content:'\e007';
}
.oi-arrow-bottom:before {
content:'\e008';
}
.oi-arrow-circle-bottom:before {
content:'\e009';
}
.oi-arrow-circle-left:before {
content:'\e00a';
}
.oi-arrow-circle-right:before {
content:'\e00b';
}
.oi-arrow-circle-top:before {
content:'\e00c';
}
.oi-arrow-left:before {
content:'\e00d';
}
.oi-arrow-right:before {
content:'\e00e';
}
.oi-arrow-thick-bottom:before {
content:'\e00f';
}
.oi-arrow-thick-left:before {
content:'\e010';
}
.oi-arrow-thick-right:before {
content:'\e011';
}
.oi-arrow-thick-top:before {
content:'\e012';
}
.oi-arrow-top:before {
content:'\e013';
}
.oi-audio-spectrum:before {
content:'\e014';
}
.oi-audio:before {
content:'\e015';
}
.oi-badge:before {
content:'\e016';
}
.oi-ban:before {
content:'\e017';
}
.oi-bar-chart:before {
content:'\e018';
}
.oi-basket:before {
content:'\e019';
}
.oi-battery-empty:before {
content:'\e01a';
}
.oi-battery-full:before {
content:'\e01b';
}
.oi-beaker:before {
content:'\e01c';
}
.oi-bell:before {
content:'\e01d';
}
.oi-bluetooth:before {
content:'\e01e';
}
.oi-bold:before {
content:'\e01f';
}
.oi-bolt:before {
content:'\e020';
}
.oi-book:before {
content:'\e021';
}
.oi-bookmark:before {
content:'\e022';
}
.oi-box:before {
content:'\e023';
}
.oi-briefcase:before {
content:'\e024';
}
.oi-british-pound:before {
content:'\e025';
}
.oi-browser:before {
content:'\e026';
}
.oi-brush:before {
content:'\e027';
}
.oi-bug:before {
content:'\e028';
}
.oi-bullhorn:before {
content:'\e029';
}
.oi-calculator:before {
content:'\e02a';
}
.oi-calendar:before {
content:'\e02b';
}
.oi-camera-slr:before {
content:'\e02c';
}
.oi-caret-bottom:before {
content:'\e02d';
}
.oi-caret-left:before {
content:'\e02e';
}
.oi-caret-right:before {
content:'\e02f';
}
.oi-caret-top:before {
content:'\e030';
}
.oi-cart:before {
content:'\e031';
}
.oi-chat:before {
content:'\e032';
}
.oi-check:before {
content:'\e033';
}
.oi-chevron-bottom:before {
content:'\e034';
}
.oi-chevron-left:before {
content:'\e035';
}
.oi-chevron-right:before {
content:'\e036';
}
.oi-chevron-top:before {
content:'\e037';
}
.oi-circle-check:before {
content:'\e038';
}
.oi-circle-x:before {
content:'\e039';
}
.oi-clipboard:before {
content:'\e03a';
}
.oi-clock:before {
content:'\e03b';
}
.oi-cloud-download:before {
content:'\e03c';
}
.oi-cloud-upload:before {
content:'\e03d';
}
.oi-cloud:before {
content:'\e03e';
}
.oi-cloudy:before {
content:'\e03f';
}
.oi-code:before {
content:'\e040';
}
.oi-cog:before {
content:'\e041';
}
.oi-collapse-down:before {
content:'\e042';
}
.oi-collapse-left:before {
content:'\e043';
}
.oi-collapse-right:before {
content:'\e044';
}
.oi-collapse-up:before {
content:'\e045';
}
.oi-command:before {
content:'\e046';
}
.oi-comment-square:before {
content:'\e047';
}
.oi-compass:before {
content:'\e048';
}
.oi-contrast:before {
content:'\e049';
}
.oi-copywriting:before {
content:'\e04a';
}
.oi-credit-card:before {
content:'\e04b';
}
.oi-crop:before {
content:'\e04c';
}
.oi-dashboard:before {
content:'\e04d';
}
.oi-data-transfer-download:before {
content:'\e04e';
}
.oi-data-transfer-upload:before {
content:'\e04f';
}
.oi-delete:before {
content:'\e050';
}
.oi-dial:before {
content:'\e051';
}
.oi-document:before {
content:'\e052';
}
.oi-dollar:before {
content:'\e053';
}
.oi-double-quote-sans-left:before {
content:'\e054';
}
.oi-double-quote-sans-right:before {
content:'\e055';
}
.oi-double-quote-serif-left:before {
content:'\e056';
}
.oi-double-quote-serif-right:before {
content:'\e057';
}
.oi-droplet:before {
content:'\e058';
}
.oi-eject:before {
content:'\e059';
}
.oi-elevator:before {
content:'\e05a';
}
.oi-ellipses:before {
content:'\e05b';
}
.oi-envelope-closed:before {
content:'\e05c';
}
.oi-envelope-open:before {
content:'\e05d';
}
.oi-euro:before {
content:'\e05e';
}
.oi-excerpt:before {
content:'\e05f';
}
.oi-expand-down:before {
content:'\e060';
}
.oi-expand-left:before {
content:'\e061';
}
.oi-expand-right:before {
content:'\e062';
}
.oi-expand-up:before {
content:'\e063';
}
.oi-external-link:before {
content:'\e064';
}
.oi-eye:before {
content:'\e065';
}
.oi-eyedropper:before {
content:'\e066';
}
.oi-file:before {
content:'\e067';
}
.oi-fire:before {
content:'\e068';
}
.oi-flag:before {
content:'\e069';
}
.oi-flash:before {
content:'\e06a';
}
.oi-folder:before {
content:'\e06b';
}
.oi-fork:before {
content:'\e06c';
}
.oi-fullscreen-enter:before {
content:'\e06d';
}
.oi-fullscreen-exit:before {
content:'\e06e';
}
.oi-globe:before {
content:'\e06f';
}
.oi-graph:before {
content:'\e070';
}
.oi-grid-four-up:before {
content:'\e071';
}
.oi-grid-three-up:before {
content:'\e072';
}
.oi-grid-two-up:before {
content:'\e073';
}
.oi-hard-drive:before {
content:'\e074';
}
.oi-header:before {
content:'\e075';
}
.oi-headphones:before {
content:'\e076';
}
.oi-heart:before {
content:'\e077';
}
.oi-home:before {
content:'\e078';
}
.oi-image:before {
content:'\e079';
}
.oi-inbox:before {
content:'\e07a';
}
.oi-infinity:before {
content:'\e07b';
}
.oi-info:before {
content:'\e07c';
}
.oi-italic:before {
content:'\e07d';
}
.oi-justify-center:before {
content:'\e07e';
}
.oi-justify-left:before {
content:'\e07f';
}
.oi-justify-right:before {
content:'\e080';
}
.oi-key:before {
content:'\e081';
}
.oi-laptop:before {
content:'\e082';
}
.oi-layers:before {
content:'\e083';
}
.oi-lightbulb:before {
content:'\e084';
}
.oi-link-broken:before {
content:'\e085';
}
.oi-link-intact:before {
content:'\e086';
}
.oi-list-rich:before {
content:'\e087';
}
.oi-list:before {
content:'\e088';
}
.oi-location:before {
content:'\e089';
}
.oi-lock-locked:before {
content:'\e08a';
}
.oi-lock-unlocked:before {
content:'\e08b';
}
.oi-loop-circular:before {
content:'\e08c';
}
.oi-loop-square:before {
content:'\e08d';
}
.oi-loop:before {
content:'\e08e';
}
.oi-magnifying-glass:before {
content:'\e08f';
}
.oi-map-marker:before {
content:'\e090';
}
.oi-map:before {
content:'\e091';
}
.oi-media-pause:before {
content:'\e092';
}
.oi-media-play:before {
content:'\e093';
}
.oi-media-record:before {
content:'\e094';
}
.oi-media-skip-backward:before {
content:'\e095';
}
.oi-media-skip-forward:before {
content:'\e096';
}
.oi-media-step-backward:before {
content:'\e097';
}
.oi-media-step-forward:before {
content:'\e098';
}
.oi-media-stop:before {
content:'\e099';
}
.oi-medical-cross:before {
content:'\e09a';
}
.oi-menu:before {
content:'\e09b';
}
.oi-microphone:before {
content:'\e09c';
}
.oi-minus:before {
content:'\e09d';
}
.oi-monitor:before {
content:'\e09e';
}
.oi-moon:before {
content:'\e09f';
}
.oi-move:before {
content:'\e0a0';
}
.oi-musical-note:before {
content:'\e0a1';
}
.oi-paperclip:before {
content:'\e0a2';
}
.oi-pencil:before {
content:'\e0a3';
}
.oi-people:before {
content:'\e0a4';
}
.oi-person:before {
content:'\e0a5';
}
.oi-phone:before {
content:'\e0a6';
}
.oi-pie-chart:before {
content:'\e0a7';
}
.oi-pin:before {
content:'\e0a8';
}
.oi-play-circle:before {
content:'\e0a9';
}
.oi-plus:before {
content:'\e0aa';
}
.oi-power-standby:before {
content:'\e0ab';
}
.oi-print:before {
content:'\e0ac';
}
.oi-project:before {
content:'\e0ad';
}
.oi-pulse:before {
content:'\e0ae';
}
.oi-puzzle-piece:before {
content:'\e0af';
}
.oi-question-mark:before {
content:'\e0b0';
}
.oi-rain:before {
content:'\e0b1';
}
.oi-random:before {
content:'\e0b2';
}
.oi-reload:before {
content:'\e0b3';
}
.oi-resize-both:before {
content:'\e0b4';
}
.oi-resize-height:before {
content:'\e0b5';
}
.oi-resize-width:before {
content:'\e0b6';
}
.oi-rss-alt:before {
content:'\e0b7';
}
.oi-rss:before {
content:'\e0b8';
}
.oi-script:before {
content:'\e0b9';
}
.oi-share-boxed:before {
content:'\e0ba';
}
.oi-share:before {
content:'\e0bb';
}
.oi-shield:before {
content:'\e0bc';
}
.oi-signal:before {
content:'\e0bd';
}
.oi-signpost:before {
content:'\e0be';
}
.oi-sort-ascending:before {
content:'\e0bf';
}
.oi-sort-descending:before {
content:'\e0c0';
}
.oi-spreadsheet:before {
content:'\e0c1';
}
.oi-star:before {
content:'\e0c2';
}
.oi-sun:before {
content:'\e0c3';
}
.oi-tablet:before {
content:'\e0c4';
}
.oi-tag:before {
content:'\e0c5';
}
.oi-tags:before {
content:'\e0c6';
}
.oi-target:before {
content:'\e0c7';
}
.oi-task:before {
content:'\e0c8';
}
.oi-terminal:before {
content:'\e0c9';
}
.oi-text:before {
content:'\e0ca';
}
.oi-thumb-down:before {
content:'\e0cb';
}
.oi-thumb-up:before {
content:'\e0cc';
}
.oi-timer:before {
content:'\e0cd';
}
.oi-transfer:before {
content:'\e0ce';
}
.oi-trash:before {
content:'\e0cf';
}
.oi-underline:before {
content:'\e0d0';
}
.oi-vertical-align-bottom:before {
content:'\e0d1';
}
.oi-vertical-align-center:before {
content:'\e0d2';
}
.oi-vertical-align-top:before {
content:'\e0d3';
}
.oi-video:before {
content:'\e0d4';
}
.oi-volume-high:before {
content:'\e0d5';
}
.oi-volume-low:before {
content:'\e0d6';
}
.oi-volume-off:before {
content:'\e0d7';
}
.oi-warning:before {
content:'\e0d8';
}
.oi-wifi:before {
content:'\e0d9';
}
.oi-wrench:before {
content:'\e0da';
}
.oi-x:before {
content:'\e0db';
}
.oi-yen:before {
content:'\e0dc';
}
.oi-zoom-in:before {
content:'\e0dd';
}
.oi-zoom-out:before {
content:'\e0de';
}

@ -0,0 +1,960 @@
/* Bootstrap */
/* Override Bootstrap default variable */
//@icon-font-path: "../fonts/";
@font-face {
font-family: 'Icons';
src: ~"url('@{icon-font-path}open-iconic.eot')";
src: ~"url('@{icon-font-path}open-iconic.eot?#iconic-sm') format('embedded-opentype')",
~"url('@{icon-font-path}open-iconic.woff') format('woff')",
~"url('@{icon-font-path}open-iconic.ttf') format('truetype')",
~"url('@{icon-font-path}open-iconic.svg#iconic-sm') format('svg')";
font-weight: normal;
font-style: normal;
}
// Catchall baseclass
.oi {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Icons';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
&:empty:before {
width: 1em;
text-align: center;
box-sizing: content-box;
}
&.oi-align-center:before {
text-align: center;
}
&.oi-align-left:before {
text-align: left;
}
&.oi-align-right:before {
text-align: right;
}
&.oi-flip-horizontal:before {
-webkit-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);
}
&.oi-flip-vertical:before {
-webkit-transform: scale(1, -1);
-ms-transform: scale(-1, 1);
transform: scale(1, -1);
}
&.oi-flip-horizontal-vertical:before {
-webkit-transform: scale(-1, -1);
-ms-transform: scale(-1, 1);
transform: scale(-1, -1);
}
}
.oi-account-login:before {
content:"\e000";
}
.oi-account-logout:before {
content:"\e001";
}
.oi-action-redo:before {
content:"\e002";
}
.oi-action-undo:before {
content:"\e003";
}
.oi-align-center:before {
content:"\e004";
}
.oi-align-left:before {
content:"\e005";
}
.oi-align-right:before {
content:"\e006";
}
.oi-aperture:before {
content:"\e007";
}
.oi-arrow-bottom:before {
content:"\e008";
}
.oi-arrow-circle-bottom:before {
content:"\e009";
}
.oi-arrow-circle-left:before {
content:"\e00a";
}
.oi-arrow-circle-right:before {
content:"\e00b";
}
.oi-arrow-circle-top:before {
content:"\e00c";
}
.oi-arrow-left:before {
content:"\e00d";
}
.oi-arrow-right:before {
content:"\e00e";
}
.oi-arrow-thick-bottom:before {
content:"\e00f";
}
.oi-arrow-thick-left:before {
content:"\e010";
}
.oi-arrow-thick-right:before {
content:"\e011";
}
.oi-arrow-thick-top:before {
content:"\e012";
}
.oi-arrow-top:before {
content:"\e013";
}
.oi-audio-spectrum:before {
content:"\e014";
}
.oi-audio:before {
content:"\e015";
}
.oi-badge:before {
content:"\e016";
}
.oi-ban:before {
content:"\e017";
}
.oi-bar-chart:before {
content:"\e018";
}
.oi-basket:before {
content:"\e019";
}
.oi-battery-empty:before {
content:"\e01a";
}
.oi-battery-full:before {
content:"\e01b";
}
.oi-beaker:before {
content:"\e01c";
}
.oi-bell:before {
content:"\e01d";
}
.oi-bluetooth:before {
content:"\e01e";
}
.oi-bold:before {
content:"\e01f";
}
.oi-bolt:before {
content:"\e020";
}
.oi-book:before {
content:"\e021";
}
.oi-bookmark:before {
content:"\e022";
}
.oi-box:before {
content:"\e023";
}
.oi-briefcase:before {
content:"\e024";
}
.oi-british-pound:before {
content:"\e025";
}
.oi-browser:before {
content:"\e026";
}
.oi-brush:before {
content:"\e027";
}
.oi-bug:before {
content:"\e028";
}
.oi-bullhorn:before {
content:"\e029";
}
.oi-calculator:before {
content:"\e02a";
}
.oi-calendar:before {
content:"\e02b";
}
.oi-camera-slr:before {
content:"\e02c";
}
.oi-caret-bottom:before {
content:"\e02d";
}
.oi-caret-left:before {
content:"\e02e";
}
.oi-caret-right:before {
content:"\e02f";
}
.oi-caret-top:before {
content:"\e030";
}
.oi-cart:before {
content:"\e031";
}
.oi-chat:before {
content:"\e032";
}
.oi-check:before {
content:"\e033";
}
.oi-chevron-bottom:before {
content:"\e034";
}
.oi-chevron-left:before {
content:"\e035";
}
.oi-chevron-right:before {
content:"\e036";
}
.oi-chevron-top:before {
content:"\e037";
}
.oi-circle-check:before {
content:"\e038";
}
.oi-circle-x:before {
content:"\e039";
}
.oi-clipboard:before {
content:"\e03a";
}
.oi-clock:before {
content:"\e03b";
}
.oi-cloud-download:before {
content:"\e03c";
}
.oi-cloud-upload:before {
content:"\e03d";
}
.oi-cloud:before {
content:"\e03e";
}
.oi-cloudy:before {
content:"\e03f";
}
.oi-code:before {
content:"\e040";
}
.oi-cog:before {
content:"\e041";
}
.oi-collapse-down:before {
content:"\e042";
}
.oi-collapse-left:before {
content:"\e043";
}
.oi-collapse-right:before {
content:"\e044";
}
.oi-collapse-up:before {
content:"\e045";
}
.oi-command:before {
content:"\e046";
}
.oi-comment-square:before {
content:"\e047";
}
.oi-compass:before {
content:"\e048";
}
.oi-contrast:before {
content:"\e049";