map legend dialog

This commit is contained in:
exodus4d
2014-12-23 07:37:09 +01:00
parent 8ba0a75cce
commit cfa3cfa324
36 changed files with 2538 additions and 303 deletions

View File

@@ -3,17 +3,24 @@
<words>
<w>addclass</w>
<w>bootbox</w>
<w>contextmenu</w>
<w>cytaclysmic</w>
<w>dashstyle</w>
<w>datatables</w>
<w>deps</w>
<w>fontawesome</w>
<w>jqueryui</w>
<w>killboard</w>
<w>killmail</w>
<w>mouseover</w>
<w>nonblock</w>
<w>pnotify</w>
<w>scrollbar</w>
<w>scrollbars</w>
<w>scrollspy</w>
<w>slidebar</w>
<w>slidebars</w>
<w>stargate</w>
<w>tbody</w>
<w>textarea</w>
</words>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JSHintConfiguration" version="2.3.0" use-config-file="false">
<component name="JSHintConfiguration" version="2.5.10" use-config-file="false">
<option bitwise="true" />
<option camelcase="false" />
<option curly="true" />
@@ -48,9 +48,9 @@
<option couch="false" />
<option devel="false" />
<option dojo="false" />
<option jquery="false" />
<option jquery="true" />
<option mootools="false" />
<option node="false" />
<option node="true" />
<option nonstandard="false" />
<option phantom="false" />
<option prototypejs="false" />

View File

@@ -9,7 +9,7 @@
<meta name="keywords" content="eve,wormhole,mapping,tool,mmo,space,game,igb">
<meta name="author" content="Exodus 4D">
<title>Pathfinder - mapping tool</title>
<title>Pathfinder - Mapping Tool</title>
<link rel="stylesheet" type="text/css" media="screen" href="css/pathfinder.css">
</head>

View File

@@ -3,30 +3,33 @@ requirejs.config({
baseUrl: 'js', // user build_js files, change to "js" for un-compressed source
paths: {
layout: 'layout',
jquery: 'lib/jquery-1.11.1.min',
//jquery: "lib/jquery-2.1.1.min",
//jqueryUI: "lib/jquery-ui.min",
jqueryUI: 'lib/jquery-ui-custom.min', // custom script (without tooltip -> conflict with bootstrap)
bootstrap: 'lib/bootstrap.min', // Bootstrap js code - http://getbootstrap.com/javascript/
text: 'lib/requirejs/text', // A RequireJS/AMD loader plugin for loading text resources.
jquery: 'lib/jquery-1.11.1.min', // v1.11.1 jQuery
//jquery: "lib/jquery-2.1.1.min", // v2.1.1 jQuery
//jqueryUI: "lib/jquery-ui.min", // v1.11.2 jQuery UI default
jqueryUI: 'lib/jquery-ui-custom.min', // v1.11.2 custom script (without tooltip -> conflict with bootstrap)
bootstrap: 'lib/bootstrap.min', // v3.3.0 Bootstrap js code - http://getbootstrap.com/javascript/
text: 'lib/requirejs/text', // v2.0.12 A RequireJS/AMD loader plugin for loading text resources.
templates: '../templates', // template dir
slidebars: 'lib/slidebars', // Slidebars - side menu plugin http://plugins.adchsm.me/slidebars/
jsPlumb: 'lib/jsPlumb-1.6.4-min', // jsPlumb - main map draw plugin http://www.jsplumb.org/
customScrollbar: 'lib/jquery.mCustomScrollbar.concat.min', // Custom scroll bars - http://manos.malihu.gr/
datatables: 'lib/jquery.dataTables.min', // DataTables - tables
slidebars: 'lib/slidebars', // v0.10 Slidebars - side menu plugin http://plugins.adchsm.me/slidebars/
jsPlumb: 'lib/jsPlumb-1.6.4-min', // v1.4.6 jsPlumb - main map draw plugin http://www.jsplumb.org/
customScrollbar: 'lib/jquery.mCustomScrollbar.concat.min', // v3.1.11 Custom scroll bars - http://manos.malihu.gr/
datatables: 'lib/jquery.dataTables.min', // v1.10.3 DataTables - tables
datatablesBootstrap: 'lib/dataTables.bootstrap', // DataTables - not used (bootstrap style)
xEditable: 'lib/bootstrap-editable.min', // X-editable - in placed editing
morris: 'lib/morris.min', // Morris.js - graphs and charts
raphael: 'lib/raphael-min', // Raphaël - required for morris (dependency)
bootbox: 'lib/bootbox.min', // Bootbox.js - custom dialogs
xEditable: 'lib/bootstrap-editable.min', // v1.5.1 X-editable - in placed editing
morris: 'lib/morris.min', // v0.5.0 Morris.js - graphs and charts
raphael: 'lib/raphael-min', // v2.1.2 Raphaël - required for morris (dependency)
bootbox: 'lib/bootbox.min', // v4.3.0 Bootbox.js - custom dialogs
easyPieChart: 'lib/jquery.easypiechart.min', // v2.1.6 Easy Pie Chart - HTML 5 pie charts - http://rendro.github.io/easy-pie-chart/
dragToSelect: 'lib/jquery.dragToSelect', // v1.1 Drag to Select - http://andreaslagerkvist.com/jquery/drag-to-select/
hoverIntent: 'lib/jquery.hoverIntent.minified', // v1.8.0 Hover intention - http://cherne.net/brian/resources/jquery.hoverIntent.html
pnotify: 'lib/pnotify/pnotify.core', // PNotify - notification core file
pnotify: 'lib/pnotify/pnotify.core', // v2.0.1 PNotify - notification core file
//'pnotify.buttons': 'lib/pnotify/pnotify.buttons', // PNotify - buttons notification extension
//'pnotify.confirm': 'lib/pnotify/pnotify.confirm', // PNotify - confirmation notification extension
'pnotify.nonblock': 'lib/pnotify/pnotify.nonblock', // PNotify - notification non-block extension (hover effect)
'pnotify.desktop': 'lib/pnotify/pnotify.desktop', // PNotify - desktop push notification extension
//'pnotify.history': 'lib/pnotify/pnotify.history', // PNotify - history push notification history extension
'pnotify.callbacks': 'lib/pnotify/pnotify.callbacks' // PNotify - callbacks push notification extension
'pnotify.callbacks': 'lib/pnotify/pnotify.callbacks' // PNotify - callbacks push notification extension
// 'pnotify.reference': 'lib/pnotify/pnotify.reference' // PNotify - reference push notification extension
},
@@ -63,6 +66,15 @@ requirejs.config({
},
pnotify: {
deps : ['jquery']
},
easyPieChart: {
deps : ['jquery']
},
dragToSelect: {
deps : ['jquery']
},
hoverIntent: {
deps : ['jquery']
}
}
});

View File

@@ -7,9 +7,12 @@ define(['jquery'], function($) {
'use strict';
var Config = {
url:{
zKillboard: 'https://zkillboard.com/api/',
eveCentral: 'http://api.eve-central.com/api/'
timer: {
mainPing: 3000 // main server ping
},
url: {
zKillboard: 'https://zkillboard.com/api/', // killboard api
eveCentral: 'http://api.eve-central.com/api/' // jump rout api
},
classes: {
// system effects
@@ -139,8 +142,19 @@ define(['jquery'], function($) {
class: 'pf-system-status-unscanned',
label: 'unscanned'
}
},
// system info
systemInfo: {
rally: {
class: 'pf-system-info-rally',
label: 'rally point'
}
},
// easy-pie-charts
pieChart: {
class: 'pf-pie-chart', // class for all pie charts
pieChartMapCounterClass: 'pf-pie-chart-map-timer' // class for timer chart
}
},
// system effects
systemEffects:{

View File

@@ -4,12 +4,12 @@
define([
'jquery',
'app/init',
'app/render',
'app/ccp',
'app/page',
'slidebars',
'app/module_map'
], function($, Render, CCP) {
'app/module_map',
], function($, Init, Render, CCP) {
'use strict';
@@ -28,8 +28,8 @@ define([
var mapData =[{
map: {},
config: {
name: 'Polaris',
id: 1,
name: 'Polaris',
scope: 'wormhole',
icon: 'fa-globe',
type: 'alliance' // global, alliance, private
@@ -43,8 +43,10 @@ define([
type: 'wh',
security: 'C6',
status: 'friendly',
locked: '1',
rally: '0',
position: {
x: 0,
x: 8,
y: 0
}
},{
@@ -55,7 +57,7 @@ define([
security: 'C6',
status: 'empty',
position: {
x: 60,
x: 65,
y: 60
}
},{
@@ -65,8 +67,10 @@ define([
type: 'wh',
security: 'C6',
status: '',
locked: '1',
rally: '1',
position: {
x: 200,
x: 203,
y: 60
}
},{
@@ -98,7 +102,7 @@ define([
type: 'k-space',
status: '',
position: {
x: 300,
x: 301,
y: 250
}
},{
@@ -142,8 +146,6 @@ define([
}
]
}
},
{
map: {},
@@ -242,7 +244,7 @@ define([
ship: 'Proteus',
status: 'corp'
},{
name: 'Xtrah gfdfgdfgfd',
name: 'Xtrah',
ship: 'Pod',
status: 'ally'
}
@@ -264,9 +266,15 @@ define([
console.log('update map done');
}, 500);
// server ping
var triggerMainPing = function(){
var mapData = $('#' + config.mapModuleId).getMapModuleData();
// console.log(mapData);
};
setInterval(triggerMainPing, Init.timer.mainPing);
});
});

File diff suppressed because it is too large Load Diff

View File

@@ -223,7 +223,7 @@ define([
// collect all relevant data for SystemInfoElement
var systemInfoData = {
systemId: parseInt( $( mapData.system).attr('data-id') ),
systemId: parseInt( $( mapData.system).data('id') ),
mapId: parseInt( $( mapData.system).attr('data-mapid') )
};
@@ -1841,7 +1841,7 @@ define([
// get map Data
$.each(mapElements, function(i, mapElement){
var mapId = parseInt( $(mapElement).attr('data-mapid') );
var mapId = parseInt( $(mapElement).data('id') );
var mapUserData = null;
// get user data for each active map
@@ -1953,10 +1953,6 @@ define([
$(scrollableElement).mCustomScrollbar( 'disable' );
});
}
}
};
@@ -2000,6 +1996,28 @@ define([
};
/**
* collect all data for export/save from each active map in the map module
* @returns {Array}
*/
$.fn.getMapModuleData = function(){
// get all active map elements for module
var mapElements = $(this).getMaps();
var data = [];
for(var i = 0; i < mapElements.length; i++){
var mapData = $(mapElements[i]).getMapData();
if(mapData !== false){
data.push(mapData);
}
}
return data;
};
/**
* init map, load into a container and init custom scrollbar
* @param container

View File

@@ -25,7 +25,7 @@ define([
delay: 5000, // visible time for notification in browser
mouse_reset: true, // Reset the hide timer if the mouse moves over the notice.
shadow: true,
addclass: 'stack-bottomright',
addclass: 'stack-bottomright', // class for display, must changed on stack different stacks
width: '250px',
// animation settings
animation: {
@@ -51,24 +51,86 @@ define([
};
// stack container for all notifications
var stack_bottomright = {
dir1: 'up',
dir2: 'left',
firstpos1: 10,
firstpos2: 10,
spacing1: 5,
spacing2: 5,
push: 'bottom'
var stack = {
bottomRight: {
stack: {
dir1: 'up',
dir2: 'left',
firstpos1: 30,
firstpos2: 10,
spacing1: 5,
spacing2: 5,
push: 'bottom'
},
addclass: 'stack-bottomright',
width: '250px',
opacity: 0.8
},
barTop: {
stack: {
dir1: 'down',
dir2: 'right',
push: 'top',
spacing1: 0,
spacing2: 0,
},
addclass: 'stack-bar-top',
width: '80%',
opacity: 1
},
barBottom: {
stack: {
dir1: 'up',
dir2: 'right',
firstpos1: 30,
spacing1: 0,
spacing2: 0
},
addclass: 'stack-bar-bottom',
width: '100%',
opacity: 1
}
};
/**
* show a notification in browser and/or "Web Notifications" in OS
* @param customConfig
*/
var showNotify = function(customConfig){
var showNotify = function(customConfig, settings){
customConfig = $.extend({}, config, customConfig );
// desktop notification
if(
settings &&
settings.desktop === true
){
// ask for Web Notifications permission
PNotify.desktop.permission();
customConfig.delay = 10000;
customConfig.desktop.desktop = true;
}else{
customConfig.delay = 5000;
customConfig.desktop.desktop = false;
}
// set notification stack
if(
settings &&
settings.stack
){
customConfig.stack = stack[settings.stack].stack;
customConfig.addclass = stack[settings.stack].addclass;
customConfig.width = stack[settings.stack].width;
customConfig.opacity = stack[settings.stack].opacity;
}else{
customConfig.stack = stack.bottomRight.stack;
customConfig.addclass = stack.bottomRight.addclass;
customConfig.opacity = stack.bottomRight.opacity;
}
switch(customConfig.type){
case 'info':
customConfig.icon = 'fa fa-info fa-fw fa-lg';
@@ -85,15 +147,6 @@ define([
default:
customConfig.icon = false;
}
customConfig.stack = stack_bottomright;
if(
customConfig.desktop &&
customConfig.desktop.desktop === true
){
// ask for Web Notifications permission
PNotify.desktop.permission();
}
new PNotify(customConfig);
};

View File

@@ -18,10 +18,10 @@ define([
// page structure slidebars-menu classes
pageId: 'sb-site',
pageSlidebarClass: 'sb-slidebar',
pageSlidebarLeftClass: 'sb-left',
pageSlidebarRightClass: 'sb-right',
pageSlideLeftWidth: '150px',
pageSlideRightWidth: '150px',
pageSlidebarLeftClass: 'sb-left', // class for left menu
pageSlidebarRightClass: 'sb-right', // class for right menu
pageSlideLeftWidth: '150px', // slide distance left menu
pageSlideRightWidth: '150px', // slide distance right menu
// page structure
pageClass: 'pf-site',
@@ -32,16 +32,31 @@ define([
headMenuClass: 'pf-head-menu', // class for page head menu button (left)
headMapClass: 'pf-head-map', // class for page head map button (right)
// footer
pageFooterId: 'pf-footer', // id for page footer
// map module
mapModuleId: 'pf-map-module', // main map module
// system effect dialog
systemEffectDialogWrapper: 'pf-system-effect-dialog-wrapper', // class for system effect dialog
systemEffectDialogWrapperClass: 'pf-system-effect-dialog-wrapper', // class for system effect dialog
// jump info dialog
jumpInfoDialogClass: 'pf-jump-info-dialog', // class for jump info dialog
// map legend dialog
mapLegendScrollspyId: 'pf-legend-scrollspy', // id for map legend scrollspy
mapLegendScrollspyNavClass: 'pf-legend-scrollspy-nav', // class for map legend scrollspy navigation
mapLegendNavigationListItemClass: 'pf-legend-navigation-list-item', // class for map legend li main navigation elements
// helper element
dynamicElementWrapperId: 'pf-dialog-wrapper'
};
var cache = {
systemEffectDialog: false // system effect info dialog
};
/**
* load main page structure elements and navigation container into body
@@ -81,6 +96,9 @@ define([
// load header
$('.' + config.pageClass).loadHeader();
// load footer
$('.' + config.pageClass).loadFooter();
// load left menu
$('.' + config.pageSlidebarLeftClass).loadLeftMenu();
@@ -119,6 +137,28 @@ define([
).on('click', function(){
$(document).triggerMenuEvent('ShowSystemEffectInfo');
})
).append(
$('<a>', {
class: 'list-group-item',
href: '#'
}).html('&nbsp;&nbsp;Jump info').prepend(
$('<i>',{
class: 'fa fa-space-shuttle fa-fw'
})
).on('click', function(){
$(document).triggerMenuEvent('ShowJumpInfo');
})
).append(
$('<a>', {
class: 'list-group-item',
href: '#'
}).html('&nbsp;&nbsp;Notification test').prepend(
$('<i>',{
class: 'fa fa-bullhorn fa-fw'
})
).on('click', function(){
$(document).triggerMenuEvent('NotificationTest');
})
).append(
$('<a>', {
class: 'list-group-item',
@@ -150,6 +190,17 @@ define([
).on('click', function(){
$('#' + config.mapModuleId).getActiveMap().triggerMenuEvent('Grid', {button: this});
})
).append(
$('<a>', {
class: 'list-group-item',
href: '#'
}).html('&nbsp;&nbsp;Legend').prepend(
$('<i>',{
class: 'fa fa-info fa-fw'
})
).on('click', function(){
$(document).triggerMenuEvent('Legend', {button: this});
})
)
);
};
@@ -200,15 +251,202 @@ define([
Render.showModule(moduleConfig, moduleData);
};
/**
* load page footer
*/
$.fn.loadFooter = function(){
var pageElement = $(this);
var moduleConfig = {
name: 'modules/footer',
position: pageElement,
link: 'append',
functions: {
after: function(){
}
}
};
var moduleData = {
id: config.pageFooterId
};
Render.showModule(moduleConfig, moduleData);
};
/**
* catch all global document events
*/
var setDocumentObserver = function(){
$(document).on('pf:menuShowSystemEffectInfo', function(e){
// show system effects info box
showSystemEffectInfoDialog();
});
$(document).on('pf:menuShowJumpInfo', function(e){
// show system effects info box
showJumpInfoDialog();
});
$(document).on('pf:menuNotificationTest', function(e){
// show system effects info box
notificationTest();
});
$(document).on('pf:menuLegend', function(e){
// show map legend
showMaplegend();
});
showMaplegend();
};
/**
* shows the map legend modal dialog
*/
var showMaplegend = function(){
requirejs(['text!templates/modules/map_legend_dialog.html', 'lib/mustache'], function(template, Mustache) {
var data = {
scrollspyId: config.mapLegendScrollspyId,
scrollspyNavClass: config.mapLegendScrollspyNavClass,
scrollspyNavLiClass: config.mapLegendNavigationListItemClass,
pieChartClass : Init.classes.pieChart.pieChartMapCounterClass,
mapCounterClass : Init.classes.pieChart.pieChartMapCounterClass
};
var content = Mustache.render(template, data);
// show dialog
var mapLegendDialog = bootbox.dialog({
title: 'Map legend',
message: content,
className: 'medium',
buttons: {
success: {
label: 'close',
className: "btn-primary",
callback: function() {
$(mapLegendDialog).modal('hide');
}
}
},
show: false
});
mapLegendDialog.modal('show');
mapLegendDialog.on('shown.bs.modal', function(e) {
// modal os open
});
var scrollspyElement = $('#' + config.mapLegendScrollspyId);
// init scrollbar
scrollspyElement.mCustomScrollbar({
axis: 'y',
theme: 'light-thick',
scrollInertia: 200,
autoExpandScrollbar: false,
scrollButtons:{
scrollAmount: 30,
enable: true
},
advanced: {
updateOnBrowserResize: true,
updateOnContentResize: true
},
callbacks:{
onInit: function(){
// init fake-map update counter
scrollspyElement.find('.' + data.mapCounterClass).initMapUpdateCounter();
// set navigation button observer
var mainNavigationLinks = $('.' + config.mapLegendScrollspyNavClass).find('a');
// text anchor links
var subNavigationLinks = scrollspyElement.find('a[data-target]');
var navigationLinks = mainNavigationLinks.add(subNavigationLinks);
navigationLinks.on('click', function(e){
e.preventDefault();
// scroll to anchor
scrollspyElement.mCustomScrollbar("scrollTo", $(this).attr('data-target'));
var mainNavigationLiElement = $(this).parent('.' + config.mapLegendNavigationListItemClass);
// if link is a main navigation link (not an anchor link)
if(mainNavigationLiElement.length > 0){
// remove all active classes
$('.' + config.mapLegendScrollspyNavClass).find('li').removeClass('active');
// set new active class
$(this).parent().addClass('active');
}
});
}
},
mouseWheel:{
enable: true,
scrollAmount: 200,
axis: 'y',
preventDefault: true // do not scroll parent at the end
},
scrollbarPosition: 'outsite',
autoDraggerLength: true
});
});
};
/**
* shows a test notification for desktop messages
*/
var notificationTest = function(){
Util.showNotify({title: 'Test Notification', text: 'Accept browser security question'}, {desktop: true, stack: 'barBottom'});
};
/**
* show jump info dialog
*/
var showJumpInfoDialog = function(){
requirejs(['text!templates/modules/jump_info_dialog.html', 'lib/mustache'], function(template, Mustache) {
var data = {};
var content = Mustache.render(template, data);
var signatureReaderDialog = bootbox.dialog({
className: config.jumpInfoDialogClass,
title: 'Wormhole jump information',
message: content
});
});
};
/**
* show system effect dialog
*/
var showSystemEffectInfoDialog = function(){
// cache table structure
if(!cache.systemEffectDialog){
var dialogWrapperElement = $('<div>', {
class: config.systemEffectDialogWrapper
class: config.systemEffectDialogWrapperClass
});
$.each( Init.systemEffects.wh, function( effectName, effectData ) {
@@ -266,15 +504,16 @@ define([
dialogWrapperElement.append( table.append( thead ).append( tbody ) );
cache.systemEffectDialog = dialogWrapperElement;
});
}
bootbox.dialog({
title: 'System effect information',
message: dialogWrapperElement
});
bootbox.dialog({
title: 'System effect information',
message: cache.systemEffectDialog
});
}
};
});

View File

@@ -1,7 +1,11 @@
/**
* Util
*/
define(['jquery', 'app/init'], function($, Init) {
define([
'jquery',
'app/init',
'easyPieChart'
], function($, Init) {
"use strict";
@@ -76,16 +80,96 @@ define(['jquery', 'app/init'], function($, Init) {
return formData;
};
var showNotify = function(customConfig){
/**
* checks if an element is currently visible in viewport
* @returns {boolean}
*/
$.fn.isInViewport = function(){
var element = $(this)[0];
var top = element.offsetTop;
var left = element.offsetLeft;
var width = element.offsetWidth;
var height = element.offsetHeight;
while(element.offsetParent) {
element = element.offsetParent;
top += element.offsetTop;
left += element.offsetLeft;
}
return (
top < (window.pageYOffset + window.innerHeight) &&
left < (window.pageXOffset + window.innerWidth) &&
(top + height) > window.pageYOffset &&
(left + width) > window.pageXOffset
);
};
/**
* trigger a notification (on screen or desktop)
* @param customConfig
* @param desktop
*/
var showNotify = function(customConfig, desktop){
requirejs(['app/notification'], function(Notification) {
Notification.showNotify(customConfig);
Notification.showNotify(customConfig, desktop);
});
};
// ==================================================================================================
/**
* init the map-update-counter as "easy-pie-chart"
*/
$.fn.initMapUpdateCounter = function(){
var counterChart = $(this);
counterChart.easyPieChart({
barColor: function(percent){
var color = '#568a89';
if(percent <= 30){
color = '#d9534f';
}else if(percent <= 50){
color = '#f0ad4e';
}
return color;
},
trackColor: '#2b2b2b',
size: 30,
scaleColor: false,
lineWidth: 2,
animate: 1000
});
};
/**
* get some system info for a given info string (e.g. rally class)
* @param info
* @param option
* @returns {string}
*/
var getInfoForSystem = function(info, option){
var systemInfo = '';
if(Init.classes.systemInfo.hasOwnProperty(info)){
systemInfo = Init.classes.systemInfo[info][option];
}
return systemInfo;
};
/**
* get some info for a given effect string
* @param effect
@@ -311,7 +395,7 @@ define(['jquery', 'app/init'], function($, Init) {
return {
showNotify: showNotify,
getInfoForSystem: getInfoForSystem,
getEffectInfoForSystem: getEffectInfoForSystem,
getSystemEffectData: getSystemEffectData,
getSystemEffectTable: getSystemEffectTable,

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,384 @@
/***
@title:
Drag to Select
@version:
1.1
@author:
Andreas Lagerkvist
@date:
2009-04-06
@url:
http://andreaslagerkvist.com/jquery/drag-to-select/
@license:
http://creativecommons.org/licenses/by/3.0/
@copyright:
2008 Andreas Lagerkvist (andreaslagerkvist.com)
@requires:
jquery, jquery.dragToSelect.css
@does:
Use this plug-in to allow your users to select certain elements by dragging a "select box". Works very similar to how you can drag-n-select files and folders in most OS:es.
@howto:
$('#my-files').dragToSelect(selectables: 'li'); would make every li in the #my-files-element selectable by dragging. The li:s will recieve a "selected"-class when they are within range of the select box when user drops.
Make sure a parent-element of the selectables has position: relative as well as overflow: auto or scroll.
@exampleHTML:
<ul>
<li><img src="http://exscale.se/__files/3d/lamp-and-mates/lamp-and-mates-01_small.jpg" alt="Lamp and Mates" /></li>
<li><img src="http://exscale.se/__files/3d/stugan-winter_small.jpg" alt="The Cottage - Winter time" /></li>
<li><img src="http://exscale.se/__files/3d/ps2_small.jpg" alt="PS2" /></li>
</ul>
@exampleJS:
$('#jquery-drag-to-select-example').dragToSelect({
selectables: 'li',
onHide: function () {
alert($('#jquery-drag-to-select-example li.selected').length + ' selected');
}
});
***/
jQuery.fn.dragToSelect = function (conf) {
var c = typeof(conf) == 'object' ? conf : {};
// Config
var config = jQuery.extend({
className: 'pf-map-drag-to-select',
activeClass: 'active',
disabledClass: 'disabled',
selectedClass: 'pf-system-selected',
ignoredClass: 'pf-system-locked', // do not select locked systems
scrollTH: 10,
percentCovered: 25,
selectables: false,
autoScroll: false,
selectOnMove: false,
onShow: function () {return true;},
onHide: function () {return true;},
onRefresh: function () {return true;}
}, c);
var realParent = jQuery(this);
var parent = realParent;
// deselected items
var deselectedItems = [];
do {
if (/auto|scroll|hidden/.test(parent.css('overflow'))) {
break;
}
parent = parent.parent();
} while (parent[0].parentNode);
// Does user want to disable dragToSelect
if (conf == 'disable') {
parent.addClass(config.disabledClass);
return this;
}
else if (conf == 'enable') {
parent.removeClass(config.disabledClass);
return this;
}
var parentOffset = parent.offset();
var parentDim = {
left: parentOffset.left,
top: parentOffset.top,
width: parent.width(),
height: parent.height()
};
// Current origin of select box
var selectBoxOrigin = {
left: 0,
top: 0
};
// Create select box
var selectBox = jQuery('<div/>')
.appendTo(parent)
.attr('class', config.className)
.css('position', 'absolute');
// Shows the select box
var showSelectBox = function (e) {
if (parent.is('.' + config.disabledClass)) {
return;
}
selectBoxOrigin.left = e.pageX - parentDim.left + parent[0].scrollLeft;
selectBoxOrigin.top = e.pageY - parentDim.top + parent[0].scrollTop;
var css = {
left: selectBoxOrigin.left + 'px',
top: selectBoxOrigin.top + 'px',
width: '1px',
height: '1px'
};
selectBox.addClass(config.activeClass).css(css);
config.onShow();
};
// Refreshes the select box dimensions and possibly position
var refreshSelectBox = function (e) {
if (!selectBox.is('.' + config.activeClass) || parent.is('.' + config.disabledClass)) {
return;
}
// get scroll position
var leftScroll = 0;
var rightScroll = 0;
if(realParent.data('scrollLeft')){
leftScroll = realParent.data('scrollLeft');
}
if(realParent.data('scrollRight')){
rightScroll = realParent.data('scrollRight');
}
var left = e.pageX - parentDim.left + parent[0].scrollLeft;
var top = e.pageY - parentDim.top + parent[0].scrollTop;
var newLeft = left;
var newTop = top;
var tempWidth = selectBoxOrigin.left - newLeft ;
var newHeight = selectBoxOrigin.top - newTop;
newLeft = selectBoxOrigin.left - leftScroll;
var newWidth = left - selectBoxOrigin.left;
if(newWidth < 0){
newLeft = newLeft - tempWidth ;
newWidth = newWidth * -1;
}
if (top > selectBoxOrigin.top) {
newTop = selectBoxOrigin.top;
newHeight = top - selectBoxOrigin.top;
}
var css = {
left: newLeft + 'px',
top: newTop + 'px',
width: newWidth + 'px',
height: newHeight + 'px'
};
selectBox.css(css);
config.onRefresh();
};
// Hides the select box
var hideSelectBox = function (e) {
if (!selectBox.is('.' + config.activeClass) || parent.is('.' + config.disabledClass)) {
return;
}
if (config.onHide(selectBox, deselectedItems) !== false) {
selectBox.removeClass(config.activeClass);
}
};
// Scrolls parent if needed
var scrollPerhaps = function (e) {
if (!selectBox.is('.' + config.activeClass) || parent.is('.' + config.disabledClass)) {
return;
}
// Scroll down
if ((e.pageY + config.scrollTH) > (parentDim.top + parentDim.height)) {
parent[0].scrollTop += config.scrollTH;
}
// Scroll up
if ((e.pageY - config.scrollTH) < parentDim.top) {
parent[0].scrollTop -= config.scrollTH;
}
// Scroll right
if ((e.pageX + config.scrollTH) > (parentDim.left + parentDim.width)) {
parent[0].scrollLeft += config.scrollTH;
}
// Scroll left
if ((e.pageX - config.scrollTH) < parentDim.left) {
parent[0].scrollLeft -= config.scrollTH;
}
};
// Selects all the elements in the select box's range
var selectElementsInRange = function () {
if (!selectBox.is('.' + config.activeClass) || parent.is('.' + config.disabledClass)) {
return;
}
var selectables = realParent.find(config.selectables + ':not(.' + config.ignoredClass + ')');
var selectBoxOffset = selectBox.offset();
var selectBoxDim = {
left: selectBoxOffset.left,
top: selectBoxOffset.top,
width: selectBox.width(),
height: selectBox.height()
};
// reset deselected item array
deselectedItems = [];
selectables.each(function (i) {
var el = $(this);
var elOffset = el.offset();
var elDim = {
left: elOffset.left,
top: elOffset.top,
width: el.width(),
height: el.height()
};
if (percentCovered(selectBoxDim, elDim) > config.percentCovered) {
el.addClass(config.selectedClass);
}else {
if(el.hasClass(config.selectedClass)){
el.removeClass(config.selectedClass);
deselectedItems.push(el);
}
}
});
};
// Returns the amount (in %) that dim1 covers dim2
var percentCovered = function (dim1, dim2) {
// The whole thing is covering the whole other thing
if (
(dim1.left <= dim2.left) &&
(dim1.top <= dim2.top) &&
((dim1.left + dim1.width) >= (dim2.left + dim2.width)) &&
((dim1.top + dim1.height) > (dim2.top + dim2.height))
) {
return 100;
}
// Only parts may be covered, calculate percentage
else {
dim1.right = dim1.left + dim1.width;
dim1.bottom = dim1.top + dim1.height;
dim2.right = dim2.left + dim2.width;
dim2.bottom = dim2.top + dim2.height;
var l = Math.max(dim1.left, dim2.left);
var r = Math.min(dim1.right, dim2.right);
var t = Math.max(dim1.top, dim2.top);
var b = Math.min(dim1.bottom, dim2.bottom);
if (b >= t && r >= l) {
/* $('<div/>').appendTo(document.body).css({
background: 'red',
position: 'absolute',
left: l + 'px',
top: t + 'px',
width: (r - l) + 'px',
height: (b - t) + 'px',
zIndex: 100
}); */
var percent = (((r - l) * (b - t)) / (dim2.width * dim2.height)) * 100;
// alert(percent + '% covered')
return percent;
}
}
// Nothing covered, return 0
return 0;
};
// Do the right stuff then return this
selectBox
.mousemove(function (e) {
refreshSelectBox(e);
if (config.selectables && config.selectOnMove) {
selectElementsInRange();
}
if (config.autoScroll) {
scrollPerhaps(e);
}
e.preventDefault();
})
.mouseup(function(e) {
if (config.selectables) {
selectElementsInRange();
}
hideSelectBox(e);
e.preventDefault();
});
if (jQuery.fn.disableTextSelect) {
parent.disableTextSelect();
}
parent
.mousedown(function (e) {
if(
e.which === 1 && // left mouse down
e.target === realParent[0] // prevent while dragging a system :)
){
// Make sure user isn't clicking scrollbar (or disallow clicks far to the right actually)
if ((e.pageX + 20) > jQuery(document.body).width()) {
return;
}
showSelectBox(e);
e.preventDefault();
}
})
.mousemove(function (e) {
refreshSelectBox(e);
if (config.selectables && config.selectOnMove) {
selectElementsInRange();
}
if (config.autoScroll) {
scrollPerhaps(e);
}
e.preventDefault();
})
.mouseup(function (e) {
if (config.selectables) {
selectElementsInRange();
}
hideSelectBox(e);
e.preventDefault();
});
// Be nice
return this;
};

9
js/lib/jquery.easypiechart.min.js vendored Normal file
View File

@@ -0,0 +1,9 @@
/**!
* easyPieChart
* Lightweight plugin to render simple, animated and retina optimized pie charts
*
* @license
* @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de)
* @version 2.1.6
**/
!function(a,b){"object"==typeof exports?module.exports=b(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],b):b(a.jQuery)}(this,function(a){var b=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"undefined"!=typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.trackWidth||b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},c=function(a,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:5,lineCap:"round",lineWidth:3,trackWidth:void 0,size:110,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(){},onStep:function(){},onStop:function(){}};if("undefined"!=typeof b)d.renderer=b;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=a,this.options=e;for(var b in d)d.hasOwnProperty(b)&&(e[b]=c&&"undefined"!=typeof c[b]?c[b]:d[b],"function"==typeof e[b]&&(e[b]=e[b].bind(this)));e.easing="string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?jQuery.easing[e.easing]:d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(a,e),this.renderer.draw(f),a.dataset&&a.dataset.percent?this.update(parseFloat(a.dataset.percent)):a.getAttribute&&a.getAttribute("data-percent")&&this.update(parseFloat(a.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};a.fn.easyPieChart=function(b){return this.each(function(){var d;a.data(this,"easyPieChart")||(d=a.extend({},b,a(this).data()),a.data(this,"easyPieChart",new c(this,d)))})}});

View File

@@ -0,0 +1,9 @@
/*!
* hoverIntent v1.8.0 // 2014.06.29 // jQuery v1.9.1+
* http://cherne.net/brian/resources/jquery.hoverIntent.html
*
* You may use hoverIntent under the terms of the MIT license. Basically that
* means you are free to use hoverIntent as long as this header is left intact.
* Copyright 2007, 2014 Brian Cherne
*/
(function($){$.fn.hoverIntent=function(handlerIn,handlerOut,selector){var cfg={interval:100,sensitivity:6,timeout:0};if(typeof handlerIn==="object"){cfg=$.extend(cfg,handlerIn)}else{if($.isFunction(handlerOut)){cfg=$.extend(cfg,{over:handlerIn,out:handlerOut,selector:selector})}else{cfg=$.extend(cfg,{over:handlerIn,out:handlerIn,selector:handlerOut})}}var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if(Math.sqrt((pX-cX)*(pX-cX)+(pY-cY)*(pY-cY))<cfg.sensitivity){$(ob).off("mousemove.hoverIntent",track);ob.hoverIntent_s=true;return cfg.over.apply(ob,[ev])}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=false;return cfg.out.apply(ob,[ev])};var handleHover=function(e){var ev=$.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t)}if(e.type==="mouseenter"){pX=ev.pageX;pY=ev.pageY;$(ob).on("mousemove.hoverIntent",track);if(!ob.hoverIntent_s){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}}else{$(ob).off("mousemove.hoverIntent",track);if(ob.hoverIntent_s){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob)},cfg.timeout)}}};return this.on({"mouseenter.hoverIntent":handleHover,"mouseleave.hoverIntent":handleHover},cfg.selector)}})(jQuery);

View File

@@ -17,8 +17,10 @@ $gray-mid-light: lighten($black, 75%);
// blue
$blue-lighter: #57889c;
$blue: #428bca;
$blue-dark: #316490;
// teal
$teal-light: #6caead;
$teal: #568a89;
$teal-dark: #477372;
$teal-darker: #375959;
@@ -32,6 +34,7 @@ $green-dark: #4f9e4f;
// red
$red: #d9534f;
$red-darker: #a52521;
$red-darkest: #58100d;
// yellow
$yellow-lighter: #ffffbb;
@@ -42,10 +45,13 @@ $orange: #e28a0d;
$orange-dark: #c2760c;
// pink
$pink-light: #e88ce7;
$pink: #e06fdf;
$pink-dark: #d747d6;
$pink-darker: #782d77;
// purple
$purple-dark: #3e264e;
// WH effects
$wh-color-magnetar: $pink;
@@ -70,6 +76,6 @@ $system-color-sec-1-0: #28c0bf;
$brand-primary: $teal-darker !default;
$brand-success: $green-dark !default;
$brand-info: $blue !default;
$brand-info: $blue-dark !default;
$brand-warning: $orange !default;
$brand-danger: $red-darker !default;

View File

@@ -1,5 +1,5 @@
// SASS version of SmartAdmin 1.4 variables.less
//
// a flag to toggle asset pipeline / compass integration
// defaults to true if twbs-font-path function is present (no function => twbs-font-path('') parsed as string == right side)
// in Sass 3.3 this can be improved with: function-exists(twbs-font-path)
@@ -41,7 +41,7 @@ $font-size-large: ceil(($font-size-base * 1.24)); // ~16px
$font-size-small: ceil(($font-size-base * 0.85)); // ~11px
$font-size-h1: floor(($font-size-base * 1.85)); // ~24px
$font-size-h2: floor(($font-size-base * 1.7)); // ~22px
$font-size-h2: floor(($font-size-base * 1.24)); // ~22px
$font-size-h3: ceil(($font-size-base * 1.385)); // ~18px
$font-size-h4: $font-size-base; //ceil(($font-size-base * 1.32)); // ~17px
$font-size-h5: ceil(($font-size-base * 1.24)); // ~16px
@@ -201,8 +201,8 @@ $dropdown-fallback-border: #ccc;
$dropdown-divider-bg: $gray-light;
$dropdown-link-color: $gray-dark;
$dropdown-link-hover-color: $gray-lighter;
$dropdown-link-hover-bg: $gray-dark;
$dropdown-link-hover-color: $gray-darkest;
$dropdown-link-hover-bg: $gray-light;
$dropdown-link-active-color: #fff;
$dropdown-link-active-bg: $component-active-bg;
@@ -317,10 +317,10 @@ $navbar-default-border: none;
// Navbar links
$navbar-default-link-color: #777;
$navbar-default-link-hover-color: #333;
$navbar-default-link-hover-bg: transparent;
$navbar-default-link-active-color: #555;
$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%);
$navbar-default-link-hover-color: #1d1d1d;
$navbar-default-link-hover-bg: $gray-light;
$navbar-default-link-active-color: $gray-darker;
$navbar-default-link-active-bg: $gray-lighter;
$navbar-default-link-disabled-color: #ccc;
$navbar-default-link-disabled-bg: transparent;
@@ -445,7 +445,7 @@ $jumbotron-font-size: ceil(($font-size-base * 1.5));
//## Define colors for form feedback states and, by default, alerts.
$state-success-text: $gray-darker;
$state-success-bg: lighten($brand-success, 50%);
$state-success-bg: lighten($brand-success, 40%);
$state-success-border: $brand-success;
$state-info-text: $gray-darker;
@@ -468,7 +468,7 @@ $state-danger-border: $brand-danger;
$tooltip-max-width: 200px;
$tooltip-color: #fff;
$tooltip-bg: #000;
$tooltip-opacity: .9;
$tooltip-opacity: 0.9;
$tooltip-arrow-width: 5px;
$tooltip-arrow-color: $tooltip-bg;
@@ -641,8 +641,8 @@ $thumbnail-caption-padding: 9px;
//
//##
$well-bg: #f5f5f5;
$well-border: darken($well-bg, 7%);
$well-bg: $gray-light;
$well-border: $gray-dark;
//== Badges
@@ -706,8 +706,8 @@ $close-text-shadow: 0 1px 0 #fff;
$code-color: #c7254e;
$code-bg: #f9f2f4;
$kbd-color: #fff;
$kbd-bg: #333;
$kbd-color: $gray-lighter;
$kbd-bg: $gray-darker;
$pre-bg: #f5f5f5;
$pre-color: $gray-dark;
@@ -724,7 +724,7 @@ $abbr-border-color: $gray-light;
$headings-small-color: $gray-light;
$blockquote-small-color: $gray-light;
$blockquote-font-size: ($font-size-base * 1.25);
$blockquote-border-color: $gray-lighter;
$blockquote-border-color: $green;
$page-header-border-color: $gray-lighter;

View File

@@ -42,8 +42,9 @@
border: 1px solid $dropdown-fallback-border; // IE8 fallback
border: 1px solid $dropdown-border;
border-radius: $border-radius-base;
@include box-shadow(0 6px 12px rgba(0,0,0,.175));
@include box-shadow(0 6px 12px rgba(0,0,0,.4));
background-clip: padding-box;
border-radius: 5px;
// Aligns the dropdown menu to right
//
@@ -61,7 +62,7 @@
// Links within the dropdown menu
> li > a {
display: block;
padding: 3px 20px;
padding: 3px 15px;
clear: both;
font-weight: normal;
line-height: $line-height-base;

View File

@@ -21,7 +21,7 @@
.list-group-item {
position: relative;
display: block;
padding: 7px 15px;
padding: 7px 8px;
background-color: $list-group-bg;
border-bottom: 1px solid $list-group-border;

View File

@@ -12,7 +12,6 @@
position: relative;
min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
margin-bottom: $navbar-margin-bottom;
border-bottom: 1px solid $gray-dark;
// Prevent floats from breaking the navbar
@include clearfix();
@@ -256,6 +255,7 @@
> li {
float: left;
margin-right: 2px;
> a {
padding-top: $navbar-padding-vertical;
padding-bottom: $navbar-padding-vertical;
@@ -384,6 +384,7 @@
.navbar-default {
background: rgba( $navbar-default-bg, $navbar-default-opacity );
border-color: $navbar-default-border;
@include box-shadow(0 6px 12px rgba(0,0,0,.4));
.navbar-brand {
color: $navbar-default-brand-color;

View File

@@ -57,6 +57,7 @@ a {
&:focus {
@include tab-focus();
text-decoration: none;
}
}

View File

@@ -6,16 +6,20 @@
// Base class
.well {
min-height: 20px;
padding: 19px;
padding: 10px;
margin-bottom: 20px;
background-color: $well-bg;
border: 1px solid $well-border;
border-radius: $border-radius-base;
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
@include border-radius(5px);
color: $gray-darker;
blockquote {
border-color: #ddd;
border-color: rgba(0,0,0,.15);
}
a {
color: $teal-light;
}
}
// Sizes

View File

@@ -13,6 +13,13 @@ a{
}
}
// emphasized text
em{
&.pf-brand{
text-transform: uppercase;
}
}
// ajax laoding indicator overlay
.pf-loading-overlay{
@@ -60,10 +67,10 @@ a{
// maps module ===================================================
#pf-map-module{
margin: 0 10px;
// Tabs (colored)
#pf-map-tabs {
margin: 0 10px;
.pf-map-type-default{
border-top: 2px solid transparent;
@@ -82,20 +89,12 @@ a{
}
}
.tab-content{
width: calc(100% - 20px);
}
}
// Tab Content Body Grid ========================================
.pf-map-content-row{
margin: 10px 0 0 0;
// Table cell style
> div{
}
padding-bottom: 40px; // space for footer
// alle Module innerhalb einer row
.pf-module{
@@ -111,7 +110,6 @@ a{
// WH effects ==================================================
.pf-system-effect{
margin-left: 5px;
cursor: default;
color: $gray-lighter;
}
@@ -140,7 +138,30 @@ a{
color: $wh-color-blackhole;
}
// System security status ============================================
// system info status ================================================
.pf-system-info-rally{
.pf-system-head{
background-color: $pink-darker;
@include background-image(linear-gradient(-45deg,
$purple-dark 25%,
transparent 25%,
transparent 50%,
$purple-dark 50%,
$purple-dark 75%,
transparent 75%,
transparent));
background-size:25px 25px;
-webkit-animation:move 3s linear infinite;
-moz-animation:move 3s linear infinite;
-ms-animation:move 3s linear infinite;
animation:move 3s linear infinite;
}
}
// system security status ============================================
.pf-system-security-0-0{
color: $system-color-sec-0-0;
}
@@ -189,7 +210,8 @@ a{
.pf-system-sec{
margin-right: 5px;
cursor: move;
cursor: -moz-grab;
cursor: -webkit-grab;
}
.pf-system-sec-highSec{
@@ -244,7 +266,7 @@ a{
}
// system effect info dialog
.pf-system-effect-dialog-wrapper{
.pf-system-effect-dialog-wrapper, .pf-jump-info-dialog{
.table{
margin: 15px 0;
font-size: 10px;
@@ -255,22 +277,121 @@ a{
}
}
// tooltip ======================================================
.tooltip-inner{
opacity: 1;
color: $teal;
background-color: $gray;
font-family: 'Oxygen Bold';
padding: 5px 5px;
@include border-radius(5px);
// "fake connection" classes for the map legend
.pf-connection{
box-sizing: content-box;
display: inline-block;
width: 30px;
height: 4px;
margin-right: 5px;
border-top: 2px solid $gray-light;
border-bottom: 2px solid $gray-light;
background-color: #3c3f41;
&.pf-connection-eol{
border-color: $pink-dark;
}
&.pf-connection-reduced{
background-color: $orange;
}
&.pf-connection-critical{
background-color: $red-darker;
}
&.pf-connection-frig{
border-style: dashed;
border-left: none;
border-right: none;
}
}
.tooltip.top .tooltip-arrow{
// global tooltip settings ======================================
.tooltip-inner{
color: $green;
background-color: $gray;
font-family: 'Oxygen Bold';
padding: 5px 5px;
@include border-radius(3px);
@include box-shadow(0 6px 12px rgba(0,0,0,.4));
}
.tooltip.top .tooltip-arrow,{
border-top-color: $gray-light;
}
.tooltip.right .tooltip-arrow,{
border-right-color: $gray-light;
}
.tooltip.bottom .tooltip-arrow{
border-bottom-color: $gray-light;
}
.tooltip.left .tooltip-arrow{
border-left-color: $gray-light;
}
// footer =======================================================
#pf-footer{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
margin: 0;
background: rgba($gray, 0.3);
}
/*
Animate the stripes
*/
@-webkit-keyframes move{
0% {
background-position: 0 0;
}
100% {
background-position: 50px 50px;
}
}
@-moz-keyframes move{
0% {
background-position: 0 0;
}
100% {
background-position: 50px 50px;
}
}
@-ms-keyframes move{
0% {
background-position: 0 0;
}
100% {
background-position: 50px 50px;
}
}
@keyframes move{
0% {
background-position: 0 0;
}
100% {
background-position: 50px 50px;
}
}
// TODO move in seperate file!!! ====================================
#pf-legend-scrollspy{
position: relative;
height: 500px;
overflow: auto;
}

View File

@@ -30,26 +30,40 @@
// end bounce mixin ================================================
.pf-map-wrapper{
width: 100%;
height: 530px;
overflow: auto;
padding: 5px;
margin: 0 10px;
background: rgba($gray-darker, 0.93);
.pf-map-tab-content{
box-shadow:inset -1px 1px 6px 0 rgba($black, 0.8);
@include border-bottom-radius(5px);
border: {
width: 1px;
style: solid;
color: $gray-lighter;
.pf-map-wrapper{
position: relative;
width: 100%;
height: 530px;
overflow: auto;
padding: 5px;
background: rgba($gray-darker, 0.93);
box-shadow:inset -3px 3px 10px 0 rgba($black, 0.3);
@include border-bottom-radius(5px);
border: {
width: 1px;
style: solid;
color: $gray-lighter;
}
}
}
.pf-map-overlay{
position: absolute;
display: none; // triggered by js
z-index: 10000;
width: 36px;
height: 36px;
bottom: 23px;
right: 10px;
background: rgba($black, 0.2);
@include border-radius(5px);
}
// 20x20px grid background
.pf-grid-small{
background-image: url("#{$base-url}/grid_20x20.png") !important;
background: url("#{$base-url}/grid_20x20.png") !important;
}
@@ -58,7 +72,6 @@
height: 500px;
position: relative;
.pf-system{
position: absolute;
min-width: 80px;
@@ -84,10 +97,15 @@
display: inline-block;
min-width: 41px;
color: $gray-lighter;
margin-right: 2px;
}
.fa-lock{
display: none; // triggered by system-lock class
}
.pf-system-head-expand{
margin-left: 5px;
margin-left: 2px;
color: $gray-light;
display: none; // triggered by JS
}
@@ -141,12 +159,58 @@
}
}
// system specific tooltip style
.tooltip{
&.in{
opacity: 1;
}
.tooltip-inner{
color: $gray-dark;
background-color: $gray-lighter;
padding: 3px 3px;
}
}
}
// active system
.pf-system-active:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){
@include box-shadow($yellow-lighter 0px 0px 8px 0px);
}
// selected system
.pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){
@include box-shadow($red-darkest 0px 0px 8px 0px);
.pf-system-head, .pf-system-body{
background-color: $red-darkest;
}
}
// locked system
.pf-system-locked{
color: $gray-light;
.pf-system-sec{
cursor: default !important;
}
.pf-system-body{
cursor: default !important;
}
.fa-lock{
display: inline-block !important;
}
}
// Endpoints ====================================================
.pf-map-endpoint-source, .pf-map-endpoint-target{
@@ -222,15 +286,6 @@
}
}
// Connection status ============================================
svg.pf-map-connection-eol {
path:first-child{
stroke: red;
}
}
// Connection overlay ===========================================
.pf-map-connection-overlay{
padding: 1px 4px;
@@ -260,6 +315,8 @@
// context menu ==================================================
.dropdown-menu{
z-index: 1020; // over tooltips
i{
width: 20px
}
@@ -269,4 +326,3 @@

View File

@@ -0,0 +1,15 @@
// styles for drag-select
div.pf-map-drag-to-select {
background: $teal-darker;
display: none; // triggered by js
opacity: 0.3;
z-index: 9000;
border: 1px dashed $gray-lighter;
@include border-radius(5px);
&.active {
display: block;
}
}

View File

@@ -0,0 +1,38 @@
// global pie chart styles
.pf-pie-chart {
position: relative;
display:table-cell;
text-align: center;
vertical-align:middle;
span{
display: inline-block;
}
canvas {
position: absolute;
top: 0;
left: 0;
}
}
// pie chart map timer
.pf-pie-chart-map-timer{
width: 36px;
height: 36px;
margin: 3px;
canvas {
top: 3px;
left: 3px;
}
span{
font-size: 10px;
&:after {
content: 's';
margin-left: 1px;
}
}
}

View File

@@ -54,3 +54,13 @@ html > body > .ui-pnotify {
bottom: 25px;
top: auto;
}
.ui-pnotify.stack-bar-top {
right: 0;
top: 0;
}
.ui-pnotify.stack-bar-bottom {
right: auto;
bottom: 0;
top: auto;
left: auto;
}

View File

@@ -1,3 +1,14 @@
/*!
* Pathfinder - Mapping Tool
* http://pathfinder.exodus4d.de/
*
* CSS - Cascading Style Sheets
* Generated with Compass http://compass-style.org/
*
* Copyright 2014 - 2014, Exodus 4D - Mark Friedrich
*
*/
@import "compass/css3";
@import "compass/css3/border-radius";
@import "compass/css3/box-shadow";
@@ -22,6 +33,9 @@
@import "library/x-editable/_bootstrap-editable"; // X-editable - v1.5.0
@import "library/pnotify/_pnotify.core"; // PNotify styles
@import "library/slidebars/_slidebars"; // Slidebars Navigation
@import "library/easy-pie-chart/_easyPieChart"; // Easy Pie Chart 2.1.6
@import "library/drag-to-select/_dragToSelect"; // Drag to Select 1.1
// Main THEME (Imports by order - do not change order)
@import "smartadmin/main";

View File

@@ -7,6 +7,8 @@
&.txt-color-blueLight { color:$blueLight !important; }
&.txt-color-blueDark { color: $blueDark !important; }
&.txt-color-grayLightest { color: $gray-lightest !important; }
&.txt-color-gray { color: $gray !important; }
&.txt-color-grayDark { color: $gray-dark !important; }
&.txt-color-green { color: $green !important; }
&.txt-color-greenLight { color: $greenLight !important; }
&.txt-color-greenDark { color: $greenDark !important; }
@@ -20,10 +22,15 @@
&.txt-color-darken { color: $darken !important; }
&.txt-color-lighten { color: $lighten !important; }
&.txt-color-white { color: $white !important; }
&.txt-color-grayDark { color: $greyDark !important; }
&.txt-color-magenta { color: $magenta !important; }
&.txt-color-teal { color: $teal !important; }
&.txt-color-redLight { color: $redLight !important; }
&.txt-color-primary { color: $brand-primary !important; }
&.txt-color-success { color: $brand-success !important; }
&.txt-color-information { color: $brand-info !important; }
&.txt-color-warning { color: $brand-warning !important; }
&.txt-color-danger { color: $brand-danger !important; }
}
/*
* BACKGROUNDS

View File

@@ -19,15 +19,19 @@ body.mobile-view-activated.hidden-menu {
body.modal-open {
overflow:hidden !important;
p{
font-family: 'Oxygen';
}
}
a:hover, a:active, a:focus, button, button:active, button:focus, object, embed, input::-moz-focus-inner {
outline: 0;
}
h1,h2,h3,h4 {
h1,h3,h4 {
margin:0;
font-family: "Oxygen Bold", "Open Sans", Arial, Helvetica, Sans-Serif;
font-family: "Oxygen Bold";
font-weight:300;
}
@@ -141,9 +145,10 @@ h1 {
}
h2 {
letter-spacing:-1px;
font-family: "Oxygen", "Open Sans", Arial, Helvetica, Sans-Serif;;
letter-spacing: 0px;
font-size: $font-size-h2;
margin:20px 0;
margin: 20px 0;
line-height:normal;
}
@@ -157,6 +162,7 @@ h3 {
h4 {
line-height:normal;
margin: 20px 0 10px 0;
}
h5 {

View File

@@ -2,12 +2,15 @@
{{#items}}
{{#text}}
<li {{#subitems}}class="dropdown-submenu"{{/subitems}}>
<a href="#" tabindex="-1" data-action="{{action}}"><i class="fa {{#icon}}{{icon}}{{/icon}}"></i>{{text}}</a>
<a href="#" tabindex="-1" data-action="{{action}}"><i class="fa {{#icon}}{{icon}}{{/icon}} fa-fw"></i>&nbsp;{{text}}</a>
<ul class="dropdown-menu">
{{#subitems}}
{{#subText}}
<li>
<a href="#" tabindex="-1" data-action="{{subAction}}"><i class="fa {{#subIcon}}{{subIcon}}{{/subIcon}} {{#subIconClass}}{{subIconClass}}{{/subIconClass}}"></i>{{subText}}</a>
<a href="#" tabindex="-1" data-action="{{subAction}}">
<i class="fa {{#subIcon}}{{subIcon}}{{/subIcon}} {{#subIconClass}}{{subIconClass}}{{/subIconClass}} fa-fw"></i>
&nbsp;{{subText}}
</a>
</li>
{{/subText}}

View File

@@ -0,0 +1,11 @@
<div id="{{id}}" class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header pull-left">
<p class="navbar-text txt-color txt-color-gray"><i class="fa fa-copyright"></i> 2015 by Exodus 4D, Mark Friedrich</p>
</div>
<div class="navbar-header pull-right">
<p class="navbar-text txt-color txt-color-gray">All EVE related materials are property of <a target="_blank" href="http://www.ccpgames.com/">CCP Games</a></p>
</div>
</div>
</div>

View File

@@ -1,8 +1,6 @@
<div class="navbar navbar-default pf-head" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header pull-left">
<a class="navbar-brand pf-head-menu" href="#">
<i class="fa fa-bars fa-lg fa-fw"></i>&nbsp;Menu
<!-- <img src="https://image.eveonline.com/Type/17738_32.png" /> -->
@@ -10,23 +8,12 @@
<p class="navbar-text">Current system: Jita</p>
</div>
<div class="navbar-header pull-right">
<!--
<ul class="nav navbar-nav">
<li ><a href="#">Test <span class="sr-only">(current)</span></a></li>
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
</ul>
-->
<p class="navbar-text"><span class="badge bg-color bg-color-teal">7</span>&nbsp;&nbsp;&nbsp;online</p>
<p class="navbar-text">Signed in as {{userName}}</p>
<a class="navbar-brand pf-head-map" href="#">
Map&nbsp;<i class="fa fa-globe fa-lg fa-fw"></i>
Map&nbsp;<i class="fa fa-code-fork fa-lg fa-fw"></i>
</a>
</div>
</div>
</div>

View File

@@ -0,0 +1,70 @@
<table class="table table-condensed">
<thead>
<tr>
<th>Ship</th>
<th class="text-right">Mass</th>
<th class="text-right">Base Distance</th>
<th colspan="2" class="text-right">Distance to jump range</th>
</tr>
<tr>
<th></th>
<th></th>
<th></th>
<th class="text-right">min</th>
<th class="text-right">max</th>
</tr>
</thead>
<tbody>
<tr>
<td>Covert Ops Frigate</td>
<td class="text-right">1,280,000</td>
<td class="text-right">5.5 km</td>
<td class="text-right">0 km</td>
<td class="text-right">5.5 km</td>
</tr>
<tr>
<td>Plated T3 Cruiser</td>
<td class="text-right">14,300,000</td>
<td class="text-right">6.9 km</td>
<td class="text-right">0 km</td>
<td class="text-right">6.9 km</td>
</tr>
<tr>
<td>Plated Bhaalgorn</td>
<td class="text-right">101,000,000</td>
<td class="text-right">8.8 km</td>
<td class="text-right">0 km</td>
<td class="text-right">8.8 km</td>
</tr>
<tr>
<td>Orca</td>
<td class="text-right">250,000,000</td>
<td class="text-right">10.1 km</td>
<td class="text-right">0.1 km</td>
<td class="text-right">10.1 km</td>
</tr>
<tr>
<td>Average Carrier</td>
<td class="text-right">1,120,000,000</td>
<td class="text-right">13.5 km</td>
<td class="text-right">3.5 km</td>
<td class="text-right">13.5 km</td>
</tr>
<tr>
<td>Average Dreadnought</td>
<td class="text-right">1,240,000,000</td>
<td class="text-right">13.8 km</td>
<td class="text-right">3.8 km</td>
<td class="text-right">13.8 km</td>
</tr>
</tbody>
</table>
<blockquote>
<p>
The new base distance would scale as high as ~14km from the wormhole for the largest ships, and the random factor for each jump would range from 2km (for a fresh wormhole) to 5km (for a crit wormhole) in either direction.
The distance from a wormhole that ships must be within to jump will remain 5km as always.
</p>
<small> By CCP Fozzie | Mass-Based Spawn Distance after Wormhole Jumps</small>
</blockquote>

View File

@@ -0,0 +1,324 @@
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header pull-left">
<ul class="nav navbar-nav {{scrollspyNavClass}}">
<li class="{{scrollspyNavLiClass}} active"><a data-target="#pf-legend-map" href="#"><i class="fa fa-code-fork fa-lg fa-fw"></i>&nbsp;Map</a></li>
<li class="{{scrollspyNavLiClass}}"><a data-target="#pf-legend-system" href="#"><i class="fa fa-sun-o fa-lg fa-fw"></i>&nbsp;System</a></li>
<li class="{{scrollspyNavLiClass}}"><a data-target="#pf-legend-connection" href="#"><i class="fa fa-chain fa-lg fa-fw"></i>&nbsp;Connection</a></li>
<li class="{{scrollspyNavLiClass}}"><a data-target="#pf-legend-signature" href="#"><i class="fa fa-table fa-lg fa-fw"></i>&nbsp;Signature</a></li>
<li class="{{scrollspyNavLiClass}}"><a data-target="#pf-legend-chart" href="#"><i class="fa fa-bar-chart fa-lg fa-fw"></i>&nbsp;Chart</a></li>
<li class="{{scrollspyNavLiClass}}"><a data-target="#pf-legend-notification" href="#"><i class="fa fa-bullhorn fa-lg fa-fw"></i>&nbsp;Notification</a></li>
</ul>
</div>
</div>
</nav>
<div id="{{scrollspyId}}">
<h2 id="pf-legend-map"><i class="fa fa-code-fork fa-lg fa-fw"></i>&nbsp;&nbsp;Map</h2>
<h4>Map types</h4>
<p>
<em class="pf-brand">pathfinder</em>&nbsp;&nbsp;supports 3 different map types. A map can consists of multiple systems <small>(<i class="fa fa-sun-o fa-fw"></i><a href="#" data-target="#pf-legend-system">more info</a>)</small>
and connections <small>(<i class="fa fa-chain fa-fw"></i><a href="#" data-target="#pf-legend-chain">more info</a>)</small>. Maps are also referred to as <em>"Chain Map"</em> or <em>"Chain"</em>.
</p>
<ul>
<li><span class="txt-color txt-color-blue">Alliance map</span><small> (can be seen by any alliance member)</small></li>
<li><span class="txt-color txt-color-green">Personal map</span><small> (only you can use this kind of maps)</small></li>
<li><span class="txt-color txt-color-teal">Public map</span><small> (anyone can use this kind of maps)</small></li>
</ul>
<p>
Up to 5 different maps can be used simultaneously. <span class="txt-color txt-color-blue">Alliance maps</span> only can be created with required rules.
</p>
<h4 id="pf-legend-scrollspy-anchor-map-contextmenu">Context Menu</h4>
<p>
<kbd>right click</kbd> somewhere on the map to open the context menu.
</p>
<ul class="list-unstyled well">
<li><i class="fa fa-info fa-fw"></i> Show some basic map information</li>
<li><i class="fa fa-plus fa-fw"></i> Open the "Add System" dialog and add a new system at the position where you right-clicked on the map</li>
<li><i class="fa fa-eraser fa-fw"></i> Delete all selected <small><a href="#" data-target="#pf-legend-scrollspy-anchor-map-select">more info</a></small> systems (if there are any selected systems) <small><a href="#" data-target="#pf-legend-scrollspy-anchor-system-delete">more info</a></small></li>
</ul>
<h4 id="pf-legend-scrollspy-anchor-map-select">Select methods</h4>
<ul>
<li>Drag-Select:<small> Multiple systems can be selected by </small><kbd>click</kbd> + <kbd>drag</kbd><small> somewhere on the map and drag a frame around some systems</small></li>
<li>Single-Select:<small> Individual systems can be selected by holding </small><kbd>ctrl</kbd> + <kbd>click</kbd></li>
</ul>
<p>
Locked systems <small>(<i class="fa fa-lock fa-fw"></i>)</small> can´t be selected.
</p>
<h4><i class="fa fa-th fa-fw"></i> Grid snapping</h4>
<p>
For easier system arrangement, the "grid snapping" option can be activated on the "Map Menu" <small>(<i class="fa fa-code-fork fa-fw"></i>)</small>. Dragged systems will snap then to a <samp>20x20px</samp> grid.<br>
A grid overlay will appear on the map.
</p>
<h4><i class="fa fa-history fa-fw"></i> Update counter</h4>
<div class="pf-map-overlay" style="position: initial; display: block; padding-top: 1px; float: left; margin: 0 10px 10px 0;">
<div class="{{pieChartClass}} {{mapCounterClass}}" data-percent="40">
<span style="position: absolute; line-height: 30px; margin-left: 10px;">4</span>
</div>
</div>
<p>
The map update counter starts counting backwards during map interaction (e.g. delete system, move system, ..). While the counter is active no data is pushed to the server.
When the counter hits 0 all map date will be stored and any active pilot will receive the updates.<br>
So there is no need for any save/edit buttons.
</p>
<div class="clearfix"></div>
{{! ================================================================================================================================================ }}
<h2 id="pf-legend-system"><i class="fa fa-sun-o fa-lg fa-fw"></i>&nbsp;&nbsp;System</h2>
<p>
Systems are represented by rectangle boxes on a map <small>(<i class="fa fa-code-fork fa-fw"></i><a href="#" data-target="#pf-legend-map">more info</a>)</small>.
Pilots can interact with systems like "delete systems" <small>(<i class="fa fa-eraser fa-fw"></i><a href="#" data-target="#pf-legend-scrollspy-anchor-system-delete">more info</a>)</small>,
"move systems around" <small>(<i class="fa fa-arrows-alt fa-fw"></i><a href="#" data-target="#pf-legend-scrollspy-anchor-system-move">more info</a>)</small>, ...
</p>
<h4>Activate</h4>
<p>
Any system in a map can be set as "active" by <kbd>click</kbd> somewhere at a system. Just one system per map can have an active state.<br>
The active system has <span style="-webkit-box-shadow: #ffffbb 0px 0px 8px 0px;box-shadow: #ffffbb 0px 0px 8px 0px; display: inline-block; margin: 0 5px; padding: 0 3px;">light yellow</span> shaddow.
Additional system information is shown below the map.
</p>
<h4>Name</h4>
<p>
Systems can be renamed with an alias by <kbd>double-click</kbd> the name. System aliases are stored server side and can be seen by any pilot with map access.
</p>
<h4 id="pf-legend-scrollspy-anchor-system-security">Security Status</h4>
<p>
Any <em>"K-Space"</em> system in <em>"New Eden"</em> has a fix <em>"Security Status"</em> between <samp>-1.0</samp> and <samp>+1.0</samp>. <em>"W-Space"</em> systems always have a Security status of <samp>-1.0</samp> but they can be
distinguished into <em>"Classes"</em> [C1 - C6].<br>
The color of the system label indicates the <em>"Security Status"</em> of a system
</p>
<ul style="list-style: none;">
<li><span class="pf-system-sec-highSec">H</span> high security system<small> (<samp>1.0 - 0.5</samp>)</small></li>
<li><span class="pf-system-sec-lowSec">L</span> low security system<small> (<samp>0.4 - 0.1</samp>)</small></li>
<li><span class="pf-system-sec-nullSec">0.0</span> Null security system<small> (<samp>0.0 - -1.0</samp>)</small></li>
<li><span class="pf-system-sec-high">C6, C5</span> heigh class wormhole <small> (<samp>-1.0</samp>)</small></li>
<li><span class="pf-system-sec-mid">C4, C3</span> mid class wormhole <small> (<samp>-1.0</samp>)</small></li>
<li><span class="pf-system-sec-low">C6, C5</span> low class wormhole <small> (<samp>-1.0</samp>)</small></li>
</ul>
<h4 id="pf-legend-scrollspy-anchor-system-status">System Status</h4>
<p>
The border color indicates the current status of a system.<br>
The status can be changed by using the context menu <small>(<a href="#" data-target="#pf-legend-scrollspy-anchor-system-contextmenu">more info</a>)</small>.
</p>
<ul style="list-style: none;">
<li><i class="fa fa-square-o fa-lg fa-fw pf-system-status-unknown"></i> no status set<small> (unknown)</small></li>
<li><i class="fa fa-square-o fa-lg fa-fw pf-system-status-friendly"></i> friendly<small> (in the possession of your corp/ally or allied entities)</small></li>
<li><i class="fa fa-square-o fa-lg fa-fw pf-system-status-occupied"></i> occupied<small> (hostiles structures found but no activity found)</small></li>
<li><i class="fa fa-square-o fa-lg fa-fw pf-system-status-hostile"></i> hostile<small> (hostile activity noticed recently)</small></li>
<li><i class="fa fa-square-o fa-lg fa-fw pf-system-status-empty"></i> empty<small> (system is not occupied or active)</small></li>
<li><i class="fa fa-square-o fa-lg fa-fw pf-system-status-unscanned"></i> unscanned<small> (system has unscanned signatures)</small></li>
</ul>
<h4>System Effect</h4>
<p>
Effects of wormhole systems are shown by a <i class="fa fa-square fa-fw"></i> at the top right of a system
</p>
<ul style="list-style: none;">
<li><i class="fa fa-square fa-fw pf-system-effect"></i></span> No effect</li>
<li><i class="fa fa-square fa-fw pf-system-effect-magnetar"></i></span> Magnetar</li>
<li><i class="fa fa-square fa-fw pf-system-effect-redgiant"></i></span> Red Giant</li>
<li><i class="fa fa-square fa-fw pf-system-effect-pulsar"></i></span> Pulsar</li>
<li><i class="fa fa-square fa-fw pf-system-effect-wolfryet"></i></span> Wolfryet</li>
<li><i class="fa fa-square fa-fw pf-system-effect-cataclysmic"></i></span> Cataclysmic Variable</li>
<li><i class="fa fa-square fa-fw pf-system-effect-blackhole"></i></span> Blackhole</li>
</ul>
<h4>Active Pilots</h4>
<p>
If there are any active pilots in a system, there is a tooltip with the number of pilots. <br>
Systems with active Pilots are bigger than empty systems. The name of a pilot is shown below the system name.<br>
Hover the <small>(<i class="fa fa-angle-down fa-fw"></i>)</small> icon in the systems head to get more detailed information (ship type, pilot name).
</p>
<h4 id="pf-legend-scrollspy-anchor-system-move"><i class="fa fa-arrows-alt fa-fw"></i> Move</h4>
<p>
Any system that is not "Locked" <small>(<i class="fa fa-lock fa-fw"></i><a href="#" data-target="#pf-legend-scrollspy-anchor-system-locked">more info</a>)</small> can be moved around by <kbd>click</kbd> + <kbd>drag</kbd> the systems security label (top right).<br>
In order to move multiple systems at once, make sure all of them are selected <small>(<a href="#" data-target="#pf-legend-scrollspy-anchor-map-select">more info</a>)</small>. Now you can move one systems and all others will follow.
</p>
<h4 id="pf-legend-scrollspy-anchor-system-contextmenu">Context Menu</h4>
<p>
<kbd>right click</kbd> a system on the map to open the context menu.
</p>
<ul class="list-unstyled well">
<li><i class="fa fa-plus fa-fw"></i> Open the "Add System" dialog and add a new system with a connection to this system</li>
<li><i class="fa fa-lock fa-fw"></i> Lock this system <small><a href="#" data-target="#pf-legend-scrollspy-anchor-system-locked">more info</a></small></li>
<li><i class="fa fa-users fa-fw"></i> Set "Rally Point" for this system <small><a href="#" data-target="#pf-legend-scrollspy-anchor-system-rally">more info</a></small></li>
<li><i class="fa fa-reply fa-rotate-180 fa-fw"></i> Changes the status of this system <small><a href="#" data-target="#pf-legend-scrollspy-anchor-system-status">more info</a></small></li>
<li><i class="fa fa-eraser fa-fw"></i> Delete this system and all connections <small><a href="#" data-target="#pf-legend-scrollspy-anchor-system-delete">more info</a></small></li>
</ul>
<h4 id="pf-legend-scrollspy-anchor-system-locked"><i class="fa fa-lock fa-fw"></i> Locked system</h4>
<p>
Locked systems can´t be selected, moved and deleted.
</p>
<h4 id="pf-legend-scrollspy-anchor-system-rally"><i class="fa fa-users fa-fw"></i> Rally Point</h4>
<p>
Systems can be marked as <span class="pf-system-info-rally"><span class="pf-system-head" style="padding: 0 5px;">Rally Point</span></span>.<br>
Any active pilot will be informed about new "Rally Points" by a notice. Optional you can poke active pilots with "desktop push notifications"
<small>(<i class="fa fa-bullhorn fa-fw"></i><a href="#" data-target="#pf-legend-scrollspy-anchor-notification-desktop">more info</a>)</small>.
</p>
<h4 id="pf-legend-scrollspy-anchor-system-delete"><i class="fa fa-eraser fa-fw"></i> Delete system</h4>
<p>
Any system that is not "Locked" <small>(<i class="fa fa-lock fa-fw"></i><a href="#" data-target="#pf-legend-scrollspy-anchor-system-locked">more info</a>)</small> can be deleted from a map.
</p>
{{! ================================================================================================================================================ }}
<h2 id="pf-legend-connection"><i class="fa fa-chain fa-lg fa-fw"></i>&nbsp;&nbsp;Connection (Stargate / Wormhole)</h2>
<p>
Connections between systems are represented by solid lines. Any connection requires two systems that are connected. A connection can be a <em>"Stargate"</em> or <em>"Wormhole"</em>.
</p>
<h4>Connect Systems</h4>
<p>
Systems can be connected to each other by several ways
</p>
<ul>
<li>Drag-Connect: <kbd>click</kbd><small> a systems name and </small><kbd>drag</kbd><small> a new connection to any other system</small></li>
<li>New System-Connection: <small>Add a system by using the context menu of a system (<a href="#" data-target="#pf-legend-scrollspy-anchor-system-contextmenu">more info</a>)</small></li>
</ul>
<h4 id="pf-legend-scrollspy-anchor-connection-status">Connection Status</h4>
<p>
Wormholes will gain various statuses during its <em>"Lifetime"</em>.<br>
In addition to this, connections can get custom statuses.<br>
The status can be changed by using the context menu <small>(<a href="#" data-target="#pf-legend-scrollspy-anchor-connection-contextmenu">more info</a>)</small>.
</p>
<ul style="list-style: none;">
<li><div class="pf-connection pf-connection-eol"></div> end of life<small> (Wormhole is the end of its natural lifetime)</small></li>
<li><div class="pf-connection"></div> fresh<small> (Has not yet had its stability significantly disrupted)</small></li>
<li><div class="pf-connection pf-connection-reduced"></div> reduced<small> (Wormhole had its stability reduced, but not to a critical degree) &lt;50% mass left</small></li>
<li><div class="pf-connection pf-connection-critical"></div> critical<small> (Wormhole is on the verge of collapse) &lt;10% mass left</small></li>
<li><div class="pf-connection pf-connection-frig"></div> Frigate hole<small> (Only the smallest ships pass through)</small></li>
</ul>
<h4 id="pf-legend-scrollspy-anchor-connection-label"><i class="fa fa-tag fa-fw"></i> Connection Label</h4>
<p>
In addition to its <em>"Lifetime Status" </em><small>(<a href="#" data-target="#pf-legend-scrollspy-anchor-connection-status">more info</a>)</small>, connections can be labeled with custom labels
to supply further information.<br>
Labels can be set by using the context menu <small>(<a href="#" data-target="#pf-legend-scrollspy-anchor-connection-contextmenu">more info</a>)</small>.
</p>
</p>
<ul style="list-style: none;">
<li><span class="label label-warning" style="color: #1d1d1d">frig</span> Frigate hole<small> (Only the smallest ships pass through)</small></li>
<li style="margin-top: 3px;"><span class="label label-danger"><i class="fa fa-warning"></i> save mass</span> save mass<small> (Wormhole mass has to be saved)</small></li>
</ul>
<h4 id="pf-legend-scrollspy-anchor-connection-contextmenu">Context Menu</h4>
<p>
<kbd>right click</kbd> a connection on the map to open the context menu.
</p>
<ul class="list-unstyled well">
<li><i class="fa fa-plane fa-fw"></i> Toggles this connection as <em>"Frigate Hole"</em> <small><a href="#" data-target="#pf-legend-scrollspy-anchor-connection-frig">more info</a></small></li>
<li><i class="fa fa-warning fa-fw"></i> Toggles this connection as <em>"Preserve Mass"</em> <small><a href="#" data-target="#pf-legend-scrollspy-anchor-connection-mass">more info</a></small></li>
<li><i class="fa fa-reply fa-rotate-180 fa-fw"></i> Changes the status of this connection <small><a href="#" data-target="#pf-legend-scrollspy-anchor-connection-status">more info</a></small></li>
<li><i class="fa fa-eraser fa-fw"></i> Delete this connection <small><a href="#" data-target="#pf-legend-scrollspy-anchor-connection-delete">more info</a></small></li>
</ul>
<h4 id="pf-legend-scrollspy-anchor-connection-frig"><i class="fa fa-plane fa-fw"></i> Frigate Hole</h4>
<p>
Wormholes can be labeled <small>(<i class="fa fa-tag fa-fw"></i><a href="#" data-target="#pf-legend-scrollspy-anchor-connection-label">more info</a>)</small> as <em>"Frigate Hole"</em>. Only frigate-sized Spaceships can pass through a <em>"Frigate Hole"</em> <small>(<a href="#" data-target="#pf-legend-scrollspy-anchor-connection-status">more info</a>)</small>.
</p>
<h4 id="pf-legend-scrollspy-anchor-connection-mass"><i class="fa fa-warning fa-fw"></i> Preserve Mass</h4>
<p>
Wormholes can be labeled <small>(<i class="fa fa-tag fa-fw"></i><a href="#" data-target="#pf-legend-scrollspy-anchor-connection-label">more info</a>)</small> as <em>"Preserve Mass"</em>. Let your mates know about critical connections that should be mass-saved
(e.g. <span class="pf-system-sec-highSec">H</span> security exits) <small>(<a href="#" data-target="#pf-legend-scrollspy-anchor-system-security">more info</a>)</small>.
</p>
<h4 id="pf-legend-scrollspy-anchor-connection-delete"><i class="fa fa-eraser fa-fw"></i> Delete connection</h4>
<p>
Existing connections can be detached by several ways
</p>
<ul>
<li>Drag-Connection: <small> <em>"Connection Endpoints"</em> can be </small><kbd>click</kbd> + <kbd>drag</kbd><small> away from its current system</small></li>
<li>Delete-Connection: <small>Delete a connection by using the context menu of a connection (<a href="#" data-target="#pf-legend-scrollspy-anchor-connection-contextmenu">more info</a>)</small></li>
<li>Delete-System: <small>Delete a system by using the context menu of a connection (<a href="#" data-target="#pf-legend-scrollspy-anchor-system-contextmenu">more info</a>)</small></li>
<li>Delete-Systems: <small>Delete multiple systems by using the context menu of a map (<a href="#" data-target="#pf-legend-scrollspy-anchor-map-contextmenu">more info</a>)</small></li>
</ul>
{{! ================================================================================================================================================ }}
<h2 id="pf-legend-signature"><i class="fa fa-table fa-lg fa-fw"></i>&nbsp;&nbsp;Signature</h2>
<p>
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
</p>
{{! ================================================================================================================================================ }}
<h2 id="pf-legend-chart"><i class="fa fa-bar-chart fa-lg fa-fw"></i>&nbsp;&nbsp;Chart</h2>
<p>
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
</p>
{{! ================================================================================================================================================ }}
<h2 id="pf-legend-notification"><i class="fa fa-bullhorn fa-lg fa-fw"></i>&nbsp;&nbsp;Notification</h2>
<h4>Types</h4>
<div class="alert alert-success"><span class="txt-color txt-color-success">Success</span><small> (success message after pilot interaction)</small></div>
<div class="alert alert-info"><span class="txt-color txt-color-information">Information</span><small> (non-important additional information)</small></div>
<div class="alert alert-warning"><span class="txt-color txt-color-warning">Warning</span><small> (important non-critical information)</small></div>
<div class="alert alert-danger"><span class="txt-color txt-color-danger">Danger</span><small> (very imprtant software error information)</small></div>
<h4 id="pf-legend-scrollspy-anchor-notification-desktop">Desktop push notifications</h4>
<p>
<em class="pf-brand">pathfinder</em> supports desktop push notifications. The first time this kind of notification is send to client, a Browser security Question must be confirmed.
In order to test desktop push notifications <kbd>click</kbd> the "Notification test" option in the main menu <small>(<i class="fa fa-bars fa-fw"></i>)</small>.<br>
Events can trigger this kind of notification
</p>
<ul>
<li>New Rally Point</span> <small>(<i class="fa fa-users fa-fw"></i> <a href="#" data-target="#pf-legend-scrollspy-anchor-system-rally">more info</a>)</small></li>
<li>System found with logged of pilots</span><small> (<a href="#">coming soon™</a></small>)</li>
</ul>
</div>

View File

@@ -7,8 +7,8 @@
<textarea style="resize: vertical" rows="3" id="form_result" name="clipboard" class="form-control custom-scroll"></textarea>
<span class="help-block">
Copy and paste signatures from your probe scanning window.
Hit <button onclick="javascript:void(0);" class="btn btn-default btn-xs">Ctrl</button> + <button onclick="javascript:void(0);" class="btn btn-default btn-xs">a</button> (for copy)
then <button onclick="javascript:void(0);" class="btn btn-default btn-xs">Ctrl</button> + <button onclick="javascript:void(0);" class="btn btn-default btn-xs">c</button> (for paste). This tool can add and update signatures.
Hit <kbd>ctrl</kbd> + <kbd>a</kbd> (for copy)
then <kbd>ctrl</kbd> + <kbd>c</kbd> (for paste). This tool can add and update signatures.
</span>
</div>
</div>