3
0
Fork 0

Lot's of bug fixes

This commit is contained in:
BuildTools 2021-06-27 21:01:43 +02:00
parent ad320963fc
commit 7718ed6c32
196 changed files with 51167 additions and 3010 deletions

View file

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="framework" type="frameworkType"/>
<xs:complexType name="commandType">
<xs:all>
<xs:element type="xs:string" name="name" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="params" minOccurs="0" maxOccurs="1"/>
<xs:element type="xs:string" name="help" minOccurs="0" maxOccurs="1"/>
<xs:element type="optionsBeforeType" name="optionsBefore" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
<xs:complexType name="frameworkType">
<xs:sequence>
<xs:element type="xs:string" name="extraData" minOccurs="0" maxOccurs="1"/>
<xs:element type="commandType" name="command" maxOccurs="unbounded" minOccurs="0"/>
<xs:element type="xs:string" name="help" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
<xs:attribute type="xs:string" name="invoke" use="required"/>
<xs:attribute type="xs:string" name="alias" use="required"/>
<xs:attribute type="xs:boolean" name="enabled" use="required"/>
<xs:attribute type="xs:integer" name="version" use="required"/>
<xs:attribute type="xs:string" name="frameworkId" use="optional"/>
</xs:complexType>
<xs:complexType name="optionsBeforeType">
<xs:sequence>
<xs:element type="optionType" name="option" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="optionType">
<xs:sequence>
<xs:element type="xs:string" name="help" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
<xs:attribute type="xs:string" name="shortcut" use="optional"/>
<xs:attribute name="pattern" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="space"/>
<xs:enumeration value="equals"/>
<xs:enumeration value="unknown"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:schema>

View file

@ -3,92 +3,161 @@ namespace App\Cache;
class Cache { class Cache {
/**
* Get Username from API or cache
*
* @param $uuid
* @return bool|mixed The username if success or the UUID if failed
*/
public static function getUsername($uuid) { public static function getUsername($uuid) {
if(file_exists(storage_path('app/uuid/'.$uuid.'.json'))) { if (file_exists(storage_path('app/uuid/'.$uuid.'.json'))) {
$json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
$json = json_decode($json, true);
if((time() - strtotime($json['time'])) > 3600) {
$json = file_get_contents('https://api.mojang.com/users/profiles/'.$uuid.'./names');
if(empty($json)) {
$json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json')); $json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
$json = json_decode($json, true); $json = json_decode($json, true);
if ((time() - strtotime($json['time'])) > 3600) {
$username = self::getUsernameUncached($uuid);
if ($username == false) {
return $json['name']; return $json['name'];
} } else {
$json = json_decode($json, true);
if(isset($json['error'])) {
$json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
$json = json_decode($json, true);
return $json['name'];
}
$name = $json[count($json) -1]['name'];
$json = []; $json = [];
$json['id'] = $uuid; $json['id'] = $uuid;
$json['name'] = $name; $json['name'] = $username;
self::saveJson($json); self::saveJson($json);
return $json['name']; return $json['name'];
}
} else { } else {
return $json['name']; return $json['name'];
} }
} else { } else {
$json = file_get_contents('https://api.mojang.com/user/profiles/'.$uuid.'/names'); $username = self::getUsernameUncached($uuid);
if(empty($json)) if ($username === $uuid) {
return $uuid; return $uuid;
} else {
$json = json_decode($json, true);
if(isset($json['error']))
return $uuid;
$name = $json[count($json) -1]['name'];
$json = []; $json = [];
$json['id'] = $uuid; $json['id'] = $uuid;
$json['name'] = $name; $json['name'] = $username;
self::saveJson($json); self::saveJson($json);
return $json['name']; return $json['name'];
} }
} }
}
/**
* Get UUID from API or cache
*
* @param $username
* @return bool|mixed The UUID if success or the username if failed
*/
public static function getUUID($username) { public static function getUUID($username) {
foreach(glob(storage_path('app/uuid/*')) as $file) { foreach(glob(storage_path('app/uuid/*')) as $file) {
$json = file_get_contents($file); $json = file_get_contents($file);
$json = json_decode($json, true); $json = json_decode($json, true);
if($json['name'] !== $username)
continue;
if((time() - strtotime($json['time'])) > 3600) { if ($json['name'] !== $username) continue;
$json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/'.$username);
if(empty($json)) { if ((time() - strtotime($json['time'])) > 3600) {
$uuid = self::getUUIDUncached($username);
if ($uuid == false) {
unlink(storage_path('app/uuid/'.$file)); unlink(storage_path('app/uuid/'.$file));
return $username; return $json['name'];
} } else {
$json = [];
$json = json_decode($json, true); $json['id'] = $uuid;
if(isset($json['error'])) { $json['name'] = $username;
unlink(storage_path('app/uuid/'.$file));
return $username;
}
self::saveJson($json); self::saveJson($json);
return $json['id']; return $json['id'];
}
} else { } else {
return $json['id']; return $json['id'];
} }
} }
$json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/'.$username); $uuid = self::getUUIDUncached($username);
if(empty($json)) if ($uuid == false) {
return $username; return $username;
} else {
$json = json_decode($json, true); $json = [];
if(isset($json['error'])) $json['id'] = $uuid;
return $username; $json['name'] = $username;
self::saveJson($json); self::saveJson($json);
return $json['id']; return $json['id'];
} }
}
public static function saveJson($json) { /**
* Get the UUID by the username
*
* @param $username
* @return bool|mixed The UUID without dashes, or false if failed
*/
private static function getUUIDUncached($username) {
$profile = self::getProfile($username);
if (is_array($profile) and isset($profile['id']))
return $profile['id'];
return false;
}
/**
* Get the profile (username & UUID) from the username
*
* @uses http://wiki.vg/Mojang_API#Username_-.3E_UUID_at_time
*
* @param $username
* @return bool|mixed Array with ID and name, or false if failed
*/
private static function getProfile($username) {
if (self::isValidUsername($username)) {
$json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/' . $username);
if (!empty($json)) {
$data = json_decode($json, true);
if (is_array($data) and !empty($data)) {
return $data;
}
}
}
return false;
}
/**
* Get the username from the UUID
*
* @uses http://wiki.vg/Mojang_API#UUID_-.3E_Name_history
*
* @param $uuid
* @return bool|mixed Username, or false if failed
*/
private static function getUsernameUncached($uuid) {
if (is_string($uuid)) {
$json = file_get_contents('https://api.mojang.com/user/profiles/' . $uuid . '/names');
if (!empty($json)) {
$data = json_decode($json, true);
if (!empty($data) and is_array($data)) {
$last = array_pop($data);
if (is_array($last) and isset($last['name'])) {
return $last['name'];
}
}
}
}
return false;
}
/**
* Check if the username is correct.
*
* @param $username
* @return bool Valid or not
*/
private static function isValidUsername($username) {
return is_string($username) and strlen($username) >= 2 and strlen($username) <= 16 and ctype_alnum(str_replace('_', '', $username));
}
/**
* Save the JSON to a file
*
* @param $json
*/
private static function saveJson($json) {
$array = [ $array = [
'id' => $json['id'], 'id' => $json['id'],
'name' => $json['name'], 'name' => $json['name'],

View file

@ -2,7 +2,6 @@
namespace App; namespace App;
use App\Notifications\SendMailChange;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class ChangeEmail extends Model class ChangeEmail extends Model
@ -19,9 +18,4 @@ class ChangeEmail extends Model
'user_id', 'email', 'token' 'user_id', 'email', 'token'
]; ];
public function sendMail() {
$user = User::findOrFail($this->user_id);
$user->notify(new SendMailChange($this));
}
} }

View file

@ -48,6 +48,16 @@ class LoginController extends Controller
return 'uuid'; return 'uuid';
} }
public function showLoginForm()
{
$urlPrevious = url()->previous();
$urlBase = url()->to('/');
if(($urlPrevious != $urlBase . '/login') && (substr($urlPrevious, 0, strlen($urlBase)) === $urlBase))
session()->put('url.intended', $urlPrevious);
return view('auth.login');
}
public function login(Request $request) public function login(Request $request)
{ {
$this->validateLogin($request); $this->validateLogin($request);
@ -67,15 +77,15 @@ class LoginController extends Controller
return redirect()->intended('home'); return redirect()->intended('home');
} else { } else {
$this->incrementLoginAttempts($request); $this->incrementLoginAttempts($request);
return response()->json([ return view('auth.login')->withErrors([
'error' => 'This account is not activated.' 'error' => 'Wrong credentials.'
], 401); ]);
} }
} else { } else {
$this->incrementLoginAttempts($request); $this->incrementLoginAttempts($request);
return response()->json([ return view('auth.login')->withErrors([
'error' => 'Credentials do not match our database.' 'error' => 'Wrong credentials.'
], 401); ]);
} }
} }

View file

@ -68,7 +68,7 @@ class RegisterController extends Controller
protected function create(array $data) protected function create(array $data)
{ {
return User::create([ return User::create([
'uuid' => '', Cache::getUUID($data['username']), 'uuid' => Cache::getUUID($data['username']),
'email' => $data['email'], 'email' => $data['email'],
'password' => bcrypt($data['password']) 'password' => bcrypt($data['password'])
]); ]);

View file

@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers;
use App\Color\MinecraftColor;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
class ControlController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified', '2fa']);
}
/**
* Show the application dashboard.
*
* @param $attraction_id
* @param $pin
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index($attraction_id, $pin)
{
if(!preg_match('/^([0-9]){9}$/', $pin))
return Redirect::route('status');
$data = DB::table('attraction')->select('name')->where('id', '=', $attraction_id)->first();
if(empty($data))
return Redirect::route('status');
return view('control')->with([
'attraction_id' => $attraction_id,
'attraction_name' => MinecraftColor::stripColor( $data->name),
'pin' => $pin
]);
}
}

View file

@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
class HomeController extends Controller class HomeController extends Controller
{ {
@ -47,4 +48,9 @@ class HomeController extends Controller
]); ]);
} }
public function store()
{
return Redirect::to(env('STORE_URL', 'https://sbdplugins.nl'));
}
} }

View file

@ -0,0 +1,70 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
class OpenAudioMCController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified', '2fa']);
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
$url = env('OPENAUDIOMC_URL', '');
if(empty($url))
return view('openaudiomc')->with(['type' => 1]);
if(!filter_var($url, FILTER_VALIDATE_URL))
return view('openaudiomc')->with(['type' => 1]);
$key = explode('/', $url);
$key = $key[count($key) - 1];
if(!preg_match('/^([a-zA-Z0-9]{8})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{12})$/', $key))
return view('openaudiomc')->with(['type' => 1]);
$url = str_replace('%UUID%', Auth::user()->fixedUUID(), $url);
$result = file_get_contents($url);
if(!$this->isJson($result))
return view('openaudiomc')->with(['type' => 1]);
$json = json_decode($result);
if(isset($json->errors) && !empty($json->errors))
return view('openaudiomc')->with(['type' => 2]);
if(!isset($json->response))
return view('openaudiomc')->with(['type' => 2]);
$response = $json->response;
if(!isset($response->isConnected) || !isset($response->sessionUrl))
return view('openaudiomc')->with(['type' => 2]);
if($response->isConnected)
return view('openaudiomc')->with(['type' => 3]);
$link = $json->response->sessionUrl;
header('Location: '.$link);
exit;
}
private function isJson($string) {
if(empty($string))
return false;
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
}

View file

@ -3,6 +3,9 @@
namespace App\Http\Controllers\Panel; namespace App\Http\Controllers\Panel;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Show;
use App\User;
use Illuminate\Support\Facades\DB;
class HomeController extends Controller class HomeController extends Controller
{ {
@ -13,7 +16,7 @@ class HomeController extends Controller
*/ */
public function __construct() public function __construct()
{ {
$this->middleware(['auth', 'verified', '2fa']); $this->middleware(['auth', 'verified', '2fa', 'admin']);
} }
/** /**
@ -23,8 +26,15 @@ class HomeController extends Controller
*/ */
public function index() public function index()
{ {
$users = User::count();
$regions = DB::table('region')->count();
$attractions = DB::table('attraction')->where('type', '!=', 'GLOBAL')->count();
$shows = Show::count();
return view('panel.home')->with([ return view('panel.home')->with([
'data' => '' 'users' => $users,
'regions' => $regions,
'attractions' => $attractions,
'shows' => $shows
]); ]);
} }

View file

@ -0,0 +1,63 @@
<?php
namespace App\Http\Controllers\Panel;
use App\Http\Controllers\Controller;
use App\Message;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
class MessageController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified', '2fa', 'admin']);
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('panel.message');
}
public function change(Request $request) {
$validator = Validator::make($request->all(), [
'message' => ['required', 'string']
]);
if(!$validator->passes()) {
session()->flash('error', 'Incorrect message');
return Redirect::back();
}
$message = Message::orderByDesc('id')->first();
if(!empty($message))
if($message->content === $request->get('message'))
return Redirect::back();
$message = Message::create([
'uuid' => Auth::user()->uuid,
'content' => $request->get('message')
]);
if(empty($message)) {
session()->flash('error', 'Unable to create message');
return Redirect::back();
}
session()->flash('success', 'Successfully posted message');
return Redirect::back();
}
}

View file

@ -0,0 +1,143 @@
<?php
namespace App\Http\Controllers\Panel;
use App\ChangeEmail;
use App\Http\Controllers\Controller;
use App\Show;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
class ShowController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified', '2fa', 'admin']);
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index($page = 1, $search = '')
{
$pages = empty($search) ? Show::count() : Show::whereRaw("UPPER(`title`) LIKE '%". strtoupper($search)."%'")->count();
$pages = (int) ceil($pages/25);
if($pages < 1 && $page == 1)
$page = 1;
if($page < 1 || ($pages > 0 && $page > $pages)) {
$array['page'] = $pages > 0 ? $pages : 1;
if(!empty($search) && $pages > 0)
$array['search'] = $search;
return redirect()->route('panel.show', $array);
}
$query = Show::select('id', 'title', 'price', 'vault_price', 'seats');
if(!empty($search))
$query->whereRaw("UPPER(`title`) LIKE '%". strtoupper($search)."%'");
$data = $query->get();
return view('panel.show.index')->with([
'shows' => $data,
'page' => $page,
'pages' => $pages,
'search' => $search
]);
}
public function add() {
return view('panel.show.create');
}
public function create(Request $request) {
$validator = Validator::make($request->all(), [
'title' => ['required', 'unique:shows,title', 'max:255'],
'description' => ['required', 'string'],
'price' => ['required', 'numeric', 'min:0.01'],
'vault_price' => ['required', 'numeric', 'min:0.01'],
'seats' => ['required', 'numeric', 'min:1'],
'image' => ['required', 'string', 'max:255'],
]);
if(!$validator->passes())
return Redirect::back()->withErrors($validator->errors());
$request->merge([
'price' => number_format($request->get('price'), 2),
'vault_price' => number_format($request->get('vault_price'), 2)
]);
$show = Show::create($request->all());
if(empty($show)) {
session()->flash('error', 'Unable to create a new Show');
return Redirect::route('panel.ums');
}
session()->flash('success', 'Successfully created show.');
return Redirect::route('panel.show');
}
public function info($id) {
return view('panel.show.info')->with([
'show' => Show::findOrFail($id)
]);
}
public function edit($id) {
return view('panel.show.edit')->with([
'show' => Show::findOrFail($id)
]);
}
public function update(Request $request) {
if(!$request->has('id'))
return Redirect::back();
$show = Show::findOrFail($request->get('id'));
$validator = Validator::make($request->all(), [
'description' => ['required', 'string'],
'price' => ['required', 'numeric', 'min:0.01'],
'vault_price' => ['required', 'numeric', 'min:0.01'],
'image' => ['required', 'string', 'max:255'],
]);
if(!$validator->passes())
return Redirect::back()->withErrors($validator->errors());
$show->description = $request->get('description');
$show->price = number_format($request->get('price'), 2);
$show->vault_price = number_format($request->get('vault_price'), 2);
$show->image = $request->get('image');
if($show->save()) {
session()->flash('success', 'Successfully edited show');
return Redirect::route('panel.show');
}
session()->flash('error', 'Unable to edit show');
return Redirect::back();
}
public function delete($id) {
$show = Show::findOrFail($id);
if($show->delete()) {
session()->flash('success', 'Successfully deleted show.');
} else {
session()->flash('error', 'Unable to delete show.');
}
return Redirect::back();
}
}

View file

@ -0,0 +1,125 @@
<?php
namespace App\Http\Controllers\Panel;
use App\ChangeEmail;
use App\Http\Controllers\Controller;
use App\Show;
use App\ShowDate;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
class ShowsController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified', '2fa', 'admin']);
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index($page = 1, $search = '')
{
$pages = empty($search) ? ShowDate::whereRaw('`show_dates`.`date` > CURDATE()')->count() : Show::join('shows', 'shows.id', '=', 'show_dates.show_id')
->whereRaw('`show_dates`.`date` > CURDATE()')
->whereRaw("UPPER(`title`) LIKE '%". strtoupper($search)."%'")->count();
$pages = (int) ceil($pages/25);
if($pages < 1 && $page == 1)
$page = 1;
if($page < 1 || ($pages > 0 && $page > $pages)) {
$array['page'] = $pages > 0 ? $pages : 1;
if(!empty($search) && $pages > 0)
$array['search'] = $search;
return redirect()->route('panel.shows', $array);
}
$query = ShowDate::join('shows', 'shows.id', '=', 'show_dates.show_id')
->whereRaw('`show_dates`.`date` > CURDATE()')
->select('show_dates.id', 'shows.title', DB::raw('DATE_FORMAT(`show_dates`.`date`, "%d-%m-%Y %H:%i") AS `date`'));
if(!empty($search))
$query->whereRaw("UPPER(`shows.title`) LIKE '%". strtoupper($search)."%'");
$data = $query->get();
return view('panel.shows.index')->with([
'dates' => $data,
'page' => $page,
'pages' => $pages,
'search' => $search
]);
}
public function search(Request $request) {
if(!$request->has('searchText'))
return response()->json([]);
$shows = Show::whereRaw("UPPER(`title`) LIKE '%". strtoupper($request->get('searchText'))."%'")->select('id', 'title')->get();
return response()->json($shows->all());
}
public function add() {
return view('panel.shows.create');
}
public function create(Request $request) {
$validator = Validator::make($request->all(), [
'show_id' => ['required', 'numeric', 'exists:shows,id'],
'date' => ['required', 'date']
]);
if(!$validator->passes())
return Redirect::back()->withErrors($validator->errors());
$request->merge([
'date' => date('Y-m-d H:i:s', strtotime($request->get('date')))
]);
$date = ShowDate::create($request->all());
if(empty($date)) {
session()->flash('error', 'Unable to create a new show date');
return Redirect::route('panel.ums');
}
session()->flash('success', 'Successfully created show date.');
return Redirect::route('panel.shows');
}
public function info($id) {
$date = ShowDate::findOrFail($id);
$filled = DB::table('seats')->where('show_id', '=', $date->show_id)->where('date', '=', $date->date)->count();
return view('panel.shows.info')->with([
'date' => $date,
'show' => Show::findOrFail($date->show_id),
'filled' => $filled
]);
}
public function delete($id) {
$show = ShowDate::findOrFail($id);
if($show->delete()) {
session()->flash('success', 'Successfully deleted show date.');
} else {
session()->flash('error', 'Unable to delete show date.');
}
return Redirect::back();
}
}

View file

@ -3,7 +3,7 @@ namespace App\Http\Controllers\Panel;
use App\ChangeEmail; use App\ChangeEmail;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Notifications\SendMailChange; use App\Mail\EmailChange;
use App\User; use App\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@ -33,7 +33,7 @@ class UMSController extends Controller
public function index($page = 1) public function index($page = 1)
{ {
$pages = User::count(); $pages = User::count();
$pages = (int) ceil($pages/25); $pages = (int) ceil($pages/10);
if($pages < 1 && $page == 1) if($pages < 1 && $page == 1)
$page = 1; $page = 1;
@ -42,7 +42,7 @@ class UMSController extends Controller
'page' => ($pages > 0 ? $pages : 1) 'page' => ($pages > 0 ? $pages : 1)
]); ]);
$data = User::select('id', 'uuid', 'last_active', 'is_admin', 'is_root')->get(); $data = User::select('id', 'uuid', 'last_active', 'is_admin', 'is_root', 'email_verified_at')->get();
return view('panel.ums.index')->with([ return view('panel.ums.index')->with([
'users' => $data, 'users' => $data,
'page' => $page, 'page' => $page,
@ -62,6 +62,7 @@ class UMSController extends Controller
if(!$user->is_root && !$user->is_admin) if(!$user->is_root && !$user->is_admin)
return Redirect::route('panel.ums'); return Redirect::route('panel.ums');
$user = User::findOrFail($id);
return view('panel.ums.edit')->with([ return view('panel.ums.edit')->with([
'user' => $user 'user' => $user
]); ]);
@ -86,25 +87,48 @@ class UMSController extends Controller
'token' => Str::random(12) 'token' => Str::random(12)
]); ]);
Mail::to($user)->send(new SendMailChange($change)); Mail::to($request->get('email'))->send(new EmailChange($change));
die('Send! Email: '.$request->get('email'));
} }
if(Auth::user()->is_root) {
$validator = Validator::make($request->all(), [ $validator = Validator::make($request->all(), [
'is_admin' => ['required', 'boolean'], 'verified' => ['required', 'boolean']
'is_root' => ['required', 'boolean']
]); ]);
if(!$validator->passes()) if(!$validator->passes())
return Redirect::back()->withErrors($validator); return Redirect::back()->withErrors($validator);
$user->is_admin = $request->get('is_admin'); if($request->get('verified')) {
$user->is_root = $request->get('is_root'); $user->email_verified_at = empty($user->email_verified_at) ? date('Y-m-d H:i:s') : $user->email_verified_at;
if($user->save()) {
session()->flash('success', 'Successfully edited user: '.$user->uuid);
} else { } else {
session()->flash('error', 'Unable to edit user: '.$user->uuid); $user->email_verified_at = null;
} }
if(Auth::user()->is_root) {
$validator = Validator::make($request->all(), [
'admin' => ['required', 'numeric', 'min:0', 'max:2'],
]);
if (!$validator->passes())
return Redirect::back()->withErrors($validator);
$admin = $request->get('admin');
if ($admin == 1) {
$user->is_admin = 1;
$user->is_root = 0;
} else if($admin == 2) {
$user->is_admin = 0;
$user->is_root = 1;
} else {
$user->is_admin = 0;
$user->is_root = 0;
}
}
if($user->save()) {
session()->flash('success', 'Successfully edited user: '.$user->username());
} else {
session()->flash('error', 'Unable to edit user: '.$user->username());
} }
return Redirect::route('panel.ums'); return Redirect::route('panel.ums');

View file

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Profile;
use App\ChangeEmail; use App\ChangeEmail;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Mail\EmailChange;
use App\Notifications\SendMailChange; use App\Notifications\SendMailChange;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
@ -84,7 +85,7 @@ class ChangeController extends Controller
'token' => Str::random(12) 'token' => Str::random(12)
]); ]);
Mail::to($user)->send(new SendMailChange($change)); Mail::to($user->email)->send(new EmailChange($change));
session()->flash('email_success', 'Successfully requested email change'); session()->flash('email_success', 'Successfully requested email change');
return Redirect::back(); return Redirect::back();
} }
@ -92,7 +93,7 @@ class ChangeController extends Controller
public function verifyEmail($id, $token, $email) { public function verifyEmail($id, $token, $email) {
if(Auth::id() != $id) { if(Auth::id() != $id) {
session()->flash('email_error', 'Incorrect email change request: '.$email); session()->flash('email_error', 'Incorrect email change request: '.$email);
return Redirect::route('panel.change'); return Redirect::route('change');
} }
$user = Auth::user(); $user = Auth::user();
@ -104,14 +105,14 @@ class ChangeController extends Controller
if(empty($model)) { if(empty($model)) {
session()->flash('email_error', 'Unable to change email address to: '.$email); session()->flash('email_error', 'Unable to change email address to: '.$email);
return Redirect::route('panel.change'); return Redirect::route('change');
} }
$user->email = $email; $user->email = $email;
$user->save(); $user->save();
$model->delete(); $model->delete();
session()->flash('email_success', 'Successfully changed email address to: '.$email); session()->flash('email_success', 'Successfully changed email address to: '.$email);
return Redirect::route('panel.change'); return Redirect::route('change');
} }
} }

View file

@ -36,7 +36,7 @@ class SecurityController extends Controller
$pages = Session::where('user_id', Auth::id())->count(); $pages = Session::where('user_id', Auth::id())->count();
$pages = (int) ceil($pages/10); $pages = (int) ceil($pages/10);
if($page > $pages) if($page > $pages)
return redirect()->route('profile.security', ['page' => $pages]); return redirect()->route('security', ['page' => $pages]);
$sessions = Session::where('user_id', Auth::id())->where('id', '!=', session()->getId())->skip(($page - 1)*10)->take(($page != 1 ? 10 : 9))->orderBy('last_activity', 'desc')->get(); $sessions = Session::where('user_id', Auth::id())->where('id', '!=', session()->getId())->skip(($page - 1)*10)->take(($page != 1 ? 10 : 9))->orderBy('last_activity', 'desc')->get();
$array = ['TFA' => $tfa, 'pages' => $pages, 'page' => $page, 'sessions' => $sessions, 'agent' => new Agent()]; $array = ['TFA' => $tfa, 'pages' => $pages, 'page' => $page, 'sessions' => $sessions, 'agent' => new Agent()];
@ -67,10 +67,10 @@ class SecurityController extends Controller
public function session($id) public function session($id)
{ {
if(session()->getId() === $id) if(session()->getId() === $id)
return redirect()->route('profile.security'); return redirect()->route('security');
Session::where(['id' => $id, 'user_id' => Auth::id()])->forceDelete(); Session::where(['id' => $id, 'user_id' => Auth::id()])->forceDelete();
return redirect()->route('profile.security'); return redirect()->route('security');
} }
} }

View file

@ -30,6 +30,7 @@ class RidecountController extends Controller
$top10 = DB::table(DB::raw('ridecount, (SELECT @row_number:=0) AS t'))->select('uuid', DB::raw('SUM(`count`) AS `count`'), DB::raw('(@row_number:=@row_number + 1) AS `num`')) $top10 = DB::table(DB::raw('ridecount, (SELECT @row_number:=0) AS t'))->select('uuid', DB::raw('SUM(`count`) AS `count`'), DB::raw('(@row_number:=@row_number + 1) AS `num`'))
->where('attractionId', '=', $attraction_id) ->where('attractionId', '=', $attraction_id)
->whereRaw('YEARWEEK(date, 1) = YEARWEEK(CURDATE(), 1)') ->whereRaw('YEARWEEK(date, 1) = YEARWEEK(CURDATE(), 1)')
->whereRaw('YEAR(date) = YEAR(CURDATE())')
->groupBy('uuid') ->groupBy('uuid')
->orderByDesc('count') ->orderByDesc('count')
->take(10)->get()->all(); ->take(10)->get()->all();

View file

@ -29,15 +29,7 @@ class ShowController extends Controller
*/ */
public function index() public function index()
{ {
$shows = Show::join('show_dates', 'show_dates.show_id', '=', 'shows.id') $shows = DB::select(DB::raw('SELECT t1.* FROM `shows` AS t1 RIGHT JOIN `show_dates` AS t2 ON t1.`id` = t2.`show_id` WHERE t2.`date` > CURDATE() GROUP BY t1.`id`'));
->whereRaw('`show_dates`.`date` > CURDATE()')
->select('shows.*')->get()->all();
$data = [];
foreach($shows as $show)
if(!empty($show->getShowDates(Auth::user()->uuid)))
array_push($data, $show);
return view('show')->with([ return view('show')->with([
'shows' => $shows 'shows' => $shows
]); ]);

View file

@ -1,8 +1,7 @@
<?php <?php
namespace App\Http\Controllers\Panel; namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Redirect;
@ -44,7 +43,7 @@ class ToggleTwoFactorController extends Controller
]); ]);
session()->flash('success', 'Successfully enabled 2FA'); session()->flash('success', 'Successfully enabled 2FA');
return redirect()->route('account'); return redirect()->route('security');
} else { } else {
if(!$validator->passes()) if(!$validator->passes())
return Redirect::back()->withErrors($validator); return Redirect::back()->withErrors($validator);

View file

@ -1,8 +1,7 @@
<?php <?php
namespace App\Http\Controllers\Panel; namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Redirect;

View file

@ -64,6 +64,7 @@ class Kernel extends HttpKernel
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'2fa' => \App\Http\Middleware\TwoFactorAuthentication::class, '2fa' => \App\Http\Middleware\TwoFactorAuthentication::class,
'mobile' => \App\Http\Middleware\NoMobile::class, 'mobile' => \App\Http\Middleware\NoMobile::class,
'admin' => \App\Http\Middleware\AdminOnly::class,
]; ];
/** /**

View file

@ -0,0 +1,25 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
class AdminOnly
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::user()->is_admin || Auth::user()->is_root)
return $next($request);
return Redirect::route('home');
}
}

View file

@ -17,10 +17,10 @@ class RedirectIfAuthenticated
*/ */
public function handle($request, Closure $next, $guard = null) public function handle($request, Closure $next, $guard = null)
{ {
if (Auth::guard($guard)->check()) { if (Auth::guard($guard)->check())
return redirect('/home'); return redirect()->intended('/');
}
return $next($request); return $next($request);
} }
} }

40
app/Mail/EmailChange.php Normal file
View file

@ -0,0 +1,40 @@
<?php
namespace App\Mail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class EmailChange extends Mailable
{
use Queueable, SerializesModels;
private $change;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($change)
{
$this->change = $change;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$user = User::findOrFail($this->change->user_id);
return $this->subject('Change Email')->markdown('emails.change')->with([
'user' => $user,
'token' => $this->change->token,
'email' => $this->change->email
]);
}
}

View file

@ -1,49 +0,0 @@
<?php
namespace App\Notifications;
use App\ChangeEmail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Queue\SerializesModels;
class SendMailChange extends Mailable
{
use Queueable, SerializesModels;
/**
* The order instance.
*
* @var ChangeEmail
*/
public $change;
/**
* Create a new message instance.
*
* @param ChangeEmail $change
*/
public function __construct(ChangeEmail $change)
{
$this->change = $change;
}
/**
* Build the message.
*
* @return MailMessage
*/
public function build()
{
$user = User::findOrFail($this->change->user_id);
return (new MailMessage)
->subject('Change Email')
->line('Dear '.$user->firstname.',')
->line('Press the button bellow if you wish to change your current email-address')
->action('Change Email', url('/change/email/'.$user->id.'/'.$this->change->token.'/'.$this->change->email))
->line('Is this email not directed to you or do you not wish to change your email? Than you may ignore this.');
}
}

View file

@ -31,6 +31,9 @@ class UUID implements Rule
if(empty($uuid)) if(empty($uuid))
return false; return false;
if($uuid === $value)
return false;
$user = User::where('uuid', '=', $uuid)->first(); $user = User::where('uuid', '=', $uuid)->first();
return empty($user); return empty($user);
} }
@ -42,6 +45,6 @@ class UUID implements Rule
*/ */
public function message() public function message()
{ {
return 'Username: :attribute is already in use'; return 'Username: :value is incorrect or already in use';
} }
} }

View file

@ -38,7 +38,7 @@ class Show extends Model
->groupBy('show_dates.date'); ->groupBy('show_dates.date');
if($uuid !== null) if($uuid !== null)
$data = $data->where('seats.uuid', '!=', $uuid); $data = $data->whereRaw( "`show_dates`.`date` NOT IN (SELECT date FROM seats WHERE uuid='".$uuid."' AND show_id='".$this->id."')");
$data = $data->get()->all(); $data = $data->get()->all();
$dates = []; $dates = [];

31
app/ShowDate.php Normal file
View file

@ -0,0 +1,31 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class ShowDate extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'show_dates';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'show_id', 'date'
];
public function show() {
return $this->belongsTo('\App\Show');
}
}

View file

@ -3,6 +3,7 @@
namespace App; namespace App;
use App\Cache\Cache; use App\Cache\Cache;
use Carbon\Carbon;
use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
@ -40,6 +41,12 @@ class User extends Authenticatable implements MustVerifyEmail
'email_verified_at' => 'datetime', 'email_verified_at' => 'datetime',
]; ];
public function fixedUUID() {
$uuid = substr_replace($this->uuid, '-', 8, 0);
$uuid = substr_replace($uuid, '-', 13, 0);
$uuid = substr_replace($uuid, '-', 18, 0);
return substr_replace($uuid, '-', 23, 0);
}
private $username; private $username;
public function username() { public function username() {
@ -61,7 +68,7 @@ class User extends Authenticatable implements MustVerifyEmail
'shows.title', 'shows.description', 'shows.image', 'seats.*' 'shows.title', 'shows.description', 'shows.image', 'seats.*'
]) ])
->where('seats.uuid', '=', $this->uuid) ->where('seats.uuid', '=', $this->uuid)
->where('seats.date', '>', 'CURRENT_TIMESTAMP()') ->where('seats.date', '>', Carbon::now())
->get()->all(); ->get()->all();
$this->shows = $shows; $this->shows = $shows;
return !empty($shows); return !empty($shows);
@ -76,7 +83,7 @@ class User extends Authenticatable implements MustVerifyEmail
'shows.title', 'shows.description', 'shows.image', 'seats.*' 'shows.title', 'shows.description', 'shows.image', 'seats.*'
]) ])
->where('seats.uuid', '=', $this->uuid) ->where('seats.uuid', '=', $this->uuid)
->where('seats.date', '>', 'CURRENT_TIMESTAMP()') ->where('seats.date', '>', Carbon::now())
->get()->all(); ->get()->all();
$this->shows = $shows; $this->shows = $shows;
return $shows; return $shows;

View file

@ -18,7 +18,8 @@
"laravel/tinker": "^1.0", "laravel/tinker": "^1.0",
"pragmarx/google2fa-laravel": "^1.2", "pragmarx/google2fa-laravel": "^1.2",
"torann/geoip": "^1.0", "torann/geoip": "^1.0",
"ext-openssl": "*" "ext-openssl": "*",
"ext-http": "*"
}, },
"require-dev": { "require-dev": {
"facade/ignition": "^1.4", "facade/ignition": "^1.4",

View file

@ -61,6 +61,15 @@ return [
'options' => extension_loaded('pdo_mysql') ? array_filter([ 'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [], ]) : [],
'modes' => [
//'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION'
],
], ],
'pgsql' => [ 'pgsql' => [

View file

@ -20,6 +20,8 @@ class CreateUsersTable extends Migration
$table->timestamp('email_verified_at')->nullable(); $table->timestamp('email_verified_at')->nullable();
$table->string('google2fa_secret')->nullable(); $table->string('google2fa_secret')->nullable();
$table->string('password'); $table->string('password');
$table->boolean('is_admin')->default(0);
$table->boolean('is_root')->default(0);
$table->rememberToken(); $table->rememberToken();
$table->timestamp('last_active')->nullable(); $table->timestamp('last_active')->nullable();
$table->timestamps(); $table->timestamps();

View file

@ -20,6 +20,8 @@ class CreateSeatsTable extends Migration
$table->integer('seat'); $table->integer('seat');
$table->string('voucher'); $table->string('voucher');
$table->timestamp('date'); $table->timestamp('date');
$table->boolean('loaded')->default(0);
$table->boolean('paid')->default(0);
$table->timestamps(); $table->timestamps();
}); });
} }

212
public/assets/control.js vendored Normal file
View file

@ -0,0 +1,212 @@
function getPacket(channel, type, payload) {
let packet = {
channel: channel,
data: {
type: type,
payload: payload
}
}
return JSON.stringify(packet)
}
function getClickPacket(uuid, item_id) {
return getPacket(
'SERVER_IN_OPERATOR_CLICK',
'nl.iobyte.parkplus.api.packet.payloads.operator.ClientOperatorClickPayload',
{
uuid: uuid,
item_id: item_id
}
)
}
$(document).on('click', "div.panel[id^='button-'] > div.panel-body > img", function() {
const parent = $(this).parent().parent();
const id = parent.attr("id").replace("button-", "");
if(!socket || hasConnected !== true)
return
socket.emit(
'data',
getClickPacket(
fixUUID(window.settings.uuid),
id
)
);
});
window.sendMessage = function(message) {
if(hasConnected)
socket.send(message);
}
let hasConnected = false
let socket = null
$(() => {
socket = io('websocket.iobyte.nl', {
query: "type=client&id=" + window.settings.id + "&uuid=" + fixUUID(window.settings.uuid) + "&attraction=" + window.settings.attraction + "&token=" + window.settings.pin,
autoConnect: false,
withCredentials: false
})
socket.on('connect', () => {
setTimeout(() => {
if(hasConnected)
return
socket.close()
}, 5 * 1000)
})
socket.on('disconnect', () => {
const control = $("span#control");
control.removeClass();
control.addClass("control-status");
control.addClass("status-closed");
control.html("Lost Connection");
setTimeout(() => {
if(hasConnected)
return
socket.close()
}, 5 * 1000)
})
socket.on('error', e => {
socket.close()
console.log(e)
})
socket.on('close', () => {
hasConnected = true
const control = $("span#control");
control.removeClass();
control.addClass("control-status");
control.addClass("status-closed");
control.html("Disconnected");
})
socket.on('data', payload => {
try {
payload = JSON.parse(payload)
} catch (e) {
return
}
if(!payload)
return
if(!payload.hasOwnProperty('channel'))
return
let channel = payload.channel;
if(channel === 'CLIENT_KICK') {
socket.close()
return
}
let data;
if(payload.hasOwnProperty('data')) {
data = payload.data.payload;
} else {
data = payload.data
}
handlePacket(channel, data)
})
})
function fixUUID(i) {
return i.substr(0,8) +
"-" +
i.substr(8,4) +
"-" +
i.substr(12,4) +
"-" +
i.substr(16,4) +
"-" +
i.substr(20)
}
function handlePacket(channel, payload) {
switch (channel) {
case 'CLIENT_NOTIFICATION':
handleNotification(payload.title, payload.message)
break
case 'CLIENT_OPERATOR_REQUEST_REPLY':
handleReply(payload)
break
case 'CLIENT_ATTRACTION_STATE':
handleStatus(payload.status)
break
case 'CLIENT_OPERATOR_STATE':
handleState(payload.item_id, payload.state)
break
}
}
function handleNotification(title, message) {
const msg = $("div#message");
msg.html('<div class="alert alert-info">'+title+'</div>');
console.log({
title: title,
message: message,
})
}
function handleReply(payload) {
if(payload.hasOwnProperty('requestReply') && payload.requestReply === 'ACCEPT') {
const control = $("span#control");
control.removeClass();
control.addClass("control-status");
control.addClass("status-open");
control.html("Connected");
loadPanel(payload.data)
return
}
socket.close();
handleNotification(
'Unable to operate ride',
payload.message
)
}
function jsUcfirst(str) {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
function handleStatus(payload) {
const status = $("span#status");
status.html(jsUcfirst(payload.name));
status.style.backgroundColor = payload.hex
}
function handleState(id, state) {
let img = new Image();
img.onload = () => {
$("div#button-"+id+" div.panel-body img").attr("src", state.cover);
$("div#button-"+id+" div.panel-body #text").html(state.name);
}
img.src = state.cover;
}
function loadPanel(panel) {
for(let i = 0; i < panel.items.length; i++) {
let item = panel.items[i];
let state = item.state
const image = state.cover;
const title = item.name;
const id = item.id;
const text = state.name;
if(i === 0)
$("div#panel").append('\n');
$("div#panel").append("<div class='col-xs-12 col-sm-6 col-md-4 col-lg-3'><div id='button-"+id+"' class='panel panel-theme'><div class='panel-heading'><h2 class='panel-title' style='text-align: center'>"+title+"</h2></div><div class='panel-body'><img src='"+image+"' style='width: 100%; height: auto; border: #a6a6a6 1px solid; border-radius: 3px'><p id='text' style='text-align: center'>"+text+"</p></div></div></div>\n");
}
}

File diff suppressed because one or more lines are too long

View file

@ -1,8 +1,8 @@
body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;background-color:#2980b9;background: url("../img/background.jpg") no-repeat center center fixed;-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;font-family:sans-serif}.page{width:360px;padding:8% 0 0;margin:auto}.page > div,.page > form{position:relative;z-index:1;background:#fff;max-width:360px;margin:0 auto 100px;padding:15px 45px 15px 45px;box-shadow:0 0 20px 0 rgba(0,0,0,.2),0 5px 5px 0 rgba(0,0,0,.24);border-radius:3px}.page > div img,.page form img{width:80%;display:block;margin:auto;margin-bottom:15px!important}.page form .input-group{margin-bottom:10px}.alert{color:#fff!important;margin-bottom:5px}.alert-danger{background-color:#e74c3c!important;border:none!important}.alert-success{background-color:#2ecc71!important;border:none!important} body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;background-color:#2980b9;background: url("https://cdn.discordapp.com/attachments/706149937905270904/707677922462400532/Gradiant_5.png") no-repeat center center fixed;-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;font-family:sans-serif}.page{width:360px;padding:8% 0 0;margin:auto}.page > div,.page > form{position:relative;z-index:1;background:#171717;color:#fff;max-width:360px;margin:0 auto 100px;padding:15px 45px 15px 45px;box-shadow:0 0 20px 0 rgba(0,0,0,.2),0 5px 5px 0 rgba(0,0,0,.24);border-radius:3px}.page > div img,.page form img{width:80%;display:block;margin:auto;margin-bottom:15px!important}.page form .input-group{margin-bottom:10px}.alert{color:#fff!important;margin-bottom:5px}.alert-danger{background-color:#e74c3c!important;border:none!important}.alert-success{background-color:#2ecc71!important;border:none!important}
.btn-custom { .btn-custom {
outline: 0; outline: 0;
background: #2ecc71; background: #e31c26;
width: 180px; width: 180px;
border: 0; border: 0;
padding: 5px; padding: 5px;
@ -12,18 +12,44 @@ body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;backgr
border-radius: 3px; border-radius: 3px;
} }
.input-group-addon {
background-color: #e31c26 !important;
border-color: #333 !important;
color: #fff;
}
.form-control,
.form-control[disabled] {
background-color: #404040;
color: #fff;
border-color: #262626 !important;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus { .btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #27ae60; background: #cc1922;
color: #fff; color: #fff;
} }
.footer { .footer {
margin-bottom: 0; margin-bottom: 0;
background-color: #fff; background-color: #171717;
position: absolute; position: absolute;
bottom: 0; bottom: 0;
text-align: center; text-align: center;
padding: 10px; padding: 10px;
width: 100%; width: 100%;
text-decoration: none; text-decoration: none;
color: #fff;
}
.footer img {
filter: brightness(0) invert(1);
}
a {
color: #888;
}
a:hover, a:focus {
color: #ccc;
} }

29
public/assets/css/panel_default.min.css vendored Normal file
View file

@ -0,0 +1,29 @@
body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;background-color:#2980b9;background: url("../img/background.jpg") no-repeat center center fixed;-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;font-family:sans-serif}.page{width:360px;padding:8% 0 0;margin:auto}.page > div,.page > form{position:relative;z-index:1;background:#fff;max-width:360px;margin:0 auto 100px;padding:15px 45px 15px 45px;box-shadow:0 0 20px 0 rgba(0,0,0,.2),0 5px 5px 0 rgba(0,0,0,.24);border-radius:3px}.page > div img,.page form img{width:80%;display:block;margin:auto;margin-bottom:15px!important}.page form .input-group{margin-bottom:10px}.alert{color:#fff!important;margin-bottom:5px}.alert-danger{background-color:#e74c3c!important;border:none!important}.alert-success{background-color:#2ecc71!important;border:none!important}
.btn-custom {
outline: 0;
background: #2ecc71;
width: 180px;
border: 0;
padding: 5px;
color: #FFFFFF;
font-size: 17px;
cursor: pointer;
border-radius: 3px;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #27ae60;
color: #fff;
}
.footer {
margin-bottom: 0;
background-color: #fff;
position: absolute;
bottom: 0;
text-align: center;
padding: 10px;
width: 100%;
text-decoration: none;
}

View file

@ -12,8 +12,8 @@
filter: brightness(0) invert(1); filter: brightness(0) invert(1);
} }
.bg-aqua { .bg-green {
background-color: #239af6 !important; background-color: #cc1922 !important;
} }
.small-box .inner { .small-box .inner {
@ -40,7 +40,7 @@
} }
.main-header .navbar { .main-header .navbar {
background-color: #239af6; background-color: #cc1922;
} }
.main-header .navbar .nav > li > a { .main-header .navbar .nav > li > a {
@ -54,7 +54,7 @@
.main-header .navbar .nav .open > a:hover, .main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus, .main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a { .main-header .navbar .nav > .active > a {
background: #0984e3; background: #e31c26;
color: #fff; color: #fff;
} }
@ -64,7 +64,7 @@
.main-header .navbar .sidebar-toggle:hover { .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6; color: #f6f6f6;
background: #0984e3; background: #e31c26;
} }
.main-header .navbar .sidebar-toggle { .main-header .navbar .sidebar-toggle {
@ -72,12 +72,12 @@
} }
.main-header .navbar .sidebar-toggle:hover { .main-header .navbar .sidebar-toggle:hover {
background-color: #0984e3; background-color: #e31c26;
} }
@media (max-width: 767px) { @media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider { .main-header .navbar .dropdown-menu li.divider {
background-color: #0984e3; background-color: #e31c26;
} }
.main-header .navbar .dropdown-menu li a { .main-header .navbar .dropdown-menu li a {
@ -85,22 +85,22 @@
} }
.main-header .navbar .dropdown-menu li a:hover { .main-header .navbar .dropdown-menu li a:hover {
background: #0984e3; background: #e31c26;
} }
} }
.main-header .logo { .main-header .logo {
background-color: #0984e3; background-color: #e31c26;
color: #ffffff; color: #ffffff;
border-bottom: 0 solid transparent; border-bottom: 0 solid transparent;
} }
.main-header .logo:hover { .main-header .logo:hover {
background-color: #0984e3; background-color: #e31c26;
} }
.main-header li.user-header { .main-header li.user-header {
background-color: #239af6; background-color: #cc1922;
} }
.content-header { .content-header {
@ -110,7 +110,7 @@
.wrapper, .wrapper,
.main-sidebar, .main-sidebar,
.left-side { .left-side {
background-color: #222d32; background-color: #333;
} }
.user-panel > .info, .user-panel > .info,
@ -119,8 +119,8 @@
} }
.sidebar-menu > li.header { .sidebar-menu > li.header {
color: #4b646f; color: #fff;
background: #1a2226; background: #1a1a1a;
} }
.sidebar-menu > li > a { .sidebar-menu > li > a {
@ -131,20 +131,20 @@
.sidebar-menu > li.active > a, .sidebar-menu > li.active > a,
.sidebar-menu > li.menu-open > a { .sidebar-menu > li.menu-open > a {
color: #ffffff; color: #ffffff;
background: #1e282c; background: #262626;
} }
.sidebar-menu > li.active > a { .sidebar-menu > li.active > a {
border-left-color: #239af6; border-left-color: #e31c26;
} }
.sidebar-menu > li > .treeview-menu { .sidebar-menu > li > .treeview-menu {
margin: 0 1px; margin: 0 1px;
background: #2c3b41; background: #1a1919;
} }
.sidebar a { .sidebar a {
color: #b8c7ce; color: #999;
} }
.sidebar a:hover { .sidebar a:hover {
@ -152,11 +152,10 @@
} }
.sidebar-menu .treeview-menu > li > a { .sidebar-menu .treeview-menu > li > a {
color: #8aa4af; color: #ccc;
} }
.sidebar-menu .treeview-menu > li.active > a, .sidebar-menu .treeview-menu > li.active > a,
.sidebar-menu .treeview-menu > li > a:hover { .sidebar-menu .treeview-menu > li > a:hover {
color: #fff; color: #fff;
} }
@ -195,10 +194,7 @@
.sidebar-form .btn { .sidebar-form .btn {
color: #999; color: #999;
border-top-left-radius: 0; border-radius: 0 2px 2px 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
} }
.form-control { .form-control {
@ -214,16 +210,18 @@ p {
} }
.box.box-primary { .box.box-primary {
border-top-color: #239af6 !important; border-top-color: #cc1922 !important;
} }
.btn.btn-primary { .btn.btn-primary {
background-color: #239af6 !important; border-color: #e31c26 !important;
background-color: #cc1922 !important;
color: #fff !important; color: #fff !important;
} }
.btn.btn-primary:hover { .btn.btn-primary:hover {
background-color: #0984e3 !important; border-color: #cc1922 !important;
background-color: #e31c26 !important;
color: #fff !important; color: #fff !important;
} }
@ -284,8 +282,8 @@ input.form-control {
border-bottom-left-radius: 3px !important; border-bottom-left-radius: 3px !important;
} }
.bg-blue-gradient { .bg-green-gradient {
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0984e3), color-stop(1, #239af6)) !important; background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #e31c26), color-stop(1, #cc1922)) !important;
} }
i.no { i.no {
@ -295,7 +293,246 @@ i.no {
} }
i.yes { i.yes {
color: #2ecc71; color: #cc1922;
font-weight: 900; font-weight: 900;
font-size: 25px; font-size: 25px;
} }
.pagination li.active a {
background-color: #cc1922;
border-color: transparent;
}
.panel-theme {
border-color: #e31c26;
}
.panel-theme>.panel-heading {
color: #fff !important;
background-color: #cc1922 !important;
border-color: #e31c26 !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #e31c26 !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #e31c26 !important;
}
.sceditor-container, textarea.editor {
resize: vertical !important;
width: 100%;
max-width: 100%;
min-height: 200px;
border-radius: 3px 3px 0 0;
}
.content-wrapper {
background-color: #171717;
}
.content-header {
color: #fff;
}
.content-header>.breadcrumb>li:not(.active)>a {
color: #fff;
}
.content-header>.breadcrumb>.active {
color: #ccc;
}
.main-footer {
background-color: #282727;
color: #fff;
border: 0;
}
.main-footer img {
filter: brightness(0) invert(1);
}
.box {
border-top-color: #e31c26;
background-color: #282727;
}
.box .box-header {
color: #fff;
}
.sceditor-container, textarea.editor {
resize: vertical !important;
width: 100%;
max-width: 100%;
min-height: 200px;
border-color: #262626 !important;
color: #fff !important;
background-color: #404040 !important;
}
.sceditor-toolbar{
color: #fff !important;
background-color: #262626 !important;
}
.sceditor-dropdown label {
color: #fff !important;
}
.sceditor-dropdown {
color: #fff !important;
background-color: #333 !important;
border-color: #262626 !important;
}
.sceditor-dropdown textarea,
.sceditor-dropdown input {
background-color: #404040 !important;
border-color: #262626 !important;
margin: 0 !important;
}
.sceditor-dropdown div input[type="button"] {
background-color: #404040 !important;
color: #fff !important;
border-color: #202326;
width: calc(100% - 10px);
}
.sceditor-dropdown div input[type="button"]:hover {
background-color: #202326 !important;
color: #fff !important;
border-color: #333 !important;
}
.sceditor-dropdown a.sceditor-fontsize-option {
color: #fff !important;
}
.sceditor-dropdown a.sceditor-fontsize-option:hover {
color: #fff !important;
background-color: #404040 !important;
}
.sceditor-toolbar .sceditor-group {
color: #fff !important;
background-color: #ccc !important;
border: 0 !important;
}
.sceditor-container iframe {
color: #fff !important;
background-color: #404040 !important;
}
.sceditor-font-picker div {
overflow-y: scroll !important;
height: 120px !important;
}
.sceditor-font-option,
.sceditor-more {
color: #fff !important;
}
.sceditor-font-option:hover,
.sceditor-more:hover {
background-color: #404040 !important;
}
.table-bordered {
border-color: #262626 !important;
color: #fff !important;
}
.table-bordered > thead > tr > th {
border-color: #e31c26;
background-color: #e31c26;
}
.table-striped > tbody > tr > td {
background-color: #262626;
border-color: #666 !important;
}
.table-bordered > tbody >tr > td:first-child {
border-left-color: #262626 !important;
}
.table-bordered > tbody >tr:last-child > td {
border-bottom-color: #262626 !important;
}
.table-bordered > tbody >tr > td:last-child {
border-right-color: #262626 !important;
}
.table-striped>tbody>tr:nth-of-type(odd) > td {
background-color: #404040;
}
.pagination > li:first-child > a,
.pagination > li:last-child > a {
background-color: #e31c26 !important;
border-color: #262626 !important;
}
.pagination > .disabled > a {
color: #ccc !important;
}
.pagination li a {
background-color: #404040;
color: #fff;
border-color: #202326 !important;
}
.pagination li:hover a {
background-color: #666;
color: #fff;
}
.pagination li.active a,
.pagination li.active a:hover{
background-color: #666;
color: #fff;
}
.input-group-addon {
background-color: #e31c26 !important;
border-color: #333 !important;
color: #fff;
}
.form-control,
.form-control[disabled] {
background-color: #404040;
color: #fff;
border-color: #262626 !important;
}
.form-group > label {
color: #fff;
}
.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
color: #fff !important;
}
.navbar-nav>.user-menu>.dropdown-menu {
border: 2px solid #e6e6e6;
}
.navbar-nav>.user-menu>.dropdown-menu {
border: 0 !important;
top: 55px
}
.navbar-nav>.user-menu>.dropdown-menu>.user-footer {
background-color: #282727;
}

334
public/assets/css/skin_default.css vendored Normal file
View file

@ -0,0 +1,334 @@
.user-image, .user-header img {
border: 0 !important;
border-radius: 0 !important;
}
.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
color: #fff !important;
font-weight: 600;
}
.logo-lg img, .logo-mini img {
filter: brightness(0) invert(1);
}
.bg-green {
background-color: #2ecc71 !important;
}
.small-box .inner {
min-height: 102px;
}
.small-box .icon {
color: #fff !important;
font-size: 65px;
margin-top: 10px;
}
.label.label-status {
line-height: unset !important;
font-size: 15px !important;
}
.main-footer span {
font-weight: 600;
}
.main-footer span a img {
height: 20px !important;
}
.main-header .navbar {
background-color: #2ecc71;
}
.main-header .navbar .nav > li > a {
color: #ffffff;
}
.main-header .navbar .nav > li > a:hover,
.main-header .navbar .nav > li > a:active,
.main-header .navbar .nav > li > a:focus,
.main-header .navbar .nav .open > a,
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a {
background: #27ae60;
color: #fff;
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: #27ae60;
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
background-color: #27ae60;
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: #27ae60;
}
.main-header .navbar .dropdown-menu li a {
color: #fff;
}
.main-header .navbar .dropdown-menu li a:hover {
background: #27ae60;
}
}
.main-header .logo {
background-color: #27ae60;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: #27ae60;
}
.main-header li.user-header {
background-color: #2ecc71;
}
.content-header {
background: transparent;
}
.wrapper,
.main-sidebar,
.left-side {
background-color: #222d32;
}
.user-panel > .info,
.user-panel > .info > a {
color: #fff;
}
.sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li.active > a,
.sidebar-menu > li.menu-open > a {
color: #ffffff;
background: #1e282c;
}
.sidebar-menu > li.active > a {
border-left-color: #2ecc71;
}
.sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.sidebar a {
color: #b8c7ce;
}
.sidebar a:hover {
text-decoration: none;
}
.sidebar-menu .treeview-menu > li > a {
color: #8aa4af;
}
.sidebar-menu .treeview-menu > li.active > a,
.sidebar-menu .treeview-menu > li > a:hover {
color: #fff;
}
.sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.sidebar-form input[type="text"],
.sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.sidebar-form input[type="text"]:focus,
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.form-control {
margin-bottom: 5px;
}
.input-group {
margin-bottom: 15px;
}
p {
word-break: break-word;
}
.box.box-primary {
border-top-color: #2ecc71 !important;
}
.btn.btn-primary {
border-color: #27ae60 !important;
background-color: #2ecc71 !important;
color: #fff !important;
}
.btn.btn-primary:hover {
border-color: #2ecc71 !important;
background-color: #27ae60 !important;
color: #fff !important;
}
.logo-mini img {
display: block;
width: 40px;
margin-left: 5px;
margin-top: 10px;
}
.logo-lg img {
display: block;
height: 30px;
margin: auto;
margin-top: 10px !important;
}
.help-block {
font-size: 12px;
margin-top: -12px;
margin-bottom: -5px;
}
div.pull-left.image {
margin-top: 5px;
}
th.ip, td.ip {
width: 335px;
}
.role, .project-status {
font-weight: 700;
padding: 5px;
border-radius: 3px;
color: #fff;
background-color: transparent;
display: inline-block;
width: fit-content;
}
div.btn-group, div.btn-group .multiselect {
width: 100% !important;
margin-top: -2px;
}
div.form-group {
margin-top: -10px;
}
input.form-control {
border-top-right-radius: 3px !important;
border-bottom-right-radius: 3px !important;
}
.input-group .input-group-addon {
border-top-left-radius: 3px !important;
border-bottom-left-radius: 3px !important;
}
.bg-green-gradient {
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #27ae60), color-stop(1, #2ecc71)) !important;
}
i.no {
color: #e74c3c;
font-weight: 900;
font-size: 25px;
}
i.yes {
color: #2ecc71;
font-weight: 900;
font-size: 25px;
}
.pagination li.active a {
background-color: #2ecc71;
border-color: transparent;
}
.panel-theme {
border-color: #27ae60;
}
.panel-theme>.panel-heading {
color: #fff !important;
background-color: #2ecc71 !important;
border-color: #27ae60 !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #27ae60 !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #27ae60 !important;
}
.sceditor-container, textarea.editor {
resize: vertical !important;
width: 100%;
max-width: 100%;
min-height: 200px;
border-radius: 3px 3px 0 0;
}

View file

@ -4,7 +4,7 @@ html, body {
margin: 0; margin: 0;
padding: 0; padding: 0;
position: absolute; position: absolute;
background: url("../img/background.jpg") no-repeat center center fixed; background: url("https://cdn.discordapp.com/attachments/706149937905270904/707677922462400532/Gradiant_5.png") no-repeat center center fixed;
-webkit-background-size: cover; -webkit-background-size: cover;
-moz-background-size: cover; -moz-background-size: cover;
-o-background-size: cover; -o-background-size: cover;
@ -47,18 +47,19 @@ html, body {
.login-page form button { .login-page form button {
outline: 0; outline: 0;
background: #2ecc71; background: #e31c26;
width: 100%; width: 180px;
border: 0; border: 0;
padding: 15px; padding: 5px;
color: #FFFFFF; color: #FFFFFF;
font-size: 20px; font-size: 17px;
cursor: pointer; cursor: pointer;
border-radius: 3px; border-radius: 3px;
} }
.login-page form button:hover,.form button:active,.form button:focus { .login-page form button:hover,.form button:active,.form button:focus {
background: #27ae60; background: #cc1922;
color: #fff;
} }
.login-page form .message { .login-page form .message {
@ -80,15 +81,6 @@ html, body {
display: none; display: none;
} }
iframe {
border: 0;
width: 100%;
height: 91%;
margin: 0;
margin-top: -20px !important;
padding: 0;
}
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 0; width: 0;
background: transparent !important; background: transparent !important;
@ -103,7 +95,8 @@ iframe {
.footer { .footer {
margin-bottom: 0; margin-bottom: 0;
background-color: #fff; background-color: #282727;
color: #fff;
position: absolute; position: absolute;
bottom: 0; bottom: 0;
text-align: center; text-align: center;
@ -118,6 +111,7 @@ iframe {
.footer span a img { .footer span a img {
height: 20px !important; height: 20px !important;
filter: brightness(0) invert(1);
} }
@ -136,25 +130,25 @@ iframe {
} }
.panel-theme { .panel-theme {
border-color: #27ae60; border-color: #cc1922;
} }
.panel-theme>.panel-heading { .panel-theme>.panel-heading {
color: #fff !important; color: #fff !important;
background-color: #2ecc71 !important; background-color: #e31c26 !important;
border-color: #27ae60 !important; border-color: #cc1922 !important;
} }
.panel-theme>.panel-heading+.panel-collapse>.panel-body { .panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #27ae60 !important; border-top-color: #cc1922 !important;
} }
.panel-theme>.panel-footer+.panel-collapse>.panel-body { .panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #27ae60 !important; border-bottom-color: #cc1922 !important;
} }
.navbar.navbar-theme { .navbar.navbar-theme {
background-color: #2ecc71; background-color: #e31c26;
border-color: transparent; border-color: transparent;
} }
@ -175,52 +169,52 @@ iframe {
.navbar.navbar-theme .navbar-nav > li > a:hover, .navbar.navbar-theme .navbar-nav > li > a:hover,
.navbar.navbar-theme .navbar-nav > li > a:focus { .navbar.navbar-theme .navbar-nav > li > a:focus {
color: #fff; color: #fff;
background-color: #27ae60; background-color: #cc1922;
} }
.navbar.navbar-theme .navbar-nav > .active > a, .navbar.navbar-theme .navbar-nav > .active > a,
.navbar.navbar-theme .navbar-nav > .active > a:hover, .navbar.navbar-theme .navbar-nav > .active > a:hover,
.navbar.navbar-theme .navbar-nav > .active > a:focus { .navbar.navbar-theme .navbar-nav > .active > a:focus {
color: #fff; color: #fff;
background-color: #27ae60; background-color: #cc1922;
} }
.navbar.navbar-theme .navbar-nav > .open > a, .navbar.navbar-theme .navbar-nav > .open > a,
.navbar.navbar-theme .navbar-nav > .open > a:hover, .navbar.navbar-theme .navbar-nav > .open > a:hover,
.navbar.navbar-theme .navbar-nav > .open > a:focus { .navbar.navbar-theme .navbar-nav > .open > a:focus {
color: #fff; color: #fff;
background-color: #27ae60; background-color: #cc1922;
} }
.navbar.navbar-theme .navbar-toggle { .navbar.navbar-theme .navbar-toggle {
border-color: #fff; border-color: #fff;
color: #2ecc71; color: #e31c26;
} }
.navbar.navbar-theme .navbar-toggle:hover, .navbar.navbar-theme .navbar-toggle:hover,
.navbar.navbar-theme .navbar-toggle:focus { .navbar.navbar-theme .navbar-toggle:focus {
border-color: #fff; border-color: #fff;
color: #27ae60; color: #cc1922;
} }
.navbar.navbar-theme .navbar-toggle .icon-bar { .navbar.navbar-theme .navbar-toggle .icon-bar {
background-color: #fff; background-color: #fff;
color: #27ae60; color: #cc1922;
} }
.navbar.navbar-theme .navbar-link { .navbar.navbar-theme .navbar-link {
color: #fff; color: #fff;
background-color: #27ae60; background-color: #cc1922;
} }
.navbar.navbar-theme .navbar-link:hover { .navbar.navbar-theme .navbar-link:hover {
color: #fff; color: #fff;
background-color: #27ae60; background-color: #cc1922;
} }
.navbar.navbar-theme .dropdown-menu { .navbar.navbar-theme .dropdown-menu {
background-color: #2ecc71; background-color: #e31c26;
border-color: #27ae60; border-color: #cc1922;
margin: 0 !important; margin: 0 !important;
padding: 0 !important; padding: 0 !important;
} }
@ -238,15 +232,15 @@ iframe {
.navbar.navbar-theme .dropdown-menu a:focus, .navbar.navbar-theme .dropdown-menu a:focus,
.navbar.navbar-theme .dropdown-menu a:hover { .navbar.navbar-theme .dropdown-menu a:hover {
color: #fff; color: #fff;
background-color: #27ae60; background-color: #cc1922;
} }
.dropdown-menu .divider { .dropdown-menu .divider {
background-color: #27ae60 !important; background-color: #cc1922 !important;
} }
.dropdown-menu .active a { .dropdown-menu .active a {
background-color: #27ae60 !important; background-color: #cc1922 !important;
} }
.news .panel-body .container-fluid { .news .panel-body .container-fluid {
@ -337,14 +331,14 @@ iframe {
color: #fff; color: #fff;
padding: 8px 16px; padding: 8px 16px;
border: 1px solid transparent; border: 1px solid transparent;
border-color: transparent transparent #27ae60 transparent; border-color: transparent transparent #cc1922 transparent;
cursor: pointer; cursor: pointer;
user-select: none; user-select: none;
} }
.select-items { .select-items {
position: absolute; position: absolute;
background-color: #2ecc71; background-color: #e31c26;
top: 100%; top: 100%;
left: 0; left: 0;
right: 0; right: 0;
@ -356,12 +350,88 @@ iframe {
} }
.select-items div:hover, .same-as-selected { .select-items div:hover, .same-as-selected {
background-color: #27ae60; background-color: #cc1922;
}
.input-group-addon {
background-color: #e31c26 !important;
border-color: #333 !important;
color: #fff;
}
.form-group > label {
color: #fff;
}
.table-bordered {
border-color: #262626 !important;
color: #fff !important;
}
.table-bordered > thead > tr > th {
border-color: #e31c26;
background-color: #e31c26;
}
.table-striped > tbody > tr > td {
background-color: #262626;
border-color: #666 !important;
}
.table-bordered > tbody >tr > td:first-child {
border-left-color: #262626 !important;
}
.table-bordered > tbody >tr:last-child > td {
border-bottom-color: #262626 !important;
}
.table-bordered > tbody >tr > td:last-child {
border-right-color: #262626 !important;
}
.table-striped>tbody>tr:nth-of-type(odd) > td {
background-color: #404040;
}
.pagination > li:first-child > a,
.pagination > li:last-child > a {
background-color: #e31c26 !important;
border-color: #262626 !important;
}
.pagination > .disabled > a {
color: #ccc !important;
}
.pagination li a {
background-color: #404040;
color: #fff;
border-color: #202326 !important;
}
.pagination li:hover a {
background-color: #666;
color: #fff;
}
.pagination li.active a,
.pagination li.active a:hover{
background-color: #666;
color: #fff;
}
.form-control,
.form-control[disabled] {
background-color: #404040;
color: #fff;
border-color: #262626 !important;
} }
.btn-custom { .btn-custom {
outline: 0; outline: 0;
background: #2ecc71; background: #e31c26;
width: 180px; width: 180px;
border: 0; border: 0;
padding: 5px; padding: 5px;
@ -371,8 +441,14 @@ iframe {
border-radius: 3px; border-radius: 3px;
} }
.panel {
background-color: #282727;
color: #fff;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus { .btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #27ae60; background: #cc1922;
color: #fff;
} }
.controls { .controls {
@ -393,16 +469,32 @@ iframe {
font-weight: 900; font-weight: 900;
} }
.status.closed { .control-status {
color: #e74c3c; padding: 5px 10px 5px 10px;
border-radius: 5px;
background-color: transparent;
color: #333;
font-weight: 900;
} }
.status.loading { .control-status.status-unknown {
color: #f39c12; background-color: #7f8c8d;
color: #fff;
} }
.status.open { .control-status.status-closed {
color: #2ecc71; background-color: #c0392b;
color: #fff;
}
.control-status.status-open {
background-color: #2ecc71;
color: #fff;
}
.control-status.status-inactive {
background-color: #c0392b;
color: #fff;
} }
.actionfoto { .actionfoto {
@ -432,7 +524,7 @@ code i {
} }
.pagination li.active a { .pagination li.active a {
background-color: #2ecc71; background-color: #e31c26;
border-color: transparent; border-color: transparent;
} }

462
public/assets/css/style_default.css vendored Normal file
View file

@ -0,0 +1,462 @@
html, body {
width: 100%;
min-height: 100%;
margin: 0;
padding: 0;
position: absolute;
background: url("../img/background.jpg") no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
font-family: sans-serif;
}
.login-page {
width: 360px;
padding: 8% 0 0;
margin: auto;
}
.login-page form {
position: relative;
z-index: 1;
background: #FFFFFF;
max-width: 360px;
margin: 0 auto 100px;
padding: 15px 45px 45px 45px;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
border-radius: 3px;
}
.login-page form h1 {
text-align: center;
}
.login-page form input {
outline: 0;
background: #f2f2f2;
width: 100%;
border: 0;
margin: 0 0 15px;
padding: 15px;
box-sizing: border-box;
font-size: 14px;
border-radius: 3px;
}
.login-page form button {
outline: 0;
background: #2ecc71;
width: 100%;
border: 0;
padding: 15px;
color: #FFFFFF;
font-size: 20px;
cursor: pointer;
border-radius: 3px;
}
.login-page form button:hover,.form button:active,.form button:focus {
background: #27ae60;
}
.login-page form .message {
margin: 15px 0 0;
color: #7f8c8d;
font-size: 14px;
}
.login-page form .message a {
color: #27ae60;
text-decoration: none;
}
.login-page form .message a:hover {
color: #2ecc71;
}
.login-page form .register-form {
display: none;
}
::-webkit-scrollbar {
width: 0;
background: transparent !important;
}
.wrapper {
padding: 15px;
width: 100% !important;
margin-top: 75px !important;
margin-bottom: 40px !important;
}
.footer {
margin-bottom: 0;
background-color: #fff;
position: absolute;
bottom: 0;
text-align: center;
padding: 10px;
width: 100%;
text-decoration: none;
}
.footer span {
font-weight: 600;
}
.footer span a img {
height: 20px !important;
}
.alert {
color: #fff !important;
}
.alert-success {
background-color: #2ecc71 !important;
border: none !important;
}
.alert-danger {
background-color: #e74c3c !important;
border: none !important;
}
.panel-theme {
border-color: #27ae60;
}
.panel-theme>.panel-heading {
color: #fff !important;
background-color: #2ecc71 !important;
border-color: #27ae60 !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #27ae60 !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #27ae60 !important;
}
.navbar.navbar-theme {
background-color: #2ecc71;
border-color: transparent;
}
.navbar.navbar-theme .navbar-brand {
color: #fff;
}
.navbar.navbar-theme .navbar-brand:hover,
.navbar.navbar-theme .navbar-brand:focus {
color: #fff;
}
.navbar.navbar-theme .navbar-nav > li > a {
color: #fff;
background-color: transparent;
}
.navbar.navbar-theme .navbar-nav > li > a:hover,
.navbar.navbar-theme .navbar-nav > li > a:focus {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-nav > .active > a,
.navbar.navbar-theme .navbar-nav > .active > a:hover,
.navbar.navbar-theme .navbar-nav > .active > a:focus {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-nav > .open > a,
.navbar.navbar-theme .navbar-nav > .open > a:hover,
.navbar.navbar-theme .navbar-nav > .open > a:focus {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-toggle {
border-color: #fff;
color: #2ecc71;
}
.navbar.navbar-theme .navbar-toggle:hover,
.navbar.navbar-theme .navbar-toggle:focus {
border-color: #fff;
color: #27ae60;
}
.navbar.navbar-theme .navbar-toggle .icon-bar {
background-color: #fff;
color: #27ae60;
}
.navbar.navbar-theme .navbar-link {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-link:hover {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .dropdown-menu {
background-color: #2ecc71;
border-color: #27ae60;
margin: 0 !important;
padding: 0 !important;
}
.navbar.navbar-theme .dropdown-menu li {
margin: 0 !important;
padding: 0 !important;
}
.navbar.navbar-theme .dropdown-menu a {
color: #fff;
padding: 7px !important;
}
.navbar.navbar-theme .dropdown-menu a:focus,
.navbar.navbar-theme .dropdown-menu a:hover {
color: #fff;
background-color: #27ae60;
}
.dropdown-menu .divider {
background-color: #27ae60 !important;
}
.dropdown-menu .active a {
background-color: #27ae60 !important;
}
.news .panel-body .container-fluid {
word-wrap: break-word !important;
overflow: hidden !important;
margin: 0;
padding: 0;
width: 100% !important;
height: auto !important;
}
.checkbox {
margin-top: -10px;
}
.checkbox input[type="checkbox"] {
opacity: 0;
}
.checkbox label {
position: relative;
display: inline-block;
padding-left: 22px;
}
.checkbox label::before,
.checkbox label::after {
position: absolute;
content: "";
display: inline-block;
}
.checkbox label::before{
height: 16px;
width: 16px;
border: 1px solid;
left: 0px;
top: 3px;
}
.checkbox label::after {
height: 5px;
width: 9px;
border-left: 2px solid;
border-bottom: 2px solid;
transform: rotate(-45deg);
left: 4px;
top: 7px;
}
.checkbox input[type="checkbox"] + label::after {
content: none;
}
.checkbox input[type="checkbox"]:checked + label::after {
content: "";
}
.custom-select {
position: relative;
}
.custom-select select {
display: none;
}
.select-selected {
background-color: #2ecc71;
}
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
.select-items div,.select-selected {
color: #fff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent #27ae60 transparent;
cursor: pointer;
user-select: none;
}
.select-items {
position: absolute;
background-color: #2ecc71;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: #27ae60;
}
.btn-custom {
outline: 0;
background: #2ecc71;
width: 180px;
border: 0;
padding: 5px;
color: #FFFFFF;
font-size: 17px;
cursor: pointer;
border-radius: 3px;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #27ae60;
}
.controls {
padding: 0 !important;
margin: 0 !important;
}
.controls img {
width: 70% !important;
height: auto !important;
}
.controls.disabled {
filter: grayscale(100%) !important;
}
.status, .attraction {
font-weight: 900;
}
.control-status {
padding: 5px 10px 5px 10px;
border-radius: 5px;
background-color: transparent;
color: #333;
font-weight: 900;
}
.control-status.status-unknown {
background-color: #7f8c8d;
color: #fff;
}
.control-status.status-closed {
background-color: #c0392b;
color: #fff;
}
.control-status.status-open {
background-color: #2ecc71;
color: #fff;
}
.control-status.status-inactive {
background-color: #c0392b;
color: #fff;
}
.actionfoto {
width: calc(100% - 4px) !important;
height: auto;
border: 2px solid #fff;
border-radius: 5px;
}
code {
background-color: #eef1f6;
color: #596981;
border-radius: 3px;
padding: 3px;
line-height: 1.4;
font-size: 85%;
border: 1px solid rgba(0, 0, 0, .1);
display: block;
width: 335px;
text-align: right;
margin: 0;
}
code i {
float: left;
margin: 3px;
}
.pagination li.active a {
background-color: #2ecc71;
border-color: transparent;
}
.status, .attraction {
font-weight: 900;
color: #fff;
}
.status {
padding: 5px;
border-radius: 3px;
text-align: center;
}
.actionfoto {
width: calc(100% - 4px) !important;
height: auto;
border: 2px solid #fff;
border-radius: 5px;
}

File diff suppressed because it is too large Load diff

1248
public/assets/development/formats/xhtml.js vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,139 @@
/**
* SCEditor SVG material icons plugin
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
(function (document, sceditor) {
'use strict';
var dom = sceditor.dom;
/**
* Material icons by Google (Apache license)
* https://github.com/google/material-design-icons/blob/master/LICENSE
*
* Extra icons by materialdesignicons.com and contributors (MIT license)
* https://github.com/Templarian/MaterialDesign-SVG/blob/master/LICENSE
*/
/* eslint max-len: off*/
var icons = {
'bold': '<path d="M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z" />',
'bulletlist': '<path d="M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z" />',
'center': '<path d="M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z" />',
// Cody @XT3000 - https://materialdesignicons.com/
'code': '<path d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z" />',
'color': '<path d="M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z" /><path class="sce-color" d="M0,24H24V20H0V24Z" />',
'copy': '<path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" />',
'cut': '<path d="M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z" />',
'date': '<path d="M7,10H12V15H7M19,19H5V8H19M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z" />',
'email': '<path d="M20,8L12,13L4,8V6L12,11L20,6M20,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V6C22,4.89 21.1,4 20,4Z" />',
'emoticon': '<path d="M12,17.5C14.33,17.5 16.3,16.04 17.11,14H6.89C7.69,16.04 9.67,17.5 12,17.5M8.5,11A1.5,1.5 0 0,0 10,9.5A1.5,1.5 0 0,0 8.5,8A1.5,1.5 0 0,0 7,9.5A1.5,1.5 0 0,0 8.5,11M15.5,11A1.5,1.5 0 0,0 17,9.5A1.5,1.5 0 0,0 15.5,8A1.5,1.5 0 0,0 14,9.5A1.5,1.5 0 0,0 15.5,11M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />',
// JapanYoshi @japanyoshilol - https://materialdesignicons.com/
'font': '<path d="M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z" />',
'format': '<path d="M18,4V3A1,1 0 0,0 17,2H5A1,1 0 0,0 4,3V7A1,1 0 0,0 5,8H17A1,1 0 0,0 18,7V6H19V10H9V21A1,1 0 0,0 10,22H12A1,1 0 0,0 13,21V12H21V4H18Z" />',
// Austin Andrews @Templarian - https://materialdesignicons.com/
'grip': '<path d="M22,22H20V20H22V22M22,18H20V16H22V18M18,22H16V20H18V22M18,18H16V16H18V18M14,22H12V20H14V22M22,14H20V12H22V14Z" />',
// Sam Clarke @samclarke
'horizontalrule': '<path d="M 3,3 21,3 21,5 3,5 3,3 M 3,7 15,7 15,9 3,9 3,7 m 0,4 18,0 0,4 -18,0 0,-4" />',
'image': '<path d="M8.5,13.5L11,16.5L14.5,12L19,18H5M21,19V5C21,3.89 20.1,3 19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19Z" />',
'indent': '<path d="M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z" />',
'italic': '<path d="M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z" />',
'justify': '<path d="M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z" /> ',
'left': '<path d="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z" /> ',
'link': '<path d="M16,6H13V7.9H16C18.26,7.9 20.1,9.73 20.1,12A4.1,4.1 0 0,1 16,16.1H13V18H16A6,6 0 0,0 22,12C22,8.68 19.31,6 16,6M3.9,12C3.9,9.73 5.74,7.9 8,7.9H11V6H8A6,6 0 0,0 2,12A6,6 0 0,0 8,18H11V16.1H8C5.74,16.1 3.9,14.26 3.9,12M8,13H16V11H8V13Z" />',
'ltr': '<path d="M21,18L17,14V17H5V19H17V22M9,10V15H11V4H13V15H15V4H17V2H9A4,4 0 0,0 5,6A4,4 0 0,0 9,10Z" />',
// Austin Andrews @Templarian - https://materialdesignicons.com/
'maximize': '<path d="M9.5,13.09L10.91,14.5L6.41,19H10V21H3V14H5V17.59L9.5,13.09M10.91,9.5L9.5,10.91L5,6.41V10H3V3H10V5H6.41L10.91,9.5M14.5,13.09L19,17.59V14H21V21H14V19H17.59L13.09,14.5L14.5,13.09M13.09,9.5L17.59,5H14V3H21V10H19V6.41L14.5,10.91L13.09,9.5Z" />',
'orderedlist': '<path d="M7,13H21V11H7M7,19H21V17H7M7,7H21V5H7M2,11H3.8L2,13.1V14H5V13H3.2L5,10.9V10H2M3,8H4V4H2V5H3M2,17H4V17.5H3V18.5H4V19H2V20H5V16H2V17Z" />',
'outdent': '<path d="M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z" />',
'paste': '<path d="M19,20H5V4H7V7H17V4H19M12,2A1,1 0 0,1 13,3A1,1 0 0,1 12,4A1,1 0 0,1 11,3A1,1 0 0,1 12,2M19,2H14.82C14.4,0.84 13.3,0 12,0C10.7,0 9.6,0.84 9.18,2H5A2,2 0 0,0 3,4V20A2,2 0 0,0 5,22H19A2,2 0 0,0 21,20V4A2,2 0 0,0 19,2Z" />',
'pastetext': '<path d="M19,20H5V4H7V7H17V4H19M12,2A1,1 0 0,1 13,3A1,1 0 0,1 12,4A1,1 0 0,1 11,3A1,1 0 0,1 12,2M19,2H14.82C14.4,0.84 13.3,0 12,0C10.7,0 9.6,0.84 9.18,2H5A2,2 0 0,0 3,4V20A2,2 0 0,0 5,22H19A2,2 0 0,0 21,20V4A2,2 0 0,0 19,2Z" />',
'print': '<path d="M18,3H6V7H18M19,12A1,1 0 0,1 18,11A1,1 0 0,1 19,10A1,1 0 0,1 20,11A1,1 0 0,1 19,12M16,19H8V14H16M19,8H5A3,3 0 0,0 2,11V17H6V21H18V17H22V11A3,3 0 0,0 19,8Z" />',
'quote': '<path d="M14,17H17L19,13V7H13V13H16M6,17H9L11,13V7H5V13H8L6,17Z" />',
'redo': '<path d="M18.4,10.6C16.55,9 14.15,8 11.5,8C6.85,8 2.92,11.03 1.54,15.22L3.9,16C4.95,12.81 7.95,10.5 11.5,10.5C13.45,10.5 15.23,11.22 16.62,12.38L13,16H22V7L18.4,10.6Z" />',
'removeformat': '<path d="M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z" />',
'right': '<path d="M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z" />',
'rtl': '<path d="M8,17V14L4,18L8,22V19H20V17M10,10V15H12V4H14V15H16V4H18V2H10A4,4 0 0,0 6,6A4,4 0 0,0 10,10Z" />',
'size': '<path d="M3,12H6V19H9V12H12V9H3M9,4V7H14V19H17V7H22V4H9Z" />',
'source': '<path d="M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z" />',
'strike': '<path d="M3,14H21V12H3M5,4V7H10V10H14V7H19V4M10,19H14V16H10V19Z" />',
// Austin Andrews @Templarian - https://materialdesignicons.com/
'subscript': '<path d="M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z" />',
// Austin Andrews @Templarian - https://materialdesignicons.com/
'superscript': '<path d="M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z" />',
// Austin Andrews @Templarian - https://materialdesignicons.com/
'table': '<path d="M5,4H19A2,2 0 0,1 21,6V18A2,2 0 0,1 19,20H5A2,2 0 0,1 3,18V6A2,2 0 0,1 5,4M5,8V12H11V8H5M13,8V12H19V8H13M5,14V18H11V14H5M13,14V18H19V14H13Z" />',
'time': '<path d="M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z" />',
'underline': '<path d="M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z" />',
'undo': '<path d="M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z" />',
// Austin Andrews @Templarian - https://materialdesignicons.com/
'unlink': '<path d="M2,5.27L3.28,4L20,20.72L18.73,22L14.73,18H13V16.27L9.73,13H8V11.27L5.5,8.76C4.5,9.5 3.9,10.68 3.9,12C3.9,14.26 5.74,16.1 8,16.1H11V18H8A6,6 0 0,1 2,12C2,10.16 2.83,8.5 4.14,7.41L2,5.27M16,6A6,6 0 0,1 22,12C22,14.21 20.8,16.15 19,17.19L17.6,15.77C19.07,15.15 20.1,13.7 20.1,12C20.1,9.73 18.26,7.9 16,7.9H13V6H16M8,6H11V7.9H9.72L7.82,6H8M16,11V13H14.82L12.82,11H16Z" />',
'youtube': '<path d="M10,16.5V7.5L16,12M20,4.4C19.4,4.2 15.7,4 12,4C8.3,4 4.6,4.19 4,4.38C2.44,4.9 2,8.4 2,12C2,15.59 2.44,19.1 4,19.61C4.6,19.81 8.3,20 12,20C15.7,20 19.4,19.81 20,19.61C21.56,19.1 22,15.59 22,12C22,8.4 21.56,4.91 20,4.4Z" />'
};
sceditor.icons.material = function () {
var nodes = {};
var colorPath;
return {
create: function (command) {
if (command in icons) {
// Using viewbox="1 1 22 22" to trim off the 1 unit border
// around the SVG icons.
// Default is viewbox="0 0 24 24"
nodes[command] = sceditor.dom.parseHTML(
'<svg xmlns="http://www.w3.org/2000/svg" ' +
'viewbox="1 1 22 22" unselectable="on">' +
icons[command] +
'</svg>'
).firstChild;
if (command === 'color') {
colorPath = nodes[command].querySelector('.sce-color');
}
}
return nodes[command];
},
update: function (isSourceMode, currentNode) {
if (colorPath) {
var color = 'inherit';
if (!isSourceMode && currentNode) {
color = currentNode.ownerDocument
.queryCommandValue('forecolor');
// Needed for IE
if (parseInt(color) === color) {
// eslint-disable-next-line
color = ((color & 0x0000ff) << 16) | (color & 0x00ff00) | ((color & 0xff0000) >>> 16);
color = '#' + ('000000' + color.toString(16)).slice(-6);
}
}
dom.css(colorPath, 'fill', color);
}
},
rtl: function (isRtl) {
var gripNode = nodes.grip;
if (gripNode) {
var transform = isRtl ? 'scaleX(-1)' : '';
dom.css(gripNode, 'transform', transform);
dom.css(gripNode, 'msTransform', transform);
dom.css(gripNode, 'webkitTransform', transform);
}
}
};
};
sceditor.icons.material.icons = icons;
})(document, sceditor);

View file

@ -0,0 +1,119 @@
/**
* SCEditor SVG monocons plugin
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
(function (document, sceditor) {
'use strict';
var dom = sceditor.dom;
/* eslint max-len: off*/
var icons = {
'bold': '<text x="50%" y="50%" text-anchor="middle" dy=".5ex" font-family="Dejavu Sans, Helvetica, Arial, sans-serif" font-size="15" font-weight="bold">B</text>',
'bulletlist': '<path d="M6 2h9v2H6zm0 5h9v2H6zm0 5h9v2H6z"/><circle cx="3" cy="3" r="1.75"/><circle cx="3" cy="8" r="1.75"/><circle cx="3" cy="13" r="1.75"/>',
'center': '<path d="M1 1h14v2H1zm2 4h10v2H3zM1 9h14v2H1zm2 4h10v2H3z"/>',
'code': '<path d="M7 6L4 9l3 3v-1.5L5.5 9 7 7.5zm2 0v1.5L10.5 9 9 10.5V12l3-3zM2.406 1A.517.517 0 0 0 2 1.5v13c0 .262.238.5.5.5h11a.52.52 0 0 0 .5-.5V4.375c.002-.102-.13-.193-.156-.219l-3-3A.506.506 0 0 0 10.5 1zM3 2h7v2.5c0 .262.238.5.5.5H13v9H3zm8 .688L12.313 4H11z"/>',
'color': '<text x="50%" y="8" text-anchor="middle" dy=".5ex" font-family="Dejavu Sans, Helvetica, Arial, sans-serif" font-size="13" font-weight="bold">A</text><path class="sce-color" d="M2 13h12v2H2z"/>',
'copy': '<path d="M6.404 5.002a.5.5 0 0 0-.406.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V8.596a.492.492 0 0 0 0-.094.662.662 0 0 0 0-.063v-.063l-.031-.063v-.031a.557.557 0 0 0-.094-.094l-.031-.031-2.875-2.844a.498.498 0 0 0-.125-.156.5.5 0 0 0-.344-.156h-5a.59.59 0 0 0-.094.001c-.239.046.031-.003 0 0zm.594 1h4v2.5a.5.5 0 0 0 .5.5h2.5v6h-7v-9zm5 .687l1.313 1.313h-1.313V6.689zM1.406.002a.517.517 0 0 0-.406.5v10c0 .262.238.5.5.5H7V6l3-.063V3.596a.492.492 0 0 0 0-.094.331.331 0 0 0 0-.063v-.063c-.009-.021-.02-.041-.031-.062v-.031a.597.597 0 0 0-.094-.094l-.031-.031L6.969.314a.484.484 0 0 0-.125-.156A.506.506 0 0 0 6.5.002h-5a.492.492 0 0 0-.094 0c-.229.044.032-.003 0 0zm.594 1h4v2.5c0 .262.238.5.5.5H9v1.029L7 5 6 6v4l-4 .002v-9zm5 .687l1.313 1.313H7V1.689z"/>',
'cut': '<path d="M3 .5c0 2.936 3.774 7.73 3.938 7.938l-1.813 2.844A2.46 2.46 0 0 0 4 11c-1.375 0-2.5 1.125-2.5 2.5S2.625 16 4 16s2.5-1.125 2.5-2.5c0-.444-.138-.856-.344-1.22L8 9.845l1.844 2.438A2.473 2.473 0 0 0 9.5 13.5c0 1.375 1.125 2.5 2.5 2.5s2.5-1.125 2.5-2.5S13.375 11 12 11a2.46 2.46 0 0 0-1.125.28L9.062 8.439C9.226 8.232 13 3.437 13 .5h-1L8 6.78 4 .5H3zM4 12c.834 0 1.5.666 1.5 1.5S4.834 15 4 15s-1.5-.666-1.5-1.5S3.166 12 4 12zm8 0c.834 0 1.5.666 1.5 1.5S12.834 15 12 15s-1.5-.666-1.5-1.5.666-1.5 1.5-1.5z"/>',
'date': '<path d="M8.1 7v1h2.7v1H8.094v3H11.7v-1H9v-1h2.7V7zM4.5 7v1h.8v3h-.8v1h2.7v-1h-.9V7zM.9 1v14h14.4V1h-1.8v2h-2.7V1H5.4v2H2.7V1zm.9 4h12.6v9H1.8z"/>',
'email': '<path d="M1 4.5v8c0 .262.238.5.5.5h13a.52.52 0 0 0 .5-.5V4.594C15 4 15 4 14.5 4H1.563C1 4 1 4 1 4.5zM2 5h12v7H2V5zm-.187-.906l-.625.812 6.5 5 .312.219.313-.219 6.5-5-.625-.813L8 8.844l-6.187-4.75z"/>',
'emoticon': '<path d="M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zm0 1a6 6 0 1 1 0 12A6 6 0 0 1 8 2zM6 5c-.546 0-1 .454-1 1s.454 1 1 1 1-.454 1-1-.454-1-1-1zm4 0c-.547 0-1 .454-1 1s.453 1 1 1c.547 0 1-.454 1-1s-.453-1-1-1zM4.5 9.5s-.002.652.469 1.281C5.44 11.409 6.389 12 8 12c1.611 0 2.561-.591 3.031-1.219.47-.629.469-1.281.469-1.281h-1s-.002.314-.281.688c-.279.374-.83.813-2.219.813-1.389 0-1.94-.44-2.219-.813C5.502 9.814 5.5 9.5 5.5 9.5z"/>',
'font': '<path d="M7.953 9.75h-4.06l-.395 1.141c-.132.381-.254.752-.368 1.109H.7c.391-1.119.762-2.154 1.113-3.105a104.642 104.642 0 0 1 2.024-5.079 52.23 52.23 0 0 1 1.016-2.212h2.218a80.63 80.63 0 0 1 2.011 4.605c.337.84.105.338.458 1.288s-1.455 2.63-1.587 2.253zM5.912 3.959c-.052.151-.129.357-.229.616-.1.26-.215.56-.343.901-.129.341-.273.716-.431 1.125-.159.409-.32.839-.484 1.288h2.972c-.159-.45-.312-.882-.461-1.292a46.81 46.81 0 0 0-.425-1.127c-.135-.34-.252-.641-.354-.9-.1-.26-.182-.463-.245-.611zm6.949 10.042a36.325 36.325 0 0 0-.35-1.037l-.371-1.063H8.352l-.368 1.064A41.69 41.69 0 0 0 7.64 14H5.373c.365-1.045.711-2.01 1.039-2.896.328-.886.648-1.723.962-2.506.313-.786.623-1.53.927-2.235.305-.705.62-1.393.948-2.065h2.069c.318.672.634 1.36.941 2.065.311.705.621 1.449.936 2.235.314.783.636 1.619.964 2.506.327.888.676 1.853 1.041 2.896l-2.339.001zm-2.625-7.504c-.049.141-.118.333-.213.576-.094.242-.2.521-.319.84-.121.317-.254.668-.402 1.051-.147.382-.299.783-.45 1.201h2.772c-.147-.42-.291-.822-.433-1.205a43.073 43.073 0 0 0-.396-1.053c-.125-.317-.233-.598-.33-.84a13.884 13.884 0 0 0-.229-.57z"/>',
'format': '<path d="M10.5 2v1.5H12c.235 0 .401-.009.5 0 .008.088 0 .279 0 .5v2H14V3.437c0-.237-.01-.409-.031-.593-.022-.185-.067-.42-.25-.594s-.407-.2-.594-.219A5.693 5.693 0 0 0 12.5 2zm0-2L7.187 2.5 10.5 5zm.5 5.187L13.5 8.5 16 5.187zm-.958-.339h-2.03l-3.234 8.456c-.154.392-.336.994-.854 1.022v.518h2.744v-.518c-.644-.168-.658-.462-.434-1.036l.784-2.086h3.43l.854 2.086c.238.574.308.924-.406 1.036v.518h3.276v-.518c-.434-.056-.546-.364-.686-.728l-3.444-8.75M7.424 10l1.26-3.318L10 10H7.424M4.912.975h-1.63L.686 7.764c-.124.314-.27.798-.686.82V9h2.203v-.416c-.517-.135-.528-.37-.348-.832l.629-1.674h2.754l.685 1.674c.192.461.248.742-.325.832V9c1.73.137 1.837-.002 2.079-1L4.912.975M2.81 5.11l1.012-2.664L4.878 5.11H2.81"/>',
'grip': '<path d="M14.656 5.156l-10 10 .688.688 10-10-.688-.688zm0 3l-7 7 .688.688 7-7-.688-.688zm0 3l-4 4 .688.688 4-4-.688-.688z"/>',
'horizontalrule': '<path d="M2 2v1h12V2H2zm0 2v1h9V4H2zm0 2v1h12V6H2zm0 2v2h12V8H2z"/>',
'image': '<path d="M.5 2.5v11h15v-11H.5zm1 1h13v9h-13v-9z"/><circle cx="4" cy="6" r="1.25"/><path d="M1 11h14v2H1z"/><path d="M5 12l2-4 2 4z"/><path d="M7 12l4-7 4 7z"/>',
'indent': '<path d="M1 1h14v2H1zm5 4h9v2H6zm0 4h9v2H6zm-5 4h14v2H1zm4-5L1 5v6z"/>',
'italic': '<text x="50%" y="50%" text-anchor="middle" dy=".5ex" font-family="Dejavu Sans, Helvetica, Arial, sans-serif" font-weight="bold" font-size="15" font-style="italic">i</text>',
'justify': '<path d="M1 1h14v2H1zm0 4h14v2H1zm0 4h14v2H1zm0 4h14v2H1z"/>',
'left': '<path d="M1 1h14v2H1zm0 4h10v2H1zm0 4h14v2H1zm0 4h10v2H1z"/>',
'link': '<path d="M2 4c-.625 0-1.009.438-1.188.75s-.269.63-.344.969c-.15.677-.219 1.476-.219 2.28s.068 1.605.219 2.282c.075.339.165.625.344.938s.563.78 1.188.78h4v-2H2.469c-.022-.065-.042-.06-.063-.155-.1-.447-.156-1.15-.156-1.844s.057-1.396.156-1.844c.02-.088.042-.092.063-.156H6V4H2zm8 0v2h3.531c.021.064.043.068.063.156.1.448.156 1.149.156 1.844s-.057 1.396-.156 1.844c-.021.096-.041.09-.063.156H10v2h4c.625 0 1.009-.47 1.188-.781s.269-.6.344-.938c.15-.678.219-1.476.219-2.281s-.068-1.604-.219-2.281c-.075-.34-.165-.656-.344-.97S14.625 4 14 4h-4zM5.719 7c-.523.074-.949.602-.875 1.125S5.477 9.074 6 9h4c.528.01 1-.472 1-1s-.472-1.007-1-1H6a.593.593 0 0 0-.188 0h-.093z"/>',
'ltr': '<path d="M10.313 1.937c-.98 0-1.752.284-2.344.813-.592.529-.906 1.228-.906 2.094 0 .811.275 1.467.781 1.969.506.497 1.227.792 2.156.906V14h2V3h1v11h1V1.939zM2 4v8l4-4z"/>',
'maximize': '<path d="M2 7l1.75-1.75-2-2L0 5V0h5L3.25 1.75l2 2L7 2v5H2zm9 9l1.75-1.75-2-2L9 14V9h5l-1.75 1.75 2 2L16 11v5h-5zm-6 0l-1.75-1.75 2-2L7 14V9H2l1.75 1.75-2 2L0 11v5h5zm6-16l1.75 1.75-2 2L9 2v5h5l-1.75-1.75 2-2L16 5V0h-5z"/>',
'orderedlist': '<path d="M6 2h9v2H6zm0 5h9v2H6zm0 5h9v2H6zm-2.799.846q.392.1.594.352.205.25.205.636 0 .576-.441.877-.441.298-1.287.298-.298 0-.599-.05-.298-.046-.591-.142v-.77q.28.14.555.212.277.07.545.07.396 0 .607-.137.212-.138.212-.394 0-.265-.218-.4-.215-.137-.638-.137h-.4v-.644h.421q.376 0 .56-.116.185-.12.185-.36 0-.224-.18-.346-.178-.122-.505-.122-.242 0-.488.055-.246.054-.49.16v-.731q.295-.083.586-.125.29-.041.57-.041.756 0 1.13.249.375.246.375.744 0 .34-.179.558-.179.215-.529.304zm-.905-3.609H4v.734H1.186v-.734L2.599 7.99q.19-.172.28-.335.091-.163.091-.34 0-.272-.184-.438-.182-.166-.485-.166-.234 0-.511.101-.278.099-.594.296v-.851q.337-.112.667-.169.329-.06.645-.06.696 0 1.08.307.386.306.386.853 0 .317-.163.592-.164.272-.688.731l-.827.726zM1.228 4.276h.903V1.714l-.927.19V1.21l.922-.191h.971v3.258H4v.706H1.228v-.706z"/>',
'outdent': '<path d="M1 1h14v2H1zm0 4h9v2H1zm0 4h9v2H1zm0 4h14v2H1zm10-5l4-3v6z"/>',
'paste': '<path d="M4.406 0A.5.5 0 0 0 4 .5V1H1.5a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5H6v2.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V7.594a.492.492 0 0 0 0-.094.436.436 0 0 0 0-.125.916.916 0 0 0-.031-.063v-.031a.749.749 0 0 0-.063-.063.749.749 0 0 0-.063-.063l-2.875-2.844a.498.498 0 0 0-.125-.156A.498.498 0 0 0 11.5 4H10V1.5a.5.5 0 0 0-.5-.5H7V.5a.5.5 0 0 0-.5-.5h-2a.492.492 0 0 0-.094 0c-.239.045.032-.003 0 0zM2 2h1v.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5V2h1v2H6.5a.64.64 0 0 0-.062 0 .493.493 0 0 0-.094.031.474.474 0 0 0-.125.063l-.031.031-.031.031a.916.916 0 0 0-.063.031.47.47 0 0 0-.031.094l-.031.031A.506.506 0 0 0 6 4.5V11H2V2zm5 3h4v2.5a.5.5 0 0 0 .5.5H14v6H7v-2.406a.492.492 0 0 0 0-.094V5zm5 .688L13.313 7H12V5.688zM4.406 0A.5.5 0 0 0 4 .5V1H1.5a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h5a.5.5 0 0 0 .5-.5V5h2.5a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5H7V.5a.5.5 0 0 0-.5-.5h-2a.492.492 0 0 0-.094 0c-.239.045.032-.003 0 0zM2 2h1v.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5V2h1v2H6.5a.5.5 0 0 0-.5.5V11H2V2zm4.406 2A.5.5 0 0 0 6 4.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V7.594a.492.492 0 0 0 0-.094.331.331 0 0 0 0-.063v-.063a.916.916 0 0 0-.031-.063V7.28a.523.523 0 0 0-.094-.094l-.031-.031-2.875-2.844a.498.498 0 0 0-.125-.156A.503.503 0 0 0 11.5 4h-5a.492.492 0 0 0-.094 0c-.239.045.032-.003 0 0zM7 5h4v2.5a.5.5 0 0 0 .5.5H14v6H7V5zm5 .688L13.313 7H12V5.688zM8 12h5v1H8v-1zm0-2h5v1H8v-1zm0-2h5v1H8V8zm0-2h3v1H8V6z"/>',
'pastetext': '<path d="M4.406 0A.5.5 0 0 0 4 .5V1H1.5a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5H6v2.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V7.594a.492.492 0 0 0 0-.094.436.436 0 0 0 0-.125.916.916 0 0 0-.031-.063v-.031a.749.749 0 0 0-.063-.063.749.749 0 0 0-.063-.063l-2.875-2.844a.498.498 0 0 0-.125-.156A.498.498 0 0 0 11.5 4H10V1.5a.5.5 0 0 0-.5-.5H7V.5a.5.5 0 0 0-.5-.5h-2a.492.492 0 0 0-.094 0zM2 2h1v.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5V2h1v2H6.5a.64.64 0 0 0-.062 0 .493.493 0 0 0-.094.031.474.474 0 0 0-.125.063l-.031.031-.031.031a.916.916 0 0 0-.063.031.47.47 0 0 0-.031.094l-.031.031A.506.506 0 0 0 6 4.5V11H2V2zm5 3h4v2.5a.5.5 0 0 0 .5.5H14v6H7v-2.406a.492.492 0 0 0 0-.094V5zm5 .688L13.313 7H12V5.688zM4.406 0A.5.5 0 0 0 4 .5V1H1.5a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h5a.5.5 0 0 0 .5-.5V5h2.5a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5H7V.5a.5.5 0 0 0-.5-.5h-2a.492.492 0 0 0-.094 0zM2 2h1v.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5V2h1v2H6.5a.5.5 0 0 0-.5.5V11H2V2zm4.406 2A.5.5 0 0 0 6 4.5v10a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V7.594a.492.492 0 0 0 0-.094.331.331 0 0 0 0-.063v-.062a.916.916 0 0 0-.031-.063v-.031a.523.523 0 0 0-.094-.094l-.031-.031-2.875-2.844a.498.498 0 0 0-.125-.156A.5.5 0 0 0 11.5 4h-5a.492.492 0 0 0-.094 0zM7 5h4v2.5a.5.5 0 0 0 .5.5H14v6H7V5zm5 .688L13.313 7H12V5.688z"/>',
'print': '<path d="M4 1v3H1v8h2V6h10v6h2V4h-3V1zm1 1h6v2H5zM4 7v8h8V7zm1 1h6v6H5zm1 1v1h4V9zm0 2v1h4v-1z"/><path d="M4 1v3H1v8h2V6h10v6h2V4h-3V1zm1 1h6v2H5zM4 7v8h8V7zm1 1h6v6H5zm1 1v1h4V9zm0 2v1h4v-1z"/>',
'quote': '<path d="M8 2.013c-1.998 0-3.818.382-5.188 1.125S.499 5.054.499 6.513c0 1.237.926 2.345 2.281 3.156s3.197 1.344 5.219 1.344c.344 0 .563.019.906 0l5.875 2.938c.377.18.854-.32.656-.688l-1.813-3.656c1.242-.79 1.875-2.014 1.875-3.094 0-1.46-.943-2.632-2.313-3.375S9.998 2.013 8 2.013z"/>',
'redo': '<path d="M9 7l5-5v5z"/><path d="M9.553 2.205c1 .268 1.932.796 2.69 1.553l.706.707-1.414 1.414-.707-.707a3.995 3.995 0 0 0-3.863-1.035 3.995 3.995 0 0 0-2.828 2.828 3.995 3.995 0 0 0 1.035 3.863l.707.707-1.414 1.414-.707-.707a6.003 6.003 0 0 1-1.553-5.795 6.003 6.003 0 0 1 7.348-4.242z"/>',
'removeformat': '<path d="M8.781 2l-.125.125L3.781 7l-.125.125-3 3-.313.313.25.344 3 4 .156.219h2.47l.125-.156 3-3 .313-.313 4.688-4.688.313-.313-.25-.344-3-4-.156-.188H8.781zm.407 1h.594l-4 4h-.594l4-4zm1.75.25l2.406 3.188-4.281 4.28-2.406-3.187 4.281-4.281z"/>',
'right': '<path d="M1 1h14v2H1zm4 4h10v2H5zM1 9h14v2H1zm4 4h10v2H5z"/>',
'rtl': '<path d="M5.344 2.001c-.98 0-1.783.284-2.375.813-.592.529-.875 1.227-.875 2.093 0 .811.244 1.467.75 1.969.506.497 1.227.792 2.156.906V14h2V3.001L8 3v11h1V2zM14 4l-4 4 4 4z"/>',
'size': '<path d="M12.5.656L10 4h5L12.5.656zM4.594 4.5a49.476 49.476 0 0 0-.875 1.906c-.277.65-.581 1.334-.875 2.063-.286.729-.572 1.52-.875 2.344S1.338 12.53 1 13.5h2.094c.095-.313.2-.64.313-.97.121-.328.262-.64.375-.968h3.5c.113.329.231.64.344.969.121.329.217.656.313.969h2.188c-.338-.971-.666-1.864-.969-2.688s-.611-1.615-.906-2.344a56.045 56.045 0 0 0-.844-2.063c-.286-.66-.581-1.282-.875-1.906H4.594zM10 6l2.5 3.313L15 6h-5zm-4.5.53c.052.13.132.307.219.532.086.225.2.486.313.78.121.296.245.614.375.97s.268.734.406 1.125H4.25c.139-.391.245-.77.375-1.125.139-.355.293-.674.406-.97s.194-.555.281-.78c.087-.224.145-.401.188-.531z"/>',
'source': '<path d="M4.937 3.939L1 8.499l3.937 4.564L6 12 3 8.499 6 5zm6.126 0L10 5.002l3 3.503-3 3.497 1.063 1.063L15 8.505z"/>',
'strike': '<text x="50%" y="50%" text-anchor="middle" dy=".5ex" font-family="Dejavu Sans, Helvetica, Arial, sans-serif" font-size="15" font-weight="bold">S</text><path d="M1 7v1h14V7H1z"/>',
'subscript': '<path d="M11 10v1h3v1h-3v3h4v-1h-3v-1h3v-3zM1 3l3 5-3 5h2l3-5H4l3 5h2L6 8l3-5H7L4 8h2L3 3z"/>',
'superscript': '<path d="M11 1v1h3v1h-3v3h4V5h-3V4h3V1zM1 3l3 5-3 5h2l3-5H4l3 5h2L6 8l3-5H7L4 8h2L3 3z"/>',
'table': '<path d="M1 2h14v2H1zm0 2v10h14V4H1zm1 1h3.5v2H2V5zm4.5 0h3v2h-3V5zm4 0H14v2h-3.5V5zM2 8h3.5v2H2V8zm4.5 0h3v2h-3V8zm4 0H14v2h-3.5V8zM2 11h3.5v2H2v-2zm4.5 0h3v2h-3v-2zm4 0H14v2h-3.5v-2z"/>',
'time': '<path d="M8 0C3 0 0 4 0 8s3 8 8 8 8-4 8-8-3-8-8-8zm0 2c3.461 0 6 2.539 6 6s-2.539 6-6 6c-3.46 0-6-2.539-6-6s2.54-6 6-6zM7 3v6l2.5 2L11 9.5 9 8V3z"/>',
'underline': '<text x="50%" y="50%" text-anchor="middle" dy=".5ex" font-family="Dejavu Sans, Helvetica, Arial, sans-serif" font-weight="bold" font-size="15" text-decoration="underline">U</text>',
'undo': '<path d="M2 7h5L2 2z"/><path d="M6.447 2.205c-1 .268-1.932.796-2.69 1.553l-.706.707 1.414 1.414.707-.707a3.995 3.995 0 0 1 3.863-1.035 3.995 3.995 0 0 1 2.828 2.828 3.995 3.995 0 0 1-1.035 3.863l-.707.707 1.414 1.414.707-.707a6.003 6.003 0 0 0 1.553-5.795 6.003 6.003 0 0 0-7.348-4.242z"/>',
'unlink': '<path d="M2 4c-.625 0-1.009.438-1.188.75s-.269.63-.344.969c-.15.677-.219 1.476-.219 2.28s.068 1.605.219 2.282c.075.339.165.625.344.938s.563.78 1.188.78h4v-2H2.469c-.022-.065-.042-.06-.063-.155-.1-.447-.156-1.15-.156-1.844s.057-1.396.156-1.844c.02-.088.042-.092.063-.156H6V4H2zm8 0v2h3.531c.021.064.043.068.063.156.1.448.156 1.149.156 1.844s-.057 1.396-.156 1.844c-.021.095-.041.09-.063.156H10v2h4c.625 0 1.009-.47 1.188-.781s.269-.6.344-.938c.15-.678.219-1.476.219-2.281s-.068-1.604-.219-2.281c-.075-.34-.165-.656-.344-.97S14.625 4 14 4h-4z"/>',
'youtube': '<path d="M2 2C1 2 0 3 0 4v8c0 1 1 2 2 2h12c1 0 2-1 2-2V4c0-1-1-2-2-2H2zm4 3l6 3-6 3V5z"/>'
};
sceditor.icons.monocons = function () {
var nodes = {};
var colorPath;
return {
create: function (command) {
if (command in icons) {
nodes[command] = sceditor.dom.parseHTML(
'<svg xmlns="http://www.w3.org/2000/svg" ' +
'viewbox="0 0 16 16" unselectable="on">' +
icons[command] +
'</svg>'
).firstChild;
if (command === 'color') {
colorPath = nodes[command].querySelector('.sce-color');
}
}
return nodes[command];
},
update: function (isSourceMode, currentNode) {
if (colorPath) {
var color = 'inherit';
if (!isSourceMode && currentNode) {
color = currentNode.ownerDocument
.queryCommandValue('forecolor');
// Needed for IE
if (parseInt(color) === color) {
// eslint-disable-next-line
color = ((color & 0x0000ff) << 16) | (color & 0x00ff00) | ((color & 0xff0000) >>> 16);
color = '#' + ('000000' + color.toString(16)).slice(-6);
}
}
dom.css(colorPath, 'fill', color);
}
},
rtl: function (isRtl) {
var gripNode = nodes.grip;
if (gripNode) {
var transform = isRtl ? 'scaleX(-1)' : '';
dom.css(gripNode, 'transform', transform);
dom.css(gripNode, 'msTransform', transform);
dom.css(gripNode, 'webkitTransform', transform);
}
}
};
};
sceditor.icons.monocons.icons = icons;
})(document, sceditor);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,105 @@
/**
* SCEditor AutoSave Plugin
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
(function (sceditor) {
'use strict';
var defaultKey = 'sce-autodraft-' + location.pathname + location.search;
function clear(key) {
localStorage.removeItem(key || defaultKey);
}
sceditor.plugins.autosave = function () {
var base = this;
var editor;
var storageKey = defaultKey;
// 86400000 = 24 hrs (24 * 60 * 60 * 1000)
var expires = 86400000;
var saveHandler = function (value) {
localStorage.setItem(storageKey, JSON.stringify(value));
};
var loadHandler = function () {
return JSON.parse(localStorage.getItem(storageKey));
};
function gc() {
for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
if (/^sce\-autodraft\-/.test(key)) {
var item = JSON.parse(localStorage.getItem(storageKey));
if (item && item.time < Date.now() - expires) {
clear(key);
}
}
}
}
base.init = function () {
editor = this;
var opts = editor.opts && editor.opts.autosave || {};
saveHandler = opts.save || saveHandler;
loadHandler = opts.load || loadHandler;
storageKey = opts.storageKey || storageKey;
expires = opts.expires || expires;
gc();
};
base.signalReady = function () {
// Add submit event listener to clear autosave
var parent = editor.getContentAreaContainer();
while (parent) {
if (/form/i.test(parent.nodeName)) {
parent.addEventListener(
'submit', clear.bind(null, storageKey), true
);
break;
}
parent = parent.parentNode;
}
var state = loadHandler();
if (state) {
editor.sourceMode(state.sourceMode);
editor.val(state.value, false);
editor.focus();
if (state.sourceMode) {
editor.sourceEditorCaret(state.caret);
} else {
editor.getRangeHelper().restoreRange();
}
}
saveHandler({
caret: this.sourceEditorCaret(),
sourceMode: this.sourceMode(),
value: editor.val(null, false),
time: Date.now()
});
};
base.signalValuechangedEvent = function (e) {
saveHandler({
caret: this.sourceEditorCaret(),
sourceMode: this.sourceMode(),
value: e.detail.rawValue,
time: Date.now()
});
};
};
sceditor.plugins.autosave.clear = clear;
}(sceditor));

View file

@ -0,0 +1,94 @@
/**
* SCEditor Auto Youtube Plugin
* http://www.sceditor.com/
*
* Copyright (C) 2016, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
(function (document, sceditor) {
'use strict';
var dom = sceditor.dom;
/*
(^|\s) Start of line or space
(?:https?:\/\/)? Optional scheme like http://
(?:www\.)? Optional www. prefix
(?:
youtu\.be\/ Ends with .be/ so whatever comes next is the ID
|
youtube\.com\/watch\?v= Matches the .com version
)
([^"&?\/ ]{11}) The actual YT ID
(?:\&[\&_\?0-9a-z\#]+)? Any extra URL params
(\s|$) End of line or space
*/
var ytUrlRegex = /(^|\s)(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/watch\?v=)([^"&?\/ ]{11})(?:\&[\&_\?0-9a-z\#]+)?(\s|$)/i;
function youtubeEmbedCode(id) {
return '<iframe width="560" height="315" frameborder="0" ' +
'src="https://www.youtube-nocookie.com/embed/' + id + '" ' +
'data-youtube-id="' + id + '" allowfullscreen></iframe>';
}
function convertYoutubeLinks(root) {
var node = root.firstChild;
while (node) {
// 3 is TextNodes
if (node.nodeType === 3) {
var text = node.nodeValue;
var parent = node.parentNode;
var match = text.match(ytUrlRegex);
if (match) {
parent.insertBefore(document.createTextNode(
text.substr(0, match.index) + match[1]
), node);
parent.insertBefore(
dom.parseHTML(youtubeEmbedCode(match[2])), node
);
node.nodeValue = match[3] +
text.substr(match.index + match[0].length);
}
} else {
// TODO: Make this tag configurable.
if (!dom.is(node, 'code')) {
convertYoutubeLinks(node);
}
}
node = node.nextSibling;
}
};
sceditor.plugins.autoyoutube = function () {
this.signalPasteRaw = function (data) {
// TODO: Make this tag configurable.
// Skip code tags
if (dom.closest(this.currentNode(), 'code')) {
return;
}
if (data.html || data.text) {
var html = document.createElement('div');
if (data.html) {
html.innerHTML = data.html;
} else {
html.textContent = data.text;
}
convertYoutubeLinks(html);
data.html = html.innerHTML;
}
};
};
})(document, sceditor);

View file

@ -0,0 +1,222 @@
/**
* SCEditor Drag and Drop Plugin
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
(function (sceditor) {
'use strict';
/**
* Place holder GIF shown while image is loading.
* @type {string}
* @private
*/
var loadingGif = 'data:image/gif;base64,R0lGODlhlgBkAPABAH19ffb29iH5BAAK' +
'AAAAIf4aQ3JlYXRlZCB3aXRoIGFqYXhsb2FkLmluZm8AIf8LTkVUU0NBUEUyLjADAQA' +
'AACwAAAAAlgBkAAAC1YyPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s' +
'73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNarfcrvcLDovH5LL5jE6r1+y2+w2Py+f0u' +
'v2OvwD2fP6iD/gH6Pc2GIhg2JeQSNjGuLf4GMlYKIloefAIUEl52ZmJyaY5mUhqyFnq' +
'mQr6KRoaMKp66hbLumpQ69oK+5qrOyg4a6qYV2x8jJysvMzc7PwMHS09TV1tfY2drb3' +
'N3e39DR4uPk5ebn6Onq6+zt7u/g4fL99UAAAh+QQACgAAACwAAAAAlgBkAIEAAAB9fX' +
'329vYAAAAC3JSPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MC' +
'ofEovGITCqXzKbzCY1Kp9Sq9YrNarfcrvcLDovH5LL5jE6r1+y2+w2Py+f0uv2OvwD2' +
'fP4iABgY+CcoCNeHuJdQyLjIaOiWiOj4CEhZ+SbZd/nI2RipqYhQOThKGpAZCuBZyAr' +
'ZprpqSupaCqtaazmLCRqai7rb2av5W5wqSShcm8fc7PwMHS09TV1tfY2drb3N3e39DR' +
'4uPk5ebn6Onq6+zt7u/g4fLz9PX29/j5/vVAAAIfkEAAoAAAAsAAAAAJYAZACBAAAAf' +
'X199vb2AAAAAuCUj6nL7Q+jnLTai7PevPsPhuJIluaJpurKtu4Lx/JM1/aN5/rO9/4P' +
'DAqHxKLxiEwql8ym8wmNSqfUqvWKzWq33K73Cw6Lx+Sy+YxOq9fstvsNj8vn9Lr9jr8' +
'E9nz+AgAYGLjQVwhXiJgguAiYgGjo9tinyCjoKLn3hpmJUGmJsBmguUnpCXCJOZraaX' +
'oKShoJe9DqehCqKlnqiZobuzrbyvuIO8xqKpxIPKlwrPCbBx0tPU1dbX2Nna29zd3t/' +
'Q0eLj5OXm5+jp6uvs7e7v4OHy8/T19vf4+fr7/P379UAAAh+QQACgAAACwAAAAAlgBk' +
'AIEAAAB9fX329vYAAAAC4JSPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3' +
'n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNarfcrvcLDovH5LL5jE6r1+y2+w2Py+' +
'f0uv2OvwT2fP6iD7gAMEhICAeImIAYiFDoOPi22KcouZfw6BhZGUBZeYlp6LbJiTD6C' +
'Qqg6Vm6eQqqKtkZ24iaKtrKunpQa9tmmju7Wwu7KFtMi3oYDMzompkHHS09TV1tfY2d' +
'rb3N3e39DR4uPk5ebn6Onq6+zt7u/g4fLz9PX29/j5+vv8/f31QAADs=';
/**
* Basic check for browser support
* @type {boolean}
* @private
*/
var isSupported = typeof window.FileReader !== 'undefined';
var base64DataUri = /data:[^;]+;base64,/i;
function base64DataUriToBlob(url) {
// 5 is length of "data:" prefix
var mime = url.substr(5, url.indexOf(';') - 5);
var data = atob(url.substr(url.indexOf(',') + 1));
/* global Uint8Array */
var binary = new Uint8Array(data.length);
for (var i = 0; i < data.length; i++) {
binary[i] = data[i].charCodeAt(0);
}
try {
return new Blob([binary], { type: mime });
} catch (e) {
return null;
}
}
sceditor.plugins.dragdrop = function () {
if (!isSupported) {
return;
}
var base = this;
var opts;
var editor;
var handleFile;
var container;
var cover;
var placeholderId = 0;
function hideCover() {
cover.style.display = 'none';
container.className = container.className.replace(/(^| )dnd( |$)/g, '');
}
function showCover() {
if (cover.style.display === 'none') {
cover.style.display = 'block';
container.className += ' dnd';
}
}
function isAllowed(file) {
// FF sets type to application/x-moz-file until it has been dropped
if (file.type !== 'application/x-moz-file' && opts.allowedTypes &&
opts.allowedTypes.indexOf(file.type) < 0) {
return false;
}
return opts.isAllowed ? opts.isAllowed(file) : true;
};
function createHolder(toReplace) {
var placeholder = document.createElement('img');
placeholder.src = loadingGif;
placeholder.className = 'sceditor-ignore';
placeholder.id = 'sce-dragdrop-' + placeholderId++;
function replace(html) {
var node = editor
.getBody()
.ownerDocument
.getElementById(placeholder.id);
if (node) {
if (typeof html === 'string') {
node.insertAdjacentHTML('afterend', html);
}
node.parentNode.removeChild(node);
}
}
return function () {
if (toReplace) {
toReplace.parentNode.replaceChild(placeholder, toReplace);
} else {
editor.wysiwygEditorInsertHtml(placeholder.outerHTML);
}
return {
insert: function (html) {
replace(html);
},
cancel: replace
};
};
}
function handleDragOver(e) {
var dt = e.dataTransfer;
var files = dt.files.length || !dt.items ? dt.files : dt.items;
for (var i = 0; i < files.length; i++) {
// Dragging a string should be left to default
if (files[i].kind === 'string') {
return;
}
}
showCover();
e.preventDefault();
}
function handleDrop(e) {
var dt = e.dataTransfer;
var files = dt.files.length || !dt.items ? dt.files : dt.items;
hideCover();
for (var i = 0; i < files.length; i++) {
// Dragging a string should be left to default
if (files[i].kind === 'string') {
return;
}
if (isAllowed(files[i])) {
handleFile(files[i], createHolder());
}
}
e.preventDefault();
}
base.signalReady = function () {
editor = this;
opts = editor.opts.dragdrop || {};
handleFile = opts.handleFile;
container = editor.getContentAreaContainer().parentNode;
cover = container.appendChild(sceditor.dom.parseHTML(
'<div class="sceditor-dnd-cover" style="display: none">' +
'<p>' + editor._('Drop files here') + '</p>' +
'</div>'
).firstChild);
container.addEventListener('dragover', handleDragOver);
container.addEventListener('dragleave', hideCover);
container.addEventListener('dragend', hideCover);
container.addEventListener('drop', handleDrop);
editor.getBody().addEventListener('dragover', handleDragOver);
editor.getBody().addEventListener('drop', hideCover);
};
base.signalPasteHtml = function (paste) {
if (!('handlePaste' in opts) || opts.handlePaste) {
var div = document.createElement('div');
div.innerHTML = paste.val;
var images = div.querySelectorAll('img');
for (var i = 0; i < images.length; i++) {
var image = images[i];
if (base64DataUri.test(image.src)) {
var file = base64DataUriToBlob(image.src);
if (file && isAllowed(file)) {
handleFile(file, createHolder(image));
} else {
image.parentNode.removeChild(image);
}
}
}
paste.val = div.innerHTML;
}
};
};
})(sceditor);

View file

@ -0,0 +1,127 @@
/**
* SCEditor Paragraph Formatting Plugin
* http://www.sceditor.com/
*
* Copyright (C) 2011-2013, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @fileoverview SCEditor Paragraph Formatting Plugin
* @author Sam Clarke
*/
(function (sceditor) {
'use strict';
sceditor.plugins.format = function () {
var base = this;
/**
* Default tags
* @type {Object}
* @private
*/
var tags = {
p: 'Paragraph',
h1: 'Heading 1',
h2: 'Heading 2',
h3: 'Heading 3',
h4: 'Heading 4',
h5: 'Heading 5',
h6: 'Heading 6',
address: 'Address',
pre: 'Preformatted Text'
};
/**
* Private functions
* @private
*/
var insertTag,
formatCmd;
base.init = function () {
var opts = this.opts,
pOpts = opts.paragraphformat;
// Don't enable if the BBCode plugin is enabled.
if (opts.format && opts.format === 'bbcode') {
return;
}
if (pOpts) {
if (pOpts.tags) {
tags = pOpts.tags;
}
if (pOpts.excludeTags) {
pOpts.excludeTags.forEach(function (val) {
delete tags[val];
});
}
}
if (!this.commands.format) {
this.commands.format = {
exec: formatCmd,
txtExec: formatCmd,
tooltip: 'Format Paragraph'
};
}
if (opts.toolbar === sceditor.defaultOptions.toolbar) {
opts.toolbar = opts.toolbar.replace(',color,',
',color,format,');
}
};
/**
* Inserts the specified tag into the editor
*
* @param {sceditor} editor
* @param {string} tag
* @private
*/
insertTag = function (editor, tag) {
if (editor.sourceMode()) {
editor.insert('<' + tag + '>', '</' + tag + '>');
} else {
editor.execCommand('formatblock', '<' + tag + '>');
}
};
/**
* Function for the exec and txtExec properties
*
* @param {node} caller
* @private
*/
formatCmd = function (caller) {
var editor = this,
content = document.createElement('div');
sceditor.utils.each(tags, function (tag, val) {
var link = document.createElement('a');
link.className = 'sceditor-option';
link.textContent = val.name || val;
link.addEventListener('click', function (e) {
editor.closeDropDown(true);
if (val.exec) {
val.exec(editor);
} else {
insertTag(editor, tag);
}
e.preventDefault();
});
content.appendChild(link);
});
editor.createDropDown(caller, 'format', content);
};
};
})(sceditor);

View file

@ -0,0 +1,59 @@
/**
* SCEditor Plain Text Plugin
* http://www.sceditor.com/
*
* Copyright (C) 2016, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
(function (sceditor) {
'use strict';
var extend = sceditor.utils.extend;
/**
* Options:
*
* pastetext.addButton - If to replace the plaintext button with a toggle
* button that enables and disables plain text mode.
*
* pastetext.enabled - If the plain text button should be enabled at start
* up. Only applies if addButton is enabled.
*/
sceditor.plugins.plaintext = function () {
var plainTextEnabled = true;
this.init = function () {
var commands = this.commands;
var opts = this.opts;
if (opts && opts.plaintext && opts.plaintext.addButton) {
plainTextEnabled = opts.plaintext.enabled;
commands.pastetext = extend(commands.pastetext || {}, {
state: function () {
return plainTextEnabled ? 1 : 0;
},
exec: function () {
plainTextEnabled = !plainTextEnabled;
}
});
}
};
this.signalPasteRaw = function (data) {
if (plainTextEnabled) {
if (data.html && !data.text) {
var div = document.createElement('div');
div.innerHTML = data.html;
data.text = div.innerText;
}
data.html = null;
}
};
};
}(sceditor));

View file

@ -0,0 +1,21 @@
/**
* SCEditor Strict BBCode Plugin
* http://www.sceditor.com/
*
* Copyright (C) 2016, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
// (function (sceditor) {
// 'use strict';
// // var extend = sceditor.utils.extend;
// sceditor.plugins.strictbbcode = function () {
// // override bbcode plugin add and update default bbcodes to have attrs
// // and override their exec funcs
// };
// }(sceditor));

View file

@ -0,0 +1,187 @@
(function (sceditor) {
'use strict';
sceditor.plugins.undo = function () {
var base = this;
var editor;
var charChangedCount = 0;
var previousValue;
var undoLimit = 50;
var redoStates = [];
var undoStates = [];
var ignoreNextValueChanged = false;
/**
* Sets the editor to the specified state.
*
* @param {Object} state
* @private
*/
var applyState = function (state) {
ignoreNextValueChanged = true;
previousValue = state.value;
editor.sourceMode(state.sourceMode);
editor.val(state.value, false);
editor.focus();
if (state.sourceMode) {
editor.sourceEditorCaret(state.caret);
} else {
editor.getRangeHelper().restoreRange();
}
ignoreNextValueChanged = false;
};
/**
* Calculates the number of characters that have changed
* between two strings.
*
* @param {String} strA
* @param {String} strB
* @return {String}
* @private
*/
var simpleDiff = function (strA, strB) {
var start, end, aLenDiff, bLenDiff,
aLength = strA.length,
bLength = strB.length,
length = Math.max(aLength, bLength);
// Calculate the start
for (start = 0; start < length; start++) {
if (strA.charAt(start) !== strB.charAt(start)) {
break;
}
}
// Calculate the end
aLenDiff = aLength < bLength ? bLength - aLength : 0;
bLenDiff = bLength < aLength ? aLength - bLength : 0;
for (end = length - 1; end >= 0; end--) {
if (strA.charAt(end - aLenDiff) !==
strB.charAt(end - bLenDiff)) {
break;
}
}
return (end - start) + 1;
};
base.init = function () {
// The this variable will be set to the instance of the editor
// calling it, hence why the plugins "this" is saved to the base
// variable.
editor = this;
undoLimit = editor.undoLimit || undoLimit;
// addShortcut is the easiest way to add handlers to specific
// shortcuts
editor.addShortcut('ctrl+z', base.undo);
editor.addShortcut('ctrl+shift+z', base.redo);
editor.addShortcut('ctrl+y', base.redo);
};
base.undo = function () {
var state = undoStates.pop();
var rawEditorValue = editor.val(null, false);
if (state && !redoStates.length && rawEditorValue === state.value) {
state = undoStates.pop();
}
if (state) {
if (!redoStates.length) {
redoStates.push({
'caret': editor.sourceEditorCaret(),
'sourceMode': editor.sourceMode(),
'value': rawEditorValue
});
}
redoStates.push(state);
applyState(state);
}
return false;
};
base.redo = function () {
var state = redoStates.pop();
if (!undoStates.length) {
undoStates.push(state);
state = redoStates.pop();
}
if (state) {
undoStates.push(state);
applyState(state);
}
return false;
};
base.signalReady = function () {
var rawValue = editor.val(null, false);
// Store the initial value as the last value
previousValue = rawValue;
undoStates.push({
'caret': this.sourceEditorCaret(),
'sourceMode': this.sourceMode(),
'value': rawValue
});
};
/**
* Handle the valueChanged signal.
*
* e.rawValue will either be the raw HTML from the WYSIWYG editor with
* the rangeHelper range markers inserted, or it will be the raw value
* of the source editor (BBCode or HTML depending on plugins).
* @return {void}
*/
base.signalValuechangedEvent = function (e) {
var rawValue = e.detail.rawValue;
if (undoLimit > 0 && undoStates.length > undoLimit) {
undoStates.shift();
}
// If the editor hasn't fully loaded yet,
// then the previous value won't be set.
if (ignoreNextValueChanged || !previousValue ||
previousValue === rawValue) {
return;
}
// Value has changed so remove all redo states
redoStates.length = 0;
charChangedCount += simpleDiff(previousValue, rawValue);
if (charChangedCount < 20) {
return;
// ??
} else if (charChangedCount < 50 && !/\s$/g.test(e.rawValue)) {
return;
}
undoStates.push({
'caret': editor.sourceEditorCaret(),
'sourceMode': editor.sourceMode(),
'value': rawValue
});
charChangedCount = 0;
previousValue = rawValue;
};
};
}(sceditor));

View file

@ -0,0 +1,97 @@
/**
* Version 1 compatibility plugin
*
* Patches commands and BBCodes set with
* command.set and bbcode.set to wrap DOM
* node arguments in jQuery objects.
*
* Should only be used to ease migrating.
*/
(function (sceditor, $) {
'use strict';
var plugins = sceditor.plugins;
/**
* Patches a method to wrap and DOM nodes in a jQuery object
* @private
*/
function patchMethodArguments(fn) {
if (fn._scePatched) {
return fn;
}
var patch = function () {
var args = [];
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i];
if (arg && arg.nodeType) {
args.push($(arg));
} else {
args.push(arg);
}
}
return fn.apply(this, args);
};
patch._scePatched = true;
return patch;
}
/**
* Patches a method to wrap any return value in a jQuery object
* @private
*/
function patchMethodReturn(fn) {
if (fn._scePatched) {
return fn;
}
var patch = function () {
return $(fn.apply(this, arguments));
};
patch._scePatched = true;
return patch;
}
var oldSet = sceditor.command.set;
sceditor.command.set = function (name, cmd) {
if (cmd && typeof cmd.exec === 'function') {
cmd.exec = patchMethodArguments(cmd.exec);
}
if (cmd && typeof cmd.txtExec === 'function') {
cmd.txtExec = patchMethodArguments(cmd.txtExec);
}
return oldSet.call(this, name, cmd);
};
if (plugins.bbcode) {
var oldBBCodeSet = plugins.bbcode.bbcode.set;
plugins.bbcode.bbcode.set = function (name, bbcode) {
if (bbcode && typeof bbcode.format === 'function') {
bbcode.format = patchMethodArguments(bbcode.format);
}
return oldBBCodeSet.call(this, name, bbcode);
};
};
var oldCreate = sceditor.create;
sceditor.create = function (textarea, options) {
oldCreate.call(this, textarea, options);
if (textarea && textarea._sceditor) {
var editor = textarea._sceditor;
editor.getBody = patchMethodReturn(editor.getBody);
editor.getContentAreaContainer =
patchMethodReturn(editor.getContentAreaContainer);
}
};
}(sceditor, jQuery));

7571
public/assets/development/sceditor.js vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,85 @@
/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */
html, body, p, code:before, table {
margin: 0;
padding: 0;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #111;
line-height: 1.25;
overflow: visible;
}
html {
height: 100%;
}
.ios {
/* Needed for iOS scrolling bug fix */
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.ios body {
/* Needed for iOS scrolling bug fix */
position: relative;
overflow: auto;
}
body {
/* Needed to make sure body covers the whole editor and that
long lines don't cause horizontal scrolling */
min-height: 100%;
word-wrap: break-word;
}
body.placeholder::before {
content: attr(placeholder);
color: #555;
font-style: italic;
}
ul, ol {
margin-top: 0;
margin-bottom: 0;
padding-top: 0;
padding-bottom: 0;
}
table, td {
border: 1px dotted #000;
empty-cells: show;
}
table td {
min-width: 5px;
}
code {
display: block;
background: #f1f1f1;
white-space: pre;
padding: 1em;
text-align: left;
margin: .25em 0;
direction: ltr;
}
blockquote {
background: #fff7d9;
margin: .25em 0;
border-left: .3em solid #f4e59f;
padding: .5em .5em .5em .75em;
}
blockquote cite {
font-weight: bold;
display: block;
font-size: 1em;
margin: 0 -.5em .25em -.75em;
padding: 0 .5em .15em .75em;
border-bottom: 1px solid #f4e59f;
}
h1, h2, h3, h4, h5, h6 {
padding: 0; margin: 0;
}
/* Prevent empty paragraphs from collapsing */
div, p {
min-height: 1.25em;
}

View file

@ -0,0 +1,530 @@
/*! SCEditor | (C) 2011-2016, Sam Clarke | sceditor.com/license */
/**
* Default SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2011-16, Sam Clarke
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
div.sceditor-grip,
.sceditor-button div {
background-image: url("famfamfam.png");
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
.sceditor-button-youtube div {
background-position: 0px 0px;
}
.sceditor-button-link div {
background-position: 0px -16px;
}
.sceditor-button-unlink div {
background-position: 0px -32px;
}
.sceditor-button-underline div {
background-position: 0px -48px;
}
.sceditor-button-time div {
background-position: 0px -64px;
}
.sceditor-button-table div {
background-position: 0px -80px;
}
.sceditor-button-superscript div {
background-position: 0px -96px;
}
.sceditor-button-subscript div {
background-position: 0px -112px;
}
.sceditor-button-strike div {
background-position: 0px -128px;
}
.sceditor-button-source div {
background-position: 0px -144px;
}
.sceditor-button-size div {
background-position: 0px -160px;
}
.sceditor-button-rtl div {
background-position: 0px -176px;
}
.sceditor-button-right div {
background-position: 0px -192px;
}
.sceditor-button-removeformat div {
background-position: 0px -208px;
}
.sceditor-button-quote div {
background-position: 0px -224px;
}
.sceditor-button-print div {
background-position: 0px -240px;
}
.sceditor-button-pastetext div {
background-position: 0px -256px;
}
.sceditor-button-paste div {
background-position: 0px -272px;
}
.sceditor-button-outdent div {
background-position: 0px -288px;
}
.sceditor-button-orderedlist div {
background-position: 0px -304px;
}
.sceditor-button-maximize div {
background-position: 0px -320px;
}
.sceditor-button-ltr div {
background-position: 0px -336px;
}
.sceditor-button-left div {
background-position: 0px -352px;
}
.sceditor-button-justify div {
background-position: 0px -368px;
}
.sceditor-button-italic div {
background-position: 0px -384px;
}
.sceditor-button-indent div {
background-position: 0px -400px;
}
.sceditor-button-image div {
background-position: 0px -416px;
}
.sceditor-button-horizontalrule div {
background-position: 0px -432px;
}
.sceditor-button-format div {
background-position: 0px -448px;
}
.sceditor-button-font div {
background-position: 0px -464px;
}
.sceditor-button-emoticon div {
background-position: 0px -480px;
}
.sceditor-button-email div {
background-position: 0px -496px;
}
.sceditor-button-date div {
background-position: 0px -512px;
}
.sceditor-button-cut div {
background-position: 0px -528px;
}
.sceditor-button-copy div {
background-position: 0px -544px;
}
.sceditor-button-color div {
background-position: 0px -560px;
}
.sceditor-button-code div {
background-position: 0px -576px;
}
.sceditor-button-center div {
background-position: 0px -592px;
}
.sceditor-button-bulletlist div {
background-position: 0px -608px;
}
.sceditor-button-bold div {
background-position: 0px -624px;
}
div.sceditor-grip {
background-position: 0px -640px;
width: 10px;
height: 10px;
}
.rtl div.sceditor-grip {
background-position: 0px -650px;
}
/**
* SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
/*---------------------------------------------------
LESS Elements 0.7
---------------------------------------------------
A set of useful LESS mixins
More info at: http://lesselements.com
---------------------------------------------------*/
.sceditor-container {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
position: relative;
background: #fff;
border: 1px solid #d9d9d9;
font-size: 13px;
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
color: #333;
line-height: 1;
font-weight: bold;
height: 250px;
border-radius: 4px;
background-clip: padding-box;
}
.sceditor-container *,
.sceditor-container *:before,
.sceditor-container *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.sceditor-container,
.sceditor-container div,
div.sceditor-dropdown,
div.sceditor-dropdown div {
padding: 0;
margin: 0;
z-index: 3;
}
.sceditor-container iframe,
.sceditor-container textarea {
display: block;
-ms-flex: 1 1 0%;
flex: 1 1 0%;
line-height: 1.25;
border: 0;
outline: none;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #111;
padding: 0;
margin: 5px;
resize: none;
background: #fff;
height: auto !important;
width: auto !important;
width: calc(100% - 10px) !important;
min-height: 1px;
}
.sceditor-container textarea {
margin: 7px 5px;
}
div.sceditor-dnd-cover {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: rgba(255, 255, 255, 0.2);
border: 5px dashed #aaa;
z-index: 200;
font-size: 2em;
text-align: center;
color: #aaa;
}
div.sceditor-dnd-cover p {
position: relative;
top: 45%;
pointer-events: none;
}
div.sceditor-resize-cover {
position: absolute;
top: 0;
left: 0;
background: #000;
width: 100%;
height: 100%;
z-index: 10;
opacity: 0.3;
}
div.sceditor-grip {
overflow: hidden;
width: 10px;
height: 10px;
cursor: pointer;
position: absolute;
bottom: 0;
right: 0;
z-index: 3;
line-height: 0;
}
div.sceditor-grip.has-icon {
background-image: none;
}
.sceditor-maximize {
position: fixed;
top: 0;
left: 0;
height: 100% !important;
width: 100% !important;
border-radius: 0;
background-clip: padding-box;
z-index: 2000;
}
html.sceditor-maximize,
body.sceditor-maximize {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.sceditor-maximize div.sceditor-grip {
display: none;
}
.sceditor-maximize div.sceditor-toolbar {
border-radius: 0;
background-clip: padding-box;
}
/**
* Dropdown styleing
*/
div.sceditor-dropdown {
position: absolute;
border: 1px solid #ccc;
background: #fff;
z-index: 4000;
padding: 10px;
font-weight: normal;
font-size: 15px;
border-radius: 2px;
background-clip: padding-box;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2);
}
div.sceditor-dropdown *,
div.sceditor-dropdown *:before,
div.sceditor-dropdown *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div.sceditor-dropdown a,
div.sceditor-dropdown a:link {
color: #333;
}
div.sceditor-dropdown form {
margin: 0;
}
div.sceditor-dropdown label {
display: block;
font-weight: bold;
color: #3c3c3c;
padding: 4px 0;
}
div.sceditor-dropdown input,
div.sceditor-dropdown textarea {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
outline: 0;
padding: 4px;
border: 1px solid #ccc;
border-top-color: #888;
margin: 0 0 .75em;
border-radius: 1px;
background-clip: padding-box;
}
div.sceditor-dropdown textarea {
padding: 6px;
}
div.sceditor-dropdown input:focus,
div.sceditor-dropdown textarea:focus {
border-color: #aaa;
border-top-color: #666;
box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
}
div.sceditor-dropdown .button {
font-weight: bold;
color: #444;
padding: 6px 12px;
background: #ececec;
border: solid 1px #ccc;
border-radius: 2px;
background-clip: padding-box;
cursor: pointer;
margin: .3em 0 0;
}
div.sceditor-dropdown .button:hover {
background: #f3f3f3;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
div.sceditor-font-picker,
div.sceditor-fontsize-picker,
div.sceditor-format {
padding: 6px 0;
}
div.sceditor-color-picker {
padding: 4px;
}
div.sceditor-emoticons,
div.sceditor-more-emoticons {
padding: 0;
}
.sceditor-pastetext textarea {
border: 1px solid #bbb;
width: 20em;
}
.sceditor-emoticons img,
.sceditor-more-emoticons img {
padding: 0;
cursor: pointer;
margin: 2px;
}
.sceditor-more {
border-top: 1px solid #bbb;
display: block;
text-align: center;
cursor: pointer;
font-weight: bold;
padding: 6px 0;
}
.sceditor-dropdown a:hover {
background: #eee;
}
.sceditor-fontsize-option,
.sceditor-font-option,
.sceditor-format a {
display: block;
padding: 7px 10px;
cursor: pointer;
text-decoration: none;
color: #222;
}
.sceditor-fontsize-option {
padding: 7px 13px;
}
.sceditor-color-column {
float: left;
}
.sceditor-color-option {
display: block;
border: 2px solid #fff;
height: 18px;
width: 18px;
overflow: hidden;
}
.sceditor-color-option:hover {
border: 1px solid #aaa;
}
/**
* Toolbar styleing
*/
div.sceditor-toolbar {
flex-shrink: 0;
overflow: hidden;
padding: 3px 5px 2px;
background: #f7f7f7;
border-bottom: 1px solid #c0c0c0;
line-height: 0;
text-align: left;
user-select: none;
border-radius: 3px 3px 0 0;
background-clip: padding-box;
}
div.sceditor-group {
display: inline-block;
background: #ddd;
margin: 1px 5px 1px 0;
padding: 1px;
border-bottom: 1px solid #aaa;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button {
float: left;
cursor: pointer;
padding: 3px 5px;
width: 16px;
height: 20px;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2);
}
.sceditor-button:active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3);
}
.sceditor-button.disabled:hover {
background: inherit;
cursor: default;
box-shadow: none;
}
.sceditor-button,
.sceditor-button div {
display: block;
}
.sceditor-button svg {
display: inline-block;
height: 16px;
width: 16px;
margin: 2px 0;
fill: #111;
text-decoration: none;
pointer-events: none;
line-height: 1;
}
.sceditor-button.disabled svg {
fill: #888;
}
.sceditor-button div {
display: inline-block;
margin: 2px 0;
padding: 0;
overflow: hidden;
line-height: 0;
font-size: 0;
color: transparent;
}
.sceditor-button.has-icon div {
display: none;
}
.sceditor-button.disabled div {
opacity: 0.3;
}
.text .sceditor-button,
.text .sceditor-button div,
.sceditor-button.text,
.sceditor-button.text div,
.text-icon .sceditor-button,
.text-icon .sceditor-button div,
.sceditor-button.text-icon,
.sceditor-button.text-icon div {
display: inline-block;
width: auto;
line-height: 16px;
font-size: 1em;
color: inherit;
text-indent: 0;
}
.text-icon .sceditor-button.has-icon div,
.sceditor-button.has-icon div,
.text .sceditor-button div,
.sceditor-button.text div {
padding: 0 2px;
background: none;
}
.text .sceditor-button svg,
.sceditor-button.text svg {
display: none;
}
.text-icon .sceditor-button div,
.sceditor-button.text-icon div {
padding: 0 2px 0 20px;
}
.rtl div.sceditor-toolbar {
text-align: right;
}
.rtl .sceditor-button {
float: right;
}
.rtl div.sceditor-grip {
right: auto;
left: 0;
}

View file

@ -0,0 +1,548 @@
/*! SCEditor | (C) 2017, Sam Clarke | sceditor.com/license */
/**
* Default SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
div.sceditor-grip,
.sceditor-button div {
background-image: url("famfamfam.png");
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
.sceditor-button-youtube div {
background-position: 0px 0px;
}
.sceditor-button-link div {
background-position: 0px -16px;
}
.sceditor-button-unlink div {
background-position: 0px -32px;
}
.sceditor-button-underline div {
background-position: 0px -48px;
}
.sceditor-button-time div {
background-position: 0px -64px;
}
.sceditor-button-table div {
background-position: 0px -80px;
}
.sceditor-button-superscript div {
background-position: 0px -96px;
}
.sceditor-button-subscript div {
background-position: 0px -112px;
}
.sceditor-button-strike div {
background-position: 0px -128px;
}
.sceditor-button-source div {
background-position: 0px -144px;
}
.sceditor-button-size div {
background-position: 0px -160px;
}
.sceditor-button-rtl div {
background-position: 0px -176px;
}
.sceditor-button-right div {
background-position: 0px -192px;
}
.sceditor-button-removeformat div {
background-position: 0px -208px;
}
.sceditor-button-quote div {
background-position: 0px -224px;
}
.sceditor-button-print div {
background-position: 0px -240px;
}
.sceditor-button-pastetext div {
background-position: 0px -256px;
}
.sceditor-button-paste div {
background-position: 0px -272px;
}
.sceditor-button-outdent div {
background-position: 0px -288px;
}
.sceditor-button-orderedlist div {
background-position: 0px -304px;
}
.sceditor-button-maximize div {
background-position: 0px -320px;
}
.sceditor-button-ltr div {
background-position: 0px -336px;
}
.sceditor-button-left div {
background-position: 0px -352px;
}
.sceditor-button-justify div {
background-position: 0px -368px;
}
.sceditor-button-italic div {
background-position: 0px -384px;
}
.sceditor-button-indent div {
background-position: 0px -400px;
}
.sceditor-button-image div {
background-position: 0px -416px;
}
.sceditor-button-horizontalrule div {
background-position: 0px -432px;
}
.sceditor-button-format div {
background-position: 0px -448px;
}
.sceditor-button-font div {
background-position: 0px -464px;
}
.sceditor-button-emoticon div {
background-position: 0px -480px;
}
.sceditor-button-email div {
background-position: 0px -496px;
}
.sceditor-button-date div {
background-position: 0px -512px;
}
.sceditor-button-cut div {
background-position: 0px -528px;
}
.sceditor-button-copy div {
background-position: 0px -544px;
}
.sceditor-button-color div {
background-position: 0px -560px;
}
.sceditor-button-code div {
background-position: 0px -576px;
}
.sceditor-button-center div {
background-position: 0px -592px;
}
.sceditor-button-bulletlist div {
background-position: 0px -608px;
}
.sceditor-button-bold div {
background-position: 0px -624px;
}
div.sceditor-grip {
background-position: 0px -640px;
width: 10px;
height: 10px;
}
.rtl div.sceditor-grip {
background-position: 0px -650px;
}
/**
* SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
/*---------------------------------------------------
LESS Elements 0.7
---------------------------------------------------
A set of useful LESS mixins
More info at: http://lesselements.com
---------------------------------------------------*/
.sceditor-container {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
position: relative;
background: #fff;
border: 1px solid #d9d9d9;
font-size: 13px;
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
color: #333;
line-height: 1;
font-weight: bold;
height: 250px;
border-radius: 4px;
background-clip: padding-box;
}
.sceditor-container *,
.sceditor-container *:before,
.sceditor-container *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.sceditor-container,
.sceditor-container div,
div.sceditor-dropdown,
div.sceditor-dropdown div {
padding: 0;
margin: 0;
z-index: 3;
}
.sceditor-container iframe,
.sceditor-container textarea {
display: block;
-ms-flex: 1 1 0%;
flex: 1 1 0%;
line-height: 1.25;
border: 0;
outline: none;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #111;
padding: 0;
margin: 5px;
resize: none;
background: #fff;
height: auto !important;
width: auto !important;
width: calc(100% - 10px) !important;
min-height: 1px;
}
.sceditor-container textarea {
margin: 7px 5px;
}
div.sceditor-dnd-cover {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: rgba(255, 255, 255, 0.2);
border: 5px dashed #aaa;
z-index: 200;
font-size: 2em;
text-align: center;
color: #aaa;
}
div.sceditor-dnd-cover p {
position: relative;
top: 45%;
pointer-events: none;
}
div.sceditor-resize-cover {
position: absolute;
top: 0;
left: 0;
background: #000;
width: 100%;
height: 100%;
z-index: 10;
opacity: 0.3;
}
div.sceditor-grip {
overflow: hidden;
width: 10px;
height: 10px;
cursor: pointer;
position: absolute;
bottom: 0;
right: 0;
z-index: 3;
line-height: 0;
}
div.sceditor-grip.has-icon {
background-image: none;
}
.sceditor-maximize {
position: fixed;
top: 0;
left: 0;
height: 100% !important;
width: 100% !important;
border-radius: 0;
background-clip: padding-box;
z-index: 2000;
}
html.sceditor-maximize,
body.sceditor-maximize {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.sceditor-maximize div.sceditor-grip {
display: none;
}
.sceditor-maximize div.sceditor-toolbar {
border-radius: 0;
background-clip: padding-box;
}
/**
* Dropdown styleing
*/
div.sceditor-dropdown {
position: absolute;
border: 1px solid #ccc;
background: #fff;
z-index: 4000;
padding: 10px;
font-weight: normal;
font-size: 15px;
border-radius: 2px;
background-clip: padding-box;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2);
}
div.sceditor-dropdown *,
div.sceditor-dropdown *:before,
div.sceditor-dropdown *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div.sceditor-dropdown a,
div.sceditor-dropdown a:link {
color: #333;
}
div.sceditor-dropdown form {
margin: 0;
}
div.sceditor-dropdown label {
display: block;
font-weight: bold;
color: #3c3c3c;
padding: 4px 0;
}
div.sceditor-dropdown input,
div.sceditor-dropdown textarea {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
outline: 0;
padding: 4px;
border: 1px solid #ccc;
border-top-color: #888;
margin: 0 0 .75em;
border-radius: 1px;
background-clip: padding-box;
}
div.sceditor-dropdown textarea {
padding: 6px;
}
div.sceditor-dropdown input:focus,
div.sceditor-dropdown textarea:focus {
border-color: #aaa;
border-top-color: #666;
box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
}
div.sceditor-dropdown .button {
font-weight: bold;
color: #444;
padding: 6px 12px;
background: #ececec;
border: solid 1px #ccc;
border-radius: 2px;
background-clip: padding-box;
cursor: pointer;
margin: .3em 0 0;
}
div.sceditor-dropdown .button:hover {
background: #f3f3f3;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
div.sceditor-font-picker,
div.sceditor-fontsize-picker,
div.sceditor-format {
padding: 6px 0;
}
div.sceditor-color-picker {
padding: 4px;
}
div.sceditor-emoticons,
div.sceditor-more-emoticons {
padding: 0;
}
.sceditor-pastetext textarea {
border: 1px solid #bbb;
width: 20em;
}
.sceditor-emoticons img,
.sceditor-more-emoticons img {
padding: 0;
cursor: pointer;
margin: 2px;
}
.sceditor-more {
border-top: 1px solid #bbb;
display: block;
text-align: center;
cursor: pointer;
font-weight: bold;
padding: 6px 0;
}
.sceditor-dropdown a:hover {
background: #eee;
}
.sceditor-fontsize-option,
.sceditor-font-option,
.sceditor-format a {
display: block;
padding: 7px 10px;
cursor: pointer;
text-decoration: none;
color: #222;
}
.sceditor-fontsize-option {
padding: 7px 13px;
}
.sceditor-color-column {
float: left;
}
.sceditor-color-option {
display: block;
border: 2px solid #fff;
height: 18px;
width: 18px;
overflow: hidden;
}
.sceditor-color-option:hover {
border: 1px solid #aaa;
}
/**
* Toolbar styleing
*/
div.sceditor-toolbar {
flex-shrink: 0;
overflow: hidden;
padding: 3px 5px 2px;
background: #f7f7f7;
border-bottom: 1px solid #c0c0c0;
line-height: 0;
text-align: left;
user-select: none;
border-radius: 3px 3px 0 0;
background-clip: padding-box;
}
div.sceditor-group {
display: inline-block;
background: #ddd;
margin: 1px 5px 1px 0;
padding: 1px;
border-bottom: 1px solid #aaa;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button {
float: left;
cursor: pointer;
padding: 3px 5px;
width: 16px;
height: 20px;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2);
}
.sceditor-button:active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3);
}
.sceditor-button.disabled:hover {
background: inherit;
cursor: default;
box-shadow: none;
}
.sceditor-button,
.sceditor-button div {
display: block;
}
.sceditor-button svg {
display: inline-block;
height: 16px;
width: 16px;
margin: 2px 0;
fill: #111;
text-decoration: none;
pointer-events: none;
line-height: 1;
}
.sceditor-button.disabled svg {
fill: #888;
}
.sceditor-button div {
display: inline-block;
margin: 2px 0;
padding: 0;
overflow: hidden;
line-height: 0;
font-size: 0;
color: transparent;
}
.sceditor-button.has-icon div {
display: none;
}
.sceditor-button.disabled div {
opacity: 0.3;
}
.text .sceditor-button,
.text .sceditor-button div,
.sceditor-button.text,
.sceditor-button.text div,
.text-icon .sceditor-button,
.text-icon .sceditor-button div,
.sceditor-button.text-icon,
.sceditor-button.text-icon div {
display: inline-block;
width: auto;
line-height: 16px;
font-size: 1em;
color: inherit;
text-indent: 0;
}
.text-icon .sceditor-button.has-icon div,
.sceditor-button.has-icon div,
.text .sceditor-button div,
.sceditor-button.text div {
padding: 0 2px;
background: none;
}
.text .sceditor-button svg,
.sceditor-button.text svg {
display: none;
}
.text-icon .sceditor-button div,
.sceditor-button.text-icon div {
padding: 0 2px 0 20px;
}
.rtl div.sceditor-toolbar {
text-align: right;
}
.rtl .sceditor-button {
float: right;
}
.rtl div.sceditor-grip {
right: auto;
left: 0;
}
div.sceditor-toolbar {
background: #5d5d5d;
}
div.sceditor-group {
background: #303030;
border-bottom: 1px solid #000;
}
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active {
background: #6b6b6b;
}
.sceditor-button svg {
fill: #fff;
}
.sceditor-button.disabled svg {
fill: #777;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,604 @@
/**
* Modern theme
*
* Copyright (C) 2012, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/)
* Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/)
*/
/*! SCEditor | (C) 2011-2016, Sam Clarke | sceditor.com/license */
/**
* Default SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2011-16, Sam Clarke
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
div.sceditor-grip,
.sceditor-button div {
background-image: url("famfamfam.png");
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
.sceditor-button-youtube div {
background-position: 0px 0px;
}
.sceditor-button-link div {
background-position: 0px -16px;
}
.sceditor-button-unlink div {
background-position: 0px -32px;
}
.sceditor-button-underline div {
background-position: 0px -48px;
}
.sceditor-button-time div {
background-position: 0px -64px;
}
.sceditor-button-table div {
background-position: 0px -80px;
}
.sceditor-button-superscript div {
background-position: 0px -96px;
}
.sceditor-button-subscript div {
background-position: 0px -112px;
}
.sceditor-button-strike div {
background-position: 0px -128px;
}
.sceditor-button-source div {
background-position: 0px -144px;
}
.sceditor-button-size div {
background-position: 0px -160px;
}
.sceditor-button-rtl div {
background-position: 0px -176px;
}
.sceditor-button-right div {
background-position: 0px -192px;
}
.sceditor-button-removeformat div {
background-position: 0px -208px;
}
.sceditor-button-quote div {
background-position: 0px -224px;
}
.sceditor-button-print div {
background-position: 0px -240px;
}
.sceditor-button-pastetext div {
background-position: 0px -256px;
}
.sceditor-button-paste div {
background-position: 0px -272px;
}
.sceditor-button-outdent div {
background-position: 0px -288px;
}
.sceditor-button-orderedlist div {
background-position: 0px -304px;
}
.sceditor-button-maximize div {
background-position: 0px -320px;
}
.sceditor-button-ltr div {
background-position: 0px -336px;
}
.sceditor-button-left div {
background-position: 0px -352px;
}
.sceditor-button-justify div {
background-position: 0px -368px;
}
.sceditor-button-italic div {
background-position: 0px -384px;
}
.sceditor-button-indent div {
background-position: 0px -400px;
}
.sceditor-button-image div {
background-position: 0px -416px;
}
.sceditor-button-horizontalrule div {
background-position: 0px -432px;
}
.sceditor-button-format div {
background-position: 0px -448px;
}
.sceditor-button-font div {
background-position: 0px -464px;
}
.sceditor-button-emoticon div {
background-position: 0px -480px;
}
.sceditor-button-email div {
background-position: 0px -496px;
}
.sceditor-button-date div {
background-position: 0px -512px;
}
.sceditor-button-cut div {
background-position: 0px -528px;
}
.sceditor-button-copy div {
background-position: 0px -544px;
}
.sceditor-button-color div {
background-position: 0px -560px;
}
.sceditor-button-code div {
background-position: 0px -576px;
}
.sceditor-button-center div {
background-position: 0px -592px;
}
.sceditor-button-bulletlist div {
background-position: 0px -608px;
}
.sceditor-button-bold div {
background-position: 0px -624px;
}
div.sceditor-grip {
background-position: 0px -640px;
width: 10px;
height: 10px;
}
.rtl div.sceditor-grip {
background-position: 0px -650px;
}
/**
* SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
/*---------------------------------------------------
LESS Elements 0.7
---------------------------------------------------
A set of useful LESS mixins
More info at: http://lesselements.com
---------------------------------------------------*/
.sceditor-container {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
position: relative;
background: #fff;
border: 1px solid #d9d9d9;
font-size: 13px;
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
color: #333;
line-height: 1;
font-weight: bold;
height: 250px;
border-radius: 4px;
background-clip: padding-box;
}
.sceditor-container *,
.sceditor-container *:before,
.sceditor-container *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.sceditor-container,
.sceditor-container div,
div.sceditor-dropdown,
div.sceditor-dropdown div {
padding: 0;
margin: 0;
z-index: 3;
}
.sceditor-container iframe,
.sceditor-container textarea {
display: block;
-ms-flex: 1 1 0%;
flex: 1 1 0%;
line-height: 1.25;
border: 0;
outline: none;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #111;
padding: 0;
margin: 5px;
resize: none;
background: #fff;
height: auto !important;
width: auto !important;
width: calc(100% - 10px) !important;
min-height: 1px;
}
.sceditor-container textarea {
margin: 7px 5px;
}
div.sceditor-dnd-cover {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: rgba(255, 255, 255, 0.2);
border: 5px dashed #aaa;
z-index: 200;
font-size: 2em;
text-align: center;
color: #aaa;
}
div.sceditor-dnd-cover p {
position: relative;
top: 45%;
pointer-events: none;
}
div.sceditor-resize-cover {
position: absolute;
top: 0;
left: 0;
background: #000;
width: 100%;
height: 100%;
z-index: 10;
opacity: 0.3;
}
div.sceditor-grip {
overflow: hidden;
width: 10px;
height: 10px;
cursor: pointer;
position: absolute;
bottom: 0;
right: 0;
z-index: 3;
line-height: 0;
}
div.sceditor-grip.has-icon {
background-image: none;
}
.sceditor-maximize {
position: fixed;
top: 0;
left: 0;
height: 100% !important;
width: 100% !important;
border-radius: 0;
background-clip: padding-box;
z-index: 2000;
}
html.sceditor-maximize,
body.sceditor-maximize {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.sceditor-maximize div.sceditor-grip {
display: none;
}
.sceditor-maximize div.sceditor-toolbar {
border-radius: 0;
background-clip: padding-box;
}
/**
* Dropdown styleing
*/
div.sceditor-dropdown {
position: absolute;
border: 1px solid #ccc;
background: #fff;
z-index: 4000;
padding: 10px;
font-weight: normal;
font-size: 15px;
border-radius: 2px;
background-clip: padding-box;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2);
}
div.sceditor-dropdown *,
div.sceditor-dropdown *:before,
div.sceditor-dropdown *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div.sceditor-dropdown a,
div.sceditor-dropdown a:link {
color: #333;
}
div.sceditor-dropdown form {
margin: 0;
}
div.sceditor-dropdown label {
display: block;
font-weight: bold;
color: #3c3c3c;
padding: 4px 0;
}
div.sceditor-dropdown input,
div.sceditor-dropdown textarea {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
outline: 0;
padding: 4px;
border: 1px solid #ccc;
border-top-color: #888;
margin: 0 0 .75em;
border-radius: 1px;
background-clip: padding-box;
}
div.sceditor-dropdown textarea {
padding: 6px;
}
div.sceditor-dropdown input:focus,
div.sceditor-dropdown textarea:focus {
border-color: #aaa;
border-top-color: #666;
box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
}
div.sceditor-dropdown .button {
font-weight: bold;
color: #444;
padding: 6px 12px;
background: #ececec;
border: solid 1px #ccc;
border-radius: 2px;
background-clip: padding-box;
cursor: pointer;
margin: .3em 0 0;
}
div.sceditor-dropdown .button:hover {
background: #f3f3f3;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
div.sceditor-font-picker,
div.sceditor-fontsize-picker,
div.sceditor-format {
padding: 6px 0;
}
div.sceditor-color-picker {
padding: 4px;
}
div.sceditor-emoticons,
div.sceditor-more-emoticons {
padding: 0;
}
.sceditor-pastetext textarea {
border: 1px solid #bbb;
width: 20em;
}
.sceditor-emoticons img,
.sceditor-more-emoticons img {
padding: 0;
cursor: pointer;
margin: 2px;
}
.sceditor-more {
border-top: 1px solid #bbb;
display: block;
text-align: center;
cursor: pointer;
font-weight: bold;
padding: 6px 0;
}
.sceditor-dropdown a:hover {
background: #eee;
}
.sceditor-fontsize-option,
.sceditor-font-option,
.sceditor-format a {
display: block;
padding: 7px 10px;
cursor: pointer;
text-decoration: none;
color: #222;
}
.sceditor-fontsize-option {
padding: 7px 13px;
}
.sceditor-color-column {
float: left;
}
.sceditor-color-option {
display: block;
border: 2px solid #fff;
height: 18px;
width: 18px;
overflow: hidden;
}
.sceditor-color-option:hover {
border: 1px solid #aaa;
}
/**
* Toolbar styleing
*/
div.sceditor-toolbar {
flex-shrink: 0;
overflow: hidden;
padding: 3px 5px 2px;
background: #f7f7f7;
border-bottom: 1px solid #c0c0c0;
line-height: 0;
text-align: left;
user-select: none;
border-radius: 3px 3px 0 0;
background-clip: padding-box;
}
div.sceditor-group {
display: inline-block;
background: #ddd;
margin: 1px 5px 1px 0;
padding: 1px;
border-bottom: 1px solid #aaa;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button {
float: left;
cursor: pointer;
padding: 3px 5px;
width: 16px;
height: 20px;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2);
}
.sceditor-button:active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3);
}
.sceditor-button.disabled:hover {
background: inherit;
cursor: default;
box-shadow: none;
}
.sceditor-button,
.sceditor-button div {
display: block;
}
.sceditor-button svg {
display: inline-block;
height: 16px;
width: 16px;
margin: 2px 0;
fill: #111;
text-decoration: none;
pointer-events: none;
line-height: 1;
}
.sceditor-button.disabled svg {
fill: #888;
}
.sceditor-button div {
display: inline-block;
margin: 2px 0;
padding: 0;
overflow: hidden;
line-height: 0;
font-size: 0;
color: transparent;
}
.sceditor-button.has-icon div {
display: none;
}
.sceditor-button.disabled div {
opacity: 0.3;
}
.text .sceditor-button,
.text .sceditor-button div,
.sceditor-button.text,
.sceditor-button.text div,
.text-icon .sceditor-button,
.text-icon .sceditor-button div,
.sceditor-button.text-icon,
.sceditor-button.text-icon div {
display: inline-block;
width: auto;
line-height: 16px;
font-size: 1em;
color: inherit;
text-indent: 0;
}
.text-icon .sceditor-button.has-icon div,
.sceditor-button.has-icon div,
.text .sceditor-button div,
.sceditor-button.text div {
padding: 0 2px;
background: none;
}
.text .sceditor-button svg,
.sceditor-button.text svg {
display: none;
}
.text-icon .sceditor-button div,
.sceditor-button.text-icon div {
padding: 0 2px 0 20px;
}
.rtl div.sceditor-toolbar {
text-align: right;
}
.rtl .sceditor-button {
float: right;
}
.rtl div.sceditor-grip {
right: auto;
left: 0;
}
.sceditor-container {
border: 1px solid #999;
}
.sceditor-container textarea {
font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace;
background: #2e3436;
color: #fff;
margin: 0;
padding: 5px;
}
div.sceditor-toolbar {
background: #ccc;
background: linear-gradient(to bottom, #cccccc 0%, #b2b2b2 100%);
}
div.sceditor-group {
display: inline;
background: transparent;
margin: 0;
padding: 0;
border: 0;
}
.sceditor-button {
padding: 4px;
margin: 2px 1px 2px 3px;
height: 16px;
border-radius: 12px;
background-clip: padding-box;
}
.sceditor-button:hover,
.sceditor-button.active,
.sceditor-button.active:hover {
box-shadow: none;
}
.sceditor-button:hover {
background: #fff;
background: rgba(255, 255, 255, 0.75);
margin: 1px 0 1px 2px;
border: 1px solid #eee;
}
.sceditor-button.disabled:hover {
margin: 2px 1px 2px 3px;
border: 0;
}
.sceditor-button.active {
background: #b1b1b1;
background: rgba(0, 0, 0, 0.1);
margin: 1px 0 1px 2px;
border: 1px solid #999;
}
.sceditor-button.active:hover {
background: #fff;
background: rgba(255, 255, 255, 0.25);
}
.sceditor-button:active,
.sceditor-button.active:active {
margin: 1px 0 1px 2px;
border: 1px solid #999;
box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.5);
}
.sceditor-button div,
.sceditor-button svg {
margin: 0;
}

View file

@ -0,0 +1,596 @@
/**
* Copyright (C) 2012, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/)
* Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/)
*/
/*! SCEditor | (C) 2011-2016, Sam Clarke | sceditor.com/license */
/**
* Default SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2011-16, Sam Clarke
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
div.sceditor-grip,
.sceditor-button div {
background-image: url("famfamfam.png");
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
.sceditor-button-youtube div {
background-position: 0px 0px;
}
.sceditor-button-link div {
background-position: 0px -16px;
}
.sceditor-button-unlink div {
background-position: 0px -32px;
}
.sceditor-button-underline div {
background-position: 0px -48px;
}
.sceditor-button-time div {
background-position: 0px -64px;
}
.sceditor-button-table div {
background-position: 0px -80px;
}
.sceditor-button-superscript div {
background-position: 0px -96px;
}
.sceditor-button-subscript div {
background-position: 0px -112px;
}
.sceditor-button-strike div {
background-position: 0px -128px;
}
.sceditor-button-source div {
background-position: 0px -144px;
}
.sceditor-button-size div {
background-position: 0px -160px;
}
.sceditor-button-rtl div {
background-position: 0px -176px;
}
.sceditor-button-right div {
background-position: 0px -192px;
}
.sceditor-button-removeformat div {
background-position: 0px -208px;
}
.sceditor-button-quote div {
background-position: 0px -224px;
}
.sceditor-button-print div {
background-position: 0px -240px;
}
.sceditor-button-pastetext div {
background-position: 0px -256px;
}
.sceditor-button-paste div {
background-position: 0px -272px;
}
.sceditor-button-outdent div {
background-position: 0px -288px;
}
.sceditor-button-orderedlist div {
background-position: 0px -304px;
}
.sceditor-button-maximize div {
background-position: 0px -320px;
}
.sceditor-button-ltr div {
background-position: 0px -336px;
}
.sceditor-button-left div {
background-position: 0px -352px;
}
.sceditor-button-justify div {
background-position: 0px -368px;
}
.sceditor-button-italic div {
background-position: 0px -384px;
}
.sceditor-button-indent div {
background-position: 0px -400px;
}
.sceditor-button-image div {
background-position: 0px -416px;
}
.sceditor-button-horizontalrule div {
background-position: 0px -432px;
}
.sceditor-button-format div {
background-position: 0px -448px;
}
.sceditor-button-font div {
background-position: 0px -464px;
}
.sceditor-button-emoticon div {
background-position: 0px -480px;
}
.sceditor-button-email div {
background-position: 0px -496px;
}
.sceditor-button-date div {
background-position: 0px -512px;
}
.sceditor-button-cut div {
background-position: 0px -528px;
}
.sceditor-button-copy div {
background-position: 0px -544px;
}
.sceditor-button-color div {
background-position: 0px -560px;
}
.sceditor-button-code div {
background-position: 0px -576px;
}
.sceditor-button-center div {
background-position: 0px -592px;
}
.sceditor-button-bulletlist div {
background-position: 0px -608px;
}
.sceditor-button-bold div {
background-position: 0px -624px;
}
div.sceditor-grip {
background-position: 0px -640px;
width: 10px;
height: 10px;
}
.rtl div.sceditor-grip {
background-position: 0px -650px;
}
/**
* SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
/*---------------------------------------------------
LESS Elements 0.7
---------------------------------------------------
A set of useful LESS mixins
More info at: http://lesselements.com
---------------------------------------------------*/
.sceditor-container {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
position: relative;
background: #fff;
border: 1px solid #d9d9d9;
font-size: 13px;
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
color: #333;
line-height: 1;
font-weight: bold;
height: 250px;
border-radius: 4px;
background-clip: padding-box;
}
.sceditor-container *,
.sceditor-container *:before,
.sceditor-container *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.sceditor-container,
.sceditor-container div,
div.sceditor-dropdown,
div.sceditor-dropdown div {
padding: 0;
margin: 0;
z-index: 3;
}
.sceditor-container iframe,
.sceditor-container textarea {
display: block;
-ms-flex: 1 1 0%;
flex: 1 1 0%;
line-height: 1.25;
border: 0;
outline: none;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #111;
padding: 0;
margin: 5px;
resize: none;
background: #fff;
height: auto !important;
width: auto !important;
width: calc(100% - 10px) !important;
min-height: 1px;
}
.sceditor-container textarea {
margin: 7px 5px;
}
div.sceditor-dnd-cover {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: rgba(255, 255, 255, 0.2);
border: 5px dashed #aaa;
z-index: 200;
font-size: 2em;
text-align: center;
color: #aaa;
}
div.sceditor-dnd-cover p {
position: relative;
top: 45%;
pointer-events: none;
}
div.sceditor-resize-cover {
position: absolute;
top: 0;
left: 0;
background: #000;
width: 100%;
height: 100%;
z-index: 10;
opacity: 0.3;
}
div.sceditor-grip {
overflow: hidden;
width: 10px;
height: 10px;
cursor: pointer;
position: absolute;
bottom: 0;
right: 0;
z-index: 3;
line-height: 0;
}
div.sceditor-grip.has-icon {
background-image: none;
}
.sceditor-maximize {
position: fixed;
top: 0;
left: 0;
height: 100% !important;
width: 100% !important;
border-radius: 0;
background-clip: padding-box;
z-index: 2000;
}
html.sceditor-maximize,
body.sceditor-maximize {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.sceditor-maximize div.sceditor-grip {
display: none;
}
.sceditor-maximize div.sceditor-toolbar {
border-radius: 0;
background-clip: padding-box;
}
/**
* Dropdown styleing
*/
div.sceditor-dropdown {
position: absolute;
border: 1px solid #ccc;
background: #fff;
z-index: 4000;
padding: 10px;
font-weight: normal;
font-size: 15px;
border-radius: 2px;
background-clip: padding-box;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2);
}
div.sceditor-dropdown *,
div.sceditor-dropdown *:before,
div.sceditor-dropdown *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div.sceditor-dropdown a,
div.sceditor-dropdown a:link {
color: #333;
}
div.sceditor-dropdown form {
margin: 0;
}
div.sceditor-dropdown label {
display: block;
font-weight: bold;
color: #3c3c3c;
padding: 4px 0;
}
div.sceditor-dropdown input,
div.sceditor-dropdown textarea {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
outline: 0;
padding: 4px;
border: 1px solid #ccc;
border-top-color: #888;
margin: 0 0 .75em;
border-radius: 1px;
background-clip: padding-box;
}
div.sceditor-dropdown textarea {
padding: 6px;
}
div.sceditor-dropdown input:focus,
div.sceditor-dropdown textarea:focus {
border-color: #aaa;
border-top-color: #666;
box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
}
div.sceditor-dropdown .button {
font-weight: bold;
color: #444;
padding: 6px 12px;
background: #ececec;
border: solid 1px #ccc;
border-radius: 2px;
background-clip: padding-box;
cursor: pointer;
margin: .3em 0 0;
}
div.sceditor-dropdown .button:hover {
background: #f3f3f3;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
div.sceditor-font-picker,
div.sceditor-fontsize-picker,
div.sceditor-format {
padding: 6px 0;
}
div.sceditor-color-picker {
padding: 4px;
}
div.sceditor-emoticons,
div.sceditor-more-emoticons {
padding: 0;
}
.sceditor-pastetext textarea {
border: 1px solid #bbb;
width: 20em;
}
.sceditor-emoticons img,
.sceditor-more-emoticons img {
padding: 0;
cursor: pointer;
margin: 2px;
}
.sceditor-more {
border-top: 1px solid #bbb;
display: block;
text-align: center;
cursor: pointer;
font-weight: bold;
padding: 6px 0;
}
.sceditor-dropdown a:hover {
background: #eee;
}
.sceditor-fontsize-option,
.sceditor-font-option,
.sceditor-format a {
display: block;
padding: 7px 10px;
cursor: pointer;
text-decoration: none;
color: #222;
}
.sceditor-fontsize-option {
padding: 7px 13px;
}
.sceditor-color-column {
float: left;
}
.sceditor-color-option {
display: block;
border: 2px solid #fff;
height: 18px;
width: 18px;
overflow: hidden;
}
.sceditor-color-option:hover {
border: 1px solid #aaa;
}
/**
* Toolbar styleing
*/
div.sceditor-toolbar {
flex-shrink: 0;
overflow: hidden;
padding: 3px 5px 2px;
background: #f7f7f7;
border-bottom: 1px solid #c0c0c0;
line-height: 0;
text-align: left;
user-select: none;
border-radius: 3px 3px 0 0;
background-clip: padding-box;
}
div.sceditor-group {
display: inline-block;
background: #ddd;
margin: 1px 5px 1px 0;
padding: 1px;
border-bottom: 1px solid #aaa;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button {
float: left;
cursor: pointer;
padding: 3px 5px;
width: 16px;
height: 20px;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2);
}
.sceditor-button:active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3);
}
.sceditor-button.disabled:hover {
background: inherit;
cursor: default;
box-shadow: none;
}
.sceditor-button,
.sceditor-button div {
display: block;
}
.sceditor-button svg {
display: inline-block;
height: 16px;
width: 16px;
margin: 2px 0;
fill: #111;
text-decoration: none;
pointer-events: none;
line-height: 1;
}
.sceditor-button.disabled svg {
fill: #888;
}
.sceditor-button div {
display: inline-block;
margin: 2px 0;
padding: 0;
overflow: hidden;
line-height: 0;
font-size: 0;
color: transparent;
}
.sceditor-button.has-icon div {
display: none;
}
.sceditor-button.disabled div {
opacity: 0.3;
}
.text .sceditor-button,
.text .sceditor-button div,
.sceditor-button.text,
.sceditor-button.text div,
.text-icon .sceditor-button,
.text-icon .sceditor-button div,
.sceditor-button.text-icon,
.sceditor-button.text-icon div {
display: inline-block;
width: auto;
line-height: 16px;
font-size: 1em;
color: inherit;
text-indent: 0;
}
.text-icon .sceditor-button.has-icon div,
.sceditor-button.has-icon div,
.text .sceditor-button div,
.sceditor-button.text div {
padding: 0 2px;
background: none;
}
.text .sceditor-button svg,
.sceditor-button.text svg {
display: none;
}
.text-icon .sceditor-button div,
.sceditor-button.text-icon div {
padding: 0 2px 0 20px;
}
.rtl div.sceditor-toolbar {
text-align: right;
}
.rtl .sceditor-button {
float: right;
}
.rtl div.sceditor-grip {
right: auto;
left: 0;
}
.sceditor-container {
border: 1px solid #8db2e3;
}
.sceditor-container textarea {
font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace;
}
div.sceditor-toolbar {
border-bottom: 1px solid #95a9c3;
background: #dee8f5;
background: linear-gradient(to bottom, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%);
}
div.sceditor-group {
border: 1px solid #7596bf;
background: transparent;
padding: 0;
background: #cadcf0;
background: linear-gradient(to bottom, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%);
}
.sceditor-button {
height: 16px;
padding: 3px 4px;
border-radius: 0;
background-clip: padding-box;
box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea;
}
.sceditor-button:first-child {
border-radius: 4px 0 0 4px;
background-clip: padding-box;
}
.sceditor-button:last-child {
border-radius: 0 4px 4px 0;
background-clip: padding-box;
}
.sceditor-button div,
.sceditor-button svg {
margin: 0;
}
.sceditor-button.active {
background: #fbdbb5;
background: linear-gradient(to bottom, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%);
box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea;
}
.sceditor-button:hover {
background: #fef7d5;
background: linear-gradient(to bottom, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%);
box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc;
}
.sceditor-button:active {
background: #e7a66d;
background: linear-gradient(to bottom, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%);
box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33;
}
.sceditor-button.active:hover {
background: #dba368;
background: linear-gradient(to bottom, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%);
box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b;
}

View file

@ -0,0 +1,618 @@
/**
* Copyright (C) 2012, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/)
* Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/)
*/
/**
* Copyright (C) 2012, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/)
* Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/)
*/
/*! SCEditor | (C) 2011-2016, Sam Clarke | sceditor.com/license */
/**
* Default SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2011-16, Sam Clarke
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
div.sceditor-grip,
.sceditor-button div {
background-image: url("famfamfam.png");
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
.sceditor-button-youtube div {
background-position: 0px 0px;
}
.sceditor-button-link div {
background-position: 0px -16px;
}
.sceditor-button-unlink div {
background-position: 0px -32px;
}
.sceditor-button-underline div {
background-position: 0px -48px;
}
.sceditor-button-time div {
background-position: 0px -64px;
}
.sceditor-button-table div {
background-position: 0px -80px;
}
.sceditor-button-superscript div {
background-position: 0px -96px;
}
.sceditor-button-subscript div {
background-position: 0px -112px;
}
.sceditor-button-strike div {
background-position: 0px -128px;
}
.sceditor-button-source div {
background-position: 0px -144px;
}
.sceditor-button-size div {
background-position: 0px -160px;
}
.sceditor-button-rtl div {
background-position: 0px -176px;
}
.sceditor-button-right div {
background-position: 0px -192px;
}
.sceditor-button-removeformat div {
background-position: 0px -208px;
}
.sceditor-button-quote div {
background-position: 0px -224px;
}
.sceditor-button-print div {
background-position: 0px -240px;
}
.sceditor-button-pastetext div {
background-position: 0px -256px;
}
.sceditor-button-paste div {
background-position: 0px -272px;
}
.sceditor-button-outdent div {
background-position: 0px -288px;
}
.sceditor-button-orderedlist div {
background-position: 0px -304px;
}
.sceditor-button-maximize div {
background-position: 0px -320px;
}
.sceditor-button-ltr div {
background-position: 0px -336px;
}
.sceditor-button-left div {
background-position: 0px -352px;
}
.sceditor-button-justify div {
background-position: 0px -368px;
}
.sceditor-button-italic div {
background-position: 0px -384px;
}
.sceditor-button-indent div {
background-position: 0px -400px;
}
.sceditor-button-image div {
background-position: 0px -416px;
}
.sceditor-button-horizontalrule div {
background-position: 0px -432px;
}
.sceditor-button-format div {
background-position: 0px -448px;
}
.sceditor-button-font div {
background-position: 0px -464px;
}
.sceditor-button-emoticon div {
background-position: 0px -480px;
}
.sceditor-button-email div {
background-position: 0px -496px;
}
.sceditor-button-date div {
background-position: 0px -512px;
}
.sceditor-button-cut div {
background-position: 0px -528px;
}
.sceditor-button-copy div {
background-position: 0px -544px;
}
.sceditor-button-color div {
background-position: 0px -560px;
}
.sceditor-button-code div {
background-position: 0px -576px;
}
.sceditor-button-center div {
background-position: 0px -592px;
}
.sceditor-button-bulletlist div {
background-position: 0px -608px;
}
.sceditor-button-bold div {
background-position: 0px -624px;
}
div.sceditor-grip {
background-position: 0px -640px;
width: 10px;
height: 10px;
}
.rtl div.sceditor-grip {
background-position: 0px -650px;
}
/**
* SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
/*---------------------------------------------------
LESS Elements 0.7
---------------------------------------------------
A set of useful LESS mixins
More info at: http://lesselements.com
---------------------------------------------------*/
.sceditor-container {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
position: relative;
background: #fff;
border: 1px solid #d9d9d9;
font-size: 13px;
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
color: #333;
line-height: 1;
font-weight: bold;
height: 250px;
border-radius: 4px;
background-clip: padding-box;
}
.sceditor-container *,
.sceditor-container *:before,
.sceditor-container *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.sceditor-container,
.sceditor-container div,
div.sceditor-dropdown,
div.sceditor-dropdown div {
padding: 0;
margin: 0;
z-index: 3;
}
.sceditor-container iframe,
.sceditor-container textarea {
display: block;
-ms-flex: 1 1 0%;
flex: 1 1 0%;
line-height: 1.25;
border: 0;
outline: none;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #111;
padding: 0;
margin: 5px;
resize: none;
background: #fff;
height: auto !important;
width: auto !important;
width: calc(100% - 10px) !important;
min-height: 1px;
}
.sceditor-container textarea {
margin: 7px 5px;
}
div.sceditor-dnd-cover {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: rgba(255, 255, 255, 0.2);
border: 5px dashed #aaa;
z-index: 200;
font-size: 2em;
text-align: center;
color: #aaa;
}
div.sceditor-dnd-cover p {
position: relative;
top: 45%;
pointer-events: none;
}
div.sceditor-resize-cover {
position: absolute;
top: 0;
left: 0;
background: #000;
width: 100%;
height: 100%;
z-index: 10;
opacity: 0.3;
}
div.sceditor-grip {
overflow: hidden;
width: 10px;
height: 10px;
cursor: pointer;
position: absolute;
bottom: 0;
right: 0;
z-index: 3;
line-height: 0;
}
div.sceditor-grip.has-icon {
background-image: none;
}
.sceditor-maximize {
position: fixed;
top: 0;
left: 0;
height: 100% !important;
width: 100% !important;
border-radius: 0;
background-clip: padding-box;
z-index: 2000;
}
html.sceditor-maximize,
body.sceditor-maximize {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.sceditor-maximize div.sceditor-grip {
display: none;
}
.sceditor-maximize div.sceditor-toolbar {
border-radius: 0;
background-clip: padding-box;
}
/**
* Dropdown styleing
*/
div.sceditor-dropdown {
position: absolute;
border: 1px solid #ccc;
background: #fff;
z-index: 4000;
padding: 10px;
font-weight: normal;
font-size: 15px;
border-radius: 2px;
background-clip: padding-box;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2);
}
div.sceditor-dropdown *,
div.sceditor-dropdown *:before,
div.sceditor-dropdown *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div.sceditor-dropdown a,
div.sceditor-dropdown a:link {
color: #333;
}
div.sceditor-dropdown form {
margin: 0;
}
div.sceditor-dropdown label {
display: block;
font-weight: bold;
color: #3c3c3c;
padding: 4px 0;
}
div.sceditor-dropdown input,
div.sceditor-dropdown textarea {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
outline: 0;
padding: 4px;
border: 1px solid #ccc;
border-top-color: #888;
margin: 0 0 .75em;
border-radius: 1px;
background-clip: padding-box;
}
div.sceditor-dropdown textarea {
padding: 6px;
}
div.sceditor-dropdown input:focus,
div.sceditor-dropdown textarea:focus {
border-color: #aaa;
border-top-color: #666;
box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
}
div.sceditor-dropdown .button {
font-weight: bold;
color: #444;
padding: 6px 12px;
background: #ececec;
border: solid 1px #ccc;
border-radius: 2px;
background-clip: padding-box;
cursor: pointer;
margin: .3em 0 0;
}
div.sceditor-dropdown .button:hover {
background: #f3f3f3;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
div.sceditor-font-picker,
div.sceditor-fontsize-picker,
div.sceditor-format {
padding: 6px 0;
}
div.sceditor-color-picker {
padding: 4px;
}
div.sceditor-emoticons,
div.sceditor-more-emoticons {
padding: 0;
}
.sceditor-pastetext textarea {
border: 1px solid #bbb;
width: 20em;
}
.sceditor-emoticons img,
.sceditor-more-emoticons img {
padding: 0;
cursor: pointer;
margin: 2px;
}
.sceditor-more {
border-top: 1px solid #bbb;
display: block;
text-align: center;
cursor: pointer;
font-weight: bold;
padding: 6px 0;
}
.sceditor-dropdown a:hover {
background: #eee;
}
.sceditor-fontsize-option,
.sceditor-font-option,
.sceditor-format a {
display: block;
padding: 7px 10px;
cursor: pointer;
text-decoration: none;
color: #222;
}
.sceditor-fontsize-option {
padding: 7px 13px;
}
.sceditor-color-column {
float: left;
}
.sceditor-color-option {
display: block;
border: 2px solid #fff;
height: 18px;
width: 18px;
overflow: hidden;
}
.sceditor-color-option:hover {
border: 1px solid #aaa;
}
/**
* Toolbar styleing
*/
div.sceditor-toolbar {
flex-shrink: 0;
overflow: hidden;
padding: 3px 5px 2px;
background: #f7f7f7;
border-bottom: 1px solid #c0c0c0;
line-height: 0;
text-align: left;
user-select: none;
border-radius: 3px 3px 0 0;
background-clip: padding-box;
}
div.sceditor-group {
display: inline-block;
background: #ddd;
margin: 1px 5px 1px 0;
padding: 1px;
border-bottom: 1px solid #aaa;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button {
float: left;
cursor: pointer;
padding: 3px 5px;
width: 16px;
height: 20px;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2);
}
.sceditor-button:active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3);
}
.sceditor-button.disabled:hover {
background: inherit;
cursor: default;
box-shadow: none;
}
.sceditor-button,
.sceditor-button div {
display: block;
}
.sceditor-button svg {
display: inline-block;
height: 16px;
width: 16px;
margin: 2px 0;
fill: #111;
text-decoration: none;
pointer-events: none;
line-height: 1;
}
.sceditor-button.disabled svg {
fill: #888;
}
.sceditor-button div {
display: inline-block;
margin: 2px 0;
padding: 0;
overflow: hidden;
line-height: 0;
font-size: 0;
color: transparent;
}
.sceditor-button.has-icon div {
display: none;
}
.sceditor-button.disabled div {
opacity: 0.3;
}
.text .sceditor-button,
.text .sceditor-button div,
.sceditor-button.text,
.sceditor-button.text div,
.text-icon .sceditor-button,
.text-icon .sceditor-button div,
.sceditor-button.text-icon,
.sceditor-button.text-icon div {
display: inline-block;
width: auto;
line-height: 16px;
font-size: 1em;
color: inherit;
text-indent: 0;
}
.text-icon .sceditor-button.has-icon div,
.sceditor-button.has-icon div,
.text .sceditor-button div,
.sceditor-button.text div {
padding: 0 2px;
background: none;
}
.text .sceditor-button svg,
.sceditor-button.text svg {
display: none;
}
.text-icon .sceditor-button div,
.sceditor-button.text-icon div {
padding: 0 2px 0 20px;
}
.rtl div.sceditor-toolbar {
text-align: right;
}
.rtl .sceditor-button {
float: right;
}
.rtl div.sceditor-grip {
right: auto;
left: 0;
}
.sceditor-container {
border: 1px solid #8db2e3;
}
.sceditor-container textarea {
font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace;
}
div.sceditor-toolbar {
border-bottom: 1px solid #95a9c3;
background: #dee8f5;
background: linear-gradient(to bottom, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%);
}
div.sceditor-group {
border: 1px solid #7596bf;
background: transparent;
padding: 0;
background: #cadcf0;
background: linear-gradient(to bottom, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%);
}
.sceditor-button {
height: 16px;
padding: 3px 4px;
border-radius: 0;
background-clip: padding-box;
box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea;
}
.sceditor-button:first-child {
border-radius: 4px 0 0 4px;
background-clip: padding-box;
}
.sceditor-button:last-child {
border-radius: 0 4px 4px 0;
background-clip: padding-box;
}
.sceditor-button div,
.sceditor-button svg {
margin: 0;
}
.sceditor-button.active {
background: #fbdbb5;
background: linear-gradient(to bottom, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%);
box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea;
}
.sceditor-button:hover {
background: #fef7d5;
background: linear-gradient(to bottom, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%);
box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc;
}
.sceditor-button:active {
background: #e7a66d;
background: linear-gradient(to bottom, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%);
box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33;
}
.sceditor-button.active:hover {
background: #dba368;
background: linear-gradient(to bottom, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%);
box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b;
}
.sceditor-container {
background: #a3c2ea;
background: linear-gradient(to bottom, #a3c2ea 0%, #6d92c1 39%, #577fb3 64%, #6591cc 100%);
}
.sceditor-container iframe,
.sceditor-container textarea {
border: 1px solid #646464;
background: #fff;
margin: 7px 40px;
padding: 20px;
width: calc(100% - 120px) !important;
box-shadow: 1px 1px 5px #293a52;
}

View file

@ -0,0 +1,619 @@
/**
* Square theme
*
* This theme is best suited to short toolbars that
* don't span multiple lines.
*
* Copyright (C) 2012, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/)
* Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/)
*/
/*! SCEditor | (C) 2011-2016, Sam Clarke | sceditor.com/license */
/**
* Default SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2011-16, Sam Clarke
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
div.sceditor-grip,
.sceditor-button div {
background-image: url("famfamfam.png");
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
.sceditor-button-youtube div {
background-position: 0px 0px;
}
.sceditor-button-link div {
background-position: 0px -16px;
}
.sceditor-button-unlink div {
background-position: 0px -32px;
}
.sceditor-button-underline div {
background-position: 0px -48px;
}
.sceditor-button-time div {
background-position: 0px -64px;
}
.sceditor-button-table div {
background-position: 0px -80px;
}
.sceditor-button-superscript div {
background-position: 0px -96px;
}
.sceditor-button-subscript div {
background-position: 0px -112px;
}
.sceditor-button-strike div {
background-position: 0px -128px;
}
.sceditor-button-source div {
background-position: 0px -144px;
}
.sceditor-button-size div {
background-position: 0px -160px;
}
.sceditor-button-rtl div {
background-position: 0px -176px;
}
.sceditor-button-right div {
background-position: 0px -192px;
}
.sceditor-button-removeformat div {
background-position: 0px -208px;
}
.sceditor-button-quote div {
background-position: 0px -224px;
}
.sceditor-button-print div {
background-position: 0px -240px;
}
.sceditor-button-pastetext div {
background-position: 0px -256px;
}
.sceditor-button-paste div {
background-position: 0px -272px;
}
.sceditor-button-outdent div {
background-position: 0px -288px;
}
.sceditor-button-orderedlist div {
background-position: 0px -304px;
}
.sceditor-button-maximize div {
background-position: 0px -320px;
}
.sceditor-button-ltr div {
background-position: 0px -336px;
}
.sceditor-button-left div {
background-position: 0px -352px;
}
.sceditor-button-justify div {
background-position: 0px -368px;
}
.sceditor-button-italic div {
background-position: 0px -384px;
}
.sceditor-button-indent div {
background-position: 0px -400px;
}
.sceditor-button-image div {
background-position: 0px -416px;
}
.sceditor-button-horizontalrule div {
background-position: 0px -432px;
}
.sceditor-button-format div {
background-position: 0px -448px;
}
.sceditor-button-font div {
background-position: 0px -464px;
}
.sceditor-button-emoticon div {
background-position: 0px -480px;
}
.sceditor-button-email div {
background-position: 0px -496px;
}
.sceditor-button-date div {
background-position: 0px -512px;
}
.sceditor-button-cut div {
background-position: 0px -528px;
}
.sceditor-button-copy div {
background-position: 0px -544px;
}
.sceditor-button-color div {
background-position: 0px -560px;
}
.sceditor-button-code div {
background-position: 0px -576px;
}
.sceditor-button-center div {
background-position: 0px -592px;
}
.sceditor-button-bulletlist div {
background-position: 0px -608px;
}
.sceditor-button-bold div {
background-position: 0px -624px;
}
div.sceditor-grip {
background-position: 0px -640px;
width: 10px;
height: 10px;
}
.rtl div.sceditor-grip {
background-position: 0px -650px;
}
/**
* SCEditor
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
/*---------------------------------------------------
LESS Elements 0.7
---------------------------------------------------
A set of useful LESS mixins
More info at: http://lesselements.com
---------------------------------------------------*/
.sceditor-container {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
position: relative;
background: #fff;
border: 1px solid #d9d9d9;
font-size: 13px;
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
color: #333;
line-height: 1;
font-weight: bold;
height: 250px;
border-radius: 4px;
background-clip: padding-box;
}
.sceditor-container *,
.sceditor-container *:before,
.sceditor-container *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.sceditor-container,
.sceditor-container div,
div.sceditor-dropdown,
div.sceditor-dropdown div {
padding: 0;
margin: 0;
z-index: 3;
}
.sceditor-container iframe,
.sceditor-container textarea {
display: block;
-ms-flex: 1 1 0%;
flex: 1 1 0%;
line-height: 1.25;
border: 0;
outline: none;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #111;
padding: 0;
margin: 5px;
resize: none;
background: #fff;
height: auto !important;
width: auto !important;
width: calc(100% - 10px) !important;
min-height: 1px;
}
.sceditor-container textarea {
margin: 7px 5px;
}
div.sceditor-dnd-cover {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: rgba(255, 255, 255, 0.2);
border: 5px dashed #aaa;
z-index: 200;
font-size: 2em;
text-align: center;
color: #aaa;
}
div.sceditor-dnd-cover p {
position: relative;
top: 45%;
pointer-events: none;
}
div.sceditor-resize-cover {
position: absolute;
top: 0;
left: 0;
background: #000;
width: 100%;
height: 100%;
z-index: 10;
opacity: 0.3;
}
div.sceditor-grip {
overflow: hidden;
width: 10px;
height: 10px;
cursor: pointer;
position: absolute;
bottom: 0;
right: 0;
z-index: 3;
line-height: 0;
}
div.sceditor-grip.has-icon {
background-image: none;
}
.sceditor-maximize {
position: fixed;
top: 0;
left: 0;
height: 100% !important;
width: 100% !important;
border-radius: 0;
background-clip: padding-box;
z-index: 2000;
}
html.sceditor-maximize,
body.sceditor-maximize {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.sceditor-maximize div.sceditor-grip {
display: none;
}
.sceditor-maximize div.sceditor-toolbar {
border-radius: 0;
background-clip: padding-box;
}
/**
* Dropdown styleing
*/
div.sceditor-dropdown {
position: absolute;
border: 1px solid #ccc;
background: #fff;
z-index: 4000;
padding: 10px;
font-weight: normal;
font-size: 15px;
border-radius: 2px;
background-clip: padding-box;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2);
}
div.sceditor-dropdown *,
div.sceditor-dropdown *:before,
div.sceditor-dropdown *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div.sceditor-dropdown a,
div.sceditor-dropdown a:link {
color: #333;
}
div.sceditor-dropdown form {
margin: 0;
}
div.sceditor-dropdown label {
display: block;
font-weight: bold;
color: #3c3c3c;
padding: 4px 0;
}
div.sceditor-dropdown input,
div.sceditor-dropdown textarea {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
outline: 0;
padding: 4px;
border: 1px solid #ccc;
border-top-color: #888;
margin: 0 0 .75em;
border-radius: 1px;
background-clip: padding-box;
}
div.sceditor-dropdown textarea {
padding: 6px;
}
div.sceditor-dropdown input:focus,
div.sceditor-dropdown textarea:focus {
border-color: #aaa;
border-top-color: #666;
box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
}
div.sceditor-dropdown .button {
font-weight: bold;
color: #444;
padding: 6px 12px;
background: #ececec;
border: solid 1px #ccc;
border-radius: 2px;
background-clip: padding-box;
cursor: pointer;
margin: .3em 0 0;
}
div.sceditor-dropdown .button:hover {
background: #f3f3f3;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
div.sceditor-font-picker,
div.sceditor-fontsize-picker,
div.sceditor-format {
padding: 6px 0;
}
div.sceditor-color-picker {
padding: 4px;
}
div.sceditor-emoticons,
div.sceditor-more-emoticons {
padding: 0;
}
.sceditor-pastetext textarea {
border: 1px solid #bbb;
width: 20em;
}
.sceditor-emoticons img,
.sceditor-more-emoticons img {
padding: 0;
cursor: pointer;
margin: 2px;
}
.sceditor-more {
border-top: 1px solid #bbb;
display: block;
text-align: center;
cursor: pointer;
font-weight: bold;
padding: 6px 0;
}
.sceditor-dropdown a:hover {
background: #eee;
}
.sceditor-fontsize-option,
.sceditor-font-option,
.sceditor-format a {
display: block;
padding: 7px 10px;
cursor: pointer;
text-decoration: none;
color: #222;
}
.sceditor-fontsize-option {
padding: 7px 13px;
}
.sceditor-color-column {
float: left;
}
.sceditor-color-option {
display: block;
border: 2px solid #fff;
height: 18px;
width: 18px;
overflow: hidden;
}
.sceditor-color-option:hover {
border: 1px solid #aaa;
}
/**
* Toolbar styleing
*/
div.sceditor-toolbar {
flex-shrink: 0;
overflow: hidden;
padding: 3px 5px 2px;
background: #f7f7f7;
border-bottom: 1px solid #c0c0c0;
line-height: 0;
text-align: left;
user-select: none;
border-radius: 3px 3px 0 0;
background-clip: padding-box;
}
div.sceditor-group {
display: inline-block;
background: #ddd;
margin: 1px 5px 1px 0;
padding: 1px;
border-bottom: 1px solid #aaa;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button {
float: left;
cursor: pointer;
padding: 3px 5px;
width: 16px;
height: 20px;
border-radius: 3px;
background-clip: padding-box;
}
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2);
}
.sceditor-button:active {
background: #fff;
box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3);
}
.sceditor-button.disabled:hover {
background: inherit;
cursor: default;
box-shadow: none;
}
.sceditor-button,
.sceditor-button div {
display: block;
}
.sceditor-button svg {
display: inline-block;
height: 16px;
width: 16px;
margin: 2px 0;
fill: #111;
text-decoration: none;
pointer-events: none;
line-height: 1;
}
.sceditor-button.disabled svg {
fill: #888;
}
.sceditor-button div {
display: inline-block;
margin: 2px 0;
padding: 0;
overflow: hidden;
line-height: 0;
font-size: 0;
color: transparent;
}
.sceditor-button.has-icon div {
display: none;
}
.sceditor-button.disabled div {
opacity: 0.3;
}
.text .sceditor-button,
.text .sceditor-button div,
.sceditor-button.text,
.sceditor-button.text div,
.text-icon .sceditor-button,
.text-icon .sceditor-button div,
.sceditor-button.text-icon,
.sceditor-button.text-icon div {
display: inline-block;
width: auto;
line-height: 16px;
font-size: 1em;
color: inherit;
text-indent: 0;
}
.text-icon .sceditor-button.has-icon div,
.sceditor-button.has-icon div,
.text .sceditor-button div,
.sceditor-button.text div {
padding: 0 2px;
background: none;
}
.text .sceditor-button svg,
.sceditor-button.text svg {
display: none;
}
.text-icon .sceditor-button div,
.sceditor-button.text-icon div {
padding: 0 2px 0 20px;
}
.rtl div.sceditor-toolbar {
text-align: right;
}
.rtl .sceditor-button {
float: right;
}
.rtl div.sceditor-grip {
right: auto;
left: 0;
}
.sceditor-container {
border: 1px solid #d6d6d6;
border-radius: 0;
background-clip: padding-box;
}
.sceditor-container textarea {
font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace;
background: #2e3436;
color: #fff;
margin: 0;
padding: 5px;
}
div.sceditor-toolbar,
div.sceditor-group {
background: #f2f2f2;
background: linear-gradient(to bottom, #f2f2f2 0%, #dddddd 89%);
}
div.sceditor-toolbar {
padding: 0;
border-bottom: 1px solid #bbb;
background-size: 100% 32px;
}
div.sceditor-group {
margin: 0;
padding: 2px 4px;
border: 0;
border-right: 1px solid #ccc;
border-left: 1px solid #eaeaea;
border-radius: 0;
background-clip: padding-box;
}
div.sceditor-group:last-child {
border-right: 0;
}
div.sceditor-group:first-child {
border-left: 0;
}
.sceditor-button {
height: 16px;
padding: 5px;
margin: 1px;
border-radius: 0;
background-clip: padding-box;
}
.sceditor-button div,
.sceditor-button svg {
margin: 0;
}
.sceditor-button.active,
.sceditor-button:hover,
.sceditor-button:active,
.sceditor-button.active:hover {
margin: 0;
box-shadow: none;
}
.sceditor-button.active {
background: #f4f4f4;
border: 1px solid #ccc;
}
.sceditor-button:hover {
background: #fefefe;
border: 1px solid #ddd;
}
.sceditor-button.disabled:hover {
margin: 1px;
border: 0;
}
.sceditor-button:active {
background: #eee;
border: 1px solid #ccc;
}
.sceditor-button.active:hover {
background: #f8f8f8;
border: 1px solid #ddd;
}

Binary file not shown.

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 B

View file

@ -0,0 +1,9 @@
Presenting, Nomicons: The Full Monty :o
Credits:
Oscar Gruno, aka Nominell v. 2.0 -> oscargruno@mac.com
Andy Fedosjeenko, aka Nightwolf -> bobo@animevanguard.com
Copyright (C) 2001-Infinity, Oscar Gruno & Andy Fedosjeenko
You can redistribute these files as much as you like, as long as you keep this file with them and give us the proper credit. You may even rape them if you please, just give us credit for our work.

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,012 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Some files were not shown because too many files have changed in this diff Show more