mirror of
https://github.com/HaschekSolutions/pictshare.git
synced 2025-11-11 10:46:22 +00:00
stage 1 of v2
This commit is contained in:
1
LICENSE
1
LICENSE
@@ -199,4 +199,3 @@
|
|||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
|
|
||||||
|
|||||||
325
README.md
325
README.md
@@ -1,319 +1,6 @@
|
|||||||
# PictShare
|
# PictShare
|
||||||
**[Live Demo](https://www.pictshare.net)**
|
**[Live Demo](https://www.pictshare.net)**
|
||||||
PictShare is a multi lingual, open source image hosting service with a simple resizing and upload API that you can host yourself.
|
PictShare is a selfhostable, open source image, video and text hosting as well as URL shortening service with a simple API.
|
||||||
|
|
||||||
---
|
---
|
||||||
[](https://github.com/chrisiaut/pictshare/blob/master/LICENSE)
|
[](https://github.com/HaschekSolutions/pictshare/blob/master/LICENSE)
|
||||||
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Table of contents
|
|
||||||
=================
|
|
||||||
* [Installation](#installation)
|
|
||||||
* [Docker](#docker)
|
|
||||||
* [On nginx](#on-nginx)
|
|
||||||
* [Docker Compose With Prebuild Image by hascheksolutions](#docker-compose-with-prebuild-image-by-hascheksolutions)
|
|
||||||
* [Why would I want to host my own images?](#why-would-i-want-to-host-my-own-images)
|
|
||||||
* [Features](#features)
|
|
||||||
* [Smart query system](#smart-query-system)
|
|
||||||
* [Available options](#available-options)
|
|
||||||
* [How does the external-upload-API work?](#how-does-the-external-upload-api-work)
|
|
||||||
* [Upload from external URL](#upload-from-external-url)
|
|
||||||
* [Example:](#example)
|
|
||||||
* [Upload via POST](#upload-via-post)
|
|
||||||
* [Upload from base64 string](#upload-from-base64-string)
|
|
||||||
* [Restriction settings](#restriction-settings)
|
|
||||||
* [UPLOAD_CODE](#upload_code)
|
|
||||||
* [IMAGE_CHANGE_CODE](#image_change_code)
|
|
||||||
* [Security and privacy](#security-and-privacy)
|
|
||||||
* [Requirements](#requirements)
|
|
||||||
* [Upgrading](#upgrading)
|
|
||||||
* [Addons](#addons)
|
|
||||||
* [Traffic analysis](#traffic-analysis)
|
|
||||||
* [Coming soon](#coming-soon)
|
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### Docker
|
|
||||||
The fastest way to deploy PictShare is via the [official Docker repo](https://hub.docker.com/r/hascheksolutions/pictshare/)
|
|
||||||
- [Source code & more examples](https://github.com/HaschekSolutions/PictShare-Docker)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker run -d -p 80:80 -e "TITLE=My own PictShare" hascheksolutions/pictshare
|
|
||||||
```
|
|
||||||
|
|
||||||
[](https://www.pictshare.net/8a1dec0973.mp4)
|
|
||||||
|
|
||||||
### Docker Compose With Prebuild Image by hascheksolutions
|
|
||||||
|
|
||||||
Run container by docker-compose:
|
|
||||||
- First, install docker compose:
|
|
||||||
[Docker official docs](https://docs.docker.com/compose/install/)
|
|
||||||
- Pull docker-compose file:
|
|
||||||
```bash
|
|
||||||
wget https://raw.githubusercontent.com/chrisiaut/pictshare/master/docker-compose.yml
|
|
||||||
```
|
|
||||||
- Edit docker-compose file:
|
|
||||||
```bash
|
|
||||||
vi docker-compose.yml
|
|
||||||
```
|
|
||||||
- Run container by docker-compose:
|
|
||||||
```bash
|
|
||||||
docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
By using this compose file, you should know that:
|
|
||||||
- Will make a directory "volumes" in the same directory where compose file is.
|
|
||||||
- Change `AUTOUPDATE` to false from true by defalt.
|
|
||||||
- And...it is highly recommended to build your own image.
|
|
||||||
|
|
||||||
### Without Docker
|
|
||||||
|
|
||||||
- Make sure you have PHP5 GD libraries installed: ```apt-get install php5-gd```
|
|
||||||
- Unpack the [PictShare zip](https://github.com/chrisiaut/pictshare/archive/master.zip)
|
|
||||||
- Rename /inc/example.config.inc.php to /inc/config.inc.php
|
|
||||||
- ```chmod +x bin/ffmpeg``` if you want to be able to use mp4 uploads
|
|
||||||
- The provided ffmpeg binary (bin/ffmpeg) is from [here](http://johnvansickle.com/ffmpeg/) and it's a 64bit linux executable. If you need a different one, load yours and overwrite the one provided
|
|
||||||
- (optional) You can and should put a [nginx](https://www.nginx.com/) proxy before the Apache server. That thing is just insanely fast with static content like images.
|
|
||||||
- (optional) To secure your traffic I'd highly recommend getting an [SSL Cert](https://letsencrypt.org/) for your server if you don't already have one.
|
|
||||||
|
|
||||||
## Why would I want to host my own images?
|
|
||||||
If you own a server (even a home server) you can host your own PictShare instance so you have full control over your content and can delete images hasslefree.
|
|
||||||
|
|
||||||
If you're an **app developer** or **sysadmin** you can use it for a centralized image hosting. With the simple upload API you can upload images to your PictShare instance and get a nice short URL
|
|
||||||
|
|
||||||
If you're a blogger like myself, you can use it as storage for your images so the images will still work even if you change blog providers or servers
|
|
||||||
|
|
||||||
## Features
|
|
||||||
- Uploads without logins or validation (that's a good thing, right?)
|
|
||||||
- Simple API to upload any image from remote servers to your instance [via URL](#upload-from-url) and [via Base64](#upload-from-base64-string)
|
|
||||||
- 100% file based - no database needed
|
|
||||||
- Simple album functions with embedding support
|
|
||||||
- Converts gif to (much smaller) MP4
|
|
||||||
- MP4 resizing
|
|
||||||
- PictShare removes all exif data so you can upload photos from your phone and all GPS tags and camera model info get wiped
|
|
||||||
- Smart [resize, filter and rotation](#smart-query-system) features
|
|
||||||
- Generate gradients by specifying only a size. eg: https://pictshare.net/800x200
|
|
||||||
- Duplicates don't take up space. If the exact same images is uploaded twice, the second upload will link to the first
|
|
||||||
- You can control who can upload images or use filters/resizes by defining an [upload-code](#restriction-settings)
|
|
||||||
- You can set a code in your ```/inc/config.inc.php``` (MASTER_DELETE_CODE) that, if appended to any URL of an Image, will delete the image and all cached versions of it from the server
|
|
||||||
- Detailed traffic and view statistics of your images via [Pictshare stats](https://github.com/chrisiaut/pictshare_stats)
|
|
||||||
- For more configuration possibilities check out the ```/inc/example.config.inc.php``` file
|
|
||||||
|
|
||||||
## Smart query system
|
|
||||||
PictShare images can be changed after upload just by modifying the URL. It works like this:
|
|
||||||
|
|
||||||
<span style="color:blue">https://base.domain</span>/<span style="color:red"><options></span>/<span style="color:green"><image></span>
|
|
||||||
|
|
||||||
For example: https://pictshare.net/100x100/negative/b260e36b60.jpg will show you the uploaded Image ```b260e36b60.jpg``` but resize it to 100x100 pixels and apply the "negative" filter. The original image will stay untouched.
|
|
||||||
|
|
||||||
### Available options
|
|
||||||
Original URL: ```https://www.pictshare.net/b260e36b60.jpg```
|
|
||||||
|
|
||||||
Note: If an option needs a value it works like this: ```optionname_value```. Eg: ```pixelate_10```
|
|
||||||
If there is some option that's not recognized by PictShare it's simply ignored, so this will work: https://www.pictshare.net/pictshare-is-awesome/b260e36b60.jpg and also even this will work: https://www.pictshare.net/b260e36b60.jpg/how-can-this-still/work/
|
|
||||||
|
|
||||||
|
|
||||||
| Option | Parameter | Example URL | Result |
|
|
||||||
| ------------- | ------------------- | ---------------------- | ----------- |
|
|
||||||
**Resizing** | | | |
|
|
||||||
<width>**x**<height> | -none- | https://pictshare.net/20x20/b260e36b60.jpg |  |
|
|
||||||
forcesize | -none- | https://pictshare.net/100x400/forcesize/b260e36b60.jpg |  |
|
|
||||||
**Albums** | | | |
|
|
||||||
just add multiple image hashes | -none- | https://www.pictshare.net/b260e36b60.jpg/32c9cf77c5.jpg/163484b6b1.jpg | Takes the **images** you put in the URL and makes an album out of them. All filters are supported!
|
|
||||||
embed | -none- | https://www.pictshare.net/b260e36b60.jpg/32c9cf77c5.jpg/163484b6b1.jpg/embed | Renders the album without CSS and with transparent background so you can embed them easily
|
|
||||||
responsive | -none- | https://www.pictshare.net/b260e36b60.jpg/32c9cf77c5.jpg/163484b6b1.jpg/responsive | Renders all images responsive (max-width 100%) according to screen size
|
|
||||||
<width>**x**<height> | -none- | https://www.pictshare.net/b260e36b60.jpg/32c9cf77c5.jpg/163484b6b1.jpg/150x150 | Sets the size for the thumbnails in the album
|
|
||||||
forcesize | -none- | https://www.pictshare.net/b260e36b60.jpg/32c9cf77c5.jpg/163484b6b1.jpg/100x300/forcesize | Forces thumbnail sizes to the values you provided
|
|
||||||
**GIF to mp4** | | |
|
|
||||||
mp4 | -none- | https://www.pictshare.net/mp4/102687fe65.gif | Converts gif to mp4 and displays as that. Note that you can't include that mp4 in an img tag
|
|
||||||
raw | -none- | https://www.pictshare.net/mp4/raw/102687fe65.gif | Renders the converted mp4 directly. Use with /mp4/
|
|
||||||
preview | -none- | https://www.pictshare.net/mp4/preview/102687fe65.gif | Renders the first frame of generated MP4 as JPEG. Use with /mp4/
|
|
||||||
**MP4 options** | | |
|
|
||||||
-none- | -none- | https://www.pictshare.net/65714d22f0.mp4 | Renders the mp4 embedded in a simple HTML template. This link can't be embedded into video tags, use /raw/ instead if you want to embed
|
|
||||||
raw | -none- | https://www.pictshare.net/raw/65714d22f0.mp4 | Renders the mp4 video directly so you can link it
|
|
||||||
preview | -none- | https://www.pictshare.net/preview/65714d22f0.mp4 | Renders the first frame of the MP4 as an JPEG image
|
|
||||||
**Rotating** | | |
|
|
||||||
left | -none- | https://pictshare.net/left/b260e36b60.jpg | 
|
|
||||||
right | -none- | https://pictshare.net/right/b260e36b60.jpg | 
|
|
||||||
upside | -none- | https://pictshare.net/upside/b260e36b60.jpg | 
|
|
||||||
**Filters** | | |
|
|
||||||
negative | -none- | https://pictshare.net/negative/b260e36b60.jpg | 
|
|
||||||
grayscale | -none- | https://pictshare.net/grayscale/b260e36b60.jpg | 
|
|
||||||
brightness | -255 to 255 | https://pictshare.net/brightness_100/b260e36b60.jpg | 
|
|
||||||
edgedetect | -none- | https://pictshare.net/edgedetect/b260e36b60.jpg | 
|
|
||||||
smooth | -10 to 2048 | https://pictshare.net/smooth_3/b260e36b60.jpg | 
|
|
||||||
contrast | -100 to 100 | https://pictshare.net/contrast_40/b260e36b60.jpg | 
|
|
||||||
pixelate | 0 to 100 | https://pictshare.net/pixelate_10/b260e36b60.jpg | 
|
|
||||||
blur | -none- or 0 to 5 | https://pictshare.net/blur/b260e36b60.jpg | 
|
|
||||||
sepia | -none- | https://pictshare.net/sepia/b260e36b60.jpg | 
|
|
||||||
sharpen | -none- | https://pictshare.net/sharpen/b260e36b60.jpg | 
|
|
||||||
emboss | -none- | https://pictshare.net/emboss/b260e36b60.jpg | 
|
|
||||||
cool | -none- | https://pictshare.net/cool/b260e36b60.jpg | 
|
|
||||||
light | -none- | https://pictshare.net/light/b260e36b60.jpg | 
|
|
||||||
aqua | -none- | https://pictshare.net/aqua/b260e36b60.jpg | 
|
|
||||||
fuzzy | -none- | https://pictshare.net/fuzzy/b260e36b60.jpg | 
|
|
||||||
boost | -none- | https://pictshare.net/boost/b260e36b60.jpg | 
|
|
||||||
gray | -none- | https://pictshare.net/gray/b260e36b60.jpg | 
|
|
||||||
|
|
||||||
You can also combine as many options as you want. Even multiple times! Want your image to be negative, resized, grayscale , with increased brightness and negate it again? No problem: https://pictshare.net/500x500/grayscale/negative/brightness_100/negative/b260e36b60.jpg
|
|
||||||
|
|
||||||
## How does the external-upload-API work?
|
|
||||||
|
|
||||||
### Upload from external URL
|
|
||||||
PictShare has a simple REST API to upload remote pictures. The API can be accessed via the backend.php file like this:
|
|
||||||
|
|
||||||
```https://pictshare.net/backend.php?getimage=<URL of the image you want to upload>```.
|
|
||||||
|
|
||||||
#### Example:
|
|
||||||
|
|
||||||
Request: ```https://pictshare.net/backend.php?getimage=https://www.0xf.at/css/imgs/logo.png```
|
|
||||||
|
|
||||||
The server will answer with the file name and the server path in JSON:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{"status":"OK","type":"png","hash":"10ba188162.png","url":"https:\/\/pictshare.net\/10ba188162.png"}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Upload via POST
|
|
||||||
|
|
||||||
Send a POST request to ```https://pictshare.net/backend.php``` and send the image in the variable ```postimage```.
|
|
||||||
|
|
||||||
Server will return JSON of uploaded data like this:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{"status":"OK","type":"png","hash":"2f18a052c4.png","url":"https:\/\/pictshare.net\/2f18a052c4.png","domain":"https:\/\/pictshare.net\/"}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Upload from base64 string
|
|
||||||
|
|
||||||
Just send a POST request to ```https://pictshare.net/backend.php``` and send your image in base64 as the variable name ```base64```
|
|
||||||
|
|
||||||
Server will automatically try to guess the file type (which should work in 90% of the cases) and if it can't figure it out it'll just upload it as png.
|
|
||||||
|
|
||||||
## Restriction settings
|
|
||||||
In your ```config.inc.php``` there are two values to be set: ```UPLOAD_CODE``` and ```IMAGE_CHANGE_CODE```
|
|
||||||
|
|
||||||
Both can be set to strings or multiple strings semi;colon;separated. If there is a semicolon in the string, any of the elements will work
|
|
||||||
|
|
||||||
### UPLOAD_CODE
|
|
||||||
If set, will show users a code field in the upload form. If it doesn't match your setting, files won't be uploaded.
|
|
||||||
|
|
||||||
If enabled, the Upload API will need the variable ```upload_code``` via GET (eg: ```https://pictshare.net/backend.php?getimage=https://www.0xf.at/css/imgs/logo.png&upload_code=YourUploadCodeHere```)
|
|
||||||
|
|
||||||
### IMAGE_CHANGE_CODE
|
|
||||||
If set,the [options](#available-options) will only work if the URL got the code in it. You can provide the code as option ```changecode_YourChangeCode```
|
|
||||||
|
|
||||||
For example: If enabled the image ```https://www.pictshare.net/negative/b260e36b60.jpg``` won't show the negative version but the original.
|
|
||||||
If you access the image with the code like this: ```https://www.pictshare.net/changecode_YourChangeCode/b260e36b60.jpg``` it gets cached on the server so the next time someone requests the link without providing the change-code, they'll see the inverted image (because you just created it before by accessing the image with the code)
|
|
||||||
|
|
||||||
## Security and privacy
|
|
||||||
- By hosting your own images you can delete them any time you want
|
|
||||||
- You can enable or disable upload logging. Don't want to know who uploaded stuff? Just change the setting in inc/config.inc.php
|
|
||||||
- No exif data is stored on the server, all jpegs get cleaned on upload
|
|
||||||
- You have full control over your data. PictShare doesn't need remote libaries or tracking crap
|
|
||||||
|
|
||||||
## Scaling
|
|
||||||
You can use **Backblaze Buckets** for storage of images so you can use multiple instances of PictShare and if the image is not found on the instance, it will look in the bucket.
|
|
||||||
|
|
||||||
Just add your credentials to the config.inc.php file as described in the ```example.config.inc.php``` file.
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
- Apache or Nginx Webserver with PHP
|
|
||||||
- PHP 5 GD library
|
|
||||||
- A domain or sub-domain since PictShare can't be run from a subfolder of some other domain
|
|
||||||
|
|
||||||
## nginx config
|
|
||||||
This is a simple config file that should make PictShare work on nginx
|
|
||||||
|
|
||||||
- Install php fpm: ```apt-get install php-fpm```
|
|
||||||
- Install php Graphics libraries: ```apt-get install php-gd```
|
|
||||||
|
|
||||||
```
|
|
||||||
server {
|
|
||||||
listen 80 default_server;
|
|
||||||
server_name your.awesome.domain.name;
|
|
||||||
|
|
||||||
root /var/www/pictshare; # or where ever you put it
|
|
||||||
index index.php;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ /index.php?url=$request_uri; # instead of htaccess mod_rewrite
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~ \.php {
|
|
||||||
fastcgi_pass unix:/var/run/php5-fpm.sock;
|
|
||||||
fastcgi_index index.php;
|
|
||||||
include fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
||||||
fastcgi_param PATH_INFO $fastcgi_script_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~ /(upload|tmp|bin) {
|
|
||||||
deny all;
|
|
||||||
return 404;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Apache config
|
|
||||||
This is a simple vHost config that should make PictShare work on Apache2.
|
|
||||||
|
|
||||||
- Install php5: ```apt-get install php5 libapache2-mod-php5```
|
|
||||||
- Install php Graphics libraries: ```apt-get install php5-gd```
|
|
||||||
- enable mod_rewrite
|
|
||||||
|
|
||||||
```
|
|
||||||
<VirtualHost *:80 >
|
|
||||||
ServerAdmin webmaster@sub.domain.tld
|
|
||||||
ServerName sub.domain.tld
|
|
||||||
ServerAlias sub.domain.tld
|
|
||||||
DocumentRoot /var/www/html
|
|
||||||
|
|
||||||
<Directory /var/www/html/>
|
|
||||||
Options Indexes FollowSymLinks MultiViews
|
|
||||||
AllowOverride All
|
|
||||||
Order allow,deny
|
|
||||||
Allow from All
|
|
||||||
</Directory>
|
|
||||||
ErrorLog ${APACHE_LOG_DIR}/error.log
|
|
||||||
LogLevel warn
|
|
||||||
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
|
||||||
</VirtualHost>
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Upgrading
|
|
||||||
- Just re-download the [PictShare zip](https://github.com/chrisiaut/pictshare/archive/master.zip) file and extract and overwrite existing pictshare files. Uploads and config won't be affected.
|
|
||||||
- Check if your ```/inc/config.inc.php``` file has all settings required by the ```/inc/example.config.inc.php``` since new options might get added in new versions
|
|
||||||
|
|
||||||
Or use these commands:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# to be run from the directory where your pictshare directory sits in
|
|
||||||
git clone https://github.com/chrisiaut/pictshare.git temp
|
|
||||||
cp -r temp/* pictshare/.
|
|
||||||
rm -rf temp
|
|
||||||
```
|
|
||||||
|
|
||||||
## Addons
|
|
||||||
- Chrome Browser extension: https://chrome.google.com/webstore/detail/pictshare-1-click-imagesc/mgomffcdpnohakmlhhjmiemlolonpafc
|
|
||||||
- Source: https://github.com/chrisiaut/PictShare-Chrome-extension
|
|
||||||
- Plugin to upload images with ShareX: https://github.com/ShareX/CustomUploaders/blob/master/pictshare.net.sxcu
|
|
||||||
|
|
||||||
## Traffic analysis
|
|
||||||
See [Pictshare stats](https://github.com/chrisiaut/pictshare_stats)
|
|
||||||
|
|
||||||
## Coming soon
|
|
||||||
- Delete codes for every uploaded image so users can delete images if no longer needed
|
|
||||||
- Albums
|
|
||||||
|
|
||||||
---
|
|
||||||
Design (c) by [Bernhard Moser](mailto://bernhard.moser91@gmail.com)
|
|
||||||
|
|
||||||
This is a [HASCHEK SOLUTIONS](https://haschek.solutions) project
|
|
||||||
|
|
||||||
[](https://haschek.solutions)
|
|
||||||
48
api/upload.php
Normal file
48
api/upload.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
// basic path definitions
|
||||||
|
define('DS', DIRECTORY_SEPARATOR);
|
||||||
|
define('ROOT', dirname(__FILE__).'/..');
|
||||||
|
|
||||||
|
//loading default settings if exist
|
||||||
|
if(!file_exists(ROOT.DS.'inc'.DS.'config.inc.php'))
|
||||||
|
exit('Rename /inc/example.config.inc.php to /inc/config.inc.php first!');
|
||||||
|
include_once(ROOT.DS.'inc'.DS.'config.inc.php');
|
||||||
|
|
||||||
|
//loading core and controllers
|
||||||
|
include_once(ROOT . DS . 'inc' . DS. 'core.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'image'. DS . 'image.controller.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'text'. DS . 'text.controller.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'url'. DS . 'url.controller.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'video'. DS . 'video.controller.php');
|
||||||
|
|
||||||
|
|
||||||
|
// check for POST upload
|
||||||
|
if ($_FILES['file']["error"] == UPLOAD_ERR_OK)
|
||||||
|
{
|
||||||
|
//get the file type
|
||||||
|
$type = getTypeOfFile($_FILES['file']["tmp_name"]);
|
||||||
|
//@todo: check for duplicates here
|
||||||
|
|
||||||
|
//cross check filetype for controllers
|
||||||
|
|
||||||
|
//image?
|
||||||
|
if(in_array($type,(new ImageController)->getRegisteredExtensions()))
|
||||||
|
{
|
||||||
|
$answer = (new ImageController())->handleUpload($_FILES['file']['tmp_name']);
|
||||||
|
}
|
||||||
|
//or, a text
|
||||||
|
else if($type=='text')
|
||||||
|
{
|
||||||
|
$answer = (new TextController())->handleUpload($_FILES['file']['tmp_name']);
|
||||||
|
}
|
||||||
|
//or, a video
|
||||||
|
else if(in_array($type,(new VideoController)->getRegisteredExtensions()))
|
||||||
|
{
|
||||||
|
$answer = (new VideoController())->handleUpload($_FILES['file']['tmp_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$answer)
|
||||||
|
$answer = array('status'=>'err','reason'=>'Unknown error');
|
||||||
|
|
||||||
|
echo json_encode($answer);
|
||||||
|
}
|
||||||
54
backend.php
54
backend.php
@@ -1,54 +0,0 @@
|
|||||||
<?php
|
|
||||||
session_cache_limiter("public");
|
|
||||||
$expiry = 90; //days
|
|
||||||
session_cache_expire($expiry * 24 * 60);
|
|
||||||
session_start();
|
|
||||||
define('DS', DIRECTORY_SEPARATOR);
|
|
||||||
define('ROOT', dirname(__FILE__));
|
|
||||||
define('PATH',((dirname($_SERVER['PHP_SELF'])=='/'||dirname($_SERVER['PHP_SELF'])=='\\'||dirname($_SERVER['PHP_SELF'])=='/index.php'||dirname($_SERVER['PHP_SELF'])=='/backend.php')?'/':dirname($_SERVER['PHP_SELF']).'/'));
|
|
||||||
|
|
||||||
if(!file_exists(ROOT.DS.'inc'.DS.'config.inc.php'))
|
|
||||||
exit('Rename /inc/example.config.inc.php to /inc/config.inc.php first!');
|
|
||||||
include_once(ROOT.DS.'inc'.DS.'config.inc.php');
|
|
||||||
|
|
||||||
if(FORCE_DOMAIN)
|
|
||||||
define('DOMAINPATH',FORCE_DOMAIN);
|
|
||||||
else
|
|
||||||
define('DOMAINPATH',(isset($_SERVER['HTTPS'])?'https':'http').'://'.$_SERVER['HTTP_HOST']);
|
|
||||||
error_reporting(E_ALL & ~E_NOTICE);
|
|
||||||
if(SHOW_ERRORS)
|
|
||||||
ini_set('display_errors','On');
|
|
||||||
else ini_set('display_errors','Off');
|
|
||||||
|
|
||||||
include_once(ROOT.DS.'inc'.DS.'core.php');
|
|
||||||
|
|
||||||
$pm = new PictshareModel();
|
|
||||||
|
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
|
||||||
|
|
||||||
if(UPLOAD_CODE!=false && !$pm->uploadCodeExists($_REQUEST['upload_code']))
|
|
||||||
exit(json_encode(array('status'=>'ERR','reason'=>'Wrong upload code provided')));
|
|
||||||
|
|
||||||
if($_REQUEST['getimage'])
|
|
||||||
{
|
|
||||||
$url = $_REQUEST['getimage'];
|
|
||||||
|
|
||||||
echo json_encode($pm->uploadImageFromURL($url));
|
|
||||||
}
|
|
||||||
else if($_FILES['postimage'])
|
|
||||||
{
|
|
||||||
$image = $_FILES['postimage'];
|
|
||||||
echo json_encode($pm->processSingleUpload($file,'postimage'));
|
|
||||||
}
|
|
||||||
else if($_REQUEST['base64'])
|
|
||||||
{
|
|
||||||
$data = $_REQUEST['base64'];
|
|
||||||
$format = $_REQUEST['format'];
|
|
||||||
echo json_encode($pm->uploadImageFromBase64($data,$format));
|
|
||||||
}
|
|
||||||
else if($_REQUEST['geturlinfo'])
|
|
||||||
echo json_encode($pm->getURLInfo($_REQUEST['geturlinfo']));
|
|
||||||
else if($_REQUEST['a']=='oembed')
|
|
||||||
echo json_encode($pm->oembed($_REQUEST['url'],$_REQUEST['t']));
|
|
||||||
else
|
|
||||||
echo json_encode(array('status'=>'ERR','reason'=>'NO_VALID_COMMAND'));
|
|
||||||
BIN
bin/ffmpeg
BIN
bin/ffmpeg
Binary file not shown.
Binary file not shown.
@@ -1,280 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Backblaze B2 wrapper without external depenecies
|
|
||||||
*
|
|
||||||
* @author Christian Haschek <christian@haschek.at>
|
|
||||||
*/
|
|
||||||
|
|
||||||
class Backblaze
|
|
||||||
{
|
|
||||||
private $token;
|
|
||||||
private $apiURL;
|
|
||||||
private $bucket;
|
|
||||||
private $dlURL;
|
|
||||||
private $ulURL;
|
|
||||||
private $ulToken;
|
|
||||||
private $bucket_name;
|
|
||||||
private $files;
|
|
||||||
|
|
||||||
function __construct()
|
|
||||||
{
|
|
||||||
if( BACKBLAZE !== true || !defined('BACKBLAZE_ID') || !defined('BACKBLAZE_KEY') || !defined('BACKBLAZE_BUCKET_ID'))
|
|
||||||
return;
|
|
||||||
$this->authorize();
|
|
||||||
$this->bucket = BACKBLAZE_BUCKET_ID;
|
|
||||||
$this->bucket_name = (( defined('BACKBLAZE_BUCKET_NAME') && BACKBLAZE_BUCKET_NAME != "")?BACKBLAZE_BUCKET_NAME:$this->bucketIdToName($bucket));
|
|
||||||
}
|
|
||||||
|
|
||||||
function authorize()
|
|
||||||
{
|
|
||||||
$account_id = BACKBLAZE_ID; // Obtained from your B2 account page
|
|
||||||
$application_key = BACKBLAZE_KEY; // Obtained from your B2 account page
|
|
||||||
$credentials = base64_encode($account_id . ":" . $application_key);
|
|
||||||
$url = "https://api.backblazeb2.com/b2api/v1/b2_authorize_account";
|
|
||||||
|
|
||||||
$session = curl_init($url);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Accept: application/json";
|
|
||||||
$headers[] = "Authorization: Basic " . $credentials;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers); // Add headers
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_HTTPGET, true); // HTTP GET
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session);
|
|
||||||
curl_close ($session);
|
|
||||||
$data = json_decode($server_output,true);
|
|
||||||
|
|
||||||
$this->token = $data['authorizationToken'];
|
|
||||||
$this->apiURL = $data['apiUrl'];
|
|
||||||
$this->dlURL = $data['downloadUrl'];
|
|
||||||
}
|
|
||||||
|
|
||||||
function upload($hash)
|
|
||||||
{
|
|
||||||
if(!$this->ulURL)
|
|
||||||
$this->getUploadInfo();
|
|
||||||
$file_name = $hash;
|
|
||||||
$my_file = ROOT.DS.'upload'.DS.$hash.DS.$hash;
|
|
||||||
$handle = fopen($my_file, 'r');
|
|
||||||
$read_file = fread($handle,filesize($my_file));
|
|
||||||
|
|
||||||
$upload_url = $this->ulURL; // Provided by b2_get_upload_url
|
|
||||||
$upload_auth_token = $this->ulToken; // Provided by b2_get_upload_url
|
|
||||||
$bucket_id = $this->bucket; // The ID of the bucket
|
|
||||||
$content_type = "text/plain";
|
|
||||||
$sha1_of_file_data = sha1_file($my_file);
|
|
||||||
|
|
||||||
$session = curl_init($upload_url);
|
|
||||||
|
|
||||||
// Add read file as post field
|
|
||||||
curl_setopt($session, CURLOPT_POSTFIELDS, $read_file);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Authorization: " . $upload_auth_token;
|
|
||||||
$headers[] = "X-Bz-File-Name: " . $file_name;
|
|
||||||
$headers[] = "Content-Type: " . $content_type;
|
|
||||||
$headers[] = "X-Bz-Content-Sha1: " . $sha1_of_file_data;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_POST, true); // HTTP POST
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session); // Let's do this!
|
|
||||||
curl_close ($session); // Clean up
|
|
||||||
//var_dump($server_output); // Tell me about the rabbits, George!
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUploadInfo()
|
|
||||||
{
|
|
||||||
$api_url = $this->apiURL; // From b2_authorize_account call
|
|
||||||
$auth_token = $this->token; // From b2_authorize_account call
|
|
||||||
$bucket_id = $this->bucket; // The ID of the bucket you want to upload to
|
|
||||||
|
|
||||||
$session = curl_init($api_url . "/b2api/v1/b2_get_upload_url");
|
|
||||||
|
|
||||||
// Add post fields
|
|
||||||
$data = array("bucketId" => $bucket_id);
|
|
||||||
$post_fields = json_encode($data);
|
|
||||||
curl_setopt($session, CURLOPT_POSTFIELDS, $post_fields);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Authorization: " . $auth_token;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_POST, true); // HTTP POST
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session); // Let's do this!
|
|
||||||
curl_close ($session); // Clean up
|
|
||||||
$data = json_decode($server_output,true); // Tell me about the rabbits, George!
|
|
||||||
$this->ulURL = $data['uploadUrl'];
|
|
||||||
//var_dump("upload url at load: ".$data['uploadUrl']);
|
|
||||||
$this->ulToken = $data['authorizationToken'];
|
|
||||||
|
|
||||||
//var_dump($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
function download($hash)
|
|
||||||
{
|
|
||||||
if(file_exists(ROOT.DS.'upload'.DS.$hash.DS.$hash)) return false;
|
|
||||||
$download_url = $this->dlURL; // From b2_authorize_account call
|
|
||||||
$bucket_name = $this->bucket_name; // The NAME of the bucket you want to download from
|
|
||||||
$file_name = $hash; // The name of the file you want to download
|
|
||||||
$auth_token = $this->token; // From b2_authorize_account call
|
|
||||||
$uri = $download_url . "/file/" . $bucket_name . "/" . $file_name;
|
|
||||||
|
|
||||||
$session = curl_init($uri);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Authorization: " . $auth_token;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_HTTPGET, true); // HTTP POST
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session); // Let's do this!
|
|
||||||
curl_close ($session); // Clean up
|
|
||||||
$is_binary = preg_match('~[^\x20-\x7E\t\r\n]~', $server_output); // Tell me about the rabbits, George!
|
|
||||||
if(!$is_binary) return false;
|
|
||||||
|
|
||||||
mkdir(ROOT.DS.'upload'.DS.$hash);
|
|
||||||
$file = ROOT.DS.'upload'.DS.$hash.DS.$hash;
|
|
||||||
|
|
||||||
file_put_contents($file, $server_output);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function bucketIdToName($bucket)
|
|
||||||
{
|
|
||||||
$api_url = $this->apiURL; // From b2_authorize_account call
|
|
||||||
$auth_token = $this->token; // From b2_authorize_account call
|
|
||||||
$account_id = BACKBLAZE_ID;
|
|
||||||
|
|
||||||
$session = curl_init($api_url . "/b2api/v1/b2_list_buckets");
|
|
||||||
|
|
||||||
// Add post fields
|
|
||||||
$data = array("accountId" => $account_id);
|
|
||||||
$post_fields = json_encode($data);
|
|
||||||
curl_setopt($session, CURLOPT_POSTFIELDS, $post_fields);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Authorization: " . $auth_token;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_POST, true); // HTTP POST
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session); // Let's do this!
|
|
||||||
curl_close ($session); // Clean up
|
|
||||||
$data = json_decode($server_output,true); // Tell me about the rabbits, George!
|
|
||||||
if(is_array($data))
|
|
||||||
foreach($data['buckets'] as $bucket)
|
|
||||||
{
|
|
||||||
if($bucket['bucketId']==$this->bucket) return $bucket['bucketName'];
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteFile($hash,$file_id=false)
|
|
||||||
{
|
|
||||||
$api_url = $this->apiURL; // From b2_authorize_account call
|
|
||||||
$auth_token = $this->token; // From b2_authorize_account call
|
|
||||||
$file_name = $hash; // The file name of the file you want to delete
|
|
||||||
if(!$file_id)
|
|
||||||
$file_id = $this->fileExistsInBucket($hash);
|
|
||||||
|
|
||||||
$session = curl_init($api_url . "/b2api/v1/b2_delete_file_version");
|
|
||||||
|
|
||||||
// Add post fields
|
|
||||||
$data = array("fileId" => $file_id, "fileName" => $file_name);
|
|
||||||
$post_fields = json_encode($data);
|
|
||||||
curl_setopt($session, CURLOPT_POSTFIELDS, $post_fields);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Authorization: " . $auth_token;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_POST, true); // HTTP POST
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session); // Let's do this!
|
|
||||||
curl_close ($session); // Clean up
|
|
||||||
}
|
|
||||||
|
|
||||||
function fileExistsInBucket($hash)
|
|
||||||
{
|
|
||||||
$api_url = $this->apiURL; // From b2_authorize_account call
|
|
||||||
$auth_token = $this->token; // From b2_authorize_account call
|
|
||||||
$bucket_id = $this->bucket; // The ID of the bucket
|
|
||||||
|
|
||||||
$session = curl_init($api_url . "/b2api/v1/b2_list_file_names");
|
|
||||||
|
|
||||||
// Add post fields
|
|
||||||
$data = array("bucketId" => $bucket_id,
|
|
||||||
"startFileName" => $hash);
|
|
||||||
$post_fields = json_encode($data);
|
|
||||||
curl_setopt($session, CURLOPT_POSTFIELDS, $post_fields);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Authorization: " . $auth_token;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_POST, true); // HTTP POST
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session); // Let's do this!
|
|
||||||
curl_close ($session); // Clean up
|
|
||||||
$data = json_decode($server_output,true);
|
|
||||||
|
|
||||||
foreach($data['files'] as $file)
|
|
||||||
{
|
|
||||||
//it's either the first one or it doesn't exist
|
|
||||||
if($file['fileName']==$hash)
|
|
||||||
return $file['fileId'];
|
|
||||||
else return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getAllFilesInBucket($startFileName=null)
|
|
||||||
{
|
|
||||||
$api_url = $this->apiURL; // From b2_authorize_account call
|
|
||||||
$auth_token = $this->token; // From b2_authorize_account call
|
|
||||||
$bucket_id = $this->bucket; // The ID of the bucket
|
|
||||||
|
|
||||||
$session = curl_init($api_url . "/b2api/v1/b2_list_file_names");
|
|
||||||
|
|
||||||
// Add post fields
|
|
||||||
$data = array("bucketId" => $bucket_id,
|
|
||||||
"startFileName" => $startFileName);
|
|
||||||
$post_fields = json_encode($data);
|
|
||||||
curl_setopt($session, CURLOPT_POSTFIELDS, $post_fields);
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "Authorization: " . $auth_token;
|
|
||||||
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
|
|
||||||
curl_setopt($session, CURLOPT_POST, true); // HTTP POST
|
|
||||||
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Receive server response
|
|
||||||
$server_output = curl_exec($session); // Let's do this!
|
|
||||||
curl_close ($session); // Clean up
|
|
||||||
$data = json_decode($server_output,true);
|
|
||||||
|
|
||||||
foreach($data['files'] as $file)
|
|
||||||
{
|
|
||||||
$name = $file['fileName'];
|
|
||||||
$id = $file['fileId'];
|
|
||||||
$this->files[$name] = $id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($data['nextFileName'])
|
|
||||||
$this->getAllFilesInBucket($data['nextFileName']);
|
|
||||||
|
|
||||||
return $this->files;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class Crypto
|
|
||||||
{
|
|
||||||
function encrypt($inputfile,$outputfile)
|
|
||||||
{
|
|
||||||
if(!file_exists($inputfile)) return;
|
|
||||||
$data = base64_encode(file_get_contents($inputfile));
|
|
||||||
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
|
|
||||||
$ciphertext = sodium_crypto_secretbox($data, $nonce, ENCRYPTION_KEY);
|
|
||||||
$encoded = base64_encode($nonce . $ciphertext);
|
|
||||||
file_put_contents($outputfile,$encoded);
|
|
||||||
}
|
|
||||||
|
|
||||||
function decrypt($inputfile,$outputfile)
|
|
||||||
{
|
|
||||||
if(!file_exists($inputfile)) return;
|
|
||||||
$decoded = base64_decode(file_get_contents($inputfile));
|
|
||||||
$nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
|
|
||||||
$ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
|
|
||||||
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, ENCRYPTION_KEY);
|
|
||||||
file_put_contents($outputfile,base64_decode($plaintext));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,220 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class Filter
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
|
|
||||||
private $image;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Directory for image assets.
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
|
|
||||||
private $assetDirectory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* run constructor
|
|
||||||
* @param resource &$image GD image resource
|
|
||||||
*/
|
|
||||||
|
|
||||||
public function __construct(&$image)
|
|
||||||
{
|
|
||||||
$this->image = $image;
|
|
||||||
|
|
||||||
$this->assetDirectory = dirname(dirname(dirname(__FILE__))) . '/assets/';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current image resource
|
|
||||||
*
|
|
||||||
* @return resource
|
|
||||||
*/
|
|
||||||
|
|
||||||
public function getImage()
|
|
||||||
{
|
|
||||||
return $this->image;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function bubbles()
|
|
||||||
{
|
|
||||||
$dest = imagecreatefromjpeg($this->assetDirectory . "pattern4.jpg");
|
|
||||||
|
|
||||||
$x = imagesx($this->image);
|
|
||||||
$y = imagesy($this->image);
|
|
||||||
|
|
||||||
$x2 = imagesx($dest);
|
|
||||||
$y2 = imagesy($dest);
|
|
||||||
|
|
||||||
$thumb = imagecreatetruecolor($x, $y);
|
|
||||||
imagecopyresampled($thumb, $dest, 0, 0, 0, 0, $x, $y, $x2, $y2);
|
|
||||||
|
|
||||||
imagecopymerge($this->image, $thumb, 0, 0, 0, 0, $x, $y, 20);
|
|
||||||
imagefilter($this->image, IMG_FILTER_BRIGHTNESS, 40);
|
|
||||||
imagefilter($this->image, IMG_FILTER_CONTRAST, -10);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function colorise()
|
|
||||||
{
|
|
||||||
$dest = imagecreatefromjpeg($this->assetDirectory . "pattern5.jpg");
|
|
||||||
|
|
||||||
$x = imagesx($this->image);
|
|
||||||
$y = imagesy($this->image);
|
|
||||||
|
|
||||||
$x2 = imagesx($dest);
|
|
||||||
$y2 = imagesy($dest);
|
|
||||||
|
|
||||||
$thumb = imagecreatetruecolor($x, $y);
|
|
||||||
imagecopyresampled($thumb, $dest, 0, 0, 0, 0, $x, $y, $x2, $y2);
|
|
||||||
|
|
||||||
imagecopymerge($this->image, $thumb, 0, 0, 0, 0, $x, $y, 40);
|
|
||||||
imagefilter($this->image, IMG_FILTER_CONTRAST, -25);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sepia()
|
|
||||||
{
|
|
||||||
imagefilter($this->image, IMG_FILTER_GRAYSCALE);
|
|
||||||
imagefilter($this->image, IMG_FILTER_COLORIZE, 100, 50, 0);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sharpen()
|
|
||||||
{
|
|
||||||
$gaussian = array(
|
|
||||||
array(1.0, 1.0, 1.0),
|
|
||||||
array(1.0, -7.0, 1.0),
|
|
||||||
array(1.0, 1.0, 1.0)
|
|
||||||
);
|
|
||||||
imageconvolution($this->image, $gaussian, 1, 4);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function emboss()
|
|
||||||
{
|
|
||||||
$gaussian = array(
|
|
||||||
array(-2.0, -1.0, 0.0),
|
|
||||||
array(-1.0, 1.0, 1.0),
|
|
||||||
array(0.0, 1.0, 2.0)
|
|
||||||
);
|
|
||||||
|
|
||||||
imageconvolution($this->image, $gaussian, 1, 5);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function cool()
|
|
||||||
{
|
|
||||||
imagefilter($this->image, IMG_FILTER_MEAN_REMOVAL);
|
|
||||||
imagefilter($this->image, IMG_FILTER_CONTRAST, -50);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function old2()
|
|
||||||
{
|
|
||||||
$dest = imagecreatefromjpeg($this->assetDirectory . "pattern1.jpg");
|
|
||||||
|
|
||||||
$x = imagesx($this->image);
|
|
||||||
$y = imagesy($this->image);
|
|
||||||
|
|
||||||
$x2 = imagesx($dest);
|
|
||||||
$y2 = imagesy($dest);
|
|
||||||
|
|
||||||
$thumb = imagecreatetruecolor($x, $y);
|
|
||||||
imagecopyresampled($thumb, $dest, 0, 0, 0, 0, $x, $y, $x2, $y2);
|
|
||||||
|
|
||||||
imagecopymerge($this->image, $thumb, 0, 0, 0, 0, $x, $y, 40);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function old3()
|
|
||||||
{
|
|
||||||
imagefilter($this->image, IMG_FILTER_CONTRAST, -30);
|
|
||||||
|
|
||||||
$dest = imagecreatefromjpeg($this->assetDirectory . "pattern3.jpg");
|
|
||||||
|
|
||||||
$x = imagesx($this->image);
|
|
||||||
$y = imagesy($this->image);
|
|
||||||
|
|
||||||
$x2 = imagesx($dest);
|
|
||||||
$y2 = imagesy($dest);
|
|
||||||
|
|
||||||
$thumb = imagecreatetruecolor($x, $y);
|
|
||||||
imagecopyresampled($thumb, $dest, 0, 0, 0, 0, $x, $y, $x2, $y2);
|
|
||||||
|
|
||||||
imagecopymerge($this->image, $thumb, 0, 0, 0, 0, $x, $y, 50);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function old()
|
|
||||||
{
|
|
||||||
$dest = imagecreatefromjpeg($this->assetDirectory . "bg1.jpg");
|
|
||||||
|
|
||||||
$x = imagesx($this->image);
|
|
||||||
$y = imagesy($this->image);
|
|
||||||
|
|
||||||
$x2 = imagesx($dest);
|
|
||||||
$y2 = imagesy($dest);
|
|
||||||
|
|
||||||
$thumb = imagecreatetruecolor($x, $y);
|
|
||||||
imagecopyresampled($thumb, $dest, 0, 0, 0, 0, $x, $y, $x2, $y2);
|
|
||||||
|
|
||||||
imagecopymerge($this->image, $thumb, 0, 0, 0, 0, $x, $y, 30);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function light()
|
|
||||||
{
|
|
||||||
imagefilter($this->image, IMG_FILTER_BRIGHTNESS, 10);
|
|
||||||
imagefilter($this->image, IMG_FILTER_COLORIZE, 100, 50, 0, 10);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function aqua()
|
|
||||||
{
|
|
||||||
imagefilter($this->image, IMG_FILTER_COLORIZE, 0, 70, 0, 30);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fuzzy()
|
|
||||||
{
|
|
||||||
$gaussian = array(
|
|
||||||
array(1.0, 1.0, 1.0),
|
|
||||||
array(1.0, 1.0, 1.0),
|
|
||||||
array(1.0, 1.0, 1.0)
|
|
||||||
);
|
|
||||||
|
|
||||||
imageconvolution($this->image, $gaussian, 9, 20);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function boost()
|
|
||||||
{
|
|
||||||
imagefilter($this->image, IMG_FILTER_CONTRAST, -35);
|
|
||||||
imagefilter($this->image, IMG_FILTER_BRIGHTNESS, 10);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function gray()
|
|
||||||
{
|
|
||||||
imagefilter($this->image, IMG_FILTER_CONTRAST, -60);
|
|
||||||
imagefilter($this->image, IMG_FILTER_GRAYSCALE);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class HTML {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Characters that will pass:
|
|
||||||
* a-z
|
|
||||||
* A-Z
|
|
||||||
* 0-9
|
|
||||||
* .
|
|
||||||
* _
|
|
||||||
* -
|
|
||||||
*/
|
|
||||||
function sanatizeString($string)
|
|
||||||
{
|
|
||||||
return preg_replace("/[^a-zA-Z0-9._\-]+/", "", $string);
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderSize($byte)
|
|
||||||
{
|
|
||||||
if($byte < 1024) {
|
|
||||||
$result = round($byte, 2). ' Byte';
|
|
||||||
}elseif($byte < pow(1024, 2)) {
|
|
||||||
$result = round($byte/1024, 2).' KB';
|
|
||||||
}elseif($byte >= pow(1024, 2) and $byte < pow(1024, 3)) {
|
|
||||||
$result = round($byte/pow(1024, 2), 2).' MB';
|
|
||||||
}elseif($byte >= pow(1024, 3) and $byte < pow(1024, 4)) {
|
|
||||||
$result = round($byte/pow(1024, 3), 2).' GB';
|
|
||||||
}elseif($byte >= pow(1024, 4) and $byte < pow(1024, 5)) {
|
|
||||||
$result = round($byte/pow(1024, 4), 2).' TB';
|
|
||||||
}elseif($byte >= pow(1024, 5) and $byte < pow(1024, 6)) {
|
|
||||||
$result = round($byte/pow(1024, 5), 2).' PB';
|
|
||||||
}elseif($byte >= pow(1024, 6) and $byte < pow(1024, 7)) {
|
|
||||||
$result = round($byte/pow(1024, 6), 2).' EB';
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,215 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class Image
|
|
||||||
{
|
|
||||||
function rotate(&$im,$direction)
|
|
||||||
{
|
|
||||||
switch($direction)
|
|
||||||
{
|
|
||||||
case 'upside': $angle = 180;break;
|
|
||||||
case 'left': $angle = 90;break;
|
|
||||||
case 'right': $angle = -90;break;
|
|
||||||
default: $angle = 0;break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$im = imagerotate($im,$angle,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function forceResize(&$img,$size)
|
|
||||||
{
|
|
||||||
$pm = new PictshareModel();
|
|
||||||
|
|
||||||
$sd = $pm->sizeStringToWidthHeight($size);
|
|
||||||
$maxwidth = $sd['width'];
|
|
||||||
$maxheight = $sd['height'];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$width = imagesx($img);
|
|
||||||
$height = imagesy($img);
|
|
||||||
|
|
||||||
$maxwidth = ($maxwidth>$width?$width:$maxwidth);
|
|
||||||
$maxheight = ($maxheight>$height?$height:$maxheight);
|
|
||||||
|
|
||||||
|
|
||||||
$dst_img = imagecreatetruecolor($maxwidth, $maxheight);
|
|
||||||
$src_img = $img;
|
|
||||||
|
|
||||||
$palsize = ImageColorsTotal($img);
|
|
||||||
for ($i = 0; $i < $palsize; $i++)
|
|
||||||
{
|
|
||||||
$colors = ImageColorsForIndex($img, $i);
|
|
||||||
ImageColorAllocate($dst_img, $colors['red'], $colors['green'], $colors['blue']);
|
|
||||||
}
|
|
||||||
|
|
||||||
imagefill($dst_img, 0, 0, IMG_COLOR_TRANSPARENT);
|
|
||||||
imagesavealpha($dst_img,true);
|
|
||||||
imagealphablending($dst_img, true);
|
|
||||||
|
|
||||||
$width_new = $height * $maxwidth / $maxheight;
|
|
||||||
$height_new = $width * $maxheight / $maxwidth;
|
|
||||||
//if the new width is greater than the actual width of the image, then the height is too large and the rest cut off, or vice versa
|
|
||||||
if($width_new > $width){
|
|
||||||
//cut point by height
|
|
||||||
$h_point = (($height - $height_new) / 2);
|
|
||||||
//copy image
|
|
||||||
imagecopyresampled($dst_img, $src_img, 0, 0, 0, $h_point, $maxwidth, $maxheight, $width, $height_new);
|
|
||||||
}else{
|
|
||||||
//cut point by width
|
|
||||||
$w_point = (($width - $width_new) / 2);
|
|
||||||
imagecopyresampled($dst_img, $src_img, 0, 0, $w_point, 0, $maxwidth, $maxheight, $width_new, $height);
|
|
||||||
}
|
|
||||||
|
|
||||||
$img = $dst_img;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* From: https://stackoverflow.com/questions/4590441/php-thumbnail-image-resizing-with-proportions
|
|
||||||
*/
|
|
||||||
function resize(&$img,$size)
|
|
||||||
{
|
|
||||||
$pm = new PictshareModel();
|
|
||||||
|
|
||||||
$sd = $pm->sizeStringToWidthHeight($size);
|
|
||||||
$maxwidth = $sd['width'];
|
|
||||||
$maxheight = $sd['height'];
|
|
||||||
|
|
||||||
$width = imagesx($img);
|
|
||||||
$height = imagesy($img);
|
|
||||||
|
|
||||||
if(!ALLOW_BLOATING)
|
|
||||||
{
|
|
||||||
if($maxwidth>$width)$maxwidth = $width;
|
|
||||||
if($maxheight>$height)$maxheight = $height;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($height > $width)
|
|
||||||
{
|
|
||||||
$ratio = $maxheight / $height;
|
|
||||||
$newheight = $maxheight;
|
|
||||||
$newwidth = $width * $ratio;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$ratio = $maxwidth / $width;
|
|
||||||
$newwidth = $maxwidth;
|
|
||||||
$newheight = $height * $ratio;
|
|
||||||
}
|
|
||||||
|
|
||||||
$newimg = imagecreatetruecolor($newwidth,$newheight);
|
|
||||||
|
|
||||||
$palsize = ImageColorsTotal($img);
|
|
||||||
for ($i = 0; $i < $palsize; $i++)
|
|
||||||
{
|
|
||||||
$colors = ImageColorsForIndex($img, $i);
|
|
||||||
ImageColorAllocate($newimg, $colors['red'], $colors['green'], $colors['blue']);
|
|
||||||
}
|
|
||||||
|
|
||||||
imagefill($newimg, 0, 0, IMG_COLOR_TRANSPARENT);
|
|
||||||
imagesavealpha($newimg,true);
|
|
||||||
imagealphablending($newimg, true);
|
|
||||||
|
|
||||||
imagecopyresampled($newimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
|
|
||||||
|
|
||||||
$img = $newimg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Strong Blur
|
|
||||||
*
|
|
||||||
* @param resource $gdImageResource
|
|
||||||
* @param int $blurFactor optional
|
|
||||||
* This is the strength of the blur
|
|
||||||
* 0 = no blur, 3 = default, anything over 5 is extremely blurred
|
|
||||||
* @return GD image resource
|
|
||||||
* @author Martijn Frazer, idea based on http://stackoverflow.com/a/20264482
|
|
||||||
*/
|
|
||||||
function blur(&$gdImageResource, $blurFactor = 3)
|
|
||||||
{
|
|
||||||
if(!$blurFactor)
|
|
||||||
$blurFactor = 3;
|
|
||||||
if($blurFactor>6)
|
|
||||||
$blurFactor = 6;
|
|
||||||
else if($blurFactor<0)
|
|
||||||
$blurFactor = 0;
|
|
||||||
// blurFactor has to be an integer
|
|
||||||
$blurFactor = round($blurFactor);
|
|
||||||
|
|
||||||
$originalWidth = imagesx($gdImageResource);
|
|
||||||
$originalHeight = imagesy($gdImageResource);
|
|
||||||
|
|
||||||
$smallestWidth = ceil($originalWidth * pow(0.5, $blurFactor));
|
|
||||||
$smallestHeight = ceil($originalHeight * pow(0.5, $blurFactor));
|
|
||||||
|
|
||||||
// for the first run, the previous image is the original input
|
|
||||||
$prevImage = $gdImageResource;
|
|
||||||
$prevWidth = $originalWidth;
|
|
||||||
$prevHeight = $originalHeight;
|
|
||||||
|
|
||||||
// scale way down and gradually scale back up, blurring all the way
|
|
||||||
for($i = 0; $i < $blurFactor; $i += 1)
|
|
||||||
{
|
|
||||||
// determine dimensions of next image
|
|
||||||
$nextWidth = $smallestWidth * pow(2, $i);
|
|
||||||
$nextHeight = $smallestHeight * pow(2, $i);
|
|
||||||
|
|
||||||
// resize previous image to next size
|
|
||||||
$nextImage = imagecreatetruecolor($nextWidth, $nextHeight);
|
|
||||||
imagecopyresized($nextImage, $prevImage, 0, 0, 0, 0,
|
|
||||||
$nextWidth, $nextHeight, $prevWidth, $prevHeight);
|
|
||||||
|
|
||||||
// apply blur filter
|
|
||||||
imagefilter($nextImage, IMG_FILTER_GAUSSIAN_BLUR);
|
|
||||||
|
|
||||||
// now the new image becomes the previous image for the next step
|
|
||||||
$prevImage = $nextImage;
|
|
||||||
$prevWidth = $nextWidth;
|
|
||||||
$prevHeight = $nextHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// scale back to original size and blur one more time
|
|
||||||
imagecopyresized($gdImageResource, $nextImage,
|
|
||||||
0, 0, 0, 0, $originalWidth, $originalHeight, $nextWidth, $nextHeight);
|
|
||||||
imagefilter($gdImageResource, IMG_FILTER_GAUSSIAN_BLUR);
|
|
||||||
|
|
||||||
// clean up
|
|
||||||
imagedestroy($prevImage);
|
|
||||||
|
|
||||||
// return result
|
|
||||||
return $gdImageResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
function filter(&$im,$vars)
|
|
||||||
{
|
|
||||||
|
|
||||||
foreach($vars as $var)
|
|
||||||
{
|
|
||||||
if(strpos($var,'_'))
|
|
||||||
{
|
|
||||||
$a = explode('_',$var);
|
|
||||||
$var = $a[0];
|
|
||||||
$val = $a[1];
|
|
||||||
}
|
|
||||||
switch($var)
|
|
||||||
{
|
|
||||||
case 'negative': imagefilter($im,IMG_FILTER_NEGATE); break;
|
|
||||||
case 'grayscale': imagefilter($im,IMG_FILTER_GRAYSCALE); break;
|
|
||||||
case 'brightness': imagefilter($im,IMG_FILTER_BRIGHTNESS,$val); break;
|
|
||||||
case 'edgedetect': imagefilter($im,IMG_FILTER_EDGEDETECT); break;
|
|
||||||
case 'smooth': imagefilter($im,IMG_FILTER_SMOOTH,$val); break;
|
|
||||||
case 'contrast': imagefilter($im,IMG_FILTER_CONTRAST,$val); break;
|
|
||||||
case 'pixelate': imagefilter($im,IMG_FILTER_PIXELATE,$val); break;
|
|
||||||
case 'blur': $this->blur($im,$val); break;
|
|
||||||
case 'sepia': (new Filter($im))->sepia()->getImage();break;
|
|
||||||
case 'sharpen':(new Filter($im))->sharpen()->getImage();break;
|
|
||||||
case 'emboss':(new Filter($im))->emboss()->getImage();break;
|
|
||||||
case 'cool':(new Filter($im))->cool()->getImage();break;
|
|
||||||
case 'light':(new Filter($im))->light()->getImage();break;
|
|
||||||
case 'aqua':(new Filter($im))->aqua()->getImage();break;
|
|
||||||
case 'fuzzy':(new Filter($im))->fuzzy()->getImage();break;
|
|
||||||
case 'boost':(new Filter($im))->boost()->getImage();break;
|
|
||||||
case 'gray':(new Filter($im))->gray()->getImage();break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Model class for all models
|
|
||||||
*
|
|
||||||
* @author Christian
|
|
||||||
*/
|
|
||||||
class Model// extends SQLQuery
|
|
||||||
{
|
|
||||||
protected $_model;
|
|
||||||
|
|
||||||
function __construct($id=0)
|
|
||||||
{
|
|
||||||
$this->_model = substr(get_class($this),0,-5);
|
|
||||||
$this->_table = strtolower($this->_model);
|
|
||||||
$this->_id = $id;
|
|
||||||
}
|
|
||||||
|
|
||||||
function __destruct()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
29
cli.php
29
cli.php
@@ -1,29 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
define('DS', DIRECTORY_SEPARATOR);
|
|
||||||
define('ROOT', dirname(__FILE__));
|
|
||||||
define('CLI', true);
|
|
||||||
define('PATH',((dirname($_SERVER['PHP_SELF'])=='/'||dirname($_SERVER['PHP_SELF'])=='\\'||dirname($_SERVER['PHP_SELF'])=='/index.php'||dirname($_SERVER['PHP_SELF'])=='/backend.php')?'/':dirname($_SERVER['PHP_SELF']).'/'));
|
|
||||||
|
|
||||||
if(!file_exists(ROOT.DS.'inc'.DS.'config.inc.php'))
|
|
||||||
exit('Rename /inc/example.config.inc.php to /inc/config.inc.php first!');
|
|
||||||
include_once(ROOT.DS.'inc'.DS.'config.inc.php');
|
|
||||||
|
|
||||||
if(FORCE_DOMAIN)
|
|
||||||
define('DOMAINPATH',FORCE_DOMAIN);
|
|
||||||
else
|
|
||||||
define('DOMAINPATH',(isset($_SERVER['HTTPS'])?'https':'http').'://'.$_SERVER['HTTP_HOST']);
|
|
||||||
error_reporting(E_ALL & ~E_NOTICE);
|
|
||||||
if(SHOW_ERRORS)
|
|
||||||
ini_set('display_errors','On');
|
|
||||||
else ini_set('display_errors','Off');
|
|
||||||
include_once(ROOT.DS.'inc'.DS.'core.php');
|
|
||||||
|
|
||||||
$action = $argv[2];
|
|
||||||
$params = $argv;
|
|
||||||
|
|
||||||
//lose first param (self name)
|
|
||||||
array_shift($params);
|
|
||||||
|
|
||||||
$model = new PictshareModel();
|
|
||||||
$model->backend($params);
|
|
||||||
95
controllers/image/image.controller.php
Normal file
95
controllers/image/image.controller.php
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Todo:
|
||||||
|
* - Resizing
|
||||||
|
* - Filters
|
||||||
|
* - Conversion gif to mp4
|
||||||
|
* - Conversion jpg,png to webp
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ImageController
|
||||||
|
{
|
||||||
|
//returns all extensions registered by this type of content
|
||||||
|
public function getRegisteredExtensions(){return array('png','bmp','gif','jpg','jpeg','x-png','ico','webp');}
|
||||||
|
|
||||||
|
public function handleUpload($tmpfile,$hash=false)
|
||||||
|
{
|
||||||
|
$type = exif_imagetype($tmpfile); //http://www.php.net/manual/en/function.exif-imagetype.php
|
||||||
|
switch($type)
|
||||||
|
{
|
||||||
|
case 1: $ext = 'gif';break; //gif
|
||||||
|
case 3: $ext = 'png';break; // png
|
||||||
|
case 6: $ext = 'bmp';break; // bmp
|
||||||
|
case 17: $ext = 'ico';break; // ico
|
||||||
|
case 18: $ext = 'webp';break; // webp
|
||||||
|
|
||||||
|
case 2: //we clean up exif data of JPGs so GPS and other data is removed
|
||||||
|
$res = imagecreatefromjpeg($tmpfile);
|
||||||
|
imagejpeg($res, $tmpfile, (defined('JPEG_COMPRESSION')?JPEG_COMPRESSION:90));
|
||||||
|
$ext = 'jpg';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return array('status'=>'err','reason'=>'Not a valid image');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($hash===false)
|
||||||
|
{
|
||||||
|
$hash = getNewHash($ext,6);
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir(ROOT.DS.'data'.DS.$hash);
|
||||||
|
$file = ROOT.DS.'data'.DS.$hash.DS.$hash;
|
||||||
|
|
||||||
|
move_uploaded_file($tmpfile, $file);
|
||||||
|
|
||||||
|
if(defined('ALT_FOLDER') && ALT_FOLDER)
|
||||||
|
{
|
||||||
|
$altname=ALT_FOLDER.DS.$hash;
|
||||||
|
if(!file_exists($altname) && is_dir(ALT_FOLDER))
|
||||||
|
{
|
||||||
|
copy($file,$altname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(defined('LOG_UPLOADER') && LOG_UPLOADER)
|
||||||
|
{
|
||||||
|
$fh = fopen(ROOT.DS.'data'.DS.'uploads.txt', 'a');
|
||||||
|
fwrite($fh, time().';'.$url.';'.$hash.';'.getUserIP()."\n");
|
||||||
|
fclose($fh);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array('status'=>'ok','hash'=>$hash,'url'=>URL.$hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleHash($hash,$url)
|
||||||
|
{
|
||||||
|
$path = ROOT.DS.'data'.DS.$hash.DS.$hash;
|
||||||
|
|
||||||
|
$type = getExtensionOfFilename($hash);
|
||||||
|
switch($type)
|
||||||
|
{
|
||||||
|
case 'jpeg':
|
||||||
|
case 'jpg':
|
||||||
|
header ("Content-type: image/jpeg");
|
||||||
|
readfile($path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'png':
|
||||||
|
header ("Content-type: image/png");
|
||||||
|
readfile($path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'gif':
|
||||||
|
header ("Content-type: image/gif");
|
||||||
|
readfile($path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'webp':
|
||||||
|
header ("Content-type: image/webp");
|
||||||
|
readfile($path);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
70
controllers/text/text.controller.php
Normal file
70
controllers/text/text.controller.php
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class TextController
|
||||||
|
{
|
||||||
|
//returns all extensions registered by this type of content
|
||||||
|
public function getRegisteredExtensions(){return array('txt');}
|
||||||
|
|
||||||
|
public function handleHash($hash,$url)
|
||||||
|
{
|
||||||
|
$path = ROOT.DS.'data'.DS.$hash.DS.$hash;
|
||||||
|
|
||||||
|
if(in_array('raw',$url))
|
||||||
|
{
|
||||||
|
header('Content-Type: text/plain; charset=utf-8');
|
||||||
|
echo file_get_contents($path);
|
||||||
|
}
|
||||||
|
else if(in_array('download',$url))
|
||||||
|
{
|
||||||
|
if (file_exists($path)) {
|
||||||
|
header('Content-Description: File Transfer');
|
||||||
|
header('Content-Type: application/octet-stream');
|
||||||
|
header('Content-Disposition: attachment; filename="'.basename($path).'"');
|
||||||
|
header('Expires: 0');
|
||||||
|
header('Cache-Control: must-revalidate');
|
||||||
|
header('Pragma: public');
|
||||||
|
header('Content-Length: ' . filesize($path));
|
||||||
|
readfile($path);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
renderTemplate('text',array('hash'=>$hash,'content'=>htmlentities(file_get_contents($path))));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleUpload($tmpfile,$hash=false)
|
||||||
|
{
|
||||||
|
if($hash===false)
|
||||||
|
{
|
||||||
|
$hash = getNewHash('txt',6);
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir(ROOT.DS.'data'.DS.$hash);
|
||||||
|
$file = ROOT.DS.'data'.DS.$hash.DS.$hash;
|
||||||
|
|
||||||
|
move_uploaded_file($tmpfile, $file);
|
||||||
|
|
||||||
|
if(defined('ALT_FOLDER') && ALT_FOLDER)
|
||||||
|
{
|
||||||
|
$altname=ALT_FOLDER.DS.$hash;
|
||||||
|
if(!file_exists($altname) && is_dir(ALT_FOLDER))
|
||||||
|
{
|
||||||
|
copy($file,$altname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(defined('LOG_UPLOADER') && LOG_UPLOADER)
|
||||||
|
{
|
||||||
|
$fh = fopen(ROOT.DS.'data'.DS.'uploads.txt', 'a');
|
||||||
|
fwrite($fh, time().';'.$url.';'.$hash.';'.getUserIP()."\n");
|
||||||
|
fclose($fh);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array('status'=>'ok','hash'=>$hash,'url'=>URL.$hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTypeOfText($hash)
|
||||||
|
{
|
||||||
|
return file_get_contents(ROOT.DS.'data'.DS.$hash.DS.'type');
|
||||||
|
}
|
||||||
|
}
|
||||||
7
controllers/url/url.controller.php
Normal file
7
controllers/url/url.controller.php
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class UrlController
|
||||||
|
{
|
||||||
|
//returns all extensions registered by this type of content
|
||||||
|
public function getRegisteredExtensions(){return array('url');}
|
||||||
|
}
|
||||||
186
controllers/video/video.controller.php
Normal file
186
controllers/video/video.controller.php
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class VideoController
|
||||||
|
{
|
||||||
|
//returns all extensions registered by this type of content
|
||||||
|
public function getRegisteredExtensions(){return array('mp4','ogg','webm');}
|
||||||
|
|
||||||
|
public function handleHash($hash,$url)
|
||||||
|
{
|
||||||
|
$path = ROOT.DS.'data'.DS.$hash.DS.$hash;
|
||||||
|
|
||||||
|
//@todo: - resize by changing $path
|
||||||
|
// - preview images
|
||||||
|
|
||||||
|
if(in_array('raw',$url))
|
||||||
|
$this->serveMP4($path,$hash);
|
||||||
|
else if(in_array('download',$url))
|
||||||
|
{
|
||||||
|
if (file_exists($path)) {
|
||||||
|
header('Content-Description: File Transfer');
|
||||||
|
header('Content-Type: application/octet-stream');
|
||||||
|
header('Content-Disposition: attachment; filename="'.basename($path).'"');
|
||||||
|
header('Expires: 0');
|
||||||
|
header('Cache-Control: must-revalidate');
|
||||||
|
header('Pragma: public');
|
||||||
|
header('Content-Length: ' . filesize($path));
|
||||||
|
readfile($path);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$data = array('url'=>implode('/',$url),'hash'=>$hash,'filesize'=>renderSize(filesize($path)),'content'=>htmlentities(file_get_contents($path)));
|
||||||
|
renderTemplate('video',$data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleUpload($tmpfile,$hash=false)
|
||||||
|
{
|
||||||
|
$fh = fopen(ROOT.DS.'log'.DS.'video.log', 'a'); //////
|
||||||
|
fwrite($fh, "[1] $tmpfile was uploaded\n");
|
||||||
|
|
||||||
|
if($hash===false)
|
||||||
|
$hash = getNewHash('mp4',6);
|
||||||
|
|
||||||
|
fwrite($fh, "[2] $tmpfile got the hash $hash\n");
|
||||||
|
|
||||||
|
mkdir(ROOT.DS.'data'.DS.$hash);
|
||||||
|
$file = ROOT.DS.'data'.DS.$hash.DS.$hash;
|
||||||
|
|
||||||
|
move_uploaded_file($tmpfile, $file);
|
||||||
|
|
||||||
|
fwrite($fh, "[3] Was it already correclty encoded? ".($this->rightEncodedMP4($file)?'yes':'no'));
|
||||||
|
|
||||||
|
if(!$this->rightEncodedMP4($file))
|
||||||
|
system("nohup php ".ROOT.DS.'tools'.DS.'re-encode_mp4.php force '.$hash." > /dev/null 2> /dev/null &");
|
||||||
|
|
||||||
|
fclose($fh);
|
||||||
|
|
||||||
|
if(defined('ALT_FOLDER') && ALT_FOLDER)
|
||||||
|
{
|
||||||
|
$altname=ALT_FOLDER.DS.$hash;
|
||||||
|
if(!file_exists($altname) && is_dir(ALT_FOLDER))
|
||||||
|
{
|
||||||
|
copy($file,$altname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(defined('LOG_UPLOADER') && LOG_UPLOADER)
|
||||||
|
{
|
||||||
|
$fh = fopen(ROOT.DS.'data'.DS.'uploads.txt', 'a');
|
||||||
|
fwrite($fh, time().';'.$url.';'.$hash.';'.getUserIP()."\n");
|
||||||
|
fclose($fh);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array('status'=>'ok','hash'=>$hash,'url'=>URL.$hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//via gist: https://gist.github.com/codler/3906826
|
||||||
|
function serveMP4($path,$hash)
|
||||||
|
{
|
||||||
|
if ($fp = fopen($path, "rb"))
|
||||||
|
{
|
||||||
|
$size = filesize($path);
|
||||||
|
$length = $size;
|
||||||
|
$start = 0;
|
||||||
|
$end = $size - 1;
|
||||||
|
header('Content-type: video/mp4');
|
||||||
|
header("Accept-Ranges: 0-$length");
|
||||||
|
if (isset($_SERVER['HTTP_RANGE'])) {
|
||||||
|
$c_start = $start;
|
||||||
|
$c_end = $end;
|
||||||
|
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
|
||||||
|
if (strpos($range, ',') !== false) {
|
||||||
|
header('HTTP/1.1 416 Requested Range Not Satisfiable');
|
||||||
|
header("Content-Range: bytes $start-$end/$size");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
if ($range == '-') {
|
||||||
|
$c_start = $size - substr($range, 1);
|
||||||
|
} else {
|
||||||
|
$range = explode('-', $range);
|
||||||
|
$c_start = $range[0];
|
||||||
|
$c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
|
||||||
|
}
|
||||||
|
$c_end = ($c_end > $end) ? $end : $c_end;
|
||||||
|
if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) {
|
||||||
|
header('HTTP/1.1 416 Requested Range Not Satisfiable');
|
||||||
|
header("Content-Range: bytes $start-$end/$size");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
$start = $c_start;
|
||||||
|
$end = $c_end;
|
||||||
|
$length = $end - $start + 1;
|
||||||
|
fseek($fp, $start);
|
||||||
|
header('HTTP/1.1 206 Partial Content');
|
||||||
|
}
|
||||||
|
header("Content-Range: bytes $start-$end/$size");
|
||||||
|
header("Content-Length: ".$length);
|
||||||
|
$buffer = 1024 * 8;
|
||||||
|
while(!feof($fp) && ($p = ftell($fp)) <= $end) {
|
||||||
|
if ($p + $buffer > $end) {
|
||||||
|
$buffer = $end - $p + 1;
|
||||||
|
}
|
||||||
|
set_time_limit(0);
|
||||||
|
echo fread($fp, $buffer);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
fclose($fp);
|
||||||
|
exit();
|
||||||
|
} else die('file not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
function isProperMP4($filename)
|
||||||
|
{
|
||||||
|
$file = escapeshellarg($filename);
|
||||||
|
$tmp = ROOT.DS.'tmp'.DS.md5(time()+rand(1,10000)).'.'.rand(1,10000).'.log';
|
||||||
|
$bin = escapeshellcmd(FFMPEG_BINARY);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$cmd = "$bin -i $file > $tmp 2>> $tmp";
|
||||||
|
|
||||||
|
system($cmd);
|
||||||
|
|
||||||
|
//var_dump(system( "$bin -i $file "));
|
||||||
|
|
||||||
|
$answer = file($tmp);
|
||||||
|
unlink($tmp);
|
||||||
|
$ismp4 = false;
|
||||||
|
if(is_array($answer))
|
||||||
|
foreach($answer as $line)
|
||||||
|
{
|
||||||
|
$line = trim($line);
|
||||||
|
if(strpos($line,'Duration: 00:00:00')) return false;
|
||||||
|
if(strpos($line, 'Video: h264'))
|
||||||
|
$ismp4 = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ismp4;
|
||||||
|
}
|
||||||
|
|
||||||
|
function rightEncodedMP4($file)
|
||||||
|
{
|
||||||
|
$hash = md5($file);
|
||||||
|
$cmd = FFMPEG_BINARY." -i $file -hide_banner 2> ".ROOT.DS.'tmp'.DS.$hash.'.txt';
|
||||||
|
system($cmd);
|
||||||
|
$results = file(ROOT.DS.'tmp'.DS.$hash.'.txt');
|
||||||
|
foreach($results as $l)
|
||||||
|
{
|
||||||
|
$elements = explode(':',trim($l));
|
||||||
|
$key=trim(array_shift($elements));
|
||||||
|
$value = trim(implode(':',$elements));
|
||||||
|
if($key=='encoder')
|
||||||
|
{
|
||||||
|
if(startsWith(strtolower($value),'lav'))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
} else return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unlink(ROOT.DS.'tmp'.DS.$hash.'.txt');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
388
css/dropzone.css
Normal file
388
css/dropzone.css
Normal file
@@ -0,0 +1,388 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright (c) 2012 Matias Meno <m@tias.me>
|
||||||
|
*/
|
||||||
|
@-webkit-keyframes passing-through {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(40px);
|
||||||
|
-moz-transform: translateY(40px);
|
||||||
|
-ms-transform: translateY(40px);
|
||||||
|
-o-transform: translateY(40px);
|
||||||
|
transform: translateY(40px); }
|
||||||
|
30%, 70% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: translateY(0px);
|
||||||
|
-moz-transform: translateY(0px);
|
||||||
|
-ms-transform: translateY(0px);
|
||||||
|
-o-transform: translateY(0px);
|
||||||
|
transform: translateY(0px); }
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(-40px);
|
||||||
|
-moz-transform: translateY(-40px);
|
||||||
|
-ms-transform: translateY(-40px);
|
||||||
|
-o-transform: translateY(-40px);
|
||||||
|
transform: translateY(-40px); } }
|
||||||
|
@-moz-keyframes passing-through {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(40px);
|
||||||
|
-moz-transform: translateY(40px);
|
||||||
|
-ms-transform: translateY(40px);
|
||||||
|
-o-transform: translateY(40px);
|
||||||
|
transform: translateY(40px); }
|
||||||
|
30%, 70% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: translateY(0px);
|
||||||
|
-moz-transform: translateY(0px);
|
||||||
|
-ms-transform: translateY(0px);
|
||||||
|
-o-transform: translateY(0px);
|
||||||
|
transform: translateY(0px); }
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(-40px);
|
||||||
|
-moz-transform: translateY(-40px);
|
||||||
|
-ms-transform: translateY(-40px);
|
||||||
|
-o-transform: translateY(-40px);
|
||||||
|
transform: translateY(-40px); } }
|
||||||
|
@keyframes passing-through {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(40px);
|
||||||
|
-moz-transform: translateY(40px);
|
||||||
|
-ms-transform: translateY(40px);
|
||||||
|
-o-transform: translateY(40px);
|
||||||
|
transform: translateY(40px); }
|
||||||
|
30%, 70% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: translateY(0px);
|
||||||
|
-moz-transform: translateY(0px);
|
||||||
|
-ms-transform: translateY(0px);
|
||||||
|
-o-transform: translateY(0px);
|
||||||
|
transform: translateY(0px); }
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(-40px);
|
||||||
|
-moz-transform: translateY(-40px);
|
||||||
|
-ms-transform: translateY(-40px);
|
||||||
|
-o-transform: translateY(-40px);
|
||||||
|
transform: translateY(-40px); } }
|
||||||
|
@-webkit-keyframes slide-in {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(40px);
|
||||||
|
-moz-transform: translateY(40px);
|
||||||
|
-ms-transform: translateY(40px);
|
||||||
|
-o-transform: translateY(40px);
|
||||||
|
transform: translateY(40px); }
|
||||||
|
30% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: translateY(0px);
|
||||||
|
-moz-transform: translateY(0px);
|
||||||
|
-ms-transform: translateY(0px);
|
||||||
|
-o-transform: translateY(0px);
|
||||||
|
transform: translateY(0px); } }
|
||||||
|
@-moz-keyframes slide-in {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(40px);
|
||||||
|
-moz-transform: translateY(40px);
|
||||||
|
-ms-transform: translateY(40px);
|
||||||
|
-o-transform: translateY(40px);
|
||||||
|
transform: translateY(40px); }
|
||||||
|
30% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: translateY(0px);
|
||||||
|
-moz-transform: translateY(0px);
|
||||||
|
-ms-transform: translateY(0px);
|
||||||
|
-o-transform: translateY(0px);
|
||||||
|
transform: translateY(0px); } }
|
||||||
|
@keyframes slide-in {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transform: translateY(40px);
|
||||||
|
-moz-transform: translateY(40px);
|
||||||
|
-ms-transform: translateY(40px);
|
||||||
|
-o-transform: translateY(40px);
|
||||||
|
transform: translateY(40px); }
|
||||||
|
30% {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transform: translateY(0px);
|
||||||
|
-moz-transform: translateY(0px);
|
||||||
|
-ms-transform: translateY(0px);
|
||||||
|
-o-transform: translateY(0px);
|
||||||
|
transform: translateY(0px); } }
|
||||||
|
@-webkit-keyframes pulse {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1);
|
||||||
|
-ms-transform: scale(1);
|
||||||
|
-o-transform: scale(1);
|
||||||
|
transform: scale(1); }
|
||||||
|
10% {
|
||||||
|
-webkit-transform: scale(1.1);
|
||||||
|
-moz-transform: scale(1.1);
|
||||||
|
-ms-transform: scale(1.1);
|
||||||
|
-o-transform: scale(1.1);
|
||||||
|
transform: scale(1.1); }
|
||||||
|
20% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1);
|
||||||
|
-ms-transform: scale(1);
|
||||||
|
-o-transform: scale(1);
|
||||||
|
transform: scale(1); } }
|
||||||
|
@-moz-keyframes pulse {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1);
|
||||||
|
-ms-transform: scale(1);
|
||||||
|
-o-transform: scale(1);
|
||||||
|
transform: scale(1); }
|
||||||
|
10% {
|
||||||
|
-webkit-transform: scale(1.1);
|
||||||
|
-moz-transform: scale(1.1);
|
||||||
|
-ms-transform: scale(1.1);
|
||||||
|
-o-transform: scale(1.1);
|
||||||
|
transform: scale(1.1); }
|
||||||
|
20% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1);
|
||||||
|
-ms-transform: scale(1);
|
||||||
|
-o-transform: scale(1);
|
||||||
|
transform: scale(1); } }
|
||||||
|
@keyframes pulse {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1);
|
||||||
|
-ms-transform: scale(1);
|
||||||
|
-o-transform: scale(1);
|
||||||
|
transform: scale(1); }
|
||||||
|
10% {
|
||||||
|
-webkit-transform: scale(1.1);
|
||||||
|
-moz-transform: scale(1.1);
|
||||||
|
-ms-transform: scale(1.1);
|
||||||
|
-o-transform: scale(1.1);
|
||||||
|
transform: scale(1.1); }
|
||||||
|
20% {
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1);
|
||||||
|
-ms-transform: scale(1);
|
||||||
|
-o-transform: scale(1);
|
||||||
|
transform: scale(1); } }
|
||||||
|
.dropzone, .dropzone * {
|
||||||
|
box-sizing: border-box; }
|
||||||
|
|
||||||
|
.dropzone {
|
||||||
|
min-height: 150px;
|
||||||
|
border: 2px solid rgba(0, 0, 0, 0.3);
|
||||||
|
background: white;
|
||||||
|
padding: 20px 20px; }
|
||||||
|
.dropzone.dz-clickable {
|
||||||
|
cursor: pointer; }
|
||||||
|
.dropzone.dz-clickable * {
|
||||||
|
cursor: default; }
|
||||||
|
.dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {
|
||||||
|
cursor: pointer; }
|
||||||
|
.dropzone.dz-started .dz-message {
|
||||||
|
display: none; }
|
||||||
|
.dropzone.dz-drag-hover {
|
||||||
|
border-style: solid; }
|
||||||
|
.dropzone.dz-drag-hover .dz-message {
|
||||||
|
opacity: 0.5; }
|
||||||
|
.dropzone .dz-message {
|
||||||
|
text-align: center;
|
||||||
|
margin: 2em 0; }
|
||||||
|
.dropzone .dz-preview {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
margin: 16px;
|
||||||
|
min-height: 100px; }
|
||||||
|
.dropzone .dz-preview:hover {
|
||||||
|
z-index: 1000; }
|
||||||
|
.dropzone .dz-preview:hover .dz-details {
|
||||||
|
opacity: 1; }
|
||||||
|
.dropzone .dz-preview.dz-file-preview .dz-image {
|
||||||
|
border-radius: 20px;
|
||||||
|
background: #999;
|
||||||
|
background: linear-gradient(to bottom, #eee, #ddd); }
|
||||||
|
.dropzone .dz-preview.dz-file-preview .dz-details {
|
||||||
|
opacity: 1; }
|
||||||
|
.dropzone .dz-preview.dz-image-preview {
|
||||||
|
background: white; }
|
||||||
|
.dropzone .dz-preview.dz-image-preview .dz-details {
|
||||||
|
-webkit-transition: opacity 0.2s linear;
|
||||||
|
-moz-transition: opacity 0.2s linear;
|
||||||
|
-ms-transition: opacity 0.2s linear;
|
||||||
|
-o-transition: opacity 0.2s linear;
|
||||||
|
transition: opacity 0.2s linear; }
|
||||||
|
.dropzone .dz-preview .dz-remove {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
display: block;
|
||||||
|
cursor: pointer;
|
||||||
|
border: none; }
|
||||||
|
.dropzone .dz-preview .dz-remove:hover {
|
||||||
|
text-decoration: underline; }
|
||||||
|
.dropzone .dz-preview:hover .dz-details {
|
||||||
|
opacity: 1; }
|
||||||
|
.dropzone .dz-preview .dz-details {
|
||||||
|
z-index: 20;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
opacity: 0;
|
||||||
|
font-size: 13px;
|
||||||
|
min-width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 2em 1em;
|
||||||
|
text-align: center;
|
||||||
|
color: rgba(0, 0, 0, 0.9);
|
||||||
|
line-height: 150%; }
|
||||||
|
.dropzone .dz-preview .dz-details .dz-size {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
font-size: 16px; }
|
||||||
|
.dropzone .dz-preview .dz-details .dz-filename {
|
||||||
|
white-space: nowrap; }
|
||||||
|
.dropzone .dz-preview .dz-details .dz-filename:hover span {
|
||||||
|
border: 1px solid rgba(200, 200, 200, 0.8);
|
||||||
|
background-color: rgba(255, 255, 255, 0.8); }
|
||||||
|
.dropzone .dz-preview .dz-details .dz-filename:not(:hover) {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis; }
|
||||||
|
.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
|
||||||
|
border: 1px solid transparent; }
|
||||||
|
.dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
|
||||||
|
background-color: rgba(255, 255, 255, 0.4);
|
||||||
|
padding: 0 0.4em;
|
||||||
|
border-radius: 3px; }
|
||||||
|
.dropzone .dz-preview:hover .dz-image img {
|
||||||
|
-webkit-transform: scale(1.05, 1.05);
|
||||||
|
-moz-transform: scale(1.05, 1.05);
|
||||||
|
-ms-transform: scale(1.05, 1.05);
|
||||||
|
-o-transform: scale(1.05, 1.05);
|
||||||
|
transform: scale(1.05, 1.05);
|
||||||
|
-webkit-filter: blur(8px);
|
||||||
|
filter: blur(8px); }
|
||||||
|
.dropzone .dz-preview .dz-image {
|
||||||
|
border-radius: 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
z-index: 10; }
|
||||||
|
.dropzone .dz-preview .dz-image img {
|
||||||
|
display: block; }
|
||||||
|
.dropzone .dz-preview.dz-success .dz-success-mark {
|
||||||
|
-webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
-moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
-ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
-o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }
|
||||||
|
.dropzone .dz-preview.dz-error .dz-error-mark {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
-moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
-ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
-o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
|
||||||
|
animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }
|
||||||
|
.dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0;
|
||||||
|
z-index: 500;
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -27px;
|
||||||
|
margin-top: -27px; }
|
||||||
|
.dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
|
||||||
|
display: block;
|
||||||
|
width: 54px;
|
||||||
|
height: 54px; }
|
||||||
|
.dropzone .dz-preview.dz-processing .dz-progress {
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transition: all 0.2s linear;
|
||||||
|
-moz-transition: all 0.2s linear;
|
||||||
|
-ms-transition: all 0.2s linear;
|
||||||
|
-o-transition: all 0.2s linear;
|
||||||
|
transition: all 0.2s linear; }
|
||||||
|
.dropzone .dz-preview.dz-complete .dz-progress {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: opacity 0.4s ease-in;
|
||||||
|
-moz-transition: opacity 0.4s ease-in;
|
||||||
|
-ms-transition: opacity 0.4s ease-in;
|
||||||
|
-o-transition: opacity 0.4s ease-in;
|
||||||
|
transition: opacity 0.4s ease-in; }
|
||||||
|
.dropzone .dz-preview:not(.dz-processing) .dz-progress {
|
||||||
|
-webkit-animation: pulse 6s ease infinite;
|
||||||
|
-moz-animation: pulse 6s ease infinite;
|
||||||
|
-ms-animation: pulse 6s ease infinite;
|
||||||
|
-o-animation: pulse 6s ease infinite;
|
||||||
|
animation: pulse 6s ease infinite; }
|
||||||
|
.dropzone .dz-preview .dz-progress {
|
||||||
|
opacity: 1;
|
||||||
|
z-index: 1000;
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
height: 16px;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -8px;
|
||||||
|
width: 80px;
|
||||||
|
margin-left: -40px;
|
||||||
|
background: rgba(255, 255, 255, 0.9);
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden; }
|
||||||
|
.dropzone .dz-preview .dz-progress .dz-upload {
|
||||||
|
background: #333;
|
||||||
|
background: linear-gradient(to bottom, #666, #444);
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 0;
|
||||||
|
-webkit-transition: width 300ms ease-in-out;
|
||||||
|
-moz-transition: width 300ms ease-in-out;
|
||||||
|
-ms-transition: width 300ms ease-in-out;
|
||||||
|
-o-transition: width 300ms ease-in-out;
|
||||||
|
transition: width 300ms ease-in-out; }
|
||||||
|
.dropzone .dz-preview.dz-error .dz-error-message {
|
||||||
|
display: block; }
|
||||||
|
.dropzone .dz-preview.dz-error:hover .dz-error-message {
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: auto; }
|
||||||
|
.dropzone .dz-preview .dz-error-message {
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 1000;
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
display: none;
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: opacity 0.3s ease;
|
||||||
|
-moz-transition: opacity 0.3s ease;
|
||||||
|
-ms-transition: opacity 0.3s ease;
|
||||||
|
-o-transition: opacity 0.3s ease;
|
||||||
|
transition: opacity 0.3s ease;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
top: 130px;
|
||||||
|
left: -10px;
|
||||||
|
width: 140px;
|
||||||
|
background: #be2626;
|
||||||
|
background: linear-gradient(to bottom, #be2626, #a92222);
|
||||||
|
padding: 0.5em 1.2em;
|
||||||
|
color: white; }
|
||||||
|
.dropzone .dz-preview .dz-error-message:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
left: 64px;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-left: 6px solid transparent;
|
||||||
|
border-right: 6px solid transparent;
|
||||||
|
border-bottom: 6px solid #be2626; }
|
||||||
@@ -25,4 +25,11 @@ body {
|
|||||||
background: rgba(245, 245, 245, .8);
|
background: rgba(245, 245, 245, .8);
|
||||||
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
|
||||||
box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.box__dragndrop,
|
||||||
|
.box__uploading,
|
||||||
|
.box__success,
|
||||||
|
.box__error {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
4
upload/.gitignore → data/.gitignore
vendored
4
upload/.gitignore → data/.gitignore
vendored
@@ -1,6 +1,4 @@
|
|||||||
# Ignore everything in this directory
|
# Ignore everything in this directory
|
||||||
*
|
*
|
||||||
# Except this file
|
# Except this file
|
||||||
!.gitignore
|
!.gitignore
|
||||||
# And except deletecodes folder
|
|
||||||
!deletecodes
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
version: '2'
|
|
||||||
|
|
||||||
services:
|
|
||||||
pictshare:
|
|
||||||
restart: always
|
|
||||||
image: hascheksolutions/pictshare:latest
|
|
||||||
volumes:
|
|
||||||
- ./volumes/upload:/usr/share/nginx/html/upload
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
- "443:443"
|
|
||||||
environment:
|
|
||||||
- AUTOUPDATE=false
|
|
||||||
- MAX_UPLOAD_SIZE=
|
|
||||||
- TITLE=
|
|
||||||
- PNG_COMPRESSION=
|
|
||||||
- JPEG_COMPRESSION=
|
|
||||||
- MASTER_DELETE_CODE=
|
|
||||||
- MASTER_DELETE_IP=
|
|
||||||
- UPLOAD_FORM_LOCATION=
|
|
||||||
- LOW_PROFILE=
|
|
||||||
- UPLOAD_CODE=
|
|
||||||
- IMAGE_CHANGE_CODE=
|
|
||||||
- LOG_UPLOADER=
|
|
||||||
- MAX_RESIZED_IMAGES=
|
|
||||||
- ALLOW_BLOATING=
|
|
||||||
- FORCE_DOMAIN=
|
|
||||||
- SHOW_ERRORS=
|
|
||||||
- FFMPEG_BINARY=
|
|
||||||
1
inc/.gitignore
vendored
1
inc/.gitignore
vendored
@@ -1,2 +1 @@
|
|||||||
# don#t track the active config
|
|
||||||
config.inc.php
|
config.inc.php
|
||||||
837
inc/core.php
837
inc/core.php
@@ -1,538 +1,301 @@
|
|||||||
<?php
|
<?php
|
||||||
spl_autoload_register('autoload');
|
spl_autoload_register('autoload');
|
||||||
|
|
||||||
if(!defined('FFMPEG_BINARY') || !FFMPEG_BINARY )
|
//disable output buffering
|
||||||
define('FFMPEG_BINARY',ROOT.DS.'bin'.DS.'ffmpeg');
|
if (ob_get_level()) ob_end_clean();
|
||||||
|
|
||||||
function autoload($className)
|
if(!defined('FFMPEG_BINARY'))
|
||||||
{
|
define('FFMPEG_BINARY',ROOT.DS.'bin'.DS.'ffmpeg');
|
||||||
if (file_exists(ROOT . DS . 'models' . DS . strtolower($className) . '.php'))
|
|
||||||
require_once(ROOT . DS . 'models' . DS . strtolower($className) . '.php');
|
/**
|
||||||
if (file_exists(ROOT . DS . 'classes' . DS . strtolower($className) . '.php'))
|
* The Architect function is the main controller
|
||||||
require_once(ROOT . DS . 'classes' . DS . strtolower($className) . '.php');
|
* who will decide what to do with any given URL
|
||||||
}
|
* by feeding it to the other controllers
|
||||||
|
*/
|
||||||
function getUserIP()
|
function architect($url)
|
||||||
{
|
{
|
||||||
$client = @$_SERVER['HTTP_CLIENT_IP'];
|
//let's get the parts of the URL as array
|
||||||
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
|
//and clean out the empty elements
|
||||||
$remote = $_SERVER['REMOTE_ADDR'];
|
$u = array_filter(explode('/', $url));
|
||||||
|
|
||||||
if(strpos($forward,','))
|
//if there is no info in the URL, don't even bother checking with the controllers
|
||||||
{
|
//just show the site
|
||||||
$a = explode(',',$forward);
|
if(count($u)==0)
|
||||||
$forward = trim($a[0]);
|
{
|
||||||
}
|
renderTemplate('main',false);
|
||||||
if(filter_var($forward, FILTER_VALIDATE_IP))
|
return;
|
||||||
{
|
}
|
||||||
$ip = $forward;
|
|
||||||
}
|
//check all elements for a valid hash
|
||||||
elseif(filter_var($client, FILTER_VALIDATE_IP))
|
$hash = false;
|
||||||
{
|
foreach($u as $el)
|
||||||
$ip = $client;
|
{
|
||||||
}
|
if(isExistingHash($el))
|
||||||
else
|
$hash = $el;
|
||||||
{
|
}
|
||||||
$ip = $remote;
|
|
||||||
}
|
//we didn't find a hash. Well let's just display the webpage instead
|
||||||
return $ip;
|
if($hash===false)
|
||||||
}
|
{
|
||||||
|
//var_dump("main site");
|
||||||
function stripSlashesDeep($value)
|
renderTemplate('main',false);
|
||||||
{
|
}
|
||||||
$value = is_array($value) ? array_map('stripSlashesDeep', $value) : stripslashes($value);
|
else
|
||||||
return $value;
|
{
|
||||||
}
|
//ok we have a valid hash. Now let's check the extension to find out which controller will be handling this request
|
||||||
|
$extension = pathinfo($hash, PATHINFO_EXTENSION);
|
||||||
function removeMagicQuotes()
|
|
||||||
{
|
|
||||||
if ( get_magic_quotes_gpc() )
|
//First, check if URL is an image
|
||||||
{
|
if(in_array($extension,(new ImageController)->getRegisteredExtensions()))
|
||||||
$_GET = stripSlashesDeep($_GET );
|
{
|
||||||
$_POST = stripSlashesDeep($_POST );
|
(new ImageController())->handleHash($hash,$u);
|
||||||
$_COOKIE = stripSlashesDeep($_COOKIE);
|
}
|
||||||
}
|
//or, a url
|
||||||
}
|
else if(in_array($extension,(new UrlController)->getRegisteredExtensions()))
|
||||||
|
{
|
||||||
|
var_dump("Url");
|
||||||
|
}
|
||||||
function aasort (&$array, $key)
|
//or, a text
|
||||||
{
|
else if(in_array($extension,(new TextController)->getRegisteredExtensions()))
|
||||||
$sorter=array();
|
{
|
||||||
$ret=array();
|
(new TextController())->handleHash($hash,$u);
|
||||||
reset($array);
|
}
|
||||||
foreach ($array as $ii => $va) {
|
//or, a video
|
||||||
$sorter[$ii]=$va[$key];
|
else if(in_array($extension,(new VideoController)->getRegisteredExtensions()))
|
||||||
}
|
{
|
||||||
asort($sorter);
|
(new VideoController())->handleHash($hash,$u);
|
||||||
foreach ($sorter as $ii => $va) {
|
}
|
||||||
$ret[$ii]=$array[$ii];
|
//very odd. We know it's a valid hash but no controller says it's one of their kids
|
||||||
}
|
//oh well, just show the main website
|
||||||
$array=$ret;
|
else
|
||||||
}
|
{
|
||||||
|
var_dump("odd err");
|
||||||
|
}
|
||||||
|
|
||||||
function callHook()
|
}
|
||||||
{
|
|
||||||
global $url;
|
//var_dump($u);
|
||||||
|
}
|
||||||
whatToDo($url);
|
|
||||||
}
|
function getNewHash($type,$length=10)
|
||||||
|
{
|
||||||
function whatToDo($url)
|
while(1)
|
||||||
{
|
{
|
||||||
$pm = new PictshareModel();
|
$hash = getRandomString($length).'.'.$type;
|
||||||
|
if(!isExistingHash($hash)) return $hash;
|
||||||
|
$length++;
|
||||||
$data = $pm->urlToData($url);
|
}
|
||||||
|
}
|
||||||
if(!$data['hash'] && $data['size']) //if there is only a size but no hash, generate a pattern
|
|
||||||
{
|
function isExistingHash($hash)
|
||||||
$sd = $pm->sizeStringToWidthHeight($data['size']);
|
{
|
||||||
$width = ($sd['width'] <= 2000)?$sd['width']:2000;
|
return is_dir(ROOT.DS.'data'.DS.$hash);
|
||||||
$height = ($sd['height'] <= 2000)?$sd['height']:2000;
|
}
|
||||||
|
|
||||||
$cachefile = ROOT.DS.'tmp'.DS.$width .'x'.$height.'.png';
|
|
||||||
if(!file_exists($cachefile))
|
function autoload($className)
|
||||||
{
|
{
|
||||||
$image=$pm->gradient($width, $height, array('#A7FF78', '#A7FF78', '#78FFD4', '#78FFD4'));
|
if (file_exists(ROOT . DS . 'controllers' . DS . strtolower($className) . '.php'))
|
||||||
imagepng($image,$cachefile);
|
require_once(ROOT . DS . 'controllers' . DS . strtolower($className) . '.php');
|
||||||
}
|
}
|
||||||
else
|
|
||||||
$image = imagecreatefrompng($cachefile);
|
function renderTemplate($template,$vars=false)
|
||||||
header('Content-type: image/png');
|
{
|
||||||
imagepng($image);
|
extract($vars);
|
||||||
imagedestroy($image);
|
include_once(ROOT.DS.'templates'.DS.$template.'.html');
|
||||||
exit();
|
}
|
||||||
}
|
|
||||||
else if(!is_array($data) || !$data['hash'])
|
function getExtensionOfFilename($file)
|
||||||
{
|
{
|
||||||
if((UPLOAD_FORM_LOCATION && $url==UPLOAD_FORM_LOCATION) || (!UPLOAD_FORM_LOCATION))
|
return pathinfo($file, PATHINFO_EXTENSION);
|
||||||
{
|
}
|
||||||
$upload_answer = $pm->ProcessUploads();
|
|
||||||
if($upload_answer)
|
function sizeStringToWidthHeight($size)
|
||||||
$o=$upload_answer;
|
{
|
||||||
else
|
if(!$size || !$this->isSize($size)) return false;
|
||||||
$o.= $pm->renderUploadForm();
|
if(!is_numeric($size))
|
||||||
|
$size = explode('x',$size);
|
||||||
$vars['content'] = $o;
|
|
||||||
$vars['slogan'] = $pm->translate(2);
|
if(is_array($size))
|
||||||
|
{
|
||||||
}
|
$maxwidth = $size[0];
|
||||||
|
$maxheight = $size[1];
|
||||||
if(!$vars && LOW_PROFILE)
|
}
|
||||||
{
|
else if($size)
|
||||||
header('HTTP/1.0 404 Not Found');
|
{
|
||||||
exit();
|
$maxwidth = $size;
|
||||||
}
|
$maxheight = $size;
|
||||||
else if(!$vars)
|
}
|
||||||
{
|
|
||||||
$vars['content'] = $pm->translate(12);
|
return array('width'=>$maxwidth,'height'=>$maxheight);
|
||||||
$vars['slogan'] = $pm->translate(2);
|
}
|
||||||
}
|
|
||||||
|
//
|
||||||
render($vars);
|
// from: https://stackoverflow.com/questions/25975943/php-serve-mp4-chrome-provisional-headers-are-shown-request-is-not-finished-ye
|
||||||
}
|
//
|
||||||
else if($data['album'])
|
function serveFile($filename, $filename_output = false, $mime = 'application/octet-stream')
|
||||||
renderAlbum($data);
|
{
|
||||||
else
|
$buffer_size = 8192;
|
||||||
renderImage($data);
|
$expiry = 90; //days
|
||||||
}
|
if(!file_exists($filename))
|
||||||
|
{
|
||||||
function renderAlbum($data)
|
throw new Exception('File not found: ' . $filename);
|
||||||
{
|
}
|
||||||
if($data['filter'])
|
if(!is_readable($filename))
|
||||||
$filters = implode('/',$data['filter']).'/';
|
{
|
||||||
|
throw new Exception('File not readable: ' . $filename);
|
||||||
if($data['size'])
|
}
|
||||||
$size = $data['size'].'/';
|
header_remove('Cache-Control');
|
||||||
else if(!$data['responsive'])
|
header_remove('Pragma');
|
||||||
$size = '300x300/';
|
$byte_offset = 0;
|
||||||
|
$filesize_bytes = $filesize_original = filesize($filename);
|
||||||
$forcesize = ($data['forcesize']?'forcesize/':'');
|
header('Accept-Ranges: bytes', true);
|
||||||
|
header('Content-Type: ' . $mime, true);
|
||||||
foreach($data['album'] as $hash)
|
|
||||||
{
|
header("Content-Disposition: inline;");
|
||||||
$content.='<a href="'.PATH.$filters.$hash.'"><img class="picture" src="'.PATH.$size.$forcesize.$filters.$hash.'" /></a>';
|
// Content-Range header for byte offsets
|
||||||
}
|
if (isset($_SERVER['HTTP_RANGE']) && preg_match('%bytes=(\d+)-(\d+)?%i', $_SERVER['HTTP_RANGE'], $match))
|
||||||
|
{
|
||||||
if($data['embed']===true)
|
$byte_offset = (int) $match[1];//Offset signifies where we should begin to read the file
|
||||||
include (ROOT . DS . 'template_album_embed.php');
|
if (isset($match[2]))//Length is for how long we should read the file according to the browser, and can never go beyond the file size
|
||||||
else
|
{
|
||||||
include (ROOT . DS . 'template_album.php');
|
$filesize_bytes = min((int) $match[2], $filesize_bytes - $byte_offset);
|
||||||
}
|
}
|
||||||
|
header("HTTP/1.1 206 Partial content");
|
||||||
function renderImage($data)
|
header(sprintf('Content-Range: bytes %d-%d/%d', $byte_offset, $filesize_bytes - 1, $filesize_original)); ### Decrease by 1 on byte-length since this definition is zero-based index of bytes being sent
|
||||||
{
|
}
|
||||||
$hash = $data['hash'];
|
$byte_range = $filesize_bytes - $byte_offset;
|
||||||
if($data['changecode'])
|
header('Content-Length: ' . $byte_range);
|
||||||
{
|
header('Expires: ' . date('D, d M Y H:i:s', time() + 60 * 60 * 24 * $expiry) . ' GMT');
|
||||||
$changecode = $data['changecode'];
|
$buffer = '';
|
||||||
unset($data['changecode']);
|
$bytes_remaining = $byte_range;
|
||||||
}
|
$handle = fopen($filename, 'r');
|
||||||
|
if(!$handle)
|
||||||
$pm = new PictshareModel();
|
{
|
||||||
$base_path = ROOT.DS.'upload'.DS.$hash.DS;
|
throw new Exception("Could not get handle for file: " . $filename);
|
||||||
$path = $base_path.$hash;
|
}
|
||||||
$type = $pm->isTypeAllowed($pm->getTypeOfFile($path));
|
if (fseek($handle, $byte_offset, SEEK_SET) == -1)
|
||||||
$cached = false;
|
{
|
||||||
|
throw new Exception("Could not seek to byte offset %d", $byte_offset);
|
||||||
//update last_rendered of this hash so we can later
|
}
|
||||||
//sort out old, unused images easier
|
while ($bytes_remaining > 0)
|
||||||
@file_put_contents($base_path.'last_rendered.txt',time());
|
{
|
||||||
|
$chunksize_requested = min($buffer_size, $bytes_remaining);
|
||||||
$cachename = $pm->getCacheName($data);
|
$buffer = fread($handle, $chunksize_requested);
|
||||||
$cachepath = $base_path.$cachename;
|
$chunksize_real = strlen($buffer);
|
||||||
if(file_exists($cachepath))
|
if ($chunksize_real == 0)
|
||||||
{
|
{
|
||||||
$path = $cachepath;
|
break;
|
||||||
$cached = true;
|
}
|
||||||
}
|
$bytes_remaining -= $chunksize_real;
|
||||||
else if(MAX_RESIZED_IMAGES > -1 && $pm->countResizedImages($hash)>MAX_RESIZED_IMAGES) //if the number of max resized images is reached, just show the real one
|
echo $buffer;
|
||||||
$path = ROOT.DS.'upload'.DS.$hash.DS.$hash;
|
flush();
|
||||||
|
}
|
||||||
switch($type)
|
}
|
||||||
{
|
|
||||||
case 'jpg':
|
function sanatizeString($string)
|
||||||
header ("Content-type: image/jpeg");
|
{
|
||||||
$im = imagecreatefromjpeg($path);
|
return preg_replace("/[^a-zA-Z0-9._\-]+/", "", $string);
|
||||||
if(!$cached)
|
}
|
||||||
{
|
|
||||||
if($pm->changeCodeExists($changecode))
|
function renderSize($byte)
|
||||||
{
|
{
|
||||||
changeImage($im,$data);
|
if($byte < 1024) {
|
||||||
imagejpeg($im,$cachepath,(defined('JPEG_COMPRESSION')?JPEG_COMPRESSION:90));
|
$result = round($byte, 2). ' Byte';
|
||||||
}
|
}elseif($byte < pow(1024, 2)) {
|
||||||
|
$result = round($byte/1024, 2).' KB';
|
||||||
}
|
}elseif($byte >= pow(1024, 2) and $byte < pow(1024, 3)) {
|
||||||
imagejpeg($im);
|
$result = round($byte/pow(1024, 2), 2).' MB';
|
||||||
break;
|
}elseif($byte >= pow(1024, 3) and $byte < pow(1024, 4)) {
|
||||||
case 'png':
|
$result = round($byte/pow(1024, 3), 2).' GB';
|
||||||
header ("Content-type: image/png");
|
}elseif($byte >= pow(1024, 4) and $byte < pow(1024, 5)) {
|
||||||
$im = imagecreatefrompng($path);
|
$result = round($byte/pow(1024, 4), 2).' TB';
|
||||||
if(!$cached)
|
}elseif($byte >= pow(1024, 5) and $byte < pow(1024, 6)) {
|
||||||
{
|
$result = round($byte/pow(1024, 5), 2).' PB';
|
||||||
if($pm->changeCodeExists($changecode))
|
}elseif($byte >= pow(1024, 6) and $byte < pow(1024, 7)) {
|
||||||
{
|
$result = round($byte/pow(1024, 6), 2).' EB';
|
||||||
changeImage($im,$data);
|
}
|
||||||
imagepng($im,$cachepath,(defined('PNG_COMPRESSION')?PNG_COMPRESSION:6));
|
|
||||||
}
|
return $result;
|
||||||
}
|
}
|
||||||
imageAlphaBlending($im, true);
|
|
||||||
imageSaveAlpha($im, true);
|
function getTypeOfFile($url)
|
||||||
imagepng($im);
|
{
|
||||||
break;
|
$fi = new finfo(FILEINFO_MIME);
|
||||||
case 'gif':
|
$type = $fi->buffer(file_get_contents($url, false, null, -1, 1024));
|
||||||
if($data['mp4'] || $data['webm'] || $data['ogg']) //user wants mp4 or webm or ogg
|
|
||||||
{
|
//to catch a strange error for PHP7 and Alpine Linux
|
||||||
$gifpath = $path;
|
//if the file seems to be a stream, use unix file command
|
||||||
$mp4path = $base_path.'mp4_1.'.$hash; //workaround.. find a better solution!
|
if(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' && startsWith($type,'application/octet-stream'))
|
||||||
$webmpath = $base_path.'webm_1.'.$hash;
|
{
|
||||||
$oggpath = $base_path.'ogg_1.'.$hash;
|
$content_type = exec("file -bi " . escapeshellarg($url));
|
||||||
|
if($content_type && $content_type!=$type && strpos($content_type,'/')!==false && strpos($content_type,';')!==false)
|
||||||
if(!file_exists($mp4path) && !$data['preview']) //if mp4 does not exist, create it
|
$type = $content_type;
|
||||||
$pm->gifToMP4($gifpath,$mp4path);
|
}
|
||||||
|
if(startsWith($type,'text')) return 'text';
|
||||||
if(!file_exists($webmpath) && $data['webm'] && !$data['preview'])
|
$arr = explode(';', trim($type));
|
||||||
$pm->saveAsWebm($gifpath,$webmpath);
|
if(count($arr)>1)
|
||||||
|
{
|
||||||
if(!file_exists($oggpath) && $data['ogg'] && !$data['preview'])
|
$a2 = explode('/', $arr[0]);
|
||||||
$pm->saveAsOGG($gifpath,$oggpath);
|
$type = $a2[1];
|
||||||
|
}
|
||||||
if($data['raw'])
|
else
|
||||||
{
|
{
|
||||||
if($data['webm'])
|
$a2 = explode('/', $type);
|
||||||
serveFile($webmpath, $hash.'.webm','video/webm');
|
$type = $a2[1];
|
||||||
if($data['ogg'])
|
}
|
||||||
serveFile($oggpath, $hash.'.ogg','video/ogg');
|
|
||||||
else
|
if($type=='octet-stream' && (new VideoController())->isProperMP4($url)) return 'mp4';
|
||||||
serveMp4($mp4path, $hash.'.mp4','video/mp4');
|
if($type=='mp4' && !(new VideoController())->isProperMP4($url))
|
||||||
}
|
return false;
|
||||||
else if($data['preview'])
|
|
||||||
{
|
return $type;
|
||||||
$file = $mp4path;
|
}
|
||||||
if(!file_exists($cachepath))
|
|
||||||
$pm->saveFirstFrameOfMP4($mp4path,$cachepath);
|
function getRandomString($length=32, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyz')
|
||||||
header ("Content-type: image/jpeg");
|
{
|
||||||
readfile($cachepath);
|
$str = '';
|
||||||
}
|
$max = mb_strlen($keyspace, '8bit') - 1;
|
||||||
else
|
for ($i = 0; $i < $length; ++$i) {
|
||||||
renderMP4($mp4path,$data);
|
$str .= $keyspace[rand(0, $max)];
|
||||||
}
|
}
|
||||||
else //user wants gif
|
return $str;
|
||||||
{
|
}
|
||||||
if(!$cached && $data['size'])
|
function startsWith($haystack,$needle)
|
||||||
{
|
{
|
||||||
$pm->resizeFFMPEG($data,$cachepath,'gif');
|
$length = strlen($needle);
|
||||||
}
|
return (substr($haystack,0,$length) === $needle);
|
||||||
header ("Content-type: image/gif");
|
}
|
||||||
if(file_exists($cachepath))
|
function endswith($string, $test) {
|
||||||
readfile($cachepath);
|
$strlen = strlen($string);
|
||||||
else
|
$testlen = strlen($test);
|
||||||
readfile($path);
|
if ($testlen > $strlen) return false;
|
||||||
}
|
return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0;
|
||||||
|
}
|
||||||
break;
|
|
||||||
case 'mp4':
|
function getUserIP()
|
||||||
if(!$cached && !$data['preview'])
|
{
|
||||||
{
|
$client = @$_SERVER['HTTP_CLIENT_IP'];
|
||||||
$pm->resizeFFMPEG($data,$cachepath,'mp4');
|
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||||
$path = $cachepath;
|
$remote = $_SERVER['REMOTE_ADDR'];
|
||||||
}
|
|
||||||
|
if(strpos($forward,','))
|
||||||
if(file_exists($cachepath) && filesize($cachepath)==0) //if there was an error and the file is 0 bytes, use the original
|
{
|
||||||
$cachepath = ROOT.DS.'upload'.DS.$hash.DS.$hash;
|
$a = explode(',',$forward);
|
||||||
|
$forward = trim($a[0]);
|
||||||
if($data['webm'])
|
}
|
||||||
{
|
if(filter_var($forward, FILTER_VALIDATE_IP))
|
||||||
$pm->saveAsWebm(ROOT.DS.'upload'.DS.$hash.DS.$hash,$cachepath);
|
{
|
||||||
}
|
$ip = $forward;
|
||||||
|
}
|
||||||
if($data['ogg'])
|
elseif(filter_var($client, FILTER_VALIDATE_IP))
|
||||||
{
|
{
|
||||||
$pm->saveAsOGG(ROOT.DS.'upload'.DS.$hash.DS.$hash,$cachepath);
|
$ip = $client;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if($data['raw'])
|
{
|
||||||
{
|
$ip = $remote;
|
||||||
serveMP4($cachepath, $hash,'video/mp4');
|
}
|
||||||
}
|
return $ip;
|
||||||
else if($data['preview'])
|
|
||||||
{
|
|
||||||
if(!file_exists($cachepath))
|
|
||||||
$pm->saveFirstFrameOfMP4($path,$cachepath);
|
|
||||||
header ("Content-type: image/jpeg");
|
|
||||||
readfile($cachepath);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
renderMP4($path,$data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
function changeImage(&$im,$data)
|
|
||||||
{
|
|
||||||
$image = new Image();
|
|
||||||
foreach($data as $action=>$val)
|
|
||||||
{
|
|
||||||
switch($action)
|
|
||||||
{
|
|
||||||
case 'rotate': $image->rotate($im,$val);break;
|
|
||||||
case 'size': (($data['forcesize']===true)?$image->forceResize($im,$val):$image->resize($im,$val));break;
|
|
||||||
case 'filter': $image->filter($im,$val);break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function render($variables=null)
|
|
||||||
{
|
|
||||||
if(is_array($variables))
|
|
||||||
extract($variables);
|
|
||||||
include (ROOT . DS . 'template.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderMP4($path,$data)
|
|
||||||
{
|
|
||||||
$pm = new PictshareModel;
|
|
||||||
$hash = $data['hash'];
|
|
||||||
$urldata = $pm->getURLInfo($path,true);
|
|
||||||
if($data['size'])
|
|
||||||
$hash = $data['size'].'/'.$hash;
|
|
||||||
$info = $pm->getSizeOfMP4($path);
|
|
||||||
$width = $info['width'];
|
|
||||||
$height = $info['height'];
|
|
||||||
$filesize = $urldata['humansize'];
|
|
||||||
include (ROOT . DS . 'template_mp4.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// from: https://stackoverflow.com/questions/25975943/php-serve-mp4-chrome-provisional-headers-are-shown-request-is-not-finished-ye
|
|
||||||
//
|
|
||||||
function serveFile($filename, $filename_output = false, $mime = 'application/octet-stream')
|
|
||||||
{
|
|
||||||
$buffer_size = 8192;
|
|
||||||
$expiry = 90; //days
|
|
||||||
|
|
||||||
if(!file_exists($filename))
|
|
||||||
{
|
|
||||||
throw new Exception('File not found: ' . $filename);
|
|
||||||
}
|
|
||||||
if(!is_readable($filename))
|
|
||||||
{
|
|
||||||
throw new Exception('File not readable: ' . $filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
header_remove('Cache-Control');
|
|
||||||
header_remove('Pragma');
|
|
||||||
|
|
||||||
$byte_offset = 0;
|
|
||||||
$filesize_bytes = $filesize_original = filesize($filename);
|
|
||||||
|
|
||||||
header('Accept-Ranges: bytes', true);
|
|
||||||
header('Content-Type: ' . $mime, true);
|
|
||||||
|
|
||||||
/*
|
|
||||||
if($filename_output)
|
|
||||||
{
|
|
||||||
header('Content-Disposition: attachment; filename="' . $filename_output . '"');
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
header("Content-Disposition: inline;");
|
|
||||||
// Content-Range header for byte offsets
|
|
||||||
if (isset($_SERVER['HTTP_RANGE']) && preg_match('%bytes=(\d+)-(\d+)?%i', $_SERVER['HTTP_RANGE'], $match))
|
|
||||||
{
|
|
||||||
$byte_offset = (int) $match[1];//Offset signifies where we should begin to read the file
|
|
||||||
if (isset($match[2]))//Length is for how long we should read the file according to the browser, and can never go beyond the file size
|
|
||||||
{
|
|
||||||
$filesize_bytes = min((int) $match[2], $filesize_bytes - $byte_offset);
|
|
||||||
}
|
|
||||||
header("HTTP/1.1 206 Partial content");
|
|
||||||
header(sprintf('Content-Range: bytes %d-%d/%d', $byte_offset, $filesize_bytes - 1, $filesize_original)); ### Decrease by 1 on byte-length since this definition is zero-based index of bytes being sent
|
|
||||||
}
|
|
||||||
|
|
||||||
$byte_range = $filesize_bytes - $byte_offset;
|
|
||||||
|
|
||||||
header('Content-Length: ' . $byte_range);
|
|
||||||
header('Expires: ' . date('D, d M Y H:i:s', time() + 60 * 60 * 24 * $expiry) . ' GMT');
|
|
||||||
|
|
||||||
$buffer = '';
|
|
||||||
$bytes_remaining = $byte_range;
|
|
||||||
|
|
||||||
$handle = fopen($filename, 'r');
|
|
||||||
if(!$handle)
|
|
||||||
{
|
|
||||||
throw new Exception("Could not get handle for file: " . $filename);
|
|
||||||
}
|
|
||||||
if (fseek($handle, $byte_offset, SEEK_SET) == -1)
|
|
||||||
{
|
|
||||||
throw new Exception("Could not seek to byte offset %d", $byte_offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
while ($bytes_remaining > 0)
|
|
||||||
{
|
|
||||||
$chunksize_requested = min($buffer_size, $bytes_remaining);
|
|
||||||
$buffer = fread($handle, $chunksize_requested);
|
|
||||||
$chunksize_real = strlen($buffer);
|
|
||||||
if ($chunksize_real == 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$bytes_remaining -= $chunksize_real;
|
|
||||||
echo $buffer;
|
|
||||||
flush();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//via gist: https://gist.github.com/codler/3906826
|
|
||||||
function serveMP4($path,$hash,$null)
|
|
||||||
{
|
|
||||||
if ($fp = fopen($path, "rb")) {
|
|
||||||
$size = filesize($path);
|
|
||||||
$length = $size;
|
|
||||||
$start = 0;
|
|
||||||
$end = $size - 1;
|
|
||||||
header('Content-type: video/mp4');
|
|
||||||
header("Accept-Ranges: 0-$length");
|
|
||||||
if (isset($_SERVER['HTTP_RANGE'])) {
|
|
||||||
$c_start = $start;
|
|
||||||
$c_end = $end;
|
|
||||||
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
|
|
||||||
if (strpos($range, ',') !== false) {
|
|
||||||
header('HTTP/1.1 416 Requested Range Not Satisfiable');
|
|
||||||
header("Content-Range: bytes $start-$end/$size");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
if ($range == '-') {
|
|
||||||
$c_start = $size - substr($range, 1);
|
|
||||||
} else {
|
|
||||||
$range = explode('-', $range);
|
|
||||||
$c_start = $range[0];
|
|
||||||
$c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
|
|
||||||
}
|
|
||||||
$c_end = ($c_end > $end) ? $end : $c_end;
|
|
||||||
if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) {
|
|
||||||
header('HTTP/1.1 416 Requested Range Not Satisfiable');
|
|
||||||
header("Content-Range: bytes $start-$end/$size");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
$start = $c_start;
|
|
||||||
$end = $c_end;
|
|
||||||
$length = $end - $start + 1;
|
|
||||||
fseek($fp, $start);
|
|
||||||
header('HTTP/1.1 206 Partial Content');
|
|
||||||
}
|
|
||||||
header("Content-Range: bytes $start-$end/$size");
|
|
||||||
header("Content-Length: ".$length);
|
|
||||||
$buffer = 1024 * 8;
|
|
||||||
while(!feof($fp) && ($p = ftell($fp)) <= $end) {
|
|
||||||
if ($p + $buffer > $end) {
|
|
||||||
$buffer = $end - $p + 1;
|
|
||||||
}
|
|
||||||
set_time_limit(0);
|
|
||||||
echo fread($fp, $buffer);
|
|
||||||
flush();
|
|
||||||
}
|
|
||||||
fclose($fp);
|
|
||||||
exit();
|
|
||||||
} else {
|
|
||||||
die('file not found');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function cidr_match($ip, $range)
|
|
||||||
{
|
|
||||||
list ($subnet, $bits) = explode('/', $range);
|
|
||||||
$ip = ip2long($ip);
|
|
||||||
$subnet = ip2long($subnet);
|
|
||||||
$mask = -1 << (32 - $bits);
|
|
||||||
$subnet &= $mask; # nb: in case the supplied subnet wasn't correctly aligned
|
|
||||||
return ($ip & $mask) == $subnet;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isIP($ip)
|
|
||||||
{
|
|
||||||
return filter_var($ip, FILTER_VALIDATE_IP);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getRandomString($length=32, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyz')
|
|
||||||
{
|
|
||||||
$str = '';
|
|
||||||
$max = mb_strlen($keyspace, '8bit') - 1;
|
|
||||||
for ($i = 0; $i < $length; ++$i) {
|
|
||||||
$str .= $keyspace[rand(0, $max)];
|
|
||||||
}
|
|
||||||
return $str;
|
|
||||||
}
|
|
||||||
|
|
||||||
function startsWith($haystack,$needle)
|
|
||||||
{
|
|
||||||
$length = strlen($needle);
|
|
||||||
return (substr($haystack,0,$length) === $needle);
|
|
||||||
}
|
|
||||||
|
|
||||||
function endswith($string, $test) {
|
|
||||||
$strlen = strlen($string);
|
|
||||||
$testlen = strlen($test);
|
|
||||||
if ($testlen > $strlen) return false;
|
|
||||||
return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function remote_filesize($url) {
|
|
||||||
static $regex = '/^Content-Length: *+\K\d++$/im';
|
|
||||||
if (!$fp = @fopen($url, 'rb')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
isset($http_response_header) &&
|
|
||||||
preg_match($regex, implode("\n", $http_response_header), $matches)
|
|
||||||
) {
|
|
||||||
return (int)$matches[0];
|
|
||||||
}
|
|
||||||
return strlen(stream_get_contents($fp));
|
|
||||||
}
|
}
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
//Set title for your image and mp4 hosting service
|
|
||||||
define('TITLE', 'PictShare');
|
|
||||||
|
|
||||||
// PNG level from 0 (largest file) to
|
|
||||||
// 9 (smallest file). Note that this doesn't affect
|
|
||||||
// quality, only file size and CPU
|
|
||||||
define('PNG_COMPRESSION', 6);
|
|
||||||
|
|
||||||
// JPG compression percenage from 0 (smallest file, worst quality)
|
|
||||||
// to 100 (large file, best quality)
|
|
||||||
define('JPEG_COMPRESSION', 90);
|
|
||||||
|
|
||||||
//If set, can be added to any image URL to delete the image and all versions of the image
|
|
||||||
//Must be longer than 10 characters
|
|
||||||
//Usage example:
|
|
||||||
// image: https://pictshare.net/b260e36b60.jpg
|
|
||||||
// to delete it, access https://pictshare.net/delete_YOURMASTERDELETECODE/b260e36b60.jpg
|
|
||||||
// Will render one last time, if refreshed won't be on the server anymore
|
|
||||||
define('MASTER_DELETE_CODE', false);
|
|
||||||
|
|
||||||
//if set, the IP, hostname or every device in the IP range (CIDR naming) will be allowed to delete images
|
|
||||||
//by supplying the parameter "delete"
|
|
||||||
//use multiple ips/hostnames/ranges: semicolon seperated
|
|
||||||
//examples:
|
|
||||||
//======
|
|
||||||
//ip: define('MASTER_DELETE_IP', '8.8.8.8');
|
|
||||||
//hostname: define('MASTER_DELETE_IP', 'home.example.com');
|
|
||||||
//ip range: define('MASTER_DELETE_IP', '192.168.0.0/24'); //all IPs from 192.168.0.0 to 192.168.0.255 can delete
|
|
||||||
//multiple: define('MASTER_DELETE_IP', '192.168.0.0/24;my.home.net;4.4.2.2');
|
|
||||||
define('MASTER_DELETE_IP', false);
|
|
||||||
|
|
||||||
//If set, upload form will only be shown on that location
|
|
||||||
//eg: define('UPLOAD_FORM_LOCATION', 'secret/upload'); then the upload form will only be visible
|
|
||||||
//from http://your.domain/secret/upload
|
|
||||||
define('UPLOAD_FORM_LOCATION', false);
|
|
||||||
|
|
||||||
//If set to true, the only page that will be rendered is the upload form
|
|
||||||
//if a wrong link is provided, 404 will be shown instead of the error page
|
|
||||||
//It's meant to be used to hide the fact that you're using pictshare and your site just looks like a content server
|
|
||||||
//use in combination with UPLOAD_FORM_LOCATION for maximum sneakiness
|
|
||||||
define('LOW_PROFILE', false);
|
|
||||||
|
|
||||||
//if set to a string, this string must be provided before upload.
|
|
||||||
//you can set multiple codes by;separating;them;with;semicolons
|
|
||||||
//if set to false, everybody can upload
|
|
||||||
//for API uploads, the GET Variable 'upload_code' must be provided
|
|
||||||
define('UPLOAD_CODE', false);
|
|
||||||
|
|
||||||
//if set to a string, this string must be provided in the URL to use any options (filters, resizes, etc..)
|
|
||||||
//you can set multiple codes by;separating;them;with;semicolons
|
|
||||||
//if set to false, everybody can use options on all images
|
|
||||||
//if image change code is not provided but the requested image (with options) already exists, it will render to the user just fine
|
|
||||||
define('IMAGE_CHANGE_CODE', false);
|
|
||||||
|
|
||||||
// shall we log all uploaders IP addresses?
|
|
||||||
define('LOG_UPLOADER', true);
|
|
||||||
|
|
||||||
//how many resizes may one image have?
|
|
||||||
//-1 = infinite
|
|
||||||
//0 = none
|
|
||||||
define('MAX_RESIZED_IMAGES',20);
|
|
||||||
|
|
||||||
//when the user requests a resize. Can the resized image be bigger than the original?
|
|
||||||
define('ALLOW_BLOATING', false);
|
|
||||||
|
|
||||||
//Force a specific domain for this server. If set to false, will autodetect.
|
|
||||||
//Format: https://your.domain.name/
|
|
||||||
define('FORCE_DOMAIN', false);
|
|
||||||
|
|
||||||
//Shall errors be displayed to the user?
|
|
||||||
//For dev environments: true, in production: false
|
|
||||||
define('SHOW_ERRORS', false);
|
|
||||||
|
|
||||||
|
|
||||||
//for scalability reasons you might want to upload images to cloud providers
|
|
||||||
//remove comments to use
|
|
||||||
|
|
||||||
/* BACKBLAZE B2 */
|
|
||||||
//========
|
|
||||||
/* You can find your info here: https://secure.backblaze.com/b2_buckets.htm */
|
|
||||||
//define('BACKBLAZE',true); //true=>use backblaze false=>don't
|
|
||||||
//define('BACKBLAZE_ID','');
|
|
||||||
//define('BACKBLAZE_KEY', '');
|
|
||||||
//define('BACKBLAZE_BUCKET_ID', '');
|
|
||||||
//define('BACKBLAZE_BUCKET_NAME', '');
|
|
||||||
//define('BACKBLAZE_AUTODOWNLOAD', true); //if true, will download images from backblaze if not found local
|
|
||||||
//define('BACKBLAZE_AUTOUPLOAD', true); //if true, will upload images to backblaze when they are uploaded to pictshare
|
|
||||||
//define('BACKBLAZE_AUTODELETE', true); //if true, will delete images from backblaze if they are deleted from pictshare
|
|
||||||
|
|
||||||
|
|
||||||
//Backup Folder
|
|
||||||
//========
|
|
||||||
//If you have a NAS or some cifs or nfs mounted drive, you can specify this here as a folder
|
|
||||||
//if a requested hash is not found locally, its looked up on this location. This allows for mounted external spaces
|
|
||||||
//or just backups on a second drive.
|
|
||||||
//Also new hashes will be uploaded/copied there (just the originals, not resizes)
|
|
||||||
//value should be a path **without tailing slash**!
|
|
||||||
|
|
||||||
//define('ALT_FOLDER','/mnt');
|
|
||||||
|
|
||||||
//FFMPEG
|
|
||||||
//========
|
|
||||||
//If you are using PictShare on some other machine than x64 linux (eg raspberry pi or windows) the builtin ffmpeg binary won't work
|
|
||||||
//this is why you can define an alternative path to the ffmpeg binary here.
|
|
||||||
|
|
||||||
//define('FFMPEG_BINARY','/usr/bin/ffmpeg');
|
|
||||||
|
|
||||||
28
index.php
28
index.php
@@ -1,27 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
session_cache_limiter("public");
|
// basic path definitions
|
||||||
$expiry = 90; //days
|
|
||||||
session_cache_expire($expiry * 24 * 60);
|
|
||||||
session_start();
|
|
||||||
define('DS', DIRECTORY_SEPARATOR);
|
define('DS', DIRECTORY_SEPARATOR);
|
||||||
define('ROOT', dirname(__FILE__));
|
define('ROOT', dirname(__FILE__));
|
||||||
define('PATH',((dirname($_SERVER['PHP_SELF'])=='/'||dirname($_SERVER['PHP_SELF'])=='\\'||dirname($_SERVER['PHP_SELF'])=='/index.php'||dirname($_SERVER['PHP_SELF'])=='/backend.php')?'/':dirname($_SERVER['PHP_SELF']).'/'));
|
|
||||||
|
|
||||||
|
//loading default settings if exist
|
||||||
if(!file_exists(ROOT.DS.'inc'.DS.'config.inc.php'))
|
if(!file_exists(ROOT.DS.'inc'.DS.'config.inc.php'))
|
||||||
exit('Rename /inc/example.config.inc.php to /inc/config.inc.php first!');
|
exit('Rename /inc/example.config.inc.php to /inc/config.inc.php first!');
|
||||||
include_once(ROOT.DS.'inc'.DS.'config.inc.php');
|
include_once(ROOT.DS.'inc'.DS.'config.inc.php');
|
||||||
|
|
||||||
if(FORCE_DOMAIN)
|
//loading core and controllers
|
||||||
define('DOMAINPATH',FORCE_DOMAIN);
|
|
||||||
else
|
|
||||||
define('DOMAINPATH',(($_SERVER['HTTPS'])?'https':'http').'://'.$_SERVER['HTTP_HOST']);
|
|
||||||
error_reporting(E_ALL & ~E_NOTICE);
|
|
||||||
if(SHOW_ERRORS)
|
|
||||||
ini_set('display_errors','On');
|
|
||||||
else ini_set('display_errors','Off');
|
|
||||||
|
|
||||||
include_once(ROOT.DS.'inc'.DS.'core.php');
|
include_once(ROOT.DS.'inc'.DS.'core.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'image'. DS . 'image.controller.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'text'. DS . 'text.controller.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'url'. DS . 'url.controller.php');
|
||||||
|
require_once(ROOT . DS . 'controllers' . DS. 'video'. DS . 'video.controller.php');
|
||||||
|
|
||||||
|
|
||||||
|
//send the URL to the architect. It'll know what to do
|
||||||
$url = $_GET['url'];
|
$url = $_GET['url'];
|
||||||
removeMagicQuotes();
|
architect($url);
|
||||||
$GLOBALS['params'] = explode('/', $_GET['url']);
|
|
||||||
callHook();
|
|
||||||
3530
js/dropzone.js
Normal file
3530
js/dropzone.js
Normal file
File diff suppressed because it is too large
Load Diff
2
js/highlight.pack.js
Normal file
2
js/highlight.pack.js
Normal file
File diff suppressed because one or more lines are too long
19
js/pictshare.js
Normal file
19
js/pictshare.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
Dropzone.autoDiscover = false;
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
var myDropzone = new Dropzone("#dropzone");
|
||||||
|
myDropzone.on("success", function(file,response) {
|
||||||
|
console.log("raw response: "+response);
|
||||||
|
if(response==null || response =="null")
|
||||||
|
$("#uploadinfo").append("<div class='alert alert-danger' role='alert'><strong>Error uploading "+file.name+"</strong><br/>Reason is unknown :(</div>")
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var o = JSON.parse(response);
|
||||||
|
if(o.status=='ok')
|
||||||
|
$("#uploadinfo").append("<div class='alert alert-success' role='alert'><strong>"+file.name+"</strong> uploaded as <a target='_blank' href='/"+o.hash+"'>"+o.hash+"</a><br/>URL: <a target='_blank' href='"+o.url+"'>"+o.url+"</a></div>")
|
||||||
|
else if(o.status=='err')
|
||||||
|
$("#uploadinfo").append("<div class='alert alert-danger' role='alert'><strong>Error uploading "+file.name+"</strong><br/>Reason: "+o.reason+"</div>")
|
||||||
|
console.log(o)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
99
js/styles/a11y-dark.css
Normal file
99
js/styles/a11y-dark.css
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/* a11y-dark theme */
|
||||||
|
/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */
|
||||||
|
/* @author: ericwbailey */
|
||||||
|
|
||||||
|
/* Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #d4d0ab;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #ffa07a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-link {
|
||||||
|
color: #f5ab35;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Yellow */
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #ffd700;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #abe338;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #00e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #dcc6e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #2b2b2b;
|
||||||
|
color: #f8f8f2;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (-ms-high-contrast: active) {
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-quote {
|
||||||
|
color: highlight;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
99
js/styles/a11y-light.css
Normal file
99
js/styles/a11y-light.css
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/* a11y-light theme */
|
||||||
|
/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */
|
||||||
|
/* @author: ericwbailey */
|
||||||
|
|
||||||
|
/* Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #696969;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #d91e18;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-link {
|
||||||
|
color: #aa5d00;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Yellow */
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #aa5d00;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #008000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #007faa;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #7928a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #fefefe;
|
||||||
|
color: #545454;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (-ms-high-contrast: active) {
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-quote {
|
||||||
|
color: highlight;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
108
js/styles/agate.css
Normal file
108
js/styles/agate.css
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
/*!
|
||||||
|
* Agate by Taufik Nurrohman <https://github.com/tovic>
|
||||||
|
* ----------------------------------------------------
|
||||||
|
*
|
||||||
|
* #ade5fc
|
||||||
|
* #a2fca2
|
||||||
|
* #c6b4f0
|
||||||
|
* #d36363
|
||||||
|
* #fcc28c
|
||||||
|
* #fc9b9b
|
||||||
|
* #ffa
|
||||||
|
* #fff
|
||||||
|
* #333
|
||||||
|
* #62c8f3
|
||||||
|
* #888
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #333;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag {
|
||||||
|
color: #62c8f3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #ade5fc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #a2fca2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name {
|
||||||
|
color: #ffa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #d36363;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal {
|
||||||
|
color: #fcc28c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-code {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
color: #c6b4f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #fc9b9b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #fc9b9b;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #a2fca2;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs a {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs a:focus,
|
||||||
|
.hljs a:hover {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
89
js/styles/an-old-hope.css
Normal file
89
js/styles/an-old-hope.css
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
An Old Hope – Star Wars Syntax (c) Gustavo Costa <gusbemacbe@gmail.com>
|
||||||
|
Original theme - Ocean Dark Theme – by https://github.com/gavsiu
|
||||||
|
Based on Jesse Leite's Atom syntax theme 'An Old Hope' – https://github.com/JesseLeite/an-old-hope-syntax-atom
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Death Star Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote
|
||||||
|
{
|
||||||
|
color: #B6B18B;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Darth Vader */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-deletion
|
||||||
|
{
|
||||||
|
color: #EB3C54;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Threepio */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-link
|
||||||
|
{
|
||||||
|
color: #E7CE56;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Luke Skywalker */
|
||||||
|
.hljs-attribute
|
||||||
|
{
|
||||||
|
color: #EE7C2B;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Obi Wan Kenobi */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition
|
||||||
|
{
|
||||||
|
color: #4FB4D7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Yoda */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section
|
||||||
|
{
|
||||||
|
color: #78BB65;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mace Windu */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag
|
||||||
|
{
|
||||||
|
color: #B45EA4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Millenium Falcon */
|
||||||
|
.hljs
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #1C1D21;
|
||||||
|
color: #c0c5ce;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis
|
||||||
|
{
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
66
js/styles/androidstudio.css
Normal file
66
js/styles/androidstudio.css
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
Date: 24 Fev 2015
|
||||||
|
Author: Pedro Oliveira <kanytu@gmail . com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
color: #a9b7c6;
|
||||||
|
background: #282b2e;
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #6897BB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #cc7832;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link {
|
||||||
|
color: #629755;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #808080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #bbb529;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #6A8759;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-type {
|
||||||
|
color: #ffc66d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #e8bf6a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
88
js/styles/arduino-light.css
Normal file
88
js/styles/arduino-light.css
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Arduino® Light Theme - Stefania Mellai <s.mellai@arduino.cc>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #434f54;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-name {
|
||||||
|
color: #00979D;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #D35400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #00979D;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #005C5F;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #880000;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: rgba(149,165,166,.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta-keyword {
|
||||||
|
color: #728E00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #728E00;
|
||||||
|
color: #434f54;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-function {
|
||||||
|
color: #728E00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number {
|
||||||
|
color: #8A7B52;
|
||||||
|
}
|
||||||
73
js/styles/arta.css
Normal file
73
js/styles/arta.css
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
Date: 17.V.2011
|
||||||
|
Author: pumbur <pumbur@pumbur.net>
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-regexp {
|
||||||
|
color: #ffcc33;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #00cc66;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-link {
|
||||||
|
color: #32aaee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #6644aa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-template-tag {
|
||||||
|
color: #bb1166;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
45
js/styles/ascetic.css
Normal file
45
js/styles/ascetic.css
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: white;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-link {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
83
js/styles/atelier-cave-dark.css
Normal file
83
js/styles/atelier-cave-dark.css
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/* Base16 Atelier Cave Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Cave Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #7e7887;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #be4678;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #aa573c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #2a9292;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #576ddb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #955ae7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #19171c;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #be4678;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #2a9292;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #19171c;
|
||||||
|
color: #8b8792;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
85
js/styles/atelier-cave-light.css
Normal file
85
js/styles/atelier-cave-light.css
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/* Base16 Atelier Cave Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Cave Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #655f6d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #be4678;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #aa573c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #2a9292;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #576ddb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Cave Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #955ae7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #19171c;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #be4678;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #2a9292;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #efecf4;
|
||||||
|
color: #585260;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-dune-dark.css
Normal file
69
js/styles/atelier-dune-dark.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Dune Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Dune Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #999580;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #d73737;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #b65611;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #60ac39;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #6684e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #b854d4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #20201d;
|
||||||
|
color: #a6a28c;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-dune-light.css
Normal file
69
js/styles/atelier-dune-light.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Dune Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Dune Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #7d7a68;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #d73737;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #b65611;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #60ac39;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #6684e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Dune Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #b854d4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #fefbec;
|
||||||
|
color: #6e6b5e;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
84
js/styles/atelier-estuary-dark.css
Normal file
84
js/styles/atelier-estuary-dark.css
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/* Base16 Atelier Estuary Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Estuary Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #878573;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #ba6236;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #ae7313;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #7d9726;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #36a166;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #5f9182;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #22221b;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #ba6236;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #7d9726;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #22221b;
|
||||||
|
color: #929181;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
84
js/styles/atelier-estuary-light.css
Normal file
84
js/styles/atelier-estuary-light.css
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/* Base16 Atelier Estuary Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Estuary Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #6c6b5a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #ba6236;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #ae7313;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #7d9726;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #36a166;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Estuary Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #5f9182;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #22221b;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #ba6236;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #7d9726;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #f4f3ec;
|
||||||
|
color: #5f5e4e;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-forest-dark.css
Normal file
69
js/styles/atelier-forest-dark.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Forest Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Forest Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #9c9491;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #f22c40;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #df5320;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #7b9726;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #407ee7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #6666ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #1b1918;
|
||||||
|
color: #a8a19f;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-forest-light.css
Normal file
69
js/styles/atelier-forest-light.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Forest Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Forest Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #766e6b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #f22c40;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #df5320;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #7b9726;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #407ee7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Forest Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #6666ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #f1efee;
|
||||||
|
color: #68615e;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-heath-dark.css
Normal file
69
js/styles/atelier-heath-dark.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Heath Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Heath Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #9e8f9e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #ca402b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #a65926;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #918b3b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #516aec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #7b59c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #1b181b;
|
||||||
|
color: #ab9bab;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-heath-light.css
Normal file
69
js/styles/atelier-heath-light.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Heath Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Heath Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #776977;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #ca402b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #a65926;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #918b3b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #516aec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Heath Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #7b59c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #f7f3f7;
|
||||||
|
color: #695d69;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-lakeside-dark.css
Normal file
69
js/styles/atelier-lakeside-dark.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Lakeside Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #7195a8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #d22d72;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #935c25;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #568c3b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #257fad;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #6b6bb8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #161b1d;
|
||||||
|
color: #7ea2b4;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-lakeside-light.css
Normal file
69
js/styles/atelier-lakeside-light.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Lakeside Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #5a7b8c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #d22d72;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #935c25;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #568c3b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #257fad;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Lakeside Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #6b6bb8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #ebf8ff;
|
||||||
|
color: #516d7b;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
84
js/styles/atelier-plateau-dark.css
Normal file
84
js/styles/atelier-plateau-dark.css
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/* Base16 Atelier Plateau Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Plateau Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #7e7777;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #ca4949;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #b45a3c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #4b8b8b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #7272ca;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #8464c4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #1b1818;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #ca4949;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #4b8b8b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #1b1818;
|
||||||
|
color: #8a8585;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
84
js/styles/atelier-plateau-light.css
Normal file
84
js/styles/atelier-plateau-light.css
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/* Base16 Atelier Plateau Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Plateau Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #655d5d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #ca4949;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #b45a3c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #4b8b8b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #7272ca;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Plateau Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #8464c4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #1b1818;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #ca4949;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #4b8b8b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #f4ecec;
|
||||||
|
color: #585050;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
84
js/styles/atelier-savanna-dark.css
Normal file
84
js/styles/atelier-savanna-dark.css
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/* Base16 Atelier Savanna Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Savanna Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #78877d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #b16139;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #9f713c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #489963;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #478c90;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #55859b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #171c19;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #b16139;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #489963;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #171c19;
|
||||||
|
color: #87928a;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
84
js/styles/atelier-savanna-light.css
Normal file
84
js/styles/atelier-savanna-light.css
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/* Base16 Atelier Savanna Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Savanna Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #5f6d64;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #b16139;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #9f713c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #489963;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #478c90;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Savanna Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #55859b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #171c19;
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #b16139;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #489963;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #ecf4ee;
|
||||||
|
color: #526057;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-seaside-dark.css
Normal file
69
js/styles/atelier-seaside-dark.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Seaside Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Seaside Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #809980;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #e6193c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #87711d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #29a329;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #3d62f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #ad2bee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #131513;
|
||||||
|
color: #8ca68c;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-seaside-light.css
Normal file
69
js/styles/atelier-seaside-light.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Seaside Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Seaside Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #687d68;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #e6193c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #87711d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #29a329;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #3d62f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Seaside Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #ad2bee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #f4fbf4;
|
||||||
|
color: #5e6e5e;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-sulphurpool-dark.css
Normal file
69
js/styles/atelier-sulphurpool-dark.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Sulphurpool Dark - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #898ea4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #c94922;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #c76b29;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #ac9739;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #3d8fd1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #6679cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #202746;
|
||||||
|
color: #979db4;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
69
js/styles/atelier-sulphurpool-light.css
Normal file
69
js/styles/atelier-sulphurpool-light.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* Base16 Atelier Sulphurpool Light - Theme */
|
||||||
|
/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
|
||||||
|
/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #6b7394;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #c94922;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #c76b29;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #ac9739;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #3d8fd1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Atelier-Sulphurpool Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #6679cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #f5f7ff;
|
||||||
|
color: #5e6687;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
77
js/styles/atom-one-dark-reasonable.css
Normal file
77
js/styles/atom-one-dark-reasonable.css
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage
|
||||||
|
|
||||||
|
Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
|
||||||
|
|
||||||
|
*/
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
line-height: 1.3em;
|
||||||
|
color: #abb2bf;
|
||||||
|
background: #282c34;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.hljs-keyword, .hljs-operator {
|
||||||
|
color: #F92672;
|
||||||
|
}
|
||||||
|
.hljs-pattern-match {
|
||||||
|
color: #F92672;
|
||||||
|
}
|
||||||
|
.hljs-pattern-match .hljs-constructor {
|
||||||
|
color: #61aeee;
|
||||||
|
}
|
||||||
|
.hljs-function {
|
||||||
|
color: #61aeee;
|
||||||
|
}
|
||||||
|
.hljs-function .hljs-params {
|
||||||
|
color: #A6E22E;
|
||||||
|
}
|
||||||
|
.hljs-function .hljs-params .hljs-typing {
|
||||||
|
color: #FD971F;
|
||||||
|
}
|
||||||
|
.hljs-module-access .hljs-module {
|
||||||
|
color: #7e57c2;
|
||||||
|
}
|
||||||
|
.hljs-constructor {
|
||||||
|
color: #e2b93d;
|
||||||
|
}
|
||||||
|
.hljs-constructor .hljs-string {
|
||||||
|
color: #9CCC65;
|
||||||
|
}
|
||||||
|
.hljs-comment, .hljs-quote {
|
||||||
|
color: #b18eb1;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.hljs-doctag, .hljs-formula {
|
||||||
|
color: #c678dd;
|
||||||
|
}
|
||||||
|
.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst {
|
||||||
|
color: #e06c75;
|
||||||
|
}
|
||||||
|
.hljs-literal {
|
||||||
|
color: #56b6c2;
|
||||||
|
}
|
||||||
|
.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string {
|
||||||
|
color: #98c379;
|
||||||
|
}
|
||||||
|
.hljs-built_in, .hljs-class .hljs-title {
|
||||||
|
color: #e6c07b;
|
||||||
|
}
|
||||||
|
.hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number {
|
||||||
|
color: #d19a66;
|
||||||
|
}
|
||||||
|
.hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title {
|
||||||
|
color: #61aeee;
|
||||||
|
}
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.hljs-link {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
96
js/styles/atom-one-dark.css
Normal file
96
js/styles/atom-one-dark.css
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Atom One Dark by Daniel Gamage
|
||||||
|
Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
|
||||||
|
|
||||||
|
base: #282c34
|
||||||
|
mono-1: #abb2bf
|
||||||
|
mono-2: #818896
|
||||||
|
mono-3: #5c6370
|
||||||
|
hue-1: #56b6c2
|
||||||
|
hue-2: #61aeee
|
||||||
|
hue-3: #c678dd
|
||||||
|
hue-4: #98c379
|
||||||
|
hue-5: #e06c75
|
||||||
|
hue-5-2: #be5046
|
||||||
|
hue-6: #d19a66
|
||||||
|
hue-6-2: #e6c07b
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #abb2bf;
|
||||||
|
background: #282c34;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #5c6370;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-formula {
|
||||||
|
color: #c678dd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #e06c75;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-literal {
|
||||||
|
color: #56b6c2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-meta-string {
|
||||||
|
color: #98c379;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-class .hljs-title {
|
||||||
|
color: #e6c07b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attr,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-number {
|
||||||
|
color: #d19a66;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-title {
|
||||||
|
color: #61aeee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-link {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
96
js/styles/atom-one-light.css
Normal file
96
js/styles/atom-one-light.css
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Atom One Light by Daniel Gamage
|
||||||
|
Original One Light Syntax theme from https://github.com/atom/one-light-syntax
|
||||||
|
|
||||||
|
base: #fafafa
|
||||||
|
mono-1: #383a42
|
||||||
|
mono-2: #686b77
|
||||||
|
mono-3: #a0a1a7
|
||||||
|
hue-1: #0184bb
|
||||||
|
hue-2: #4078f2
|
||||||
|
hue-3: #a626a4
|
||||||
|
hue-4: #50a14f
|
||||||
|
hue-5: #e45649
|
||||||
|
hue-5-2: #c91243
|
||||||
|
hue-6: #986801
|
||||||
|
hue-6-2: #c18401
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #383a42;
|
||||||
|
background: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #a0a1a7;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-formula {
|
||||||
|
color: #a626a4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #e45649;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-literal {
|
||||||
|
color: #0184bb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-meta-string {
|
||||||
|
color: #50a14f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-class .hljs-title {
|
||||||
|
color: #c18401;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attr,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-number {
|
||||||
|
color: #986801;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-title {
|
||||||
|
color: #4078f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-link {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
64
js/styles/brown-paper.css
Normal file
64
js/styles/brown-paper.css
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Brown Paper style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background:#b7a68e url(./brown-papersq.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal {
|
||||||
|
color:#005599;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #363c69;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-name {
|
||||||
|
color: #2c009f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #802022;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
BIN
js/styles/brown-papersq.png
Normal file
BIN
js/styles/brown-papersq.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
60
js/styles/codepen-embed.css
Normal file
60
js/styles/codepen-embed.css
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
codepen.io Embed Theme
|
||||||
|
Author: Justin Perry <http://github.com/ourmaninamsterdam>
|
||||||
|
Original theme - https://github.com/chriskempson/tomorrow-theme
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #222;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #ab875d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #9b869b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #8f9c6c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
71
js/styles/color-brewer.css
Normal file
71
js/styles/color-brewer.css
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Colorbrewer theme
|
||||||
|
Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock <mike@ocks.org>
|
||||||
|
Ported by Fabrício Tavares de Oliveira
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #756bb1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #636363;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-link {
|
||||||
|
color: #31a354;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-variable {
|
||||||
|
color: #88f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-strong {
|
||||||
|
color: #3182bd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #e6550d;
|
||||||
|
}
|
||||||
77
js/styles/darcula.css
Normal file
77
js/styles/darcula.css
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Darcula color scheme from the JetBrains family of IDEs
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #2b2b2b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
color: #bababa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-emphasis {
|
||||||
|
color: #a8a8a2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-literal {
|
||||||
|
color: #6896ba;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #a6e22e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-variable {
|
||||||
|
color: #cb7832;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-params {
|
||||||
|
color: #b9b9b9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string {
|
||||||
|
color: #6a8759;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #e0c46c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #7f7f7f;
|
||||||
|
}
|
||||||
63
js/styles/dark.css
Normal file
63
js/styles/dark.css
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Dark style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-link {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #d88;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
6
js/styles/darkula.css
Normal file
6
js/styles/darkula.css
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
Deprecated due to a typo in the name and left here for compatibility purpose only.
|
||||||
|
Please use darcula.css instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url('darcula.css');
|
||||||
99
js/styles/default.css
Normal file
99
js/styles/default.css
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Original highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #F0F0F0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Base color: saturation 0; */
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* User color: hue: 0 */
|
||||||
|
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #880000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #880000;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #BC6060;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Language color: hue: 90; */
|
||||||
|
|
||||||
|
.hljs-literal {
|
||||||
|
color: #78A960;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #397300;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Meta color: hue: 200 */
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #1f7199;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta-string {
|
||||||
|
color: #4d99bf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc effects */
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
97
js/styles/docco.css
Normal file
97
js/styles/docco.css
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #000;
|
||||||
|
background: #f8f8ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #408080;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #954121;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number {
|
||||||
|
color: #40a070;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-doctag {
|
||||||
|
color: #219161;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-type {
|
||||||
|
color: #19469d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-params {
|
||||||
|
color: #00f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title {
|
||||||
|
color: #458;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #000080;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #008080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
color: #b68;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #990073;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name {
|
||||||
|
color: #0086b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #999;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background: #fdd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background: #dfd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
76
js/styles/dracula.css
Normal file
76
js/styles/dracula.css
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Dracula Theme v1.2.0
|
||||||
|
|
||||||
|
https://github.com/zenorocha/dracula-theme
|
||||||
|
|
||||||
|
Copyright 2015, All rights reserved
|
||||||
|
|
||||||
|
Code licensed under the MIT license
|
||||||
|
http://zenorocha.mit-license.org
|
||||||
|
|
||||||
|
@author Éverton Ribeiro <nuxlli@gmail.com>
|
||||||
|
@author Zeno Rocha <hi@zenorocha.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #282a36;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-link {
|
||||||
|
color: #8be9fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-function .hljs-keyword {
|
||||||
|
color: #ff79c6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #f8f8f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #f1fa8c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #6272a4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
71
js/styles/far.css
Normal file
71
js/styles/far.css
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
FAR Style (c) MajestiC <majestic2k@gmail.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #000080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #0ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #ff0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-variable {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-link {
|
||||||
|
color: #0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #008080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
88
js/styles/foundation.css
vendored
Normal file
88
js/styles/foundation.css
vendored
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
Description: Foundation 4 docs style for highlight.js
|
||||||
|
Author: Dan Allen <dan.j.allen@gmail.com>
|
||||||
|
Website: http://foundation.zurb.com/docs/
|
||||||
|
Version: 1.0
|
||||||
|
Date: 2013-04-02
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #eee; color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-emphasis,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #070;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #d14;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-comment {
|
||||||
|
color: #998;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-title {
|
||||||
|
color: #900;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-class .hljs-title,
|
||||||
|
.hljs-type {
|
||||||
|
color: #458;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #336699;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #997700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #3344bb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #099;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp {
|
||||||
|
background-color: #fff0ff;
|
||||||
|
color: #880088;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol {
|
||||||
|
color: #990073;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #007700;
|
||||||
|
}
|
||||||
71
js/styles/github-gist.css
Normal file
71
js/styles/github-gist.css
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/**
|
||||||
|
* GitHub Gist Theme
|
||||||
|
* Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
background: white;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #333333;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #969896;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-emphasis,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #df5000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-type {
|
||||||
|
color: #a71d5d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #0086b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-name {
|
||||||
|
color: #63a35c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-attr,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #795da3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
color: #55a532;
|
||||||
|
background-color: #eaffea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #bd2c00;
|
||||||
|
background-color: #ffecec;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-link {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
99
js/styles/github.css
Normal file
99
js/styles/github.css
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
github.com style (c) Vasily Polovnyov <vast@whiteants.net>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #333;
|
||||||
|
background: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #998;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag .hljs-attr {
|
||||||
|
color: #008080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-doctag {
|
||||||
|
color: #d14;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-selector-id {
|
||||||
|
color: #900;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-subst {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-class .hljs-title {
|
||||||
|
color: #458;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #000080;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
color: #009926;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #990073;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name {
|
||||||
|
color: #0086b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #999;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background: #fdd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background: #dfd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
78
js/styles/gml.css
Normal file
78
js/styles/gml.css
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
GML Theme - Meseta <meseta@gmail.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #222222;
|
||||||
|
color: #C0C0C0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keywords {
|
||||||
|
color: #FFB871;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in {
|
||||||
|
color: #FFB871;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-literal {
|
||||||
|
color: #FF8080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol {
|
||||||
|
color: #58E55A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: #5B995B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string {
|
||||||
|
color: #FFFF00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number {
|
||||||
|
color: #FF8080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-function,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #C0C0C0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
89
js/styles/googlecode.css
Normal file
89
js/styles/googlecode.css
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Google Code style (c) Aahan Krish <geekpanth3r@gmail.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: white;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-name {
|
||||||
|
color: #008;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #660;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-regexp {
|
||||||
|
color: #080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-link {
|
||||||
|
color: #066;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-attr,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-params {
|
||||||
|
color: #606;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-formula {
|
||||||
|
background-color: #eee;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #9B703F
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: #baeeba;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: #ffc8bd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
101
js/styles/grayscale.css
Normal file
101
js/styles/grayscale.css
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
grayscale style (c) MY Sun <simonmysun@gmail.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #333;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #777;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-literal {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-formula {
|
||||||
|
color: #333;
|
||||||
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC) repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-selector-id {
|
||||||
|
color: #000;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-subst {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-class .hljs-title,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-name {
|
||||||
|
color: #333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp {
|
||||||
|
color: #333;
|
||||||
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==) repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-link {
|
||||||
|
color: #000;
|
||||||
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==) repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name {
|
||||||
|
color: #000;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #999;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #fff;
|
||||||
|
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==) repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
color: #000;
|
||||||
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC) repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
108
js/styles/gruvbox-dark.css
Normal file
108
js/styles/gruvbox-dark.css
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Gruvbox style (dark) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox)
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #282828;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #ebdbb2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Red */
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-formula,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #fb4934;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Blue */
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-emphasis,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-variable {
|
||||||
|
color: #83a598;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Yellow */
|
||||||
|
.hljs-attr,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-type {
|
||||||
|
color: #fabd2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Purple */
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-number {
|
||||||
|
color: #8f3f71;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Orange */
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #fe8019;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Green */
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-meta-string,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol {
|
||||||
|
color: #b8bb26;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Aqua */
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-class,
|
||||||
|
.hljs-function,
|
||||||
|
.hljs-function .hljs-keyword,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-tag {
|
||||||
|
color: #8ec07c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Gray */
|
||||||
|
.hljs-comment {
|
||||||
|
color: #928374;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Purple */
|
||||||
|
.hljs-link_label,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-number {
|
||||||
|
color: #d3869b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
108
js/styles/gruvbox-light.css
Normal file
108
js/styles/gruvbox-light.css
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Gruvbox style (light) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox)
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #fbf1c7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #3c3836;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Red */
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-formula,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #9d0006;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Blue */
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-emphasis,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-variable {
|
||||||
|
color: #076678;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Yellow */
|
||||||
|
.hljs-attr,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-type {
|
||||||
|
color: #b57614;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Purple */
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-number {
|
||||||
|
color: #8f3f71;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Orange */
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #af3a03;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Green */
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-meta-string,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol {
|
||||||
|
color: #79740e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Aqua */
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-class,
|
||||||
|
.hljs-function,
|
||||||
|
.hljs-function .hljs-keyword,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-tag {
|
||||||
|
color: #427b58;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Gray */
|
||||||
|
.hljs-comment {
|
||||||
|
color: #928374;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gruvbox Purple */
|
||||||
|
.hljs-link_label,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-number {
|
||||||
|
color: #8f3f71;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
83
js/styles/hopscotch.css
Normal file
83
js/styles/hopscotch.css
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* Hopscotch
|
||||||
|
* by Jan T. Sott
|
||||||
|
* https://github.com/idleberg/Hopscotch
|
||||||
|
*
|
||||||
|
* This work is licensed under the Creative Commons CC0 1.0 Universal License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #989498;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #dd464c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params {
|
||||||
|
color: #fd8b19;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Yellow */
|
||||||
|
.hljs-class .hljs-title {
|
||||||
|
color: #fdcc59;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #8fc13e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Aqua */
|
||||||
|
.hljs-meta {
|
||||||
|
color: #149b93;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blue */
|
||||||
|
.hljs-function,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-title {
|
||||||
|
color: #1290bf;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #c85e7c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
background: #322931;
|
||||||
|
color: #b9b5b8;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
102
js/styles/hybrid.css
Normal file
102
js/styles/hybrid.css
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid)
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*background color*/
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #1d1f21;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*selection color*/
|
||||||
|
.hljs::selection,
|
||||||
|
.hljs span::selection {
|
||||||
|
background: #373b41;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs::-moz-selection,
|
||||||
|
.hljs span::-moz-selection {
|
||||||
|
background: #373b41;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*foreground color*/
|
||||||
|
.hljs {
|
||||||
|
color: #c5c8c6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_yellow*/
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-name {
|
||||||
|
color: #f0c674;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_comment*/
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-meta .hljs-keyword {
|
||||||
|
color: #707880;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_red*/
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-link {
|
||||||
|
color: #cc6666
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_green*/
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #b5bd68;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_purple*/
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-selector-id {
|
||||||
|
color: #b294bb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_blue*/
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-tag {
|
||||||
|
color: #81a2be;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_aqua*/
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #8abeb7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*color: fg_orange*/
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #de935f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
97
js/styles/idea.css
Normal file
97
js/styles/idea.css
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Intellij Idea-like styling (c) Vasily Polovnyov <vast@whiteants.net>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #000;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-title {
|
||||||
|
font-weight: normal;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #808080;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #808000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag {
|
||||||
|
background: #efefef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #0000ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string {
|
||||||
|
color: #008000;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-formula {
|
||||||
|
color: #000;
|
||||||
|
background: #d0eded;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-doctag {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #660e7a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background: #baeeba;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background: #ffc8bd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
73
js/styles/ir-black.css
Normal file
73
js/styles/ir-black.css
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
IR_Black style (c) Vasily Mikhailitchenko <vaskas@programica.ru>
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #000;
|
||||||
|
color: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #7c7c7c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name {
|
||||||
|
color: #96cbfe;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-selector-id {
|
||||||
|
color: #ffffb6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #a8ff60;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-subst {
|
||||||
|
color: #daefa3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
color: #e9c062;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-doctag {
|
||||||
|
color: #ffffb6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-literal {
|
||||||
|
color: #c6c5fe;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-deletion {
|
||||||
|
color:#ff73fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
112
js/styles/isbl-editor-dark.css
Normal file
112
js/styles/isbl-editor-dark.css
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
ISBL Editor style dark color scheme (c) Dmitriy Tarasov <dimatar@gmail.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #404040;
|
||||||
|
color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base color: saturation 0; */
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: #b5b5b5;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-name {
|
||||||
|
color: #f0f0f0;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* User color: hue: 0 */
|
||||||
|
|
||||||
|
.hljs-string {
|
||||||
|
color: #97bf0d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #df471e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title>.hljs-built_in {
|
||||||
|
color: #81bce9;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #e2c696;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Language color: hue: 90; */
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-literal {
|
||||||
|
color: #97bf0d;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #397300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-class {
|
||||||
|
color: #ce9d4d;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Meta color: hue: 200 */
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #1f7199;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta-string {
|
||||||
|
color: #4d99bf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc effects */
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
112
js/styles/isbl-editor-light.css
Normal file
112
js/styles/isbl-editor-light.css
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
ISBL Editor style light color schemec (c) Dmitriy Tarasov <dimatar@gmail.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: white;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base color: saturation 0; */
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: #555555;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-name {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* User color: hue: 0 */
|
||||||
|
|
||||||
|
.hljs-string {
|
||||||
|
color: #000080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #fb2c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title>.hljs-built_in {
|
||||||
|
color: #008080;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #5e1700;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Language color: hue: 90; */
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-literal {
|
||||||
|
color: #000080;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #397300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-class {
|
||||||
|
color: #6f1C00;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Meta color: hue: 200 */
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #1f7199;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta-string {
|
||||||
|
color: #4d99bf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc effects */
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
74
js/styles/kimbie.dark.css
Normal file
74
js/styles/kimbie.dark.css
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Name: Kimbie (dark)
|
||||||
|
Author: Jan T. Sott
|
||||||
|
License: Creative Commons Attribution-ShareAlike 4.0 Unported License
|
||||||
|
URL: https://github.com/idleberg/Kimbie-highlight.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Kimbie Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #d6baad;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #dc3958;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-link {
|
||||||
|
color: #f79a32;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Yellow */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #f06431;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #889b4a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-function {
|
||||||
|
color: #98676a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #221a0f;
|
||||||
|
color: #d3af86;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
74
js/styles/kimbie.light.css
Normal file
74
js/styles/kimbie.light.css
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Name: Kimbie (light)
|
||||||
|
Author: Jan T. Sott
|
||||||
|
License: Creative Commons Attribution-ShareAlike 4.0 Unported License
|
||||||
|
URL: https://github.com/idleberg/Kimbie-highlight.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Kimbie Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #a57a4c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #dc3958;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-link {
|
||||||
|
color: #f79a32;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Yellow */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #f06431;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #889b4a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Kimbie Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-function {
|
||||||
|
color: #98676a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #fbebd4;
|
||||||
|
color: #84613d;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
87
js/styles/lightfair.css
Normal file
87
js/styles/lightfair.css
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Lightfair style (c) Tristian Kelly <tristian.kelly560@gmail.com>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-name {
|
||||||
|
color:#01a3a3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag,.hljs-meta {
|
||||||
|
color:#778899;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #444
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: #888888
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-name {
|
||||||
|
font-weight: bold
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #4286f4
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #4286f4;
|
||||||
|
font-weight: bold
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #BC6060
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-literal {
|
||||||
|
color: #62bcbc
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #25c6c6
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta-string {
|
||||||
|
color: #4d99bf
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold
|
||||||
|
}
|
||||||
70
js/styles/magula.css
Normal file
70
js/styles/magula.css
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
Description: Magula style for highligh.js
|
||||||
|
Author: Ruslan Keba <rukeba@gmail.com>
|
||||||
|
Website: http://rukeba.com/
|
||||||
|
Version: 1.0
|
||||||
|
Date: 2009-01-03
|
||||||
|
Music: Aphex Twin / Xtal
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #050;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-link {
|
||||||
|
color: #800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #00e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name {
|
||||||
|
font-weight: bold;
|
||||||
|
color: navy;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
59
js/styles/mono-blue.css
Normal file
59
js/styles/mono-blue.css
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
Five-color theme from a single blue hue.
|
||||||
|
*/
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #eaeef3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
color: #00193a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: #738191;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #0048ab;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #4c81c9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
83
js/styles/monokai-sublime.css
Normal file
83
js/styles/monokai-sublime.css
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #23241f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #f8f8f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-emphasis {
|
||||||
|
color: #a8a8a2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-link {
|
||||||
|
color: #ae81ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #a6e22e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-attr {
|
||||||
|
color: #f92672;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #66d9ef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-class .hljs-title {
|
||||||
|
color: #f8f8f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #e6db74;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #75715e;
|
||||||
|
}
|
||||||
70
js/styles/monokai.css
Normal file
70
js/styles/monokai.css
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
Monokai style - ported by Luigi Maselli - http://grigio.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #272822; color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-name {
|
||||||
|
color: #f92672;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code {
|
||||||
|
color: #66d9ef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-class .hljs-title {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
color: #bf79db;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-emphasis,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #a6e22e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #75715e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-selector-id {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
309
js/styles/nord.css
Normal file
309
js/styles/nord.css
Normal file
@@ -0,0 +1,309 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017-present Arctic Ice Studio <development@arcticicestudio.com>
|
||||||
|
* Copyright (c) 2017-present Sven Greb <development@svengreb.de>
|
||||||
|
*
|
||||||
|
* Project: Nord highlight.js
|
||||||
|
* Version: 0.1.0
|
||||||
|
* Repository: https://github.com/arcticicestudio/nord-highlightjs
|
||||||
|
* License: MIT
|
||||||
|
* References:
|
||||||
|
* https://github.com/arcticicestudio/nord
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #2E3440;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #D8DEE9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-id {
|
||||||
|
color: #8FBCBB;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-attr {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-pseudo {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition {
|
||||||
|
background-color: rgba(163, 190, 140, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
background-color: rgba(191, 97, 106, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-type {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-class {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-function {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-function > .hljs-title {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-symbol {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number {
|
||||||
|
color: #B48EAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp {
|
||||||
|
color: #EBCB8B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string {
|
||||||
|
color: #A3BE8C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-params {
|
||||||
|
color: #D8DEE9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-bullet {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-formula {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-quote {
|
||||||
|
color: #4C566A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment {
|
||||||
|
color: #4C566A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-doctag {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-meta-keyword {
|
||||||
|
color: #5E81AC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta-string {
|
||||||
|
color: #A3BE8C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attr {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #D8DEE9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-builtin-name {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-name {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable {
|
||||||
|
color: #D8DEE9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #D8DEE9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-template-tag {
|
||||||
|
color: #5E81AC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.abnf .hljs-attribute {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.abnf .hljs-symbol {
|
||||||
|
color: #EBCB8B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apache .hljs-attribute {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apache .hljs-section {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arduino .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aspectj .hljs-meta {
|
||||||
|
color: #D08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aspectj > .hljs-title {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bnf .hljs-attribute {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clojure .hljs-name {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clojure .hljs-symbol {
|
||||||
|
color: #EBCB8B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coq .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cpp .hljs-meta-string {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.css .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.css .hljs-keyword {
|
||||||
|
color: #D08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diff .hljs-meta {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ebnf .hljs-attribute {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.glsl .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.groovy .hljs-meta:not(:first-child) {
|
||||||
|
color: #D08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
.haxe .hljs-meta {
|
||||||
|
color: #D08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
.java .hljs-meta {
|
||||||
|
color: #D08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ldif .hljs-attribute {
|
||||||
|
color: #8FBCBB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lisp .hljs-name {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lua .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.moonscript .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nginx .hljs-attribute {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nginx .hljs-section {
|
||||||
|
color: #5E81AC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pf .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.processing .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scss .hljs-keyword {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stylus .hljs-keyword {
|
||||||
|
color: #81A1C1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.swift .hljs-meta {
|
||||||
|
color: #D08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vim .hljs-built_in {
|
||||||
|
color: #88C0D0;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yaml .hljs-meta {
|
||||||
|
color: #D08770;
|
||||||
|
}
|
||||||
88
js/styles/obsidian.css
Normal file
88
js/styles/obsidian.css
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/**
|
||||||
|
* Obsidian style
|
||||||
|
* ported by Alexander Marenin (http://github.com/ioncreature)
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #282b2e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-selector-id {
|
||||||
|
color: #93c763;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number {
|
||||||
|
color: #ffcd22;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
color: #e0e2e4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #668bb0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code,
|
||||||
|
.hljs-class .hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link {
|
||||||
|
color: #d39745;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta {
|
||||||
|
color: #557182;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-emphasis,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable {
|
||||||
|
color: #8cbbad;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol {
|
||||||
|
color: #ec7600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #818e96;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #A082BD
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
74
js/styles/ocean.css
Normal file
74
js/styles/ocean.css
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/* Ocean Dark Theme */
|
||||||
|
/* https://github.com/gavsiu */
|
||||||
|
/* Original theme - https://github.com/chriskempson/base16 */
|
||||||
|
|
||||||
|
/* Ocean Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #65737e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #bf616a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-link {
|
||||||
|
color: #d08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Yellow */
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #ebcb8b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #a3be8c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #8fa1b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #b48ead;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #2b303b;
|
||||||
|
color: #c0c5ce;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
72
js/styles/paraiso-dark.css
Normal file
72
js/styles/paraiso-dark.css
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
Paraíso (dark)
|
||||||
|
Created by Jan T. Sott (http://github.com/idleberg)
|
||||||
|
Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Paraíso Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #8d8687;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #ef6155;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #f99b15;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Yellow */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #fec418;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #48b685;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #815ba4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #2f1e2e;
|
||||||
|
color: #a39e9b;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
72
js/styles/paraiso-light.css
Normal file
72
js/styles/paraiso-light.css
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
Paraíso (light)
|
||||||
|
Created by Jan T. Sott (http://github.com/idleberg)
|
||||||
|
Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Paraíso Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #776e71;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #ef6155;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #f99b15;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Yellow */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #fec418;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #48b685;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paraíso Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #815ba4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #e7e9db;
|
||||||
|
color: #4f424c;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
83
js/styles/pojoaque.css
Normal file
83
js/styles/pojoaque.css
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Pojoaque Style by Jason Tate
|
||||||
|
http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html
|
||||||
|
Based on Solarized Style from http://ethanschoonover.com/solarized
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #dccf8f;
|
||||||
|
background: url(./pojoaque.jpg) repeat scroll left top #181914;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #586e75;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #b64926;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-doctag,
|
||||||
|
.hljs-regexp {
|
||||||
|
color: #468966;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-name {
|
||||||
|
color: #ffb03b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-class .hljs-title,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-tag {
|
||||||
|
color: #b58900;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #b89859;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #cb4b16;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #dc322f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #d3a60c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-formula {
|
||||||
|
background: #073642;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
BIN
js/styles/pojoaque.jpg
Normal file
BIN
js/styles/pojoaque.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
96
js/styles/purebasic.css
Normal file
96
js/styles/purebasic.css
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
PureBASIC native IDE style ( version 1.0 - April 2016 )
|
||||||
|
|
||||||
|
by Tristano Ajmone <tajmone@gmail.com>
|
||||||
|
|
||||||
|
Public Domain
|
||||||
|
|
||||||
|
NOTE_1: PureBASIC code syntax highlighting only applies the following classes:
|
||||||
|
.hljs-comment
|
||||||
|
.hljs-function
|
||||||
|
.hljs-keywords
|
||||||
|
.hljs-string
|
||||||
|
.hljs-symbol
|
||||||
|
|
||||||
|
Other classes are added here for the benefit of styling other languages with the look and feel of PureBASIC native IDE style.
|
||||||
|
If you need to customize a stylesheet for PureBASIC only, remove all non-relevant classes -- PureBASIC-related classes are followed by
|
||||||
|
a "--- used for PureBASIC ... ---" comment on same line.
|
||||||
|
|
||||||
|
NOTE_2: Color names provided in comments were derived using "Name that Color" online tool:
|
||||||
|
http://chir.ag/projects/name-that-color
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs { /* Common set of rules required by highlight.js (don'r remove!) */
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #FFFFDF; /* Half and Half (approx.) */
|
||||||
|
/* --- Uncomment to add PureBASIC native IDE styled font!
|
||||||
|
font-family: Consolas;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs, /* --- used for PureBASIC base color --- */
|
||||||
|
.hljs-type, /* --- used for PureBASIC Procedures return type --- */
|
||||||
|
.hljs-function, /* --- used for wrapping PureBASIC Procedures definitions --- */
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-attr,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-subst {
|
||||||
|
color: #000000; /* Black */
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment, /* --- used for PureBASIC Comments --- */
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #00AAAA; /* Persian Green (approx.) */
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title, /* --- used for PureBASIC Procedures Names --- */
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-code {
|
||||||
|
color: #006666; /* Blue Stone (approx.) */
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword, /* --- used for PureBASIC Keywords --- */
|
||||||
|
.hljs-class,
|
||||||
|
.hljs-meta-keyword,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name {
|
||||||
|
color: #006666; /* Blue Stone (approx.) */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string, /* --- used for PureBASIC Strings --- */
|
||||||
|
.hljs-selector-attr {
|
||||||
|
color: #0080FF; /* Azure Radiance (approx.) */
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol, /* --- used for PureBASIC Constants --- */
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #924B72; /* Cannon Pink (approx.) */
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-selector-id {
|
||||||
|
color: #924B72; /* Cannon Pink (approx.) */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
83
js/styles/qtcreator_dark.css
Normal file
83
js/styles/qtcreator_dark.css
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Qt Creator dark color scheme
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs,
|
||||||
|
.hljs-subst,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-title {
|
||||||
|
color: #aaaaaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong,
|
||||||
|
.hljs-emphasis {
|
||||||
|
color: #a8a8a2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-literal {
|
||||||
|
color: #ff55ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-code
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #aaaaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis,
|
||||||
|
.hljs-stronge,
|
||||||
|
.hljs-type {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-function,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-name {
|
||||||
|
color: #ffff55;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #ff5555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-class .hljs-title {
|
||||||
|
color: #8888ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-link {
|
||||||
|
color: #ff55ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #55ffff;
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user